Agents
hive knows which of your terminals run coding agents, what each one is doing, and which ones are waiting for you. After a restart it resumes them where they were.
Setup
For Claude Code, install hive's hooks once:
hive agent install claude
This adds six hooks to ~/.claude/settings.json and leaves everything else in
the file alone. Running it again changes nothing. To remove them:
hive agent uninstall claude
Claude Code runs hooks only in folders you trust. Start new Claude sessions inside hive to use them. Outside hive, the hooks exit at once.
What hive learns
| Claude Code event | State |
|---|---|
A session starts, or /clear |
idle, and its session ID |
| You send a prompt | working |
| A tool finishes | working |
| It asks for permission | blocked, with the reason |
| It finishes a turn | done |
| The session ends | ended |
| You're back at the shell prompt | ended |
The last row covers an agent that was killed before it could say it ended:
when the pane's shell is back in front, the agent has exited. If the same
agent comes back in front (a tool ran an interactive shell for a while, or
you suspended it with ctrl-z and typed fg), it's back as it was.
Interrupting Claude Code runs no hook. Claude also reports its own state to the terminal, so hive sees it go idle.
An agent that another agent runs as a tool, such as grok -p inside Claude
Code, runs in the same pane and its hooks report too. hive ignores those:
only the agent holding the pane speaks for it.
The agent's task comes from the terminal title Claude Code sets, such as "Migrate rate limiter to Redis".
hive agents lists them, blocked first:
STATE HARNESS SESSION BLOCK DIR SINCE MESSAGE
blocked claude api-gateway …a29f3 ~/src/api now Claude needs your permission to use Bash
working claude hive-demo agent ~/src/hive 2m ago
The Mac app shows the same in its tabs, the sidebar (⇧⌘S) and the menu bar.
It sends a notification when an agent becomes blocked or finishes; the
notify setting chooses when (in the background, always, or never). hive
for Android notifies too, and can answer from the notification.
Resume
When the server starts again after a stop, a crash or a reboot, each agent's pane runs its harness's resume command with the latest session ID, in your login shell. Quit the agent and you're at a prompt in the same folder.
| Harness | Command |
|---|---|
| Claude Code | claude --resume <id> |
| Codex | codex resume <id> |
| OpenCode | opencode -s <id> |
| Gemini | gemini --resume <id> |
| Grok | grok --resume <id> |
An agent whose session ended is not resumed, and neither is one whose pane
was back at the shell prompt when the server stopped. If a resume fails, its
error stays above the prompt. With nu, csh or tcsh as your shell, the agent
runs alone, and its pane stays open after it. resume-agents = false in the
settings file turns resuming off.
To change a command, set HIVE_RESUME_<HARNESS> to a JSON list in the
server's environment. {id} is replaced by the session ID. A server that
Hive.app started doesn't see your shell's variables: stop it, then start it
from a shell that has them.
export HIVE_RESUME_CLAUDE='["claude","--resume","{id}","--model","opus"]'
Other harnesses
Only Claude Code has hooks hive installs. Grok runs Claude Code's hooks too
(it reads ~/.claude/settings.json), and hive knows: grok's sessions are
reported as Grok, so they resume with grok --resume. A grok subagent's
session starting or ending doesn't change the agent in the pane.
More generally, when the program running in a pane is a different agent than
the one a report names, hive goes by the program. Codex, OpenCode and Gemini
are resumed when they report a session ID through agent.report. See the
server API.