Introduction
AgentPeek lives in the Mac notch. It shows your Claude Code and Codex sessions, catches permission prompts and agent questions, opens agent config folders, and lists your local dev servers.
Install & first launch
Signed macOS app. First launch starts a 2-day trial and adds the hooks.
Download
Grab the DMG from agentpeek.app/download. Drag AgentPeek.app into Applications, then open it.
Hooks auto-install
On first launch, AgentPeek adds hooks to each CLI.
- Claude Code: adds hooks to
~/.claude/settings.json(SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PermissionRequest, Notification, Stop, PreCompact, SessionEnd) and a status-line command for usage. - Codex: writes
~/.codex/hooks.json(SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SessionEnd) and setscodex_hooks = truein~/.codex/config.toml.
New sessions pick it up on their own. Desktop and IDE apps stay untouched.
Verify setup
Open Settings → General → Agent hooks. Each CLI shows Ready, Needs repair, or Not installed. Flip the toggle to install or remove.
Core concepts
Two views: the collapsed pill and the expanded panel.
Collapsed pill
Thin pill shaped like the notch. Shows what the agent is doing:
- Idle: nothing is running.
- Active: a session is running; a count badge shows when there are more than one.
- Attention needed: a permission or question is waiting.
- License blocked: greyed out with a lock.
- Confirmation flash: green check after allow or always allow, red x after deny.
Expanded panel
Click the pill to open it. Three tabs:
- Sessions: recent and active sessions.
- Quick Routes: shortcuts to agent config folders.
- Local Servers: dev servers that are listening.
Pending permissions and questions take over the panel until you answer. The gear opens Settings.
Features
Sessions
Cards show the agent, project, activity, usage, files touched, commands run, and diff stats. Click a card to see the last reply and a recent timeline.
- Transcripts: read from
~/.claude/projects/and~/.codex/history.jsonl+~/.codex/sessions/. Read-only. - Diffs: shown for edit prompts and Codex
apply_patchsessions. - Session state: saved to
~/.agentpeek/sessions.json. - Right-click: copy project or cwd, show in Finder, open Terminal.
Permissions
Claude Code and Codex permission requests show up inside AgentPeek. The notch shows the prompt, context, and the buttons you can use.
- Shell commands, file paths, arguments, plans, and diffs when we have them.
- Actions: Allow, Deny, Deny with feedback, Always Allow (Claude only), Open Terminal.
Always Allow shows up on Claude prompts that support it. It is hidden on plan prompts and prompts with no reusable rule. Open Terminal jumps back without answering the prompt.
Agent questions
Claude and Codex can ask for input through the hook bridge. AgentPeek shows the choices or text field right in the notch.
- Single-choice prompts show buttons.
- Freeform prompts show a text field and a Send button.
- Multi-question prompts ask for one answer per line.
Quick Routes
Shortcuts to each CLI’s config folders. Missing folders show dimmed.
| Route | Claude | Codex |
|---|---|---|
| Skills | ~/.claude/skills | ~/.codex/skills |
| Plugins | ~/.claude/plugins | ~/.codex/plugins |
| Config | ~/.claude/settings.json | ~/.codex/config.toml |
| Logs | ~/.claude/projects | ~/.codex/sessions |
| Root | ~/.claude | ~/.codex |
Folders open in Finder. Config shows the file. You can toggle the path display in Appearance.
Local Servers
Shows servers that are listening on ports 3000-9999. We guess the framework from the process name (Rust, Python, Ruby, Bun, Deno, Node, Go).
- Port, framework, uptime.
- Click to open
http://localhost:<port>. - Copy the URL or stop the server from the row.
Uses /usr/sbin/lsof and only sees your own processes. If the list is
empty, see Local servers empty.
Token usage
A chip in the header shows rate-limit use (5-hour and 7-day windows, when the CLI gives them).
- Claude: status-line snapshots in
~/.agentpeek/claude-statusline-usage/, updated every 5 seconds. - Codex: read from
codex app-server --listen stdio://.
Old data shows as stale. Missing data shows as unavailable.
Settings
Three tabs: General, Appearance, License.
General
- Launch at login: start with macOS.
- Auto-expand on attention: opens the notch for permissions and questions.
- Agent hooks: flip each CLI to install or remove it.
- Claude usage: a Refresh button shows up when Claude usage is disconnected.
- Quit AgentPeek.
Appearance
| Setting | Options |
|---|---|
| Expanded width | Slim / Wide |
| Collapsed width | Slim / Wide |
| Density | Comfort / Compact |
| Title weight | Regular / Bold |
| Show | Always / Hide idle / Expanded |
| Session count | On / Off |
| Default tab | Sessions / Routes / Servers |
| Show paths | On / Off |
License: paste your key, click Activate or Re-check. See Licensing.
Licensing & trial
$9 one-time license, one Mac, all future updates included.
Free trial
2 days, all features, no account. The clock runs on your Mac. When it ends, paste a key to keep going.
Activation
Buy at agentpeek.app/checkout. Paste the key from your receipt email.
- Open Settings → License.
- Paste the key into the License key field.
- Press Return or click Activate.
The first check activates with LemonSqueezy. Later checks just confirm the saved activation. The key and activation ID live in your Keychain.
Hardware binding
Tied to this Mac’s IOPlatformUUID. Got a new Mac or changed
hardware? Message @brenhuberr on X for a reset.
Troubleshooting
Pick the problem that matches.
Hooks not running
A CLI session starts, but the notch stays empty.
- Open Settings → General → Agent hooks.
- If a CLI shows Needs repair or Not installed, flip the toggle off and back on to reinstall.
- Start a new session. Old sessions do not pick up new hooks.
If install still fails, check ~/.claude/settings.json and ~/.codex/hooks.json for broken JSON.
Stale socket
Sessions hang after AgentPeek crashes or is force-quit.
osascript -e 'quit app "AgentPeek"'
rm ~/.agentpeek/hook-transport.json
open -a AgentPeek AgentPeek makes a new socket path and token the next time it starts.
Usage chip unavailable
- Claude: open Settings → General. If you see a Claude usage row, click Refresh. If not, flip Agent hooks → Claude Code off and back on, then start a new
session. Make sure
~/.agentpeek/claude-statusline-usage/has recent files. - Codex: make sure
codexis on yourPATHand signed in, then hit refresh.
Transcripts blank
The session card shows up, but the body or diff is empty.
ls ~/.claude/projects/*/<sessionId>.jsonl
grep -l "\"session_id\":\"<sessionId>\"" ~/.codex/history.jsonl
find ~/.codex/sessions -name "*-<sessionId>.jsonl" Non-ASCII characters in the working directory path can trip up Claude’s lookup.
License errors
| Error | Fix |
|---|---|
activation_limit_reached | Message @brenhuberr on X to reset. |
| Invalid key | Copy the key from your receipt email again. No spaces. |
| Try again later | Network hiccup. Try again. |
| Key missing after relaunch | Unlock Keychain and relaunch. |
Local servers empty
- We only scan ports 3000-9999.
lsofonly sees your processes, notsudoor other users.- Servers with no start time show no uptime.
Launch at login
Check System Settings → General → Login Items & Extensions. If AgentPeek is missing, flip Launch at login off and back on to re-register.
Privacy & security
No telemetry, no analytics, no accounts.
- Stays on your Mac: sessions, prompts, diffs, usage, license key.
- Leaves your Mac: when you activate or re-check the license, we send the license key, hardware ID, activation ID (if any), and app version to LemonSqueezy. We never send session content.
- IPC: a Unix socket under
~/Library/Caches/app.agentpeek/sockets/(0600) with a per-install auth token. - We never act on your behalf. Only hook responses you clicked.
Support
Message @brenhuberr on X with your macOS version, AgentPeek version, CLI, and what you’re seeing.