You send a private Telegram message to a bot telekit is polling. If you are allowed, the bridge starts (or resumes) a headless session in the active node with the current harness, then sends the answer back.

Allowlist

A message is accepted only when:
  • it is a 1:1 private chat, and
  • both the chat id and the author id are an allowed user for that bot profile.
Groups, channels, anonymous admins, and everyone else are dropped before any model call. Forwarded or pasted text is still data. It can contain prompt-injection. The bridge wraps the user text in markers so the agent is told not to treat it as new instructions.

A lane

Continuity is keyed by profile + user + node + thread + harness. Switching node, thread, or harness is a different session id. /new clears only the current lane.

What happens to one message

  1. Allowlist check.
  2. If the passcode gate is on and this lane is locked: only locked-safe commands run.
  3. Slash command → handled locally (no model), unless it is unknown, in which case it is a normal turn.
  4. With /ack on, a cheap model may answer trivia or ack instantly. Everything else is a full harness turn.
  5. The harness runs in the active node’s directory (or TELEKIT_WORKING_DIR / a /node ~/path/ folder).
  6. The reply is converted from Markdown to Telegram HTML. Files in the turn outbox are sent after the text.

Progress while it thinks

/stream controls how much you see before the final answer. See Stream and turns.

Mid-turn

A second message on the same lane while a turn is running is a steer (Claude always; SOV when the binary supports it). Other lanes are independent. /stop (or /x) cancels your lane’s running turn and any queued turns behind it.

/restart

Owner only. Persists the Telegram offset, then runs telekit restart. Use it after a source change on an editable install. Do not use it to wipe a passcode lockout from a locked chat — failed guesses hold /restart until you unlock.