# panto-herdr `panto-herdr` reports panto lifecycle state to [Herdr](https://herdr.dev/) when panto is running in a Herdr pane. It reports `panto` as the agent label and uses `thinking`, `responding`, `compacting`, and `tool:` as short report messages. Install it through panto's rock loader: ```toml [extensions] rocks = ["panto-herdr"] ``` Then run `panto update`. Start panto in Herdr, for example: ```sh herdr agent start panto --cwd "$PWD" -- panto ``` The extension is inert outside Herdr: it only activates when `HERDR_PANE_ID` is set. It invokes the local `herdr` executable asynchronously and discards its JSON output, so reporting does not affect the panto terminal UI. ## State mapping | panto event | Herdr state | | --- | --- | | `session_start`, `session_ready` | `idle` | | `user_message`, `thinking`, `compaction`, `tool_details`, `assistant_text` | `working` | | `assistant_text_complete` | `idle` | | `session_end` | agent released | `session_ready` restores `idle` after panto replays historical lifecycle events while loading a resumed session. `session_end` removes panto's agent report when the process shuts down, so Herdr also clears the pane/space activity indicator once no reported agents remain. `assistant_text_complete` is the block-level idle boundary; an assistant text block followed by a tool call can show `idle` briefly before the next lifecycle event restores `working`. Native session restore is out of scope until panto exposes a stable session reference to extensions. ## Check Run the module-level check with panto's Lua runtime: ```sh panto lua _selfcheck.lua ```