One pipeline, all local: agent events are appended to a file on your Mac, and the app assembles session state from it. No server is involved at any point.
Claude Code session
โโ hooks (SessionStart / UserPromptSubmit / PermissionRequest / PostToolUse / Stop / SessionEnd)
โโ appends one JSON line per event to ~/.butler/events.jsonl
โโ Silicon Workers watches the file and assembles per-session state
โโ menu bar panel updates in real time
Silicon Workers listens through Claude Code's official hooks mechanism. The hook script only writes a log line; it always exits 0 with zero output, which for PermissionRequest means "no opinion" โ approval prompts reach you exactly as before.
| Hook event | What it means in the panel |
|---|---|
SessionStart | Session lifecycle bookkeeping (no card yet โ avoids noise from warm-up sessions) |
UserPromptSubmit | You sent a message โ card created / back to Running; your first message becomes the title |
PermissionRequest | Agent needs your approval โ Waiting for you (strong signal, counted on the menu bar badge) |
PostToolUse | A tool finished = still working โ back to Running (after you approve, the panel flips back automatically) |
Stop | A response turn ended โ Waiting for you (weak signal: "take a look") |
SessionEnd | Session over โ the card leaves the panel |
SessionEnd; a Running session with no events for 2 hours is treated as dead.Stop is an approximation of "your turn".Next: Connect Codex ยท Uninstall