Zentty Docs
Agent Workflows
Run agent CLIs in normal panes while Zentty tracks lifecycle state, progress, questions, approvals, and attention requests.
Applies to current public Zentty builds. Last updated May 11, 2026.
Supported Tools
Zentty wraps supported tool launches so agent hooks and environment variables point back to the current pane. When a tool is active, the sidebar can show starting, running, needs-input, idle, task progress, and unresolved-stop states.
- Launch
claude- Best For
- Long-running implementation sessions, review loops, and multi-step agent teams that benefit from rich lifecycle hooks.
- Integration
- Generated per-launch settings with command hooks; management subcommands pass through without rewriting.
- Visible Signals
- Attach PID, running turns, approval/question needs-input, idle on stop, task counts, session clear.
- Launch
codex- Best For
- Focused coding tasks, terminal-native automation, and sessions where title/status fallback is useful.
- Integration
- Per-launch -c config flags enable hooks, terminal title status, task progress, and the generated hook commands.
- Visible Signals
- PID attach, starting/running, approval needs-input, title-based action-required fallback, idle on stop.
- Launch
copilot- Best For
- GitHub-oriented terminal assistance when you want the user's real Copilot state preserved.
- Integration
- Temporary COPILOT_HOME overlay that preserves the user's real config and state while adding Zentty hooks.
- Visible Signals
- PID attach, OSC 9;4 progress for running/idle, AskUserQuestion needs-input, session clear.
- Launch
cursor-agent- Best For
- Cursor users who want hook status in Zentty while keeping hook installation explicit.
- Integration
- Manual user hook installation through zentty install cursor-hooks; wrapper launch can opt out with ZENTTY_CURSOR_HOOKS_DISABLED=1.
- Visible Signals
- PID attach and hook-driven lifecycle or question state when hooks are installed.
- Launch
droid- Best For
- Factory Droid sessions where opaque session ids make recovery more important than detailed hook data.
- Integration
- Wrapper launch with Zentty routing and PID environment; Droid sessions are restored with a validated opaque session id.
- Visible Signals
- PID attach, lifecycle, and recoverable session resume.
- Launch
gemini- Best For
- Gemini CLI work where ToolPermission notifications should become visible sidebar needs-input states.
- Integration
- Per-pane system settings overlay through GEMINI_CLI_SYSTEM_SETTINGS_PATH with notifications forced on.
- Visible Signals
- PID attach, starting/running, approval needs-input for ToolPermission, idle on AfterAgent, session clear.
- Launch
kimi- Best For
- Kimi sessions that need optional user-installed hooks and explicit resume with session id.
- Integration
- Per-launch config overlay plus optional user hook install; login, logout, mcp, plugin, web, and other management commands pass through.
- Visible Signals
- PID attach, running, approval/question needs-input, idle on stop, session clear.
- Launch
opencode- Best For
- OpenCode users who want todo progress, permission state, and terminal theme sync in one pane.
- Integration
- Temporary OpenCode config overlay and plugin injection; user config is used as the base when present.
- Visible Signals
- Running/idle state, approval/question needs-input, task progress from todo counts.
- Launch
pi- Best For
- Pi chat sessions where project-scoped continue support matters more than detailed hook customization.
- Integration
- Extension injection for normal chat sessions; management subcommands and early-exit flags pass through untouched.
- Visible Signals
- Lifecycle state, task/title signals, and project-scoped continue support.
Choose Your Agent
Pick the CLI that already fits the work. Zentty does not rank model quality; it makes lifecycle state visible. Use Claude or OpenCode when you want richer task progress, Codex or Gemini for focused coding turns with approval visibility, and Cursor or Kimi when explicit hook installation is part of your workflow.
Capability Matrix
| Agent | Resume | Task Progress | Approvals | Auto Hook | Manual Hook | Agent Teams | Closed Pane Resume |
|---|---|---|---|---|---|---|---|
| Claude Code | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| Codex | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| GitHub Copilot CLI | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ |
| Cursor | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
| Droid CLI | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| Gemini CLI | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ |
| Kimi CLI | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ |
| OpenCode | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| Pi | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
What The Sidebar Shows
- Running or idle state for the active agent session in a pane.
- Questions, approval prompts, auth requests, and generic input needs.
- Task progress when the agent exposes top-level task counts.
- Attention badges and macOS notifications when you are looking elsewhere.
- Crash-like unresolved stops when a tracked agent process dies mid-turn.
Integration Details
Claude Code, Codex, Copilot, Gemini, OpenCode, Pi, Cursor, Droid, and Kimi each expose different lifecycle hooks. Zentty normalizes those hook payloads into the Agent Status Protocol and forwards them through the bundled CLI.
| Agent | Hooks / Signals Used | Resume | Notes |
|---|---|---|---|
| Claude Code | SessionStart, Notification, PermissionRequest, UserPromptSubmit, Stop, SessionEnd, PreToolUse AskUserQuestion, TaskCreated, TaskCompleted. | claude --resume <session-id> | Agent Teams uses the tmux shim when the setting is enabled. |
| Codex | SessionStart, UserPromptSubmit, PreToolUse, PermissionRequest, PostToolUse, Stop, plus notify callbacks. | codex resume <session-id> | |
| GitHub Copilot CLI | sessionStart, sessionEnd, userPromptSubmitted, preToolUse, postToolUse, errorOccurred. | copilot --resume=<session-id> | |
| Cursor | Hook-driven status events from installed Cursor hooks. | Closed-pane session resume is intentionally not generated yet. | |
| Droid CLI | Tool-specific hooks and title/progress signals when available. | droid exec -s <session-id> | |
| Gemini CLI | SessionStart, SessionEnd, BeforeAgent, AfterAgent, Notification, BeforeTool. | gemini --resume | |
| Kimi CLI | SessionStart, SessionEnd, UserPromptSubmit, Stop, Notification permission_prompt, PreToolUse AskUserQuestion, PostToolUse AskUserQuestion. | kimi -r <session-id> | |
| OpenCode | Plugin forwards session.status, session.idle, permission/question events, and todo.updated. | opencode --session <session-id> | |
| Pi | Extension status updates plus title and session metadata signals. | pi -c |
Worked Hook Example
A tool-specific hook enters Zentty through an adapter, then becomes a common status event. This example shows a Claude-style notification being normalized into a sidebar attention state.
# Tool hook payload
{ "hook": "Notification", "message": "Approve file edit?" }
# Adapter emits
{
"version": 1,
"event": "agent.needs-input",
"agent": { "name": "Claude Code" },
"state": {
"text": "Approve file edit?",
"interaction": { "kind": "approval", "text": "Approve file edit?" }
}
}
# Sidebar result
Pane badge: needs input · approval Status Protocol
Adapters reduce tool-specific payloads to a small event vocabulary. That is what lets the sidebar treat a Claude permission prompt, a Codex approval, and a Gemini ToolPermission notification as the same kind of human-attention state.
| Event | Meaning | Notes |
|---|---|---|
session.start | Attach a tool session to the pane. | Usually carries tool name, pid, session id, and working directory. |
session.end | Clear the tracked session for the pane. | |
agent.running | Mark the agent as actively working. | Used for prompt submit, before-tool, progress, and shell-running signals. |
agent.idle | Mark the turn complete while keeping the session visible. | |
agent.needs-input | Show human attention state. | Includes approval, question, decision, auth, or generic-input. |
agent.input-resolved | Clear the outstanding interaction and return to running. | |
task.progress | Update done/total task counts for sidebar progress. |
$ZENTTY_CLI_BIN ipc agent-event --adapter=claude
"$ZENTTY_CLI_BIN" ipc agent-event --adapter=codex SessionStart
"$ZENTTY_CLI_BIN" gemini-hook | Field | Required | Meaning |
|---|---|---|
version | Yes | Protocol version. Use 1. |
event | Yes | One of the Agent Status Protocol events. |
agent.name | Recommended | Human-readable tool name shown in the sidebar. |
state.text | No | Short status text for hover, notifications, or debugging. |
state.interaction.kind | For needs-input | approval, question, decision, auth, or generic-input. |
task.done / task.total | For progress | Top-level task counts for progress display. |
Troubleshooting
claude inside a fresh Zentty pane and confirm generated hooks were not bypassed by a management subcommand.COPILOT_HOME overlay is rebuilt.zentty install cursor-hooks, then reopen Cursor's CLI session.agent.input-resolved or a new running/idle event after the human action.Manual Integrations
Tools can integrate without app changes by writing Agent Status Protocol
JSON to zentty ipc agent-event. Zentty injects pane routing
variables into every pane, so custom wrappers do not need to discover the
active window or worklane.
"$ZENTTY_CLI_BIN" ipc agent-event <<'JSON'
{
"version": 1,
"event": "agent.needs-input",
"agent": { "name": "my-agent" },
"state": {
"text": "Approve deployment?",
"interaction": { "kind": "approval", "text": "Approve deployment?" }
}
}
JSON Agent Teams
Agent Teams is an opt-in mode for tools that expect tmux-style pane control. When enabled, Zentty places a tmux shim on PATH for the session and translates supported tmux commands into native Zentty pane operations.
The first subagent gets a golden-ratio column next to the leader pane. Later subagents stack in that team column. When the last subagent exits, Zentty dissolves the team anchor and restores the leader column width when it has a pre-team snapshot.
- Enable with
[agent_teams].enabled = true. - Use it when a supported orchestrator shells out to
tmuxfor subagent panes. - Leave it off when you already run real tmux intentionally or need full tmux session semantics.
- Debug routing with
ZENTTY_TMUX_COMPAT_TRACE_PATH; see tmux tracing.
Security & Trust
Agent hooks are local shell commands, so treat them like any other automation installed into your shell environment. Pane tokens authorize local IPC for a specific pane; do not paste them into untrusted shells, shared logs, or remote sessions. Revoke a leaked token by closing the pane or restarting the session that exported it.
Bring Your Own CLI
Unsupported agents can still report status by wrapping the command and emitting Agent Status Protocol events before, during, and after work.
#!/usr/bin/env bash
set -euo pipefail
"$ZENTTY_CLI_BIN" ipc agent-event <<JSON
{"version":1,"event":"session.start","agent":{"name":"my-agent"}}
JSON
my-agent "$@"
"$ZENTTY_CLI_BIN" ipc agent-event <<JSON
{"version":1,"event":"agent.idle","agent":{"name":"my-agent"}}
JSON