@park tool that suspends the agent, frees the terminal, and auto-resumes itself when the timer/probe completes.
Park & Resume turns the agent loop into something that can wait without blocking the terminal. Instead of the old bash sleep 300 pattern that locks the screen for 5 minutes, the agent emits a single @park tool call that:
Snapshots the loop state (history, counters, mode) to disk.
Frees the terminal — you can chat, list jobs, open another /coder.
Schedules the resume on the durable scheduler (survives crash/restart).
Auto-resumes by itself once the timer/poll completes, without you pressing Enter.
Available since chatcli 1.111.x (PR #879). Works in /coder, /agent and /run modes. Auto-resume uses TIOCSTI on Unix and WriteConsoleInputW on Windows; transparent fallback when the OS restricts the injection.
Remove snapshots whose scheduler job is in a terminal state (completed/failed/cancelled/timed_out) — cleanup after resume
/parked gc <duration>
Remove snapshots older than <duration> regardless of status (e.g. /parked gc 24h)
/parked help
Show usage
Forces immediate resume (skips remaining wait).
❯ /resume 3e06f8d5 ▶️ Agent resumed (token=3e06f8d5..., outcome=manual) — continuing from where it stopped.
Accepts a unique prefix of the token (8 chars usually enough), like git checkout abc123.
If auto-resume already consumed the token (common race), /resume <same-token> is silent (idempotent no-op). Errors only surface for genuinely invalid tokens. Detection TTL: 30 s after auto-resume.
Aborts a park: removes snapshot + cancels scheduler job.
❯ /cancel-park 3e06f8d5 ✓ Park 3e06f8d5d984... cancelled and snapshot removed.
Idempotent: cancelling an already-consumed park just removes the file if present.
Sends a directive to the most recently parked agent of this session. Plain chat keeps working normally while an agent is parked — directing it is an explicit action:
❯ /park-note be more detailed in the next report 💬 noted for the parked agent (resumes 18:44:09) — /resume b733521e to wake it now
The directive is persisted into the park snapshot (durable across restarts) and delivered as a user instruction right when the agent resumes — before it produces that cycle’s report. The first plain chat message you send while a park is waiting prints a one-line hint pointing to this command.
While an agent is parked the terminal is yours: plain text goes to normal chat, every command works, and you can even run another /coder task in parallel. To talk to the parked agent, use the explicit channels:
Channel
Who uses it
Effect
/park-note <message>
You, at the prompt
Directive stored in the snapshot; injected as a user instruction at resume
Same directive channel, cross-agent — newest park when token is omitted
@park cancel {token?, reason?}
Any agent (tool call)
Ends a parked wait now: cancels the scheduler job and wakes the agent immediately (newest park when token is omitted); refused while the park is already resuming. Works across processes (see below)
Cross-process cancel. A park snapshot lives on disk and any chatcli process on the host can load it, but only the process that parked the agent holds its scheduler job and its wake path (the REPL resume queue, or the in-turn waiter of a gateway/ACP/MCP turn). With the Conversation Hub enabled, every process mirrors the parks it owns into the hub with a heartbeat. @park cancel then has three outcomes: a park owned by this process is woken here; a park owned by another process that still heartbeats is woken there (the request is written to the hub; the owner drops its scheduler job and resumes the agent with outcome=cancelled on its next sync tick, typically within a second); a park whose owner stopped heartbeating (its session ended) is resumed by the cancelling process. Before this, a cancel issued from a second process resumed the park locally while the owner’s job stayed armed, so the same park resumed twice.This makes parked loops composable: a second agent investigating an incident can @park list, spot the monitoring loop parked for 10 minutes, and @park note it — “the deploy finished, validate and stop monitoring” or “switch your cycle to 5m”. The parked agent applies cadence changes itself on its next cycle, so scheduler ownership never leaves the loop that created the park.At resume time the agent receives the directives as a block:
[user directives received while you were parked]- be more detailed in the next reportAddress these directives in THIS cycle's report, before scheduling any further @park.
Auto-resume — how the terminal “wakes up by itself”
This is the part that distinguishes park from a plain scheduled task: when the wait completes, the agent returns to foreground without you doing anything.
TIOCSTI is a POSIX ioctl that injects bytes into the TTY’s input buffer as if the user had typed them. It works with any application reading stdin from the controlling tty — no need to modify go-prompt.
go-prompt v0.2.6 uses bytes.Equal to classify keys (input.go:24). A multi-byte buffer like /resume abc\r doesn’t match any sequence in the ASCII table and falls into the default branch which inserts as text — including the trailing \r, which becomes literal and never submits. Solution: split.
Command body in one burst (multi-byte → text insertion).
15 ms pause (above readBuffer’s 10 ms poll cycle).
Lone \r in a second burst (single byte → matches ControlM → submits).
No TIOCSTI on Windows — kernel32.dll exposes WriteConsoleInputW which accepts structured INPUT_RECORD events. Each char becomes a key-down/key-up pair; the trailing Enter uses VirtualKeyCode=VK_RETURN so go-prompt’s reader classifies it as a native Enter.
The auto-resume machinery above is built around an interactive terminal. Unattended surfaces have no prompt loop to wake — so a park taken there behaves differently, on purpose:
The turn stays open. Over ACP (IDE) or the MCP server, @park does not end the run. The turn blocks in-process, the scheduler delivers the wake directly to it, and every monitoring cycle streams on the same client request — thoughts, tool calls and the cycle report keep arriving in your IDE exactly like any other turn. Re-parks loop in place, so one request covers the whole monitoring conversation.
Stop cancels everything. Cancelling the turn (IDE Stop, session/cancel, client disconnect) retires the park completely: the scheduler job is cancelled, the snapshot deleted, nothing keeps polling in the background.
No terminal takeover. Banners and the TTY injection never fire on these surfaces — stdout there is a protocol channel, and there is no prompt to redraw.
On the REPL nothing changes: parks end the run, you get the prompt back, and auto-resume wakes the terminal as documented above.
TIOCSTI gated by /proc/sys/dev/tty/legacy_tiocsti:
Kernel
Default
Auto-resume
Pre-5.16
TIOCSTI always enabled
✅ works
5.16+ server (Ubuntu LTS, RHEL)
legacy_tiocsti=0
✅ works
6.x+ desktop, Docker Desktop linuxkit
legacy_tiocsti=1
❌ EPERM, fallback active
To re-enable (root):
sudo sysctl -w dev.tty.legacy_tiocsti=0
Trade-off: re-enables a feature distros disabled because of CVE-2017-5226 (sandbox escape via injection). Safe in personal dev environments; on shared servers, prefer the fallback.
TIOCSTI gated by kern.tiocsti_disable:
Version
Default
Auto-resume
Pre-Ventura (macOS 12 and earlier)
kern.tiocsti_disable=0
✅
Ventura+ (macOS 13, 14, 15, 26)
kern.tiocsti_disable=1
❌ EPERM, fallback
Re-enable (sudo):
sudo sysctl -w kern.tiocsti_disable=0
Same as Linux — local decision, fine for personal dev, evaluate on shared environments.
WriteConsoleInputW is part of the conhost API and always available — no legacy_tiocsti equivalent. Auto-resume works in Windows Terminal and conhost.exe out of the box.
Console
Auto-resume
Windows Terminal
✅
conhost.exe (native cmd)
✅
Session without attached console (piped stdin)
❌ fallback (expected)
FreeBSD/NetBSD/OpenBSD don’t restrict TIOCSTI by default — works out of the box.
Fallback when TIOCSTI/WriteConsoleInput is unavailable
When the injection is rejected, the 🔔 park ready banner still shows up and the token enters the pendingResumeQueue. You need to type any character + Enter at the prompt — the executor consumes the queue before processing your input. Equivalent UX with one extra keystroke.The prompt prefix shows [🅿️ resume ready: N] ❯ while a resume is pending, so it’s hard to forget.
Terminal returns. You open another /coder to refactor tests in parallel. ~15 minutes later:
🔔 park ready: token=8b7e... outcome=matched▶️ Agent resumed — continuing from where it stopped.[agent] CI passed. Applying terraform...<tool_call name="@coder" args='{"cmd":"exec","args":{"cmd":"terraform apply -auto-approve"}}' />
Important detail: terraform plan -detailed-exitcode returns 0 on no diff, 2 on diff present, 1 on error. Here we wait for 0 (convergence). To wait for “diff applied”, swap to success_when:exit=2.
When you answer [y], you are pre-authorizing the polling shell to run that specific cmd you just saw. ChatCLI propagates DangerousConfirmed=true on the scheduler job, so the poll’s fire-time recheck does not stumble on ShellPolicyAsk (no human at the keyboard at fire time to approve again).
Denylist always wins. Even with the interactive approval, commands matching Deny rules in your coder policy are rejected at fire time. See Coder Security.
~/.chatcli/parked/<token>.json contains the park’s full chat history. Files are created with 0o600 (owner-only) and the directory with 0o700. Snapshots never leak to other users on the host.
Tokens are generated with crypto/rand (16 bytes hex = 32 chars) and validated against regex [a-zA-Z0-9._-]{8,128}. There is no way for /resume ../etc/passwd to escape the directory.
pending_tool_call_id is the Anthropic native tool_use ID — preserved to reconstruct the tool_use/tool_result pairing on resume (otherwise the next API request rejects with unmatched tool_call).
Auto-resume injects /resume <token>\r via TIOCSTI. But the executor already ran the resume on the first line (drainPendingResumes), so when the /resume <token> command reaches the handler the snapshot was already deleted.Solution: markRecentlyResumed(token) on drain (TTL 30 s) and wasRecentlyResumed(token) in handleResumeCommand → silent no-op. Genuinely invalid tokens (user typos) still surface as errors because the TTL is short.
Auto-resume doesn't fire — I see the 🔔 banner but nothing happens
Most common cause: legacy_tiocsti=1 on Linux or kern.tiocsti_disable=1 on macOS. The banner is printed by the bridge but the injection was rejected by the kernel.Check:
If it returns 1, either enable (see Platform matrix) or use the fallback: type any character + Enter at the prompt and the drain consumes the resume.
park: no snapshot matching '<token>'
You’re using the job ID (second column of /parked) instead of the token (first column). Tokens have 8 visible chars in /parked; job IDs are scheduler-internal.Always copy from the first column of /parked or use auto-complete (Tab).
Park stuck in (failed) on /parked
Check /jobs show <job_id>. Common causes:
echo done (or any cmd) classified Ask without DangerousConfirmed: should be propagated automatically; report as a bug.
Persistent HTTP 5xx in for_url: each poll fails, scheduler may mark the job as failed after N retries. Increase interval or deadline.
Denylisted shell command: a Deny rule in the coder policy always wins, even with approval. See /config security rules.
Snapshots accumulating in ~/.chatcli/parked/
Use /parked prune to remove snapshots whose job is terminal (completed/failed/cancelled/timed_out). On long-running systems, consider periodic /parked gc 24h.
How do I tell which controlling TTY receives the injection?
tty
Shows /dev/pts/N (Linux) or /dev/ttysNNN (macOS). That’s the fd injectTTYLine opens via /dev/tty.
For background on the scheduler that powers park, see Scheduler. For the security policy on @coder exec, see Coder Security.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"ChatCLI","description":"Official ChatCLI documentation — a multi-provider AI CLI with agent mode, gRPC server and Kubernetes operator.","colors":{"primary":"#0F766E","light":"#2DD4BF","dark":"#0D9488"},"logo":{"light":"https://mintcdn.com/encom/Rcdb5Pr5hpjwN46r/images/logo-light.svg?fit=max\u0026auto=format\u0026n=Rcdb5Pr5hpjwN46r\u0026q=85\u0026s=965a0feb9bd2f65a11b3c486e2488101","dark":"https://mintcdn.com/encom/Rcdb5Pr5hpjwN46r/images/logo-dark.svg?fit=max\u0026auto=format\u0026n=Rcdb5Pr5hpjwN46r\u0026q=85\u0026s=ac3f6607cdea0039d0b66b80f700e512","href":"/"},"favicon":"https://mintcdn.com/encom/Rcdb5Pr5hpjwN46r/images/favicon.svg?fit=max\u0026auto=format\u0026n=Rcdb5Pr5hpjwN46r\u0026q=85\u0026s=c774e29d1b243b7c3b4bf5e173fef299","api":{"openapi":"api-reference/openapi.json","playground":{"display":"interactive"}},"appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#F7F7F5","dark":"#0E0F10"}},"navbar":{"links":[{"href":"/cookbook/agent-refactoring","label":"Cookbook"},{"href":"/releases","label":"Releases"},{"href":"https://github.com/diillson/chatcli","type":"github"}],"primary":{"type":"button","label":"Install","href":"/start/installation"}},"footer":{"socials":{"github":"https://github.com/diillson/chatcli","x":"https://x.com/diillson"},"links":[{"header":"Resources","items":[{"label":"Documentation","href":"/"},{"label":"Cookbook","href":"/cookbook/agent-refactoring"},{"label":"API Reference","href":"/reference/api/overview"}]},{"header":"Community","items":[{"label":"GitHub","href":"https://github.com/diillson/chatcli"},{"label":"Issues","href":"https://github.com/diillson/chatcli/issues"},{"label":"Discussions","href":"https://github.com/diillson/chatcli/discussions"},{"label":"Releases","href":"https://github.com/diillson/chatcli/releases"}]},{"header":"Distribution","items":[{"label":"ArtifactHub","href":"https://artifacthub.io/packages/search?ts_query_web=chatcli"},{"label":"Helm Charts","href":"https://artifacthub.io/packages/helm/chatcli/chatcli"},{"label":"Container Registry","href":"https://github.com/diillson/chatcli/pkgs/container/chatcli"}]}]},"search":{"prompt":"Search"},"seo":{"metatags":{"og:type":"website","og:site_name":"ChatCLI Documentation","twitter:card":"summary_large_image","twitter:site":"@diillson"}},"fonts":{"heading":{"family":"Geist","weight":600},"body":{"family":"Geist"}},"styling":{"eyebrows":"section","codeblocks":"system","latex":true},"integrations":{},"errors":{"404":{"redirect":false}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"interaction":{"drilldown":true},"navigation":{"languages":[{"language":"en","default":true,"href":""},{"language":"pt-BR","footer":{"socials":{"github":"https://github.com/diillson/chatcli","x":"https://x.com/diillson"},"links":[{"header":"Recursos","items":[{"label":"Documentação","href":"/pt"},{"label":"Cookbook","href":"/pt/cookbook/agent-refactoring"},{"label":"API Reference","href":"/pt/reference/api/overview"}]},{"header":"Comunidade","items":[{"label":"GitHub","href":"https://github.com/diillson/chatcli"},{"label":"Issues","href":"https://github.com/diillson/chatcli/issues"},{"label":"Discussions","href":"https://github.com/diillson/chatcli/discussions"},{"label":"Releases","href":"https://github.com/diillson/chatcli/releases"}]},{"header":"Distribuição","items":[{"label":"ArtifactHub","href":"https://artifacthub.io/packages/search?ts_query_web=chatcli"},{"label":"Helm Charts","href":"https://artifacthub.io/packages/helm/chatcli/chatcli"},{"label":"Container Registry","href":"https://github.com/diillson/chatcli/pkgs/container/chatcli"}]}]},"navbar":{"links":[{"href":"/pt/cookbook/agent-refactoring","label":"Cookbook"},{"href":"/pt/releases","label":"Releases"},{"href":"https://github.com/diillson/chatcli","type":"github"}],"primary":{"type":"button","label":"Instalar","href":"/pt/start/installation"}},"href":"pt"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"encom","hasAudioNarration":false,"actualSubdomain":"encom","customDomains":["chatcli.edilsonfreitas.com"],"gitSource":{"type":"github","owner":"diillson","repo":"chatcli.ai","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6add3f6f4a5b340ece6c5bdc","collectionId":"5cbb3b73-f2f1-405d-a6ed-6a6bb4ae345b","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6add3f6f4a5b340ece6c5bdc"},"entitlements":{},"buildId":"6add3f6f4a5b340ece6c5bdc","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"en","tag":"Documentation","count":206},{"language":"pt-BR","tag":"Documentação","count":206},{"language":"en","tag":"Reference","count":55},{"language":"pt-BR","tag":"Referência","count":55},{"language":"en","tag":"REST API","count":50},{"language":"pt-BR","tag":"REST API","count":50},{"language":"en","tag":"Agents","count":20},{"language":"pt-BR","tag":"Agentes","count":20},{"language":"en","tag":"Context \u0026 memory","count":16},{"language":"en","tag":"Cookbook","count":16},{"language":"pt-BR","tag":"Contexto e memória","count":16},{"language":"pt-BR","tag":"Cookbook","count":16},{"language":"en","tag":"Using ChatCLI","count":15},{"language":"pt-BR","tag":"Usando o ChatCLI","count":15},{"language":"en","tag":"Kubernetes \u0026 AIOps","count":14},{"language":"pt-BR","tag":"Kubernetes e AIOps","count":14},{"language":"en","tag":"Tools","count":13},{"language":"pt-BR","tag":"Ferramentas","count":13},{"language":"en","tag":"Channels \u0026 gateway","count":11},{"language":"pt-BR","tag":"Canais e gateway","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@keyframes cb-blink{50%{opacity:0}}@keyframes cc-nav-in{0%{opacity:0;transform:translateX(18px)}}@keyframes cc-nav-out{0%{opacity:0;transform:translateX(-18px)}}:root{--cc-accent:#0f766e;--cc-accent-strong:#115e59;--cc-accent-soft:rgb(13 148 136 / 0.08);--cc-accent-ring:rgb(13 148 136 / 0.32);--cc-glow:rgb(20 184 166 / 0.07);--cc-text:#17171a;--cc-text-2:#46464e;--cc-text-3:#6b6b74;--cc-surface:#ffffff;--cc-surface-2:#f1f0ed;--cc-code-bg:#f3f2ef;--cc-border:rgb(23 23 26 / 0.10);--cc-border-strong:rgb(23 23 26 / 0.18);--cc-shadow:0 1px 2px rgb(0 0 0 / 0.04), 0 8px 24px -12px rgb(0 0 0 / 0.10);--cc-radius:0.75rem;--cc-radius-sm:0.5rem;--cc-mono:\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}html.dark{--cc-accent:#2dd4bf;--cc-accent-strong:#5eead4;--cc-accent-soft:rgb(45 212 191 / 0.12);--cc-accent-ring:rgb(45 212 191 / 0.40);--cc-glow:rgb(45 212 191 / 0.08);--cc-text:#ededed;--cc-text-2:#bcbcc4;--cc-text-3:#8e8e96;--cc-surface:#161719;--cc-surface-2:#1c1d20;--cc-code-bg:#121314;--cc-border:rgb(154 154 162 / 0.16);--cc-border-strong:rgb(154 154 162 / 0.28);--cc-shadow:0 1px 2px rgb(0 0 0 / 0.25), 0 12px 32px -16px rgb(0 0 0 / 0.6);--cc-live:#4ade80;--cc-live-soft:rgb(74 222 128 / 0.12)}::selection{background:var(--cc-accent-ring)}body::before{content:\"\";position:fixed;inset:0 0 auto auto;width:60vw;height:32rem;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 75% 0%,var(--cc-glow),transparent 65%)}#navbar{backdrop-filter:saturate(140%) blur(12px)}#navbar #search-bar-entry{border-color:var(--cc-border);background:var(--cc-surface);box-shadow:none}#sidebar-title,#topbar-cta-button a{font-weight:500}#sidebar-title{font-size:.75rem;letter-spacing:.01em;color:var(--cc-text-3)}#navbar #search-bar-entry,#sidebar #navigation-items a,#topbar-cta-button a{border-radius:var(--cc-radius-sm)}#sidebar #navigation-items a.text-primary,#sidebar #navigation-items a[class*=bg-primary]{background:var(--cc-accent-soft);color:var(--cc-accent);text-shadow:none;font-weight:500}.nav-tag-pill-text{font-family:var(--cc-mono);font-weight:500!important;letter-spacing:.02em}#header .eyebrow{color:var(--cc-accent);font-size:.8125rem;font-weight:500}#page-title{font-size:clamp(2rem,3.2vw,2.5rem);font-weight:600;letter-spacing:-.025em;line-height:1.15}#header .prose{color:var(--cc-text-2)}#page-context-menu button,#page-context-menu-button{border-radius:var(--cc-radius-sm)}#content{font-size:.975rem}#content h2,#content h3{letter-spacing:-.02em;font-weight:600}#content h3{letter-spacing:-.01em}#content a:not(.card):not([class*=cc-]){text-decoration-color:var(--cc-accent-ring);text-underline-offset:3px}#content a:not(.card):not([class*=cc-]):hover{text-decoration-color:var(--cc-accent)}.font-mono,code,kbd,pre{font-family:var(--cc-mono)!important}#content :not(pre)>code{font-size:.85em;padding:.1em .38em;border-radius:.375rem;border:1px solid var(--cc-border);background:var(--cc-surface-2)}.code-block,[data-component-part=code-block-root]{border-radius:var(--cc-radius)!important;border-color:var(--cc-border)!important}.callout,.code-block-background{border-radius:var(--cc-radius)!important}html.dark .code-block-background{background:var(--cc-code-bg)!important}#content table{font-size:.9rem}#content table thead th{font-size:.8125rem;font-weight:600;color:var(--cc-text-2);border-bottom:1px solid var(--cc-border-strong)}#content table td{border-color:var(--cc-border)}.callout{border:1px solid var(--cc-border)!important;background:var(--cc-surface)!important;box-shadow:var(--cc-shadow)}.callout>div:last-child,.callout>div:last-child *{color:var(--cc-text-2)}.callout>div:last-child code,.callout>div:last-child strong{color:var(--cc-text)!important}.callout[data-callout-type=warning]{border-left:3px solid #f59e0b!important}.callout[data-callout-type=danger]{border-left:3px solid #ef4444!important}.card{border-radius:var(--cc-radius)!important;border-color:var(--cc-border)!important;background:var(--cc-surface)!important;transition:border-color 160ms ease,transform 160ms ease}a.card:hover{border-color:var(--cc-accent-ring)!important}.card [data-component-part=card-icon]{display:grid;place-items:center;width:2.25rem;height:2.25rem;margin-bottom:.25rem;border-radius:var(--cc-radius-sm);border:1px solid var(--cc-border);background:var(--cc-surface-2)}.card [data-component-part=card-icon] svg{width:1rem!important;height:1rem!important;background-color:var(--cc-accent)!important}.steps [data-component-part=step-number]>div{background:var(--cc-surface)!important;box-shadow:0 0 0 1px var(--cc-accent-ring);color:var(--cc-accent)!important;font-family:var(--cc-mono)}[role=tablist] [data-state=active],[role=tablist] button[aria-selected=true]{color:var(--cc-accent)!important;border-color:var(--cc-accent)!important}#content-area:has([data-chatcli-banner]) #header,#content-area:has([data-chatcli-banner]) #header .eyebrow,#content-area:has([data-chatcli-banner]) #header .prose,#content-area:has([data-chatcli-banner]) #page-title{display:none}#content-area:has([data-chatcli-banner]) #content{margin-top:0}.chatcli-banner{margin:3rem 0 .75rem}.chatcli-banner-art{--cb-a:#0d9488;--cb-b:#0891b2;--cb-c:#2563eb;--cb-edge:rgb(23 23 26 / 0.28);--cb-glow:rgb(13 148 136 / 0.18);display:block;width:min(100%,30rem);height:auto;overflow:visible}html.dark .chatcli-banner-art{--cb-a:#2dd4bf;--cb-b:#22d3ee;--cb-c:#60a5fa;--cb-edge:rgb(237 237 237 / 0.22);--cb-glow:rgb(45 212 191 / 0.34)}.chatcli-banner .cb-fills rect{shape-rendering:crispEdges}.chatcli-banner .cb-fills{filter:drop-shadow(0 0 14px var(--cb-glow))}.chatcli-banner .cb-edges path{fill:none;stroke:var(--cb-edge);stroke-width:.55;stroke-linecap:square}.cb-prompt{margin:0 0 1.25rem;font-family:var(--cc-mono);font-size:.95rem;color:var(--cc-text-2)}.cb-prompt-sign{color:var(--cc-accent)}.cb-cursor{display:inline-block;width:.55em;height:1.1em;margin-left:.3em;vertical-align:-.18em;background:var(--cc-accent);animation:cb-blink 1.1s steps(1) infinite}@media (prefers-reduced-motion:reduce){.cb-cursor{animation:none}}.chatcli-banner-tagline{font-size:1.125rem;line-height:1.6;margin:0 0 2rem;max-width:44rem;color:var(--cc-text-2)}.chatcli-banner-tagline strong{color:var(--cc-text);font-weight:500}.cc-entry>div,a.cc-release{border:1px solid var(--cc-border);border-radius:var(--cc-radius);background:var(--cc-surface)}a.cc-release{display:flex;align-items:center;gap:.75rem;padding:.85rem 1.1rem;margin:0 0 1.25rem;color:var(--cc-text-2);font-size:.875rem;text-decoration:none!important;border-bottom-width:1px;transition:border-color 160ms ease}a.cc-release:hover{border-color:var(--cc-accent-ring)}.cc-release-label{color:var(--cc-text-3);white-space:nowrap}.cc-release-version{display:inline-flex;align-items:center;gap:.4rem;font-weight:600;color:var(--cc-text);white-space:nowrap}.cc-release-version::before{content:\"\";width:.4rem;height:.4rem;border-radius:999px;background:var(--cc-live);box-shadow:0 0 0 3px var(--cc-live-soft)}.cc-release-summary{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-release-cta{font-weight:500;color:var(--cc-text);white-space:nowrap}.cc-entry{margin:0 0 3rem}.cc-entry>div{gap:0!important;overflow:hidden}.cc-entry .card{margin:0!important;border:0!important;border-radius:0!important;background:0 0!important;height:100%}.cc-entry .card:hover{background:var(--cc-accent-soft)!important}@media (min-width:1024px){.cc-entry .card{border-left:1px solid var(--cc-border)!important}.cc-entry>div>.card:first-child,.cc-entry>div>:first-child .card{border-left:0!important}}@media (max-width:1023px){.cc-entry .card{border-top:1px solid var(--cc-border)!important}.cc-entry>div>.card:first-child,.cc-entry>div>:first-child .card{border-top:0!important}a.cc-release{flex-wrap:wrap}.cc-release-summary{flex-basis:100%;white-space:normal}}.cc-release-meta{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem;margin:0 0 1.5rem;font-size:.875rem;color:var(--cc-text-3)}.cc-release-meta a{color:var(--cc-text-2)!important}.cc-scope{display:inline-block;margin-right:.35rem;padding:.05rem .4rem;border-radius:.375rem;border:1px solid var(--cc-border);background:var(--cc-surface-2);font-family:var(--cc-mono);font-size:.78em;color:var(--cc-text-2);vertical-align:.08em}a.cc-scope{text-decoration:none!important;color:var(--cc-accent)!important}.cc-refs{font-size:.85em;color:var(--cc-text-3);white-space:nowrap}.cc-refs a{color:var(--cc-text-3)!important}html{--cc-live:#15803d;--cc-live-soft:rgb(21 128 61 / 0.10)}.nav-tag-pill-text[data-nav-tag=\"Mais recente\"],.nav-tag-pill-text[data-nav-tag=Latest],.nav-tag-pill-text[data-nav-tag^=v]{display:inline-flex;align-items:center;gap:.3rem;color:var(--cc-live)!important;background:var(--cc-live-soft)!important}.nav-tag-pill-text[data-nav-tag=\"Mais recente\"]::before,.nav-tag-pill-text[data-nav-tag=Latest]::before,.nav-tag-pill-text[data-nav-tag^=v]::before{content:\"\";width:.35rem;height:.35rem;border-radius:999px;background:currentColor}.cc-nav-back{display:flex;align-items:center;gap:.6rem;width:100%;margin:0 0 1rem;padding:.6rem .85rem;border:1px solid var(--cc-border);border-radius:var(--cc-radius-sm);background:var(--cc-surface);color:var(--cc-text);font-weight:600;text-align:left;cursor:pointer;transition:border-color 160ms ease,background 160ms ease}#navigation-items[data-cc-focus] [data-cc-focused]>button,.cc-nav-back[hidden]{display:none}.cc-nav-back:hover,a.cc-channel:hover{border-color:var(--cc-accent-ring)}.cc-nav-back svg{flex:none;color:var(--cc-text-3)}#navigation-items[data-cc-focus] ul.sidebar-group>li:not([data-cc-focused]),#navigation-items[data-cc-focus]>div:not(:has([data-cc-focused])){display:none}#navigation-items[data-cc-focus]>div:has([data-cc-focused]){margin-top:0}#navigation-items[data-cc-focus]>div:has([data-cc-focused])>:not(ul){display:none}#navigation-items[data-cc-focus] [data-cc-focused]>ul>li>a,#navigation-items[data-cc-focus] [data-cc-focused]>ul>li>button{padding-left:1rem!important}#navigation-items[data-cc-focus] [data-cc-focused]>ul>li>ul a,#navigation-items[data-cc-focus] [data-cc-focused]>ul>li>ul button{padding-left:1.75rem!important}#navigation-items.cc-nav-in{animation:cc-nav-in 220ms cubic-bezier(.23,1,.32,1)}#navigation-items.cc-nav-out{animation:cc-nav-out 220ms cubic-bezier(.23,1,.32,1)}@media (prefers-reduced-motion:reduce){#navigation-items.cc-nav-in,#navigation-items.cc-nav-out{animation:none}}.cc-channels{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.85rem;margin:1.25rem 0 2rem}@media (max-width:900px){.cc-channels{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:520px){.cc-channels{grid-template-columns:1fr}}a.cc-channel{display:flex;align-items:center;gap:.85rem;padding:1rem 1.1rem;border:1px solid var(--cc-border);border-radius:var(--cc-radius);background:var(--cc-surface);color:var(--cc-text)!important;font-weight:500;font-size:.95rem;text-decoration:none!important;transition:border-color 160ms ease,transform 160ms ease}.cc-channel-icon{display:grid;place-items:center;flex:none;width:1.6rem;height:1.6rem}.cc-channel-icon svg{width:1.45rem;height:1.45rem}.cc-channel-name{flex:1;min-width:0}.cc-channel-arrow{flex:none;width:1rem;height:1rem;color:var(--cc-text-3);transition:transform 160ms ease,color 160ms ease}a.cc-channel:hover .cc-channel-arrow{color:var(--cc-text);transform:translateX(2px)}.cc-ch-telegram{color:#26a5e4}.cc-ch-slack{color:#e01e5a}.cc-ch-discord{color:#5865f2}.cc-ch-whatsapp{color:#25d366}.cc-ch-webhook{color:var(--cc-accent)}.cc-ch-all{color:var(--cc-text-3)}html.dark .cc-ch-discord{color:#8991ff}#sidebar #navigation-items a,#sidebar #navigation-items button{font-size:.8125rem!important;line-height:1.35rem;padding-top:.3rem!important;padding-bottom:.3rem!important}#sidebar #navigation-items svg{width:.95rem;height:.95rem}.cc-nav-back{font-size:.8125rem}#table-of-contents,#table-of-contents a,#table-of-contents li{font-size:.8125rem!important;line-height:1.3rem}#table-of-contents a{padding-top:.2rem;padding-bottom:.2rem}#content-container:has([data-chatcli-banner]){max-width:min(100%,1440px)!important}#content-container:has([data-chatcli-banner]) #content-area{max-width:none!important}#navigation-items li[data-title]:not([id])>button>div:not(:has(svg)){flex:1 1 auto;min-width:0;text-align:left}body::after{content:\"\";position:absolute;top:0;right:0;z-index:0;width:min(78vw,1100px);height:440px;pointer-events:none;background:linear-gradient(225deg,#2dd4bf 0,#22d3ee 40%,#60a5fa 75%,transparent 100%);-webkit-mask:url(/images/hero-halftone.svg) right top/100% 100% no-repeat;mask:url(/images/hero-halftone.svg) right top/100% 100% no-repeat;opacity:.6}html:not(.dark) body::after{background:linear-gradient(225deg,#0d9488 0,#0891b2 40%,#2563eb 75%,transparent 100%);opacity:.38}@media (max-width:760px){body::after{width:100vw;height:280px;opacity:.4}html:not(.dark) body::after{opacity:.26}}#navigation-items li[data-title]:not([id])>button{position:relative}#navigation-items li[data-title]:not([id])>button>:last-child svg,#navigation-items li[data-title]:not([id])>button>svg:last-child{visibility:hidden}#navigation-items li[data-title]:not([id])>button::after{content:\"\";position:absolute;top:50%;right:.7rem;width:12px;height:12px;margin-top:-6px;background:currentColor;-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m6 3.5 4.5 4.5L6 12.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\") center/contain no-repeat;mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m6 3.5 4.5 4.5L6 12.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\") center/contain no-repeat;opacity:.42;pointer-events:none;transition:rotate 200ms cubic-bezier(.23,1,.32,1),opacity 160ms ease}#navigation-items li[data-title]:not([id])>button[aria-expanded=true]::after{rotate:90deg}#navigation-items li[data-title]:not([id])>button:hover::after{opacity:.75}@media (prefers-reduced-motion:reduce){#navigation-items li[data-title]:not([id])>button::after{transition:none}}"}],"page":{"pagePath":"agents/agent-park","slug":"/agents/agent-park","pageMetadata":{"title":"Agent Park \u0026 Resume — Non-blocking suspension","sidebarTitle":"Park \u0026 Resume","description":"@park tool that suspends the agent, frees the terminal, and auto-resumes itself when the timer/probe completes.","icon":"circle-pause","href":"/agents/agent-park"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"@park tool that suspends the agent, frees the terminal, and auto-resumes itself when the timer/probe completes.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,CodeBlock,Heading,Info,Mermaid,Tab,Table,Tabs,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Park \u0026 Resume`}),` turns the agent loop into something that can wait `,_jsx(_components.strong,{children:`without blocking the terminal`}),`. Instead of the old `,_jsx(_components.code,{children:`bash sleep 300`}),` pattern that locks the screen for 5 minutes, the agent emits a single `,_jsx(_components.code,{children:`@park`}),` tool call that:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Snapshots`}),` the loop state (history, counters, mode) to disk.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Frees the terminal`}),` — you can chat, list jobs, open another `,_jsx(_components.code,{children:`/coder`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Schedules`}),` the resume on the durable scheduler (survives crash/restart).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Auto-resumes`}),` by itself once the timer/poll completes, `,_jsx(_components.strong,{children:`without you pressing Enter`}),`.`]}),`\n`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Available since `,_jsx(_components.strong,{children:`chatcli 1.111.x`}),` (PR #879). Works in `,_jsx(_components.code,{children:`/coder`}),`, `,_jsx(_components.code,{children:`/agent`}),` and `,_jsx(_components.code,{children:`/run`}),` modes. Auto-resume uses TIOCSTI on Unix and `,_jsx(_components.code,{children:`WriteConsoleInputW`}),` on Windows; transparent fallback when the OS restricts the injection.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`flow-overview`,children:`Flow overview`}),`\n`,_jsx(Mermaid,{chart:`flowchart LR\n U([User]) -->|/coder fix CI| A1[Agent loop]\n A1 -->|@park delay=5m| Snap[Snapshot\u003cbr/>~/.chatcli/parked/]\n Snap --> Sched[Scheduler\u003cbr/>AgentResume job]\n A1 -->|return nil| T([Terminal free])\n\n T -.->|user keeps using normally| T\n Sched -->|fires after 5m| Notify[NotifyParkComplete]\n Notify -->|TIOCSTI inject| Prompt[/resume token]\n Prompt -->|drain queue| A2[Agent loop continues]\n A2 -->|history restored| Done([Task complete])\n\n classDef user fill:#2563EB,stroke:#1E40AF,color:#fff\n classDef agent fill:#10B981,stroke:#059669,color:#fff\n classDef storage fill:#F59E0B,stroke:#D97706,color:#fff\n classDef sched fill:#7C3AED,stroke:#6D28D9,color:#fff\n\n class U,T user\n class A1,A2,Done agent\n class Snap storage\n class Sched,Notify,Prompt sched`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`why-this-is-needed`,children:`Why this is needed`}),`\n`,_jsxs(_components.p,{children:[`Before park, waiting inside a `,_jsx(_components.code,{children:`/coder`}),` meant:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# bad — terminal locked, every agent turn is a \"tool call\"`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`bash`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` sleep`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 300`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # 5 minutes idle, you can't type anything`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ...`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # check CI`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[ `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`$?`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -eq`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ] \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`...`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Problems:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Terminal blocked`}),` for the full 300 s.`]}),`\n`,_jsxs(_components.li,{children:[`Each `,_jsx(_components.code,{children:`bash`}),` call burns a `,_jsx(_components.strong,{children:`turn`}),` of the agent’s turn budget (default 100).`]}),`\n`,_jsx(_components.li,{children:`CLI crash = lose the sleep and the state.`}),`\n`,_jsx(_components.li,{children:`No audit trail — only in shell history.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`With `,_jsx(_components.code,{children:`@park`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Terminal freed`}),` immediately; you keep using the CLI.`]}),`\n`,_jsxs(_components.li,{children:[`Park takes a `,_jsx(_components.strong,{children:`single turn`}),` regardless of duration (10 s or 14 days).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Crash-safe`}),` — disk snapshot + scheduler WAL replay on boot.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Full audit`}),` via `,_jsx(_components.code,{children:`/jobs logs`}),` and `,_jsx(_components.code,{children:`/parked`}),`.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsxs(Heading,{level:`2`,id:`four-modes-of-@park`,children:[`Four modes of `,_jsx(_components.code,{children:`@park`})]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`delay`,id:`delay`,children:[_jsx(_components.p,{children:`Fixed timer. Single-shot. Ideal for “wait before checking again”.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`xml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`xml`,children:_jsxs(_components.code,{language:`xml`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tool_call`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@park\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\": \"delay\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"args\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"duration\": \"5m\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"note\": \"waiting for CI #1234\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`]})})}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`duration`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`✅`}),_jsxs(_components.td,{children:[`Go duration: `,_jsx(_components.code,{children:`30s`}),`, `,_jsx(_components.code,{children:`5m`}),`, `,_jsx(_components.code,{children:`1h`}),`. Max 14 days.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`note`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`—`}),_jsxs(_components.td,{children:[`Human label shown in `,_jsx(_components.code,{children:`/parked`}),`.`]})]})]})]})]}),_jsxs(Tab,{title:`until`,id:`until`,children:[_jsx(_components.p,{children:`Absolute wallclock or relative DSL. Single-shot.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`xml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`xml`,children:_jsxs(_components.code,{language:`xml`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tool_call`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@park\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\": \"until\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"args\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"when\": \"2026-05-04T18:00:00Z\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"note\": \"deploy window\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Accepted formats in `,_jsx(_components.code,{children:`when`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`RFC3339: `,_jsx(_components.code,{children:`2026-05-04T18:00:00Z`})]}),`\n`,_jsxs(_components.li,{children:[`Common layouts: `,_jsx(_components.code,{children:`2006-01-02 15:04:05`}),`, `,_jsx(_components.code,{children:`2006-01-02 15:04`}),`, `,_jsx(_components.code,{children:`15:04`})]}),`\n`,_jsxs(_components.li,{children:[`Relative: `,_jsx(_components.code,{children:`+5m`}),`, `,_jsx(_components.code,{children:`in 5m`}),`, `,_jsx(_components.code,{children:`after 30s`}),`, `,_jsx(_components.code,{children:`5m`})]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`15:04`}),` is projected onto today; if already passed, rolls to tomorrow.`]})]}),_jsxs(Tab,{title:`for_url`,id:`for_url`,children:[_jsxs(_components.p,{children:[`HTTP polling until the response matches `,_jsx(_components.code,{children:`success_when`}),` (or the deadline elapses).`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`xml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`xml`,children:_jsxs(_components.code,{language:`xml`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tool_call`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@park\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\": \"for_url\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"args\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"url\": \"https://api.github.com/repos/x/y/actions/runs/12345\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"interval\": \"30s\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"deadline\": \"15m\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"method\": \"GET\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"headers\": {\"Authorization\": \"Bearer ghp_...\"},`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"success_when\": \"body contains:\\\\\"status\\\\\":\\\\\"completed\\\\\"\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`]})})}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`url`})}),_jsx(_components.td,{children:`✅`}),_jsx(_components.td,{children:`http(s)://`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`interval`})}),_jsx(_components.td,{children:`✅`}),_jsx(_components.td,{children:`Poll cadence (minimum 5 s)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`deadline`})}),_jsx(_components.td,{children:`✅`}),_jsx(_components.td,{children:`Maximum total wait (Go duration or RFC3339)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`method`})}),_jsx(_components.td,{children:`—`}),_jsxs(_components.td,{children:[`Defaults to `,_jsx(_components.code,{children:`GET`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`headers`})}),_jsx(_components.td,{children:`—`}),_jsx(_components.td,{children:`Optional map`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`success_when`})}),_jsx(_components.td,{children:`—`}),_jsxs(_components.td,{children:[`DSL — see `,_jsx(_components.a,{href:`#success_when-matchers`,children:`Matchers`}),`. Empty = any 2xx`]})]})]})]})]}),_jsxs(Tab,{title:`for_cmd`,id:`for_cmd`,children:[_jsxs(_components.p,{children:[`Shell-command polling until `,_jsx(_components.code,{children:`success_when`}),` matches (or the deadline elapses). Subject to the same security policy as `,_jsx(_components.code,{children:`@coder exec`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`xml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`xml`,children:_jsxs(_components.code,{language:`xml`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tool_call`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@park\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\": \"for_cmd\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"args\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\": \"terraform plan -detailed-exitcode -no-color\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"interval\": \"45s\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"deadline\": \"20m\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"success_when\": \"exit=0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`]})})}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cmd`})}),_jsx(_components.td,{children:`✅`}),_jsxs(_components.td,{children:[`Shell command — passes through `,_jsx(_components.code,{children:`/coder`}),` policy`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`interval`})}),_jsx(_components.td,{children:`✅`}),_jsx(_components.td,{children:`Minimum 5 s`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`deadline`})}),_jsx(_components.td,{children:`✅`}),_jsx(_components.td,{children:`Maximum total`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`success_when`})}),_jsx(_components.td,{children:`—`}),_jsx(_components.td,{children:`DSL. Empty = exit code 0`})]})]})]})]})]}),`\n`,_jsxs(Heading,{level:`3`,id:`success_when-matchers`,children:[_jsx(_components.code,{children:`success_when`}),` matchers`]}),`\n`,_jsx(_components.p,{children:`Free-form DSL. Empty assumes “default success” (HTTP 2xx or exit 0).`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Form`}),_jsx(_components.th,{children:`Example`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`status=N`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`status=200`})}),_jsx(_components.td,{children:`Exact HTTP status`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`status=lo..hi`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`status=200..299`})}),_jsx(_components.td,{children:`HTTP status in range`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`exit=N`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`exit=0`})}),_jsx(_components.td,{children:`Exact shell exit code`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`body contains:\u003cstr>`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`body contains:completed`})}),_jsx(_components.td,{children:`Substring on body/stdout`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`body matches:\u003cre>`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`body matches:^OK$`})}),_jsx(_components.td,{children:`Regex (Go regexp) on body/stdout`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Multiple matchers in a single spec are not supported; combine using a custom `,_jsx(_components.code,{children:`body matches:`}),` if you need logic.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`management-commands`,children:`Management commands`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`/parked`,id:`%2Fparked`,children:[_jsx(_components.p,{children:`Lists all on-disk parks with cross-checked scheduler job status.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`❯`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /parked`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` Parked`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` agents`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (token `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mode`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` description`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` scheduler`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` status`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` 3e06f8d5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [delay] delay 10m — waiting `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` CI `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`#1234`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` resume_at`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`15:42:00`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` job`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`cc230eb0c9eafcf7`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` (queued`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` created`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`2026-05-04`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` 15:32:00`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` 8b7e1234`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [for_url] polling https://api.github.com/... every 30s`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` resume_at`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`14:47:00`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` (deadline`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`job`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`ab1234...`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` (running`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` created`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`2026-05-04`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` 14:32:00`})]}),`\n`]})})}),_jsx(_components.p,{children:`Subcommands:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Command`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/parked`})}),_jsx(_components.td,{children:`List (default)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/parked prune`})}),_jsx(_components.td,{children:`Remove snapshots whose scheduler job is in a terminal state (completed/failed/cancelled/timed_out) — cleanup after resume`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/parked gc \u003cduration>`})}),_jsxs(_components.td,{children:[`Remove snapshots older than `,_jsx(_components.code,{children:`\u003cduration>`}),` regardless of status (e.g. `,_jsx(_components.code,{children:`/parked gc 24h`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/parked help`})}),_jsx(_components.td,{children:`Show usage`})]})]})]})]}),_jsxs(Tab,{title:`/resume`,id:`%2Fresume`,children:[_jsx(_components.p,{children:`Forces immediate resume (skips remaining wait).`}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`❯`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /resume`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 3e06f8d5`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` ▶️`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Agent`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` resumed`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (token=3e06f8d5..., `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`outcome=manual`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) — continuing from where it stopped.`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Accepts a unique prefix of the token (8 chars usually enough), like `,_jsx(_components.code,{children:`git checkout abc123`}),`.`]}),_jsx(Tip,{children:_jsxs(_components.p,{children:[`If auto-resume already consumed the token (common race), `,_jsx(_components.code,{children:`/resume \u003csame-token>`}),` is silent (idempotent no-op). Errors only surface for genuinely invalid tokens. Detection TTL: 30 s after auto-resume.`]})})]}),_jsxs(Tab,{title:`/cancel-park`,id:`%2Fcancel-park`,children:[_jsx(_components.p,{children:`Aborts a park: removes snapshot + cancels scheduler job.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`❯`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /cancel-park`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 3e06f8d5`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` ✓`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Park`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 3e06f8d5d984...`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cancelled`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` and`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` snapshot`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` removed.`})]}),`\n`]})})}),_jsx(_components.p,{children:`Idempotent: cancelling an already-consumed park just removes the file if present.`})]}),_jsxs(Tab,{title:`/park-note`,id:`%2Fpark-note`,children:[_jsx(_components.p,{children:`Sends a directive to the most recently parked agent of this session. Plain chat keeps working normally while an agent is parked — directing it is an explicit action:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`❯`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /park-note`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` be`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` more`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` detailed`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` in`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` the`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` next`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` report`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` 💬`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` noted`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` for`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` the`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` parked`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` agent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (resumes `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`18:44:09`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) — /resume b733521e to wake it now`})]}),`\n`]})})}),_jsx(_components.p,{children:`The directive is persisted into the park snapshot (durable across restarts) and delivered as a user instruction right when the agent resumes — before it produces that cycle’s report. The first plain chat message you send while a park is waiting prints a one-line hint pointing to this command.`})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`mid-park-directives`,children:`Mid-park directives`}),`\n`,_jsxs(_components.p,{children:[`While an agent is parked the terminal is yours: plain text goes to normal chat, every command works, and you can even run another `,_jsx(_components.code,{children:`/coder`}),` task in parallel. To talk `,_jsx(_components.strong,{children:`to the parked agent`}),`, use the explicit channels:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Channel`}),_jsx(_components.th,{children:`Who uses it`}),_jsx(_components.th,{children:`Effect`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/park-note \u003cmessage>`})}),_jsx(_components.td,{children:`You, at the prompt`}),_jsx(_components.td,{children:`Directive stored in the snapshot; injected as a user instruction at resume`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@park list`})}),_jsx(_components.td,{children:`Any agent (tool call)`}),_jsx(_components.td,{children:`Lists every parked agent: token, mode, wait parameters, pending directive count`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@park note {token?, text}`})}),_jsx(_components.td,{children:`Any agent (tool call)`}),_jsxs(_components.td,{children:[`Same directive channel, cross-agent — newest park when `,_jsx(_components.code,{children:`token`}),` is omitted`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`@park cancel {token?, reason?}`})}),_jsx(_components.td,{children:`Any agent (tool call)`}),_jsxs(_components.td,{children:[`Ends a parked wait now: cancels the scheduler job and wakes the agent immediately (newest park when `,_jsx(_components.code,{children:`token`}),` is omitted); refused while the park is already resuming. Works across processes (see below)`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cross-process cancel.`}),` A park snapshot lives on disk and any chatcli process on the host can load it, but only the process that parked the agent holds its scheduler job and its wake path (the REPL resume queue, or the in-turn waiter of a gateway/ACP/MCP turn). With the Conversation Hub enabled, every process mirrors the parks it owns into the hub with a heartbeat. `,_jsx(_components.code,{children:`@park cancel`}),` then has three outcomes: a park owned by this process is woken here; a park owned by another process that still heartbeats is woken `,_jsx(_components.strong,{children:`there`}),` (the request is written to the hub; the owner drops its scheduler job and resumes the agent with `,_jsx(_components.code,{children:`outcome=cancelled`}),` on its next sync tick, typically within a second); a park whose owner stopped heartbeating (its session ended) is resumed by the cancelling process. Before this, a cancel issued from a second process resumed the park locally while the owner’s job stayed armed, so the same park resumed twice.`]}),`\n`,_jsxs(_components.p,{children:[`This makes parked loops composable: a second agent investigating an incident can `,_jsx(_components.code,{children:`@park list`}),`, spot the monitoring loop parked for 10 minutes, and `,_jsx(_components.code,{children:`@park note`}),` it — `,_jsx(_components.em,{children:`“the deploy finished, validate and stop monitoring”`}),` or `,_jsx(_components.em,{children:`“switch your cycle to 5m”`}),`. The parked agent applies cadence changes itself on its next cycle, so scheduler ownership never leaves the loop that created the park.`]}),`\n`,_jsx(_components.p,{children:`At resume time the agent receives the directives as a block:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[user directives received while you were parked]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- be more detailed in the next report`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Address these directives in THIS cycle's report, before scheduling any further @park.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`auto-resume-—-how-the-terminal-“wakes-up-by-itself”`,children:`Auto-resume — how the terminal “wakes up by itself”`}),`\n`,_jsxs(_components.p,{children:[`This is the part that distinguishes park from a plain scheduled task: when the wait completes, the agent returns to foreground `,_jsx(_components.strong,{children:`without you doing anything`}),`.`]}),`\n`,_jsx(Mermaid,{chart:`sequenceDiagram\n participant Sched as Scheduler\u003cbr/>(in-process)\n participant Bridge as schedulerBridge\n participant TTY as Controlling TTY\n participant Prompt as go-prompt\n participant Agent as Agent loop\n\n Sched->>Bridge: AgentResume action fires\n Bridge->>Bridge: Enqueue token\u003cbr/>Print 🔔 banner\n Bridge->>TTY: TIOCSTI inject\u003cbr/>\"/resume \u003ctoken>\" + 15ms + \\\\r\n TTY->>Prompt: kernel delivers bytes\u003cbr/>as real keystrokes\n Prompt->>Agent: executor() runs\u003cbr/>drainPendingResumes()\n Agent->>Agent: Load snapshot\u003cbr/>RunResumed()`}),`\n`,_jsx(Heading,{level:`3`,id:`why-tiocsti`,children:`Why TIOCSTI`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`TIOCSTI`}),` is a POSIX ioctl that injects bytes into the TTY’s input buffer as if the user had typed them. It works with any application reading stdin from the controlling tty — no need to modify go-prompt.`]}),`\n`,_jsx(Heading,{level:`3`,id:`why-two-bursts-body-+-15-ms-+-\\\\r`,children:`Why two bursts (body + 15 ms + \\\\r)`}),`\n`,_jsxs(_components.p,{children:[`go-prompt v0.2.6 uses `,_jsx(_components.code,{children:`bytes.Equal`}),` to classify keys (`,_jsx(_components.code,{children:`input.go:24`}),`). A multi-byte buffer like `,_jsx(_components.code,{children:`/resume abc\\\\r`}),` doesn’t match any sequence in the ASCII table and falls into the default branch which `,_jsx(_components.strong,{children:`inserts as text`}),` — including the trailing `,_jsx(_components.code,{children:`\\\\r`}),`, which becomes literal and never submits. Solution: split.`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Command body in one burst (multi-byte → text insertion).`}),`\n`,_jsxs(_components.li,{children:[`15 ms pause (above `,_jsx(_components.code,{children:`readBuffer`}),`’s 10 ms poll cycle).`]}),`\n`,_jsxs(_components.li,{children:[`Lone `,_jsx(_components.code,{children:`\\\\r`}),` in a second burst (single byte → matches ControlM → submits).`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`windows-uses-writeconsoleinputw`,children:`Windows uses WriteConsoleInputW`}),`\n`,_jsxs(_components.p,{children:[`No TIOCSTI on Windows — kernel32.dll exposes `,_jsx(_components.code,{children:`WriteConsoleInputW`}),` which accepts structured `,_jsx(_components.code,{children:`INPUT_RECORD`}),` events. Each char becomes a key-down/key-up pair; the trailing Enter uses `,_jsx(_components.code,{children:`VirtualKeyCode=VK_RETURN`}),` so go-prompt’s reader classifies it as a native Enter.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`parks-on-acp-mcp-server-and-gateway`,children:`Parks on ACP, MCP server and gateway`}),`\n`,_jsx(_components.p,{children:`The auto-resume machinery above is built around an interactive terminal. Unattended surfaces have no prompt loop to wake — so a park taken there behaves differently, on purpose:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The turn stays open.`}),` Over ACP (IDE) or the MCP server, `,_jsx(_components.code,{children:`@park`}),` does not end the run. The turn blocks in-process, the scheduler delivers the wake directly to it, and every monitoring cycle streams on the `,_jsx(_components.strong,{children:`same client request`}),` — thoughts, tool calls and the cycle report keep arriving in your IDE exactly like any other turn. Re-parks loop in place, so one request covers the whole monitoring conversation.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Stop cancels everything.`}),` Cancelling the turn (IDE Stop, `,_jsx(_components.code,{children:`session/cancel`}),`, client disconnect) retires the park completely: the scheduler job is cancelled, the snapshot deleted, nothing keeps polling in the background.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No terminal takeover.`}),` Banners and the TTY injection never fire on these surfaces — stdout there is a protocol channel, and there is no prompt to redraw.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`On the REPL nothing changes: parks end the run, you get the prompt back, and auto-resume wakes the terminal as documented above.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`platform-support-matrix`,children:`Platform support matrix`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Linux`,id:`linux`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`TIOCSTI`}),` gated by `,_jsx(_components.code,{children:`/proc/sys/dev/tty/legacy_tiocsti`}),`:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Kernel`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Auto-resume`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Pre-5.16`}),_jsx(_components.td,{children:`TIOCSTI always enabled`}),_jsx(_components.td,{children:`✅ works`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`5.16+ server (Ubuntu LTS, RHEL)`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`legacy_tiocsti=0`})}),_jsx(_components.td,{children:`✅ works`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`6.x+ desktop, Docker Desktop linuxkit`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`legacy_tiocsti=1`})}),_jsx(_components.td,{children:`❌ EPERM, fallback active`})]})]})]}),_jsx(_components.p,{children:`To re-enable (root):`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` sysctl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -w`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dev.tty.legacy_tiocsti=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Trade-off: re-enables a feature distros disabled because of `,_jsx(_components.a,{href:`https://nvd.nist.gov/vuln/detail/CVE-2017-5226`,children:`CVE-2017-5226`}),` (sandbox escape via injection). Safe in personal dev environments; on shared servers, prefer the fallback.`]})]}),_jsxs(Tab,{title:`macOS`,id:`macos`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`TIOCSTI`}),` gated by `,_jsx(_components.code,{children:`kern.tiocsti_disable`}),`:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Version`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Auto-resume`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Pre-Ventura (macOS 12 and earlier)`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`kern.tiocsti_disable=0`})}),_jsx(_components.td,{children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Ventura+ (macOS 13, 14, 15, 26)`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`kern.tiocsti_disable=1`})}),_jsx(_components.td,{children:`❌ EPERM, fallback`})]})]})]}),_jsx(_components.p,{children:`Re-enable (sudo):`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` sysctl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -w`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` kern.tiocsti_disable=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`})]}),`\n`]})})}),_jsx(_components.p,{children:`Same as Linux — local decision, fine for personal dev, evaluate on shared environments.`})]}),_jsxs(Tab,{title:`Windows`,id:`windows`,children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`WriteConsoleInputW`}),` is part of the conhost API and always available — no `,_jsx(_components.code,{children:`legacy_tiocsti`}),` equivalent. Auto-resume works in `,_jsx(_components.strong,{children:`Windows Terminal`}),` and `,_jsx(_components.strong,{children:`conhost.exe`}),` out of the box.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Console`}),_jsx(_components.th,{children:`Auto-resume`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Windows Terminal`}),_jsx(_components.td,{children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`conhost.exe (native cmd)`}),_jsx(_components.td,{children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Session without attached console (piped stdin)`}),_jsx(_components.td,{children:`❌ fallback (expected)`})]})]})]})]}),_jsx(Tab,{title:`BSDs`,id:`bsds`,children:_jsx(_components.p,{children:`FreeBSD/NetBSD/OpenBSD don’t restrict TIOCSTI by default — works out of the box.`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`fallback-when-tiocsti/writeconsoleinput-is-unavailable`,children:`Fallback when TIOCSTI/WriteConsoleInput is unavailable`}),`\n`,_jsxs(_components.p,{children:[`When the injection is rejected, the `,_jsx(_components.code,{children:`🔔 park ready`}),` banner still shows up and the token enters the `,_jsx(_components.code,{children:`pendingResumeQueue`}),`. You need to `,_jsx(_components.strong,{children:`type any character + Enter`}),` at the prompt — the executor consumes the queue before processing your input. Equivalent UX with one extra keystroke.`]}),`\n`,_jsxs(_components.p,{children:[`The prompt prefix shows `,_jsx(_components.code,{children:`[🅿️ resume ready: N] ❯`}),` while a resume is pending, so it’s hard to forget.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`real-world-examples`,children:`Real-world examples`}),`\n`,_jsx(Heading,{level:`3`,id:`github-actions-ci`,children:`GitHub Actions CI`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`❯`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /coder`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` push the branch and tell me when CI passes. If it passes, deploy via terraform.`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Agent emits (abridged):`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`xml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`xml`,children:_jsxs(_components.code,{language:`xml`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tool_call`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@coder\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{\"cmd\":\"exec\",\"args\":{\"cmd\":\"git push\"}}'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tool_call`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@park\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\":\"for_url\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"args\":{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"url\":\"https://api.github.com/repos/me/repo/actions/runs?branch=feature`}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`\u0026`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`per_page=1\",`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"interval\":\"30s\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"deadline\":\"20m\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"headers\":{\"Authorization\":\"Bearer ghp_...\"},`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"success_when\":\"body contains:\\\\\"conclusion\\\\\":\\\\\"success\\\\\"\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Terminal returns. You open another `,_jsx(_components.code,{children:`/coder`}),` to refactor tests in parallel. ~15 minutes later:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`🔔 park ready: token=8b7e... outcome=matched`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`▶️ Agent resumed — continuing from where it stopped.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[agent] CI passed. Applying terraform...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\u003ctool_call name=\"@coder\" args='{\"cmd\":\"exec\",\"args\":{\"cmd\":\"terraform apply -auto-approve\"}}' />`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`slow-terraform-apply`,children:`Slow terraform apply`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`xml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`xml`,children:_jsxs(_components.code,{language:`xml`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tool_call`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@park\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\":\"for_cmd\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"args\":{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\":\"terraform plan -detailed-exitcode -no-color\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"interval\":\"45s\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"deadline\":\"30m\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"success_when\":\"exit=0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Important detail: `,_jsx(_components.code,{children:`terraform plan -detailed-exitcode`}),` returns `,_jsx(_components.code,{children:`0`}),` on no diff, `,_jsx(_components.code,{children:`2`}),` on diff present, `,_jsx(_components.code,{children:`1`}),` on error. Here we wait for `,_jsx(_components.code,{children:`0`}),` (convergence). To wait for “diff applied”, swap to `,_jsx(_components.code,{children:`success_when:exit=2`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`off-peak-deploy-window`,children:`Off-peak deploy window`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`xml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`xml`,children:_jsxs(_components.code,{language:`xml`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tool_call`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@park\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\":\"until\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"args\":{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"when\":\"2026-05-05T02:00:00-03:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"note\":\"off-peak deploy\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Agent sleeps until 02:00, resumes, and runs the deploy.`}),`\n`,_jsx(Heading,{level:`3`,id:`post-rollout-health-check`,children:`Post-rollout health check`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`xml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`xml`,children:_jsxs(_components.code,{language:`xml`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tool_call`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@park\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cmd\":\"for_url\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"args\":{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"url\":\"https://prod.example.com/healthz\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"interval\":\"15s\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"deadline\":\"5m\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"success_when\":\"status=200..299\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`security-model`,children:`Security model`}),`\n`,_jsx(Heading,{level:`3`,id:`approving-@park-=-approving-the-polling`,children:`Approving @park = approving the polling`}),`\n`,_jsxs(_components.p,{children:[`When the agent emits `,_jsx(_components.code,{children:`@park for_cmd cmd=\"echo done\"`}),`, `,_jsx(_components.code,{children:`/coder`}),` shows the security check with `,_jsx(_components.strong,{children:`the full args`}),`, including the embedded cmd:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`🔒 SECURITY CHECK`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ⚡ Action: @park`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {\"cmd\":\"for_cmd\",\"args\":{\"cmd\":\"echo done\",\"interval\":\"5s\",...}}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`When you answer `,_jsx(_components.code,{children:`[y]`}),`, you are pre-authorizing the polling shell to run `,_jsx(_components.strong,{children:`that specific cmd you just saw`}),`. ChatCLI propagates `,_jsx(_components.code,{children:`DangerousConfirmed=true`}),` on the scheduler job, so the poll’s fire-time recheck does not stumble on `,_jsx(_components.code,{children:`ShellPolicyAsk`}),` (no human at the keyboard at fire time to approve again).`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Denylist always wins. Even with the interactive approval, commands matching `,_jsx(_components.code,{children:`Deny`}),` rules in your coder policy are rejected at fire time. See `,_jsx(_components.a,{href:`/coder/coder-security`,children:`Coder Security`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`snapshots-are-0o600`,children:`Snapshots are 0o600`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`~/.chatcli/parked/\u003ctoken>.json`}),` contains the park’s full chat history. Files are created with `,_jsx(_components.code,{children:`0o600`}),` (owner-only) and the directory with `,_jsx(_components.code,{children:`0o700`}),`. Snapshots `,_jsx(_components.strong,{children:`never`}),` leak to other users on the host.`]}),`\n`,_jsx(Heading,{level:`3`,id:`token-cannot-path-traverse`,children:`Token cannot path-traverse`}),`\n`,_jsxs(_components.p,{children:[`Tokens are generated with `,_jsx(_components.code,{children:`crypto/rand`}),` (16 bytes hex = 32 chars) and validated against regex `,_jsx(_components.code,{children:`[a-zA-Z0-9._-]{8,128}`}),`. There is no way for `,_jsx(_components.code,{children:`/resume ../etc/passwd`}),` to escape the directory.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`environment-variables`,children:`Environment variables`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Description`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CHATCLI_PARK_DIR`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`$XDG_CONFIG_HOME/chatcli/parked`})}),_jsx(_components.td,{children:`Override of the snapshot directory — useful for tests`})]})})]}),`\n`,_jsxs(_components.p,{children:[`Most behavior is governed by the underlying scheduler — see `,_jsx(_components.a,{href:`/reference/environment-variables`,children:`Scheduler env vars`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`internals-—-for-hackers`,children:`Internals — for hackers`}),`\n`,_jsx(Heading,{level:`3`,id:`snapshot-format`,children:`Snapshot format`}),`\n`,_jsxs(_components.p,{children:[`JSON serialized with `,_jsx(_components.code,{children:`json.MarshalIndent`}),`. Versioned schema (`,_jsx(_components.code,{children:`SchemaVersion = 1`}),`). Main fields:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"version\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"token\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"3e06f8d5d984152a48f50f1c734380fd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"created_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-05-04T15:32:00Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"history\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"is_coder_mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"provider\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ANTHROPIC\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"model\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"claude-opus-4-7\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"park\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"delay\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"delay\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`600000000000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"note\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"waiting for CI\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"scheduler_job_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cc230eb0c9eafcf7\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"pending_tool_call_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"tu_abc123\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`pending_tool_call_id`}),` is the Anthropic native tool_use ID — preserved to reconstruct the tool_use/tool_result pairing on resume (otherwise the next API request rejects with unmatched tool_call).`]}),`\n`,_jsx(Heading,{level:`3`,id:`scheduler-action-types`,children:`Scheduler action types`}),`\n`,_jsx(_components.p,{children:`Park introduces 2 action types:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Payload`}),_jsx(_components.th,{children:`Triggers`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`agent_resume`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{resume_token, outcome, detail}`})}),_jsx(_components.td,{children:`Bridge.NotifyParkComplete → drainPendingResumes → RunResumed`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`park_poll`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{resume_token, mode, url|cmd, interval, deadline_unix, success_when, ...}`})}),_jsx(_components.td,{children:`Probe → matched? AgentResume : reschedule self`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`park_poll`}),` self-reschedules every interval until match or deadline elapses. Crash-safe via WAL replay — an interrupted iteration resumes on boot.`]}),`\n`,_jsx(Heading,{level:`3`,id:`/resume-idempotency`,children:`/resume idempotency`}),`\n`,_jsxs(_components.p,{children:[`Auto-resume injects `,_jsx(_components.code,{children:`/resume \u003ctoken>\\\\r`}),` via TIOCSTI. But the executor already ran the resume on the first line (drainPendingResumes), so when the `,_jsx(_components.code,{children:`/resume \u003ctoken>`}),` command reaches the handler the snapshot was already deleted.`]}),`\n`,_jsxs(_components.p,{children:[`Solution: `,_jsx(_components.code,{children:`markRecentlyResumed(token)`}),` on drain (TTL 30 s) and `,_jsx(_components.code,{children:`wasRecentlyResumed(token)`}),` in handleResumeCommand → silent no-op. Genuinely invalid tokens (user typos) still surface as errors because the TTL is short.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Auto-resume doesn't fire — I see the 🔔 banner but nothing happens`,id:`auto-resume-doesnt-fire-i-see-the-banner-but-nothing-happens`,children:[_jsxs(_components.p,{children:[`Most common cause: `,_jsx(_components.code,{children:`legacy_tiocsti=1`}),` on Linux or `,_jsx(_components.code,{children:`kern.tiocsti_disable=1`}),` on macOS. The banner is printed by the bridge but the injection was rejected by the kernel.`]}),_jsx(_components.p,{children:`Check:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Linux`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`cat`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /proc/sys/dev/tty/legacy_tiocsti`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# macOS`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sysctl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` kern.tiocsti_disable`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`If it returns `,_jsx(_components.code,{children:`1`}),`, either enable (see `,_jsx(_components.a,{href:`#platform-support-matrix`,children:`Platform matrix`}),`) or use the fallback: type any character + Enter at the prompt and the drain consumes the resume.`]})]}),_jsxs(Accordion,{title:`park: no snapshot matching '\u003ctoken>'`,id:`park-no-snapshot-matching-token`,children:[_jsxs(_components.p,{children:[`You’re using the `,_jsx(_components.strong,{children:`job ID`}),` (second column of `,_jsx(_components.code,{children:`/parked`}),`) instead of the `,_jsx(_components.strong,{children:`token`}),` (first column). Tokens have 8 visible chars in `,_jsx(_components.code,{children:`/parked`}),`; job IDs are scheduler-internal.`]}),_jsxs(_components.p,{children:[`Always copy from the first column of `,_jsx(_components.code,{children:`/parked`}),` or use auto-complete (`,_jsx(_components.code,{children:`Tab`}),`).`]})]}),_jsxs(Accordion,{title:`Park stuck in (failed) on /parked`,id:`park-stuck-in-failed-on-parked`,children:[_jsxs(_components.p,{children:[`Check `,_jsx(_components.code,{children:`/jobs show \u003cjob_id>`}),`. Common causes:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`echo done`}),` (or any cmd) classified Ask without DangerousConfirmed`]}),`: should be propagated automatically; report as a bug.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Persistent HTTP 5xx in for_url`}),`: each poll fails, scheduler may mark the job as failed after N retries. Increase `,_jsx(_components.code,{children:`interval`}),` or `,_jsx(_components.code,{children:`deadline`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Denylisted shell command`}),`: a `,_jsx(_components.code,{children:`Deny`}),` rule in the coder policy always wins, even with approval. See `,_jsx(_components.code,{children:`/config security rules`}),`.`]}),`\n`]})]}),_jsx(Accordion,{title:`Snapshots accumulating in ~/.chatcli/parked/`,id:`snapshots-accumulating-in-chatcli-parked`,children:_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`/parked prune`}),` to remove snapshots whose job is terminal (completed/failed/cancelled/timed_out). On long-running systems, consider periodic `,_jsx(_components.code,{children:`/parked gc 24h`}),`.`]})}),_jsxs(Accordion,{title:`How do I tell which controlling TTY receives the injection?`,id:`how-do-i-tell-which-controlling-tty-receives-the-injection`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`tty`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Shows `,_jsx(_components.code,{children:`/dev/pts/N`}),` (Linux) or `,_jsx(_components.code,{children:`/dev/ttysNNN`}),` (macOS). That’s the fd `,_jsx(_components.code,{children:`injectTTYLine`}),` opens via `,_jsx(_components.code,{children:`/dev/tty`}),`.`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`quick-reference`,children:`Quick reference`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Tool inside the agent (XML/JSON envelope)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`tool_call `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@park\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` args`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'{\"cmd\":\"\u003cdelay|until|for_url|for_cmd>\",\"args\":{...}}'`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Management commands`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`/parked`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # list`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`/parked`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` prune`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # clean terminals`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`/parked`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` gc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 24h`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # clean old`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`/resume`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`toke`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # force resume`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`/cancel-park`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`toke`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # abort + remove`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# success_when DSL (for_url and for_cmd)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`200`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # exact HTTP`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`200..299`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # HTTP range`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`exit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`0`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # shell exit`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`body`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` contains:done`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # substring`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`body`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` matches:^OK`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`$ `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# regex`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For background on the scheduler that powers park, see `,_jsx(_components.a,{href:`/tools/scheduler`,children:`Scheduler`}),`. For the security policy on `,_jsx(_components.code,{children:`@coder exec`}),`, see `,_jsx(_components.a,{href:`/coder/coder-security`,children:`Coder Security`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Agent Park \u0026 Resume — Non-blocking suspension","sidebarTitle":"Park \u0026 Resume","description":"@park tool that suspends the agent, frees the terminal, and auto-resumes itself when the timer/probe completes.","icon":"circle-pause","href":"/agents/agent-park"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Flow overview","slug":"flow-overview","depth":2,"children":[]},{"title":"Why this is needed","slug":"why-this-is-needed","depth":2,"children":[]},{"title":"Four modes of @park","slug":"four-modes-of-@park","depth":2,"children":[{"title":"success_when matchers","slug":"success_when-matchers","depth":3,"children":[]}]},{"title":"Management commands","slug":"management-commands","depth":2,"children":[]},{"title":"Mid-park directives","slug":"mid-park-directives","depth":2,"children":[]},{"title":"Auto-resume — how the terminal “wakes up by itself”","slug":"auto-resume-—-how-the-terminal-“wakes-up-by-itself”","depth":2,"children":[{"title":"Why TIOCSTI","slug":"why-tiocsti","depth":3,"children":[]},{"title":"Why two bursts (body + 15 ms + \\r)","slug":"why-two-bursts-body-+-15-ms-+-\\r","depth":3,"children":[]},{"title":"Windows uses WriteConsoleInputW","slug":"windows-uses-writeconsoleinputw","depth":3,"children":[]}]},{"title":"Parks on ACP, MCP server and gateway","slug":"parks-on-acp-mcp-server-and-gateway","depth":2,"children":[]},{"title":"Platform support matrix","slug":"platform-support-matrix","depth":2,"children":[{"title":"Fallback when TIOCSTI/WriteConsoleInput is unavailable","slug":"fallback-when-tiocsti/writeconsoleinput-is-unavailable","depth":3,"children":[]}]},{"title":"Real-world examples","slug":"real-world-examples","depth":2,"children":[{"title":"GitHub Actions CI","slug":"github-actions-ci","depth":3,"children":[]},{"title":"Slow terraform apply","slug":"slow-terraform-apply","depth":3,"children":[]},{"title":"Off-peak deploy window","slug":"off-peak-deploy-window","depth":3,"children":[]},{"title":"Post-rollout health check","slug":"post-rollout-health-check","depth":3,"children":[]}]},{"title":"Security model","slug":"security-model","depth":2,"children":[{"title":"Approving @park = approving the polling","slug":"approving-@park-=-approving-the-polling","depth":3,"children":[]},{"title":"Snapshots are 0o600","slug":"snapshots-are-0o600","depth":3,"children":[]},{"title":"Token cannot path-traverse","slug":"token-cannot-path-traverse","depth":3,"children":[]}]},{"title":"Environment variables","slug":"environment-variables","depth":2,"children":[]},{"title":"Internals — for hackers","slug":"internals-—-for-hackers","depth":2,"children":[{"title":"Snapshot format","slug":"snapshot-format","depth":3,"children":[]},{"title":"Scheduler action types","slug":"scheduler-action-types","depth":3,"children":[]},{"title":"/resume idempotency","slug":"/resume-idempotency","depth":3,"children":[]}]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Quick reference","slug":"quick-reference","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/encom/03414b2589eb02b8/flags.js","/_mintlify/custom/encom/f19b212850d023b6/sidebar-focus.js"],"subdomain":"encom","siteName":"ChatCLI","title":"Agent Park \u0026 Resume — Non-blocking suspension - ChatCLI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/agents/agent-park","matchLevel":0},"pt-BR":{"href":"/pt/agents/agent-park","matchLevel":1}}},"lastModified":"2026-10-22T12:14:19.184Z","originalFileLocation":"agents/agent-park.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"@park tool that suspends the agent, frees the terminal, and auto-resumes itself when the timer/probe completes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ChatCLI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Agent Park \u0026amp; Resume — Non-blocking suspension - ChatCLI\">\u003cmeta data-mint-head property=\"og:description\" content=\"@park tool that suspends the agent, frees the terminal, and auto-resumes itself when the timer/probe completes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ChatCLI Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://chatcli.edilsonfreitas.com/agents/agent-park\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://encom.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Agent+Park+%26+Resume+%E2%80%94+Non-blocking+suspension\u0026amp;description=%40park+tool+that+suspends+the+agent%2C+frees+the+terminal%2C+and+auto-resumes+itself+when+the+timer%2Fprobe+completes.\u0026amp;theme=2d0e9c637e1db3aa3847e8f6\u0026amp;signature=a496caeefeb45f40bef1813261597c5554e49cc396969630c4276b9eb76a7b47\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Agent Park \u0026amp; Resume — Non-blocking suspension - ChatCLI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"@park tool that suspends the agent, frees the terminal, and auto-resumes itself when the timer/probe completes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://encom.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Agent+Park+%26+Resume+%E2%80%94+Non-blocking+suspension\u0026amp;description=%40park+tool+that+suspends+the+agent%2C+frees+the+terminal%2C+and+auto-resumes+itself+when+the+timer%2Fprobe+completes.\u0026amp;theme=2d0e9c637e1db3aa3847e8f6\u0026amp;signature=a496caeefeb45f40bef1813261597c5554e49cc396969630c4276b9eb76a7b47\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ChatCLI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0F766E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://chatcli.edilsonfreitas.com/agents/agent-park\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/agents/agent-park.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://chatcli.edilsonfreitas.com/agents/agent-park\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://chatcli.edilsonfreitas.com/pt/agents/agent-park\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://chatcli.edilsonfreitas.com/agents/agent-park\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://chatcli.edilsonfreitas.com/#organization\",\"name\":\"ChatCLI\",\"url\":\"https://chatcli.edilsonfreitas.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/encom/Rcdb5Pr5hpjwN46r/images/logo-light.svg?fit=max\u0026auto=format\u0026n=Rcdb5Pr5hpjwN46r\u0026q=85\u0026s=965a0feb9bd2f65a11b3c486e2488101\"}},{\"@type\":\"WebSite\",\"@id\":\"https://chatcli.edilsonfreitas.com#website\",\"name\":\"ChatCLI\",\"url\":\"https://chatcli.edilsonfreitas.com\",\"publisher\":{\"@id\":\"https://chatcli.edilsonfreitas.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://chatcli.edilsonfreitas.com/agents/agent-park#webpage\",\"url\":\"https://chatcli.edilsonfreitas.com/agents/agent-park\",\"name\":\"Agent Park \u0026 Resume — Non-blocking suspension\",\"description\":\"@park tool that suspends the agent, frees the terminal, and auto-resumes itself when the timer/probe completes.\",\"dateModified\":\"2026-10-22T12:14:19.184Z\",\"isPartOf\":{\"@id\":\"https://chatcli.edilsonfreitas.com#website\"},\"breadcrumb\":{\"@id\":\"https://chatcli.edilsonfreitas.com/agents/agent-park#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://chatcli.edilsonfreitas.com/agents/agent-park#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Documentation\",\"item\":\"https://chatcli.edilsonfreitas.com/usage/basic-usage\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Agents\",\"item\":\"https://chatcli.edilsonfreitas.com/agents/native-tool-use\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Agent Park \u0026 Resume — Non-blocking suspension\",\"item\":\"https://chatcli.edilsonfreitas.com/agents/agent-park\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://chatcli.edilsonfreitas.com/agents/agent-park#article\",\"headline\":\"Agent Park \u0026 Resume — Non-blocking suspension\",\"name\":\"Agent Park \u0026 Resume — Non-blocking suspension\",\"description\":\"@park tool that suspends the agent, frees the terminal, and auto-resumes itself when the timer/probe completes.\",\"url\":\"https://chatcli.edilsonfreitas.com/agents/agent-park\",\"mainEntityOfPage\":{\"@id\":\"https://chatcli.edilsonfreitas.com/agents/agent-park#webpage\"},\"dateModified\":\"2026-10-22T12:14:19.184Z\",\"publisher\":{\"@id\":\"https://chatcli.edilsonfreitas.com/#organization\"},\"isPartOf\":{\"@id\":\"https://chatcli.edilsonfreitas.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ChatCLI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ChatCLI","nav":{"global":null,"languages":[{"language":"en","default":true,"groups":[{"group":"Get started","pages":[{"title":"ChatCLI","sidebarTitle":"Overview","icon":"house","mode":"wide","href":""},{"title":"Quickstart","icon":"rocket","href":"/start/quickstart"},{"title":"Installation and Configuration","sidebarTitle":"Installation","icon":"download","href":"/start/installation"},{"title":"Deploy with Docker and Kubernetes","sidebarTitle":"Docker \u0026 Kubernetes","icon":"docker","href":"/start/docker-deployment"},{"title":"Auto-Update","sidebarTitle":"Auto-Update","icon":"arrows-rotate","href":"/start/auto-update"},{"title":"Configuration Migration","sidebarTitle":"Config Migration","icon":"arrows-rotate","href":"/start/config-migration"}]},{"group":"Documentation","pages":[{"group":"Using ChatCLI","icon":"terminal","pages":[{"title":"Basic Usage and Main Commands","sidebarTitle":"Basic Usage","icon":"terminal","href":"/usage/basic-usage"},{"title":"Adding Context (@ Commands)","sidebarTitle":"Context Commands","icon":"at","href":"/usage/context-commands"},{"title":"Agent Mode: Task Execution","sidebarTitle":"Agent Mode (/agent)","icon":"robot","href":"/usage/agent-mode"},{"title":"Coder Mode (/coder)","sidebarTitle":"Coder Mode (/coder)","icon":"code","href":"/usage/coder-mode"},{"title":"Non-Interactive Mode (One-Shot)","sidebarTitle":"One-Shot Mode","icon":"terminal","href":"/usage/non-interactive-mode"},{"title":"Conversation Control","sidebarTitle":"Conversation Control","icon":"clock-rotate-left","href":"/usage/conversation-control"},{"title":"Multiline Input","sidebarTitle":"Multiline Input","icon":"bars-staggered","href":"/usage/multiline-input"},{"title":"Real-Time Streaming","sidebarTitle":"Streaming","icon":"bolt","href":"/usage/streaming"},{"title":"Image Input (Vision)","sidebarTitle":"Image Input (Vision)","icon":"eye","href":"/usage/vision-input"},{"title":"PDF Input","sidebarTitle":"PDF Input","icon":"file-pdf","href":"/usage/pdf-input"},{"title":"Web UI","sidebarTitle":"Web UI","icon":"browser","href":"/usage/web-ui"},{"title":"Live Dashboard","sidebarTitle":"Live Dashboard","icon":"chart-network","href":"/usage/live-dashboard"},{"title":"Compact UI Mode","sidebarTitle":"Compact UI","icon":"minimize","href":"/usage/compact-ui"},{"title":"Theme System (Colors)","sidebarTitle":"Theme System","icon":"palette","href":"/usage/ui-theme"},{"title":"Internationalization (i18n)","sidebarTitle":"Internationalization","icon":"language","href":"/usage/i18n"}]},{"group":"Coder","icon":"code","pages":[{"title":"Plugin @coder","sidebarTitle":"Plugin @coder","icon":"hammer","href":"/coder/coder-plugin"},{"title":"Atomic Tools (@read, @search, @tree, @todo)","sidebarTitle":"Atomic Tools","icon":"wand-magic-sparkles","href":"/coder/atomic-tools"},{"title":"Coder Mode Security (Governance)","sidebarTitle":"Coder Mode Security (Governance)","icon":"shield-halved","href":"/coder/coder-security"},{"title":"Enhanced Permissions System","sidebarTitle":"Permissions","icon":"shield-halved","href":"/coder/enhanced-permissions"},{"title":"Git Worktrees","sidebarTitle":"Git Worktrees","icon":"code-branch","href":"/coder/worktrees"},{"title":"File Staleness Detection","sidebarTitle":"File Staleness","icon":"eye","href":"/coder/file-staleness"},{"title":"JSON Recovery","sidebarTitle":"JSON Recovery","icon":"screwdriver-wrench","href":"/coder/json-recovery"},{"title":"LSP Diagnostics","sidebarTitle":"LSP Diagnostics","icon":"stethoscope","href":"/coder/lsp-diagnostics"},{"title":"Interactive Questions (ask_user)","sidebarTitle":"Interactive Questions","icon":"list-check","href":"/coder/interactive-ask"},{"title":"Live Agent Progress","sidebarTitle":"Live Progress","icon":"chart-bar","href":"/coder/agent-progress-ui"}]},{"group":"Agents","icon":"robot","pages":[{"title":"Native Tool Use (Structured API)","sidebarTitle":"Native Tool Use","icon":"wrench","href":"/agents/native-tool-use"},{"title":"Agentic AI and Plugin System","sidebarTitle":"Agentic AI \u0026 Plugins","icon":"puzzle-piece","href":"/agents/agentic-plugins"},{"title":"Customizable Agents (Personas)","sidebarTitle":"Customizable Agents","icon":"user-gear","href":"/agents/customizable-agents"},{"title":"Multi-Agent Orchestration","sidebarTitle":"Multi-Agent","icon":"users","href":"/agents/multi-agent-orchestration"},{"title":"Agent Squad","sidebarTitle":"Agent Squad","icon":"people-group","href":"/agents/agent-squad"},{"title":"Task Graph","sidebarTitle":"Task Graph","icon":"diagram-project","href":"/agents/task-graph"},{"title":"Subagent Delegation","sidebarTitle":"Subagent Delegate","icon":"diagram-project","href":"/agents/subagent-delegation"},{"title":"Mixture-of-Agents (MoA)","sidebarTitle":"Mixture-of-Agents","icon":"layer-group","href":"/agents/mixture-of-agents"},{"title":"Model Routing (@model)","sidebarTitle":"Model Routing","description":"The agent picks the right model for each phase of a task — list providers with pricing tiers, switch the loop to another model/provider, or delegate a subtask to a cheaper one.","icon":"shuffle","href":"/agents/model-routing"},{"title":"Agent Park \u0026 Resume — Non-blocking suspension","sidebarTitle":"Park \u0026 Resume","icon":"circle-pause","href":"/agents/agent-park"},{"group":"Harness (7 patterns + evals)","icon":"wand-magic-sparkles","pages":[{"title":"Agent Harness/Quality Pipeline","sidebarTitle":"Overview","description":"The full suite of ChatCLI's seven LLM-agent patterns: ReAct, Plan-and-Solve/ReWOO, Reflexion, RAG+HyDE, Self-Refine, Chain-of-Verification (CoVe), and a reasoning backbone — all pluggable, observable and configurable.","icon":"sparkles","href":"/agents/harness/overview"},{"title":"#1 ReAct — Reason + Act","sidebarTitle":"ReAct","icon":"rotate","href":"/agents/harness/react"},{"title":"#2 Plan-and-Solve / ReWOO","sidebarTitle":"Plan-and-Solve","icon":"list-check","href":"/agents/harness/plan-and-solve"},{"title":"#3 Reflexion — Learn from Failures","sidebarTitle":"Reflexion","icon":"lightbulb","href":"/agents/harness/reflexion"},{"title":"#4 RAG + HyDE — Semantic Retrieval","sidebarTitle":"RAG + HyDE","icon":"database","href":"/agents/harness/rag-hyde"},{"title":"#5 Self-Refine — Critique and Rewrite","sidebarTitle":"Self-Refine","icon":"wand-magic-sparkles","href":"/agents/harness/self-refine"},{"title":"#6 Chain-of-Verification (CoVe)","sidebarTitle":"CoVe","icon":"check-double","href":"/agents/harness/cove"},{"title":"#7 Cross-Provider Reasoning Backbone","sidebarTitle":"Reasoning Backbone","icon":"brain-circuit","href":"/agents/harness/reasoning-backbone"},{"title":"Configuration — Env, Slashes and /config","sidebarTitle":"Configuration","icon":"sliders","href":"/agents/harness/configuration"},{"title":"Evals: measuring ChatCLI","sidebarTitle":"Evals","icon":"flask","href":"/agents/harness/evals"}]}]},{"group":"Context \u0026 memory","icon":"layer-group","pages":[{"title":"LongMemEval: how well chatcli remembers","sidebarTitle":"LongMemEval results","icon":"chart-simple","href":"/context/longmemeval"},{"title":"Persistent Context Management","sidebarTitle":"Contexts (/context)","icon":"database","href":"/context/persistent-context"},{"title":"Knowledge Base (keyless RAG)","sidebarTitle":"Knowledge Base","icon":"book-open","href":"/context/knowledge-base"},{"title":"Bootstrap and Persistent Memory","sidebarTitle":"Bootstrap and Memory","icon":"memory","href":"/context/bootstrap-memory"},{"title":"Knowledge Graph and Obsidian Vault","sidebarTitle":"Knowledge Graph","icon":"diagram-project","href":"/context/knowledge-graph"},{"title":"Path-Specific Rules","sidebarTitle":"Path Rules","icon":"folder-tree","href":"/context/path-rules"},{"title":"Filtering with .chatignore","sidebarTitle":".chatignore","icon":"filter","href":"/context/chatignore"},{"group":"Sessions","icon":"clock-rotate-left","pages":[{"title":"Session Management","sidebarTitle":"Sessions","icon":"clock-rotate-left","href":"/context/session-management"},{"title":"Conversation Search (@session)","sidebarTitle":"Conversation Search","icon":"magnifying-glass","href":"/context/session-search"},{"title":"Session Workspace (Scratch Dir)","sidebarTitle":"Session Workspace","icon":"folder-tree","href":"/context/session-workspace"},{"title":"Trajectory Export (ShareGPT)","sidebarTitle":"Export Trajectory","icon":"file-export","href":"/context/trajectory-export"}]},{"group":"Token efficiency","icon":"gauge-high","pages":[{"title":"Token Efficiency","sidebarTitle":"Token Efficiency","icon":"gauge-high","href":"/context/token-efficiency"},{"title":"Context Compression (CCR)","sidebarTitle":"Context Compression","icon":"file-zipper","href":"/context/context-compression"},{"title":"Chat Prefix Curation","sidebarTitle":"Prefix Curation","icon":"scissors","href":"/context/prefix-curation"},{"title":"Tool Result Management","sidebarTitle":"Tool Results","icon":"database","href":"/context/tool-result-management"},{"title":"Context Recovery","sidebarTitle":"Context Recovery","icon":"life-ring","href":"/context/context-recovery"}]}]},{"group":"Models \u0026 providers","icon":"shuffle","pages":[{"title":"Supported AI Models","sidebarTitle":"Supported Models","icon":"microchip","href":"/providers/supported-models"},{"title":"OAuth Authentication","sidebarTitle":"OAuth Authentication","icon":"key","href":"/providers/oauth-authentication"},{"title":"AWS Bedrock","sidebarTitle":"AWS Bedrock","icon":"aws","href":"/providers/bedrock"},{"title":"Devin Provider — the local Devin CLI as an LLM transport","sidebarTitle":"Devin Provider","icon":"robot","href":"/providers/devin-provider"},{"title":"Provider Fallback","sidebarTitle":"Provider Fallback","icon":"rotate","href":"/providers/provider-fallback"},{"title":"Rate Limits — provider limit visibility","sidebarTitle":"Rate Limits","icon":"gauge-high","href":"/providers/rate-limits"},{"title":"Cost Tracking","sidebarTitle":"Cost Tracking","icon":"money-bill-trend-up","href":"/providers/cost-tracking"}]},{"group":"Tools","icon":"toolbox","pages":[{"title":"WebFetch \u0026 WebSearch","sidebarTitle":"Web Tools","icon":"globe","href":"/tools/web-tools"},{"title":"Browser Automation (@browser)","sidebarTitle":"Browser Automation","icon":"chrome","href":"/tools/browser-automation"},{"title":"API Explorer (@api-explorer)","sidebarTitle":"API Explorer","icon":"compass","href":"/tools/api-explorer"},{"title":"Git Forge (@forge)","sidebarTitle":"Git Forge","icon":"code-pull-request","href":"/tools/git-forge"},{"title":"Image Generation \u0026 Editing (@image)","sidebarTitle":"Image Generation \u0026 Editing","icon":"image","href":"/tools/image-generation"},{"title":"Diagrams (@diagram)","sidebarTitle":"Diagrams","icon":"diagram-project","href":"/tools/diagram"},{"title":"Interactive graph (@graphview)","sidebarTitle":"Interactive graph","icon":"circle-nodes","href":"/tools/graphview"},{"title":"Image Tags (@registry-tags)","sidebarTitle":"Registry Tags","icon":"tags","href":"/tools/registry-tags"},{"title":"Structured data and diffs (@json, @diff)","sidebarTitle":"JSON \u0026 Diff","icon":"brackets-curly","href":"/tools/json-diff"},{"title":"Calendar arithmetic (@date)","sidebarTitle":"Dates","icon":"calendar-days","href":"/tools/date"},{"title":"Archives (@archive)","sidebarTitle":"Archives","icon":"file-zipper","href":"/tools/archive"},{"title":"Builtin Skills","sidebarTitle":"Builtin Skills","icon":"boxes-stacked","href":"/tools/builtin-skills"},{"title":"Scheduler (Chronos) — Durable scheduling","sidebarTitle":"Scheduler","icon":"clock","href":"/tools/scheduler"}]},{"group":"Extensions","icon":"plug","pages":[{"title":"Plugin System","sidebarTitle":"Plugin System","icon":"plug","href":"/extensions/plugin-system"},{"title":"Provider Plugins","sidebarTitle":"Provider Plugins","icon":"plug-circle-bolt","href":"/extensions/provider-plugins"},{"title":"MCP (Model Context Protocol)","sidebarTitle":"Connect MCP Servers","icon":"link","href":"/extensions/mcp-integration"},{"title":"Skill Registry","sidebarTitle":"Skill Registry","icon":"store","tag":"NEW","href":"/extensions/skill-registry"},{"title":"Skill Authoring (@skill)","sidebarTitle":"Skill Authoring","icon":"wand-magic-sparkles","href":"/extensions/skill-authoring"},{"title":"Slash Commands","sidebarTitle":"Slash Commands","icon":"terminal","tag":"NEW","href":"/extensions/slash-commands"},{"title":"Hooks System","sidebarTitle":"Hooks","icon":"webhook","href":"/extensions/hooks-system"}]},{"group":"Channels \u0026 gateway","icon":"comments","pages":[{"title":"Chat gateway","sidebarTitle":"Chat gateway","icon":"messages","href":"/gateway/chat-gateway"},{"title":"Telegram","icon":"telegram","href":"/gateway/telegram"},{"title":"Slack","icon":"slack","href":"/gateway/slack"},{"title":"Discord","icon":"discord","href":"/gateway/discord"},{"title":"WhatsApp","icon":"whatsapp","href":"/gateway/whatsapp"},{"title":"Webhook","icon":"webhook","href":"/gateway/webhook"},{"title":"Conversation Hub — conversation continuity across channels","sidebarTitle":"Conversation Hub","icon":"share-nodes","href":"/gateway/conversation-hub"},{"title":"MCP Channels","sidebarTitle":"MCP Channels","icon":"tower-broadcast","href":"/gateway/mcp-channels"},{"title":"Proactive Messaging (@send)","sidebarTitle":"Proactive Messaging","icon":"paper-plane","href":"/gateway/proactive-messaging"},{"title":"Text-to-Speech \u0026 Gateway Voice","sidebarTitle":"Text-to-Speech","icon":"volume-high","href":"/gateway/text-to-speech"},{"title":"Gateway Voice Replies","sidebarTitle":"Voice Replies","icon":"microphone","href":"/gateway/voice-replies"}]},{"group":"Server \u0026 IDE","icon":"server","pages":[{"title":"Server Mode (chatcli server)","sidebarTitle":"Server Mode","icon":"server","href":"/server/server-mode"},{"title":"Remote Connection (chatcli connect)","sidebarTitle":"Remote Connection","icon":"plug","href":"/server/remote-connect"},{"title":"MCP Server — ChatCLI as a server (and ACP)","sidebarTitle":"ChatCLI MCP Server","icon":"server","href":"/server/mcp-server"},{"title":"ACP — ChatCLI inside your IDE","sidebarTitle":"ACP (IDE Agent)","icon":"plug-circle-bolt","href":"/server/acp"}]},{"group":"Kubernetes \u0026 AIOps","icon":"dharmachakra","pages":[{"title":"Kubernetes Monitoring (K8s Watcher)","sidebarTitle":"K8s Watcher","icon":"binoculars","href":"/kubernetes/k8s-watcher"},{"title":"Kubernetes Operator (AIOps)","sidebarTitle":"K8s Operator","icon":"dharmachakra","href":"/kubernetes/k8s-operator"},{"title":"AIOps Platform (Deep-Dive)","sidebarTitle":"AIOps Platform","icon":"brain","href":"/kubernetes/aiops-platform"},{"title":"ArtifactHub","sidebarTitle":"ArtifactHub","icon":"cube","href":"/kubernetes/artifacthub"},{"group":"AIOps platform","icon":"siren-on","pages":[{"title":"Incident Lifecycle","sidebarTitle":"Lifecycle","icon":"arrows-spin","href":"/kubernetes/aiops/incident-lifecycle"},{"title":"Notifications and Escalation","sidebarTitle":"Notifications","icon":"bell","href":"/kubernetes/aiops/notifications"},{"title":"SLOs and SLAs","sidebarTitle":"SLOs and SLAs","icon":"gauge-high","href":"/kubernetes/aiops/slo-sla"},{"title":"Approval Workflow","sidebarTitle":"Approvals","icon":"shield-check","href":"/kubernetes/aiops/approval-workflow"},{"title":"AI-Powered Decision Engine","sidebarTitle":"Decision Engine","icon":"brain-circuit","href":"/kubernetes/aiops/decision-engine"},{"title":"Multi-Cluster Federation","sidebarTitle":"Multi-Cluster Federation","icon":"network-wired","href":"/kubernetes/aiops/federation"},{"title":"Chaos Engineering","sidebarTitle":"Chaos Engineering","icon":"explosion","href":"/kubernetes/aiops/chaos-engineering"},{"title":"Audit and Compliance","sidebarTitle":"Audit and Compliance","icon":"clipboard-check","href":"/kubernetes/aiops/audit-compliance"},{"title":"Capacity Planning and Cost Attribution","sidebarTitle":"Capacity \u0026 Costs","icon":"chart-line","href":"/kubernetes/aiops/capacity-cost"},{"title":"Web Dashboard and Grafana","sidebarTitle":"Dashboard \u0026 Grafana","icon":"chart-mixed","href":"/kubernetes/aiops/web-dashboard"}]}]},{"group":"Security","icon":"shield-halved","pages":[{"title":"Enterprise Security","sidebarTitle":"Security","icon":"shield-halved","href":"/security/overview"},{"title":"Encryption at Rest","sidebarTitle":"Encryption at Rest","icon":"lock","href":"/security/encryption-at-rest"},{"title":"Security Hardening Upgrade Guide","sidebarTitle":"Hardening upgrade","icon":"shield-exclamation","href":"/security/hardening-upgrade"},{"title":"Vulnerability Scan (@osv)","sidebarTitle":"Dependency Scan","icon":"shield-halved","href":"/security/dependency-scan"},{"title":"Secrets Scan (@secrets)","sidebarTitle":"Secrets Scan","icon":"key","href":"/security/secrets-scan"}]},{"group":"Cookbook","icon":"kitchen-set","pages":[{"title":"Recipe: Safe Refactoring with Agent Mode","sidebarTitle":"Refactoring with Agent","icon":"screwdriver-wrench","href":"/cookbook/agent-refactoring"},{"title":"Fix tests with /coder","sidebarTitle":"Fix tests with /coder","icon":"vial","href":"/cookbook/coder-fix-tests"},{"title":"Recipe: Catching a Regression with Evals","sidebarTitle":"Catching a Regression with Evals","icon":"flask","href":"/cookbook/eval-regression"},{"title":"Recipe: Debugging Error Logs with Pipes","sidebarTitle":"Debug Error Logs","icon":"bug","href":"/cookbook/debugging-logs-with-pipes"},{"title":"One-Shot, Pipes, and Automation","sidebarTitle":"One-Shot and Pipes","icon":"wand-magic-sparkles","href":"/cookbook/oneshot-pipelines"},{"title":"Recipe: K8s Monitoring with AI","sidebarTitle":"K8s Monitoring","icon":"chart-line","href":"/cookbook/k8s-monitoring"},{"title":"Recipe: Managing Multiple Projects with Contexts and Sessions","sidebarTitle":"Multi-Project Workflow","icon":"folder-tree","href":"/cookbook/multi-project-workflow"},{"title":"Recipe: Understanding a Code Project","sidebarTitle":"Understand a New Project","icon":"rocket","href":"/cookbook/onboarding-new-project"},{"title":"Recipe: Generating Release Notes with @git","sidebarTitle":"Generate Release Notes","icon":"scroll","href":"/cookbook/release-notes-automation"},{"title":"Recipe: Remote Server for Teams","sidebarTitle":"Team Server","icon":"network-wired","href":"/cookbook/remote-server-setup"},{"title":"AIOps: Complete Production Setup","sidebarTitle":"AIOps Production Setup","icon":"rocket","href":"/cookbook/aiops-production-setup"},{"title":"Recipe: Scaling Instances","sidebarTitle":"Scaling Instances","icon":"arrows-left-right","href":"/cookbook/scaling-instances"},{"title":"AIOps: Incident Response Guide","sidebarTitle":"Incident Response","icon":"siren-on","href":"/cookbook/aiops-incident-response"},{"title":"Production Security Hardening","sidebarTitle":"Security Hardening","icon":"lock","href":"/cookbook/security-hardening-production"},{"title":"Scheduler automation recipes","sidebarTitle":"Scheduler: automations","icon":"book-open","href":"/cookbook/scheduler-automations"},{"title":"Recipe: Cross-Layer Debugging with 3 Knowledge Bases","sidebarTitle":"Cross-Layer Debugging","icon":"diagram-project","href":"/cookbook/cross-layer-knowledge-debug"}]},{"group":"Reference","icon":"rectangle-list","pages":[{"title":"Complete Command Reference","sidebarTitle":"Command Reference","icon":"rectangle-list","href":"/reference/command-reference"},{"title":"Environment Variables","sidebarTitle":"Environment Variables","icon":"sliders","href":"/reference/environment-variables"},{"title":"Configuration Reference (.env)","sidebarTitle":"Configuration (.env)","icon":"gear","href":"/reference/configuration"},{"title":"MCP Configuration (mcp_servers.json)","sidebarTitle":"MCP Config","icon":"gear","href":"/reference/mcp-config"},{"title":"Architecture and Code Structure","sidebarTitle":"Architecture","icon":"sitemap","href":"/reference/architecture"},{"group":"REST API","icon":"code","pages":[{"group":"Introduction","icon":"compass","pages":[{"title":"API Overview","sidebarTitle":"Overview","icon":"compass","href":"/reference/api/overview"}]},{"group":"Incidents","icon":"siren-on","pages":[{"title":"List Incidents","openapi":"GET /incidents","icon":"list","href":"/reference/api/list-incidents"},{"title":"Get Incident","openapi":"GET /incidents/{name}","icon":"magnifying-glass","href":"/reference/api/get-incident"},{"title":"Acknowledge Incident","openapi":"POST /incidents/{name}/acknowledge","icon":"check","href":"/reference/api/acknowledge-incident"},{"title":"Resolve Incident","openapi":"POST /incidents/{name}/resolve","icon":"circle-check","href":"/reference/api/resolve-incident"},{"title":"Snooze Incident","openapi":"POST /incidents/{name}/snooze","icon":"clock","href":"/reference/api/snooze-incident"},{"title":"Get Incident Timeline","openapi":"GET /incidents/{name}/timeline","icon":"timeline","href":"/reference/api/get-timeline"},{"title":"Get Incident Remediation","openapi":"GET /incidents/{name}/remediation","icon":"wrench","href":"/reference/api/get-remediation"}]},{"group":"AI Insights","icon":"lightbulb","pages":[{"title":"List AI Insights","openapi":"GET /aiinsights","icon":"list","href":"/reference/api/list-aiinsights"},{"title":"Get AI Insight","openapi":"GET /aiinsights/{name}","icon":"lightbulb","href":"/reference/api/get-aiinsight"}]},{"group":"Remediations","icon":"wrench","pages":[{"title":"List Remediations","openapi":"GET /remediations","icon":"list","href":"/reference/api/list-remediations"},{"title":"Get Remediation Plan","openapi":"GET /remediations/{name}","icon":"wrench","href":"/reference/api/get-remediation-detail"}]},{"group":"Runbooks","icon":"book-open","pages":[{"title":"List Runbooks","openapi":"GET /runbooks","icon":"list","href":"/reference/api/list-runbooks"},{"title":"Get Runbook","openapi":"GET /runbooks/{name}","icon":"book-open","href":"/reference/api/get-runbook"},{"title":"Create Runbook","openapi":"POST /runbooks","icon":"plus","href":"/reference/api/create-runbook"},{"title":"Update Runbook","openapi":"PUT /runbooks/{name}","icon":"pen-to-square","href":"/reference/api/update-runbook"},{"title":"Delete Runbook","openapi":"DELETE /runbooks/{name}","icon":"trash","href":"/reference/api/delete-runbook"}]},{"group":"Approvals","icon":"circle-check","pages":[{"title":"List Approvals","openapi":"GET /approvals","icon":"list","href":"/reference/api/list-approvals"},{"title":"Get Approval","openapi":"GET /approvals/{name}","icon":"magnifying-glass","href":"/reference/api/get-approval"},{"title":"Approve Request","openapi":"POST /approvals/{name}/approve","icon":"circle-check","href":"/reference/api/approve"},{"title":"Reject Request","openapi":"POST /approvals/{name}/reject","icon":"circle-xmark","href":"/reference/api/reject"}]},{"group":"SLOs","icon":"gauge","pages":[{"title":"List SLOs","openapi":"GET /slos","icon":"list","href":"/reference/api/list-slos"},{"title":"Get SLO","openapi":"GET /slos/{name}","icon":"gauge","href":"/reference/api/get-slo"},{"title":"Get SLO Error Budget","openapi":"GET /slos/{name}/budget","icon":"coins","href":"/reference/api/get-slo-budget"}]},{"group":"PostMortems","icon":"magnifying-glass-chart","pages":[{"title":"List PostMortems","openapi":"GET /postmortems","icon":"list","href":"/reference/api/list-postmortems"},{"title":"Get PostMortem","openapi":"GET /postmortems/{name}","icon":"magnifying-glass","href":"/reference/api/get-postmortem"},{"title":"Review PostMortem","openapi":"POST /postmortems/{name}/review","icon":"user-pen","href":"/reference/api/review-postmortem"},{"title":"Developer Feedback","openapi":"POST /postmortems/{name}/feedback","icon":"comment","href":"/reference/api/feedback-postmortem"},{"title":"Acknowledge Human Action","openapi":"POST /postmortems/{name}/ack-human-action","icon":"user-check","href":"/reference/api/ack-human-action-postmortem"},{"title":"Close PostMortem","openapi":"POST /postmortems/{name}/close","icon":"lock","href":"/reference/api/close-postmortem"}]},{"group":"Analytics","icon":"chart-line","pages":[{"title":"Analytics Summary","openapi":"GET /analytics/summary","icon":"chart-line","href":"/reference/api/analytics-summary"},{"title":"Analytics MTTR","openapi":"GET /analytics/mttr","icon":"stopwatch","href":"/reference/api/analytics-mttr"},{"title":"Analytics MTTD","openapi":"GET /analytics/mttd","icon":"stopwatch","href":"/reference/api/analytics-mttd"},{"title":"Analytics Trends","openapi":"GET /analytics/trends","icon":"arrow-trend-up","href":"/reference/api/analytics-trends"},{"title":"Analytics Top Resources","openapi":"GET /analytics/top-resources","icon":"ranking-star","href":"/reference/api/analytics-top-resources"},{"title":"Analytics Remediation Stats","openapi":"GET /analytics/remediation-stats","icon":"chart-pie","href":"/reference/api/analytics-remediation-stats"},{"title":"Analytics Compliance","openapi":"GET /analytics/compliance","icon":"clipboard-check","href":"/reference/api/analytics-compliance"},{"title":"Analytics Capacity","openapi":"GET /analytics/capacity","icon":"server","href":"/reference/api/analytics-capacity"},{"title":"Analytics Cost","openapi":"GET /analytics/cost","icon":"coins","href":"/reference/api/analytics-cost"}]},{"group":"Clusters","icon":"diagram-project","pages":[{"title":"List Clusters","openapi":"GET /clusters","icon":"list","href":"/reference/api/list-clusters"},{"title":"Get Cluster","openapi":"GET /clusters/{name}","icon":"diagram-project","href":"/reference/api/get-cluster"},{"title":"List Policies","openapi":"GET /policies/{kind}","icon":"list-check","href":"/reference/api/list-policies"},{"title":"Get Policy","openapi":"GET /policies/{kind}/{name}","icon":"file-lines","href":"/reference/api/get-policy"},{"title":"Global Cluster Status","openapi":"GET /clusters/global-status","icon":"globe","href":"/reference/api/global-status"}]},{"group":"Federation","icon":"network-wired","pages":[{"title":"Federation Status","openapi":"GET /federation/status","icon":"network-wired","href":"/reference/api/federation-status"},{"title":"Federation Clusters","openapi":"GET /federation/clusters","icon":"list","href":"/reference/api/federation-clusters"},{"title":"Federation Correlations","openapi":"GET /federation/correlations","icon":"diagram-project","href":"/reference/api/federation-correlations"}]},{"group":"Audit","icon":"clipboard-check","pages":[{"title":"List Audit Events","openapi":"GET /audit","icon":"list","href":"/reference/api/list-audit"},{"title":"Export Audit","openapi":"GET /audit/export","icon":"file-export","href":"/reference/api/export-audit"}]},{"group":"Health","icon":"heart-pulse","pages":[{"title":"Health Endpoints","openapi":"GET /healthz","icon":"heart-pulse","href":"/reference/api/health-endpoints"}]}]}]},{"group":"Releases","icon":"rocket","tag":"v1.226.0","pages":[{"title":"Release notes","icon":"tag","href":"/releases"},{"title":"v1.226.0","tag":"Latest","href":"/releases/1.226.0"},{"title":"v1.225.0","href":"/releases/1.225.0"},{"title":"v1.224.0","href":"/releases/1.224.0"},{"title":"v1.223.0","href":"/releases/1.223.0"},{"title":"v1.222.0","href":"/releases/1.222.0"},{"title":"v1.221.3","href":"/releases/1.221.3"},{"title":"v1.221.2","href":"/releases/1.221.2"},{"title":"v1.221.1","href":"/releases/1.221.1"},{"title":"v1.221.0","href":"/releases/1.221.0"},{"title":"v1.220.0","href":"/releases/1.220.0"}]},{"group":"Help","icon":"life-ring","pages":[{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","icon":"life-ring","href":"/help/troubleshooting"},{"title":"Contributing to ChatCLI","sidebarTitle":"Contributing","icon":"code-pull-request","href":"/help/contributing"}]}]}]},{"language":"pt-BR","footer":{"socials":{"github":"https://github.com/diillson/chatcli","x":"https://x.com/diillson"},"links":[{"header":"Recursos","items":[{"label":"Documentação","href":"/pt"},{"label":"Cookbook","href":"/pt/cookbook/agent-refactoring"},{"label":"API Reference","href":"/pt/reference/api/overview"}]},{"header":"Comunidade","items":[{"label":"GitHub","href":"https://github.com/diillson/chatcli"},{"label":"Issues","href":"https://github.com/diillson/chatcli/issues"},{"label":"Discussions","href":"https://github.com/diillson/chatcli/discussions"},{"label":"Releases","href":"https://github.com/diillson/chatcli/releases"}]},{"header":"Distribuição","items":[{"label":"ArtifactHub","href":"https://artifacthub.io/packages/search?ts_query_web=chatcli"},{"label":"Helm Charts","href":"https://artifacthub.io/packages/helm/chatcli/chatcli"},{"label":"Container Registry","href":"https://github.com/diillson/chatcli/pkgs/container/chatcli"}]}]},"navbar":{"links":[{"href":"/pt/cookbook/agent-refactoring","label":"Cookbook"},{"href":"/pt/releases","label":"Releases"},{"href":"https://github.com/diillson/chatcli","type":"github"}],"primary":{"type":"button","label":"Instalar","href":"/pt/start/installation"}},"pages":[{"title":"pt-BR","href":"/pt/agents/agent-park"}]}]},"title":"Agent Park \u0026 Resume — Non-blocking suspension - ChatCLI","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":[],"chunks":[]}