Skip to content

Agent Lifecycle

The desktop app tracks agent state per worktree so the sidebar tells you whether a branch is actively running, blocked, or ready for inspection.

Lifecycle states

working

The worktree is actively executing a turn. In the sidebar this appears as an animated spinner.

For Claude, Workstreams enters this state when it receives lifecycle hook events such as Start, UserPromptSubmit, or PostToolUse.

permission

Claude asked for permission and is waiting on you. Workstreams marks the worktree as blocked and raises a notification so the sidebar stops looking like a generic long-running task.

review

The worktree finished a turn while it was not the active workspace. This is the "go inspect what happened" state.

idle

The worktree is not currently running. This is the default resting state for the active workspace after a turn completes or after the last managed terminal disappears.

How Workstreams knows this

For Claude, the desktop app installs a hook script under ~/.claude/hooks/ and registers it in ~/.claude/settings.json. That hook sends lifecycle events back to the app over a local HTTP endpoint so the sidebar can react in real time.

This is why Claude has deeper status tracking than a generic terminal command.

Notifications

Workstreams surfaces lifecycle changes with desktop notifications:

  • completed turn
  • permission requested
  • ready to review

These notifications are worktree-aware, so the message tells you exactly which branch needs attention.

Important limitation

Claude has the full lifecycle integration today. Codex and Terminal workstreams still run correctly, but they do not currently provide the same hook-driven working / permission / review state fidelity.

Desktop-first docs for Workstreams