[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-shell-use":3,"mdc-f1iu3a-key":41,"related-org-microsoft-shell-use":3916,"related-repo-microsoft-shell-use":4109},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":37,"sourceUrl":21,"mdContent":40},"shell-use","execute and monitor terminal commands","Drive, inspect, assert on, record, and watch a real terminal from the command line with the shell-use CLI. Use when running shells (bash, zsh, fish, PowerShell, pwsh, cmd, xonsh, elvish, nushell) or TUI programs (vim, less, top, etc.) in a headless PTY; sending keystrokes, key combos, or mouse input; resizing, writing raw bytes, or signaling the child; waiting for a command to finish or the screen to settle; asserting on terminal text, colors, exit codes, output, or snapshots; capturing text or full-color SVG screenshots; recording and replaying asciinema sessions; watching a live session while an agent drives it; or doing any of this from Python or Node with the shell-use bindings.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,17],{"name":13,"slug":14,"type":15},"CLI","cli","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Engineering","engineering",194,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fshell-use","2026-07-07T06:54:23.890194",null,17,[26,27,28,14,29,30,31,32,33,4,34,35,36],"ai-tools","automation","bash","e2e-testing","fish","llm","powershell","pwsh","terminal","testing","tui",{"repoUrl":21,"stars":20,"forks":24,"topics":38,"description":39},[26,27,28,14,29,30,31,32,33,4,34,35,36],"💻 Make the terminal \u002F shell accessible for AI agents. Automate tasks with ease.","---\nname: shell-use\ndescription: 'Drive, inspect, assert on, record, and watch a real terminal from the command line with the shell-use CLI. Use when running shells (bash, zsh, fish, PowerShell, pwsh, cmd, xonsh, elvish, nushell) or TUI programs (vim, less, top, etc.) in a headless PTY; sending keystrokes, key combos, or mouse input; resizing, writing raw bytes, or signaling the child; waiting for a command to finish or the screen to settle; asserting on terminal text, colors, exit codes, output, or snapshots; capturing text or full-color SVG screenshots; recording and replaying asciinema sessions; watching a live session while an agent drives it; or doing any of this from Python or Node with the shell-use bindings.'\n---\n\n# shell-use\n\n`shell-use` controls a real terminal from the command line. It runs shells and\nTUI programs in a headless PTY behind a background daemon: a stateless CLI front\nend talks to a daemon that owns the PTY and renders it into a full terminal\nemulator. Each call connects, acts, and exits, and they all share one live\nsession. With it you can spawn a session, read the rendered screen, send keys\nand mouse input, wait for a condition, assert on the result, and record the\nsession.\n\n## Built for agents: self-documenting commands\n\nThree commands let an agent look up the rest of the surface instead of guessing:\n\n- `shell-use agent-context`: versioned JSON describing every command, flag,\n  enum, default, and the exit-code taxonomy. It is generated from the CLI, so it\n  stays in sync. Read this first when you need exact argument shapes.\n- `shell-use usage`: a one-screen command cheatsheet.\n- `shell-use skill`: this guide.\n\n## Core model\n\n- **Sessions.** `--session \u003Cname>` (default `default`, env `SHELL_USE_SESSION`)\n  selects a terminal. The first command auto-starts the daemon; the session\n  persists across calls until `close`. Run many independent sessions by name.\n- **Stateless calls.** Each invocation connects to the daemon, acts, and exits.\n  State (screen, cwd, last command) lives in the daemon, not the CLI.\n- **JSON.** Pass `--json` on any command for machine-readable output. Data goes\n  to stdout, diagnostics to stderr. On failure the JSON carries a `\"kind\"`\n  (`assertion` \u002F `usage` \u002F `no_session` \u002F `internal`).\n- **Verbose.** `--verbose` \u002F `-v` starts the daemon with a full PTY traffic log\n  (see [Debugging](#debugging)). Only takes effect when the daemon starts.\n- **Defaults.** New sessions are `80x30`. `wait text` \u002F `wait idle` and\n  `expect text` default to a 5s timeout; `wait command` \u002F `wait exit` to 30s.\n\n## Exit codes\n\nEvery command returns a stable exit code so you can branch on the failure class\nwithout parsing text:\n\n| Code | Meaning |\n| --- | --- |\n| `0` | success |\n| `1` | assertion or wait condition not met (`expect` \u002F `wait`) |\n| `2` | usage \u002F invalid argument |\n| `3` | no active session (run `open` \u002F `run` first) |\n| `4` | daemon or IPC error |\n| `5` | internal error |\n\n## Command reference\n\n### Session & lifecycle\n\n| Command | Description |\n| --- | --- |\n| `open [--shell S] [--cols N] [--rows N] [--cwd D] [--env K=V]...` | Spawn a shell session (auto-starts the daemon). `--env` is repeatable. |\n| `run \u003Cprogram> [args...] [--cols N] [--rows N] [--cwd D] [--env K=V]...` | Spawn a session running a program directly (no shell). |\n| `sessions` | List active sessions. |\n| `close [--all]` | Close the current session (or every session with `--all`). |\n| `daemon status` \u002F `daemon stop` | Inspect (PID, log path) or stop the daemon. |\n\n### Inspection\n\n| Command | Description |\n| --- | --- |\n| `state` | cwd, size, cursor, last command + exit code, and a text snapshot. |\n| `text [--full]` | Rendered viewport text, or full scrollback with `--full`. |\n| `screenshot [PATH] [-o FILE] [--full]` | Terminal text to stdout, or a full-color SVG image (crisp at any zoom, svg-term-style window) when a path is given. |\n| `cells X Y [W H]` | Per-cell attributes (char, fg, bg, flags) for a region. |\n| `get command\\|output\\|exit-code\\|cwd\\|cursor\\|size` | One structured field. |\n\n### Input\n\n| Command | Description |\n| --- | --- |\n| `type \"text\"` | Type literal text (no return key). |\n| `submit [\"text\"]` | Type text then press the shell's return key. Omit text to just submit. |\n| `press \u003CKey...>` | Named keys, e.g. `press Escape : w q Enter`, `press Ctrl+C`. |\n| `keys \"Ctrl+a\"` | A single key combo. |\n| `mouse click X Y` \u002F `mouse click --on-text \"OK\" [--button N] [--clicks N]` | Click by coordinates or by visible label. |\n| `mouse move\\|down\\|up\\|drag\\|scroll ...` | Full mouse control (`--button` default 0=left, `scroll --amount` default 3). |\n\n### PTY control\n\n| Command | Description |\n| --- | --- |\n| `resize COLS ROWS` | Resize the PTY and emulator. |\n| `write \u003Cdata>` | Write raw bytes to the PTY (no return key appended). |\n| `signal INT\\|TERM\\|KILL\\|QUIT` | Send a signal to the session's child process. |\n| `kill` | Kill the session's child process. |\n\n### Wait (block until a condition holds)\n\n| Command | Description |\n| --- | --- |\n| `wait text \"T\" [--regex --full --not --timeout MS]` | Until text\u002Fregex is (with `--not`, is not) visible. Most precise wait. |\n| `wait idle [--timeout MS]` | Until the screen stops repainting (~250ms quiet). |\n| `wait command [--timeout MS]` | Until the current foreground command finishes (needs shell integration). |\n| `wait exit [--timeout MS]` | Until the session's program\u002Fshell itself exits. |\n\n### Expect (exit 0 = pass, 1 = fail)\n\n| Command | Description |\n| --- | --- |\n| `expect text \"T\" [--regex --full --no-strict --not --fg C --bg C --timeout MS]` | Visibility plus optional color. `--no-strict` relaxes a strict single-match. |\n| `expect exit-code N` | The last command's exit code. |\n| `expect output \"T\" [--regex]` | The last command's captured output. |\n| `expect snapshot NAME [-u] [--include-colors]` | Compare the screen against `__snapshots__\u002FNAME.snap`; `-u` writes\u002Fupdates it. |\n\nColors accept ansi-256 (`9`), hex (`#ff0000`), or rgb (`255,0,0`).\n\n### Recording, monitor & self-docs\n\n| Command | Description |\n| --- | --- |\n| `get-recording [session]` | Print a session's asciinema v2 cast to stdout (works even after it stopped). |\n| `monitor` | Watch the session live, full-color, in another terminal. |\n| `usage` \u002F `agent-context` \u002F `skill` | Self-documentation (see top of guide). |\n\n## Workflow: run a command and check the result\n\n```sh\nshell-use open                       # start a shell session\nshell-use submit \"echo hello\"        # type text + Enter\nshell-use wait command               # block until the command finishes\nshell-use expect text \"hello\"        # assert it appeared (exit 1 if not)\nshell-use expect exit-code 0         # assert the command succeeded\nshell-use close\n```\n\n`submit` types text then presses Enter; `type` types without Enter; `press`\nsends named keys (`press Escape : w q Enter`, `press Ctrl+C`); `keys` sends one\ncombo (`keys \"Ctrl+a\"`).\n\n## Workflow: drive a TUI program\n\n```sh\nshell-use run vim file.txt\nshell-use wait idle                  # let the screen finish rendering\nshell-use press i                    # enter insert mode\nshell-use type \"some text\"\nshell-use press Escape : w q Enter   # save and quit\nshell-use wait exit\n```\n\n## Workflow: mouse interaction\n\n```sh\nshell-use mouse click --on-text \"OK\"     # click a label, no coordinates needed\nshell-use mouse click 10 5 --clicks 2    # double-click at column 10, row 5\nshell-use mouse scroll down --amount 5   # scroll the wheel\nshell-use mouse drag 2 2 20 2            # drag from (2,2) to (20,2)\n```\n\n## Workflow: assert colors\n\n```sh\nshell-use cells 0 0 10 1                       # inspect char\u002Ffg\u002Fbg\u002Fflags\nshell-use expect text \"ERROR\" --fg \"#ff0000\"   # text present AND red\nshell-use expect text \"OK\" --fg 2 --bg 0       # ansi-256 fg\u002Fbg\n```\n\n## Workflow: snapshot testing\n\n```sh\nshell-use expect snapshot main-view -u                    # create\u002Fupdate the snapshot\nshell-use expect snapshot main-view                       # later: assert it still matches\nshell-use expect snapshot main-view --include-colors      # also compare per-cell colors\n```\n\nSnapshots live in `__snapshots__\u002F\u003CNAME>.snap` next to where you run the command.\n\n## Waiting: pick the right one\n\n- `wait text \"T\"`: waits until text\u002Fregex is visible. The most precise wait; use\n  it whenever you know what output to look for. `--not` waits for it to disappear.\n- `wait command`: waits until the current command finishes, via the shell's OSC\n  integration markers. This is what you want after `submit`-ing a command.\n  Requires shell integration; without it, falls back to \"prompt returned and\n  screen idle\". Bump `--timeout` for long commands (default 30s).\n- `wait idle`: waits until the screen stops repainting. This tracks visual\n  quiescence, not completion: a silent command like `sleep 100` counts as idle\n  almost immediately. Use it to let a TUI finish drawing.\n- `wait exit`: waits until the program\u002Fsession itself exits. Use for\n  `run \u003Cprogram>` sessions or after sending `exit`.\n\n## Recording\n\nEvery session records automatically from the moment it opens, in asciinema v2\ncast format, stored in your XDG cache by session name. The path is reported in\nthe `open` \u002F `run` response. Recordings persist after the session ends; stale\nones are swept when a daemon next starts (recordings of still-running sessions\nare kept).\n\n```sh\nshell-use get-recording > demo.cast    # current session's recording to stdout\nshell-use get-recording work > w.cast  # a specific session by name (even if stopped)\n```\n\nPlay it with `asciinema play demo.cast`, or render a GIF with\n`agg demo.cast demo.gif`.\n\n## Live monitor\n\nWatch a session live in a second terminal while an agent drives it; both share\nthe same daemon. `monitor` takes over an alternate screen and streams the\nsession in full color at ~20fps. Press `q`, `Esc`, or `Ctrl-C` to detach.\n\n```sh\nshell-use --session work monitor   # watch the 'work' session live\n```\n\nIt needs an interactive terminal (exit `2` otherwise) and an existing session\n(exit `3` if none). It only reads shared screen state, so watching never blocks\nthe commands the agent runs; resizing the window re-fits the frame.\n\n## Programmatic use (Python, Node, Deno & Bun)\n\nTwo client libraries drive the same daemon from code instead of the shell, with\nmethods that mirror the CLI command surface. Both are async and dependency-free,\nand both need the `shell-use` binary on `PATH` (or pointed to with the\n`SHELL_USE_BIN` env var, or a `binary` argument). They start and reuse the daemon\nexactly like the CLI, so a session opened from code can be watched with\n`shell-use monitor` from another terminal. The JavaScript package is a single\nESM module that runs on Node, Deno, and Bun; it imports only built-in modules,\nso it pulls in nothing extra on any of them.\n\n```sh\npip install shell-use              # Python 3.8+, imported as `shell_use`\nnpm install @microsoft\u002Fshell-use   # Node 20+ (ESM only)\nbun add @microsoft\u002Fshell-use       # Bun\ndeno add npm:@microsoft\u002Fshell-use  # Deno 2\n```\n\nPython:\n\n```python\nimport asyncio\nfrom shell_use import ShellUse\n\nasync def main():\n    async with ShellUse() as su:                     # closes the session on exit\n        await su.open()\n        await su.submit(\"echo hello\")\n        await su.wait_command()\n        await su.expect_text(\"hello\", strict=False)  # command echo + output both match\n        await su.expect_exit_code(0)\n\nasyncio.run(main())\n```\n\nNode, Deno, or Bun (the same code runs on all three):\n\n```js\nimport { ShellUse } from \"@microsoft\u002Fshell-use\";\n\nconst su = new ShellUse();\nawait su.open();\nawait su.submit(\"echo hello\");\nawait su.waitCommand();\nawait su.expectText(\"hello\", { strict: false });\nawait su.expectExitCode(0);\nawait su.close();\n```\n\nOn Windows, Deno needs `-A` (`--allow-all`) rather than just\n`--allow-read --allow-write`, because the daemon IPC uses a named pipe.\n\nMethods mirror the CLI commands: `open` \u002F `run`, `submit` \u002F `type` \u002F `write`,\n`press` \u002F `keys`, `mouse.click|move|down|up|drag|scroll`, `resize`, `signal` \u002F\n`kill`, `state`, `text`, `cells`, `get` (plus shorthands `get_command` \u002F\n`get_output` \u002F `get_exit_code` \u002F `get_cwd` \u002F `get_cursor` \u002F `get_size`),\n`screenshot`, `wait_text` \u002F `wait_idle` \u002F `wait_command` \u002F `wait_exit`,\n`expect_text` \u002F `expect_exit_code` \u002F `expect_output` \u002F `expect_snapshot`, and\n`close`. Module-level helpers cover the rest: `sessions`, `close_all`,\n`daemon_status`, `daemon_stop`, `get_recording`. The JavaScript client uses the same names in camelCase (`waitCommand`, `expectText`, `getExitCode`, `closeAll`, etc).\n\nThe constructor takes the session name plus optional `binary` and `home`\noverrides: `ShellUse(session=\"default\", *, binary=None, home=None)` in Python,\n`new ShellUse(session?, { binary?, home? })` in JavaScript. `run` takes the program then its args (`await su.run(\"vim\", \"file.txt\")` in Python,\n`await su.run(\"vim\", [\"file.txt\"])` in JavaScript).\n\nFailures raise typed errors instead of returning exit codes, one class per row of\nthe [exit-code table](#exit-codes): `ExpectationError` (1), `UsageError` (2),\n`NoSessionError` (3), `DaemonError` (4), and `InternalError` (5), all subclasses\nof `ShellUseError`. On its first call a client also checks that the daemon's\nversion matches the package and raises `VersionMismatchError` if they differ;\nstop the daemon (`daemon_stop`) so it restarts on the matching binary.\n\n## Supported shells & integration\n\n`open --shell S` accepts: `bash`, `zsh`, `fish`, `powershell`, `pwsh`, `cmd`,\n`xonsh`, `elvish`, `nushell`. Omit `--shell` to use the platform default.\n\n`shell-use` injects shell integration (standard OSC 133 semantic-prompt markers,\nplus OSC 7 for cwd) so it can track command boundaries, exit codes, cwd, and\ncommand\u002Foutput text across shells. This is what powers `wait command`,\n`expect exit-code`, `get cwd`, and `get command|output`.\n\nIntegration coverage varies by shell: `powershell` has no native pre-exec hook\nso command\u002Foutput text is best-effort (exit code and cwd still track); `cmd` is\nprompt-only.\n\n## Debugging\n\nBy default the daemon writes no log. Start it with `--verbose` to record every\nbyte read from and written to the PTY, plus lifecycle events, to\n`~\u002F.shell-use\u002F\u003Csession>.log`. Logging is fixed when the daemon starts, so enable\nit on a fresh daemon (close any existing one first):\n\n```sh\nshell-use --session work close            # stop any existing daemon\nshell-use --session work --verbose open   # start one with logging on\nshell-use --session work submit \"ls\"\ncat ~\u002F.shell-use\u002Fwork.log\n```\n\n`shell-use daemon status` reports the active log path.\n\n**Stuck session?** If the screen is frozen and input seems ignored (e.g. after\n`git log` \u002F `git diff`), a full-screen pager such as `less` is likely holding the\nterminal, and `Ctrl+C` won't quit it. Confirm with `shell-use state`\n(`\"ready\": false` and a stale last command). Quit the pager with\n`shell-use press q`, or avoid it with `git --no-pager \u003Ccmd>` or `GIT_PAGER=cat`.\n\n**Platform note.** On Windows ConPTY, `get output` and `get command` text can on some rare occasions be\nunreliable due to screen repainting; grid-based checks (`expect text`,\n`expect exit-code`) are unaffected.\n",{"data":42,"body":43},{"name":4,"description":6},{"type":44,"children":45},"root",[46,53,65,72,77,115,121,322,328,333,493,499,506,635,641,754,760,920,926,1014,1020,1116,1122,1234,1262,1268,1352,1358,1526,1580,1586,1741,1747,1907,1913,2053,2059,2150,2163,2169,2258,2264,2282,2346,2366,2372,2407,2440,2459,2465,2509,2605,2610,2721,2726,3066,3095,3375,3433,3509,3515,3594,3632,3651,3656,3676,3782,3793,3872,3910],{"type":47,"tag":48,"props":49,"children":50},"element","h1",{"id":4},[51],{"type":52,"value":4},"text",{"type":47,"tag":54,"props":55,"children":56},"p",{},[57,63],{"type":47,"tag":58,"props":59,"children":61},"code",{"className":60},[],[62],{"type":52,"value":4},{"type":52,"value":64}," controls a real terminal from the command line. It runs shells and\nTUI programs in a headless PTY behind a background daemon: a stateless CLI front\nend talks to a daemon that owns the PTY and renders it into a full terminal\nemulator. Each call connects, acts, and exits, and they all share one live\nsession. With it you can spawn a session, read the rendered screen, send keys\nand mouse input, wait for a condition, assert on the result, and record the\nsession.",{"type":47,"tag":66,"props":67,"children":69},"h2",{"id":68},"built-for-agents-self-documenting-commands",[70],{"type":52,"value":71},"Built for agents: self-documenting commands",{"type":47,"tag":54,"props":73,"children":74},{},[75],{"type":52,"value":76},"Three commands let an agent look up the rest of the surface instead of guessing:",{"type":47,"tag":78,"props":79,"children":80},"ul",{},[81,93,104],{"type":47,"tag":82,"props":83,"children":84},"li",{},[85,91],{"type":47,"tag":58,"props":86,"children":88},{"className":87},[],[89],{"type":52,"value":90},"shell-use agent-context",{"type":52,"value":92},": versioned JSON describing every command, flag,\nenum, default, and the exit-code taxonomy. It is generated from the CLI, so it\nstays in sync. Read this first when you need exact argument shapes.",{"type":47,"tag":82,"props":94,"children":95},{},[96,102],{"type":47,"tag":58,"props":97,"children":99},{"className":98},[],[100],{"type":52,"value":101},"shell-use usage",{"type":52,"value":103},": a one-screen command cheatsheet.",{"type":47,"tag":82,"props":105,"children":106},{},[107,113],{"type":47,"tag":58,"props":108,"children":110},{"className":109},[],[111],{"type":52,"value":112},"shell-use skill",{"type":52,"value":114},": this guide.",{"type":47,"tag":66,"props":116,"children":118},{"id":117},"core-model",[119],{"type":52,"value":120},"Core model",{"type":47,"tag":78,"props":122,"children":123},{},[124,167,177,233,266],{"type":47,"tag":82,"props":125,"children":126},{},[127,133,135,141,143,149,151,157,159,165],{"type":47,"tag":128,"props":129,"children":130},"strong",{},[131],{"type":52,"value":132},"Sessions.",{"type":52,"value":134}," ",{"type":47,"tag":58,"props":136,"children":138},{"className":137},[],[139],{"type":52,"value":140},"--session \u003Cname>",{"type":52,"value":142}," (default ",{"type":47,"tag":58,"props":144,"children":146},{"className":145},[],[147],{"type":52,"value":148},"default",{"type":52,"value":150},", env ",{"type":47,"tag":58,"props":152,"children":154},{"className":153},[],[155],{"type":52,"value":156},"SHELL_USE_SESSION",{"type":52,"value":158},")\nselects a terminal. The first command auto-starts the daemon; the session\npersists across calls until ",{"type":47,"tag":58,"props":160,"children":162},{"className":161},[],[163],{"type":52,"value":164},"close",{"type":52,"value":166},". Run many independent sessions by name.",{"type":47,"tag":82,"props":168,"children":169},{},[170,175],{"type":47,"tag":128,"props":171,"children":172},{},[173],{"type":52,"value":174},"Stateless calls.",{"type":52,"value":176}," Each invocation connects to the daemon, acts, and exits.\nState (screen, cwd, last command) lives in the daemon, not the CLI.",{"type":47,"tag":82,"props":178,"children":179},{},[180,185,187,193,195,201,203,209,211,217,218,224,225,231],{"type":47,"tag":128,"props":181,"children":182},{},[183],{"type":52,"value":184},"JSON.",{"type":52,"value":186}," Pass ",{"type":47,"tag":58,"props":188,"children":190},{"className":189},[],[191],{"type":52,"value":192},"--json",{"type":52,"value":194}," on any command for machine-readable output. Data goes\nto stdout, diagnostics to stderr. On failure the JSON carries a ",{"type":47,"tag":58,"props":196,"children":198},{"className":197},[],[199],{"type":52,"value":200},"\"kind\"",{"type":52,"value":202},"\n(",{"type":47,"tag":58,"props":204,"children":206},{"className":205},[],[207],{"type":52,"value":208},"assertion",{"type":52,"value":210}," \u002F ",{"type":47,"tag":58,"props":212,"children":214},{"className":213},[],[215],{"type":52,"value":216},"usage",{"type":52,"value":210},{"type":47,"tag":58,"props":219,"children":221},{"className":220},[],[222],{"type":52,"value":223},"no_session",{"type":52,"value":210},{"type":47,"tag":58,"props":226,"children":228},{"className":227},[],[229],{"type":52,"value":230},"internal",{"type":52,"value":232},").",{"type":47,"tag":82,"props":234,"children":235},{},[236,241,242,248,249,255,257,264],{"type":47,"tag":128,"props":237,"children":238},{},[239],{"type":52,"value":240},"Verbose.",{"type":52,"value":134},{"type":47,"tag":58,"props":243,"children":245},{"className":244},[],[246],{"type":52,"value":247},"--verbose",{"type":52,"value":210},{"type":47,"tag":58,"props":250,"children":252},{"className":251},[],[253],{"type":52,"value":254},"-v",{"type":52,"value":256}," starts the daemon with a full PTY traffic log\n(see ",{"type":47,"tag":258,"props":259,"children":261},"a",{"href":260},"#debugging",[262],{"type":52,"value":263},"Debugging",{"type":52,"value":265},"). Only takes effect when the daemon starts.",{"type":47,"tag":82,"props":267,"children":268},{},[269,274,276,282,284,290,291,297,299,305,307,313,314,320],{"type":47,"tag":128,"props":270,"children":271},{},[272],{"type":52,"value":273},"Defaults.",{"type":52,"value":275}," New sessions are ",{"type":47,"tag":58,"props":277,"children":279},{"className":278},[],[280],{"type":52,"value":281},"80x30",{"type":52,"value":283},". ",{"type":47,"tag":58,"props":285,"children":287},{"className":286},[],[288],{"type":52,"value":289},"wait text",{"type":52,"value":210},{"type":47,"tag":58,"props":292,"children":294},{"className":293},[],[295],{"type":52,"value":296},"wait idle",{"type":52,"value":298}," and\n",{"type":47,"tag":58,"props":300,"children":302},{"className":301},[],[303],{"type":52,"value":304},"expect text",{"type":52,"value":306}," default to a 5s timeout; ",{"type":47,"tag":58,"props":308,"children":310},{"className":309},[],[311],{"type":52,"value":312},"wait command",{"type":52,"value":210},{"type":47,"tag":58,"props":315,"children":317},{"className":316},[],[318],{"type":52,"value":319},"wait exit",{"type":52,"value":321}," to 30s.",{"type":47,"tag":66,"props":323,"children":325},{"id":324},"exit-codes",[326],{"type":52,"value":327},"Exit codes",{"type":47,"tag":54,"props":329,"children":330},{},[331],{"type":52,"value":332},"Every command returns a stable exit code so you can branch on the failure class\nwithout parsing text:",{"type":47,"tag":334,"props":335,"children":336},"table",{},[337,356],{"type":47,"tag":338,"props":339,"children":340},"thead",{},[341],{"type":47,"tag":342,"props":343,"children":344},"tr",{},[345,351],{"type":47,"tag":346,"props":347,"children":348},"th",{},[349],{"type":52,"value":350},"Code",{"type":47,"tag":346,"props":352,"children":353},{},[354],{"type":52,"value":355},"Meaning",{"type":47,"tag":357,"props":358,"children":359},"tbody",{},[360,378,410,427,459,476],{"type":47,"tag":342,"props":361,"children":362},{},[363,373],{"type":47,"tag":364,"props":365,"children":366},"td",{},[367],{"type":47,"tag":58,"props":368,"children":370},{"className":369},[],[371],{"type":52,"value":372},"0",{"type":47,"tag":364,"props":374,"children":375},{},[376],{"type":52,"value":377},"success",{"type":47,"tag":342,"props":379,"children":380},{},[381,390],{"type":47,"tag":364,"props":382,"children":383},{},[384],{"type":47,"tag":58,"props":385,"children":387},{"className":386},[],[388],{"type":52,"value":389},"1",{"type":47,"tag":364,"props":391,"children":392},{},[393,395,401,402,408],{"type":52,"value":394},"assertion or wait condition not met (",{"type":47,"tag":58,"props":396,"children":398},{"className":397},[],[399],{"type":52,"value":400},"expect",{"type":52,"value":210},{"type":47,"tag":58,"props":403,"children":405},{"className":404},[],[406],{"type":52,"value":407},"wait",{"type":52,"value":409},")",{"type":47,"tag":342,"props":411,"children":412},{},[413,422],{"type":47,"tag":364,"props":414,"children":415},{},[416],{"type":47,"tag":58,"props":417,"children":419},{"className":418},[],[420],{"type":52,"value":421},"2",{"type":47,"tag":364,"props":423,"children":424},{},[425],{"type":52,"value":426},"usage \u002F invalid argument",{"type":47,"tag":342,"props":428,"children":429},{},[430,439],{"type":47,"tag":364,"props":431,"children":432},{},[433],{"type":47,"tag":58,"props":434,"children":436},{"className":435},[],[437],{"type":52,"value":438},"3",{"type":47,"tag":364,"props":440,"children":441},{},[442,444,450,451,457],{"type":52,"value":443},"no active session (run ",{"type":47,"tag":58,"props":445,"children":447},{"className":446},[],[448],{"type":52,"value":449},"open",{"type":52,"value":210},{"type":47,"tag":58,"props":452,"children":454},{"className":453},[],[455],{"type":52,"value":456},"run",{"type":52,"value":458}," first)",{"type":47,"tag":342,"props":460,"children":461},{},[462,471],{"type":47,"tag":364,"props":463,"children":464},{},[465],{"type":47,"tag":58,"props":466,"children":468},{"className":467},[],[469],{"type":52,"value":470},"4",{"type":47,"tag":364,"props":472,"children":473},{},[474],{"type":52,"value":475},"daemon or IPC error",{"type":47,"tag":342,"props":477,"children":478},{},[479,488],{"type":47,"tag":364,"props":480,"children":481},{},[482],{"type":47,"tag":58,"props":483,"children":485},{"className":484},[],[486],{"type":52,"value":487},"5",{"type":47,"tag":364,"props":489,"children":490},{},[491],{"type":52,"value":492},"internal error",{"type":47,"tag":66,"props":494,"children":496},{"id":495},"command-reference",[497],{"type":52,"value":498},"Command reference",{"type":47,"tag":500,"props":501,"children":503},"h3",{"id":502},"session-lifecycle",[504],{"type":52,"value":505},"Session & lifecycle",{"type":47,"tag":334,"props":507,"children":508},{},[509,525],{"type":47,"tag":338,"props":510,"children":511},{},[512],{"type":47,"tag":342,"props":513,"children":514},{},[515,520],{"type":47,"tag":346,"props":516,"children":517},{},[518],{"type":52,"value":519},"Command",{"type":47,"tag":346,"props":521,"children":522},{},[523],{"type":52,"value":524},"Description",{"type":47,"tag":357,"props":526,"children":527},{},[528,553,570,587,611],{"type":47,"tag":342,"props":529,"children":530},{},[531,540],{"type":47,"tag":364,"props":532,"children":533},{},[534],{"type":47,"tag":58,"props":535,"children":537},{"className":536},[],[538],{"type":52,"value":539},"open [--shell S] [--cols N] [--rows N] [--cwd D] [--env K=V]...",{"type":47,"tag":364,"props":541,"children":542},{},[543,545,551],{"type":52,"value":544},"Spawn a shell session (auto-starts the daemon). ",{"type":47,"tag":58,"props":546,"children":548},{"className":547},[],[549],{"type":52,"value":550},"--env",{"type":52,"value":552}," is repeatable.",{"type":47,"tag":342,"props":554,"children":555},{},[556,565],{"type":47,"tag":364,"props":557,"children":558},{},[559],{"type":47,"tag":58,"props":560,"children":562},{"className":561},[],[563],{"type":52,"value":564},"run \u003Cprogram> [args...] [--cols N] [--rows N] [--cwd D] [--env K=V]...",{"type":47,"tag":364,"props":566,"children":567},{},[568],{"type":52,"value":569},"Spawn a session running a program directly (no shell).",{"type":47,"tag":342,"props":571,"children":572},{},[573,582],{"type":47,"tag":364,"props":574,"children":575},{},[576],{"type":47,"tag":58,"props":577,"children":579},{"className":578},[],[580],{"type":52,"value":581},"sessions",{"type":47,"tag":364,"props":583,"children":584},{},[585],{"type":52,"value":586},"List active sessions.",{"type":47,"tag":342,"props":588,"children":589},{},[590,599],{"type":47,"tag":364,"props":591,"children":592},{},[593],{"type":47,"tag":58,"props":594,"children":596},{"className":595},[],[597],{"type":52,"value":598},"close [--all]",{"type":47,"tag":364,"props":600,"children":601},{},[602,604,610],{"type":52,"value":603},"Close the current session (or every session with ",{"type":47,"tag":58,"props":605,"children":607},{"className":606},[],[608],{"type":52,"value":609},"--all",{"type":52,"value":232},{"type":47,"tag":342,"props":612,"children":613},{},[614,630],{"type":47,"tag":364,"props":615,"children":616},{},[617,623,624],{"type":47,"tag":58,"props":618,"children":620},{"className":619},[],[621],{"type":52,"value":622},"daemon status",{"type":52,"value":210},{"type":47,"tag":58,"props":625,"children":627},{"className":626},[],[628],{"type":52,"value":629},"daemon stop",{"type":47,"tag":364,"props":631,"children":632},{},[633],{"type":52,"value":634},"Inspect (PID, log path) or stop the daemon.",{"type":47,"tag":500,"props":636,"children":638},{"id":637},"inspection",[639],{"type":52,"value":640},"Inspection",{"type":47,"tag":334,"props":642,"children":643},{},[644,658],{"type":47,"tag":338,"props":645,"children":646},{},[647],{"type":47,"tag":342,"props":648,"children":649},{},[650,654],{"type":47,"tag":346,"props":651,"children":652},{},[653],{"type":52,"value":519},{"type":47,"tag":346,"props":655,"children":656},{},[657],{"type":52,"value":524},{"type":47,"tag":357,"props":659,"children":660},{},[661,678,703,720,737],{"type":47,"tag":342,"props":662,"children":663},{},[664,673],{"type":47,"tag":364,"props":665,"children":666},{},[667],{"type":47,"tag":58,"props":668,"children":670},{"className":669},[],[671],{"type":52,"value":672},"state",{"type":47,"tag":364,"props":674,"children":675},{},[676],{"type":52,"value":677},"cwd, size, cursor, last command + exit code, and a text snapshot.",{"type":47,"tag":342,"props":679,"children":680},{},[681,690],{"type":47,"tag":364,"props":682,"children":683},{},[684],{"type":47,"tag":58,"props":685,"children":687},{"className":686},[],[688],{"type":52,"value":689},"text [--full]",{"type":47,"tag":364,"props":691,"children":692},{},[693,695,701],{"type":52,"value":694},"Rendered viewport text, or full scrollback with ",{"type":47,"tag":58,"props":696,"children":698},{"className":697},[],[699],{"type":52,"value":700},"--full",{"type":52,"value":702},".",{"type":47,"tag":342,"props":704,"children":705},{},[706,715],{"type":47,"tag":364,"props":707,"children":708},{},[709],{"type":47,"tag":58,"props":710,"children":712},{"className":711},[],[713],{"type":52,"value":714},"screenshot [PATH] [-o FILE] [--full]",{"type":47,"tag":364,"props":716,"children":717},{},[718],{"type":52,"value":719},"Terminal text to stdout, or a full-color SVG image (crisp at any zoom, svg-term-style window) when a path is given.",{"type":47,"tag":342,"props":721,"children":722},{},[723,732],{"type":47,"tag":364,"props":724,"children":725},{},[726],{"type":47,"tag":58,"props":727,"children":729},{"className":728},[],[730],{"type":52,"value":731},"cells X Y [W H]",{"type":47,"tag":364,"props":733,"children":734},{},[735],{"type":52,"value":736},"Per-cell attributes (char, fg, bg, flags) for a region.",{"type":47,"tag":342,"props":738,"children":739},{},[740,749],{"type":47,"tag":364,"props":741,"children":742},{},[743],{"type":47,"tag":58,"props":744,"children":746},{"className":745},[],[747],{"type":52,"value":748},"get command|output|exit-code|cwd|cursor|size",{"type":47,"tag":364,"props":750,"children":751},{},[752],{"type":52,"value":753},"One structured field.",{"type":47,"tag":500,"props":755,"children":757},{"id":756},"input",[758],{"type":52,"value":759},"Input",{"type":47,"tag":334,"props":761,"children":762},{},[763,777],{"type":47,"tag":338,"props":764,"children":765},{},[766],{"type":47,"tag":342,"props":767,"children":768},{},[769,773],{"type":47,"tag":346,"props":770,"children":771},{},[772],{"type":52,"value":519},{"type":47,"tag":346,"props":774,"children":775},{},[776],{"type":52,"value":524},{"type":47,"tag":357,"props":778,"children":779},{},[780,797,814,846,863,887],{"type":47,"tag":342,"props":781,"children":782},{},[783,792],{"type":47,"tag":364,"props":784,"children":785},{},[786],{"type":47,"tag":58,"props":787,"children":789},{"className":788},[],[790],{"type":52,"value":791},"type \"text\"",{"type":47,"tag":364,"props":793,"children":794},{},[795],{"type":52,"value":796},"Type literal text (no return key).",{"type":47,"tag":342,"props":798,"children":799},{},[800,809],{"type":47,"tag":364,"props":801,"children":802},{},[803],{"type":47,"tag":58,"props":804,"children":806},{"className":805},[],[807],{"type":52,"value":808},"submit [\"text\"]",{"type":47,"tag":364,"props":810,"children":811},{},[812],{"type":52,"value":813},"Type text then press the shell's return key. Omit text to just submit.",{"type":47,"tag":342,"props":815,"children":816},{},[817,826],{"type":47,"tag":364,"props":818,"children":819},{},[820],{"type":47,"tag":58,"props":821,"children":823},{"className":822},[],[824],{"type":52,"value":825},"press \u003CKey...>",{"type":47,"tag":364,"props":827,"children":828},{},[829,831,837,839,845],{"type":52,"value":830},"Named keys, e.g. ",{"type":47,"tag":58,"props":832,"children":834},{"className":833},[],[835],{"type":52,"value":836},"press Escape : w q Enter",{"type":52,"value":838},", ",{"type":47,"tag":58,"props":840,"children":842},{"className":841},[],[843],{"type":52,"value":844},"press Ctrl+C",{"type":52,"value":702},{"type":47,"tag":342,"props":847,"children":848},{},[849,858],{"type":47,"tag":364,"props":850,"children":851},{},[852],{"type":47,"tag":58,"props":853,"children":855},{"className":854},[],[856],{"type":52,"value":857},"keys \"Ctrl+a\"",{"type":47,"tag":364,"props":859,"children":860},{},[861],{"type":52,"value":862},"A single key combo.",{"type":47,"tag":342,"props":864,"children":865},{},[866,882],{"type":47,"tag":364,"props":867,"children":868},{},[869,875,876],{"type":47,"tag":58,"props":870,"children":872},{"className":871},[],[873],{"type":52,"value":874},"mouse click X Y",{"type":52,"value":210},{"type":47,"tag":58,"props":877,"children":879},{"className":878},[],[880],{"type":52,"value":881},"mouse click --on-text \"OK\" [--button N] [--clicks N]",{"type":47,"tag":364,"props":883,"children":884},{},[885],{"type":52,"value":886},"Click by coordinates or by visible label.",{"type":47,"tag":342,"props":888,"children":889},{},[890,899],{"type":47,"tag":364,"props":891,"children":892},{},[893],{"type":47,"tag":58,"props":894,"children":896},{"className":895},[],[897],{"type":52,"value":898},"mouse move|down|up|drag|scroll ...",{"type":47,"tag":364,"props":900,"children":901},{},[902,904,910,912,918],{"type":52,"value":903},"Full mouse control (",{"type":47,"tag":58,"props":905,"children":907},{"className":906},[],[908],{"type":52,"value":909},"--button",{"type":52,"value":911}," default 0=left, ",{"type":47,"tag":58,"props":913,"children":915},{"className":914},[],[916],{"type":52,"value":917},"scroll --amount",{"type":52,"value":919}," default 3).",{"type":47,"tag":500,"props":921,"children":923},{"id":922},"pty-control",[924],{"type":52,"value":925},"PTY control",{"type":47,"tag":334,"props":927,"children":928},{},[929,943],{"type":47,"tag":338,"props":930,"children":931},{},[932],{"type":47,"tag":342,"props":933,"children":934},{},[935,939],{"type":47,"tag":346,"props":936,"children":937},{},[938],{"type":52,"value":519},{"type":47,"tag":346,"props":940,"children":941},{},[942],{"type":52,"value":524},{"type":47,"tag":357,"props":944,"children":945},{},[946,963,980,997],{"type":47,"tag":342,"props":947,"children":948},{},[949,958],{"type":47,"tag":364,"props":950,"children":951},{},[952],{"type":47,"tag":58,"props":953,"children":955},{"className":954},[],[956],{"type":52,"value":957},"resize COLS ROWS",{"type":47,"tag":364,"props":959,"children":960},{},[961],{"type":52,"value":962},"Resize the PTY and emulator.",{"type":47,"tag":342,"props":964,"children":965},{},[966,975],{"type":47,"tag":364,"props":967,"children":968},{},[969],{"type":47,"tag":58,"props":970,"children":972},{"className":971},[],[973],{"type":52,"value":974},"write \u003Cdata>",{"type":47,"tag":364,"props":976,"children":977},{},[978],{"type":52,"value":979},"Write raw bytes to the PTY (no return key appended).",{"type":47,"tag":342,"props":981,"children":982},{},[983,992],{"type":47,"tag":364,"props":984,"children":985},{},[986],{"type":47,"tag":58,"props":987,"children":989},{"className":988},[],[990],{"type":52,"value":991},"signal INT|TERM|KILL|QUIT",{"type":47,"tag":364,"props":993,"children":994},{},[995],{"type":52,"value":996},"Send a signal to the session's child process.",{"type":47,"tag":342,"props":998,"children":999},{},[1000,1009],{"type":47,"tag":364,"props":1001,"children":1002},{},[1003],{"type":47,"tag":58,"props":1004,"children":1006},{"className":1005},[],[1007],{"type":52,"value":1008},"kill",{"type":47,"tag":364,"props":1010,"children":1011},{},[1012],{"type":52,"value":1013},"Kill the session's child process.",{"type":47,"tag":500,"props":1015,"children":1017},{"id":1016},"wait-block-until-a-condition-holds",[1018],{"type":52,"value":1019},"Wait (block until a condition holds)",{"type":47,"tag":334,"props":1021,"children":1022},{},[1023,1037],{"type":47,"tag":338,"props":1024,"children":1025},{},[1026],{"type":47,"tag":342,"props":1027,"children":1028},{},[1029,1033],{"type":47,"tag":346,"props":1030,"children":1031},{},[1032],{"type":52,"value":519},{"type":47,"tag":346,"props":1034,"children":1035},{},[1036],{"type":52,"value":524},{"type":47,"tag":357,"props":1038,"children":1039},{},[1040,1065,1082,1099],{"type":47,"tag":342,"props":1041,"children":1042},{},[1043,1052],{"type":47,"tag":364,"props":1044,"children":1045},{},[1046],{"type":47,"tag":58,"props":1047,"children":1049},{"className":1048},[],[1050],{"type":52,"value":1051},"wait text \"T\" [--regex --full --not --timeout MS]",{"type":47,"tag":364,"props":1053,"children":1054},{},[1055,1057,1063],{"type":52,"value":1056},"Until text\u002Fregex is (with ",{"type":47,"tag":58,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":52,"value":1062},"--not",{"type":52,"value":1064},", is not) visible. Most precise wait.",{"type":47,"tag":342,"props":1066,"children":1067},{},[1068,1077],{"type":47,"tag":364,"props":1069,"children":1070},{},[1071],{"type":47,"tag":58,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":52,"value":1076},"wait idle [--timeout MS]",{"type":47,"tag":364,"props":1078,"children":1079},{},[1080],{"type":52,"value":1081},"Until the screen stops repainting (~250ms quiet).",{"type":47,"tag":342,"props":1083,"children":1084},{},[1085,1094],{"type":47,"tag":364,"props":1086,"children":1087},{},[1088],{"type":47,"tag":58,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":52,"value":1093},"wait command [--timeout MS]",{"type":47,"tag":364,"props":1095,"children":1096},{},[1097],{"type":52,"value":1098},"Until the current foreground command finishes (needs shell integration).",{"type":47,"tag":342,"props":1100,"children":1101},{},[1102,1111],{"type":47,"tag":364,"props":1103,"children":1104},{},[1105],{"type":47,"tag":58,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":52,"value":1110},"wait exit [--timeout MS]",{"type":47,"tag":364,"props":1112,"children":1113},{},[1114],{"type":52,"value":1115},"Until the session's program\u002Fshell itself exits.",{"type":47,"tag":500,"props":1117,"children":1119},{"id":1118},"expect-exit-0-pass-1-fail",[1120],{"type":52,"value":1121},"Expect (exit 0 = pass, 1 = fail)",{"type":47,"tag":334,"props":1123,"children":1124},{},[1125,1139],{"type":47,"tag":338,"props":1126,"children":1127},{},[1128],{"type":47,"tag":342,"props":1129,"children":1130},{},[1131,1135],{"type":47,"tag":346,"props":1132,"children":1133},{},[1134],{"type":52,"value":519},{"type":47,"tag":346,"props":1136,"children":1137},{},[1138],{"type":52,"value":524},{"type":47,"tag":357,"props":1140,"children":1141},{},[1142,1167,1184,1201],{"type":47,"tag":342,"props":1143,"children":1144},{},[1145,1154],{"type":47,"tag":364,"props":1146,"children":1147},{},[1148],{"type":47,"tag":58,"props":1149,"children":1151},{"className":1150},[],[1152],{"type":52,"value":1153},"expect text \"T\" [--regex --full --no-strict --not --fg C --bg C --timeout MS]",{"type":47,"tag":364,"props":1155,"children":1156},{},[1157,1159,1165],{"type":52,"value":1158},"Visibility plus optional color. ",{"type":47,"tag":58,"props":1160,"children":1162},{"className":1161},[],[1163],{"type":52,"value":1164},"--no-strict",{"type":52,"value":1166}," relaxes a strict single-match.",{"type":47,"tag":342,"props":1168,"children":1169},{},[1170,1179],{"type":47,"tag":364,"props":1171,"children":1172},{},[1173],{"type":47,"tag":58,"props":1174,"children":1176},{"className":1175},[],[1177],{"type":52,"value":1178},"expect exit-code N",{"type":47,"tag":364,"props":1180,"children":1181},{},[1182],{"type":52,"value":1183},"The last command's exit code.",{"type":47,"tag":342,"props":1185,"children":1186},{},[1187,1196],{"type":47,"tag":364,"props":1188,"children":1189},{},[1190],{"type":47,"tag":58,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":52,"value":1195},"expect output \"T\" [--regex]",{"type":47,"tag":364,"props":1197,"children":1198},{},[1199],{"type":52,"value":1200},"The last command's captured output.",{"type":47,"tag":342,"props":1202,"children":1203},{},[1204,1213],{"type":47,"tag":364,"props":1205,"children":1206},{},[1207],{"type":47,"tag":58,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":52,"value":1212},"expect snapshot NAME [-u] [--include-colors]",{"type":47,"tag":364,"props":1214,"children":1215},{},[1216,1218,1224,1226,1232],{"type":52,"value":1217},"Compare the screen against ",{"type":47,"tag":58,"props":1219,"children":1221},{"className":1220},[],[1222],{"type":52,"value":1223},"__snapshots__\u002FNAME.snap",{"type":52,"value":1225},"; ",{"type":47,"tag":58,"props":1227,"children":1229},{"className":1228},[],[1230],{"type":52,"value":1231},"-u",{"type":52,"value":1233}," writes\u002Fupdates it.",{"type":47,"tag":54,"props":1235,"children":1236},{},[1237,1239,1245,1247,1253,1255,1261],{"type":52,"value":1238},"Colors accept ansi-256 (",{"type":47,"tag":58,"props":1240,"children":1242},{"className":1241},[],[1243],{"type":52,"value":1244},"9",{"type":52,"value":1246},"), hex (",{"type":47,"tag":58,"props":1248,"children":1250},{"className":1249},[],[1251],{"type":52,"value":1252},"#ff0000",{"type":52,"value":1254},"), or rgb (",{"type":47,"tag":58,"props":1256,"children":1258},{"className":1257},[],[1259],{"type":52,"value":1260},"255,0,0",{"type":52,"value":232},{"type":47,"tag":500,"props":1263,"children":1265},{"id":1264},"recording-monitor-self-docs",[1266],{"type":52,"value":1267},"Recording, monitor & self-docs",{"type":47,"tag":334,"props":1269,"children":1270},{},[1271,1285],{"type":47,"tag":338,"props":1272,"children":1273},{},[1274],{"type":47,"tag":342,"props":1275,"children":1276},{},[1277,1281],{"type":47,"tag":346,"props":1278,"children":1279},{},[1280],{"type":52,"value":519},{"type":47,"tag":346,"props":1282,"children":1283},{},[1284],{"type":52,"value":524},{"type":47,"tag":357,"props":1286,"children":1287},{},[1288,1305,1322],{"type":47,"tag":342,"props":1289,"children":1290},{},[1291,1300],{"type":47,"tag":364,"props":1292,"children":1293},{},[1294],{"type":47,"tag":58,"props":1295,"children":1297},{"className":1296},[],[1298],{"type":52,"value":1299},"get-recording [session]",{"type":47,"tag":364,"props":1301,"children":1302},{},[1303],{"type":52,"value":1304},"Print a session's asciinema v2 cast to stdout (works even after it stopped).",{"type":47,"tag":342,"props":1306,"children":1307},{},[1308,1317],{"type":47,"tag":364,"props":1309,"children":1310},{},[1311],{"type":47,"tag":58,"props":1312,"children":1314},{"className":1313},[],[1315],{"type":52,"value":1316},"monitor",{"type":47,"tag":364,"props":1318,"children":1319},{},[1320],{"type":52,"value":1321},"Watch the session live, full-color, in another terminal.",{"type":47,"tag":342,"props":1323,"children":1324},{},[1325,1347],{"type":47,"tag":364,"props":1326,"children":1327},{},[1328,1333,1334,1340,1341],{"type":47,"tag":58,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":52,"value":216},{"type":52,"value":210},{"type":47,"tag":58,"props":1335,"children":1337},{"className":1336},[],[1338],{"type":52,"value":1339},"agent-context",{"type":52,"value":210},{"type":47,"tag":58,"props":1342,"children":1344},{"className":1343},[],[1345],{"type":52,"value":1346},"skill",{"type":47,"tag":364,"props":1348,"children":1349},{},[1350],{"type":52,"value":1351},"Self-documentation (see top of guide).",{"type":47,"tag":66,"props":1353,"children":1355},{"id":1354},"workflow-run-a-command-and-check-the-result",[1356],{"type":52,"value":1357},"Workflow: run a command and check the result",{"type":47,"tag":1359,"props":1360,"children":1365},"pre",{"className":1361,"code":1362,"language":1363,"meta":1364,"style":1364},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","shell-use open                       # start a shell session\nshell-use submit \"echo hello\"        # type text + Enter\nshell-use wait command               # block until the command finishes\nshell-use expect text \"hello\"        # assert it appeared (exit 1 if not)\nshell-use expect exit-code 0         # assert the command succeeded\nshell-use close\n","sh","",[1366],{"type":47,"tag":58,"props":1367,"children":1368},{"__ignoreMap":1364},[1369,1392,1426,1449,1485,1513],{"type":47,"tag":1370,"props":1371,"children":1374},"span",{"class":1372,"line":1373},"line",1,[1375,1380,1386],{"type":47,"tag":1370,"props":1376,"children":1378},{"style":1377},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1379],{"type":52,"value":4},{"type":47,"tag":1370,"props":1381,"children":1383},{"style":1382},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1384],{"type":52,"value":1385}," open",{"type":47,"tag":1370,"props":1387,"children":1389},{"style":1388},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1390],{"type":52,"value":1391},"                       # start a shell session\n",{"type":47,"tag":1370,"props":1393,"children":1395},{"class":1372,"line":1394},2,[1396,1400,1405,1411,1416,1421],{"type":47,"tag":1370,"props":1397,"children":1398},{"style":1377},[1399],{"type":52,"value":4},{"type":47,"tag":1370,"props":1401,"children":1402},{"style":1382},[1403],{"type":52,"value":1404}," submit",{"type":47,"tag":1370,"props":1406,"children":1408},{"style":1407},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1409],{"type":52,"value":1410}," \"",{"type":47,"tag":1370,"props":1412,"children":1413},{"style":1382},[1414],{"type":52,"value":1415},"echo hello",{"type":47,"tag":1370,"props":1417,"children":1418},{"style":1407},[1419],{"type":52,"value":1420},"\"",{"type":47,"tag":1370,"props":1422,"children":1423},{"style":1388},[1424],{"type":52,"value":1425},"        # type text + Enter\n",{"type":47,"tag":1370,"props":1427,"children":1429},{"class":1372,"line":1428},3,[1430,1434,1439,1444],{"type":47,"tag":1370,"props":1431,"children":1432},{"style":1377},[1433],{"type":52,"value":4},{"type":47,"tag":1370,"props":1435,"children":1436},{"style":1382},[1437],{"type":52,"value":1438}," wait",{"type":47,"tag":1370,"props":1440,"children":1441},{"style":1382},[1442],{"type":52,"value":1443}," command",{"type":47,"tag":1370,"props":1445,"children":1446},{"style":1388},[1447],{"type":52,"value":1448},"               # block until the command finishes\n",{"type":47,"tag":1370,"props":1450,"children":1452},{"class":1372,"line":1451},4,[1453,1457,1462,1467,1471,1476,1480],{"type":47,"tag":1370,"props":1454,"children":1455},{"style":1377},[1456],{"type":52,"value":4},{"type":47,"tag":1370,"props":1458,"children":1459},{"style":1382},[1460],{"type":52,"value":1461}," expect",{"type":47,"tag":1370,"props":1463,"children":1464},{"style":1382},[1465],{"type":52,"value":1466}," text",{"type":47,"tag":1370,"props":1468,"children":1469},{"style":1407},[1470],{"type":52,"value":1410},{"type":47,"tag":1370,"props":1472,"children":1473},{"style":1382},[1474],{"type":52,"value":1475},"hello",{"type":47,"tag":1370,"props":1477,"children":1478},{"style":1407},[1479],{"type":52,"value":1420},{"type":47,"tag":1370,"props":1481,"children":1482},{"style":1388},[1483],{"type":52,"value":1484},"        # assert it appeared (exit 1 if not)\n",{"type":47,"tag":1370,"props":1486,"children":1488},{"class":1372,"line":1487},5,[1489,1493,1497,1502,1508],{"type":47,"tag":1370,"props":1490,"children":1491},{"style":1377},[1492],{"type":52,"value":4},{"type":47,"tag":1370,"props":1494,"children":1495},{"style":1382},[1496],{"type":52,"value":1461},{"type":47,"tag":1370,"props":1498,"children":1499},{"style":1382},[1500],{"type":52,"value":1501}," exit-code",{"type":47,"tag":1370,"props":1503,"children":1505},{"style":1504},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1506],{"type":52,"value":1507}," 0",{"type":47,"tag":1370,"props":1509,"children":1510},{"style":1388},[1511],{"type":52,"value":1512},"         # assert the command succeeded\n",{"type":47,"tag":1370,"props":1514,"children":1516},{"class":1372,"line":1515},6,[1517,1521],{"type":47,"tag":1370,"props":1518,"children":1519},{"style":1377},[1520],{"type":52,"value":4},{"type":47,"tag":1370,"props":1522,"children":1523},{"style":1382},[1524],{"type":52,"value":1525}," close\n",{"type":47,"tag":54,"props":1527,"children":1528},{},[1529,1535,1537,1543,1545,1551,1553,1558,1559,1564,1566,1572,1574,1579],{"type":47,"tag":58,"props":1530,"children":1532},{"className":1531},[],[1533],{"type":52,"value":1534},"submit",{"type":52,"value":1536}," types text then presses Enter; ",{"type":47,"tag":58,"props":1538,"children":1540},{"className":1539},[],[1541],{"type":52,"value":1542},"type",{"type":52,"value":1544}," types without Enter; ",{"type":47,"tag":58,"props":1546,"children":1548},{"className":1547},[],[1549],{"type":52,"value":1550},"press",{"type":52,"value":1552},"\nsends named keys (",{"type":47,"tag":58,"props":1554,"children":1556},{"className":1555},[],[1557],{"type":52,"value":836},{"type":52,"value":838},{"type":47,"tag":58,"props":1560,"children":1562},{"className":1561},[],[1563],{"type":52,"value":844},{"type":52,"value":1565},"); ",{"type":47,"tag":58,"props":1567,"children":1569},{"className":1568},[],[1570],{"type":52,"value":1571},"keys",{"type":52,"value":1573}," sends one\ncombo (",{"type":47,"tag":58,"props":1575,"children":1577},{"className":1576},[],[1578],{"type":52,"value":857},{"type":52,"value":232},{"type":47,"tag":66,"props":1581,"children":1583},{"id":1582},"workflow-drive-a-tui-program",[1584],{"type":52,"value":1585},"Workflow: drive a TUI program",{"type":47,"tag":1359,"props":1587,"children":1589},{"className":1361,"code":1588,"language":1363,"meta":1364,"style":1364},"shell-use run vim file.txt\nshell-use wait idle                  # let the screen finish rendering\nshell-use press i                    # enter insert mode\nshell-use type \"some text\"\nshell-use press Escape : w q Enter   # save and quit\nshell-use wait exit\n",[1590],{"type":47,"tag":58,"props":1591,"children":1592},{"__ignoreMap":1364},[1593,1615,1636,1658,1684,1725],{"type":47,"tag":1370,"props":1594,"children":1595},{"class":1372,"line":1373},[1596,1600,1605,1610],{"type":47,"tag":1370,"props":1597,"children":1598},{"style":1377},[1599],{"type":52,"value":4},{"type":47,"tag":1370,"props":1601,"children":1602},{"style":1382},[1603],{"type":52,"value":1604}," run",{"type":47,"tag":1370,"props":1606,"children":1607},{"style":1382},[1608],{"type":52,"value":1609}," vim",{"type":47,"tag":1370,"props":1611,"children":1612},{"style":1382},[1613],{"type":52,"value":1614}," file.txt\n",{"type":47,"tag":1370,"props":1616,"children":1617},{"class":1372,"line":1394},[1618,1622,1626,1631],{"type":47,"tag":1370,"props":1619,"children":1620},{"style":1377},[1621],{"type":52,"value":4},{"type":47,"tag":1370,"props":1623,"children":1624},{"style":1382},[1625],{"type":52,"value":1438},{"type":47,"tag":1370,"props":1627,"children":1628},{"style":1382},[1629],{"type":52,"value":1630}," idle",{"type":47,"tag":1370,"props":1632,"children":1633},{"style":1388},[1634],{"type":52,"value":1635},"                  # let the screen finish rendering\n",{"type":47,"tag":1370,"props":1637,"children":1638},{"class":1372,"line":1428},[1639,1643,1648,1653],{"type":47,"tag":1370,"props":1640,"children":1641},{"style":1377},[1642],{"type":52,"value":4},{"type":47,"tag":1370,"props":1644,"children":1645},{"style":1382},[1646],{"type":52,"value":1647}," press",{"type":47,"tag":1370,"props":1649,"children":1650},{"style":1382},[1651],{"type":52,"value":1652}," i",{"type":47,"tag":1370,"props":1654,"children":1655},{"style":1388},[1656],{"type":52,"value":1657},"                    # enter insert mode\n",{"type":47,"tag":1370,"props":1659,"children":1660},{"class":1372,"line":1451},[1661,1665,1670,1674,1679],{"type":47,"tag":1370,"props":1662,"children":1663},{"style":1377},[1664],{"type":52,"value":4},{"type":47,"tag":1370,"props":1666,"children":1667},{"style":1382},[1668],{"type":52,"value":1669}," type",{"type":47,"tag":1370,"props":1671,"children":1672},{"style":1407},[1673],{"type":52,"value":1410},{"type":47,"tag":1370,"props":1675,"children":1676},{"style":1382},[1677],{"type":52,"value":1678},"some text",{"type":47,"tag":1370,"props":1680,"children":1681},{"style":1407},[1682],{"type":52,"value":1683},"\"\n",{"type":47,"tag":1370,"props":1685,"children":1686},{"class":1372,"line":1487},[1687,1691,1695,1700,1705,1710,1715,1720],{"type":47,"tag":1370,"props":1688,"children":1689},{"style":1377},[1690],{"type":52,"value":4},{"type":47,"tag":1370,"props":1692,"children":1693},{"style":1382},[1694],{"type":52,"value":1647},{"type":47,"tag":1370,"props":1696,"children":1697},{"style":1382},[1698],{"type":52,"value":1699}," Escape",{"type":47,"tag":1370,"props":1701,"children":1702},{"style":1382},[1703],{"type":52,"value":1704}," :",{"type":47,"tag":1370,"props":1706,"children":1707},{"style":1382},[1708],{"type":52,"value":1709}," w",{"type":47,"tag":1370,"props":1711,"children":1712},{"style":1382},[1713],{"type":52,"value":1714}," q",{"type":47,"tag":1370,"props":1716,"children":1717},{"style":1382},[1718],{"type":52,"value":1719}," Enter",{"type":47,"tag":1370,"props":1721,"children":1722},{"style":1388},[1723],{"type":52,"value":1724},"   # save and quit\n",{"type":47,"tag":1370,"props":1726,"children":1727},{"class":1372,"line":1515},[1728,1732,1736],{"type":47,"tag":1370,"props":1729,"children":1730},{"style":1377},[1731],{"type":52,"value":4},{"type":47,"tag":1370,"props":1733,"children":1734},{"style":1382},[1735],{"type":52,"value":1438},{"type":47,"tag":1370,"props":1737,"children":1738},{"style":1382},[1739],{"type":52,"value":1740}," exit\n",{"type":47,"tag":66,"props":1742,"children":1744},{"id":1743},"workflow-mouse-interaction",[1745],{"type":52,"value":1746},"Workflow: mouse interaction",{"type":47,"tag":1359,"props":1748,"children":1750},{"className":1361,"code":1749,"language":1363,"meta":1364,"style":1364},"shell-use mouse click --on-text \"OK\"     # click a label, no coordinates needed\nshell-use mouse click 10 5 --clicks 2    # double-click at column 10, row 5\nshell-use mouse scroll down --amount 5   # scroll the wheel\nshell-use mouse drag 2 2 20 2            # drag from (2,2) to (20,2)\n",[1751],{"type":47,"tag":58,"props":1752,"children":1753},{"__ignoreMap":1364},[1754,1794,1834,1869],{"type":47,"tag":1370,"props":1755,"children":1756},{"class":1372,"line":1373},[1757,1761,1766,1771,1776,1780,1785,1789],{"type":47,"tag":1370,"props":1758,"children":1759},{"style":1377},[1760],{"type":52,"value":4},{"type":47,"tag":1370,"props":1762,"children":1763},{"style":1382},[1764],{"type":52,"value":1765}," mouse",{"type":47,"tag":1370,"props":1767,"children":1768},{"style":1382},[1769],{"type":52,"value":1770}," click",{"type":47,"tag":1370,"props":1772,"children":1773},{"style":1382},[1774],{"type":52,"value":1775}," --on-text",{"type":47,"tag":1370,"props":1777,"children":1778},{"style":1407},[1779],{"type":52,"value":1410},{"type":47,"tag":1370,"props":1781,"children":1782},{"style":1382},[1783],{"type":52,"value":1784},"OK",{"type":47,"tag":1370,"props":1786,"children":1787},{"style":1407},[1788],{"type":52,"value":1420},{"type":47,"tag":1370,"props":1790,"children":1791},{"style":1388},[1792],{"type":52,"value":1793},"     # click a label, no coordinates needed\n",{"type":47,"tag":1370,"props":1795,"children":1796},{"class":1372,"line":1394},[1797,1801,1805,1809,1814,1819,1824,1829],{"type":47,"tag":1370,"props":1798,"children":1799},{"style":1377},[1800],{"type":52,"value":4},{"type":47,"tag":1370,"props":1802,"children":1803},{"style":1382},[1804],{"type":52,"value":1765},{"type":47,"tag":1370,"props":1806,"children":1807},{"style":1382},[1808],{"type":52,"value":1770},{"type":47,"tag":1370,"props":1810,"children":1811},{"style":1504},[1812],{"type":52,"value":1813}," 10",{"type":47,"tag":1370,"props":1815,"children":1816},{"style":1504},[1817],{"type":52,"value":1818}," 5",{"type":47,"tag":1370,"props":1820,"children":1821},{"style":1382},[1822],{"type":52,"value":1823}," --clicks",{"type":47,"tag":1370,"props":1825,"children":1826},{"style":1504},[1827],{"type":52,"value":1828}," 2",{"type":47,"tag":1370,"props":1830,"children":1831},{"style":1388},[1832],{"type":52,"value":1833},"    # double-click at column 10, row 5\n",{"type":47,"tag":1370,"props":1835,"children":1836},{"class":1372,"line":1428},[1837,1841,1845,1850,1855,1860,1864],{"type":47,"tag":1370,"props":1838,"children":1839},{"style":1377},[1840],{"type":52,"value":4},{"type":47,"tag":1370,"props":1842,"children":1843},{"style":1382},[1844],{"type":52,"value":1765},{"type":47,"tag":1370,"props":1846,"children":1847},{"style":1382},[1848],{"type":52,"value":1849}," scroll",{"type":47,"tag":1370,"props":1851,"children":1852},{"style":1382},[1853],{"type":52,"value":1854}," down",{"type":47,"tag":1370,"props":1856,"children":1857},{"style":1382},[1858],{"type":52,"value":1859}," --amount",{"type":47,"tag":1370,"props":1861,"children":1862},{"style":1504},[1863],{"type":52,"value":1818},{"type":47,"tag":1370,"props":1865,"children":1866},{"style":1388},[1867],{"type":52,"value":1868},"   # scroll the wheel\n",{"type":47,"tag":1370,"props":1870,"children":1871},{"class":1372,"line":1451},[1872,1876,1880,1885,1889,1893,1898,1902],{"type":47,"tag":1370,"props":1873,"children":1874},{"style":1377},[1875],{"type":52,"value":4},{"type":47,"tag":1370,"props":1877,"children":1878},{"style":1382},[1879],{"type":52,"value":1765},{"type":47,"tag":1370,"props":1881,"children":1882},{"style":1382},[1883],{"type":52,"value":1884}," drag",{"type":47,"tag":1370,"props":1886,"children":1887},{"style":1504},[1888],{"type":52,"value":1828},{"type":47,"tag":1370,"props":1890,"children":1891},{"style":1504},[1892],{"type":52,"value":1828},{"type":47,"tag":1370,"props":1894,"children":1895},{"style":1504},[1896],{"type":52,"value":1897}," 20",{"type":47,"tag":1370,"props":1899,"children":1900},{"style":1504},[1901],{"type":52,"value":1828},{"type":47,"tag":1370,"props":1903,"children":1904},{"style":1388},[1905],{"type":52,"value":1906},"            # drag from (2,2) to (20,2)\n",{"type":47,"tag":66,"props":1908,"children":1910},{"id":1909},"workflow-assert-colors",[1911],{"type":52,"value":1912},"Workflow: assert colors",{"type":47,"tag":1359,"props":1914,"children":1916},{"className":1361,"code":1915,"language":1363,"meta":1364,"style":1364},"shell-use cells 0 0 10 1                       # inspect char\u002Ffg\u002Fbg\u002Fflags\nshell-use expect text \"ERROR\" --fg \"#ff0000\"   # text present AND red\nshell-use expect text \"OK\" --fg 2 --bg 0       # ansi-256 fg\u002Fbg\n",[1917],{"type":47,"tag":58,"props":1918,"children":1919},{"__ignoreMap":1364},[1920,1954,2004],{"type":47,"tag":1370,"props":1921,"children":1922},{"class":1372,"line":1373},[1923,1927,1932,1936,1940,1944,1949],{"type":47,"tag":1370,"props":1924,"children":1925},{"style":1377},[1926],{"type":52,"value":4},{"type":47,"tag":1370,"props":1928,"children":1929},{"style":1382},[1930],{"type":52,"value":1931}," cells",{"type":47,"tag":1370,"props":1933,"children":1934},{"style":1504},[1935],{"type":52,"value":1507},{"type":47,"tag":1370,"props":1937,"children":1938},{"style":1504},[1939],{"type":52,"value":1507},{"type":47,"tag":1370,"props":1941,"children":1942},{"style":1504},[1943],{"type":52,"value":1813},{"type":47,"tag":1370,"props":1945,"children":1946},{"style":1504},[1947],{"type":52,"value":1948}," 1",{"type":47,"tag":1370,"props":1950,"children":1951},{"style":1388},[1952],{"type":52,"value":1953},"                       # inspect char\u002Ffg\u002Fbg\u002Fflags\n",{"type":47,"tag":1370,"props":1955,"children":1956},{"class":1372,"line":1394},[1957,1961,1965,1969,1973,1978,1982,1987,1991,1995,1999],{"type":47,"tag":1370,"props":1958,"children":1959},{"style":1377},[1960],{"type":52,"value":4},{"type":47,"tag":1370,"props":1962,"children":1963},{"style":1382},[1964],{"type":52,"value":1461},{"type":47,"tag":1370,"props":1966,"children":1967},{"style":1382},[1968],{"type":52,"value":1466},{"type":47,"tag":1370,"props":1970,"children":1971},{"style":1407},[1972],{"type":52,"value":1410},{"type":47,"tag":1370,"props":1974,"children":1975},{"style":1382},[1976],{"type":52,"value":1977},"ERROR",{"type":47,"tag":1370,"props":1979,"children":1980},{"style":1407},[1981],{"type":52,"value":1420},{"type":47,"tag":1370,"props":1983,"children":1984},{"style":1382},[1985],{"type":52,"value":1986}," --fg",{"type":47,"tag":1370,"props":1988,"children":1989},{"style":1407},[1990],{"type":52,"value":1410},{"type":47,"tag":1370,"props":1992,"children":1993},{"style":1382},[1994],{"type":52,"value":1252},{"type":47,"tag":1370,"props":1996,"children":1997},{"style":1407},[1998],{"type":52,"value":1420},{"type":47,"tag":1370,"props":2000,"children":2001},{"style":1388},[2002],{"type":52,"value":2003},"   # text present AND red\n",{"type":47,"tag":1370,"props":2005,"children":2006},{"class":1372,"line":1428},[2007,2011,2015,2019,2023,2027,2031,2035,2039,2044,2048],{"type":47,"tag":1370,"props":2008,"children":2009},{"style":1377},[2010],{"type":52,"value":4},{"type":47,"tag":1370,"props":2012,"children":2013},{"style":1382},[2014],{"type":52,"value":1461},{"type":47,"tag":1370,"props":2016,"children":2017},{"style":1382},[2018],{"type":52,"value":1466},{"type":47,"tag":1370,"props":2020,"children":2021},{"style":1407},[2022],{"type":52,"value":1410},{"type":47,"tag":1370,"props":2024,"children":2025},{"style":1382},[2026],{"type":52,"value":1784},{"type":47,"tag":1370,"props":2028,"children":2029},{"style":1407},[2030],{"type":52,"value":1420},{"type":47,"tag":1370,"props":2032,"children":2033},{"style":1382},[2034],{"type":52,"value":1986},{"type":47,"tag":1370,"props":2036,"children":2037},{"style":1504},[2038],{"type":52,"value":1828},{"type":47,"tag":1370,"props":2040,"children":2041},{"style":1382},[2042],{"type":52,"value":2043}," --bg",{"type":47,"tag":1370,"props":2045,"children":2046},{"style":1504},[2047],{"type":52,"value":1507},{"type":47,"tag":1370,"props":2049,"children":2050},{"style":1388},[2051],{"type":52,"value":2052},"       # ansi-256 fg\u002Fbg\n",{"type":47,"tag":66,"props":2054,"children":2056},{"id":2055},"workflow-snapshot-testing",[2057],{"type":52,"value":2058},"Workflow: snapshot testing",{"type":47,"tag":1359,"props":2060,"children":2062},{"className":1361,"code":2061,"language":1363,"meta":1364,"style":1364},"shell-use expect snapshot main-view -u                    # create\u002Fupdate the snapshot\nshell-use expect snapshot main-view                       # later: assert it still matches\nshell-use expect snapshot main-view --include-colors      # also compare per-cell colors\n",[2063],{"type":47,"tag":58,"props":2064,"children":2065},{"__ignoreMap":1364},[2066,2097,2121],{"type":47,"tag":1370,"props":2067,"children":2068},{"class":1372,"line":1373},[2069,2073,2077,2082,2087,2092],{"type":47,"tag":1370,"props":2070,"children":2071},{"style":1377},[2072],{"type":52,"value":4},{"type":47,"tag":1370,"props":2074,"children":2075},{"style":1382},[2076],{"type":52,"value":1461},{"type":47,"tag":1370,"props":2078,"children":2079},{"style":1382},[2080],{"type":52,"value":2081}," snapshot",{"type":47,"tag":1370,"props":2083,"children":2084},{"style":1382},[2085],{"type":52,"value":2086}," main-view",{"type":47,"tag":1370,"props":2088,"children":2089},{"style":1382},[2090],{"type":52,"value":2091}," -u",{"type":47,"tag":1370,"props":2093,"children":2094},{"style":1388},[2095],{"type":52,"value":2096},"                    # create\u002Fupdate the snapshot\n",{"type":47,"tag":1370,"props":2098,"children":2099},{"class":1372,"line":1394},[2100,2104,2108,2112,2116],{"type":47,"tag":1370,"props":2101,"children":2102},{"style":1377},[2103],{"type":52,"value":4},{"type":47,"tag":1370,"props":2105,"children":2106},{"style":1382},[2107],{"type":52,"value":1461},{"type":47,"tag":1370,"props":2109,"children":2110},{"style":1382},[2111],{"type":52,"value":2081},{"type":47,"tag":1370,"props":2113,"children":2114},{"style":1382},[2115],{"type":52,"value":2086},{"type":47,"tag":1370,"props":2117,"children":2118},{"style":1388},[2119],{"type":52,"value":2120},"                       # later: assert it still matches\n",{"type":47,"tag":1370,"props":2122,"children":2123},{"class":1372,"line":1428},[2124,2128,2132,2136,2140,2145],{"type":47,"tag":1370,"props":2125,"children":2126},{"style":1377},[2127],{"type":52,"value":4},{"type":47,"tag":1370,"props":2129,"children":2130},{"style":1382},[2131],{"type":52,"value":1461},{"type":47,"tag":1370,"props":2133,"children":2134},{"style":1382},[2135],{"type":52,"value":2081},{"type":47,"tag":1370,"props":2137,"children":2138},{"style":1382},[2139],{"type":52,"value":2086},{"type":47,"tag":1370,"props":2141,"children":2142},{"style":1382},[2143],{"type":52,"value":2144}," --include-colors",{"type":47,"tag":1370,"props":2146,"children":2147},{"style":1388},[2148],{"type":52,"value":2149},"      # also compare per-cell colors\n",{"type":47,"tag":54,"props":2151,"children":2152},{},[2153,2155,2161],{"type":52,"value":2154},"Snapshots live in ",{"type":47,"tag":58,"props":2156,"children":2158},{"className":2157},[],[2159],{"type":52,"value":2160},"__snapshots__\u002F\u003CNAME>.snap",{"type":52,"value":2162}," next to where you run the command.",{"type":47,"tag":66,"props":2164,"children":2166},{"id":2165},"waiting-pick-the-right-one",[2167],{"type":52,"value":2168},"Waiting: pick the right one",{"type":47,"tag":78,"props":2170,"children":2171},{},[2172,2190,2215,2233],{"type":47,"tag":82,"props":2173,"children":2174},{},[2175,2181,2183,2188],{"type":47,"tag":58,"props":2176,"children":2178},{"className":2177},[],[2179],{"type":52,"value":2180},"wait text \"T\"",{"type":52,"value":2182},": waits until text\u002Fregex is visible. The most precise wait; use\nit whenever you know what output to look for. ",{"type":47,"tag":58,"props":2184,"children":2186},{"className":2185},[],[2187],{"type":52,"value":1062},{"type":52,"value":2189}," waits for it to disappear.",{"type":47,"tag":82,"props":2191,"children":2192},{},[2193,2198,2200,2205,2207,2213],{"type":47,"tag":58,"props":2194,"children":2196},{"className":2195},[],[2197],{"type":52,"value":312},{"type":52,"value":2199},": waits until the current command finishes, via the shell's OSC\nintegration markers. This is what you want after ",{"type":47,"tag":58,"props":2201,"children":2203},{"className":2202},[],[2204],{"type":52,"value":1534},{"type":52,"value":2206},"-ing a command.\nRequires shell integration; without it, falls back to \"prompt returned and\nscreen idle\". Bump ",{"type":47,"tag":58,"props":2208,"children":2210},{"className":2209},[],[2211],{"type":52,"value":2212},"--timeout",{"type":52,"value":2214}," for long commands (default 30s).",{"type":47,"tag":82,"props":2216,"children":2217},{},[2218,2223,2225,2231],{"type":47,"tag":58,"props":2219,"children":2221},{"className":2220},[],[2222],{"type":52,"value":296},{"type":52,"value":2224},": waits until the screen stops repainting. This tracks visual\nquiescence, not completion: a silent command like ",{"type":47,"tag":58,"props":2226,"children":2228},{"className":2227},[],[2229],{"type":52,"value":2230},"sleep 100",{"type":52,"value":2232}," counts as idle\nalmost immediately. Use it to let a TUI finish drawing.",{"type":47,"tag":82,"props":2234,"children":2235},{},[2236,2241,2243,2249,2251,2257],{"type":47,"tag":58,"props":2237,"children":2239},{"className":2238},[],[2240],{"type":52,"value":319},{"type":52,"value":2242},": waits until the program\u002Fsession itself exits. Use for\n",{"type":47,"tag":58,"props":2244,"children":2246},{"className":2245},[],[2247],{"type":52,"value":2248},"run \u003Cprogram>",{"type":52,"value":2250}," sessions or after sending ",{"type":47,"tag":58,"props":2252,"children":2254},{"className":2253},[],[2255],{"type":52,"value":2256},"exit",{"type":52,"value":702},{"type":47,"tag":66,"props":2259,"children":2261},{"id":2260},"recording",[2262],{"type":52,"value":2263},"Recording",{"type":47,"tag":54,"props":2265,"children":2266},{},[2267,2269,2274,2275,2280],{"type":52,"value":2268},"Every session records automatically from the moment it opens, in asciinema v2\ncast format, stored in your XDG cache by session name. The path is reported in\nthe ",{"type":47,"tag":58,"props":2270,"children":2272},{"className":2271},[],[2273],{"type":52,"value":449},{"type":52,"value":210},{"type":47,"tag":58,"props":2276,"children":2278},{"className":2277},[],[2279],{"type":52,"value":456},{"type":52,"value":2281}," response. Recordings persist after the session ends; stale\nones are swept when a daemon next starts (recordings of still-running sessions\nare kept).",{"type":47,"tag":1359,"props":2283,"children":2285},{"className":1361,"code":2284,"language":1363,"meta":1364,"style":1364},"shell-use get-recording > demo.cast    # current session's recording to stdout\nshell-use get-recording work > w.cast  # a specific session by name (even if stopped)\n",[2286],{"type":47,"tag":58,"props":2287,"children":2288},{"__ignoreMap":1364},[2289,2316],{"type":47,"tag":1370,"props":2290,"children":2291},{"class":1372,"line":1373},[2292,2296,2301,2306,2311],{"type":47,"tag":1370,"props":2293,"children":2294},{"style":1377},[2295],{"type":52,"value":4},{"type":47,"tag":1370,"props":2297,"children":2298},{"style":1382},[2299],{"type":52,"value":2300}," get-recording",{"type":47,"tag":1370,"props":2302,"children":2303},{"style":1407},[2304],{"type":52,"value":2305}," >",{"type":47,"tag":1370,"props":2307,"children":2308},{"style":1382},[2309],{"type":52,"value":2310}," demo.cast",{"type":47,"tag":1370,"props":2312,"children":2313},{"style":1388},[2314],{"type":52,"value":2315},"    # current session's recording to stdout\n",{"type":47,"tag":1370,"props":2317,"children":2318},{"class":1372,"line":1394},[2319,2323,2327,2332,2336,2341],{"type":47,"tag":1370,"props":2320,"children":2321},{"style":1377},[2322],{"type":52,"value":4},{"type":47,"tag":1370,"props":2324,"children":2325},{"style":1382},[2326],{"type":52,"value":2300},{"type":47,"tag":1370,"props":2328,"children":2329},{"style":1382},[2330],{"type":52,"value":2331}," work",{"type":47,"tag":1370,"props":2333,"children":2334},{"style":1407},[2335],{"type":52,"value":2305},{"type":47,"tag":1370,"props":2337,"children":2338},{"style":1382},[2339],{"type":52,"value":2340}," w.cast",{"type":47,"tag":1370,"props":2342,"children":2343},{"style":1388},[2344],{"type":52,"value":2345},"  # a specific session by name (even if stopped)\n",{"type":47,"tag":54,"props":2347,"children":2348},{},[2349,2351,2357,2359,2365],{"type":52,"value":2350},"Play it with ",{"type":47,"tag":58,"props":2352,"children":2354},{"className":2353},[],[2355],{"type":52,"value":2356},"asciinema play demo.cast",{"type":52,"value":2358},", or render a GIF with\n",{"type":47,"tag":58,"props":2360,"children":2362},{"className":2361},[],[2363],{"type":52,"value":2364},"agg demo.cast demo.gif",{"type":52,"value":702},{"type":47,"tag":66,"props":2367,"children":2369},{"id":2368},"live-monitor",[2370],{"type":52,"value":2371},"Live monitor",{"type":47,"tag":54,"props":2373,"children":2374},{},[2375,2377,2382,2384,2390,2391,2397,2399,2405],{"type":52,"value":2376},"Watch a session live in a second terminal while an agent drives it; both share\nthe same daemon. ",{"type":47,"tag":58,"props":2378,"children":2380},{"className":2379},[],[2381],{"type":52,"value":1316},{"type":52,"value":2383}," takes over an alternate screen and streams the\nsession in full color at ~20fps. Press ",{"type":47,"tag":58,"props":2385,"children":2387},{"className":2386},[],[2388],{"type":52,"value":2389},"q",{"type":52,"value":838},{"type":47,"tag":58,"props":2392,"children":2394},{"className":2393},[],[2395],{"type":52,"value":2396},"Esc",{"type":52,"value":2398},", or ",{"type":47,"tag":58,"props":2400,"children":2402},{"className":2401},[],[2403],{"type":52,"value":2404},"Ctrl-C",{"type":52,"value":2406}," to detach.",{"type":47,"tag":1359,"props":2408,"children":2410},{"className":1361,"code":2409,"language":1363,"meta":1364,"style":1364},"shell-use --session work monitor   # watch the 'work' session live\n",[2411],{"type":47,"tag":58,"props":2412,"children":2413},{"__ignoreMap":1364},[2414],{"type":47,"tag":1370,"props":2415,"children":2416},{"class":1372,"line":1373},[2417,2421,2426,2430,2435],{"type":47,"tag":1370,"props":2418,"children":2419},{"style":1377},[2420],{"type":52,"value":4},{"type":47,"tag":1370,"props":2422,"children":2423},{"style":1382},[2424],{"type":52,"value":2425}," --session",{"type":47,"tag":1370,"props":2427,"children":2428},{"style":1382},[2429],{"type":52,"value":2331},{"type":47,"tag":1370,"props":2431,"children":2432},{"style":1382},[2433],{"type":52,"value":2434}," monitor",{"type":47,"tag":1370,"props":2436,"children":2437},{"style":1388},[2438],{"type":52,"value":2439},"   # watch the 'work' session live\n",{"type":47,"tag":54,"props":2441,"children":2442},{},[2443,2445,2450,2452,2457],{"type":52,"value":2444},"It needs an interactive terminal (exit ",{"type":47,"tag":58,"props":2446,"children":2448},{"className":2447},[],[2449],{"type":52,"value":421},{"type":52,"value":2451}," otherwise) and an existing session\n(exit ",{"type":47,"tag":58,"props":2453,"children":2455},{"className":2454},[],[2456],{"type":52,"value":438},{"type":52,"value":2458}," if none). It only reads shared screen state, so watching never blocks\nthe commands the agent runs; resizing the window re-fits the frame.",{"type":47,"tag":66,"props":2460,"children":2462},{"id":2461},"programmatic-use-python-node-deno-bun",[2463],{"type":52,"value":2464},"Programmatic use (Python, Node, Deno & Bun)",{"type":47,"tag":54,"props":2466,"children":2467},{},[2468,2470,2475,2477,2483,2485,2491,2493,2499,2501,2507],{"type":52,"value":2469},"Two client libraries drive the same daemon from code instead of the shell, with\nmethods that mirror the CLI command surface. Both are async and dependency-free,\nand both need the ",{"type":47,"tag":58,"props":2471,"children":2473},{"className":2472},[],[2474],{"type":52,"value":4},{"type":52,"value":2476}," binary on ",{"type":47,"tag":58,"props":2478,"children":2480},{"className":2479},[],[2481],{"type":52,"value":2482},"PATH",{"type":52,"value":2484}," (or pointed to with the\n",{"type":47,"tag":58,"props":2486,"children":2488},{"className":2487},[],[2489],{"type":52,"value":2490},"SHELL_USE_BIN",{"type":52,"value":2492}," env var, or a ",{"type":47,"tag":58,"props":2494,"children":2496},{"className":2495},[],[2497],{"type":52,"value":2498},"binary",{"type":52,"value":2500}," argument). They start and reuse the daemon\nexactly like the CLI, so a session opened from code can be watched with\n",{"type":47,"tag":58,"props":2502,"children":2504},{"className":2503},[],[2505],{"type":52,"value":2506},"shell-use monitor",{"type":52,"value":2508}," from another terminal. The JavaScript package is a single\nESM module that runs on Node, Deno, and Bun; it imports only built-in modules,\nso it pulls in nothing extra on any of them.",{"type":47,"tag":1359,"props":2510,"children":2512},{"className":1361,"code":2511,"language":1363,"meta":1364,"style":1364},"pip install shell-use              # Python 3.8+, imported as `shell_use`\nnpm install @microsoft\u002Fshell-use   # Node 20+ (ESM only)\nbun add @microsoft\u002Fshell-use       # Bun\ndeno add npm:@microsoft\u002Fshell-use  # Deno 2\n",[2513],{"type":47,"tag":58,"props":2514,"children":2515},{"__ignoreMap":1364},[2516,2539,2561,2583],{"type":47,"tag":1370,"props":2517,"children":2518},{"class":1372,"line":1373},[2519,2524,2529,2534],{"type":47,"tag":1370,"props":2520,"children":2521},{"style":1377},[2522],{"type":52,"value":2523},"pip",{"type":47,"tag":1370,"props":2525,"children":2526},{"style":1382},[2527],{"type":52,"value":2528}," install",{"type":47,"tag":1370,"props":2530,"children":2531},{"style":1382},[2532],{"type":52,"value":2533}," shell-use",{"type":47,"tag":1370,"props":2535,"children":2536},{"style":1388},[2537],{"type":52,"value":2538},"              # Python 3.8+, imported as `shell_use`\n",{"type":47,"tag":1370,"props":2540,"children":2541},{"class":1372,"line":1394},[2542,2547,2551,2556],{"type":47,"tag":1370,"props":2543,"children":2544},{"style":1377},[2545],{"type":52,"value":2546},"npm",{"type":47,"tag":1370,"props":2548,"children":2549},{"style":1382},[2550],{"type":52,"value":2528},{"type":47,"tag":1370,"props":2552,"children":2553},{"style":1382},[2554],{"type":52,"value":2555}," @microsoft\u002Fshell-use",{"type":47,"tag":1370,"props":2557,"children":2558},{"style":1388},[2559],{"type":52,"value":2560},"   # Node 20+ (ESM only)\n",{"type":47,"tag":1370,"props":2562,"children":2563},{"class":1372,"line":1428},[2564,2569,2574,2578],{"type":47,"tag":1370,"props":2565,"children":2566},{"style":1377},[2567],{"type":52,"value":2568},"bun",{"type":47,"tag":1370,"props":2570,"children":2571},{"style":1382},[2572],{"type":52,"value":2573}," add",{"type":47,"tag":1370,"props":2575,"children":2576},{"style":1382},[2577],{"type":52,"value":2555},{"type":47,"tag":1370,"props":2579,"children":2580},{"style":1388},[2581],{"type":52,"value":2582},"       # Bun\n",{"type":47,"tag":1370,"props":2584,"children":2585},{"class":1372,"line":1451},[2586,2591,2595,2600],{"type":47,"tag":1370,"props":2587,"children":2588},{"style":1377},[2589],{"type":52,"value":2590},"deno",{"type":47,"tag":1370,"props":2592,"children":2593},{"style":1382},[2594],{"type":52,"value":2573},{"type":47,"tag":1370,"props":2596,"children":2597},{"style":1382},[2598],{"type":52,"value":2599}," npm:@microsoft\u002Fshell-use",{"type":47,"tag":1370,"props":2601,"children":2602},{"style":1388},[2603],{"type":52,"value":2604},"  # Deno 2\n",{"type":47,"tag":54,"props":2606,"children":2607},{},[2608],{"type":52,"value":2609},"Python:",{"type":47,"tag":1359,"props":2611,"children":2615},{"className":2612,"code":2613,"language":2614,"meta":1364,"style":1364},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import asyncio\nfrom shell_use import ShellUse\n\nasync def main():\n    async with ShellUse() as su:                     # closes the session on exit\n        await su.open()\n        await su.submit(\"echo hello\")\n        await su.wait_command()\n        await su.expect_text(\"hello\", strict=False)  # command echo + output both match\n        await su.expect_exit_code(0)\n\nasyncio.run(main())\n","python",[2616],{"type":47,"tag":58,"props":2617,"children":2618},{"__ignoreMap":1364},[2619,2627,2635,2644,2652,2660,2668,2677,2686,2695,2704,2712],{"type":47,"tag":1370,"props":2620,"children":2621},{"class":1372,"line":1373},[2622],{"type":47,"tag":1370,"props":2623,"children":2624},{},[2625],{"type":52,"value":2626},"import asyncio\n",{"type":47,"tag":1370,"props":2628,"children":2629},{"class":1372,"line":1394},[2630],{"type":47,"tag":1370,"props":2631,"children":2632},{},[2633],{"type":52,"value":2634},"from shell_use import ShellUse\n",{"type":47,"tag":1370,"props":2636,"children":2637},{"class":1372,"line":1428},[2638],{"type":47,"tag":1370,"props":2639,"children":2641},{"emptyLinePlaceholder":2640},true,[2642],{"type":52,"value":2643},"\n",{"type":47,"tag":1370,"props":2645,"children":2646},{"class":1372,"line":1451},[2647],{"type":47,"tag":1370,"props":2648,"children":2649},{},[2650],{"type":52,"value":2651},"async def main():\n",{"type":47,"tag":1370,"props":2653,"children":2654},{"class":1372,"line":1487},[2655],{"type":47,"tag":1370,"props":2656,"children":2657},{},[2658],{"type":52,"value":2659},"    async with ShellUse() as su:                     # closes the session on exit\n",{"type":47,"tag":1370,"props":2661,"children":2662},{"class":1372,"line":1515},[2663],{"type":47,"tag":1370,"props":2664,"children":2665},{},[2666],{"type":52,"value":2667},"        await su.open()\n",{"type":47,"tag":1370,"props":2669,"children":2671},{"class":1372,"line":2670},7,[2672],{"type":47,"tag":1370,"props":2673,"children":2674},{},[2675],{"type":52,"value":2676},"        await su.submit(\"echo hello\")\n",{"type":47,"tag":1370,"props":2678,"children":2680},{"class":1372,"line":2679},8,[2681],{"type":47,"tag":1370,"props":2682,"children":2683},{},[2684],{"type":52,"value":2685},"        await su.wait_command()\n",{"type":47,"tag":1370,"props":2687,"children":2689},{"class":1372,"line":2688},9,[2690],{"type":47,"tag":1370,"props":2691,"children":2692},{},[2693],{"type":52,"value":2694},"        await su.expect_text(\"hello\", strict=False)  # command echo + output both match\n",{"type":47,"tag":1370,"props":2696,"children":2698},{"class":1372,"line":2697},10,[2699],{"type":47,"tag":1370,"props":2700,"children":2701},{},[2702],{"type":52,"value":2703},"        await su.expect_exit_code(0)\n",{"type":47,"tag":1370,"props":2705,"children":2707},{"class":1372,"line":2706},11,[2708],{"type":47,"tag":1370,"props":2709,"children":2710},{"emptyLinePlaceholder":2640},[2711],{"type":52,"value":2643},{"type":47,"tag":1370,"props":2713,"children":2715},{"class":1372,"line":2714},12,[2716],{"type":47,"tag":1370,"props":2717,"children":2718},{},[2719],{"type":52,"value":2720},"asyncio.run(main())\n",{"type":47,"tag":54,"props":2722,"children":2723},{},[2724],{"type":52,"value":2725},"Node, Deno, or Bun (the same code runs on all three):",{"type":47,"tag":1359,"props":2727,"children":2731},{"className":2728,"code":2729,"language":2730,"meta":1364,"style":1364},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { ShellUse } from \"@microsoft\u002Fshell-use\";\n\nconst su = new ShellUse();\nawait su.open();\nawait su.submit(\"echo hello\");\nawait su.waitCommand();\nawait su.expectText(\"hello\", { strict: false });\nawait su.expectExitCode(0);\nawait su.close();\n","js",[2732],{"type":47,"tag":58,"props":2733,"children":2734},{"__ignoreMap":1364},[2735,2783,2790,2828,2857,2901,2929,3003,3039],{"type":47,"tag":1370,"props":2736,"children":2737},{"class":1372,"line":1373},[2738,2744,2749,2755,2760,2765,2769,2774,2778],{"type":47,"tag":1370,"props":2739,"children":2741},{"style":2740},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[2742],{"type":52,"value":2743},"import",{"type":47,"tag":1370,"props":2745,"children":2746},{"style":1407},[2747],{"type":52,"value":2748}," {",{"type":47,"tag":1370,"props":2750,"children":2752},{"style":2751},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[2753],{"type":52,"value":2754}," ShellUse",{"type":47,"tag":1370,"props":2756,"children":2757},{"style":1407},[2758],{"type":52,"value":2759}," }",{"type":47,"tag":1370,"props":2761,"children":2762},{"style":2740},[2763],{"type":52,"value":2764}," from",{"type":47,"tag":1370,"props":2766,"children":2767},{"style":1407},[2768],{"type":52,"value":1410},{"type":47,"tag":1370,"props":2770,"children":2771},{"style":1382},[2772],{"type":52,"value":2773},"@microsoft\u002Fshell-use",{"type":47,"tag":1370,"props":2775,"children":2776},{"style":1407},[2777],{"type":52,"value":1420},{"type":47,"tag":1370,"props":2779,"children":2780},{"style":1407},[2781],{"type":52,"value":2782},";\n",{"type":47,"tag":1370,"props":2784,"children":2785},{"class":1372,"line":1394},[2786],{"type":47,"tag":1370,"props":2787,"children":2788},{"emptyLinePlaceholder":2640},[2789],{"type":52,"value":2643},{"type":47,"tag":1370,"props":2791,"children":2792},{"class":1372,"line":1428},[2793,2799,2804,2809,2814,2819,2824],{"type":47,"tag":1370,"props":2794,"children":2796},{"style":2795},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[2797],{"type":52,"value":2798},"const",{"type":47,"tag":1370,"props":2800,"children":2801},{"style":2751},[2802],{"type":52,"value":2803}," su ",{"type":47,"tag":1370,"props":2805,"children":2806},{"style":1407},[2807],{"type":52,"value":2808},"=",{"type":47,"tag":1370,"props":2810,"children":2811},{"style":1407},[2812],{"type":52,"value":2813}," new",{"type":47,"tag":1370,"props":2815,"children":2817},{"style":2816},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[2818],{"type":52,"value":2754},{"type":47,"tag":1370,"props":2820,"children":2821},{"style":2751},[2822],{"type":52,"value":2823},"()",{"type":47,"tag":1370,"props":2825,"children":2826},{"style":1407},[2827],{"type":52,"value":2782},{"type":47,"tag":1370,"props":2829,"children":2830},{"class":1372,"line":1451},[2831,2836,2841,2845,2849,2853],{"type":47,"tag":1370,"props":2832,"children":2833},{"style":2740},[2834],{"type":52,"value":2835},"await",{"type":47,"tag":1370,"props":2837,"children":2838},{"style":2751},[2839],{"type":52,"value":2840}," su",{"type":47,"tag":1370,"props":2842,"children":2843},{"style":1407},[2844],{"type":52,"value":702},{"type":47,"tag":1370,"props":2846,"children":2847},{"style":2816},[2848],{"type":52,"value":449},{"type":47,"tag":1370,"props":2850,"children":2851},{"style":2751},[2852],{"type":52,"value":2823},{"type":47,"tag":1370,"props":2854,"children":2855},{"style":1407},[2856],{"type":52,"value":2782},{"type":47,"tag":1370,"props":2858,"children":2859},{"class":1372,"line":1487},[2860,2864,2868,2872,2876,2881,2885,2889,2893,2897],{"type":47,"tag":1370,"props":2861,"children":2862},{"style":2740},[2863],{"type":52,"value":2835},{"type":47,"tag":1370,"props":2865,"children":2866},{"style":2751},[2867],{"type":52,"value":2840},{"type":47,"tag":1370,"props":2869,"children":2870},{"style":1407},[2871],{"type":52,"value":702},{"type":47,"tag":1370,"props":2873,"children":2874},{"style":2816},[2875],{"type":52,"value":1534},{"type":47,"tag":1370,"props":2877,"children":2878},{"style":2751},[2879],{"type":52,"value":2880},"(",{"type":47,"tag":1370,"props":2882,"children":2883},{"style":1407},[2884],{"type":52,"value":1420},{"type":47,"tag":1370,"props":2886,"children":2887},{"style":1382},[2888],{"type":52,"value":1415},{"type":47,"tag":1370,"props":2890,"children":2891},{"style":1407},[2892],{"type":52,"value":1420},{"type":47,"tag":1370,"props":2894,"children":2895},{"style":2751},[2896],{"type":52,"value":409},{"type":47,"tag":1370,"props":2898,"children":2899},{"style":1407},[2900],{"type":52,"value":2782},{"type":47,"tag":1370,"props":2902,"children":2903},{"class":1372,"line":1515},[2904,2908,2912,2916,2921,2925],{"type":47,"tag":1370,"props":2905,"children":2906},{"style":2740},[2907],{"type":52,"value":2835},{"type":47,"tag":1370,"props":2909,"children":2910},{"style":2751},[2911],{"type":52,"value":2840},{"type":47,"tag":1370,"props":2913,"children":2914},{"style":1407},[2915],{"type":52,"value":702},{"type":47,"tag":1370,"props":2917,"children":2918},{"style":2816},[2919],{"type":52,"value":2920},"waitCommand",{"type":47,"tag":1370,"props":2922,"children":2923},{"style":2751},[2924],{"type":52,"value":2823},{"type":47,"tag":1370,"props":2926,"children":2927},{"style":1407},[2928],{"type":52,"value":2782},{"type":47,"tag":1370,"props":2930,"children":2931},{"class":1372,"line":2670},[2932,2936,2940,2944,2949,2953,2957,2961,2965,2970,2974,2980,2985,2991,2995,2999],{"type":47,"tag":1370,"props":2933,"children":2934},{"style":2740},[2935],{"type":52,"value":2835},{"type":47,"tag":1370,"props":2937,"children":2938},{"style":2751},[2939],{"type":52,"value":2840},{"type":47,"tag":1370,"props":2941,"children":2942},{"style":1407},[2943],{"type":52,"value":702},{"type":47,"tag":1370,"props":2945,"children":2946},{"style":2816},[2947],{"type":52,"value":2948},"expectText",{"type":47,"tag":1370,"props":2950,"children":2951},{"style":2751},[2952],{"type":52,"value":2880},{"type":47,"tag":1370,"props":2954,"children":2955},{"style":1407},[2956],{"type":52,"value":1420},{"type":47,"tag":1370,"props":2958,"children":2959},{"style":1382},[2960],{"type":52,"value":1475},{"type":47,"tag":1370,"props":2962,"children":2963},{"style":1407},[2964],{"type":52,"value":1420},{"type":47,"tag":1370,"props":2966,"children":2967},{"style":1407},[2968],{"type":52,"value":2969},",",{"type":47,"tag":1370,"props":2971,"children":2972},{"style":1407},[2973],{"type":52,"value":2748},{"type":47,"tag":1370,"props":2975,"children":2977},{"style":2976},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[2978],{"type":52,"value":2979}," strict",{"type":47,"tag":1370,"props":2981,"children":2982},{"style":1407},[2983],{"type":52,"value":2984},":",{"type":47,"tag":1370,"props":2986,"children":2988},{"style":2987},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[2989],{"type":52,"value":2990}," false",{"type":47,"tag":1370,"props":2992,"children":2993},{"style":1407},[2994],{"type":52,"value":2759},{"type":47,"tag":1370,"props":2996,"children":2997},{"style":2751},[2998],{"type":52,"value":409},{"type":47,"tag":1370,"props":3000,"children":3001},{"style":1407},[3002],{"type":52,"value":2782},{"type":47,"tag":1370,"props":3004,"children":3005},{"class":1372,"line":2679},[3006,3010,3014,3018,3023,3027,3031,3035],{"type":47,"tag":1370,"props":3007,"children":3008},{"style":2740},[3009],{"type":52,"value":2835},{"type":47,"tag":1370,"props":3011,"children":3012},{"style":2751},[3013],{"type":52,"value":2840},{"type":47,"tag":1370,"props":3015,"children":3016},{"style":1407},[3017],{"type":52,"value":702},{"type":47,"tag":1370,"props":3019,"children":3020},{"style":2816},[3021],{"type":52,"value":3022},"expectExitCode",{"type":47,"tag":1370,"props":3024,"children":3025},{"style":2751},[3026],{"type":52,"value":2880},{"type":47,"tag":1370,"props":3028,"children":3029},{"style":1504},[3030],{"type":52,"value":372},{"type":47,"tag":1370,"props":3032,"children":3033},{"style":2751},[3034],{"type":52,"value":409},{"type":47,"tag":1370,"props":3036,"children":3037},{"style":1407},[3038],{"type":52,"value":2782},{"type":47,"tag":1370,"props":3040,"children":3041},{"class":1372,"line":2688},[3042,3046,3050,3054,3058,3062],{"type":47,"tag":1370,"props":3043,"children":3044},{"style":2740},[3045],{"type":52,"value":2835},{"type":47,"tag":1370,"props":3047,"children":3048},{"style":2751},[3049],{"type":52,"value":2840},{"type":47,"tag":1370,"props":3051,"children":3052},{"style":1407},[3053],{"type":52,"value":702},{"type":47,"tag":1370,"props":3055,"children":3056},{"style":2816},[3057],{"type":52,"value":164},{"type":47,"tag":1370,"props":3059,"children":3060},{"style":2751},[3061],{"type":52,"value":2823},{"type":47,"tag":1370,"props":3063,"children":3064},{"style":1407},[3065],{"type":52,"value":2782},{"type":47,"tag":54,"props":3067,"children":3068},{},[3069,3071,3077,3079,3085,3087,3093],{"type":52,"value":3070},"On Windows, Deno needs ",{"type":47,"tag":58,"props":3072,"children":3074},{"className":3073},[],[3075],{"type":52,"value":3076},"-A",{"type":52,"value":3078}," (",{"type":47,"tag":58,"props":3080,"children":3082},{"className":3081},[],[3083],{"type":52,"value":3084},"--allow-all",{"type":52,"value":3086},") rather than just\n",{"type":47,"tag":58,"props":3088,"children":3090},{"className":3089},[],[3091],{"type":52,"value":3092},"--allow-read --allow-write",{"type":52,"value":3094},", because the daemon IPC uses a named pipe.",{"type":47,"tag":54,"props":3096,"children":3097},{},[3098,3100,3105,3106,3111,3112,3117,3118,3123,3124,3130,3132,3137,3138,3143,3144,3150,3151,3157,3158,3164,3166,3171,3172,3177,3178,3183,3184,3190,3191,3197,3199,3205,3206,3212,3213,3219,3220,3226,3227,3233,3234,3240,3242,3248,3249,3255,3256,3262,3263,3269,3270,3276,3277,3283,3284,3290,3291,3297,3298,3304,3306,3311,3313,3318,3319,3325,3326,3332,3333,3339,3340,3346,3348,3353,3354,3359,3360,3366,3367,3373],{"type":52,"value":3099},"Methods mirror the CLI commands: ",{"type":47,"tag":58,"props":3101,"children":3103},{"className":3102},[],[3104],{"type":52,"value":449},{"type":52,"value":210},{"type":47,"tag":58,"props":3107,"children":3109},{"className":3108},[],[3110],{"type":52,"value":456},{"type":52,"value":838},{"type":47,"tag":58,"props":3113,"children":3115},{"className":3114},[],[3116],{"type":52,"value":1534},{"type":52,"value":210},{"type":47,"tag":58,"props":3119,"children":3121},{"className":3120},[],[3122],{"type":52,"value":1542},{"type":52,"value":210},{"type":47,"tag":58,"props":3125,"children":3127},{"className":3126},[],[3128],{"type":52,"value":3129},"write",{"type":52,"value":3131},",\n",{"type":47,"tag":58,"props":3133,"children":3135},{"className":3134},[],[3136],{"type":52,"value":1550},{"type":52,"value":210},{"type":47,"tag":58,"props":3139,"children":3141},{"className":3140},[],[3142],{"type":52,"value":1571},{"type":52,"value":838},{"type":47,"tag":58,"props":3145,"children":3147},{"className":3146},[],[3148],{"type":52,"value":3149},"mouse.click|move|down|up|drag|scroll",{"type":52,"value":838},{"type":47,"tag":58,"props":3152,"children":3154},{"className":3153},[],[3155],{"type":52,"value":3156},"resize",{"type":52,"value":838},{"type":47,"tag":58,"props":3159,"children":3161},{"className":3160},[],[3162],{"type":52,"value":3163},"signal",{"type":52,"value":3165}," \u002F\n",{"type":47,"tag":58,"props":3167,"children":3169},{"className":3168},[],[3170],{"type":52,"value":1008},{"type":52,"value":838},{"type":47,"tag":58,"props":3173,"children":3175},{"className":3174},[],[3176],{"type":52,"value":672},{"type":52,"value":838},{"type":47,"tag":58,"props":3179,"children":3181},{"className":3180},[],[3182],{"type":52,"value":52},{"type":52,"value":838},{"type":47,"tag":58,"props":3185,"children":3187},{"className":3186},[],[3188],{"type":52,"value":3189},"cells",{"type":52,"value":838},{"type":47,"tag":58,"props":3192,"children":3194},{"className":3193},[],[3195],{"type":52,"value":3196},"get",{"type":52,"value":3198}," (plus shorthands ",{"type":47,"tag":58,"props":3200,"children":3202},{"className":3201},[],[3203],{"type":52,"value":3204},"get_command",{"type":52,"value":3165},{"type":47,"tag":58,"props":3207,"children":3209},{"className":3208},[],[3210],{"type":52,"value":3211},"get_output",{"type":52,"value":210},{"type":47,"tag":58,"props":3214,"children":3216},{"className":3215},[],[3217],{"type":52,"value":3218},"get_exit_code",{"type":52,"value":210},{"type":47,"tag":58,"props":3221,"children":3223},{"className":3222},[],[3224],{"type":52,"value":3225},"get_cwd",{"type":52,"value":210},{"type":47,"tag":58,"props":3228,"children":3230},{"className":3229},[],[3231],{"type":52,"value":3232},"get_cursor",{"type":52,"value":210},{"type":47,"tag":58,"props":3235,"children":3237},{"className":3236},[],[3238],{"type":52,"value":3239},"get_size",{"type":52,"value":3241},"),\n",{"type":47,"tag":58,"props":3243,"children":3245},{"className":3244},[],[3246],{"type":52,"value":3247},"screenshot",{"type":52,"value":838},{"type":47,"tag":58,"props":3250,"children":3252},{"className":3251},[],[3253],{"type":52,"value":3254},"wait_text",{"type":52,"value":210},{"type":47,"tag":58,"props":3257,"children":3259},{"className":3258},[],[3260],{"type":52,"value":3261},"wait_idle",{"type":52,"value":210},{"type":47,"tag":58,"props":3264,"children":3266},{"className":3265},[],[3267],{"type":52,"value":3268},"wait_command",{"type":52,"value":210},{"type":47,"tag":58,"props":3271,"children":3273},{"className":3272},[],[3274],{"type":52,"value":3275},"wait_exit",{"type":52,"value":3131},{"type":47,"tag":58,"props":3278,"children":3280},{"className":3279},[],[3281],{"type":52,"value":3282},"expect_text",{"type":52,"value":210},{"type":47,"tag":58,"props":3285,"children":3287},{"className":3286},[],[3288],{"type":52,"value":3289},"expect_exit_code",{"type":52,"value":210},{"type":47,"tag":58,"props":3292,"children":3294},{"className":3293},[],[3295],{"type":52,"value":3296},"expect_output",{"type":52,"value":210},{"type":47,"tag":58,"props":3299,"children":3301},{"className":3300},[],[3302],{"type":52,"value":3303},"expect_snapshot",{"type":52,"value":3305},", and\n",{"type":47,"tag":58,"props":3307,"children":3309},{"className":3308},[],[3310],{"type":52,"value":164},{"type":52,"value":3312},". Module-level helpers cover the rest: ",{"type":47,"tag":58,"props":3314,"children":3316},{"className":3315},[],[3317],{"type":52,"value":581},{"type":52,"value":838},{"type":47,"tag":58,"props":3320,"children":3322},{"className":3321},[],[3323],{"type":52,"value":3324},"close_all",{"type":52,"value":3131},{"type":47,"tag":58,"props":3327,"children":3329},{"className":3328},[],[3330],{"type":52,"value":3331},"daemon_status",{"type":52,"value":838},{"type":47,"tag":58,"props":3334,"children":3336},{"className":3335},[],[3337],{"type":52,"value":3338},"daemon_stop",{"type":52,"value":838},{"type":47,"tag":58,"props":3341,"children":3343},{"className":3342},[],[3344],{"type":52,"value":3345},"get_recording",{"type":52,"value":3347},". The JavaScript client uses the same names in camelCase (",{"type":47,"tag":58,"props":3349,"children":3351},{"className":3350},[],[3352],{"type":52,"value":2920},{"type":52,"value":838},{"type":47,"tag":58,"props":3355,"children":3357},{"className":3356},[],[3358],{"type":52,"value":2948},{"type":52,"value":838},{"type":47,"tag":58,"props":3361,"children":3363},{"className":3362},[],[3364],{"type":52,"value":3365},"getExitCode",{"type":52,"value":838},{"type":47,"tag":58,"props":3368,"children":3370},{"className":3369},[],[3371],{"type":52,"value":3372},"closeAll",{"type":52,"value":3374},", etc).",{"type":47,"tag":54,"props":3376,"children":3377},{},[3378,3380,3385,3387,3393,3395,3401,3403,3409,3411,3416,3418,3424,3425,3431],{"type":52,"value":3379},"The constructor takes the session name plus optional ",{"type":47,"tag":58,"props":3381,"children":3383},{"className":3382},[],[3384],{"type":52,"value":2498},{"type":52,"value":3386}," and ",{"type":47,"tag":58,"props":3388,"children":3390},{"className":3389},[],[3391],{"type":52,"value":3392},"home",{"type":52,"value":3394},"\noverrides: ",{"type":47,"tag":58,"props":3396,"children":3398},{"className":3397},[],[3399],{"type":52,"value":3400},"ShellUse(session=\"default\", *, binary=None, home=None)",{"type":52,"value":3402}," in Python,\n",{"type":47,"tag":58,"props":3404,"children":3406},{"className":3405},[],[3407],{"type":52,"value":3408},"new ShellUse(session?, { binary?, home? })",{"type":52,"value":3410}," in JavaScript. ",{"type":47,"tag":58,"props":3412,"children":3414},{"className":3413},[],[3415],{"type":52,"value":456},{"type":52,"value":3417}," takes the program then its args (",{"type":47,"tag":58,"props":3419,"children":3421},{"className":3420},[],[3422],{"type":52,"value":3423},"await su.run(\"vim\", \"file.txt\")",{"type":52,"value":3402},{"type":47,"tag":58,"props":3426,"children":3428},{"className":3427},[],[3429],{"type":52,"value":3430},"await su.run(\"vim\", [\"file.txt\"])",{"type":52,"value":3432}," in JavaScript).",{"type":47,"tag":54,"props":3434,"children":3435},{},[3436,3438,3444,3446,3452,3454,3460,3462,3468,3470,3476,3478,3484,3486,3492,3494,3500,3502,3507],{"type":52,"value":3437},"Failures raise typed errors instead of returning exit codes, one class per row of\nthe ",{"type":47,"tag":258,"props":3439,"children":3441},{"href":3440},"#exit-codes",[3442],{"type":52,"value":3443},"exit-code table",{"type":52,"value":3445},": ",{"type":47,"tag":58,"props":3447,"children":3449},{"className":3448},[],[3450],{"type":52,"value":3451},"ExpectationError",{"type":52,"value":3453}," (1), ",{"type":47,"tag":58,"props":3455,"children":3457},{"className":3456},[],[3458],{"type":52,"value":3459},"UsageError",{"type":52,"value":3461}," (2),\n",{"type":47,"tag":58,"props":3463,"children":3465},{"className":3464},[],[3466],{"type":52,"value":3467},"NoSessionError",{"type":52,"value":3469}," (3), ",{"type":47,"tag":58,"props":3471,"children":3473},{"className":3472},[],[3474],{"type":52,"value":3475},"DaemonError",{"type":52,"value":3477}," (4), and ",{"type":47,"tag":58,"props":3479,"children":3481},{"className":3480},[],[3482],{"type":52,"value":3483},"InternalError",{"type":52,"value":3485}," (5), all subclasses\nof ",{"type":47,"tag":58,"props":3487,"children":3489},{"className":3488},[],[3490],{"type":52,"value":3491},"ShellUseError",{"type":52,"value":3493},". On its first call a client also checks that the daemon's\nversion matches the package and raises ",{"type":47,"tag":58,"props":3495,"children":3497},{"className":3496},[],[3498],{"type":52,"value":3499},"VersionMismatchError",{"type":52,"value":3501}," if they differ;\nstop the daemon (",{"type":47,"tag":58,"props":3503,"children":3505},{"className":3504},[],[3506],{"type":52,"value":3338},{"type":52,"value":3508},") so it restarts on the matching binary.",{"type":47,"tag":66,"props":3510,"children":3512},{"id":3511},"supported-shells-integration",[3513],{"type":52,"value":3514},"Supported shells & integration",{"type":47,"tag":54,"props":3516,"children":3517},{},[3518,3524,3526,3531,3532,3538,3539,3544,3545,3550,3551,3556,3557,3563,3564,3570,3571,3577,3578,3584,3586,3592],{"type":47,"tag":58,"props":3519,"children":3521},{"className":3520},[],[3522],{"type":52,"value":3523},"open --shell S",{"type":52,"value":3525}," accepts: ",{"type":47,"tag":58,"props":3527,"children":3529},{"className":3528},[],[3530],{"type":52,"value":28},{"type":52,"value":838},{"type":47,"tag":58,"props":3533,"children":3535},{"className":3534},[],[3536],{"type":52,"value":3537},"zsh",{"type":52,"value":838},{"type":47,"tag":58,"props":3540,"children":3542},{"className":3541},[],[3543],{"type":52,"value":30},{"type":52,"value":838},{"type":47,"tag":58,"props":3546,"children":3548},{"className":3547},[],[3549],{"type":52,"value":32},{"type":52,"value":838},{"type":47,"tag":58,"props":3552,"children":3554},{"className":3553},[],[3555],{"type":52,"value":33},{"type":52,"value":838},{"type":47,"tag":58,"props":3558,"children":3560},{"className":3559},[],[3561],{"type":52,"value":3562},"cmd",{"type":52,"value":3131},{"type":47,"tag":58,"props":3565,"children":3567},{"className":3566},[],[3568],{"type":52,"value":3569},"xonsh",{"type":52,"value":838},{"type":47,"tag":58,"props":3572,"children":3574},{"className":3573},[],[3575],{"type":52,"value":3576},"elvish",{"type":52,"value":838},{"type":47,"tag":58,"props":3579,"children":3581},{"className":3580},[],[3582],{"type":52,"value":3583},"nushell",{"type":52,"value":3585},". Omit ",{"type":47,"tag":58,"props":3587,"children":3589},{"className":3588},[],[3590],{"type":52,"value":3591},"--shell",{"type":52,"value":3593}," to use the platform default.",{"type":47,"tag":54,"props":3595,"children":3596},{},[3597,3602,3604,3609,3610,3616,3617,3623,3625,3631],{"type":47,"tag":58,"props":3598,"children":3600},{"className":3599},[],[3601],{"type":52,"value":4},{"type":52,"value":3603}," injects shell integration (standard OSC 133 semantic-prompt markers,\nplus OSC 7 for cwd) so it can track command boundaries, exit codes, cwd, and\ncommand\u002Foutput text across shells. This is what powers ",{"type":47,"tag":58,"props":3605,"children":3607},{"className":3606},[],[3608],{"type":52,"value":312},{"type":52,"value":3131},{"type":47,"tag":58,"props":3611,"children":3613},{"className":3612},[],[3614],{"type":52,"value":3615},"expect exit-code",{"type":52,"value":838},{"type":47,"tag":58,"props":3618,"children":3620},{"className":3619},[],[3621],{"type":52,"value":3622},"get cwd",{"type":52,"value":3624},", and ",{"type":47,"tag":58,"props":3626,"children":3628},{"className":3627},[],[3629],{"type":52,"value":3630},"get command|output",{"type":52,"value":702},{"type":47,"tag":54,"props":3633,"children":3634},{},[3635,3637,3642,3644,3649],{"type":52,"value":3636},"Integration coverage varies by shell: ",{"type":47,"tag":58,"props":3638,"children":3640},{"className":3639},[],[3641],{"type":52,"value":32},{"type":52,"value":3643}," has no native pre-exec hook\nso command\u002Foutput text is best-effort (exit code and cwd still track); ",{"type":47,"tag":58,"props":3645,"children":3647},{"className":3646},[],[3648],{"type":52,"value":3562},{"type":52,"value":3650}," is\nprompt-only.",{"type":47,"tag":66,"props":3652,"children":3654},{"id":3653},"debugging",[3655],{"type":52,"value":263},{"type":47,"tag":54,"props":3657,"children":3658},{},[3659,3661,3666,3668,3674],{"type":52,"value":3660},"By default the daemon writes no log. Start it with ",{"type":47,"tag":58,"props":3662,"children":3664},{"className":3663},[],[3665],{"type":52,"value":247},{"type":52,"value":3667}," to record every\nbyte read from and written to the PTY, plus lifecycle events, to\n",{"type":47,"tag":58,"props":3669,"children":3671},{"className":3670},[],[3672],{"type":52,"value":3673},"~\u002F.shell-use\u002F\u003Csession>.log",{"type":52,"value":3675},". Logging is fixed when the daemon starts, so enable\nit on a fresh daemon (close any existing one first):",{"type":47,"tag":1359,"props":3677,"children":3679},{"className":1361,"code":3678,"language":1363,"meta":1364,"style":1364},"shell-use --session work close            # stop any existing daemon\nshell-use --session work --verbose open   # start one with logging on\nshell-use --session work submit \"ls\"\ncat ~\u002F.shell-use\u002Fwork.log\n",[3680],{"type":47,"tag":58,"props":3681,"children":3682},{"__ignoreMap":1364},[3683,3708,3737,3769],{"type":47,"tag":1370,"props":3684,"children":3685},{"class":1372,"line":1373},[3686,3690,3694,3698,3703],{"type":47,"tag":1370,"props":3687,"children":3688},{"style":1377},[3689],{"type":52,"value":4},{"type":47,"tag":1370,"props":3691,"children":3692},{"style":1382},[3693],{"type":52,"value":2425},{"type":47,"tag":1370,"props":3695,"children":3696},{"style":1382},[3697],{"type":52,"value":2331},{"type":47,"tag":1370,"props":3699,"children":3700},{"style":1382},[3701],{"type":52,"value":3702}," close",{"type":47,"tag":1370,"props":3704,"children":3705},{"style":1388},[3706],{"type":52,"value":3707},"            # stop any existing daemon\n",{"type":47,"tag":1370,"props":3709,"children":3710},{"class":1372,"line":1394},[3711,3715,3719,3723,3728,3732],{"type":47,"tag":1370,"props":3712,"children":3713},{"style":1377},[3714],{"type":52,"value":4},{"type":47,"tag":1370,"props":3716,"children":3717},{"style":1382},[3718],{"type":52,"value":2425},{"type":47,"tag":1370,"props":3720,"children":3721},{"style":1382},[3722],{"type":52,"value":2331},{"type":47,"tag":1370,"props":3724,"children":3725},{"style":1382},[3726],{"type":52,"value":3727}," --verbose",{"type":47,"tag":1370,"props":3729,"children":3730},{"style":1382},[3731],{"type":52,"value":1385},{"type":47,"tag":1370,"props":3733,"children":3734},{"style":1388},[3735],{"type":52,"value":3736},"   # start one with logging on\n",{"type":47,"tag":1370,"props":3738,"children":3739},{"class":1372,"line":1428},[3740,3744,3748,3752,3756,3760,3765],{"type":47,"tag":1370,"props":3741,"children":3742},{"style":1377},[3743],{"type":52,"value":4},{"type":47,"tag":1370,"props":3745,"children":3746},{"style":1382},[3747],{"type":52,"value":2425},{"type":47,"tag":1370,"props":3749,"children":3750},{"style":1382},[3751],{"type":52,"value":2331},{"type":47,"tag":1370,"props":3753,"children":3754},{"style":1382},[3755],{"type":52,"value":1404},{"type":47,"tag":1370,"props":3757,"children":3758},{"style":1407},[3759],{"type":52,"value":1410},{"type":47,"tag":1370,"props":3761,"children":3762},{"style":1382},[3763],{"type":52,"value":3764},"ls",{"type":47,"tag":1370,"props":3766,"children":3767},{"style":1407},[3768],{"type":52,"value":1683},{"type":47,"tag":1370,"props":3770,"children":3771},{"class":1372,"line":1451},[3772,3777],{"type":47,"tag":1370,"props":3773,"children":3774},{"style":1377},[3775],{"type":52,"value":3776},"cat",{"type":47,"tag":1370,"props":3778,"children":3779},{"style":1382},[3780],{"type":52,"value":3781}," ~\u002F.shell-use\u002Fwork.log\n",{"type":47,"tag":54,"props":3783,"children":3784},{},[3785,3791],{"type":47,"tag":58,"props":3786,"children":3788},{"className":3787},[],[3789],{"type":52,"value":3790},"shell-use daemon status",{"type":52,"value":3792}," reports the active log path.",{"type":47,"tag":54,"props":3794,"children":3795},{},[3796,3801,3803,3809,3810,3816,3818,3824,3826,3832,3834,3840,3841,3847,3849,3855,3857,3863,3865,3871],{"type":47,"tag":128,"props":3797,"children":3798},{},[3799],{"type":52,"value":3800},"Stuck session?",{"type":52,"value":3802}," If the screen is frozen and input seems ignored (e.g. after\n",{"type":47,"tag":58,"props":3804,"children":3806},{"className":3805},[],[3807],{"type":52,"value":3808},"git log",{"type":52,"value":210},{"type":47,"tag":58,"props":3811,"children":3813},{"className":3812},[],[3814],{"type":52,"value":3815},"git diff",{"type":52,"value":3817},"), a full-screen pager such as ",{"type":47,"tag":58,"props":3819,"children":3821},{"className":3820},[],[3822],{"type":52,"value":3823},"less",{"type":52,"value":3825}," is likely holding the\nterminal, and ",{"type":47,"tag":58,"props":3827,"children":3829},{"className":3828},[],[3830],{"type":52,"value":3831},"Ctrl+C",{"type":52,"value":3833}," won't quit it. Confirm with ",{"type":47,"tag":58,"props":3835,"children":3837},{"className":3836},[],[3838],{"type":52,"value":3839},"shell-use state",{"type":52,"value":202},{"type":47,"tag":58,"props":3842,"children":3844},{"className":3843},[],[3845],{"type":52,"value":3846},"\"ready\": false",{"type":52,"value":3848}," and a stale last command). Quit the pager with\n",{"type":47,"tag":58,"props":3850,"children":3852},{"className":3851},[],[3853],{"type":52,"value":3854},"shell-use press q",{"type":52,"value":3856},", or avoid it with ",{"type":47,"tag":58,"props":3858,"children":3860},{"className":3859},[],[3861],{"type":52,"value":3862},"git --no-pager \u003Ccmd>",{"type":52,"value":3864}," or ",{"type":47,"tag":58,"props":3866,"children":3868},{"className":3867},[],[3869],{"type":52,"value":3870},"GIT_PAGER=cat",{"type":52,"value":702},{"type":47,"tag":54,"props":3873,"children":3874},{},[3875,3880,3882,3888,3889,3895,3897,3902,3903,3908],{"type":47,"tag":128,"props":3876,"children":3877},{},[3878],{"type":52,"value":3879},"Platform note.",{"type":52,"value":3881}," On Windows ConPTY, ",{"type":47,"tag":58,"props":3883,"children":3885},{"className":3884},[],[3886],{"type":52,"value":3887},"get output",{"type":52,"value":3386},{"type":47,"tag":58,"props":3890,"children":3892},{"className":3891},[],[3893],{"type":52,"value":3894},"get command",{"type":52,"value":3896}," text can on some rare occasions be\nunreliable due to screen repainting; grid-based checks (",{"type":47,"tag":58,"props":3898,"children":3900},{"className":3899},[],[3901],{"type":52,"value":304},{"type":52,"value":3131},{"type":47,"tag":58,"props":3904,"children":3906},{"className":3905},[],[3907],{"type":52,"value":3615},{"type":52,"value":3909},") are unaffected.",{"type":47,"tag":3911,"props":3912,"children":3913},"style",{},[3914],{"type":52,"value":3915},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3917,"total":4108},[3918,3938,3958,3979,3994,4010,4021,4034,4049,4064,4083,4096],{"slug":3919,"name":3919,"fn":3920,"description":3921,"org":3922,"tags":3923,"stars":3935,"repoUrl":3936,"updatedAt":3937},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3924,3925,3928,3929,3932],{"name":18,"slug":19,"type":15},{"name":3926,"slug":3927,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":3930,"slug":3931,"type":15},"Project Management","project-management",{"name":3933,"slug":3934,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":3939,"name":3939,"fn":3940,"description":3941,"org":3942,"tags":3943,"stars":3955,"repoUrl":3956,"updatedAt":3957},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3944,3947,3950,3953],{"name":3945,"slug":3946,"type":15},".NET","net",{"name":3948,"slug":3949,"type":15},"Agents","agents",{"name":3951,"slug":3952,"type":15},"Azure","azure",{"name":3954,"slug":31,"type":15},"LLM",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":3959,"name":3959,"fn":3960,"description":3961,"org":3962,"tags":3963,"stars":3955,"repoUrl":3956,"updatedAt":3978},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3964,3967,3968,3971,3974,3975],{"name":3965,"slug":3966,"type":15},"Analytics","analytics",{"name":3951,"slug":3952,"type":15},{"name":3969,"slug":3970,"type":15},"Data Analysis","data-analysis",{"name":3972,"slug":3973,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":3976,"slug":3977,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":3980,"name":3980,"fn":3981,"description":3982,"org":3983,"tags":3984,"stars":3955,"repoUrl":3956,"updatedAt":3993},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3985,3988,3989,3990],{"name":3986,"slug":3987,"type":15},"AI Infrastructure","ai-infrastructure",{"name":3951,"slug":3952,"type":15},{"name":3972,"slug":3973,"type":15},{"name":3991,"slug":3992,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":3995,"name":3995,"fn":3996,"description":3997,"org":3998,"tags":3999,"stars":3955,"repoUrl":3956,"updatedAt":4009},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4000,4001,4004,4005,4006,4008],{"name":3951,"slug":3952,"type":15},{"name":4002,"slug":4003,"type":15},"Compliance","compliance",{"name":3954,"slug":31,"type":15},{"name":9,"slug":8,"type":15},{"name":4007,"slug":2614,"type":15},"Python",{"name":3991,"slug":3992,"type":15},"2026-07-18T05:14:23.017504",{"slug":4011,"name":4011,"fn":4012,"description":4013,"org":4014,"tags":4015,"stars":3955,"repoUrl":3956,"updatedAt":4020},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4016,4017,4018,4019],{"name":3965,"slug":3966,"type":15},{"name":3951,"slug":3952,"type":15},{"name":3954,"slug":31,"type":15},{"name":4007,"slug":2614,"type":15},"2026-07-31T05:54:29.068751",{"slug":4022,"name":4022,"fn":4023,"description":4024,"org":4025,"tags":4026,"stars":3955,"repoUrl":3956,"updatedAt":4033},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4027,4030,4031,4032],{"name":4028,"slug":4029,"type":15},"API Development","api-development",{"name":3951,"slug":3952,"type":15},{"name":9,"slug":8,"type":15},{"name":4007,"slug":2614,"type":15},"2026-07-18T05:14:16.988376",{"slug":4035,"name":4035,"fn":4036,"description":4037,"org":4038,"tags":4039,"stars":3955,"repoUrl":3956,"updatedAt":4048},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4040,4041,4044,4047],{"name":3951,"slug":3952,"type":15},{"name":4042,"slug":4043,"type":15},"Computer Vision","computer-vision",{"name":4045,"slug":4046,"type":15},"Images","images",{"name":4007,"slug":2614,"type":15},"2026-07-18T05:14:18.007737",{"slug":4050,"name":4050,"fn":4051,"description":4052,"org":4053,"tags":4054,"stars":3955,"repoUrl":3956,"updatedAt":4063},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4055,4056,4059,4062],{"name":3951,"slug":3952,"type":15},{"name":4057,"slug":4058,"type":15},"Configuration","configuration",{"name":4060,"slug":4061,"type":15},"Feature Flags","feature-flags",{"name":3972,"slug":3973,"type":15},"2026-07-03T16:32:01.278468",{"slug":4065,"name":4065,"fn":4066,"description":4067,"org":4068,"tags":4069,"stars":3955,"repoUrl":3956,"updatedAt":4082},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4070,4073,4076,4079],{"name":4071,"slug":4072,"type":15},"Cosmos DB","cosmos-db",{"name":4074,"slug":4075,"type":15},"Database","database",{"name":4077,"slug":4078,"type":15},"NoSQL","nosql",{"name":4080,"slug":4081,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":4084,"name":4084,"fn":4066,"description":4085,"org":4086,"tags":4087,"stars":3955,"repoUrl":3956,"updatedAt":4095},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4088,4089,4090,4091,4092],{"name":4071,"slug":4072,"type":15},{"name":4074,"slug":4075,"type":15},{"name":9,"slug":8,"type":15},{"name":4077,"slug":4078,"type":15},{"name":4093,"slug":4094,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":4097,"name":4097,"fn":4098,"description":4099,"org":4100,"tags":4101,"stars":3955,"repoUrl":3956,"updatedAt":4107},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4102,4103,4104,4105,4106],{"name":3951,"slug":3952,"type":15},{"name":4071,"slug":4072,"type":15},{"name":4074,"slug":4075,"type":15},{"name":3972,"slug":3973,"type":15},{"name":4077,"slug":4078,"type":15},"2026-05-13T06:14:17.582229",267,{"items":4110,"total":1373},[4111],{"slug":4,"name":4,"fn":5,"description":6,"org":4112,"tags":4113,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4114,4115,4116],{"name":13,"slug":14,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15}]