Let Poke run & control Claude Code sessions on your own machine. One npx command to set up. No API key — uses your Claude subscription login.
Strong tool naming (verb_noun pattern throughout) and comprehensive descriptions (avg 180+ chars). All 10 tools have explicit schemas with typed parameters and descriptions. Good error handling guidance ('Use resume_session first', 'Call this first'). Weaknesses: no output schemas documented, missing tool annotations (readOnlyHint/destructiveHint), parameter descriptions could be more prescriptive about constraints (e.g., cwd format, model alias examples), and no pagination guidance for list_sessions despite returning structured results.
Get one session's status plus recent output and a needs_input flag. For managed/resumed sessions: live status (running|idle|finished|error|canceled), the latest result text, cost, turns, and recent activity. For resumable/live sessions: metadata + a tail of the transcript. Primary polling tool after start_session/send_message — call until status is idle/finished/error, then summarize.
Interrupt a running session (abort the current turn mid-flight). Returns immediately; the session transitions to idle. Then send_message to continue or get_session to check status. Idempotent — safe to call multiple times.
List Claude Code sessions this bridge can see, newest-activity first. Each entry has session_id, short_id, kind (managed = controllable here, resumable = a past session you can resume, live = a running terminal session you can only watch), status, title, cwd, last_activity, needs_input, message_count. Call this first when you don't know a session_id. Only managed sessions accept send_message/interrupt/set_*; resume_session promotes a resumable or live one to managed.
Respond to a permission request (approve or deny a tool use). Only valid when the session is waiting on a permission (needs_input=true and a tool is pending). Idempotent — calling twice with the same answer is safe.
No output schemas documented. Tool descriptions state what is returned (e.g., 'returns session_id IMMEDIATELY', 'returns status plus recent output') but JSON Schema output types are not visible in source. LLMs cannot plan downstream tool calls without knowing response field names and types.
Missing tool annotations. No readOnlyHint, destructiveHint, or idempotentHint attributes visible. Agents cannot distinguish safe (list_sessions, get_session) from destructive (stop_session, interrupt_session) operations without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Resume a past (resumable) session or take control of a live terminal session, promoting it to a managed session you can fully drive. By default continues the same session_id and appends to its transcript; pass fork=true to branch into a NEW session id (original untouched). Required when a live session is still running. Returns the (possibly new) session_id; then use send_message/interrupt/set_* as normal.
Send a follow-up instruction to a MANAGED (or resumed) session, continuing the SAME session with full memory. Returns immediately; poll get_session or await the finish notification. Fails for read-only live sessions (resume_session first) or if the session is mid-turn (interrupt first) or waiting on a permission (use respond_permission). This is how you route a user's reply back to the right session.
Change a session's model mid-flight (e.g. from 'sonnet' to 'opus'). Takes effect on the next turn. Idempotent.
Change a session's permission posture mid-flight (e.g. from 'plan' to 'bypassPermissions' to actually run the proposed commands). Takes effect on the next turn. Idempotent.
Launch a NEW Claude Code session in a folder and give it the first task. Returns a session_id IMMEDIATELY (does not wait for completion). Then wait for the proactive finish message, or poll get_session until status is idle/finished/error. Fully controllable afterwards via send_message/interrupt/set_*. permission_mode defaults to the configured default (bypassPermissions = full power incl. shell), which is the most reliable; 'plan' proposes without acting. The interactive approval modes (default/acceptEdits/dontAsk) are experimental and a turn may fail after an approval, so prefer the default unless the user wants proposal-only 'plan'.
Stop a managed session (mark it finished, evict from memory). The transcript is preserved on disk. Idempotent.
Parameter descriptions lack prescriptive constraints. 'cwd' is described as 'Absolute folder path (any folder on this PC)' but does not specify format validation, symlink handling, or permission requirements. 'model' accepts 'sonnet', 'opus' but no enum constraint or validation guidance provided.
list_sessions returns structured results but no pagination guidance. Description mentions 'limit' parameter (default 20) but does not explain behavior when result count exceeds limit or how to fetch next page. Large session lists could exhaust context.
Error handling is implicit in descriptions ('Fails for read-only live sessions') but no explicit error classification or recovery guidance in tool definitions. Agents must infer whether errors are retryable, user-fixable, or fatal.