Skip to content

last: omp (Oh My Pi) panes fall back to the screen; Herdr already provides the exact transcript path #24

Description

@jonathannd02

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:

  1. 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/.
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions