[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-deepgram-monitor":3,"mdc-fcs4gy-key":35,"related-org-deepgram-monitor":1087,"related-repo-deepgram-monitor":1244},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":33,"mdContent":34},"monitor","monitor and audit terminal activity","Use when you need to watch, observe, or react to human terminal activity. Examples: \"monitor the terminal for errors\", \"watch what the user is doing and provide help\", \"audit terminal activity for security issues\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"deepgram","Deepgram","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fdeepgram.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Security","security","tag",{"name":17,"slug":18,"type":15},"Monitoring","monitoring",{"name":20,"slug":21,"type":15},"Audit","audit",{"name":23,"slug":24,"type":15},"CLI","cli",5,"https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fwsh","2026-07-12T08:29:52.772599",null,2,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":28},[],"https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fwsh\u002Ftree\u002FHEAD\u002Fskills\u002Fmonitor","---\nname: monitor\ndescription: >\n  Use when you need to watch, observe, or react to human terminal activity.\n  Examples: \"monitor the terminal for errors\", \"watch what the user is doing\n  and provide help\", \"audit terminal activity for security issues\".\n---\n\n> **IMPORTANT: EXECUTION CONTEXT**\n> This skill describes *what to do* — domain patterns and decision-making.\n> It does NOT describe *how* to call the API.\n>\n> 1. **If you have `wsh_*` tools** (check your toolkit for `wsh_send_input`,\n>    `wsh_get_screen`, etc.): use them directly. Operation names in this\n>    skill generally map to tool names (e.g., \"send input\" → `wsh_send_input`).\n>    When in doubt, list your available `wsh_*` tools.\n> 2. **If you do NOT have `wsh_*` tools**: you are in HTTP\u002Fcurl fallback mode.\n>    **DO NOT GUESS endpoints or CLI subcommands.**\n>    Load the full API reference first: search your workspace for\n>    `skills\u002Fcore\u002F` and read `SKILL.md`. It contains every endpoint\n>    with working curl examples and a bootstrap sequence.\n> 3. **Quick bootstrap**: `curl -sf --unix-socket ${XDG_RUNTIME_DIR:-\u002Ftmp}\u002Fwsh\u002Fdefault.http.sock http:\u002F\u002Flocalhost\u002Fhealth`\n>    — if that fails: `wsh server -L agent-$$ --ephemeral &` and retry.\n\n# wsh:monitor — Watching and Reacting\n\nIn this mode, you're not driving the terminal — the human is.\nYou're watching what happens and providing value by reacting:\nflagging errors, offering help, catching mistakes, maintaining\ncontext. You're a copilot, not the pilot.\n\n## Two Approaches\n\n### Polling (Simple)\nPeriodically read the screen and react to what you see.\nGood enough for most use cases:\n\n    read screen\n    analyze what changed\n    respond if needed (overlay, panel, conversation)\n    wait\n    repeat\n\nPolling is simple and straightforward. The downside is latency —\nyou're checking on an interval, so you might miss transient\noutput or react a few seconds late.\n\n### Event Subscription (Real-Time)\nSubscribe to real-time events via the WebSocket (see the\ncore skill for connection mechanics). Subscribe to the\nevents you care about — `lines` for output, `input` for\nkeystrokes — and the server pushes them as they happen.\n\nYou also get periodic `sync` snapshots when the terminal\ngoes quiet, giving you a natural checkpoint to analyze\nthe current state.\n\nUnder heavy output (e.g. build logs, test runners), the\nserver may coalesce events — delivering periodic `sync`\nsnapshots instead of individual line updates. Your code\nshould handle `sync` events to stay in sync regardless\nof output volume.\n\nFor most monitoring tasks, **start with polling**. Move to\nevent subscription when you need immediate reaction time.\n\n## Pattern Detection\n\nMonitoring is only useful if you know what to look for.\nHere are the categories of patterns worth detecting.\n\n### Errors and Failures\nRead the screen and scan for:\n- Compiler errors — \"error[E\", \"SyntaxError\", \"TypeError\"\n- Command failures — \"command not found\", \"No such file\"\n- Permission issues — \"Permission denied\", \"EACCES\"\n- Network failures — \"connection refused\", \"timeout\"\n- Stack traces — indented lines starting with \"at\" or \"in\"\n\nWhen detected: show a panel or overlay with a brief\nexplanation and suggested fix. Don't interrupt the human's\nflow — they may have already noticed.\n\n### Dangerous Commands\nWatch input events for risky patterns:\n- `rm -rf` with broad paths\n- `git push --force` to main\u002Fmaster\n- `DROP TABLE`, `DELETE FROM` without WHERE\n- `chmod 777`\n- Credentials or tokens being pasted into commands\n\nWhen detected: use input capture to intercept before\nexecution. Show an overlay asking for confirmation.\nRelease input if approved, discard if rejected.\n\n### Opportunities to Help\nNot everything is about preventing mistakes. Watch for\nmoments where help would be welcome:\n- A command was run three times with slightly different\n  flags — the human might be guessing\n- A long error message just scrolled by — summarize it\n- The human typed a command that has a better alternative\n- A build succeeded after repeated failures — celebrate\n\n### State Tracking\nMaintain a mental model of what the human is doing:\n- What directory are they in?\n- What project are they working on?\n- What was the last command they ran?\n- Are they in a flow state or exploring?\n\nThis context makes your reactions more relevant. An `rm`\nin a temp directory is different from an `rm` in the\nproject root.\n\n## How to Respond\n\nThe hardest part of monitoring isn't detection — it's\ncalibrating your response. Too noisy and the human ignores\nyou. Too quiet and you're useless.\n\n### Response Channels\n\n**Overlays** — lightweight, transient. Best for:\n- Brief warnings (\"this will delete 47 files\")\n- Quick tips (\"try --dry-run first\")\n- Acknowledgments (\"build passed\")\n\nPosition them near the relevant content. Remove them\nafter a few seconds or when the screen changes.\n\n**Panels** — persistent, always visible. Best for:\n- Running context summaries (\"working in: \u002Fproject,\n  branch: feature\u002Fauth, last command: cargo test\")\n- Session dashboards during long workflows\n- Error explanations that need to stay visible while\n  the human fixes the issue\n\nKeep panels compact. One or two lines. Update in place\nrather than creating new ones.\n\n**Input capture** — disruptive, use sparingly. Best for:\n- Blocking genuinely dangerous commands\n- Approval gates where the human explicitly asked for\n  your oversight\n\nNever capture input for something the human can easily\nundo. Reserve it for irreversible actions.\n\n**Conversation** — the chat with the human. Best for:\n- Detailed explanations that don't fit in an overlay\n- Suggestions that need discussion\n- Questions that require a thoughtful answer\n\n### Visual Structure\n\nwsh renders spans as-is — no built-in borders, padding,\nor separators. Build visual structure from text characters:\n\n- **Borders:** use box-drawing characters (`┌─┐│└─┘`)\n  for framed overlays and panels\n- **Padding:** add spaces for breathing room\n- **Separators:** use `│` between inline elements\n- **Full-width rules:** use `━` repeated to `cols` width\n  to separate panels from terminal content\n\nSee the wsh:visual-feedback skill for detailed guidance\non constructing visual elements.\n\n### Calibration Principles\n\n**Be quiet by default.** Only react when you have\nsomething genuinely useful to say. The human chose to\nwork in a terminal — they know what they're doing most\nof the time.\n\n**Severity drives channel.** Informational → overlay.\nImportant → panel. Critical → input capture. Complex →\nconversation.\n\n**Don't repeat yourself.** If you flagged an error and\nthe human re-runs the same command, they saw your\nwarning and chose to proceed. Don't flag it again.\n\n**Dissolve gracefully.** Remove overlays when they're\nstale. Update panels rather than accumulating them.\nLeave no visual debris.\n\n## Monitoring Recipes\n\n### Contextual Help\nWatch what command the human is typing or has just started.\nDetect the program and provide relevant, timely guidance:\n\n    read screen\n    # See: \"$ parted \u002Fdev\u002Fsda\"\n    # The human is partitioning a disk.\n\n    create overlay near the bottom of screen:\n      \"┌─ Parted Quick Ref ────────────────┐\"\n      \"│ Common schemes:                   │\"\n      \"│  GPT + EFI: mkpart ESP fat32      │\"\n      \"│    1MiB 513MiB                    │\"\n      \"│  Root: mkpart primary ext4        │\"\n      \"│    513MiB 100%                    │\"\n      \"│ Type 'help' for all commands      │\"\n      \"└───────────────────────────────────┘\"\n\nThis works for any tool. Detect the command, surface the\nmost useful information:\n- `git rebase` → show the rebase commands (pick, squash,\n  fixup, drop) and common flags\n- `docker build` → show relevant Dockerfile tips\n- `kubectl` → show the resource types and common flags\n- `ffmpeg` → show common codec and format options\n- `iptables` → show chain names and common patterns\n\n**Timing matters.** Show help when the human starts\nthe command, not after they've already finished. Update\nor remove the overlay when they move on to something else.\n\n**Be concise.** A help overlay is a cheat sheet, not a\nman page. Three to five lines of the most useful\ninformation. If the human needs more, they'll ask.\n\n### Error Summarizer\nLong error messages scroll by and are hard to parse.\nDetect them and provide a summary:\n\n    read screen or scrollback\n    # See: 47 lines of Rust compiler errors\n\n    create panel at bottom:\n      \"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"\n      \" 3 errors: missing lifetime in     \"\n      \" auth.rs:42, type mismatch in      \"\n      \" db.rs:108, unused import main.rs:3\"\n\n### Security Watchdog\nMonitor for sensitive data in terminal output:\n- API keys, tokens, passwords echoed to screen\n- AWS credentials in environment variables\n- Private keys displayed via cat\n\nWhen detected, overlay a warning. The data is already\non screen — you can't un-show it — but you can alert the\nhuman to rotate the credential.\n\n### Session Journaling\nMaintain a running summary panel of what's happened:\n\n    panel at top, 2 lines:\n      \"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"\n      \" Session: 14 cmds │ 2 errs │ 38 min\"\n      \" Last: cargo test (PASS) in \u002Fwsh   \"\n\nUpdate after each command completes. This gives the human\n(and you) a persistent sense of where things stand.\n\n## Pitfalls\n\n### Don't Be a Backseat Driver\nThe human is in control. If they run a command you'd do\ndifferently, that's their choice. Only intervene when\nsomething is genuinely dangerous or when they appear stuck.\n\"You should use --verbose\" is annoying. \"That rm will\ndelete your git repo\" is helpful.\n\n### Don't Obscure the Terminal\nOverlays and panels consume screen space. On a small\nterminal, a 3-line panel and two overlays can cover a\nsignificant portion of the visible content. Be aware of\nthe terminal dimensions (available in the screen response)\nand scale your visual elements accordingly. On a 24-row\nterminal, a 1-line panel is plenty.\n\n### Polling Frequency\nIf you're polling, don't hammer the API. Every request\ncosts a round-trip. Reasonable intervals:\n- Active monitoring (security): every 1-2 seconds\n- Contextual help: every 2-3 seconds\n- Session journaling: every 5-10 seconds\n\nMatch the frequency to the urgency. Most monitoring\ndoesn't need sub-second reaction time.\n\n### Don't Monitor What Wasn't Asked For\nIf the human asked you to watch for errors, don't also\nstart providing unsolicited style tips. Scope your\nmonitoring to what was requested. You can suggest\nexpanding scope, but don't do it silently.\n\n### Privacy\nThe human may type passwords, access personal accounts,\nor work on confidential material. If you're monitoring,\nyou see everything. Don't log, repeat, or comment on\nanything that looks private unless it's directly relevant\nto the monitoring task you were asked to perform.\n\n### Know When to Stop\nMonitoring is not a permanent state. When the human is\ndone with the task that warranted monitoring, tear down\nyour panels and overlays and stop polling. Ask if you\nshould continue rather than assuming.\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,192,199,204,211,218,223,235,240,246,267,280,299,311,317,322,328,333,362,367,373,378,436,441,447,452,475,481,486,509,529,535,540,546,556,574,579,589,607,612,622,635,640,650,668,674,679,753,758,764,774,784,794,804,810,816,821,830,835,893,903,913,919,924,933,939,944,962,967,973,978,987,992,998,1004,1009,1015,1020,1026,1031,1049,1054,1060,1065,1071,1076,1082],{"type":41,"tag":42,"props":43,"children":44},"element","blockquote",{},[45,73],{"type":41,"tag":46,"props":47,"children":48},"p",{},[49,56,58,64,66,71],{"type":41,"tag":50,"props":51,"children":52},"strong",{},[53],{"type":54,"value":55},"text","IMPORTANT: EXECUTION CONTEXT",{"type":54,"value":57},"\nThis skill describes ",{"type":41,"tag":59,"props":60,"children":61},"em",{},[62],{"type":54,"value":63},"what to do",{"type":54,"value":65}," — domain patterns and decision-making.\nIt does NOT describe ",{"type":41,"tag":59,"props":67,"children":68},{},[69],{"type":54,"value":70},"how",{"type":54,"value":72}," to call the API.",{"type":41,"tag":74,"props":75,"children":76},"ol",{},[77,127,166],{"type":41,"tag":78,"props":79,"children":80},"li",{},[81,95,97,103,105,111,113,118,120,125],{"type":41,"tag":50,"props":82,"children":83},{},[84,86,93],{"type":54,"value":85},"If you have ",{"type":41,"tag":87,"props":88,"children":90},"code",{"className":89},[],[91],{"type":54,"value":92},"wsh_*",{"type":54,"value":94}," tools",{"type":54,"value":96}," (check your toolkit for ",{"type":41,"tag":87,"props":98,"children":100},{"className":99},[],[101],{"type":54,"value":102},"wsh_send_input",{"type":54,"value":104},",\n",{"type":41,"tag":87,"props":106,"children":108},{"className":107},[],[109],{"type":54,"value":110},"wsh_get_screen",{"type":54,"value":112},", etc.): use them directly. Operation names in this\nskill generally map to tool names (e.g., \"send input\" → ",{"type":41,"tag":87,"props":114,"children":116},{"className":115},[],[117],{"type":54,"value":102},{"type":54,"value":119},").\nWhen in doubt, list your available ",{"type":41,"tag":87,"props":121,"children":123},{"className":122},[],[124],{"type":54,"value":92},{"type":54,"value":126}," tools.",{"type":41,"tag":78,"props":128,"children":129},{},[130,141,143,148,150,156,158,164],{"type":41,"tag":50,"props":131,"children":132},{},[133,135,140],{"type":54,"value":134},"If you do NOT have ",{"type":41,"tag":87,"props":136,"children":138},{"className":137},[],[139],{"type":54,"value":92},{"type":54,"value":94},{"type":54,"value":142},": you are in HTTP\u002Fcurl fallback mode.\n",{"type":41,"tag":50,"props":144,"children":145},{},[146],{"type":54,"value":147},"DO NOT GUESS endpoints or CLI subcommands.",{"type":54,"value":149},"\nLoad the full API reference first: search your workspace for\n",{"type":41,"tag":87,"props":151,"children":153},{"className":152},[],[154],{"type":54,"value":155},"skills\u002Fcore\u002F",{"type":54,"value":157}," and read ",{"type":41,"tag":87,"props":159,"children":161},{"className":160},[],[162],{"type":54,"value":163},"SKILL.md",{"type":54,"value":165},". It contains every endpoint\nwith working curl examples and a bootstrap sequence.",{"type":41,"tag":78,"props":167,"children":168},{},[169,174,176,182,184,190],{"type":41,"tag":50,"props":170,"children":171},{},[172],{"type":54,"value":173},"Quick bootstrap",{"type":54,"value":175},": ",{"type":41,"tag":87,"props":177,"children":179},{"className":178},[],[180],{"type":54,"value":181},"curl -sf --unix-socket ${XDG_RUNTIME_DIR:-\u002Ftmp}\u002Fwsh\u002Fdefault.http.sock http:\u002F\u002Flocalhost\u002Fhealth",{"type":54,"value":183},"\n— if that fails: ",{"type":41,"tag":87,"props":185,"children":187},{"className":186},[],[188],{"type":54,"value":189},"wsh server -L agent-$$ --ephemeral &",{"type":54,"value":191}," and retry.",{"type":41,"tag":193,"props":194,"children":196},"h1",{"id":195},"wshmonitor-watching-and-reacting",[197],{"type":54,"value":198},"wsh:monitor — Watching and Reacting",{"type":41,"tag":46,"props":200,"children":201},{},[202],{"type":54,"value":203},"In this mode, you're not driving the terminal — the human is.\nYou're watching what happens and providing value by reacting:\nflagging errors, offering help, catching mistakes, maintaining\ncontext. You're a copilot, not the pilot.",{"type":41,"tag":205,"props":206,"children":208},"h2",{"id":207},"two-approaches",[209],{"type":54,"value":210},"Two Approaches",{"type":41,"tag":212,"props":213,"children":215},"h3",{"id":214},"polling-simple",[216],{"type":54,"value":217},"Polling (Simple)",{"type":41,"tag":46,"props":219,"children":220},{},[221],{"type":54,"value":222},"Periodically read the screen and react to what you see.\nGood enough for most use cases:",{"type":41,"tag":224,"props":225,"children":229},"pre",{"className":226,"code":228,"language":54},[227],"language-text","read screen\nanalyze what changed\nrespond if needed (overlay, panel, conversation)\nwait\nrepeat\n",[230],{"type":41,"tag":87,"props":231,"children":233},{"__ignoreMap":232},"",[234],{"type":54,"value":228},{"type":41,"tag":46,"props":236,"children":237},{},[238],{"type":54,"value":239},"Polling is simple and straightforward. The downside is latency —\nyou're checking on an interval, so you might miss transient\noutput or react a few seconds late.",{"type":41,"tag":212,"props":241,"children":243},{"id":242},"event-subscription-real-time",[244],{"type":54,"value":245},"Event Subscription (Real-Time)",{"type":41,"tag":46,"props":247,"children":248},{},[249,251,257,259,265],{"type":54,"value":250},"Subscribe to real-time events via the WebSocket (see the\ncore skill for connection mechanics). Subscribe to the\nevents you care about — ",{"type":41,"tag":87,"props":252,"children":254},{"className":253},[],[255],{"type":54,"value":256},"lines",{"type":54,"value":258}," for output, ",{"type":41,"tag":87,"props":260,"children":262},{"className":261},[],[263],{"type":54,"value":264},"input",{"type":54,"value":266}," for\nkeystrokes — and the server pushes them as they happen.",{"type":41,"tag":46,"props":268,"children":269},{},[270,272,278],{"type":54,"value":271},"You also get periodic ",{"type":41,"tag":87,"props":273,"children":275},{"className":274},[],[276],{"type":54,"value":277},"sync",{"type":54,"value":279}," snapshots when the terminal\ngoes quiet, giving you a natural checkpoint to analyze\nthe current state.",{"type":41,"tag":46,"props":281,"children":282},{},[283,285,290,292,297],{"type":54,"value":284},"Under heavy output (e.g. build logs, test runners), the\nserver may coalesce events — delivering periodic ",{"type":41,"tag":87,"props":286,"children":288},{"className":287},[],[289],{"type":54,"value":277},{"type":54,"value":291},"\nsnapshots instead of individual line updates. Your code\nshould handle ",{"type":41,"tag":87,"props":293,"children":295},{"className":294},[],[296],{"type":54,"value":277},{"type":54,"value":298}," events to stay in sync regardless\nof output volume.",{"type":41,"tag":46,"props":300,"children":301},{},[302,304,309],{"type":54,"value":303},"For most monitoring tasks, ",{"type":41,"tag":50,"props":305,"children":306},{},[307],{"type":54,"value":308},"start with polling",{"type":54,"value":310},". Move to\nevent subscription when you need immediate reaction time.",{"type":41,"tag":205,"props":312,"children":314},{"id":313},"pattern-detection",[315],{"type":54,"value":316},"Pattern Detection",{"type":41,"tag":46,"props":318,"children":319},{},[320],{"type":54,"value":321},"Monitoring is only useful if you know what to look for.\nHere are the categories of patterns worth detecting.",{"type":41,"tag":212,"props":323,"children":325},{"id":324},"errors-and-failures",[326],{"type":54,"value":327},"Errors and Failures",{"type":41,"tag":46,"props":329,"children":330},{},[331],{"type":54,"value":332},"Read the screen and scan for:",{"type":41,"tag":334,"props":335,"children":336},"ul",{},[337,342,347,352,357],{"type":41,"tag":78,"props":338,"children":339},{},[340],{"type":54,"value":341},"Compiler errors — \"error[E\", \"SyntaxError\", \"TypeError\"",{"type":41,"tag":78,"props":343,"children":344},{},[345],{"type":54,"value":346},"Command failures — \"command not found\", \"No such file\"",{"type":41,"tag":78,"props":348,"children":349},{},[350],{"type":54,"value":351},"Permission issues — \"Permission denied\", \"EACCES\"",{"type":41,"tag":78,"props":353,"children":354},{},[355],{"type":54,"value":356},"Network failures — \"connection refused\", \"timeout\"",{"type":41,"tag":78,"props":358,"children":359},{},[360],{"type":54,"value":361},"Stack traces — indented lines starting with \"at\" or \"in\"",{"type":41,"tag":46,"props":363,"children":364},{},[365],{"type":54,"value":366},"When detected: show a panel or overlay with a brief\nexplanation and suggested fix. Don't interrupt the human's\nflow — they may have already noticed.",{"type":41,"tag":212,"props":368,"children":370},{"id":369},"dangerous-commands",[371],{"type":54,"value":372},"Dangerous Commands",{"type":41,"tag":46,"props":374,"children":375},{},[376],{"type":54,"value":377},"Watch input events for risky patterns:",{"type":41,"tag":334,"props":379,"children":380},{},[381,392,403,422,431],{"type":41,"tag":78,"props":382,"children":383},{},[384,390],{"type":41,"tag":87,"props":385,"children":387},{"className":386},[],[388],{"type":54,"value":389},"rm -rf",{"type":54,"value":391}," with broad paths",{"type":41,"tag":78,"props":393,"children":394},{},[395,401],{"type":41,"tag":87,"props":396,"children":398},{"className":397},[],[399],{"type":54,"value":400},"git push --force",{"type":54,"value":402}," to main\u002Fmaster",{"type":41,"tag":78,"props":404,"children":405},{},[406,412,414,420],{"type":41,"tag":87,"props":407,"children":409},{"className":408},[],[410],{"type":54,"value":411},"DROP TABLE",{"type":54,"value":413},", ",{"type":41,"tag":87,"props":415,"children":417},{"className":416},[],[418],{"type":54,"value":419},"DELETE FROM",{"type":54,"value":421}," without WHERE",{"type":41,"tag":78,"props":423,"children":424},{},[425],{"type":41,"tag":87,"props":426,"children":428},{"className":427},[],[429],{"type":54,"value":430},"chmod 777",{"type":41,"tag":78,"props":432,"children":433},{},[434],{"type":54,"value":435},"Credentials or tokens being pasted into commands",{"type":41,"tag":46,"props":437,"children":438},{},[439],{"type":54,"value":440},"When detected: use input capture to intercept before\nexecution. Show an overlay asking for confirmation.\nRelease input if approved, discard if rejected.",{"type":41,"tag":212,"props":442,"children":444},{"id":443},"opportunities-to-help",[445],{"type":54,"value":446},"Opportunities to Help",{"type":41,"tag":46,"props":448,"children":449},{},[450],{"type":54,"value":451},"Not everything is about preventing mistakes. Watch for\nmoments where help would be welcome:",{"type":41,"tag":334,"props":453,"children":454},{},[455,460,465,470],{"type":41,"tag":78,"props":456,"children":457},{},[458],{"type":54,"value":459},"A command was run three times with slightly different\nflags — the human might be guessing",{"type":41,"tag":78,"props":461,"children":462},{},[463],{"type":54,"value":464},"A long error message just scrolled by — summarize it",{"type":41,"tag":78,"props":466,"children":467},{},[468],{"type":54,"value":469},"The human typed a command that has a better alternative",{"type":41,"tag":78,"props":471,"children":472},{},[473],{"type":54,"value":474},"A build succeeded after repeated failures — celebrate",{"type":41,"tag":212,"props":476,"children":478},{"id":477},"state-tracking",[479],{"type":54,"value":480},"State Tracking",{"type":41,"tag":46,"props":482,"children":483},{},[484],{"type":54,"value":485},"Maintain a mental model of what the human is doing:",{"type":41,"tag":334,"props":487,"children":488},{},[489,494,499,504],{"type":41,"tag":78,"props":490,"children":491},{},[492],{"type":54,"value":493},"What directory are they in?",{"type":41,"tag":78,"props":495,"children":496},{},[497],{"type":54,"value":498},"What project are they working on?",{"type":41,"tag":78,"props":500,"children":501},{},[502],{"type":54,"value":503},"What was the last command they ran?",{"type":41,"tag":78,"props":505,"children":506},{},[507],{"type":54,"value":508},"Are they in a flow state or exploring?",{"type":41,"tag":46,"props":510,"children":511},{},[512,514,520,522,527],{"type":54,"value":513},"This context makes your reactions more relevant. An ",{"type":41,"tag":87,"props":515,"children":517},{"className":516},[],[518],{"type":54,"value":519},"rm",{"type":54,"value":521},"\nin a temp directory is different from an ",{"type":41,"tag":87,"props":523,"children":525},{"className":524},[],[526],{"type":54,"value":519},{"type":54,"value":528}," in the\nproject root.",{"type":41,"tag":205,"props":530,"children":532},{"id":531},"how-to-respond",[533],{"type":54,"value":534},"How to Respond",{"type":41,"tag":46,"props":536,"children":537},{},[538],{"type":54,"value":539},"The hardest part of monitoring isn't detection — it's\ncalibrating your response. Too noisy and the human ignores\nyou. Too quiet and you're useless.",{"type":41,"tag":212,"props":541,"children":543},{"id":542},"response-channels",[544],{"type":54,"value":545},"Response Channels",{"type":41,"tag":46,"props":547,"children":548},{},[549,554],{"type":41,"tag":50,"props":550,"children":551},{},[552],{"type":54,"value":553},"Overlays",{"type":54,"value":555}," — lightweight, transient. Best for:",{"type":41,"tag":334,"props":557,"children":558},{},[559,564,569],{"type":41,"tag":78,"props":560,"children":561},{},[562],{"type":54,"value":563},"Brief warnings (\"this will delete 47 files\")",{"type":41,"tag":78,"props":565,"children":566},{},[567],{"type":54,"value":568},"Quick tips (\"try --dry-run first\")",{"type":41,"tag":78,"props":570,"children":571},{},[572],{"type":54,"value":573},"Acknowledgments (\"build passed\")",{"type":41,"tag":46,"props":575,"children":576},{},[577],{"type":54,"value":578},"Position them near the relevant content. Remove them\nafter a few seconds or when the screen changes.",{"type":41,"tag":46,"props":580,"children":581},{},[582,587],{"type":41,"tag":50,"props":583,"children":584},{},[585],{"type":54,"value":586},"Panels",{"type":54,"value":588}," — persistent, always visible. Best for:",{"type":41,"tag":334,"props":590,"children":591},{},[592,597,602],{"type":41,"tag":78,"props":593,"children":594},{},[595],{"type":54,"value":596},"Running context summaries (\"working in: \u002Fproject,\nbranch: feature\u002Fauth, last command: cargo test\")",{"type":41,"tag":78,"props":598,"children":599},{},[600],{"type":54,"value":601},"Session dashboards during long workflows",{"type":41,"tag":78,"props":603,"children":604},{},[605],{"type":54,"value":606},"Error explanations that need to stay visible while\nthe human fixes the issue",{"type":41,"tag":46,"props":608,"children":609},{},[610],{"type":54,"value":611},"Keep panels compact. One or two lines. Update in place\nrather than creating new ones.",{"type":41,"tag":46,"props":613,"children":614},{},[615,620],{"type":41,"tag":50,"props":616,"children":617},{},[618],{"type":54,"value":619},"Input capture",{"type":54,"value":621}," — disruptive, use sparingly. Best for:",{"type":41,"tag":334,"props":623,"children":624},{},[625,630],{"type":41,"tag":78,"props":626,"children":627},{},[628],{"type":54,"value":629},"Blocking genuinely dangerous commands",{"type":41,"tag":78,"props":631,"children":632},{},[633],{"type":54,"value":634},"Approval gates where the human explicitly asked for\nyour oversight",{"type":41,"tag":46,"props":636,"children":637},{},[638],{"type":54,"value":639},"Never capture input for something the human can easily\nundo. Reserve it for irreversible actions.",{"type":41,"tag":46,"props":641,"children":642},{},[643,648],{"type":41,"tag":50,"props":644,"children":645},{},[646],{"type":54,"value":647},"Conversation",{"type":54,"value":649}," — the chat with the human. Best for:",{"type":41,"tag":334,"props":651,"children":652},{},[653,658,663],{"type":41,"tag":78,"props":654,"children":655},{},[656],{"type":54,"value":657},"Detailed explanations that don't fit in an overlay",{"type":41,"tag":78,"props":659,"children":660},{},[661],{"type":54,"value":662},"Suggestions that need discussion",{"type":41,"tag":78,"props":664,"children":665},{},[666],{"type":54,"value":667},"Questions that require a thoughtful answer",{"type":41,"tag":212,"props":669,"children":671},{"id":670},"visual-structure",[672],{"type":54,"value":673},"Visual Structure",{"type":41,"tag":46,"props":675,"children":676},{},[677],{"type":54,"value":678},"wsh renders spans as-is — no built-in borders, padding,\nor separators. Build visual structure from text characters:",{"type":41,"tag":334,"props":680,"children":681},{},[682,700,710,728],{"type":41,"tag":78,"props":683,"children":684},{},[685,690,692,698],{"type":41,"tag":50,"props":686,"children":687},{},[688],{"type":54,"value":689},"Borders:",{"type":54,"value":691}," use box-drawing characters (",{"type":41,"tag":87,"props":693,"children":695},{"className":694},[],[696],{"type":54,"value":697},"┌─┐│└─┘",{"type":54,"value":699},")\nfor framed overlays and panels",{"type":41,"tag":78,"props":701,"children":702},{},[703,708],{"type":41,"tag":50,"props":704,"children":705},{},[706],{"type":54,"value":707},"Padding:",{"type":54,"value":709}," add spaces for breathing room",{"type":41,"tag":78,"props":711,"children":712},{},[713,718,720,726],{"type":41,"tag":50,"props":714,"children":715},{},[716],{"type":54,"value":717},"Separators:",{"type":54,"value":719}," use ",{"type":41,"tag":87,"props":721,"children":723},{"className":722},[],[724],{"type":54,"value":725},"│",{"type":54,"value":727}," between inline elements",{"type":41,"tag":78,"props":729,"children":730},{},[731,736,737,743,745,751],{"type":41,"tag":50,"props":732,"children":733},{},[734],{"type":54,"value":735},"Full-width rules:",{"type":54,"value":719},{"type":41,"tag":87,"props":738,"children":740},{"className":739},[],[741],{"type":54,"value":742},"━",{"type":54,"value":744}," repeated to ",{"type":41,"tag":87,"props":746,"children":748},{"className":747},[],[749],{"type":54,"value":750},"cols",{"type":54,"value":752}," width\nto separate panels from terminal content",{"type":41,"tag":46,"props":754,"children":755},{},[756],{"type":54,"value":757},"See the wsh:visual-feedback skill for detailed guidance\non constructing visual elements.",{"type":41,"tag":212,"props":759,"children":761},{"id":760},"calibration-principles",[762],{"type":54,"value":763},"Calibration Principles",{"type":41,"tag":46,"props":765,"children":766},{},[767,772],{"type":41,"tag":50,"props":768,"children":769},{},[770],{"type":54,"value":771},"Be quiet by default.",{"type":54,"value":773}," Only react when you have\nsomething genuinely useful to say. The human chose to\nwork in a terminal — they know what they're doing most\nof the time.",{"type":41,"tag":46,"props":775,"children":776},{},[777,782],{"type":41,"tag":50,"props":778,"children":779},{},[780],{"type":54,"value":781},"Severity drives channel.",{"type":54,"value":783}," Informational → overlay.\nImportant → panel. Critical → input capture. Complex →\nconversation.",{"type":41,"tag":46,"props":785,"children":786},{},[787,792],{"type":41,"tag":50,"props":788,"children":789},{},[790],{"type":54,"value":791},"Don't repeat yourself.",{"type":54,"value":793}," If you flagged an error and\nthe human re-runs the same command, they saw your\nwarning and chose to proceed. Don't flag it again.",{"type":41,"tag":46,"props":795,"children":796},{},[797,802],{"type":41,"tag":50,"props":798,"children":799},{},[800],{"type":54,"value":801},"Dissolve gracefully.",{"type":54,"value":803}," Remove overlays when they're\nstale. Update panels rather than accumulating them.\nLeave no visual debris.",{"type":41,"tag":205,"props":805,"children":807},{"id":806},"monitoring-recipes",[808],{"type":54,"value":809},"Monitoring Recipes",{"type":41,"tag":212,"props":811,"children":813},{"id":812},"contextual-help",[814],{"type":54,"value":815},"Contextual Help",{"type":41,"tag":46,"props":817,"children":818},{},[819],{"type":54,"value":820},"Watch what command the human is typing or has just started.\nDetect the program and provide relevant, timely guidance:",{"type":41,"tag":224,"props":822,"children":825},{"className":823,"code":824,"language":54},[227],"read screen\n# See: \"$ parted \u002Fdev\u002Fsda\"\n# The human is partitioning a disk.\n\ncreate overlay near the bottom of screen:\n  \"┌─ Parted Quick Ref ────────────────┐\"\n  \"│ Common schemes:                   │\"\n  \"│  GPT + EFI: mkpart ESP fat32      │\"\n  \"│    1MiB 513MiB                    │\"\n  \"│  Root: mkpart primary ext4        │\"\n  \"│    513MiB 100%                    │\"\n  \"│ Type 'help' for all commands      │\"\n  \"└───────────────────────────────────┘\"\n",[826],{"type":41,"tag":87,"props":827,"children":828},{"__ignoreMap":232},[829],{"type":54,"value":824},{"type":41,"tag":46,"props":831,"children":832},{},[833],{"type":54,"value":834},"This works for any tool. Detect the command, surface the\nmost useful information:",{"type":41,"tag":334,"props":836,"children":837},{},[838,849,860,871,882],{"type":41,"tag":78,"props":839,"children":840},{},[841,847],{"type":41,"tag":87,"props":842,"children":844},{"className":843},[],[845],{"type":54,"value":846},"git rebase",{"type":54,"value":848}," → show the rebase commands (pick, squash,\nfixup, drop) and common flags",{"type":41,"tag":78,"props":850,"children":851},{},[852,858],{"type":41,"tag":87,"props":853,"children":855},{"className":854},[],[856],{"type":54,"value":857},"docker build",{"type":54,"value":859}," → show relevant Dockerfile tips",{"type":41,"tag":78,"props":861,"children":862},{},[863,869],{"type":41,"tag":87,"props":864,"children":866},{"className":865},[],[867],{"type":54,"value":868},"kubectl",{"type":54,"value":870}," → show the resource types and common flags",{"type":41,"tag":78,"props":872,"children":873},{},[874,880],{"type":41,"tag":87,"props":875,"children":877},{"className":876},[],[878],{"type":54,"value":879},"ffmpeg",{"type":54,"value":881}," → show common codec and format options",{"type":41,"tag":78,"props":883,"children":884},{},[885,891],{"type":41,"tag":87,"props":886,"children":888},{"className":887},[],[889],{"type":54,"value":890},"iptables",{"type":54,"value":892}," → show chain names and common patterns",{"type":41,"tag":46,"props":894,"children":895},{},[896,901],{"type":41,"tag":50,"props":897,"children":898},{},[899],{"type":54,"value":900},"Timing matters.",{"type":54,"value":902}," Show help when the human starts\nthe command, not after they've already finished. Update\nor remove the overlay when they move on to something else.",{"type":41,"tag":46,"props":904,"children":905},{},[906,911],{"type":41,"tag":50,"props":907,"children":908},{},[909],{"type":54,"value":910},"Be concise.",{"type":54,"value":912}," A help overlay is a cheat sheet, not a\nman page. Three to five lines of the most useful\ninformation. If the human needs more, they'll ask.",{"type":41,"tag":212,"props":914,"children":916},{"id":915},"error-summarizer",[917],{"type":54,"value":918},"Error Summarizer",{"type":41,"tag":46,"props":920,"children":921},{},[922],{"type":54,"value":923},"Long error messages scroll by and are hard to parse.\nDetect them and provide a summary:",{"type":41,"tag":224,"props":925,"children":928},{"className":926,"code":927,"language":54},[227],"read screen or scrollback\n# See: 47 lines of Rust compiler errors\n\ncreate panel at bottom:\n  \"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"\n  \" 3 errors: missing lifetime in     \"\n  \" auth.rs:42, type mismatch in      \"\n  \" db.rs:108, unused import main.rs:3\"\n",[929],{"type":41,"tag":87,"props":930,"children":931},{"__ignoreMap":232},[932],{"type":54,"value":927},{"type":41,"tag":212,"props":934,"children":936},{"id":935},"security-watchdog",[937],{"type":54,"value":938},"Security Watchdog",{"type":41,"tag":46,"props":940,"children":941},{},[942],{"type":54,"value":943},"Monitor for sensitive data in terminal output:",{"type":41,"tag":334,"props":945,"children":946},{},[947,952,957],{"type":41,"tag":78,"props":948,"children":949},{},[950],{"type":54,"value":951},"API keys, tokens, passwords echoed to screen",{"type":41,"tag":78,"props":953,"children":954},{},[955],{"type":54,"value":956},"AWS credentials in environment variables",{"type":41,"tag":78,"props":958,"children":959},{},[960],{"type":54,"value":961},"Private keys displayed via cat",{"type":41,"tag":46,"props":963,"children":964},{},[965],{"type":54,"value":966},"When detected, overlay a warning. The data is already\non screen — you can't un-show it — but you can alert the\nhuman to rotate the credential.",{"type":41,"tag":212,"props":968,"children":970},{"id":969},"session-journaling",[971],{"type":54,"value":972},"Session Journaling",{"type":41,"tag":46,"props":974,"children":975},{},[976],{"type":54,"value":977},"Maintain a running summary panel of what's happened:",{"type":41,"tag":224,"props":979,"children":982},{"className":980,"code":981,"language":54},[227],"panel at top, 2 lines:\n  \"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"\n  \" Session: 14 cmds │ 2 errs │ 38 min\"\n  \" Last: cargo test (PASS) in \u002Fwsh   \"\n",[983],{"type":41,"tag":87,"props":984,"children":985},{"__ignoreMap":232},[986],{"type":54,"value":981},{"type":41,"tag":46,"props":988,"children":989},{},[990],{"type":54,"value":991},"Update after each command completes. This gives the human\n(and you) a persistent sense of where things stand.",{"type":41,"tag":205,"props":993,"children":995},{"id":994},"pitfalls",[996],{"type":54,"value":997},"Pitfalls",{"type":41,"tag":212,"props":999,"children":1001},{"id":1000},"dont-be-a-backseat-driver",[1002],{"type":54,"value":1003},"Don't Be a Backseat Driver",{"type":41,"tag":46,"props":1005,"children":1006},{},[1007],{"type":54,"value":1008},"The human is in control. If they run a command you'd do\ndifferently, that's their choice. Only intervene when\nsomething is genuinely dangerous or when they appear stuck.\n\"You should use --verbose\" is annoying. \"That rm will\ndelete your git repo\" is helpful.",{"type":41,"tag":212,"props":1010,"children":1012},{"id":1011},"dont-obscure-the-terminal",[1013],{"type":54,"value":1014},"Don't Obscure the Terminal",{"type":41,"tag":46,"props":1016,"children":1017},{},[1018],{"type":54,"value":1019},"Overlays and panels consume screen space. On a small\nterminal, a 3-line panel and two overlays can cover a\nsignificant portion of the visible content. Be aware of\nthe terminal dimensions (available in the screen response)\nand scale your visual elements accordingly. On a 24-row\nterminal, a 1-line panel is plenty.",{"type":41,"tag":212,"props":1021,"children":1023},{"id":1022},"polling-frequency",[1024],{"type":54,"value":1025},"Polling Frequency",{"type":41,"tag":46,"props":1027,"children":1028},{},[1029],{"type":54,"value":1030},"If you're polling, don't hammer the API. Every request\ncosts a round-trip. Reasonable intervals:",{"type":41,"tag":334,"props":1032,"children":1033},{},[1034,1039,1044],{"type":41,"tag":78,"props":1035,"children":1036},{},[1037],{"type":54,"value":1038},"Active monitoring (security): every 1-2 seconds",{"type":41,"tag":78,"props":1040,"children":1041},{},[1042],{"type":54,"value":1043},"Contextual help: every 2-3 seconds",{"type":41,"tag":78,"props":1045,"children":1046},{},[1047],{"type":54,"value":1048},"Session journaling: every 5-10 seconds",{"type":41,"tag":46,"props":1050,"children":1051},{},[1052],{"type":54,"value":1053},"Match the frequency to the urgency. Most monitoring\ndoesn't need sub-second reaction time.",{"type":41,"tag":212,"props":1055,"children":1057},{"id":1056},"dont-monitor-what-wasnt-asked-for",[1058],{"type":54,"value":1059},"Don't Monitor What Wasn't Asked For",{"type":41,"tag":46,"props":1061,"children":1062},{},[1063],{"type":54,"value":1064},"If the human asked you to watch for errors, don't also\nstart providing unsolicited style tips. Scope your\nmonitoring to what was requested. You can suggest\nexpanding scope, but don't do it silently.",{"type":41,"tag":212,"props":1066,"children":1068},{"id":1067},"privacy",[1069],{"type":54,"value":1070},"Privacy",{"type":41,"tag":46,"props":1072,"children":1073},{},[1074],{"type":54,"value":1075},"The human may type passwords, access personal accounts,\nor work on confidential material. If you're monitoring,\nyou see everything. Don't log, repeat, or comment on\nanything that looks private unless it's directly relevant\nto the monitoring task you were asked to perform.",{"type":41,"tag":212,"props":1077,"children":1079},{"id":1078},"know-when-to-stop",[1080],{"type":54,"value":1081},"Know When to Stop",{"type":41,"tag":46,"props":1083,"children":1084},{},[1085],{"type":54,"value":1086},"Monitoring is not a permanent state. When the human is\ndone with the task that warranted monitoring, tear down\nyour panels and overlays and stop polling. Ask if you\nshould continue rather than assuming.",{"items":1088,"total":1243},[1089,1105,1119,1133,1145,1157,1167,1178,1194,1208,1220,1232],{"slug":1090,"name":1090,"fn":1091,"description":1092,"org":1093,"tags":1094,"stars":1102,"repoUrl":1103,"updatedAt":1104},"deepclaw-voice","configure phone calls with Deepgram Voice","Set up phone calling to OpenClaw using Deepgram Voice Agent API",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1095,1098,1099],{"name":1096,"slug":1097,"type":15},"API Development","api-development",{"name":9,"slug":8,"type":15},{"name":1100,"slug":1101,"type":15},"Voice","voice",78,"https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fdeepclaw","2026-07-12T08:29:25.371332",{"slug":1106,"name":1106,"fn":1107,"description":1108,"org":1109,"tags":1110,"stars":1116,"repoUrl":1117,"updatedAt":1118},"1password","manage secrets with 1Password CLI","Set up and use 1Password CLI (op). Use when installing the CLI, enabling desktop app integration, signing in (single or multi-account), or reading\u002Finjecting\u002Frunning secrets via op.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1111,1114,1115],{"name":1112,"slug":1113,"type":15},"Automation","automation",{"name":23,"slug":24,"type":15},{"name":13,"slug":14,"type":15},23,"https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fdglabs-deepclaw","2026-07-12T08:28:49.991939",{"slug":1120,"name":1120,"fn":1121,"description":1122,"org":1123,"tags":1124,"stars":1116,"repoUrl":1117,"updatedAt":1132},"apple-notes","manage Apple Notes on macOS","Manage Apple Notes via the `memo` CLI on macOS (create, view, edit, delete, search, move, and export notes). Use when a user asks OpenClaw to add a note, list notes, search notes, or manage note folders.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1125,1126,1129],{"name":23,"slug":24,"type":15},{"name":1127,"slug":1128,"type":15},"Knowledge Management","knowledge-management",{"name":1130,"slug":1131,"type":15},"macOS","macos","2026-07-12T08:29:01.538106",{"slug":1134,"name":1134,"fn":1135,"description":1136,"org":1137,"tags":1138,"stars":1116,"repoUrl":1117,"updatedAt":1144},"apple-reminders","manage Apple Reminders via CLI","Manage Apple Reminders via the `remindctl` CLI on macOS (list, add, edit, complete, delete). Supports lists, date filters, and JSON\u002Fplain output.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1139,1140,1141],{"name":23,"slug":24,"type":15},{"name":1130,"slug":1131,"type":15},{"name":1142,"slug":1143,"type":15},"Task Management","task-management","2026-07-12T08:29:14.035414",{"slug":1146,"name":1146,"fn":1147,"description":1148,"org":1149,"tags":1150,"stars":1116,"repoUrl":1117,"updatedAt":1156},"bear-notes","manage Bear notes via CLI","Create, search, and manage Bear notes via grizzly CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1151,1152,1153],{"name":23,"slug":24,"type":15},{"name":1127,"slug":1128,"type":15},{"name":1154,"slug":1155,"type":15},"Notes","notes","2026-07-12T08:28:51.246011",{"slug":1158,"name":1158,"fn":1159,"description":1160,"org":1161,"tags":1162,"stars":1116,"repoUrl":1117,"updatedAt":1166},"blogwatcher","monitor blogs and RSS feeds","Monitor blogs and RSS\u002FAtom feeds for updates using the blogwatcher CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1163,1164,1165],{"name":1112,"slug":1113,"type":15},{"name":23,"slug":24,"type":15},{"name":17,"slug":18,"type":15},"2026-07-12T08:29:02.762321",{"slug":1168,"name":1168,"fn":1169,"description":1170,"org":1171,"tags":1172,"stars":1116,"repoUrl":1117,"updatedAt":1177},"blucli","control BluOS audio playback","BluOS CLI (blu) for discovery, playback, grouping, and volume.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1173,1176],{"name":1174,"slug":1175,"type":15},"Audio","audio",{"name":23,"slug":24,"type":15},"2026-07-12T08:28:21.009637",{"slug":1179,"name":1179,"fn":1180,"description":1181,"org":1182,"tags":1183,"stars":1116,"repoUrl":1117,"updatedAt":1193},"bluebubbles","send and manage iMessages","Use when you need to send or manage iMessages via BlueBubbles (recommended iMessage integration). Calls go through the generic message tool with channel=\"bluebubbles\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1184,1187,1190],{"name":1185,"slug":1186,"type":15},"Communications","communications",{"name":1188,"slug":1189,"type":15},"iMessage","imessage",{"name":1191,"slug":1192,"type":15},"Messaging","messaging","2026-07-12T08:28:57.517914",{"slug":1195,"name":1195,"fn":1196,"description":1197,"org":1198,"tags":1199,"stars":1116,"repoUrl":1117,"updatedAt":1207},"camsnap","capture frames and clips from cameras","Capture frames or clips from RTSP\u002FONVIF cameras.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1200,1201,1204],{"name":1112,"slug":1113,"type":15},{"name":1202,"slug":1203,"type":15},"Camera","camera",{"name":1205,"slug":1206,"type":15},"Media","media","2026-07-12T08:28:28.096134",{"slug":1209,"name":1209,"fn":1210,"description":1211,"org":1212,"tags":1213,"stars":1116,"repoUrl":1117,"updatedAt":1219},"clawhub","manage agent skills with ClawHub","Use the ClawHub CLI to search, install, update, and publish agent skills from clawhub.com. Use when you need to fetch new skills on the fly, sync installed skills to latest or a specific version, or publish new\u002Fupdated skill folders with the npm-installed clawhub CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1214,1217,1218],{"name":1215,"slug":1216,"type":15},"Agents","agents",{"name":1112,"slug":1113,"type":15},{"name":23,"slug":24,"type":15},"2026-07-12T08:28:30.589001",{"slug":1221,"name":1221,"fn":1222,"description":1223,"org":1224,"tags":1225,"stars":1116,"repoUrl":1117,"updatedAt":1231},"coding-agent","run coding agents for programmatic control","Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1226,1227,1228],{"name":1215,"slug":1216,"type":15},{"name":1112,"slug":1113,"type":15},{"name":1229,"slug":1230,"type":15},"Coding","coding","2026-07-12T08:29:08.6658",{"slug":1233,"name":1233,"fn":1234,"description":1235,"org":1236,"tags":1237,"stars":1116,"repoUrl":1117,"updatedAt":1242},"eightctl","control Eight Sleep pod settings","Control Eight Sleep pods (status, temperature, alarms, schedules).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1238,1239],{"name":1112,"slug":1113,"type":15},{"name":1240,"slug":1241,"type":15},"Hardware","hardware","2026-07-12T08:28:39.322181",73,{"items":1245,"total":1329},[1246,1259,1273,1284,1296,1306,1318],{"slug":1247,"name":1247,"fn":1248,"description":1249,"org":1250,"tags":1251,"stars":25,"repoUrl":26,"updatedAt":1258},"agent-orchestration","orchestrate multiple AI agents","Use when you need to launch and drive other AI agents (Claude Code, Aider, Codex, etc.) through their terminal interfaces via wsh. Examples: \"run multiple Claude Code sessions in parallel on different tasks\", \"feed a task to an AI agent and handle its approval prompts\", \"coordinate several AI agents working on subtasks of a larger project\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1252,1253,1254,1255],{"name":1215,"slug":1216,"type":15},{"name":1112,"slug":1113,"type":15},{"name":23,"slug":24,"type":15},{"name":1256,"slug":1257,"type":15},"Multi-Agent","multi-agent","2026-07-12T08:29:40.028618",{"slug":1260,"name":1260,"fn":1261,"description":1262,"org":1263,"tags":1264,"stars":25,"repoUrl":26,"updatedAt":1272},"cluster-orchestration","orchestrate sessions across federated clusters","Use when you need to manage sessions across multiple wsh servers in a federated cluster. Examples: \"distribute builds across several machines\", \"create sessions on a specific backend\", \"monitor health across a cluster of servers\", \"coordinate work across server boundaries\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1265,1268,1269],{"name":1266,"slug":1267,"type":15},"Architecture","architecture",{"name":1112,"slug":1113,"type":15},{"name":1270,"slug":1271,"type":15},"Engineering","engineering","2026-07-12T08:29:38.810244",{"slug":1274,"name":1274,"fn":1275,"description":1276,"org":1277,"tags":1278,"stars":25,"repoUrl":26,"updatedAt":1283},"core","authenticate and bootstrap wsh terminal operations","REQUIRED before any wsh terminal operation when you do NOT have wsh_* MCP tools. Contains the complete HTTP API reference with working curl examples, bootstrap sequence, and authentication guide. wsh has no CLI subcommands for programmatic use — do NOT run 'wsh \u003Cverb>' commands or guess endpoints. Load this skill first.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1279,1282],{"name":1280,"slug":1281,"type":15},"Authentication","authentication",{"name":23,"slug":24,"type":15},"2026-07-12T08:29:32.614733",{"slug":1285,"name":1285,"fn":1286,"description":1287,"org":1288,"tags":1289,"stars":25,"repoUrl":26,"updatedAt":1295},"core-mcp","bootstrap MCP terminal sessions","REQUIRED before any wsh terminal operation. Contains the complete MCP tool reference and bootstrap sequence for wsh_create_session, wsh_send_input, wsh_get_screen, wsh_send_and_read, wsh_send_keys, and all wsh_* tools. Do NOT guess wsh CLI commands or HTTP endpoints — use MCP tools or load this skill first.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1290,1291,1292],{"name":1112,"slug":1113,"type":15},{"name":23,"slug":24,"type":15},{"name":1293,"slug":1294,"type":15},"MCP","mcp","2026-07-12T08:29:45.869993",{"slug":1297,"name":1297,"fn":1298,"description":1299,"org":1300,"tags":1301,"stars":25,"repoUrl":26,"updatedAt":1305},"drive-process","interact with CLI programs via wsh","Use when you need to drive a CLI program through command-and-response interaction via wsh. Examples: \"run a build command and check the output\", \"interact with an installer that asks questions\", \"execute a sequence of shell commands and handle errors\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1302,1303,1304],{"name":1112,"slug":1113,"type":15},{"name":23,"slug":24,"type":15},{"name":1270,"slug":1271,"type":15},"2026-07-12T08:29:51.485222",{"slug":1307,"name":1307,"fn":1308,"description":1309,"org":1310,"tags":1311,"stars":25,"repoUrl":26,"updatedAt":1317},"generative-ui","build interactive terminal user interfaces","Use when you need to build dynamic, interactive terminal experiences on the fly. Examples: \"create a live dashboard in the terminal\", \"build an interactive file browser\", \"generate a custom TUI for this workflow\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1312,1313,1314],{"name":23,"slug":24,"type":15},{"name":1270,"slug":1271,"type":15},{"name":1315,"slug":1316,"type":15},"Frontend","frontend","2026-07-12T08:29:41.286933",{"slug":1319,"name":1319,"fn":1320,"description":1321,"org":1322,"tags":1323,"stars":25,"repoUrl":26,"updatedAt":1328},"infrastructure-ops","manage infrastructure across multiple servers","Use when you need to manage infrastructure across multiple servers interactively via wsh — deploying applications, configuring services, managing packages, performing rolling updates, and handling the prompts and judgment calls that declarative tools cannot. Examples: \"deploy this application across 10 servers with health checks between each\", \"upgrade packages across the fleet and handle diverse prompts\", \"inspect and modify configuration across servers\", \"roll back a failed deployment\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1324,1325],{"name":23,"slug":24,"type":15},{"name":1326,"slug":1327,"type":15},"Infrastructure","infrastructure","2026-07-12T08:29:57.659886",12]