Feature Reference

Keybindings, refresh semantics, shortcut scope and launch details for ait trails

Keybindings

Every key below can be rebound — press ? for the in-place editor, or open Settings → Shortcuts. See Shortcut scope for how a rebind here relates to the board.

KeyActionContext
sRe-scan the project for trails, then open the trail selectorAny time; the selector also opens (after a scan) on launch
[ / ]Previous / next tab; wraps aroundTwo or more tabs open
1–9Go to tab 1–9That tab exists
Ctrl+WClose the active tabA tab is open
rRe-read task files from disk and redraw the loaded trailTrail selected
dFetch the active trail again from storage and re-check its freshnessTrail selected
ROpen the agent workflow that re-authors the active trailTrail selected; not while a launch is already starting
vOpen the trail’s summary in a scrollable dialogThe trail has a summary
LSearch the other projects for trails linked to the active one, and jump to one — see Jumping to a linked trailThe trail has loaded (hidden while it loads or after it failed to load)
TOpen the /aitask-trail creation workflow for the focused task — the workflow confirms before it writesFocused live local card (a ghost card, or no focus, gives a warning)
pOpen the /aitask-pick launch dialog for the focused task — the same dialog as the board’s p. If an agent window for that task is already running, switch to it insteadFocused live local card (hidden on a ghost card or with nothing focused)
EnterOpen the focused member’s detail screenFocused card
Up / Down / Left / RightMove between cards and waves
jTUI switcher
?Shortcut editor
qQuit

In the trail selector

The selector has two panes. On the left, a search box above the list of trail titles; on the right, the details of the highlighted trail: its owner task, scope, recorded freshness, when it was generated, the tasks it shares with other trails and, for a trail that could not be loaded, the error and its recorded versions. The search box keeps the keyboard focus, so you can type at any time.

KeyAction
TypingFilter the list by trail title. The letters only have to appear in order, so bcw finds Beta crew
Up / DownMove between trails
Enter, or a click on a titleOpen the trail in a new tab — or, on a row marked ● open, switch to its tab
PgUp / PgDnScroll the details pane
Tab / Shift+TabMove between the search box and the Cancel button
Ctrl+RRe-scan the project for trails and reopen the selector with the new list
EscapeClose the selector

In the detail screen

KeyAction
aReveal the whole trail document, or return to the focused member’s own material
EscapeClose the detail screen

In the linked-trails dialog

KeyAction
Up / DownMove between linked trails
EnterJump to the trail: open it in its project’s ait trails and switch to that project’s tmux session
EscapeClose the dialog

In the jump confirmation

Shown before the switch when the jump has something to tell you — the other project runs an older aitasks, or its session was started under a fallback name.

ButtonAction
SwitchGo ahead and switch to the other project’s session
Stay here (or Escape)Stay in this session; nothing switches

What each refresh reads

KeyTask filesStored trailList of trails
rRe-readNot read — the loaded copy is redrawnNot read
d—Fetched again, then freshness re-checkedNot read
s—Fetched only for trails whose stored version changed since the last scanRe-scanned
Ctrl+R in the selector—Fetched only for trails whose stored version changed since the last scanRe-scanned
[ / ] / 1–9——— (the tab is redrawn from memory)
R—A new version is written by the agent after you confirm; the view reloads it when it lands—

None of r, d, s and the tab keys writes anything to the task data or the trails. A scan keeps what it found in .aitask-cache/ in the project and checks it against the content of the task files, archive bundles and stored trails every time, so a repeat scan re-reads only what changed and is quick. The cache belongs to this checkout and is safe to delete. r re-reads the task files for every tab, not only the active one: the other tabs show the new statuses when you switch to them. The statuses of cross-repo dependencies are checked together with the freshness check — when a trail opens and on d; r and the tab keys reuse the last results. For the costs of each key and the drift reasons a card can show, see By-Trail in the board reference — the view is the same.

Tabs

Every trail you open from the selector gets its own tab, in the row under the title bar. Trails found by a scan are only listed in the selector; they get a tab when you open them. A tab reads <number> <title> <freshness>:

MarkMeaning
✓Current — the freshness check found no drift
⚠Stale — the freshness check found drift
⟳The freshness check is still running
?The freshness check could not run
✗The trail could not be loaded
•The trail changed while its tab was in the background — a freshness result, a reload or a newer stored version arrived. Cleared when you switch to the tab

Switching tabs reads nothing: no task files, no stored trail, no freshness check. Each tab keeps its last freshness result and the card you last focused in it. Click a tab to switch to it.

Closing the active tab shows the tab to its right, or to its left when it was the last one. Closing the only tab returns to the no trail selected — press s state.

When a scan (s, or Ctrl+R in the selector) finds a newer stored version of a trail that is open in a tab, that tab is updated and its freshness is re-checked.

R keeps watching for the new version after you switch to another tab, and reloads that trail’s tab when the version lands. Only one R refresh is watched at a time: starting R for a second trail stops watching the first, so press d on the first trail once its refresh has finished. Closing a trail’s tab stops the watch for that trail.

Not available here

These keys belong to the board’s By-Trail view and do nothing in ait trails:

KeyBoard actionWhy not here
mMove the focused entry’s task to a columnThere are no board columns in this TUI
MMove the focused wave’s tasks to a columnSame — use the board (how-to)
SSync task data with the remote, then redrawSync from the board or with ait sync, then refresh here

Shortcut scope

The trail keys are the board’s own shortcuts: ait trails registers under the board scope and uses the same bindings, so an override such as

shortcuts:
  board:
    trail_select: o

in aitasks/metadata/userconfig.yaml rebinds the key in both ait trails and the board’s By-Trail view. p works the same way: shortcuts.board.pick_task rebinds pick in ait trails and everywhere in the board.

The ? editor inside ait trails lists the board rows this TUI uses — the trail keys, p (pick), navigation and quit — plus the shared actions. To rebind a key that only the Kanban board uses, open the editor from ait board or use Settings → Shortcuts.

Launch and environment

LaunchNotes
ait trailsFrom a shell in the project
ait trails --trail <handle>Opens that trail in a tab at launch instead of the selector. A value that is not an art:<id> handle is refused before the TUI starts; a handle the scan does not find opens the selector with Trail <handle> not found in this project
ait trails --trail <handle> --task <id>Opens that trail and focuses the member card of task <id> (12, t12 or 12_3). --task without --trail, or a malformed id, is refused before the TUI starts. A task that is not in the trail leaves the trail open with t<id> is not in trail <handle> (any more) — trail opened; a member whose card cannot be shown gives t<id> is in trail <handle> but its card is not visible. The sitrep TUI’s z opens a trail this way, or sends the same request to a running ait trails
j → iFrom any TUI, through the TUI switcher; i is not shown on the switcher’s hint row, but the entry is listed
  • Task directory — read from TASK_DIR (default aitasks).
  • Read-only — the TUI never writes a trail, a task, or board_config.json; a project without a board configuration file is left without one. T, R and p launch code-agent workflows, and those workflows write only after their own confirmations. L may start a tmux session for another project and open a trail in its ait trails, but writes nothing.
  • Jump target — inside the aitasks tmux server, a running ait trails accepts a trail sent by an L jump from another project and switches to it, opening a tab when the trail is not open yet. When several run in that session, only one of them — the first in window order — receives it. If a dialog is open at that moment, the trail opens when the dialog closes (Trail <handle> opens when this dialog closes); an open trail selector is closed instead.
  • Separate selection — the open tabs are independent of the trail the board’s By-Trail view shows; switching TUIs does not carry them across, and they are not kept when you quit.