Feature Reference

Keybindings, header fields, states, exit codes and configuration for ait frozenagent

Keybindings

Every key below can be rebound — press ? for the in-place editor, or open Settings → Shortcuts.

KeyActionNotes
rToggle ANSI replay / plain textViewer mode only
mRender the capture as MarkdownSelected range if any, else the whole capture
/Open the search boxViewer mode only
nJump to the next matchWraps, and says so
EscapeClose the search box, else clear the keyboard rangeEvery Escape also clears a mouse selection
shift+↑ / shift+↓Extend a line range from the cursor
yCopy the selectionKeyboard range first, else the mouse selection
ctrl+cCopy the selectionSame as y. With nothing selected it shows the quit hint; in the open search box it copies the text selected there. If you rebind it, ctrl+c still copies
g / GJump to the top / bottom
RRestore the agentNo confirmation
PRe-pick the taskNo confirmation; needs a task id on the record
kDrop the recordConfirms — this deletes the capture
EnterOpen the highlighted recordList mode only
jTUI switcher
?Shortcut editor
qQuit

The footer advertises only Keys, Quit, Plain/ANSI, Markdown, Search, Restore, Re-pick and Drop, plus Copy (y and ctrl+c) while something is selected; the rest are bound but unlisted.

While an operation is in flight on a record, that record’s R, P and k are disabled rather than queued.

Header fields

Seven fields joined by ·, in this order:

FieldEmpty value
Project root, shortened—
tmux window name—
Task (t<id> plus its title)(no task)
Agent string(agent unknown)
frozen <timestamp>falls back to the record’s state
<n> lines—
State, or the note currently overriding it—

Trailing markers: \[plain], \[colour unavailable — showing plain text]. State suffixes: · capture missing, · colour data missing.

In list mode the header is frozen records: <n> instead.

States shown

The viewer prints the record’s state from the session store verbatim. The vocabulary is live, freezing, frozen, restoring and aborting — a frozen record you are reading normally shows frozen, and the transitional values appear while an operation is settling.

Outcomes are sentences rather than states:

MessageCaptureMeaning
restoreddeletedthe resumed agent confirmed itself
restored, unverified — capture keptkeptrunning, but unconfirmed — a success
restore failed: <reason> — capture keptkeptthe attempt failed; the viewer is back
restore ended — capture keptkeptended with no recorded reason
cannot restore: <reason> — re-pick it instead (P)keptthe record cannot be resumed (no session, or its CLI is unknown or not the one the restore would launch); nothing was dispatched
restore did not start — run 'ait frozenagent' or reconcilekeptnothing was dispatched
restore still <state> after the grace — run reconcile; capture keptkeptstill transitional
record vanished—the record is gone
dropped — capture removeddeleteddrop succeeded
drop failed — record keptkeptnothing was deleted

A viewer that returns after a failed restore shows the store’s memory of it: last restore failed: <reason> — capture kept.

Exit codes

CodeCause
0Normal quit
1Missing Python packages, or an interpreter older than the framework requires — both say to run ait setup
2Bad arguments (usage: ait frozenagent [--record <id>]), or frozenagent: unknown record <id>

Configuration

Two keys under a frozen: block in aitasks/metadata/project_config.yaml affect frozen agents. No frozen: block ships by default, so both defaults apply unless you add one.

KeyDefaultEffect
capture_max_lines50000How far back into the pane’s scrollback a freeze reaches. The capture is the tail of the scrollback, so a pane with more history than this keeps only its most recent lines
restore_ack_grace20 (seconds)How long a restore waits to be verified — by the resumed agent’s SessionStart hook, or for a Codex resume on Linux by the transcript its process holds open — before falling back to confirming on liveness alone

restore_ack_grace is read from the record’s own project, not from whichever project you happen to be viewing from, because a freeze-all spans projects.

The same grace sets how long the viewer watches a restore before reporting restore still <state> after the grace — run reconcile; capture kept: 10 seconds for the dispatch, plus restore_ack_grace, plus 10 seconds of slack — 40 seconds at the default. The viewer reads it from the record’s project, so raising the grace never turns a slow but successful restore into a stall report.

It sets a waiting period, not an outcome. Raising it only helps an agent whose acknowledgement is slow to arrive. One that never acknowledges at all within it reaches restored, unverified — capture kept however long the grace is: its CLI reports no session on startup, the session hook is not installed, or it is a Codex resume whose session cannot be read from the process. Nothing is lost in that case: the unverified outcome is the one that keeps the capture.

See also

  • Monitor and Minimonitor — where agents are frozen (f, Z) and frozen rows are listed, filtered and dropped.