Zentty

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.

Pi

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
Closed-pane resume: Zentty can suggest a resume command only when the adapter has a stable session id and a known resume syntax. Cursor is intentionally marked unsupported for now.

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
FieldRequiredMeaning
versionYesProtocol version. Use 1.
eventYesOne of the Agent Status Protocol events.
agent.nameRecommendedHuman-readable tool name shown in the sidebar.
state.textNoShort status text for hover, notifications, or debugging.
state.interaction.kindFor needs-inputapproval, question, decision, auth, or generic-input.
task.done / task.totalFor progressTop-level task counts for progress display.

Troubleshooting

Claude session not detectedStart claude inside a fresh Zentty pane and confirm generated hooks were not bypassed by a management subcommand.
Codex notify fires twiceCheck for user-level Codex hooks plus Zentty launch hooks. Remove duplicate manual entries.
Copilot hook disappearedRestart from Zentty so the temporary COPILOT_HOME overlay is rebuilt.
Cursor hooks failed to installRun zentty install cursor-hooks, then reopen Cursor's CLI session.
Kimi management command was wrappedLogin/logout/mcp/plugin/web commands should pass through; report a docs issue with the exact command if they do not.
Needs-input never clearsThe adapter should send agent.input-resolved or a new running/idle event after the human action.
Task progress is missingThe agent must expose task counts. Unsupported tools can still show running/idle state.
Unsupported CLIUse the manual protocol or wrapper template below to forward lifecycle events.

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 tmux for 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