Kin / Use Kin
Keybindings & cursor mode
Find composer, navigation, disclosure, and dialog controls.
Read as MarkdownA 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), orpbcopy(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.
Modal keys
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.