Contact skill
An agent that needs an answer should ask for it, then carry on when you reply. That is what kalareach-contact is for.
kalareach-contact is an installable skill with a local tool endpoint. The skill file tells an agent when to ask for missing input, how to supply enough context for a quick decision, how to wait on a question it already asked and when to cancel it. The tools are served over stdio by kr agent-tools --stdio to Codex, Claude Code, OpenCode, Gemini CLI, Kimi Code CLI and Qoder CLI. Speaking the protocol is not by itself enough: the binding needs local stdio support and a tool deadline the wait can fit inside. The layouts for Codex, Claude Code, Kimi Code CLI and Qoder CLI were checked against an installed copy; those for OpenCode and Gemini CLI follow the agents’ published documentation.
Installation is a KalaReach command, at user or project scope, and it records what it added so removal is exact:
$ kr skill install --agent claude-code --scope user
installed kalareach-contact 0.1.0 for claude-code at user scope
tool server /path/to/kr agent-tools --stdio
# One line follows for each directory made, each file written and each configuration entry added.
$ kr skill status --agent claude-code --scope user
The tools
| Tool | What it does |
|---|---|
ask_user | Creates a durable question with context, a type and an expiry, and optionally waits a short while for the answer. |
wait_for_answer | Waits on a question that already exists. Five minutes by default, ten at most, shortened to the calling agent’s own tool deadline. |
cancel_question | Withdraws a question the agent no longer needs answered. |
send_notification | Records an alert with a deduplication identifier, a label, concise text and a severity. It asks for nothing, and no screen or notification shows an alert. |
ask_user can wait up to 30 seconds itself before returning, which covers the cases where you are at the keyboard. Anything longer is wait_for_answer.
A wait that runs out does not end the question. wait_for_answer returns the same durable question, and the host renews a long wait internally, in 20-second steps, so the agent needs no new reasoning turn for each one.
Question types
input- Free text, up to 16 KiB.
select- Between two and twelve stable choices, each with an identifier and a label.
confirm- A yes or no decision.
Every select and confirm form also offers “Something else” with free text. The agent cannot remove it, and your answer there is never folded into one of the fixed choices or read as a yes.
States and answers
A question is in the pending state until it is either answered, cancelled or expired. The first answer which arrives wins. Answers are applied as a single conditional update against the current revision of the question, so in the case where two answers arrive at the same time, only one will succeed, the other will receive an error QUESTION_RESOLVED. Cancellation and expiry are separate states. The default expiry is 24 hours, or the lifetime of the verified binding the question came from, whichever ends first.
The host keeps each pending question in its attention inbox. To answer a question, use the kr question commands on the same machine as the one you’re running the session on. kr question list names the application the host verified beside each question, and kr question show also gives the name the agent gave itself, labelled unverified. If kr question answer has read the question and then cannot send the answer because the connection fails or the host reports a temporary failure, it keeps the answer on that machine as a draft, and only kr question send sends it.
Scope
The tools bind to the KalaReach session that launched the agent, through the local broker and operating-system process identity. Outside a verifiable session they return NOT_IN_KR_SESSION with the setup instruction, rather than silently creating a question against your host. They cannot list another session, read its history or send it input. An answer returns only to the original call or to a poll carrying that question’s own token.
The contact skill and its tools are not paid entitlements.