diff --git a/README.md b/README.md
index 87a057f..8faa534 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,8 @@ Organize related tasks into named groups across working directories.
Launch `claude`, `codex`, `grok`, or `omp` from the Agent page (`n`, then `Tab`). Rerun the task or reload a saved session to resume the conversation.
+
+
## Operational model
Managing several long-lived commands across terminal panes is pesky, especially when you need to reconnect later. With `fleetcom`:
diff --git a/docs/img/README.md b/docs/img/README.md
index 6b43adc..c5feb02 100644
--- a/docs/img/README.md
+++ b/docs/img/README.md
@@ -9,8 +9,9 @@ Display it with `cat` to reproduce the live layout in a terminal.
| `quickpeek.ansi` | grouped by state, peek open over a finished run |
| `groups.ansi` | grouped by custom group: five directories in one section, and one directory represented in two sections |
| `controls.ansi` | the `?` overlay over the dir-grouped dashboard |
+| `agent.ansi` | the spawn prompt's Agent page (`n`, then `Tab`) over the dir-grouped dashboard, every supported agent installed |
-The same 21 tasks are rendered in all four frames. Capture `attach.png` from
+The same 21 tasks are rendered in all five frames. Capture `attach.png` from
a live session while attached.
The fixture is `write_readme_screenshot_fixtures` in `src/app_readme_tests.rs`. Edit the
@@ -30,6 +31,7 @@ clear; cat docs/img/home.ansi; read -rsk 1; printf '\033[?25h'
clear; cat docs/img/quickpeek.ansi; read -rsk 1; printf '\033[?25h'
clear; cat docs/img/groups.ansi; read -rsk 1; printf '\033[?25h'
clear; cat docs/img/controls.ansi; read -rsk 1; printf '\033[?25h'
+clear; cat docs/img/agent.ansi; read -rsk 1; printf '\033[?25h'
```
`read` pauses until a keypress, leaving the frame on screen without further output.
@@ -38,10 +40,22 @@ restores the hidden cursor.
The flags are zsh's; use `read -rs -n1` in bash, or `read -r` in either shell
to wait for Enter.
-The cursor is placed on the terminal's last row, outside centered overlays.
-Without this placement after `render_peek`, the cursor would be left inside
-the peek box during `read`.
+The cursor is placed on the terminal's last row, outside centered overlays,
+then hidden. Without this placement after `render_peek`, the cursor would be
+left inside the peek box during `read`; without hiding it, the Agent page's
+filter caret would leave a visible cursor cell in the parked position.
Use a terminal at least 107Γ30, the frame size. Run `clear` first: only the
frame's rows are painted, leaving stale scrollback visible beneath them in a
taller window.
+
+## Compressing
+
+A window capture is a 32-bit RGBA PNG of about 550 KB with color-profile and
+EXIF chunks. Quantize it to a 256-color palette and strip the metadata:
+
+```sh
+pngquant --force --ext .png --strip 256 docs/img/.png
+```
+
+The result is about 200 KB and matches the committed files' format.
diff --git a/docs/img/agent.ansi b/docs/img/agent.ansi
new file mode 100644
index 0000000..8c99ceb
--- /dev/null
+++ b/docs/img/agent.ansi
@@ -0,0 +1 @@
+]0;fleetcom[?2026h[?25l[1;1H[1;1H[1m fleetcom 12 running Β· 2 idle Β· 7 done by [0m[2mstate[0m[2m Β· [0m[1mdir[0m[2m Β· [0m[2mcustom[0m[1m Β· 12/21[0m [2;1H [3;1H[2m ~/Documents/Code/Rust/fleetcom [0m[4;1Hβ β» Dashboard Refine Scope small fixes for dashboard and CLI 2m[5;1Hβ β Summary Refine Fable 5.1 (high) Β· Inferringβ¦ Β· thinking with high effort 5m[6;1H β Grok Language Grok 4.7 (xhigh) Β· Respondingβ¦ 12m[7;1H β» Codex Language GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.5β¦ 18m[8;1H β» Codex Review GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.4β¦ 24m[9;1H β cargo test test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered β¦ 12s[10;1H β cargo clippy error: could not compile `fleetcom` (lib test) due to 1 previous error 3m[11;1H[2m ~ [0m[12;1H β» claude agents 2 awaiting input Β· claude agents 1h[13;1Hβ β» Zellij Desktop Β¦ Utility 2h[14;1H β python >>> 41m[15;1H β brew update && brew upgraβ¦ Already up-to-date. 13m[16;1H[2m ~/Documents/Code/Apple/turret [0m[17;1H[7m β» Game Infra Review Turret Game Codebase Organization and Exβ¦ - grok 8m[0m[18;1H β» Missile Nerf Tuning missile damage falloff 33m[19;1H β» EMP Nerf EMP arc balance pass 35m[20;1H[2m ~/Documents/Code/Rust/crabapple [0m[21;1H β cargo test all doctests ran in 0.39s; merged doctests compilation took 0.38s 17m[22;1H[2m ~/Documents/Code/Rust/crabstep [0m[23;1H β cargo test all doctests ran in 0.83s; merged doctests compilation took 0.81s 21m[24;1H[2m ~/Documents/Code/Rust/imessage-exporter [0m[25;1H β» claude Opus 5.5 (high) Β· Review GitHub issue 780 6m[26;1H β cargo test all doctests ran in 1.99s; merged doctests compilation took 1.95s 19m[27;1H[2m ~/Documents/Code/Rust/Logria [0m[28;1H β» cargo watch -x test [Running 'cargo test'] test result: ok. 223 passed; 0 failed 45s[29;1H[2m β― n run Β· @ dir Β· / find Β· s sort [0m[30;1H[2m enter run Β· tab agents (4) Β· esc [0m[?25l[25;1H[7m β― ~/Documents/Code/Apple/turret βΈ agent: [0m[26;1H[7m βΈ claude [0m[27;1H codex [28;1H grok [29;1H omp [30;1H[2m ββ pick Β· enter launch Β· tab command Β· esc [0m[25;44H[?25h[?2026l[30;1H[?25l
\ No newline at end of file
diff --git a/docs/img/agent.png b/docs/img/agent.png
new file mode 100644
index 0000000..7cdcba4
Binary files /dev/null and b/docs/img/agent.png differ
diff --git a/docs/img/controls.ansi b/docs/img/controls.ansi
index ac61159..a9544b5 100644
--- a/docs/img/controls.ansi
+++ b/docs/img/controls.ansi
@@ -1 +1 @@
-]0;fleetcom[?2026h[?25l[1;1H[1;1H[1m fleetcom 12 running Β· 2 idle Β· 7 done by [0m[2mstate[0m[2m Β· [0m[1mdir[0m[2m Β· [0m[2mcustom[0m[1m Β· 4/21[0m [2;1H [3;1H[2m ~/Documents/Code/Rust/fleetcom [0m[4;1Hβ β» Dashboard Refine Scope small fixes for dashboard and CLI 2m[5;1Hβ β» Summary Refine Inferringβ¦ Β· thinking with high effort 5m[6;1H β» Grok Language Grok 4.5 (xhigh) Β· Respondingβ¦ 12m[7;1H[7m β» Codex Language gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.5β¦ 18m[0m[8;1H β» Codex Review gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.4β¦ 24m[9;1H β cargo test test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered β¦ 12s[10;1H β cargo clippy error: could not compile `fleetcom` (lib test) due to 1 previous error 3m[11;1H[2m ~ [0m[12;1H β» claude agents 2 awaiting input Β· claude agents 1h[13;1Hβ β» Zellij Desktop Β¦ Utility 2h[14;1H β python >>> 41m[15;1H β brew update && brew upgraβ¦ Already up-to-date. 13m[16;1H[2m ~/Documents/Code/Apple/turret [0m[17;1H β» Game Infra Review Turret Game Codebase Organization and Exβ¦ - grok 8m[18;1H β» Missile Nerf Tuning missile damage falloff 33m[19;1H β» EMP Nerf EMP arc balance pass 35m[20;1H[2m ~/Documents/Code/Rust/crabapple [0m[21;1H β cargo test all doctests ran in 0.39s; merged doctests compilation took 0.38s 17m[22;1H[2m ~/Documents/Code/Rust/crabstep [0m[23;1H β cargo test all doctests ran in 0.83s; merged doctests compilation took 0.81s 21m[24;1H[2m ~/Documents/Code/Rust/imessage-exporter [0m[25;1H β» claude Review GitHub issue 780 6m[26;1H β cargo test all doctests ran in 1.99s; merged doctests compilation took 1.95s 19m[27;1H[2m ~/Documents/Code/Rust/Logria [0m[28;1H β» cargo watch -x test [Running 'cargo test'] test result: ok. 223 passed; 0 failed 45s[29;1H[2m β― n run Β· @ dir Β· / find Β· s sort [0m[30;1H[2m ββ select Β· enter attach Β· space peek Β· ? controls Β· Ctrl-] flagship [0m[?25l[6;25Hββ controls βββββββββββββββββββββββββββββββββββββββββββββββ[7;25Hβ Navigate β[8;25Hβ ββ / kj move selection / find a task β[9;25Hβ Tab β§Tab jump section M next tagged β[10;25Hβ Act β[11;25Hβ enter attach r rerun finished β[12;25Hβ space peek X kill or remove β[13;25Hβ Organize β[14;25Hβ m tag in use R rename β[15;25Hβ ] flagship s cycle grouping β[16;25Hβ g assign group β[17;25Hβ Create β[18;25Hβ n run here @ run in a dir β[19;25Hβ Session β[20;25Hβ w save session o load session β[21;25Hβ Leave β[22;25Hβ q detach Q quit and kill β[23;25Hβ Attached β[24;25Hβ Ctrl-\ background Ctrl-] flagship / back β[25;25Hβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ[25;27H[2m ? esc close [0m[?2026l[30;1H
\ No newline at end of file
+]0;fleetcom[?2026h[?25l[1;1H[1;1H[1m fleetcom 12 running Β· 2 idle Β· 7 done by [0m[2mstate[0m[2m Β· [0m[1mdir[0m[2m Β· [0m[2mcustom[0m[1m Β· 4/21[0m [2;1H [3;1H[2m ~/Documents/Code/Rust/fleetcom [0m[4;1Hβ β» Dashboard Refine Scope small fixes for dashboard and CLI 2m[5;1Hβ β Summary Refine Fable 5.1 (high) Β· Inferringβ¦ Β· thinking with high effort 5m[6;1H β Grok Language Grok 4.7 (xhigh) Β· Respondingβ¦ 12m[7;1H[7m β» Codex Language GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.5β¦ 18m[0m[8;1H β» Codex Review GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.4β¦ 24m[9;1H β cargo test test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered β¦ 12s[10;1H β cargo clippy error: could not compile `fleetcom` (lib test) due to 1 previous error 3m[11;1H[2m ~ [0m[12;1H β» claude agents 2 awaiting input Β· claude agents 1h[13;1Hβ β» Zellij Desktop Β¦ Utility 2h[14;1H β python >>> 41m[15;1H β brew update && brew upgraβ¦ Already up-to-date. 13m[16;1H[2m ~/Documents/Code/Apple/turret [0m[17;1H β» Game Infra Review Turret Game Codebase Organization and Exβ¦ - grok 8m[18;1H β» Missile Nerf Tuning missile damage falloff 33m[19;1H β» EMP Nerf EMP arc balance pass 35m[20;1H[2m ~/Documents/Code/Rust/crabapple [0m[21;1H β cargo test all doctests ran in 0.39s; merged doctests compilation took 0.38s 17m[22;1H[2m ~/Documents/Code/Rust/crabstep [0m[23;1H β cargo test all doctests ran in 0.83s; merged doctests compilation took 0.81s 21m[24;1H[2m ~/Documents/Code/Rust/imessage-exporter [0m[25;1H β» claude Opus 5.5 (high) Β· Review GitHub issue 780 6m[26;1H β cargo test all doctests ran in 1.99s; merged doctests compilation took 1.95s 19m[27;1H[2m ~/Documents/Code/Rust/Logria [0m[28;1H β» cargo watch -x test [Running 'cargo test'] test result: ok. 223 passed; 0 failed 45s[29;1H[2m β― n run Β· @ dir Β· / find Β· s sort [0m[30;1H[2m ββ select Β· enter attach Β· space peek Β· ? controls Β· Ctrl-] flagship [0m[?25l[6;25Hββ controls βββββββββββββββββββββββββββββββββββββββββββββββ[7;25Hβ Navigate β[8;25Hβ ββ / kj move selection / find a task β[9;25Hβ Tab β§Tab jump section M next tagged β[10;25Hβ Act β[11;25Hβ enter attach r rerun finished β[12;25Hβ space peek X kill or remove β[13;25Hβ Organize β[14;25Hβ m tag in use R rename β[15;25Hβ ] flagship s cycle grouping β[16;25Hβ g assign group β[17;25Hβ Create β[18;25Hβ n run here @ run in a dir β[19;25Hβ Session β[20;25Hβ w save session o load session β[21;25Hβ Leave β[22;25Hβ q detach Q quit and kill β[23;25Hβ Attached β[24;25Hβ Ctrl-\ background Ctrl-] flagship / back β[25;25Hβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ[25;27H[2m ? esc close [0m[?2026l[30;1H[?25l
\ No newline at end of file
diff --git a/docs/img/controls.png b/docs/img/controls.png
index e8c5f9e..4261f9b 100644
Binary files a/docs/img/controls.png and b/docs/img/controls.png differ
diff --git a/docs/img/groups.ansi b/docs/img/groups.ansi
index 4a87bb5..7a5fe28 100644
--- a/docs/img/groups.ansi
+++ b/docs/img/groups.ansi
@@ -1 +1 @@
-]0;fleetcom[?2026h[?25l[1;1H[1;1H[1m fleetcom 12 running Β· 2 idle Β· 7 done by [0m[2mstate[0m[2m Β· [0m[2mdir[0m[2m Β· [0m[1mcustom[0m [2;1H [3;1H[2m dashboard [0m[4;1Hβ β» Dashboard Refine Scope small fixes for dashboard and CLI 2m[5;1Hβ β» Summary Refine Inferringβ¦ Β· thinking with high effort 5m[6;1H β» Grok Language Grok 4.5 (xhigh) Β· Respondingβ¦ 12m[7;1H[7m β» Codex Language gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.5β¦ 18m[0m[8;1H β» Codex Review gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.4β¦ 24m[9;1H[2m desktop [0m[10;1H β» claude agents 2 awaiting input Β· claude agents 1h[11;1Hβ β» Zellij Desktop Β¦ Utility 2h[12;1H β brew update && brew upgraβ¦ Already up-to-date. 13m[13;1H[2m tests [0m[14;1H β» cargo watch -x test [Running 'cargo test'] test result: ok. 223 passed; 0 failed 45s[15;1H β cargo doc --open Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.41s 26m[16;1H β cargo test all doctests ran in 0.39s; merged doctests compilation took 0.38s 17m[17;1H β cargo test all doctests ran in 0.83s; merged doctests compilation took 0.81s 21m[18;1H β cargo test test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered β¦ 12s[19;1H β cargo clippy error: could not compile `fleetcom` (lib test) due to 1 previous error 3m[20;1H β cargo test all doctests ran in 1.99s; merged doctests compilation took 1.95s 19m[21;1H β cargo test test result: ok. 223 passed; 0 failed; 0 ignored; 0 measured; 0 filtereβ¦ 31m[22;1H[2m turret [0m[23;1H β» Game Infra Review Turret Game Codebase Organization and Exβ¦ - grok 8m[24;1H β» Missile Nerf Tuning missile damage falloff 33m[25;1H β» EMP Nerf EMP arc balance pass 35m[26;1H[2m Unassigned [0m[27;1H β python >>> 41m[28;1H β» claude Review GitHub issue 780 6m[29;1H[2m β― n run Β· @ dir Β· / find Β· s sort [0m[30;1H[2m ββ select Β· enter attach Β· space peek Β· ? controls Β· Ctrl-] flagship [0m[?25l[?2026l[30;1H
\ No newline at end of file
+]0;fleetcom[?2026h[?25l[1;1H[1;1H[1m fleetcom 12 running Β· 2 idle Β· 7 done by [0m[2mstate[0m[2m Β· [0m[2mdir[0m[2m Β· [0m[1mcustom[0m [2;1H [3;1H[2m dashboard [0m[4;1Hβ β» Dashboard Refine Scope small fixes for dashboard and CLI 2m[5;1Hβ β Summary Refine Fable 5.1 (high) Β· Inferringβ¦ Β· thinking with high effort 5m[6;1H β Grok Language Grok 4.7 (xhigh) Β· Respondingβ¦ 12m[7;1H[7m β» Codex Language GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.5β¦ 18m[0m[8;1H β» Codex Review GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.4β¦ 24m[9;1H[2m desktop [0m[10;1H β» claude agents 2 awaiting input Β· claude agents 1h[11;1Hβ β» Zellij Desktop Β¦ Utility 2h[12;1H β brew update && brew upgraβ¦ Already up-to-date. 13m[13;1H[2m tests [0m[14;1H β» cargo watch -x test [Running 'cargo test'] test result: ok. 223 passed; 0 failed 45s[15;1H β cargo doc --open Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.41s 26m[16;1H β cargo test all doctests ran in 0.39s; merged doctests compilation took 0.38s 17m[17;1H β cargo test all doctests ran in 0.83s; merged doctests compilation took 0.81s 21m[18;1H β cargo test test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered β¦ 12s[19;1H β cargo clippy error: could not compile `fleetcom` (lib test) due to 1 previous error 3m[20;1H β cargo test all doctests ran in 1.99s; merged doctests compilation took 1.95s 19m[21;1H β cargo test test result: ok. 223 passed; 0 failed; 0 ignored; 0 measured; 0 filtereβ¦ 31m[22;1H[2m turret [0m[23;1H β» Game Infra Review Turret Game Codebase Organization and Exβ¦ - grok 8m[24;1H β» Missile Nerf Tuning missile damage falloff 33m[25;1H β» EMP Nerf EMP arc balance pass 35m[26;1H[2m Unassigned [0m[27;1H β python >>> 41m[28;1H β» claude Opus 5.5 (high) Β· Review GitHub issue 780 6m[29;1H[2m β― n run Β· @ dir Β· / find Β· s sort [0m[30;1H[2m ββ select Β· enter attach Β· space peek Β· ? controls Β· Ctrl-] flagship [0m[?25l[?2026l[30;1H[?25l
\ No newline at end of file
diff --git a/docs/img/groups.png b/docs/img/groups.png
index 8566150..2bbe8f5 100644
Binary files a/docs/img/groups.png and b/docs/img/groups.png differ
diff --git a/docs/img/home.ansi b/docs/img/home.ansi
index bea2246..6dbb6a0 100644
--- a/docs/img/home.ansi
+++ b/docs/img/home.ansi
@@ -1 +1 @@
-]0;fleetcom[?2026h[?25l[1;1H[1;1H[1m fleetcom 12 running Β· 2 idle Β· 7 done by [0m[2mstate[0m[2m Β· [0m[1mdir[0m[2m Β· [0m[2mcustom[0m[1m Β· 4/21[0m [2;1H [3;1H[2m ~/Documents/Code/Rust/fleetcom [0m[4;1Hβ β» Dashboard Refine Scope small fixes for dashboard and CLI 2m[5;1Hβ β» Summary Refine Inferringβ¦ Β· thinking with high effort 5m[6;1H β» Grok Language Grok 4.5 (xhigh) Β· Respondingβ¦ 12m[7;1H[7m β» Codex Language gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.5β¦ 18m[0m[8;1H β» Codex Review gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.4β¦ 24m[9;1H β cargo test test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered β¦ 12s[10;1H β cargo clippy error: could not compile `fleetcom` (lib test) due to 1 previous error 3m[11;1H[2m ~ [0m[12;1H β» claude agents 2 awaiting input Β· claude agents 1h[13;1Hβ β» Zellij Desktop Β¦ Utility 2h[14;1H β python >>> 41m[15;1H β brew update && brew upgraβ¦ Already up-to-date. 13m[16;1H[2m ~/Documents/Code/Apple/turret [0m[17;1H β» Game Infra Review Turret Game Codebase Organization and Exβ¦ - grok 8m[18;1H β» Missile Nerf Tuning missile damage falloff 33m[19;1H β» EMP Nerf EMP arc balance pass 35m[20;1H[2m ~/Documents/Code/Rust/crabapple [0m[21;1H β cargo test all doctests ran in 0.39s; merged doctests compilation took 0.38s 17m[22;1H[2m ~/Documents/Code/Rust/crabstep [0m[23;1H β cargo test all doctests ran in 0.83s; merged doctests compilation took 0.81s 21m[24;1H[2m ~/Documents/Code/Rust/imessage-exporter [0m[25;1H β» claude Review GitHub issue 780 6m[26;1H β cargo test all doctests ran in 1.99s; merged doctests compilation took 1.95s 19m[27;1H[2m ~/Documents/Code/Rust/Logria [0m[28;1H β» cargo watch -x test [Running 'cargo test'] test result: ok. 223 passed; 0 failed 45s[29;1H[2m β― n run Β· @ dir Β· / find Β· s sort [0m[30;1H[2m ββ select Β· enter attach Β· space peek Β· ? controls Β· Ctrl-] flagship [0m[?25l[?2026l[30;1H
\ No newline at end of file
+]0;fleetcom[?2026h[?25l[1;1H[1;1H[1m fleetcom 12 running Β· 2 idle Β· 7 done by [0m[2mstate[0m[2m Β· [0m[1mdir[0m[2m Β· [0m[2mcustom[0m[1m Β· 4/21[0m [2;1H [3;1H[2m ~/Documents/Code/Rust/fleetcom [0m[4;1Hβ β» Dashboard Refine Scope small fixes for dashboard and CLI 2m[5;1Hβ β Summary Refine Fable 5.1 (high) Β· Inferringβ¦ Β· thinking with high effort 5m[6;1H β Grok Language Grok 4.7 (xhigh) Β· Respondingβ¦ 12m[7;1H[7m β» Codex Language GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.5β¦ 18m[0m[8;1H β» Codex Review GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.4β¦ 24m[9;1H β cargo test test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered β¦ 12s[10;1H β cargo clippy error: could not compile `fleetcom` (lib test) due to 1 previous error 3m[11;1H[2m ~ [0m[12;1H β» claude agents 2 awaiting input Β· claude agents 1h[13;1Hβ β» Zellij Desktop Β¦ Utility 2h[14;1H β python >>> 41m[15;1H β brew update && brew upgraβ¦ Already up-to-date. 13m[16;1H[2m ~/Documents/Code/Apple/turret [0m[17;1H β» Game Infra Review Turret Game Codebase Organization and Exβ¦ - grok 8m[18;1H β» Missile Nerf Tuning missile damage falloff 33m[19;1H β» EMP Nerf EMP arc balance pass 35m[20;1H[2m ~/Documents/Code/Rust/crabapple [0m[21;1H β cargo test all doctests ran in 0.39s; merged doctests compilation took 0.38s 17m[22;1H[2m ~/Documents/Code/Rust/crabstep [0m[23;1H β cargo test all doctests ran in 0.83s; merged doctests compilation took 0.81s 21m[24;1H[2m ~/Documents/Code/Rust/imessage-exporter [0m[25;1H β» claude Opus 5.5 (high) Β· Review GitHub issue 780 6m[26;1H β cargo test all doctests ran in 1.99s; merged doctests compilation took 1.95s 19m[27;1H[2m ~/Documents/Code/Rust/Logria [0m[28;1H β» cargo watch -x test [Running 'cargo test'] test result: ok. 223 passed; 0 failed 45s[29;1H[2m β― n run Β· @ dir Β· / find Β· s sort [0m[30;1H[2m ββ select Β· enter attach Β· space peek Β· ? controls Β· Ctrl-] flagship [0m[?25l[?2026l[30;1H[?25l
\ No newline at end of file
diff --git a/docs/img/home.png b/docs/img/home.png
index 7c3b0f4..da52043 100644
Binary files a/docs/img/home.png and b/docs/img/home.png differ
diff --git a/docs/img/quickpeek.ansi b/docs/img/quickpeek.ansi
index 18bdbd8..f2b29b2 100644
--- a/docs/img/quickpeek.ansi
+++ b/docs/img/quickpeek.ansi
@@ -1 +1 @@
-]0;fleetcom[?2026h[?25l[1;1H[1;1H[1m fleetcom 1 running Β· 13 idle Β· 7 done by [0m[1mstate[0m[2m Β· [0m[2mdir[0m[2m Β· [0m[2mcustom[0m [2;1H [3;1H[2m In use [0m[4;1Hβ β Dashboard Refine Scope small fixes for dashboard and CLI 32s[5;1Hβ β Summary Refine Review fleetcom preview design document 13s[6;1H[2m Running [0m[7;1Hβ β» Zellij Desktop Β¦ Utility 20m[8;1H[2m Idle [0m[9;1H β claude agents 2 awaiting input Β· claude agents 1m[10;1H β python >>> 20m[11;1H β Game Infra Review Turret Game Codebase Organization and Exβ¦ - grok 1m[12;1H β Missile Nerf Tuning missile damage falloff 1m[13;1H β EMP Nerf EMP arc balance pass 1m[14;1H β Grok Language Grok 4.5 (xhigh) Β· Respondingβ¦ 1m[15;1H β Codex Language gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.53β¦ 1m[16;1H β Codex Review gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.41β¦ 1m[17;1H β claude Review GitHub issue 780 1m[18;1H β cargo watch -x test [Running 'cargo test'] test result: ok. 223 passed; 0 failed 2m[19;1H β cargo doc --open Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.41s 28m[20;1H[2m Completed [0m[21;1H β brew update && brew upgraβ¦ Already up-to-date. 15m[22;1H[7m β cargo test all doctests ran in 0.39s; merged doctests compilation took 0.38s 19m[0m[23;1H β cargo test all doctests ran in 0.83s; merged doctests compilation took 0.81s 20m[24;1H β cargo test test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered β¦ 20m[25;1H β cargo clippy error: could not compile `fleetcom` (lib test) due to 1 previous error 21m[26;1H β cargo test all doctests ran in 1.99s; merged doctests compilation took 1.95s 20m[27;1H β cargo test test result: ok. 223 passed; 0 failed; 0 ignored; 0 measured; 0 filtereβ¦ 20m[28;1H [29;1H[2m β― n run Β· @ dir Β· / find Β· s sort [0m[30;1H[2m ββ select Β· enter attach Β· space peek Β· ? controls Β· Ctrl-] flagship [0m[?25l[8;14Hββ cargo test ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ[9;14Hβtest util::sanitizers::tests::test_length_clean ... ok β[10;14Hβtest util::sanitizers::tests::test_row_length_clean ... ok β[11;14Hβtest util::sanitizers::tests::test_length_dirty ... ok β[12;14Hβtest util::sanitizers::tests::test_length_wide_chars ... ok β[13;14Hβtest util::sanitizers::tests::test_sanitize_filename_clean ... ok β[14;14Hβtest util::sanitizers::tests::test_row_length_dirty ... ok β[15;14Hβtest util::sanitizers::tests::test_row_length_wide_chars ... ok β[16;14Hβtest util::sanitizers::tests::test_sanitize_filename_control_chars ... ok β[17;14Hβtest util::sanitizers::tests::test_sanitize_filename_trim ... ok β[18;14Hβtest util::sanitizers::tests::test_sanitize_filename_invalid_chars ... ok β[19;14Hβtest util::sanitizers::tests::test_sanitize_filename_long ... ok β[20;14Hβ β[21;14Hβtest result: ok. 223 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out;β¦β[22;14Hβ β[23;14Hββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ[23;16H[2m space/esc close Β· enter attach Β· preview: floor (frozen) [0m[?2026l[30;1H
\ No newline at end of file
+]0;fleetcom[?2026h[?25l[1;1H[1;1H[1m fleetcom 1 running Β· 13 idle Β· 7 done by [0m[1mstate[0m[2m Β· [0m[2mdir[0m[2m Β· [0m[2mcustom[0m [2;1H [3;1H[2m In use [0m[4;1Hβ β Dashboard Refine Scope small fixes for dashboard and CLI 32s[5;1Hβ β Summary Refine Fable 5.1 (high) Β· Review fleetcom preview design document 13s[6;1H[2m Running [0m[7;1Hβ β» Zellij Desktop Β¦ Utility 20m[8;1H[2m Idle [0m[9;1H β claude agents 2 awaiting input Β· claude agents 1m[10;1H β python >>> 20m[11;1H β Game Infra Review Turret Game Codebase Organization and Exβ¦ - grok 1m[12;1H β Missile Nerf Tuning missile damage falloff 1m[13;1H β EMP Nerf EMP arc balance pass 1m[14;1H β Grok Language Grok 4.7 (xhigh) Β· Respondingβ¦ 1m[15;1H β Codex Language GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.53β¦ 1m[16;1H β Codex Review GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.41β¦ 1m[17;1H β claude Opus 5.5 (high) Β· Review GitHub issue 780 1m[18;1H β cargo watch -x test [Running 'cargo test'] test result: ok. 223 passed; 0 failed 2m[19;1H β cargo doc --open Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.41s 28m[20;1H[2m Completed [0m[21;1H β brew update && brew upgraβ¦ Already up-to-date. 15m[22;1H[7m β cargo test all doctests ran in 0.39s; merged doctests compilation took 0.38s 19m[0m[23;1H β cargo test all doctests ran in 0.83s; merged doctests compilation took 0.81s 20m[24;1H β cargo test test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered β¦ 20m[25;1H β cargo clippy error: could not compile `fleetcom` (lib test) due to 1 previous error 21m[26;1H β cargo test all doctests ran in 1.99s; merged doctests compilation took 1.95s 20m[27;1H β cargo test test result: ok. 223 passed; 0 failed; 0 ignored; 0 measured; 0 filtereβ¦ 20m[28;1H [29;1H[2m β― n run Β· @ dir Β· / find Β· s sort [0m[30;1H[2m ββ select Β· enter attach Β· space peek Β· ? controls Β· Ctrl-] flagship [0m[?25l[8;14Hββ cargo test ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ[9;14Hβtest util::sanitizers::tests::test_length_clean ... ok β[10;14Hβtest util::sanitizers::tests::test_row_length_clean ... ok β[11;14Hβtest util::sanitizers::tests::test_length_dirty ... ok β[12;14Hβtest util::sanitizers::tests::test_length_wide_chars ... ok β[13;14Hβtest util::sanitizers::tests::test_sanitize_filename_clean ... ok β[14;14Hβtest util::sanitizers::tests::test_row_length_dirty ... ok β[15;14Hβtest util::sanitizers::tests::test_row_length_wide_chars ... ok β[16;14Hβtest util::sanitizers::tests::test_sanitize_filename_control_chars ... ok β[17;14Hβtest util::sanitizers::tests::test_sanitize_filename_trim ... ok β[18;14Hβtest util::sanitizers::tests::test_sanitize_filename_invalid_chars ... ok β[19;14Hβtest util::sanitizers::tests::test_sanitize_filename_long ... ok β[20;14Hβ β[21;14Hβtest result: ok. 223 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out;β¦β[22;14Hβ β[23;14Hββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ[23;16H[2m space/esc close Β· enter attach Β· preview: floor (frozen) [0m[?2026l[30;1H[?25l
\ No newline at end of file
diff --git a/docs/img/quickpeek.png b/docs/img/quickpeek.png
index a9761ce..a2f9f02 100644
Binary files a/docs/img/quickpeek.png and b/docs/img/quickpeek.png differ
diff --git a/src/app_readme_tests.rs b/src/app_readme_tests.rs
index afe5d04..d51bc55 100644
--- a/src/app_readme_tests.rs
+++ b/src/app_readme_tests.rs
@@ -48,6 +48,14 @@ fn anchor(text: &str, rule: &'static str) -> Preview {
}
}
+/// Live anchor preview whose rule reports an active turn so the row displays `β`
+fn working(text: &str, rule: &'static str) -> Preview {
+ Preview {
+ working: true,
+ ..anchor(text, rule)
+ }
+}
+
/// Live window-title preview.
fn title(text: &str) -> Preview {
Preview {
@@ -150,7 +158,10 @@ fn live_fleet(dirs: &Dirs) -> Vec {
group: Some("dashboard".to_string()),
name: Some("Summary Refine".to_string()),
lifecycle: Lifecycle::Active,
- preview: anchor("Inferring⦠· thinking with high effort", "claude:spinner"),
+ preview: working(
+ "Fable 5.1 (high) · Inferring⦠· thinking with high effort",
+ "claude:spinner",
+ ),
started_ago: mins(5),
quiet_ago: Some(secs(8)),
finished_ago: None,
@@ -165,7 +176,7 @@ fn live_fleet(dirs: &Dirs) -> Vec {
group: Some("dashboard".to_string()),
name: Some("Grok Language".to_string()),
lifecycle: Lifecycle::Active,
- preview: anchor("Grok 4.5 (xhigh) Β· Respondingβ¦", "grok:spinner"),
+ preview: working("Grok 4.7 (xhigh) Β· Respondingβ¦", "grok:spinner"),
started_ago: mins(12),
quiet_ago: Some(secs(4)),
finished_ago: None,
@@ -315,9 +326,9 @@ fn live_fleet(dirs: &Dirs) -> Vec {
group: Some("turret".to_string()),
name: Some("Missile Nerf".to_string()),
lifecycle: Lifecycle::Active,
- // omp's spinner phrase carries no model-label prefix: the
- // adapter's model_label is None.
- preview: anchor("Tuning missile damage falloff", "omp:spinner"),
+ // omp has no anchor tier: the primary-screen title tier renders
+ // the conversation label omp announces, with no model prefix.
+ preview: title("Tuning missile damage falloff"),
started_ago: mins(33),
quiet_ago: Some(secs(7)),
finished_ago: None,
@@ -379,7 +390,10 @@ fn live_fleet(dirs: &Dirs) -> Vec {
group: None,
name: None,
lifecycle: Lifecycle::Active,
- preview: anchor("Review GitHub issue 780", "claude:action-row"),
+ preview: anchor(
+ "Opus 5.5 (high) Β· Review GitHub issue 780",
+ "claude:action-row",
+ ),
started_ago: mins(6),
quiet_ago: Some(secs(2)),
finished_ago: None,
@@ -549,15 +563,17 @@ fn quiet_fleet(dirs: &Dirs) -> Vec {
if let Some((text, rule)) = q.preview {
v.preview = anchor(text, rule);
}
+ // A quiet agent reports no turn: no `β` in the Idle section.
+ v.preview.working = false;
}
views
}
// Store full preview text so truncation comes from the renderer.
const CODEX_LANGUAGE: &str =
- "gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.53M in Β· 61.2K out";
+ "GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 387K used Β· 9.53M in Β· 61.2K out";
const CODEX_REVIEW: &str =
- "gpt-5.6-sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.41M in Β· 38.7K out";
+ "GPT-6.1-Sol high Β· fleetcom Β· feat/cs/interface-fixes Β· 221K used Β· 4.41M in Β· 38.7K out";
const FLEETCOM_TESTS: &str =
"test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s";
const LOGRIA_TESTS: &str = "test result: ok. 223 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.38s";
@@ -569,7 +585,7 @@ const FLEETCOM_CLIPPY: &str =
const LOGRIA_WATCH: &str = "[Running 'cargo test'] test result: ok. 223 passed; 0 failed";
const LOGRIA_DOC: &str = "Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.41s";
/// Quiet-fixture summary preview.
-const SUMMARY_QUIET: &str = "Review fleetcom preview design document";
+const SUMMARY_QUIET: &str = "Fable 5.1 (high) Β· Review fleetcom preview design document";
/// Visible `cargo test` tail used by the peek fixture.
fn cargo_test_screen(id: u64) -> ScreenView {
@@ -610,12 +626,13 @@ fn frame(app: &mut App) -> Vec {
let painted = out.len();
crate::ui::render(&mut out, app).expect("a fixture frame always paints");
assert!(out.len() > painted, "a fresh App must emit its first frame");
- // Park the cursor outside centered overlays.
- out.extend_from_slice(format!("\x1b[{};1H", app.rows).as_bytes());
+ // Park the cursor outside centered overlays, then hide it: the Agent page
+ // leaves it shown for the filter caret, and parked it paints a stray cell.
+ out.extend_from_slice(format!("\x1b[{};1H\x1b[?25l", app.rows).as_bytes());
out
}
-/// Rewrite the four deterministic README dashboard fixtures under `docs/img`.
+/// Rewrite the five deterministic README dashboard fixtures under `docs/img`.
#[test]
#[ignore = "writes docs/img/*.ansi; run by hand to refresh the README screenshots"]
fn write_readme_screenshot_fixtures() {
@@ -647,4 +664,14 @@ fn write_readme_screenshot_fixtures() {
app.selected_id = Some(4);
app.mode = Mode::Controls;
std::fs::write(out_dir.join("controls.ansi"), frame(&mut app)).unwrap();
+
+ // Agent page over the directory-grouped fixture: `n`, then Tab, with every
+ // supported agent installed and the first row highlighted. The selected
+ // turret task puts its directory in the `β―` destination prefix.
+ let mut app = fixture_app(&dirs, GroupMode::Dir, live_fleet(&dirs));
+ app.selected_id = Some(11);
+ app.agents = harness::program_words().map(String::from).collect();
+ app.on_key_dashboard(key(KeyCode::Char('n')));
+ app.on_key_spawn(key(KeyCode::Tab));
+ std::fs::write(out_dir.join("agent.ansi"), frame(&mut app)).unwrap();
}