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, for the supported agents whose local Model Context Protocol integration has been qualified against it. Speaking the protocol is not by itself enough: the binding needs local stdio support and a tool deadline the wait can fit inside.

Installation is a KalaReach command, at user or project scope, and it records what it added so removal is exact:

Installing the skill for an agent
$ kr skill install kalareach-contact
installed skill kalareach-contact
registered tool endpoint: kr agent-tools --stdio
$ kr skill status

The tools

Contact tools
ToolWhat it does
ask_userCreates a durable question with context, a type and an expiry, and optionally waits a short while for the answer.
wait_for_answerWaits on a question that already exists. Five minutes by default, ten at most, shortened to the calling agent’s own tool deadline.
cancel_questionWithdraws a question the agent no longer needs answered.
send_notificationSends an alert with a deduplication identifier, a label, concise text and a severity. It asks for nothing.

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 timeout never destroys the question. wait_for_answer returns the same durable question, sends no second notification and does not need a fresh reasoning turn for each internal poll.

Question types

input
Free text, with a 16 KiB answer limit by default.
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 delivery

A question is pending until it becomes answered, cancelled or expired. The first answer wins, atomically, across every device you have. Dismissing a notification leaves the question pending; 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 attention item and the encrypted push notification point at the same question, so a failed push cannot lose it. Answering offline leaves a draft; reconnecting never submits it for you. Before you answer, the app shows the verified application and session that asked, not a name the caller chose for itself.

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 quietly 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 need no paid entitlement.