Terminals & agents
A terminal panel is a real terminal: xterm.js on the front, a native PTY (node-pty) on the back, rendered through WebGL. Anything that runs in your shell runs here.
Opening one
⌘T opens a terminal at the centre of the view. It starts in the workspace folder, with your shell and your environment — the same PATH, the same profile, the same tools.
# Nothing special is required. Your agent CLI, as you already run it:
claude
codex
Agents are just CLIs
Catenary does not bundle a model and does not proxy your prompts. The agent you run is the CLI you installed, authenticated the way you already authenticate it. What the canvas adds is a name, a position and wires to its peers.
Provider credentials for the built-in agent panel are stored globally under userData/pi-agent/auth.json and mirrored into each workspace's .cate/pi-agent/.
Reading state at a glance
A panel tells you what it is doing without being opened:
- the tab shows the agent's name and, on a task panel, its branch;
- a working agent shimmers its status line;
- a finished command and an agent waiting for input each get their own activity state on the node.
Talking to peers
A terminal wired to another can address it directly through the catenary CLI, available inside every terminal panel:
catenary list # peers, boards and connected files
catenary ask "Codex 1" "Take the N+1 in the dashboard query"
catenary check "Codex 1" # last lines, without interrupting it
catenary check "Codex 1" 60 # a custom line count
ask delivers a prompt. check reads without interrupting — use it while a peer is mid-turn instead of sending the same prompt twice.
Shared boards
Boards are persistent notes several agents can read and append to:
catenary board list
catenary board read "Spec"
catenary board append "Spec" "Refactored /auth; tokens.ts is next"
They are the right place for a decision that has to outlive one agent's context window.