Summary
plannotator-tui last cannot resolve transcripts for omp ("Oh My Pi") panes. omp is not in the supported host list, so herdr last (and therefore Herdr Annotate's annotate.last / prefix+shift+o) takes the unsupported-host fallback and shows the pane's recent screen output instead of the agent's last reply.
The interesting part: Herdr already hands you the exact transcript path for these panes, and your existing reader already parses the format correctly. So this can be a very small fix.
Environment
- plannotator-tui 0.3.0, as bundled by herdr-annotate 0.3.0 (commit
8dc0de1)
- Herdr 0.8.2; reproduced on macOS arm64 and Linux x86_64
- Agent: omp; Herdr integration
omp reports current (v8)
What happens
herdr last resolves the pane and opens the doc pane with only a host name and a pid (captured by wrapping HERDR_BIN_PATH with a logging stub):
CALL: pane process-info --pane <pane>
CALL: plugin pane open --plugin plannotator-tui --entrypoint doc --placement overlay --focus
--env PLANNOTATOR_TUI_HOST=omp
--env PLANNOTATOR_TUI_MESSAGE_PID=<pid>
--env PLANNOTATOR_TUI_DELIVER_TO=<pane>
omp is not among claude, codex, copilot, droid, pi, so it hits the documented path
… is not supported yet; supported hosts: … → — showing the pane's recent output instead,
with the header reading <agent> · screen rather than <agent> · last message.
Same pane, same moment, comparing the resolution the doc pane performs against the correct answer:
| invocation |
result |
last --host omp --pid <pid> --print |
1537 bytes; an assistant message that is not the newest |
last --session <transcript> --print |
3893 bytes; the actual newest assistant reply |
--pick 0, --pick 1 and --pick 2 all return the same 1537 bytes, so this is not an index off-by-one.
Expected
last on an omp pane shows that pane's newest assistant reply, with the header omp · last message.
Why this should be cheap
1. Herdr resolves the transcript per pane, and it is a path. For omp panes the ref kind is path, so no discovery is needed at all:
$ herdr agent get <pane>
{"agent":"omp",
"agent_session":{"agent":"omp","kind":"path","source":"herdr:omp",
"value":"~/.omp/agent/sessions/<mangled-cwd>/<ISO8601>Z_<uuidv7>.jsonl"}}
herdr api schema defines AgentSessionRefKind as ["id", "path"] and AgentSessionInfo as {source, agent, kind, value} (all required). The string agent_session does not occur anywhere in the shipped 0.3.0 binary, so this field appears to be unused today.
2. The format already parses. last --session <that path> --print returns exactly the right reply. Only discovery is missing, not parsing.
3. The on-disk layout matches your own pi fixtures. omp writes:
~/.omp/agent/sessions/<mangled-cwd>/<ISO8601>Z_<uuidv7>.jsonl
Compare crates/plannotator-tui-hosts/tests/fixtures/pi-sessions/--work-project--/2026-08-28T10-00-00-000Z_01a00000-0000-7000-8000-000000000001.jsonl — same mangled-cwd directory, same <timestamp>_<uuidv7>.jsonl naming. Record types are {"type":"message","role":"assistant"|"user"|"toolResult"} alongside session, title, model_change and custom records.
4. Env-based discovery cannot work here. An omp pane exports only HERDR_BIN_PATH, HERDR_ENV, HERDR_PANE_ID, HERDR_SOCKET_PATH, HERDR_STARTUP_CWD, HERDR_TAB_ID, HERDR_WORKSPACE_ID. There is no PI_CODING_AGENT_SESSION_DIR, no PI_CODING_AGENT_DIR, and no OMP_* equivalent, so the pi reader's env probes find nothing even if omp were aliased to it. Under Herdr, agent_session is the only reliable source.
Suggested fix
Either of these solves it; the first is narrow, the second fixes a whole class:
- Add
crates/plannotator-tui-hosts/src/omp.rs with root ~/.omp/agent/sessions (or alias omp onto pi.rs with a second root), plus a fixture mirroring pi-sessions/.
- When
HERDR_ENV=1, prefer Herdr's agent_session over host+pid discovery: on kind: "path", read value directly and skip the host table entirely.
Option 2 would also cover the other agents Herdr integrates but plannotator-tui does not — herdr integration status lists 17 agent integrations against your 5 hosts.
Happy to test a patch against a real omp setup.
Summary
plannotator-tui lastcannot resolve transcripts for omp ("Oh My Pi") panes.ompis not in the supported host list, soherdr last(and therefore Herdr Annotate'sannotate.last/prefix+shift+o) takes the unsupported-host fallback and shows the pane's recent screen output instead of the agent's last reply.The interesting part: Herdr already hands you the exact transcript path for these panes, and your existing reader already parses the format correctly. So this can be a very small fix.
Environment
8dc0de1)ompreportscurrent (v8)What happens
herdr lastresolves the pane and opens the doc pane with only a host name and a pid (captured by wrappingHERDR_BIN_PATHwith a logging stub):ompis not amongclaude,codex,copilot,droid,pi, so it hits the documented path… is not supported yet; supported hosts: …→— showing the pane's recent output instead,with the header reading
<agent> · screenrather than<agent> · last message.Same pane, same moment, comparing the resolution the doc pane performs against the correct answer:
last --host omp --pid <pid> --printlast --session <transcript> --print--pick 0,--pick 1and--pick 2all return the same 1537 bytes, so this is not an index off-by-one.Expected
laston an omp pane shows that pane's newest assistant reply, with the headeromp · last message.Why this should be cheap
1. Herdr resolves the transcript per pane, and it is a path. For omp panes the ref kind is
path, so no discovery is needed at all:herdr api schemadefinesAgentSessionRefKindas["id", "path"]andAgentSessionInfoas{source, agent, kind, value}(all required). The stringagent_sessiondoes not occur anywhere in the shipped 0.3.0 binary, so this field appears to be unused today.2. The format already parses.
last --session <that path> --printreturns exactly the right reply. Only discovery is missing, not parsing.3. The on-disk layout matches your own
pifixtures. omp writes:Compare
crates/plannotator-tui-hosts/tests/fixtures/pi-sessions/--work-project--/2026-08-28T10-00-00-000Z_01a00000-0000-7000-8000-000000000001.jsonl— same mangled-cwd directory, same<timestamp>_<uuidv7>.jsonlnaming. Record types are{"type":"message","role":"assistant"|"user"|"toolResult"}alongsidesession,title,model_changeandcustomrecords.4. Env-based discovery cannot work here. An omp pane exports only
HERDR_BIN_PATH,HERDR_ENV,HERDR_PANE_ID,HERDR_SOCKET_PATH,HERDR_STARTUP_CWD,HERDR_TAB_ID,HERDR_WORKSPACE_ID. There is noPI_CODING_AGENT_SESSION_DIR, noPI_CODING_AGENT_DIR, and noOMP_*equivalent, so thepireader's env probes find nothing even ifompwere aliased to it. Under Herdr,agent_sessionis the only reliable source.Suggested fix
Either of these solves it; the first is narrow, the second fixes a whole class:
crates/plannotator-tui-hosts/src/omp.rswith root~/.omp/agent/sessions(or aliasompontopi.rswith a second root), plus a fixture mirroringpi-sessions/.HERDR_ENV=1, prefer Herdr'sagent_sessionover host+pid discovery: onkind: "path", readvaluedirectly and skip the host table entirely.Option 2 would also cover the other agents Herdr integrates but plannotator-tui does not —
herdr integration statuslists 17 agent integrations against your 5 hosts.Happy to test a patch against a real omp setup.