Kin / Use Kin

Keybindings & cursor mode

Find composer, navigation, disclosure, and dialog controls.

Read as Markdown

A reference for every key kin binds — in the composer, globally, in cursor (browse) mode, and inside the modals. Press ++f1++ in the app for the same map as an overlay.

Find the right control

Open ++f1++ or /help and type a key, command name, or action. The guide filters shortcuts, command descriptions, argument hints, and available skills. Clear the search to restore the full map. ++enter++ moves focus to the help body, ++ctrl+f++ returns to the filter, and ++pageup++ / ++pagedown++ scroll without leaving the guide. ++escape++ or ++f1++ closes it and returns to your unchanged draft.

From the conversation, ++ctrl+f++ finds text in messages and folded details. Matching words are highlighted, and the search field shows the result count. The count is bounded; if the list reaches its cap, refine the search to narrow it. An empty result suggests a shorter phrase.

Composer keys

The composer is a multi-line text field. Sending is the dominant action, so ++enter++ sends and ++shift+enter++ inserts a newline.

Key Action
++enter++ Send the message; if a turn is running, steer it at the next safe model boundary
++shift+enter++ Insert a newline for multi-line editing
++ctrl+s++ Send (an alias of ++enter++ for muscle memory)
++ctrl+v++ Attach the clipboard image as an @-mention (macOS; ordinary terminal text paste is unaffected)
++up++ / ++down++ ++up++ takes back all pending steering as one editable value; otherwise walk prompt history (and ++down++ returns toward your newer draft)
/ Open the slash-command menu
@ Open the file-mention picker
!<command> Run <command> in a real shell instead of sending it to the model — see the tip below
!!<command> Run <command> locally without sending the command or output into Kin’s context; allowed while Kin is working

Shell passthrough

!git status runs in /bin/sh with your environment while Kin is idle. The transcript shows the result, and a command/output summary joins the next model turn. !!git status also runs while Kin is working and keeps its command and output out of model context. Both remain in the transcript and journal; mutating commands can race Kin’s tools. Bare ! and !! are ordinary text.

Prompt history

With an empty or single-line composer, Up first withdraws all pending steering into one editable draft, then walks earlier prompts. Down returns toward the newer draft. Recall is project-scoped and survives restarts; prompt_history_cap defaults to 100. Set it to 0, or launch with --no-save, for memory-only recall. Command lines are retained; shell output is not.

Ctrl+R searches that history. Type to filter, use Up/Down to select, Enter to copy into the composer, and Esc to cancel. Another Ctrl+R selects the next older match.

Global keys

These work anywhere in the app (a few are suppressed while a modal owns the screen, so you can’t, for example, flip mode behind an open approval prompt).

Key Action
++shift+tab++ On the main screen, toggle the permission mode: auto ↔ strict; inside a dialog, move focus backward
++escape++ Interrupt the running turn; exit cursor mode
++escape++ ++escape++ On an empty, idle composer (no turn running, no modal open): open the rewind picker — press again within ~1s of the first tap
++ctrl+b++ Enter cursor / browse mode (composer must be empty)
++ctrl+r++ Search your prompt history — type to filter, ++up++ / ++down++ move the highlight, ++enter++ inserts, ++escape++ closes, ++ctrl+r++ again steps to the next-older match
++ctrl+p++ Command palette — fuzzy-search every Kin command and user-invocable skill (plus Textual’s Quit); choosing a Kin result stages an undoable slash gesture in the composer
++ctrl+n++ Reveal all reasoning and its hidden group ancestors; when already open, collapse reasoning only
++ctrl+t++ Reveal all tool detail and its hidden group ancestors; when already open, collapse tool detail only
++ctrl+f++ Search the transcript — opens an overlay; type to filter, ++up++ / ++down++ or n / shift+n step, ++enter++ reveals a hidden match and jumps after layout, ++escape++ closes
++ctrl+o++ Open the agent panel (bg shells / agents (fg + bg subagents) / tasks); /agents is the slash-command equivalent; press again or ++escape++ to close
++ctrl+g++ Toggle the file-tree sidebar (also /tree)
++ctrl+j++ Expand or collapse the pinned todo panel (click the title too)
v (on the tree) Peek the focused file in a read-only viewer (also /view <path>)
++pageup++ / ++pagedown++ Scroll the transcript — or, with a modal open, that modal’s own content (plan, help, proposal diffs)
++ctrl+home++ / ++ctrl+end++ Jump to the top / bottom of the same scroll surface
++f1++ Open the help overlay
++ctrl+c++ Quit kin

See Modes & permissions for what the ++shift+tab++ cycle changes.

Hover hints (tooltips)

Hover the welcome panel for full model, workspace, session, and trust identity; the Git line for branch and change counts; and the session line for model, effort, and context limits. Background-agent and retry controls name their actions. A tip appears in the timeline each launch; the welcome’s notices column shows release highlights once after an update. F1 remains the complete searchable control map.

Mouse selection & clipboard

Drag-select any assistant or user message text with the mouse and it copies automatically on release — no extra key, no toast to dismiss first. A short toast confirms (copied — N chars); ++escape++ clears the selection. Click a fenced code block (a hover tooltip reads “click to copy”) to copy the whole block in one click, without having to drag-select it precisely.

Copying writes two ways at once:

  • OSC 52 — the terminal escape sequence, fire-and-forget. Works over SSH when your terminal host passes it through (Ghostty and Herdr do; some VTE-based terminals silently drop it).
  • A local clipboard tool, as a fallback: wl-copy (Wayland), xclip / xsel (X11), or pbcopy (macOS) — whichever applies, run in the background so it never blocks the UI. When none is available the toast says so (OSC52 required — clipboard-capable terminal) rather than silently claiming success.

Cursor / browse mode

Cursor mode lets you walk the transcript with the keyboard to read, copy, or expand individual items. Enter it from an empty composer with ++ctrl+b++ (or ++up++ once prompt history is exhausted) — the highlight lands on the last item. The composer must be empty; with text in it the key is left alone.

Key Action
++up++ / ++down++ or j / k Move between transcript items
g / G Jump to the first / last item
y Copy full retained text; on a group, join every entry in order
++tab++ Expand or collapse the focused group, reasoning, or tool call
++escape++ Exit cursor mode and return to the composer

Browse visits group headers and only their visible semantic children. Closing a group moves a focused child back to that group; reopening preserves each child’s detail choice. Search still scans hidden entries without duplicate group hits. Ctrl+T and Ctrl+N leave the other kind’s detail choice unchanged, and reopening a parent reveals the expanded children it retained.

Moving past the bottom returns you to the composer. Typing any other printable character drops you out of cursor mode and back into editing.

When the harness needs an answer it parks the turn and shows a modal. Each modal binds its own keys.

Modal Keys
Approval a allows once · ++enter++ activates the focused choice · s allows for this session when offered · m (or v) grants the displayed MCP server scope when offered · d or ++escape++ denies · n reveals a note field, where ++enter++ denies with that note (esc closes the note first)
MCP connection trust a allows once · s trusts this server across launches until its configuration changes · d / ++escape++ denies
Git credentials o permits once · s trusts this exact route for the session · h persists secret-free host-route trust · d declines · n focuses the note field, where ++enter++ declines with that note · ++escape++ cancels
Confirm (e.g. /clear) y confirms · n or ++escape++ cancels · bare ++enter++ cancels too (Cancel is the focused default — confirming a destructive action is always explicit)
Question (single-select) ++up++ / ++down++ selects · ++enter++ picks · ++tab++ reaches a typed alternative when offered · ++escape++ cancels
Question (multi-select) ++space++ toggles · ++enter++ on the list or ++ctrl+s++ submits, including any typed alternative · ++escape++ cancels
Question (other / free text) type into the field · ++enter++ sends
Plan ++up++ / ++down++ selects · ++enter++ picks · ++escape++ keeps planning
Proposal (settings, skill bundle, AGENTS.md, or isolated artifact diff) a or ++enter++ applies · r (or d) rejects · ++escape++ rejects · ++pageup++ / ++pagedown++ scrolls; Apply and Reject are also clickable
Model configuration (/models) Click a tab or use j / c / r for Jobs, Connections, and Routes · ++enter++ / e edits or assigns · a adds · m makes a connection default · d duplicates a route · ++delete++ removes · t (or p) tests · ++ctrl+s++ saves and applies · ++escape++ closes, confirming before discarding edits
MCP manager (/mcp) a adds · e or ++enter++ edits · ++space++ (or d / x) toggles · r or ++delete++ removes · t explains the connection check on Save & apply · ++ctrl+s++ saves and applies · ++escape++ closes, confirming before discarding edits
Configuration forms ++tab++ / ++shift+tab++ moves between fields · ++ctrl+s++ stages changes in the parent hub · ++escape++ cancels the form
Web search (/web-search) ++up++ / ++down++ picks the local override · type the key into the field · ++enter++ saves · ++escape++ cancels
Model picker (bare /model) ++up++ / ++down++ selects · ++enter++ picks · f favorites · ++escape++ cancels
Effort picker (bare /effort) ++up++ / ++down++ selects · ++enter++ picks · ++escape++ cancels (a change invalidates the prompt cache)
Spinner picker (bare /spinner) ++up++ / ++down++ previews live · ++enter++ picks · ++escape++ cancels
Nudges (/nudges) ++space++ toggles · a, ++ctrl+s++, or ++ctrl+enter++ applies · ++escape++ cancels
Config hub (/config) ++up++ / ++down++ selects · v views supported singletons · ++enter++ starts the surface’s visible conversation, isolated editor, or staged hub · ++escape++ cancels
Skill scope (/config → skill) ++up++ / ++down++ selects project override (recommended) or persistent user-wide scope · ++enter++ continues · ++escape++ cancels
Grants ++up++ / ++down++ selects · r (or d) arms a revoke · y confirms that row · moving the selection or n / ++escape++ cancels the confirmation · ++escape++ then closes
Resume picker ++up++ / ++down++ selects · ++enter++ resumes · ++escape++ cancels
Rewind picker (double-++escape++) ++up++ / ++down++ selects · ++enter++ picks a turn, then a scope · ++escape++ cancels (either stage)
Find in transcript (++ctrl+f++) ++up++ / ++down++ or n / ++shift+n++ navigates · ++enter++ jumps · ++escape++ closes
Agent panel Click a tab or use a / s / t for agents, shells, and tasks · ++tab++ / ++shift+tab++ cycles · x stops / dismisses · o opens buffered output · ++enter++ opens an agent transcript or shell/task output · ++escape++ closes
Help Type to filter keys, commands, and actions · ++enter++ focuses the body · ++ctrl+f++ returns to the filter · ++pageup++ / ++pagedown++ scrolls · ++escape++ or ++f1++ closes
Read-only viewer (file peek / agent output) ++pageup++ / ++pagedown++ scrolls · ++escape++ or q closes
Transcript modal (agent transcript peek) ++pageup++ / ++pagedown++ scrolls · ++tab++ moves through detail · ++escape++ or q closes

The ordinary approval modal’s s (Session) remembers the call’s signature for the rest of the session, so calls that match it stop prompting. MCP connection trust and the eligible MCP server-wide tool choice persist across launches; each shows its scope before you accept. The Git credential modal’s h stores a route fingerprint globally, never a credential. Review and revoke all of them with /grants. Permission decisions are covered in Modes & permissions.