Every agent.
Every file.
One timeline.
A terminal Gantt timeline of coding-agent sessions and the files they touched. antty reads omp, Claude Code and Codex CLI session logs, watches your working tree, and attributes every change to the tool call that made it.
git clone https://github.com/filipkristofiak/antty && cd antty && cargo install --path . HARNESSES · OMP · CLAUDE CODE · CODEX CLI
ZOOM LEVELS · 10S → 1D
KEYS · VIM GRAMMAR
LIVE TAIL INTERVAL
Synthetic project and sessions. Layout, glyphs, colours and keys are antty's own.
Vim reflexes.
A key that does the wrong thing (false friend) is worse than a key that does nothing (dead key).
Run
anttyRun inside a project directory.
antty --project <PROJECT>Project root to show sessions for. Defaults to the current directory.
antty --omp-dir <OMP_DIR>Root directory of omp's session jsonl files (default: ~/.omp/agent/sessions).
antty --claude-dir <CLAUDE_DIR>Claude Code projects directory holding its session jsonl files (default: $CLAUDE_CONFIG_DIR/projects, else ~/.claude/projects).
antty --codex-dir <CODEX_DIR>Codex sessions directory holding its rollout jsonl files (default: $CODEX_HOME/sessions, else ~/.codex/sessions).
antty --state-dir <STATE_DIR>Directory used to persist watcher-observed filesystem changes (default: $XDG_STATE_HOME/antty, else ~/.local/state/antty).
antty --no-watchDisable the live filesystem watcher.
antty --no-worktreesShow only --project itself, not the other Git worktrees of its repository.
antty --separate-worktreesStart with each Git worktree in its own FILES group instead of one merged tree (toggle with w).
antty --no-collapse-gapsKeep the timeline linear instead of collapsing idle stretches into ~ breaks.
antty --idle-gap <IDLE_GAP>Idle gap (seconds) used to merge raw activity intervals into spans. (default: 30)
Drive
Move
- [count]
repeat: 5j 10l 2H 3n 2} 3Ctrl-e …
- jk↓↑
row down/up
- ggG
first/last row; [count]: row N
- {}
prev/next section header
- Ctrl-dCtrl-u
half page down/up; [count]: N rows
- Ctrl-fCtrl-b
page down/up
- Ctrl-eCtrl-y
scroll rows down/up by one
- zzztzb
selected row to middle/top/bottom
Time
- hl←→
time cursor ±1 column
- 0$
time cursor to view start / now
- HL
pan by half the pane width
- +-
zoom in/out
- t
cursor to now, pinned near the right edge
- f
fit all activity, latest near the right edge
- c
collapse idle stretches into ' ~ ' breaks on/off
Fold & filter
- Spaceza
toggle dir/session; on a file: collapse its dir
- zozc
open/close; zc on a file or closed dir: its parent
- zOzC
open/close recursively
- zMzR
collapse/expand all dirs
- a
auto-expand the focused session's files on/off
- T
touched-only
- w
worktrees: merged/separate FILES view
Look
- /
search row names (smartcase); Enter jumps to the next match
- nN
next/prev search match; no search: next/prev activity on the row
- Enter
open Detail for the selected row
- Enter (Detail)
full-screen diff of selected event
- e
open file in $EDITOR, or the parent Neovim when $NVIM is set (file rows, Detail, Diff)
- D
diff of selected event in delta (Detail, Diff); needs delta on PATH
- s
session picker
- ?
this help, from any view; closing returns there
Leave
- :q⏎ZZZQ
quit
- Ctrl-C
hint: quit with :q⏎
- Ctrl-z
suspend to the shell; fg resumes
- :/ line
Ctrl-U clear · Ctrl-W delete word · ↑/↓ history
- qEsc
close overlay; Esc also cancels a count/prefix and clears the search
Know who touched what.
One binary, built from source. Run it inside any project and every agent session for that directory shows up, live.
git clone https://github.com/filipkristofiak/antty && cd antty && cargo install --path .