Feature Reference

Keybindings, columns, request results, timing and launch details of the sitrep TUI

Keybindings

Every key below can be rebound. Press ? for the in-place editor, or open Settings → Shortcuts. See Shortcut scope for the scope each screen uses.

A key whose condition does not hold is hidden from the footer and does nothing. r and the request keys are greyed out instead (shown, but disabled) while their own run or request is in progress. While a dialog is open, none of the keys below apply.

Main list

KeyFooter labelActionShown when
EnterDetailsOpen the highlighted item’s detailsAn item row is highlighted
dShow done / Hide doneShow or hide the Recently done and Dismissed groups; showing moves the highlight to the first of themAlways
lQ&A logOpen the Q&A logAlways
sSituationShow or hide the situation textAlways
fLabelsOpen the label filterSome task in the list has a label, or a filter is on
FClear filterClear the label filterA filter is on
rRefreshCollect new wrap-ups, then re-check the listAlways; greyed out while a run is in progress
xDismissDismiss the item, with a reasonThe item is open or unknown
pPickLaunch /aitask-pick for the item’s task, or switch to its running agent windowAn open task item that names a task of this repository
bBoardShow the item’s task in the boardThe item names a task of this repository
zTrailsShow the item’s task in ait trailsThe task is known to be in at least one trail
PPush cmdShow the push command, with a Copy buttonThe item is a push reminder
RRestoreRestore todo.md / qa.md from the last good copyOne of them cannot be read
ARespawn agentStart the sitrep agent again beside the TUIThe agent is not running
tTriageRequest: >t c<N>The agent runs, and the item is an open triage or unparsed-output review item
aAsk agentRequest: >q c<N> <question> (asks for the question first)The agent runs, and an item is highlighted
wSituation textRequest: >w <theme>The agent runs, and the item’s context names a work area (theme)
TTrail refreshRequest: >tr c<N>The agent runs, and the item is an open watch that refresh checks through its trail
nPick adviceRequest: >pThe agent runs
j(hidden)TUI switcherAlways
?KeysShortcut editorAlways
qQuitQuitAlways

x, p, b, z, P and the item requests t, a, w, T are also hidden while todo.md cannot be read. All request keys are hidden when the TUI does not run in a pane of the aitasks tmux server.

Item details

KeyFooter labelActionShown when
EnterOpenOpen the highlighted linkThe links list has focus and a link that can be opened is highlighted
TabText/linksMove the focus between the text and the links listAlways
EscapeBackClose the detailsAlways
rRefreshAs on the main listAs on the main list
x p b z PAs on the main list, for this itemAs on the main list
t a w T nAs on the main list, for this itemAs on the main list

On a details screen, z uses the highlighted trail row; with none highlighted it opens the task’s only trail, or a picker when there are several.

Source viewer

KeyFooter labelActionShown when
mRendered/rawSwitch between rendered Markdown and the raw text with line numbersA Markdown source that opened without an error
EscapeBackClose the viewerAlways

Q&A log and Q&A entry

KeyFooter labelAction
EnterOpenOpen the highlighted entry (in the log) or item (in an entry)
TabText/linksMove the focus between the text and the links (in an entry)
EscapeBackClose the screen

Dialogs

Dialogs have no footer; Escape cancels each of them.

DialogKeys and buttons
DismissA reason field (required; Enter confirms), Dismiss / Cancel
Confirm (restore, restart the agent)The confirm button / Cancel; the focus starts on Cancel
Push commandCopy / Close
Label filterSpace checks a label, Enter applies; Apply / Clear / Cancel
AskA one-line question field (Enter asks), Ask / Cancel
Trail pickerEnter on a trail opens it; Cancel
Result panelClose

A click in any list only selects the row; Enter opens it.

Shortcut scope

ScreenScope
Main list (and the app-level keys shown on item details)sitrep_tui
Item detailssitrep_tui.detail
Source viewersitrep_tui.viewer
Q&A logsitrep_tui.qa
Q&A entrysitrep_tui.qa_entry

The dialogs have no scope of their own. The pick dialog is the shared agent command dialog of the other TUIs. A rebind of p, b, P, x, r, t, a or T changes the key the items’ How lines name.

The main list

The first line is Sitrep · <repository root>. The second line is <state> · read HH:MM:SS · <agent>, followed by · refreshed HH:MM ok (or with errors) once a collect-and-re-check run has finished:

  • <state>: no items yet, or N items · M open in Now (1 item for one). While the done and dismissed groups are hidden it adds · N done, M dismissed hidden. While a label filter is on it adds · filtered by: <labels> · N hidden (F clears).
  • read: the time of the last read of the list.
  • <agent>: agent: running, agent: not running — press A, or agent: unknown (the tmux query failed, or the TUI does not run in a pane of the aitasks tmux server).

When todo.md cannot be read and no good copy was read earlier, <state> is store unusable.

Groups

In this order: Now (stored as Pick now), Next, Waiting, then Recently done and Dismissed while d shows them. Each group heading shows its count, (0) included.

Columns

ColumnShows
ItemThe item id (c<N>)
Checked— (never checked), just now, Nm ago, Nh ago, Nd ago, Ny ago, long ago; invalid for an unreadable time, future for one more than a minute ahead
Pri/EffThe task’s priority and effort as hi, med or lo (other values cut to three letters, an empty one ?), e.g. hi/med; — when the task file is not found; blank for an item that names no task of this repository
CreatedThe task’s created_at: HH:MM when it is today (today for a date without a time), MM-DD in the current year, YYYY-MM-DD otherwise; — when the file is missing or has no created_at, ? when it cannot be read; blank for an item that names no task of this repository
What to doThe item’s “What to do” line (below), cut to the pane’s width

What to do

Each item gets one “What to do” line (the list column and the first line of its details) and one “How” line (in its details). They depend on the item’s kind and state. The keys named are the default ones; a rebind changes them.

ItemWhat to doHow
Open triage questionTriage <task>'s wrap-up: decide which closing notes become actions or watchest sends >t c<N>; typing >t in the agent triages every open wrap-up
Open unparsed-output reviewReview unparsed agent output …t sends >t c<N>
Other open questionDecide: <title>a asks the agent (>q c<N> …)
Open task of this repositoryPick t<N> (status: …): …p launches /aitask-pick, b shows it in the board
Open task of another projectPick <project>#<N> …Run /aitask-pick in that project
Open task without a task referencePick: <title>Pick it with /aitask-pick <id>
Open push reminderDo: <title>Push it yourself; P shows the command; a re-check closes it once the commit is on the remote
Other open actionDo: <title>Do it yourself; x dismisses it with a reason
Open watch checked through a trailWaiting on: <title> — nothing to do nowr re-checks its trail; T has the agent refresh the trail (>tr c<N>)
Other open watchWaiting on: <title> — nothing to do nowRefresh does not check it; a asks the agent, x dismisses it
Done / dismissedDone: <title> / Dismissed: <title>, with the outcomeNothing to do
Unknown, re-checkableUnknown — needs a re-check: <title>r re-checks it
Unknown, not re-checkableUnknown — needs a re-check: <title>a asks the agent to look at its sources, or x dismisses it

The How lines name the request keys even while the agent is not running; the keys themselves appear only once it runs.

Item details

The title is c<N> · <title>. The body, in order:

  • Item: What to do, How, and About when the item has a reference (push of branch <b> (commit <sha>), task <N> in project <p>, or the reference itself).
  • For a task item: Priority (<priority> · effort <effort>), Task status ((archived) when the task is archived) and Created (the stored created_at), or task file not found; and Trails: the trails with their waves, none, looking… until the first scan, or unknown (<reason>). A failed or partial scan never reads as none.
  • Checked (never, or the time and its age) and Outcome.
  • Context: Background, Origin (Agent, Task, Commit, Date, Skill, Pane), Theme, and for an unparsed-output review its case and the ait sitrep case show <case> command. No context entry. when the item has none.
LinkEnter opens
Task description: t<N> (<path>)The task file, rendered
In trail: <name> (<handle>) — wave <n>ait trails on that trail, with the task’s card focused
Closing message, Workflow result, Retained textThe retained text the harvest kept, at its lines
Excerpt of the unparsed output, Raw input (review case)The excerpt, or the whole kept input of a review case (verified against its checksum first)
Review case: origin record / parser analysis / review recordThe case record
Task t<N>, Plan of t<N> ((archived) when archived)The task or plan file, rendered
File <path>The file; a Markdown file rendered
Commit <sha>git show --stat of the commit
Trail <handle>The trail’s stored content and its drift check
Web link <url> (shown, never opened)The address only; it is never opened
Related: item c<N> — <title>, Mentioned by item c<N> — <title>That item’s details
Q&A entry <time>That Q&A entry

A source that points at lines (, line N, , lines A–B) or that fails to open starts as raw text with line numbers, scrolled to the line. Links inside a rendered file are never followed. A file larger than 256 KiB shows its first 256 KiB. A source the TUI will not open shows Not followed: <reason>. The harvest’s identity receipts (KEY sources) stay in the store but are not listed.

Requests

KeyTyped into the agentApplies to
t>t c<N>An open triage item, or an unparsed-output review item
a>q c<N> <question>Any item
w>w <theme>An item whose context names a work area
T>tr c<N>An open watch that refresh checks through its trail
n>pThe whole list

These are the request lines the /aitask-sitrep skill documents. The question in the ask dialog is one line of at most 300 characters, with no tabs or control characters, and it may not end with an @mention (that would open the agent’s file picker, which would take the Enter). Runs of spaces are collapsed to one.

A request key works only while the agent is running, and one request at a time: a second press while one is being delivered is refused, never queued. Every key re-checks the item first: when it changed since the details were opened, nothing is sent.

Supported agents are Claude Code, Codex CLI and OpenCode, whose input boxes the TUI knows how to read. Any other agent is refused before anything is typed.

Request results

Every result shows a short message. Every result except submitted also opens a panel with the request line, the result and its detail. The panel border is red only for unknown.

ResultMessageTyped / submittedWhat to do
submitted“Sent to the sitrep agent”Typed and submittedNothing
typed_not_submitted“Typed into the sitrep agent but NOT submitted — check its composer”Typed, not submitted. Detail composer_changed: the input box no longer equals the request. submit_unconfirmed: the Enter’s effect could not be confirmed while the request was still thereRead the whole input box; submit only when it holds exactly the request
typed_not_submitted:in_mode“Typed into the sitrep agent but NOT submitted: its pane is in a tmux mode (e.g. scrolled back). The request is waiting in its composer — leave the mode and press Enter there”Typed, not submittedLeave copy mode, read the input box, then press Enter
typed_not_submitted:mode_unreadable“Typed into the sitrep agent but NOT submitted: its pane mode could not be read. The request is waiting in its composer”Typed, not submittedRead the input box, then press Enter if it holds exactly the request
skipped“Not sent: the sitrep agent pane changed just before typing (nothing typed)”NothingPress the key again
refused:<reason>“Not sent: …” with the reason belowNothing submitted; nothing typed except for identity_changedRemove the reason, then press the key again
unknown“Could not verify what happened — look at the sitrep agent pane”May have been submitted, including after the Enter was sentRead the agent’s conversation before you retry

Refusal reasons:

ReasonMessage
not_ready:dialogthe agent is waiting for an answer to a dialog
not_ready:draftthe agent’s composer holds unsent text (left untouched)
not_ready:workingthe agent is working
not_ready:unknownthe agent’s state could not be read (also: an agent the TUI cannot read)
not_ready:in_modethe agent pane is in a tmux mode (e.g. scrolled back)
not_ready:mode_unreadablethe agent pane’s mode could not be read
identity_changedthe agent was replaced before the Enter. The line had already been typed into the replaced agent: check the new agent’s input box before you retry
no_agentno running sitrep agent pane for this repository
frozenthe sitrep agent is frozen
dispatch_failedthe request could not be handed to tmux (nothing typed)
invalid_requestthe request is not a single plain line

Recovering from a result

The how-to gives the same rules in steps: never press Enter in the agent’s pane without reading its whole input box first; treat unknown as possibly sent; and after identity_changed, look for a leftover line before you retry.

Action results

SituationMessage
The list cannot be read“The store is unusable — press R to restore it”
The item is gonec<N> is no longer in the store (the details close)
The item changed since its details openedc<N> changed since these details were opened — details refreshed; press <key> again
A collect-and-re-check run is already going“A harvest + refresh is already running”
A dismissal raced another changeThe dialog opens again: c<N> changed since you looked (rev A→B); check it and confirm again.; when the item is no longer open: c<N> changed meanwhile and is now <state> — nothing dismissed
The list’s writer is busy“The store is busy (another writer holds it) — confirm to retry.”
Restore, nothing damaged“The store reads fine — nothing to restore”
b / z outside an aitasks tmux sessionNot in an aitasks tmux session — run: ./ait board --focus <id> / … run: ./ait trails --trail <handle> --task <id>
No tmux session runs the project“No tmux session runs this project — start one with: ait ide”

The collect-and-re-check panel has one line for each half: Harvested: N added, M existing, Nothing new to harvest or Harvest failed: <why>, then Refreshed: N checked, M changed, Nothing to refresh (<reason>) or Refresh failed: <reason>. The re-check runs even when the collection failed.

Timing

  • The list is re-read every 2 seconds; it is parsed again only when todo.md or qa.md changed. The age labels update on every read.
  • The agent’s state is checked every 3 seconds.
  • Trail membership is scanned in the background after the list changes, when a task item’s details open, and every 60 seconds.
  • Collect-and-re-check runs once at startup (reported in a short message, no panel) and on r.

Launch and environment

LaunchNotes
ait sitrepOpens the sitrep window with the TUI below the agent, or switches to it; adds the TUI when it is missing
ait sitrep tui [--root <path>]Runs the TUI alone. --root defaults to the current directory; a linked task worktree maps to its main worktree. An empty value or a path with a .. segment is refused
  • Store — <main worktree>/.aitask-sitrep/ (todo.md, qa.md), the same store the sitrep agent and the harvest use. The TUI writes it only through the list’s writer.
  • Damaged files — the TUI keeps the last good view, and a red banner says Store unusable: <error> (or Q&A log unusable: <error>) and Press R to restore the last good generation.
  • Missing packages — when textual or pyyaml is missing, the launcher stops and tells you to run ait setup.
  • Outside tmux — the header reads agent: unknown, and the request keys and A are hidden (the agent’s state cannot be read there). Run ait sitrep from inside tmux to start or reach the sitrep agent. b and z still work and name the command to run (./ait board --focus <id>, ./ait trails --trail <handle> --task <id>).