--- name: doctrine-pane description: Use when the user asks you to pop a pane, ssh into a box, log into a router or switch, get onto a console, or tail or monitor a log while you work — any interactive terminal session they want to watch live and be able to take over. Not for automated work, which stays on its MCP server or a plain command. --- # doctrine-pane An interactive terminal session in a herdr pane, so the user sees exactly what you see and can take the keyboard whenever they want it. **On Codex CLI it needs the doctrine hooks installed**, which the user does, not you: ask them to run `node /hooks/dctr-codex.mjs install` (`` as "The launcher" below defines it). The install is what lets a command in Codex's workspace-write sandbox reach herdr. Without it the launcher's herdr calls fail and it refuses. The pane itself runs on the host, outside Codex's sandbox, so whatever you type into it runs unsandboxed. This skill does **not** require the `doctrine` hub. You are usually invoked mid-task, and loading the whole posture to run two commands would be wrong. A doctrine run may still reach for this skill; `doctrine-debug` names it. ## When this fires, and when it does not **Interactive → a pane. Automated → whatever the project already uses.** That split is the user's and it is not yours to re-decide. A bulk read you were not asked to watch belongs on an MCP server or a script, because parsed output is what makes many results comparable. If the user asks to see the connects, that is a request and it gets panes. **The axis is the request, never the shape of the work**: ten devices you were asked to watch is ten sessions, and one device you were not is still a script. A pane is for the session a human wants to watch or join. **Never open a pane the user did not ask for.** There is no heuristic here and there should not be: an ask in the description's own terms (pop a pane, ssh into, log into, get onto the console, tail or monitor a log while you work) is a request, and everything else is not. Two kinds, and only one has any state: - **Session** — a login you may drive and the user may take over. - **Monitor** — a stream beside the work, `docker logs -f` or a firewall tail. You never write to it. The user interrupts it the way they interrupt any terminal, by typing in it. ## The launcher `node /hooks/dctr-pane.mjs`, two directories above this skill's own base directory. ``` open