[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anomaly-terminal-control":3,"mdc--cl4iwt-key":33,"related-repo-anomaly-terminal-control":2158,"related-org-anomaly-terminal-control":2166},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":31,"mdContent":32},"terminal-control","control and test terminal applications","Drive and verify terminal applications with the termctrl CLI in a real PTY - read visible screens, run named live sessions, send typed keyboard input, wait for text, save evidence, record timelines, and export edited videos. Use when an agent must operate or test a TUI, REPL, interactive CLI, shell process, or OpenTUI application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anomaly","Anomaly (SST \u002F OpenCode)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanomaly.png","anomalyco",[13,17,20],{"name":14,"slug":15,"type":16},"Automation","automation","tag",{"name":18,"slug":19,"type":16},"CLI","cli",{"name":21,"slug":22,"type":16},"Testing","testing",293,"https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fterminal-control","2026-07-23T05:44:15.921174",null,11,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":26},[],"https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fterminal-control\u002Ftree\u002FHEAD\u002Fskills\u002Fterminal-control","---\nname: terminal-control\ndescription: Drive and verify terminal applications with the termctrl CLI in a real PTY - read visible screens, run named live sessions, send typed keyboard input, wait for text, save evidence, record timelines, and export edited videos. Use when an agent must operate or test a TUI, REPL, interactive CLI, shell process, or OpenTUI application.\n---\n\n# Terminal Control\n\nUse `termctrl` to observe the actual visible terminal state and drive interaction deterministically.\n\n## Start With The Smallest Workflow\n\nRead a disposable terminal application's settled visible screen when no further interaction is required:\n\n```bash\ntermctrl show -- my-terminal-app\n```\n\nKeep an application alive when interaction or repeated inspection is required:\n\n```bash\ntermctrl start app -- my-terminal-app\ntermctrl wait app \"Ready\"\ntermctrl show app\ntermctrl send app text:help enter\ntermctrl wait app \"Commands\"\ntermctrl show app\ntermctrl stop app\n```\n\nAlways stop named sessions after use unless the user explicitly wants the live process retained.\n\nEnter a visible workspace that humans and agents control together:\n\n```bash\ntermctrl run\ntermctrl run -- \u002Fusr\u002Fbin\u002Fnvim\ntermctrl run editor -- nvim\ntermctrl run workspace --tab-position top\ntermctrl run editor\ntermctrl attach editor\ntermctrl windows workspace --json\ntermctrl current --json\ntermctrl tab-position workspace top\ntermctrl move-window workspace editor --index 0\ntermctrl new-window workspace editor -- nvim\ntermctrl show workspace --window editor\ntermctrl panes workspace --json\ntermctrl layout workspace --grid 2x2\ntermctrl layout workspace --grid 2x2 -- nvim\ntermctrl send workspace --pane 1 text:opencode2 enter\ntermctrl focus workspace --pane 1\ntermctrl close-pane workspace --pane 1\ntermctrl resize-pane workspace --pane 1 --direction left --cells 5\ntermctrl zoom-pane workspace --pane 1\n```\n\nWith no arguments, `run` starts `$SHELL` in the `workspace\u002Fmain` window. The persistent tab strip\nshows selection, pane count, zoom, and output (`+`), bell (`!`), or surviving-window pane exit (`x`)\nactivity. Use `tab-position NAME top|bottom` to move it live. Use `ctrl-b p` for the command palette,\n`ctrl-b c\u002Fw` to create\u002Flist windows, `ctrl-b l` for the last window, `ctrl-b n` for next,\n`ctrl-b \u003C\u002F>` or tab dragging to reorder, and `ctrl-b t` to move tabs. Use `ctrl-b %` and\n`ctrl-b \"` to split; use `ctrl-b` plus arrows or `h\u002Fj\u002Fk`, or a mouse click, to focus. Use\n`ctrl-b H\u002FJ\u002FK\u002FL` to resize,\n`ctrl-b z` to toggle zoom, `ctrl-b d` to detach,\n`ctrl-b q` to show stable pane IDs, and `ctrl-b ?` for help. `ctrl-b x` closes a pane, `ctrl-b &`\ncloses the current window, and `ctrl-b Q` closes the workspace after `y` confirmation.\n\n`run NAME` creates when absent and reattaches when the workspace already exists. `attach NAME`\nrequires an existing workspace. Closing the terminal detaches without killing panes; `ctrl-b Q`\nfollowed by `y`, or `termctrl stop NAME`, ends the workspace. Only one human terminal may be attached,\nwhile agent controls remain available when detached.\n\nDiscover windows before panes. Window names are exact stable selectors; numeric indexes shift after reorder or close.\nPane IDs are globally stable across windows; do not infer identity from geometry or titles.\nInside a pane, use `termctrl current --json`; `TERMCTRL_WORKSPACE` and `TERMCTRL_PANE_ID` identify\nthe caller while the daemon resolves its current window after moves or renames.\nWindow-targeted `show`, `send`, `wait`, `logs`, `panes`, and `layout` do not change human selection.\nOnly `select-window` and `focus --pane ID` intentionally move the visible human context.\n\nWorkspaces follow their current human terminal and reject `termctrl resize`. `run --record` records\nthe composed workspace, including tabs, splits, window switches, resizes, and markers. Composed ANSI\noutput is a rendered snapshot; pane-targeted ANSI is the original pane stream.\n\n## Choose The Correct Observation\n\n- Use `show` for current visible screen text. Prefer it for reasoning about full-screen TUIs.\n- Use `logs` for readable retained output from normal-screen tools and log-like commands.\n- Use `save --format ... --out ...` only when a persisted artifact is required.\n- Use `video` only after explicitly recording a timeline with `--record`.\n\nDo not treat logs as the visible state of an alternate-screen TUI.\n\nNamed-session screen reads are immediate by default. Do not pass `--settle-ms 0` or\n`--deadline-ms 0`; omit both options. Set them only to intentional nonzero values when a specific\ntransition needs quiet-output settling.\n\n`wait` defaults to a five-second maximum and returns as soon as its text appears. Do not pass\n`--timeout 5000`; omit it. Set `--timeout` only when intentionally choosing a different limit.\n\n## Semantic UI tree\n\nThe `show` command takes an option `--format semantic` which returns a semantic tree representing the\ninteractable UI elements. This requires direct support from the application to work; once the app is ready\nyou can run this and see if it returns anything. An empty tree means no provider was connected at that\nmoment. If the application is still starting, wait for visible readiness and retry once; otherwise use\nthe visible screen instead. Treat protocol and provider errors as actionable failures rather than retrying\nthem blindly.\nThe application must be launched with `--host opentui`; the full read command is\n`termctrl show app --format semantic`.\n\nAttempt to use the semantic UI tree if you need to discover available UI elements.\n\n## Drive Input Precisely\n\nSend plain text with `text:\u003Cvalue>` and named keys as separate input atoms:\n\n```bash\ntermctrl send app text:\u002Fconnect enter\ntermctrl send app down enter\ntermctrl send app ctrl-c\nprintf '%s' 'multiline prompt' | termctrl send app --stdin\n```\n\nUse `wait` after sending input instead of sleeping or assuming that the interface has updated.\n\n## Operate OpenTUI Applications\n\nUse the OpenTUI host handshake for applications such as OpenCode:\n\n```bash\ntermctrl start app --host opentui --cols 112 --rows 34 -- opencode\ntermctrl wait app \"\u002Fconnect\"\ntermctrl show app\n```\n\nUse `resize` when the application requires more visible area. Use `restart app` to reuse stored launch settings after a deliberate application restart.\n\n## Retain Evidence Deliberately\n\nSave only requested formats:\n\n```bash\ntermctrl save app --format txt --format png --out artifacts\u002Fcurrent\n```\n\nRecord demos only when the user wants a retained timeline or video. Add markers while the session is running, inspect them after stopping, then export with an explicit edit plan:\n\n```bash\ntermctrl start app --record artifacts\u002Frun.termctrl -- my-terminal-app\ntermctrl wait app \"Ready\"\ntermctrl mark app ready\ntermctrl send app text:demo enter\ntermctrl wait app \"Done\" --timeout 60000\ntermctrl mark app done\ntermctrl stop app\ntermctrl markers artifacts\u002Frun.termctrl\ntermctrl show --recording artifacts\u002Frun.termctrl --at-marker done\ntermctrl video artifacts\u002Frun.termctrl --edit artifacts\u002Frun-edit.json --footer --out artifacts\u002Frun.mp4\n```\n\nUse edit-plan `speed` values conservatively when terminal text should remain readable. Use `hold_ms` or `--tail-ms` when the final frame is the payoff. Pass `--footer` when a polished demo should show the clip caption, elapsed timecode, and `TERMINAL CONTROL` branding in a bottom footer; omit it for ordinary videos.\n\nTreat `.termctrl` recordings, ANSI transcripts, screen artifacts, command arguments, and terminal input as potentially sensitive. Do not retain them unless needed, and do not expose their contents unnecessarily.\n\n## Recover From Problems\n\n- Run `termctrl status app` to inspect state and launch settings.\n- Run `termctrl list` for running sessions, or `termctrl list --all` to include retained exited and\n  stale entries. Preview cleanup with `termctrl prune --dry-run`, then run `termctrl prune`.\n- MCP agents should use semantic workspace tools for context, windows, panes, layout, focus, movement,\n  resize, zoom, and close operations instead of sending human prefix shortcuts. Use `get_screen` or\n  `interact` for visible state and `save_screen` only for a retained PNG.\n- If a session socket path is too long, set `TERMCTRL_RUNTIME_DIR` to a short private directory under `\u002Ftmp` before starting sessions.\n- If `termctrl` is unavailable, install Terminal Control with `cargo install terminal-control` or ask the user which installed binary to use.\n",{"data":34,"body":35},{"name":4,"description":6},{"type":36,"children":37},"root",[38,46,61,68,73,111,116,287,292,297,801,1014,1055,1144,1165,1171,1230,1235,1256,1282,1288,1323,1328,1334,1347,1482,1493,1499,1504,1608,1628,1634,1639,1691,1696,1968,2013,2026,2032,2152],{"type":39,"tag":40,"props":41,"children":42},"element","h1",{"id":4},[43],{"type":44,"value":45},"text","Terminal Control",{"type":39,"tag":47,"props":48,"children":49},"p",{},[50,52,59],{"type":44,"value":51},"Use ",{"type":39,"tag":53,"props":54,"children":56},"code",{"className":55},[],[57],{"type":44,"value":58},"termctrl",{"type":44,"value":60}," to observe the actual visible terminal state and drive interaction deterministically.",{"type":39,"tag":62,"props":63,"children":65},"h2",{"id":64},"start-with-the-smallest-workflow",[66],{"type":44,"value":67},"Start With The Smallest Workflow",{"type":39,"tag":47,"props":69,"children":70},{},[71],{"type":44,"value":72},"Read a disposable terminal application's settled visible screen when no further interaction is required:",{"type":39,"tag":74,"props":75,"children":80},"pre",{"className":76,"code":77,"language":78,"meta":79,"style":79},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","termctrl show -- my-terminal-app\n","bash","",[81],{"type":39,"tag":53,"props":82,"children":83},{"__ignoreMap":79},[84],{"type":39,"tag":85,"props":86,"children":89},"span",{"class":87,"line":88},"line",1,[90,95,101,106],{"type":39,"tag":85,"props":91,"children":93},{"style":92},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[94],{"type":44,"value":58},{"type":39,"tag":85,"props":96,"children":98},{"style":97},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[99],{"type":44,"value":100}," show",{"type":39,"tag":85,"props":102,"children":103},{"style":97},[104],{"type":44,"value":105}," --",{"type":39,"tag":85,"props":107,"children":108},{"style":97},[109],{"type":44,"value":110}," my-terminal-app\n",{"type":39,"tag":47,"props":112,"children":113},{},[114],{"type":44,"value":115},"Keep an application alive when interaction or repeated inspection is required:",{"type":39,"tag":74,"props":117,"children":119},{"className":76,"code":118,"language":78,"meta":79,"style":79},"termctrl start app -- my-terminal-app\ntermctrl wait app \"Ready\"\ntermctrl show app\ntermctrl send app text:help enter\ntermctrl wait app \"Commands\"\ntermctrl show app\ntermctrl stop app\n",[120],{"type":39,"tag":53,"props":121,"children":122},{"__ignoreMap":79},[123,148,181,198,225,254,270],{"type":39,"tag":85,"props":124,"children":125},{"class":87,"line":88},[126,130,135,140,144],{"type":39,"tag":85,"props":127,"children":128},{"style":92},[129],{"type":44,"value":58},{"type":39,"tag":85,"props":131,"children":132},{"style":97},[133],{"type":44,"value":134}," start",{"type":39,"tag":85,"props":136,"children":137},{"style":97},[138],{"type":44,"value":139}," app",{"type":39,"tag":85,"props":141,"children":142},{"style":97},[143],{"type":44,"value":105},{"type":39,"tag":85,"props":145,"children":146},{"style":97},[147],{"type":44,"value":110},{"type":39,"tag":85,"props":149,"children":151},{"class":87,"line":150},2,[152,156,161,165,171,176],{"type":39,"tag":85,"props":153,"children":154},{"style":92},[155],{"type":44,"value":58},{"type":39,"tag":85,"props":157,"children":158},{"style":97},[159],{"type":44,"value":160}," wait",{"type":39,"tag":85,"props":162,"children":163},{"style":97},[164],{"type":44,"value":139},{"type":39,"tag":85,"props":166,"children":168},{"style":167},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[169],{"type":44,"value":170}," \"",{"type":39,"tag":85,"props":172,"children":173},{"style":97},[174],{"type":44,"value":175},"Ready",{"type":39,"tag":85,"props":177,"children":178},{"style":167},[179],{"type":44,"value":180},"\"\n",{"type":39,"tag":85,"props":182,"children":184},{"class":87,"line":183},3,[185,189,193],{"type":39,"tag":85,"props":186,"children":187},{"style":92},[188],{"type":44,"value":58},{"type":39,"tag":85,"props":190,"children":191},{"style":97},[192],{"type":44,"value":100},{"type":39,"tag":85,"props":194,"children":195},{"style":97},[196],{"type":44,"value":197}," app\n",{"type":39,"tag":85,"props":199,"children":201},{"class":87,"line":200},4,[202,206,211,215,220],{"type":39,"tag":85,"props":203,"children":204},{"style":92},[205],{"type":44,"value":58},{"type":39,"tag":85,"props":207,"children":208},{"style":97},[209],{"type":44,"value":210}," send",{"type":39,"tag":85,"props":212,"children":213},{"style":97},[214],{"type":44,"value":139},{"type":39,"tag":85,"props":216,"children":217},{"style":97},[218],{"type":44,"value":219}," text:help",{"type":39,"tag":85,"props":221,"children":222},{"style":97},[223],{"type":44,"value":224}," enter\n",{"type":39,"tag":85,"props":226,"children":228},{"class":87,"line":227},5,[229,233,237,241,245,250],{"type":39,"tag":85,"props":230,"children":231},{"style":92},[232],{"type":44,"value":58},{"type":39,"tag":85,"props":234,"children":235},{"style":97},[236],{"type":44,"value":160},{"type":39,"tag":85,"props":238,"children":239},{"style":97},[240],{"type":44,"value":139},{"type":39,"tag":85,"props":242,"children":243},{"style":167},[244],{"type":44,"value":170},{"type":39,"tag":85,"props":246,"children":247},{"style":97},[248],{"type":44,"value":249},"Commands",{"type":39,"tag":85,"props":251,"children":252},{"style":167},[253],{"type":44,"value":180},{"type":39,"tag":85,"props":255,"children":257},{"class":87,"line":256},6,[258,262,266],{"type":39,"tag":85,"props":259,"children":260},{"style":92},[261],{"type":44,"value":58},{"type":39,"tag":85,"props":263,"children":264},{"style":97},[265],{"type":44,"value":100},{"type":39,"tag":85,"props":267,"children":268},{"style":97},[269],{"type":44,"value":197},{"type":39,"tag":85,"props":271,"children":273},{"class":87,"line":272},7,[274,278,283],{"type":39,"tag":85,"props":275,"children":276},{"style":92},[277],{"type":44,"value":58},{"type":39,"tag":85,"props":279,"children":280},{"style":97},[281],{"type":44,"value":282}," stop",{"type":39,"tag":85,"props":284,"children":285},{"style":97},[286],{"type":44,"value":197},{"type":39,"tag":47,"props":288,"children":289},{},[290],{"type":44,"value":291},"Always stop named sessions after use unless the user explicitly wants the live process retained.",{"type":39,"tag":47,"props":293,"children":294},{},[295],{"type":44,"value":296},"Enter a visible workspace that humans and agents control together:",{"type":39,"tag":74,"props":298,"children":300},{"className":76,"code":299,"language":78,"meta":79,"style":79},"termctrl run\ntermctrl run -- \u002Fusr\u002Fbin\u002Fnvim\ntermctrl run editor -- nvim\ntermctrl run workspace --tab-position top\ntermctrl run editor\ntermctrl attach editor\ntermctrl windows workspace --json\ntermctrl current --json\ntermctrl tab-position workspace top\ntermctrl move-window workspace editor --index 0\ntermctrl new-window workspace editor -- nvim\ntermctrl show workspace --window editor\ntermctrl panes workspace --json\ntermctrl layout workspace --grid 2x2\ntermctrl layout workspace --grid 2x2 -- nvim\ntermctrl send workspace --pane 1 text:opencode2 enter\ntermctrl focus workspace --pane 1\ntermctrl close-pane workspace --pane 1\ntermctrl resize-pane workspace --pane 1 --direction left --cells 5\ntermctrl zoom-pane workspace --pane 1\n",[301],{"type":39,"tag":53,"props":302,"children":303},{"__ignoreMap":79},[304,316,337,362,388,404,420,441,458,479,511,539,564,585,612,645,680,706,731,776],{"type":39,"tag":85,"props":305,"children":306},{"class":87,"line":88},[307,311],{"type":39,"tag":85,"props":308,"children":309},{"style":92},[310],{"type":44,"value":58},{"type":39,"tag":85,"props":312,"children":313},{"style":97},[314],{"type":44,"value":315}," run\n",{"type":39,"tag":85,"props":317,"children":318},{"class":87,"line":150},[319,323,328,332],{"type":39,"tag":85,"props":320,"children":321},{"style":92},[322],{"type":44,"value":58},{"type":39,"tag":85,"props":324,"children":325},{"style":97},[326],{"type":44,"value":327}," run",{"type":39,"tag":85,"props":329,"children":330},{"style":97},[331],{"type":44,"value":105},{"type":39,"tag":85,"props":333,"children":334},{"style":97},[335],{"type":44,"value":336}," \u002Fusr\u002Fbin\u002Fnvim\n",{"type":39,"tag":85,"props":338,"children":339},{"class":87,"line":183},[340,344,348,353,357],{"type":39,"tag":85,"props":341,"children":342},{"style":92},[343],{"type":44,"value":58},{"type":39,"tag":85,"props":345,"children":346},{"style":97},[347],{"type":44,"value":327},{"type":39,"tag":85,"props":349,"children":350},{"style":97},[351],{"type":44,"value":352}," editor",{"type":39,"tag":85,"props":354,"children":355},{"style":97},[356],{"type":44,"value":105},{"type":39,"tag":85,"props":358,"children":359},{"style":97},[360],{"type":44,"value":361}," nvim\n",{"type":39,"tag":85,"props":363,"children":364},{"class":87,"line":200},[365,369,373,378,383],{"type":39,"tag":85,"props":366,"children":367},{"style":92},[368],{"type":44,"value":58},{"type":39,"tag":85,"props":370,"children":371},{"style":97},[372],{"type":44,"value":327},{"type":39,"tag":85,"props":374,"children":375},{"style":97},[376],{"type":44,"value":377}," workspace",{"type":39,"tag":85,"props":379,"children":380},{"style":97},[381],{"type":44,"value":382}," --tab-position",{"type":39,"tag":85,"props":384,"children":385},{"style":97},[386],{"type":44,"value":387}," top\n",{"type":39,"tag":85,"props":389,"children":390},{"class":87,"line":227},[391,395,399],{"type":39,"tag":85,"props":392,"children":393},{"style":92},[394],{"type":44,"value":58},{"type":39,"tag":85,"props":396,"children":397},{"style":97},[398],{"type":44,"value":327},{"type":39,"tag":85,"props":400,"children":401},{"style":97},[402],{"type":44,"value":403}," editor\n",{"type":39,"tag":85,"props":405,"children":406},{"class":87,"line":256},[407,411,416],{"type":39,"tag":85,"props":408,"children":409},{"style":92},[410],{"type":44,"value":58},{"type":39,"tag":85,"props":412,"children":413},{"style":97},[414],{"type":44,"value":415}," attach",{"type":39,"tag":85,"props":417,"children":418},{"style":97},[419],{"type":44,"value":403},{"type":39,"tag":85,"props":421,"children":422},{"class":87,"line":272},[423,427,432,436],{"type":39,"tag":85,"props":424,"children":425},{"style":92},[426],{"type":44,"value":58},{"type":39,"tag":85,"props":428,"children":429},{"style":97},[430],{"type":44,"value":431}," windows",{"type":39,"tag":85,"props":433,"children":434},{"style":97},[435],{"type":44,"value":377},{"type":39,"tag":85,"props":437,"children":438},{"style":97},[439],{"type":44,"value":440}," --json\n",{"type":39,"tag":85,"props":442,"children":444},{"class":87,"line":443},8,[445,449,454],{"type":39,"tag":85,"props":446,"children":447},{"style":92},[448],{"type":44,"value":58},{"type":39,"tag":85,"props":450,"children":451},{"style":97},[452],{"type":44,"value":453}," current",{"type":39,"tag":85,"props":455,"children":456},{"style":97},[457],{"type":44,"value":440},{"type":39,"tag":85,"props":459,"children":461},{"class":87,"line":460},9,[462,466,471,475],{"type":39,"tag":85,"props":463,"children":464},{"style":92},[465],{"type":44,"value":58},{"type":39,"tag":85,"props":467,"children":468},{"style":97},[469],{"type":44,"value":470}," tab-position",{"type":39,"tag":85,"props":472,"children":473},{"style":97},[474],{"type":44,"value":377},{"type":39,"tag":85,"props":476,"children":477},{"style":97},[478],{"type":44,"value":387},{"type":39,"tag":85,"props":480,"children":482},{"class":87,"line":481},10,[483,487,492,496,500,505],{"type":39,"tag":85,"props":484,"children":485},{"style":92},[486],{"type":44,"value":58},{"type":39,"tag":85,"props":488,"children":489},{"style":97},[490],{"type":44,"value":491}," move-window",{"type":39,"tag":85,"props":493,"children":494},{"style":97},[495],{"type":44,"value":377},{"type":39,"tag":85,"props":497,"children":498},{"style":97},[499],{"type":44,"value":352},{"type":39,"tag":85,"props":501,"children":502},{"style":97},[503],{"type":44,"value":504}," --index",{"type":39,"tag":85,"props":506,"children":508},{"style":507},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[509],{"type":44,"value":510}," 0\n",{"type":39,"tag":85,"props":512,"children":513},{"class":87,"line":27},[514,518,523,527,531,535],{"type":39,"tag":85,"props":515,"children":516},{"style":92},[517],{"type":44,"value":58},{"type":39,"tag":85,"props":519,"children":520},{"style":97},[521],{"type":44,"value":522}," new-window",{"type":39,"tag":85,"props":524,"children":525},{"style":97},[526],{"type":44,"value":377},{"type":39,"tag":85,"props":528,"children":529},{"style":97},[530],{"type":44,"value":352},{"type":39,"tag":85,"props":532,"children":533},{"style":97},[534],{"type":44,"value":105},{"type":39,"tag":85,"props":536,"children":537},{"style":97},[538],{"type":44,"value":361},{"type":39,"tag":85,"props":540,"children":542},{"class":87,"line":541},12,[543,547,551,555,560],{"type":39,"tag":85,"props":544,"children":545},{"style":92},[546],{"type":44,"value":58},{"type":39,"tag":85,"props":548,"children":549},{"style":97},[550],{"type":44,"value":100},{"type":39,"tag":85,"props":552,"children":553},{"style":97},[554],{"type":44,"value":377},{"type":39,"tag":85,"props":556,"children":557},{"style":97},[558],{"type":44,"value":559}," --window",{"type":39,"tag":85,"props":561,"children":562},{"style":97},[563],{"type":44,"value":403},{"type":39,"tag":85,"props":565,"children":567},{"class":87,"line":566},13,[568,572,577,581],{"type":39,"tag":85,"props":569,"children":570},{"style":92},[571],{"type":44,"value":58},{"type":39,"tag":85,"props":573,"children":574},{"style":97},[575],{"type":44,"value":576}," panes",{"type":39,"tag":85,"props":578,"children":579},{"style":97},[580],{"type":44,"value":377},{"type":39,"tag":85,"props":582,"children":583},{"style":97},[584],{"type":44,"value":440},{"type":39,"tag":85,"props":586,"children":588},{"class":87,"line":587},14,[589,593,598,602,607],{"type":39,"tag":85,"props":590,"children":591},{"style":92},[592],{"type":44,"value":58},{"type":39,"tag":85,"props":594,"children":595},{"style":97},[596],{"type":44,"value":597}," layout",{"type":39,"tag":85,"props":599,"children":600},{"style":97},[601],{"type":44,"value":377},{"type":39,"tag":85,"props":603,"children":604},{"style":97},[605],{"type":44,"value":606}," --grid",{"type":39,"tag":85,"props":608,"children":609},{"style":97},[610],{"type":44,"value":611}," 2x2\n",{"type":39,"tag":85,"props":613,"children":615},{"class":87,"line":614},15,[616,620,624,628,632,637,641],{"type":39,"tag":85,"props":617,"children":618},{"style":92},[619],{"type":44,"value":58},{"type":39,"tag":85,"props":621,"children":622},{"style":97},[623],{"type":44,"value":597},{"type":39,"tag":85,"props":625,"children":626},{"style":97},[627],{"type":44,"value":377},{"type":39,"tag":85,"props":629,"children":630},{"style":97},[631],{"type":44,"value":606},{"type":39,"tag":85,"props":633,"children":634},{"style":97},[635],{"type":44,"value":636}," 2x2",{"type":39,"tag":85,"props":638,"children":639},{"style":97},[640],{"type":44,"value":105},{"type":39,"tag":85,"props":642,"children":643},{"style":97},[644],{"type":44,"value":361},{"type":39,"tag":85,"props":646,"children":648},{"class":87,"line":647},16,[649,653,657,661,666,671,676],{"type":39,"tag":85,"props":650,"children":651},{"style":92},[652],{"type":44,"value":58},{"type":39,"tag":85,"props":654,"children":655},{"style":97},[656],{"type":44,"value":210},{"type":39,"tag":85,"props":658,"children":659},{"style":97},[660],{"type":44,"value":377},{"type":39,"tag":85,"props":662,"children":663},{"style":97},[664],{"type":44,"value":665}," --pane",{"type":39,"tag":85,"props":667,"children":668},{"style":507},[669],{"type":44,"value":670}," 1",{"type":39,"tag":85,"props":672,"children":673},{"style":97},[674],{"type":44,"value":675}," text:opencode2",{"type":39,"tag":85,"props":677,"children":678},{"style":97},[679],{"type":44,"value":224},{"type":39,"tag":85,"props":681,"children":683},{"class":87,"line":682},17,[684,688,693,697,701],{"type":39,"tag":85,"props":685,"children":686},{"style":92},[687],{"type":44,"value":58},{"type":39,"tag":85,"props":689,"children":690},{"style":97},[691],{"type":44,"value":692}," focus",{"type":39,"tag":85,"props":694,"children":695},{"style":97},[696],{"type":44,"value":377},{"type":39,"tag":85,"props":698,"children":699},{"style":97},[700],{"type":44,"value":665},{"type":39,"tag":85,"props":702,"children":703},{"style":507},[704],{"type":44,"value":705}," 1\n",{"type":39,"tag":85,"props":707,"children":709},{"class":87,"line":708},18,[710,714,719,723,727],{"type":39,"tag":85,"props":711,"children":712},{"style":92},[713],{"type":44,"value":58},{"type":39,"tag":85,"props":715,"children":716},{"style":97},[717],{"type":44,"value":718}," close-pane",{"type":39,"tag":85,"props":720,"children":721},{"style":97},[722],{"type":44,"value":377},{"type":39,"tag":85,"props":724,"children":725},{"style":97},[726],{"type":44,"value":665},{"type":39,"tag":85,"props":728,"children":729},{"style":507},[730],{"type":44,"value":705},{"type":39,"tag":85,"props":732,"children":734},{"class":87,"line":733},19,[735,739,744,748,752,756,761,766,771],{"type":39,"tag":85,"props":736,"children":737},{"style":92},[738],{"type":44,"value":58},{"type":39,"tag":85,"props":740,"children":741},{"style":97},[742],{"type":44,"value":743}," resize-pane",{"type":39,"tag":85,"props":745,"children":746},{"style":97},[747],{"type":44,"value":377},{"type":39,"tag":85,"props":749,"children":750},{"style":97},[751],{"type":44,"value":665},{"type":39,"tag":85,"props":753,"children":754},{"style":507},[755],{"type":44,"value":670},{"type":39,"tag":85,"props":757,"children":758},{"style":97},[759],{"type":44,"value":760}," --direction",{"type":39,"tag":85,"props":762,"children":763},{"style":97},[764],{"type":44,"value":765}," left",{"type":39,"tag":85,"props":767,"children":768},{"style":97},[769],{"type":44,"value":770}," --cells",{"type":39,"tag":85,"props":772,"children":773},{"style":507},[774],{"type":44,"value":775}," 5\n",{"type":39,"tag":85,"props":777,"children":779},{"class":87,"line":778},20,[780,784,789,793,797],{"type":39,"tag":85,"props":781,"children":782},{"style":92},[783],{"type":44,"value":58},{"type":39,"tag":85,"props":785,"children":786},{"style":97},[787],{"type":44,"value":788}," zoom-pane",{"type":39,"tag":85,"props":790,"children":791},{"style":97},[792],{"type":44,"value":377},{"type":39,"tag":85,"props":794,"children":795},{"style":97},[796],{"type":44,"value":665},{"type":39,"tag":85,"props":798,"children":799},{"style":507},[800],{"type":44,"value":705},{"type":39,"tag":47,"props":802,"children":803},{},[804,806,812,814,820,822,828,830,836,838,844,846,852,854,860,862,868,870,876,878,884,886,892,894,900,902,908,910,916,918,924,926,932,934,940,942,948,950,956,958,964,966,972,974,980,982,988,990,996,998,1004,1006,1012],{"type":44,"value":805},"With no arguments, ",{"type":39,"tag":53,"props":807,"children":809},{"className":808},[],[810],{"type":44,"value":811},"run",{"type":44,"value":813}," starts ",{"type":39,"tag":53,"props":815,"children":817},{"className":816},[],[818],{"type":44,"value":819},"$SHELL",{"type":44,"value":821}," in the ",{"type":39,"tag":53,"props":823,"children":825},{"className":824},[],[826],{"type":44,"value":827},"workspace\u002Fmain",{"type":44,"value":829}," window. The persistent tab strip\nshows selection, pane count, zoom, and output (",{"type":39,"tag":53,"props":831,"children":833},{"className":832},[],[834],{"type":44,"value":835},"+",{"type":44,"value":837},"), bell (",{"type":39,"tag":53,"props":839,"children":841},{"className":840},[],[842],{"type":44,"value":843},"!",{"type":44,"value":845},"), or surviving-window pane exit (",{"type":39,"tag":53,"props":847,"children":849},{"className":848},[],[850],{"type":44,"value":851},"x",{"type":44,"value":853},")\nactivity. Use ",{"type":39,"tag":53,"props":855,"children":857},{"className":856},[],[858],{"type":44,"value":859},"tab-position NAME top|bottom",{"type":44,"value":861}," to move it live. Use ",{"type":39,"tag":53,"props":863,"children":865},{"className":864},[],[866],{"type":44,"value":867},"ctrl-b p",{"type":44,"value":869}," for the command palette,\n",{"type":39,"tag":53,"props":871,"children":873},{"className":872},[],[874],{"type":44,"value":875},"ctrl-b c\u002Fw",{"type":44,"value":877}," to create\u002Flist windows, ",{"type":39,"tag":53,"props":879,"children":881},{"className":880},[],[882],{"type":44,"value":883},"ctrl-b l",{"type":44,"value":885}," for the last window, ",{"type":39,"tag":53,"props":887,"children":889},{"className":888},[],[890],{"type":44,"value":891},"ctrl-b n",{"type":44,"value":893}," for next,\n",{"type":39,"tag":53,"props":895,"children":897},{"className":896},[],[898],{"type":44,"value":899},"ctrl-b \u003C\u002F>",{"type":44,"value":901}," or tab dragging to reorder, and ",{"type":39,"tag":53,"props":903,"children":905},{"className":904},[],[906],{"type":44,"value":907},"ctrl-b t",{"type":44,"value":909}," to move tabs. Use ",{"type":39,"tag":53,"props":911,"children":913},{"className":912},[],[914],{"type":44,"value":915},"ctrl-b %",{"type":44,"value":917}," and\n",{"type":39,"tag":53,"props":919,"children":921},{"className":920},[],[922],{"type":44,"value":923},"ctrl-b \"",{"type":44,"value":925}," to split; use ",{"type":39,"tag":53,"props":927,"children":929},{"className":928},[],[930],{"type":44,"value":931},"ctrl-b",{"type":44,"value":933}," plus arrows or ",{"type":39,"tag":53,"props":935,"children":937},{"className":936},[],[938],{"type":44,"value":939},"h\u002Fj\u002Fk",{"type":44,"value":941},", or a mouse click, to focus. Use\n",{"type":39,"tag":53,"props":943,"children":945},{"className":944},[],[946],{"type":44,"value":947},"ctrl-b H\u002FJ\u002FK\u002FL",{"type":44,"value":949}," to resize,\n",{"type":39,"tag":53,"props":951,"children":953},{"className":952},[],[954],{"type":44,"value":955},"ctrl-b z",{"type":44,"value":957}," to toggle zoom, ",{"type":39,"tag":53,"props":959,"children":961},{"className":960},[],[962],{"type":44,"value":963},"ctrl-b d",{"type":44,"value":965}," to detach,\n",{"type":39,"tag":53,"props":967,"children":969},{"className":968},[],[970],{"type":44,"value":971},"ctrl-b q",{"type":44,"value":973}," to show stable pane IDs, and ",{"type":39,"tag":53,"props":975,"children":977},{"className":976},[],[978],{"type":44,"value":979},"ctrl-b ?",{"type":44,"value":981}," for help. ",{"type":39,"tag":53,"props":983,"children":985},{"className":984},[],[986],{"type":44,"value":987},"ctrl-b x",{"type":44,"value":989}," closes a pane, ",{"type":39,"tag":53,"props":991,"children":993},{"className":992},[],[994],{"type":44,"value":995},"ctrl-b &",{"type":44,"value":997},"\ncloses the current window, and ",{"type":39,"tag":53,"props":999,"children":1001},{"className":1000},[],[1002],{"type":44,"value":1003},"ctrl-b Q",{"type":44,"value":1005}," closes the workspace after ",{"type":39,"tag":53,"props":1007,"children":1009},{"className":1008},[],[1010],{"type":44,"value":1011},"y",{"type":44,"value":1013}," confirmation.",{"type":39,"tag":47,"props":1015,"children":1016},{},[1017,1023,1025,1031,1033,1038,1040,1045,1047,1053],{"type":39,"tag":53,"props":1018,"children":1020},{"className":1019},[],[1021],{"type":44,"value":1022},"run NAME",{"type":44,"value":1024}," creates when absent and reattaches when the workspace already exists. ",{"type":39,"tag":53,"props":1026,"children":1028},{"className":1027},[],[1029],{"type":44,"value":1030},"attach NAME",{"type":44,"value":1032},"\nrequires an existing workspace. Closing the terminal detaches without killing panes; ",{"type":39,"tag":53,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":44,"value":1003},{"type":44,"value":1039},"\nfollowed by ",{"type":39,"tag":53,"props":1041,"children":1043},{"className":1042},[],[1044],{"type":44,"value":1011},{"type":44,"value":1046},", or ",{"type":39,"tag":53,"props":1048,"children":1050},{"className":1049},[],[1051],{"type":44,"value":1052},"termctrl stop NAME",{"type":44,"value":1054},", ends the workspace. Only one human terminal may be attached,\nwhile agent controls remain available when detached.",{"type":39,"tag":47,"props":1056,"children":1057},{},[1058,1060,1066,1068,1074,1076,1082,1084,1090,1092,1098,1099,1105,1106,1112,1113,1119,1121,1127,1129,1135,1136,1142],{"type":44,"value":1059},"Discover windows before panes. Window names are exact stable selectors; numeric indexes shift after reorder or close.\nPane IDs are globally stable across windows; do not infer identity from geometry or titles.\nInside a pane, use ",{"type":39,"tag":53,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":44,"value":1065},"termctrl current --json",{"type":44,"value":1067},"; ",{"type":39,"tag":53,"props":1069,"children":1071},{"className":1070},[],[1072],{"type":44,"value":1073},"TERMCTRL_WORKSPACE",{"type":44,"value":1075}," and ",{"type":39,"tag":53,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":44,"value":1081},"TERMCTRL_PANE_ID",{"type":44,"value":1083}," identify\nthe caller while the daemon resolves its current window after moves or renames.\nWindow-targeted ",{"type":39,"tag":53,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":44,"value":1089},"show",{"type":44,"value":1091},", ",{"type":39,"tag":53,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":44,"value":1097},"send",{"type":44,"value":1091},{"type":39,"tag":53,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":44,"value":1104},"wait",{"type":44,"value":1091},{"type":39,"tag":53,"props":1107,"children":1109},{"className":1108},[],[1110],{"type":44,"value":1111},"logs",{"type":44,"value":1091},{"type":39,"tag":53,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":44,"value":1118},"panes",{"type":44,"value":1120},", and ",{"type":39,"tag":53,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":44,"value":1126},"layout",{"type":44,"value":1128}," do not change human selection.\nOnly ",{"type":39,"tag":53,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":44,"value":1134},"select-window",{"type":44,"value":1075},{"type":39,"tag":53,"props":1137,"children":1139},{"className":1138},[],[1140],{"type":44,"value":1141},"focus --pane ID",{"type":44,"value":1143}," intentionally move the visible human context.",{"type":39,"tag":47,"props":1145,"children":1146},{},[1147,1149,1155,1157,1163],{"type":44,"value":1148},"Workspaces follow their current human terminal and reject ",{"type":39,"tag":53,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":44,"value":1154},"termctrl resize",{"type":44,"value":1156},". ",{"type":39,"tag":53,"props":1158,"children":1160},{"className":1159},[],[1161],{"type":44,"value":1162},"run --record",{"type":44,"value":1164}," records\nthe composed workspace, including tabs, splits, window switches, resizes, and markers. Composed ANSI\noutput is a rendered snapshot; pane-targeted ANSI is the original pane stream.",{"type":39,"tag":62,"props":1166,"children":1168},{"id":1167},"choose-the-correct-observation",[1169],{"type":44,"value":1170},"Choose The Correct Observation",{"type":39,"tag":1172,"props":1173,"children":1174},"ul",{},[1175,1187,1198,1210],{"type":39,"tag":1176,"props":1177,"children":1178},"li",{},[1179,1180,1185],{"type":44,"value":51},{"type":39,"tag":53,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":44,"value":1089},{"type":44,"value":1186}," for current visible screen text. Prefer it for reasoning about full-screen TUIs.",{"type":39,"tag":1176,"props":1188,"children":1189},{},[1190,1191,1196],{"type":44,"value":51},{"type":39,"tag":53,"props":1192,"children":1194},{"className":1193},[],[1195],{"type":44,"value":1111},{"type":44,"value":1197}," for readable retained output from normal-screen tools and log-like commands.",{"type":39,"tag":1176,"props":1199,"children":1200},{},[1201,1202,1208],{"type":44,"value":51},{"type":39,"tag":53,"props":1203,"children":1205},{"className":1204},[],[1206],{"type":44,"value":1207},"save --format ... --out ...",{"type":44,"value":1209}," only when a persisted artifact is required.",{"type":39,"tag":1176,"props":1211,"children":1212},{},[1213,1214,1220,1222,1228],{"type":44,"value":51},{"type":39,"tag":53,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":44,"value":1219},"video",{"type":44,"value":1221}," only after explicitly recording a timeline with ",{"type":39,"tag":53,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":44,"value":1227},"--record",{"type":44,"value":1229},".",{"type":39,"tag":47,"props":1231,"children":1232},{},[1233],{"type":44,"value":1234},"Do not treat logs as the visible state of an alternate-screen TUI.",{"type":39,"tag":47,"props":1236,"children":1237},{},[1238,1240,1246,1248,1254],{"type":44,"value":1239},"Named-session screen reads are immediate by default. Do not pass ",{"type":39,"tag":53,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":44,"value":1245},"--settle-ms 0",{"type":44,"value":1247}," or\n",{"type":39,"tag":53,"props":1249,"children":1251},{"className":1250},[],[1252],{"type":44,"value":1253},"--deadline-ms 0",{"type":44,"value":1255},"; omit both options. Set them only to intentional nonzero values when a specific\ntransition needs quiet-output settling.",{"type":39,"tag":47,"props":1257,"children":1258},{},[1259,1264,1266,1272,1274,1280],{"type":39,"tag":53,"props":1260,"children":1262},{"className":1261},[],[1263],{"type":44,"value":1104},{"type":44,"value":1265}," defaults to a five-second maximum and returns as soon as its text appears. Do not pass\n",{"type":39,"tag":53,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":44,"value":1271},"--timeout 5000",{"type":44,"value":1273},"; omit it. Set ",{"type":39,"tag":53,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":44,"value":1279},"--timeout",{"type":44,"value":1281}," only when intentionally choosing a different limit.",{"type":39,"tag":62,"props":1283,"children":1285},{"id":1284},"semantic-ui-tree",[1286],{"type":44,"value":1287},"Semantic UI tree",{"type":39,"tag":47,"props":1289,"children":1290},{},[1291,1293,1298,1300,1306,1308,1314,1316,1322],{"type":44,"value":1292},"The ",{"type":39,"tag":53,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":44,"value":1089},{"type":44,"value":1299}," command takes an option ",{"type":39,"tag":53,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":44,"value":1305},"--format semantic",{"type":44,"value":1307}," which returns a semantic tree representing the\ninteractable UI elements. This requires direct support from the application to work; once the app is ready\nyou can run this and see if it returns anything. An empty tree means no provider was connected at that\nmoment. If the application is still starting, wait for visible readiness and retry once; otherwise use\nthe visible screen instead. Treat protocol and provider errors as actionable failures rather than retrying\nthem blindly.\nThe application must be launched with ",{"type":39,"tag":53,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":44,"value":1313},"--host opentui",{"type":44,"value":1315},"; the full read command is\n",{"type":39,"tag":53,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":44,"value":1321},"termctrl show app --format semantic",{"type":44,"value":1229},{"type":39,"tag":47,"props":1324,"children":1325},{},[1326],{"type":44,"value":1327},"Attempt to use the semantic UI tree if you need to discover available UI elements.",{"type":39,"tag":62,"props":1329,"children":1331},{"id":1330},"drive-input-precisely",[1332],{"type":44,"value":1333},"Drive Input Precisely",{"type":39,"tag":47,"props":1335,"children":1336},{},[1337,1339,1345],{"type":44,"value":1338},"Send plain text with ",{"type":39,"tag":53,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":44,"value":1344},"text:\u003Cvalue>",{"type":44,"value":1346}," and named keys as separate input atoms:",{"type":39,"tag":74,"props":1348,"children":1350},{"className":76,"code":1349,"language":78,"meta":79,"style":79},"termctrl send app text:\u002Fconnect enter\ntermctrl send app down enter\ntermctrl send app ctrl-c\nprintf '%s' 'multiline prompt' | termctrl send app --stdin\n",[1351],{"type":39,"tag":53,"props":1352,"children":1353},{"__ignoreMap":79},[1354,1378,1402,1422],{"type":39,"tag":85,"props":1355,"children":1356},{"class":87,"line":88},[1357,1361,1365,1369,1374],{"type":39,"tag":85,"props":1358,"children":1359},{"style":92},[1360],{"type":44,"value":58},{"type":39,"tag":85,"props":1362,"children":1363},{"style":97},[1364],{"type":44,"value":210},{"type":39,"tag":85,"props":1366,"children":1367},{"style":97},[1368],{"type":44,"value":139},{"type":39,"tag":85,"props":1370,"children":1371},{"style":97},[1372],{"type":44,"value":1373}," text:\u002Fconnect",{"type":39,"tag":85,"props":1375,"children":1376},{"style":97},[1377],{"type":44,"value":224},{"type":39,"tag":85,"props":1379,"children":1380},{"class":87,"line":150},[1381,1385,1389,1393,1398],{"type":39,"tag":85,"props":1382,"children":1383},{"style":92},[1384],{"type":44,"value":58},{"type":39,"tag":85,"props":1386,"children":1387},{"style":97},[1388],{"type":44,"value":210},{"type":39,"tag":85,"props":1390,"children":1391},{"style":97},[1392],{"type":44,"value":139},{"type":39,"tag":85,"props":1394,"children":1395},{"style":97},[1396],{"type":44,"value":1397}," down",{"type":39,"tag":85,"props":1399,"children":1400},{"style":97},[1401],{"type":44,"value":224},{"type":39,"tag":85,"props":1403,"children":1404},{"class":87,"line":183},[1405,1409,1413,1417],{"type":39,"tag":85,"props":1406,"children":1407},{"style":92},[1408],{"type":44,"value":58},{"type":39,"tag":85,"props":1410,"children":1411},{"style":97},[1412],{"type":44,"value":210},{"type":39,"tag":85,"props":1414,"children":1415},{"style":97},[1416],{"type":44,"value":139},{"type":39,"tag":85,"props":1418,"children":1419},{"style":97},[1420],{"type":44,"value":1421}," ctrl-c\n",{"type":39,"tag":85,"props":1423,"children":1424},{"class":87,"line":200},[1425,1431,1436,1441,1446,1450,1455,1459,1464,1469,1473,1477],{"type":39,"tag":85,"props":1426,"children":1428},{"style":1427},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1429],{"type":44,"value":1430},"printf",{"type":39,"tag":85,"props":1432,"children":1433},{"style":167},[1434],{"type":44,"value":1435}," '",{"type":39,"tag":85,"props":1437,"children":1438},{"style":97},[1439],{"type":44,"value":1440},"%s",{"type":39,"tag":85,"props":1442,"children":1443},{"style":167},[1444],{"type":44,"value":1445},"'",{"type":39,"tag":85,"props":1447,"children":1448},{"style":167},[1449],{"type":44,"value":1435},{"type":39,"tag":85,"props":1451,"children":1452},{"style":97},[1453],{"type":44,"value":1454},"multiline prompt",{"type":39,"tag":85,"props":1456,"children":1457},{"style":167},[1458],{"type":44,"value":1445},{"type":39,"tag":85,"props":1460,"children":1461},{"style":167},[1462],{"type":44,"value":1463}," |",{"type":39,"tag":85,"props":1465,"children":1466},{"style":92},[1467],{"type":44,"value":1468}," termctrl",{"type":39,"tag":85,"props":1470,"children":1471},{"style":97},[1472],{"type":44,"value":210},{"type":39,"tag":85,"props":1474,"children":1475},{"style":97},[1476],{"type":44,"value":139},{"type":39,"tag":85,"props":1478,"children":1479},{"style":97},[1480],{"type":44,"value":1481}," --stdin\n",{"type":39,"tag":47,"props":1483,"children":1484},{},[1485,1486,1491],{"type":44,"value":51},{"type":39,"tag":53,"props":1487,"children":1489},{"className":1488},[],[1490],{"type":44,"value":1104},{"type":44,"value":1492}," after sending input instead of sleeping or assuming that the interface has updated.",{"type":39,"tag":62,"props":1494,"children":1496},{"id":1495},"operate-opentui-applications",[1497],{"type":44,"value":1498},"Operate OpenTUI Applications",{"type":39,"tag":47,"props":1500,"children":1501},{},[1502],{"type":44,"value":1503},"Use the OpenTUI host handshake for applications such as OpenCode:",{"type":39,"tag":74,"props":1505,"children":1507},{"className":76,"code":1506,"language":78,"meta":79,"style":79},"termctrl start app --host opentui --cols 112 --rows 34 -- opencode\ntermctrl wait app \"\u002Fconnect\"\ntermctrl show app\n",[1508],{"type":39,"tag":53,"props":1509,"children":1510},{"__ignoreMap":79},[1511,1565,1593],{"type":39,"tag":85,"props":1512,"children":1513},{"class":87,"line":88},[1514,1518,1522,1526,1531,1536,1541,1546,1551,1556,1560],{"type":39,"tag":85,"props":1515,"children":1516},{"style":92},[1517],{"type":44,"value":58},{"type":39,"tag":85,"props":1519,"children":1520},{"style":97},[1521],{"type":44,"value":134},{"type":39,"tag":85,"props":1523,"children":1524},{"style":97},[1525],{"type":44,"value":139},{"type":39,"tag":85,"props":1527,"children":1528},{"style":97},[1529],{"type":44,"value":1530}," --host",{"type":39,"tag":85,"props":1532,"children":1533},{"style":97},[1534],{"type":44,"value":1535}," opentui",{"type":39,"tag":85,"props":1537,"children":1538},{"style":97},[1539],{"type":44,"value":1540}," --cols",{"type":39,"tag":85,"props":1542,"children":1543},{"style":507},[1544],{"type":44,"value":1545}," 112",{"type":39,"tag":85,"props":1547,"children":1548},{"style":97},[1549],{"type":44,"value":1550}," --rows",{"type":39,"tag":85,"props":1552,"children":1553},{"style":507},[1554],{"type":44,"value":1555}," 34",{"type":39,"tag":85,"props":1557,"children":1558},{"style":97},[1559],{"type":44,"value":105},{"type":39,"tag":85,"props":1561,"children":1562},{"style":97},[1563],{"type":44,"value":1564}," opencode\n",{"type":39,"tag":85,"props":1566,"children":1567},{"class":87,"line":150},[1568,1572,1576,1580,1584,1589],{"type":39,"tag":85,"props":1569,"children":1570},{"style":92},[1571],{"type":44,"value":58},{"type":39,"tag":85,"props":1573,"children":1574},{"style":97},[1575],{"type":44,"value":160},{"type":39,"tag":85,"props":1577,"children":1578},{"style":97},[1579],{"type":44,"value":139},{"type":39,"tag":85,"props":1581,"children":1582},{"style":167},[1583],{"type":44,"value":170},{"type":39,"tag":85,"props":1585,"children":1586},{"style":97},[1587],{"type":44,"value":1588},"\u002Fconnect",{"type":39,"tag":85,"props":1590,"children":1591},{"style":167},[1592],{"type":44,"value":180},{"type":39,"tag":85,"props":1594,"children":1595},{"class":87,"line":183},[1596,1600,1604],{"type":39,"tag":85,"props":1597,"children":1598},{"style":92},[1599],{"type":44,"value":58},{"type":39,"tag":85,"props":1601,"children":1602},{"style":97},[1603],{"type":44,"value":100},{"type":39,"tag":85,"props":1605,"children":1606},{"style":97},[1607],{"type":44,"value":197},{"type":39,"tag":47,"props":1609,"children":1610},{},[1611,1612,1618,1620,1626],{"type":44,"value":51},{"type":39,"tag":53,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":44,"value":1617},"resize",{"type":44,"value":1619}," when the application requires more visible area. Use ",{"type":39,"tag":53,"props":1621,"children":1623},{"className":1622},[],[1624],{"type":44,"value":1625},"restart app",{"type":44,"value":1627}," to reuse stored launch settings after a deliberate application restart.",{"type":39,"tag":62,"props":1629,"children":1631},{"id":1630},"retain-evidence-deliberately",[1632],{"type":44,"value":1633},"Retain Evidence Deliberately",{"type":39,"tag":47,"props":1635,"children":1636},{},[1637],{"type":44,"value":1638},"Save only requested formats:",{"type":39,"tag":74,"props":1640,"children":1642},{"className":76,"code":1641,"language":78,"meta":79,"style":79},"termctrl save app --format txt --format png --out artifacts\u002Fcurrent\n",[1643],{"type":39,"tag":53,"props":1644,"children":1645},{"__ignoreMap":79},[1646],{"type":39,"tag":85,"props":1647,"children":1648},{"class":87,"line":88},[1649,1653,1658,1662,1667,1672,1676,1681,1686],{"type":39,"tag":85,"props":1650,"children":1651},{"style":92},[1652],{"type":44,"value":58},{"type":39,"tag":85,"props":1654,"children":1655},{"style":97},[1656],{"type":44,"value":1657}," save",{"type":39,"tag":85,"props":1659,"children":1660},{"style":97},[1661],{"type":44,"value":139},{"type":39,"tag":85,"props":1663,"children":1664},{"style":97},[1665],{"type":44,"value":1666}," --format",{"type":39,"tag":85,"props":1668,"children":1669},{"style":97},[1670],{"type":44,"value":1671}," txt",{"type":39,"tag":85,"props":1673,"children":1674},{"style":97},[1675],{"type":44,"value":1666},{"type":39,"tag":85,"props":1677,"children":1678},{"style":97},[1679],{"type":44,"value":1680}," png",{"type":39,"tag":85,"props":1682,"children":1683},{"style":97},[1684],{"type":44,"value":1685}," --out",{"type":39,"tag":85,"props":1687,"children":1688},{"style":97},[1689],{"type":44,"value":1690}," artifacts\u002Fcurrent\n",{"type":39,"tag":47,"props":1692,"children":1693},{},[1694],{"type":44,"value":1695},"Record demos only when the user wants a retained timeline or video. Add markers while the session is running, inspect them after stopping, then export with an explicit edit plan:",{"type":39,"tag":74,"props":1697,"children":1699},{"className":76,"code":1698,"language":78,"meta":79,"style":79},"termctrl start app --record artifacts\u002Frun.termctrl -- my-terminal-app\ntermctrl wait app \"Ready\"\ntermctrl mark app ready\ntermctrl send app text:demo enter\ntermctrl wait app \"Done\" --timeout 60000\ntermctrl mark app done\ntermctrl stop app\ntermctrl markers artifacts\u002Frun.termctrl\ntermctrl show --recording artifacts\u002Frun.termctrl --at-marker done\ntermctrl video artifacts\u002Frun.termctrl --edit artifacts\u002Frun-edit.json --footer --out artifacts\u002Frun.mp4\n",[1700],{"type":39,"tag":53,"props":1701,"children":1702},{"__ignoreMap":79},[1703,1736,1763,1784,1808,1847,1867,1882,1899,1928],{"type":39,"tag":85,"props":1704,"children":1705},{"class":87,"line":88},[1706,1710,1714,1718,1723,1728,1732],{"type":39,"tag":85,"props":1707,"children":1708},{"style":92},[1709],{"type":44,"value":58},{"type":39,"tag":85,"props":1711,"children":1712},{"style":97},[1713],{"type":44,"value":134},{"type":39,"tag":85,"props":1715,"children":1716},{"style":97},[1717],{"type":44,"value":139},{"type":39,"tag":85,"props":1719,"children":1720},{"style":97},[1721],{"type":44,"value":1722}," --record",{"type":39,"tag":85,"props":1724,"children":1725},{"style":97},[1726],{"type":44,"value":1727}," artifacts\u002Frun.termctrl",{"type":39,"tag":85,"props":1729,"children":1730},{"style":97},[1731],{"type":44,"value":105},{"type":39,"tag":85,"props":1733,"children":1734},{"style":97},[1735],{"type":44,"value":110},{"type":39,"tag":85,"props":1737,"children":1738},{"class":87,"line":150},[1739,1743,1747,1751,1755,1759],{"type":39,"tag":85,"props":1740,"children":1741},{"style":92},[1742],{"type":44,"value":58},{"type":39,"tag":85,"props":1744,"children":1745},{"style":97},[1746],{"type":44,"value":160},{"type":39,"tag":85,"props":1748,"children":1749},{"style":97},[1750],{"type":44,"value":139},{"type":39,"tag":85,"props":1752,"children":1753},{"style":167},[1754],{"type":44,"value":170},{"type":39,"tag":85,"props":1756,"children":1757},{"style":97},[1758],{"type":44,"value":175},{"type":39,"tag":85,"props":1760,"children":1761},{"style":167},[1762],{"type":44,"value":180},{"type":39,"tag":85,"props":1764,"children":1765},{"class":87,"line":183},[1766,1770,1775,1779],{"type":39,"tag":85,"props":1767,"children":1768},{"style":92},[1769],{"type":44,"value":58},{"type":39,"tag":85,"props":1771,"children":1772},{"style":97},[1773],{"type":44,"value":1774}," mark",{"type":39,"tag":85,"props":1776,"children":1777},{"style":97},[1778],{"type":44,"value":139},{"type":39,"tag":85,"props":1780,"children":1781},{"style":97},[1782],{"type":44,"value":1783}," ready\n",{"type":39,"tag":85,"props":1785,"children":1786},{"class":87,"line":200},[1787,1791,1795,1799,1804],{"type":39,"tag":85,"props":1788,"children":1789},{"style":92},[1790],{"type":44,"value":58},{"type":39,"tag":85,"props":1792,"children":1793},{"style":97},[1794],{"type":44,"value":210},{"type":39,"tag":85,"props":1796,"children":1797},{"style":97},[1798],{"type":44,"value":139},{"type":39,"tag":85,"props":1800,"children":1801},{"style":97},[1802],{"type":44,"value":1803}," text:demo",{"type":39,"tag":85,"props":1805,"children":1806},{"style":97},[1807],{"type":44,"value":224},{"type":39,"tag":85,"props":1809,"children":1810},{"class":87,"line":227},[1811,1815,1819,1823,1827,1832,1837,1842],{"type":39,"tag":85,"props":1812,"children":1813},{"style":92},[1814],{"type":44,"value":58},{"type":39,"tag":85,"props":1816,"children":1817},{"style":97},[1818],{"type":44,"value":160},{"type":39,"tag":85,"props":1820,"children":1821},{"style":97},[1822],{"type":44,"value":139},{"type":39,"tag":85,"props":1824,"children":1825},{"style":167},[1826],{"type":44,"value":170},{"type":39,"tag":85,"props":1828,"children":1829},{"style":97},[1830],{"type":44,"value":1831},"Done",{"type":39,"tag":85,"props":1833,"children":1834},{"style":167},[1835],{"type":44,"value":1836},"\"",{"type":39,"tag":85,"props":1838,"children":1839},{"style":97},[1840],{"type":44,"value":1841}," --timeout",{"type":39,"tag":85,"props":1843,"children":1844},{"style":507},[1845],{"type":44,"value":1846}," 60000\n",{"type":39,"tag":85,"props":1848,"children":1849},{"class":87,"line":256},[1850,1854,1858,1862],{"type":39,"tag":85,"props":1851,"children":1852},{"style":92},[1853],{"type":44,"value":58},{"type":39,"tag":85,"props":1855,"children":1856},{"style":97},[1857],{"type":44,"value":1774},{"type":39,"tag":85,"props":1859,"children":1860},{"style":97},[1861],{"type":44,"value":139},{"type":39,"tag":85,"props":1863,"children":1864},{"style":97},[1865],{"type":44,"value":1866}," done\n",{"type":39,"tag":85,"props":1868,"children":1869},{"class":87,"line":272},[1870,1874,1878],{"type":39,"tag":85,"props":1871,"children":1872},{"style":92},[1873],{"type":44,"value":58},{"type":39,"tag":85,"props":1875,"children":1876},{"style":97},[1877],{"type":44,"value":282},{"type":39,"tag":85,"props":1879,"children":1880},{"style":97},[1881],{"type":44,"value":197},{"type":39,"tag":85,"props":1883,"children":1884},{"class":87,"line":443},[1885,1889,1894],{"type":39,"tag":85,"props":1886,"children":1887},{"style":92},[1888],{"type":44,"value":58},{"type":39,"tag":85,"props":1890,"children":1891},{"style":97},[1892],{"type":44,"value":1893}," markers",{"type":39,"tag":85,"props":1895,"children":1896},{"style":97},[1897],{"type":44,"value":1898}," artifacts\u002Frun.termctrl\n",{"type":39,"tag":85,"props":1900,"children":1901},{"class":87,"line":460},[1902,1906,1910,1915,1919,1924],{"type":39,"tag":85,"props":1903,"children":1904},{"style":92},[1905],{"type":44,"value":58},{"type":39,"tag":85,"props":1907,"children":1908},{"style":97},[1909],{"type":44,"value":100},{"type":39,"tag":85,"props":1911,"children":1912},{"style":97},[1913],{"type":44,"value":1914}," --recording",{"type":39,"tag":85,"props":1916,"children":1917},{"style":97},[1918],{"type":44,"value":1727},{"type":39,"tag":85,"props":1920,"children":1921},{"style":97},[1922],{"type":44,"value":1923}," --at-marker",{"type":39,"tag":85,"props":1925,"children":1926},{"style":97},[1927],{"type":44,"value":1866},{"type":39,"tag":85,"props":1929,"children":1930},{"class":87,"line":481},[1931,1935,1940,1944,1949,1954,1959,1963],{"type":39,"tag":85,"props":1932,"children":1933},{"style":92},[1934],{"type":44,"value":58},{"type":39,"tag":85,"props":1936,"children":1937},{"style":97},[1938],{"type":44,"value":1939}," video",{"type":39,"tag":85,"props":1941,"children":1942},{"style":97},[1943],{"type":44,"value":1727},{"type":39,"tag":85,"props":1945,"children":1946},{"style":97},[1947],{"type":44,"value":1948}," --edit",{"type":39,"tag":85,"props":1950,"children":1951},{"style":97},[1952],{"type":44,"value":1953}," artifacts\u002Frun-edit.json",{"type":39,"tag":85,"props":1955,"children":1956},{"style":97},[1957],{"type":44,"value":1958}," --footer",{"type":39,"tag":85,"props":1960,"children":1961},{"style":97},[1962],{"type":44,"value":1685},{"type":39,"tag":85,"props":1964,"children":1965},{"style":97},[1966],{"type":44,"value":1967}," artifacts\u002Frun.mp4\n",{"type":39,"tag":47,"props":1969,"children":1970},{},[1971,1973,1979,1981,1987,1989,1995,1997,2003,2005,2011],{"type":44,"value":1972},"Use edit-plan ",{"type":39,"tag":53,"props":1974,"children":1976},{"className":1975},[],[1977],{"type":44,"value":1978},"speed",{"type":44,"value":1980}," values conservatively when terminal text should remain readable. Use ",{"type":39,"tag":53,"props":1982,"children":1984},{"className":1983},[],[1985],{"type":44,"value":1986},"hold_ms",{"type":44,"value":1988}," or ",{"type":39,"tag":53,"props":1990,"children":1992},{"className":1991},[],[1993],{"type":44,"value":1994},"--tail-ms",{"type":44,"value":1996}," when the final frame is the payoff. Pass ",{"type":39,"tag":53,"props":1998,"children":2000},{"className":1999},[],[2001],{"type":44,"value":2002},"--footer",{"type":44,"value":2004}," when a polished demo should show the clip caption, elapsed timecode, and ",{"type":39,"tag":53,"props":2006,"children":2008},{"className":2007},[],[2009],{"type":44,"value":2010},"TERMINAL CONTROL",{"type":44,"value":2012}," branding in a bottom footer; omit it for ordinary videos.",{"type":39,"tag":47,"props":2014,"children":2015},{},[2016,2018,2024],{"type":44,"value":2017},"Treat ",{"type":39,"tag":53,"props":2019,"children":2021},{"className":2020},[],[2022],{"type":44,"value":2023},".termctrl",{"type":44,"value":2025}," recordings, ANSI transcripts, screen artifacts, command arguments, and terminal input as potentially sensitive. Do not retain them unless needed, and do not expose their contents unnecessarily.",{"type":39,"tag":62,"props":2027,"children":2029},{"id":2028},"recover-from-problems",[2030],{"type":44,"value":2031},"Recover From Problems",{"type":39,"tag":1172,"props":2033,"children":2034},{},[2035,2048,2083,2111,2132],{"type":39,"tag":1176,"props":2036,"children":2037},{},[2038,2040,2046],{"type":44,"value":2039},"Run ",{"type":39,"tag":53,"props":2041,"children":2043},{"className":2042},[],[2044],{"type":44,"value":2045},"termctrl status app",{"type":44,"value":2047}," to inspect state and launch settings.",{"type":39,"tag":1176,"props":2049,"children":2050},{},[2051,2052,2058,2060,2066,2068,2074,2076,2082],{"type":44,"value":2039},{"type":39,"tag":53,"props":2053,"children":2055},{"className":2054},[],[2056],{"type":44,"value":2057},"termctrl list",{"type":44,"value":2059}," for running sessions, or ",{"type":39,"tag":53,"props":2061,"children":2063},{"className":2062},[],[2064],{"type":44,"value":2065},"termctrl list --all",{"type":44,"value":2067}," to include retained exited and\nstale entries. Preview cleanup with ",{"type":39,"tag":53,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":44,"value":2073},"termctrl prune --dry-run",{"type":44,"value":2075},", then run ",{"type":39,"tag":53,"props":2077,"children":2079},{"className":2078},[],[2080],{"type":44,"value":2081},"termctrl prune",{"type":44,"value":1229},{"type":39,"tag":1176,"props":2084,"children":2085},{},[2086,2088,2094,2095,2101,2103,2109],{"type":44,"value":2087},"MCP agents should use semantic workspace tools for context, windows, panes, layout, focus, movement,\nresize, zoom, and close operations instead of sending human prefix shortcuts. Use ",{"type":39,"tag":53,"props":2089,"children":2091},{"className":2090},[],[2092],{"type":44,"value":2093},"get_screen",{"type":44,"value":1247},{"type":39,"tag":53,"props":2096,"children":2098},{"className":2097},[],[2099],{"type":44,"value":2100},"interact",{"type":44,"value":2102}," for visible state and ",{"type":39,"tag":53,"props":2104,"children":2106},{"className":2105},[],[2107],{"type":44,"value":2108},"save_screen",{"type":44,"value":2110}," only for a retained PNG.",{"type":39,"tag":1176,"props":2112,"children":2113},{},[2114,2116,2122,2124,2130],{"type":44,"value":2115},"If a session socket path is too long, set ",{"type":39,"tag":53,"props":2117,"children":2119},{"className":2118},[],[2120],{"type":44,"value":2121},"TERMCTRL_RUNTIME_DIR",{"type":44,"value":2123}," to a short private directory under ",{"type":39,"tag":53,"props":2125,"children":2127},{"className":2126},[],[2128],{"type":44,"value":2129},"\u002Ftmp",{"type":44,"value":2131}," before starting sessions.",{"type":39,"tag":1176,"props":2133,"children":2134},{},[2135,2137,2142,2144,2150],{"type":44,"value":2136},"If ",{"type":39,"tag":53,"props":2138,"children":2140},{"className":2139},[],[2141],{"type":44,"value":58},{"type":44,"value":2143}," is unavailable, install Terminal Control with ",{"type":39,"tag":53,"props":2145,"children":2147},{"className":2146},[],[2148],{"type":44,"value":2149},"cargo install terminal-control",{"type":44,"value":2151}," or ask the user which installed binary to use.",{"type":39,"tag":2153,"props":2154,"children":2155},"style",{},[2156],{"type":44,"value":2157},"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":2159,"total":88},[2160],{"slug":4,"name":4,"fn":5,"description":6,"org":2161,"tags":2162,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2163,2164,2165],{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"items":2167,"total":200},[2168,2186,2192,2209],{"slug":2169,"name":2169,"fn":2170,"description":2171,"org":2172,"tags":2173,"stars":2183,"repoUrl":2184,"updatedAt":2185},"opentui","build terminal UIs with OpenTUI","Build terminal UIs with OpenTUI. Covers core, components, audio, keymaps, React, Solid, plugins, testing, standalone executables, QR encoding, SSH, and Three.js WebGPU.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2174,2177,2180],{"name":2175,"slug":2176,"type":16},"Desktop","desktop",{"name":2178,"slug":2179,"type":16},"React","react",{"name":2181,"slug":2182,"type":16},"UI Components","ui-components",12436,"https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fopentui","2026-07-29T05:41:33.249647",{"slug":4,"name":4,"fn":5,"description":6,"org":2187,"tags":2188,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2189,2190,2191],{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"slug":2193,"name":2193,"fn":2194,"description":2195,"org":2196,"tags":2197,"stars":2206,"repoUrl":2207,"updatedAt":2208},"browser-control","automate browser interactions with Playwright","Drive the user's existing Chromium-family browser with deterministic Playwright. Use when asked to inspect, automate, test, or interact with a visible browser tab; continue an authenticated browser workflow; handle 2FA, passkeys, CAPTCHAs, or payment confirmation; record browser behavior; or capture an authenticated network flow.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2198,2199,2202,2205],{"name":14,"slug":15,"type":16},{"name":2200,"slug":2201,"type":16},"Browser Automation","browser-automation",{"name":2203,"slug":2204,"type":16},"Playwright","playwright",{"name":21,"slug":22,"type":16},205,"https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fbrowser-control","2026-07-23T05:40:34.252936",{"slug":2210,"name":2210,"fn":2211,"description":2212,"org":2213,"tags":2214,"stars":614,"repoUrl":2222,"updatedAt":2223},"opencode-drive","interact with OpenCode instances","Use when an agent needs to drive OpenCode with an Effect program or interact with an isolated instance",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2215,2216,2219],{"name":14,"slug":15,"type":16},{"name":2217,"slug":2218,"type":16},"Code Execution","code-execution",{"name":2220,"slug":2221,"type":16},"Engineering","engineering","https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fopencode-drive","2026-07-20T05:57:40.691365"]