[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HC3KVG7M9ENR2EGZSXF05T":3,"skill-same:01M6HC3KVG7M9ENR2EGZSXF05T":117},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M6HC3KVG7M9ENR2EGZSXF05T","defenseclaw-tui",null,"Improve the DefenseClaw Textual TUI (cli\u002Fdefenseclaw\u002Ftui) consistently. Use it for any TUI work - adding or changing panels, picker and consequence modals, Setup wizards and the config editor, the hint bar and help overlay, command-palette rows, TUI tests, and TUI UX reviews or render checks. It holds the golden rules, the file map, recipes, the 80x24 layout budget, the test budget, and scripts that render the screen headlessly, run a fake-data demo, audit CLI coverage and list a panel's touchpoints. Don't use it for live certification on the Windows\u002FmacOS\u002FLinux test hosts (use defenseclaw-live-testing) or for EC2 dev-host operations (use defenseclaw-dev-host).","cisco-ai-defense\u002Fdefenseclaw","cisco-ai-defense","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F220944709?v=4","01M6HC38HDCQK9FGE6GXJ4H2ZT","Cisco AI Defense","01M6HC38NKX5MMEWMQXCXGP498",911,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"defenseclaw tui","tui","map","hosts","reviews","render","palette","consequence","panels","host","layout","testing","coverage","command","work","improve","audit","ux","run","cli","2026-11-10 10:12:30",false,"---\nname: defenseclaw-tui\ndescription: Improve the DefenseClaw Textual TUI (cli\u002Fdefenseclaw\u002Ftui) consistently. Use it for any TUI work - adding or changing panels, picker and consequence modals, Setup wizards and the config editor, the hint bar and help overlay, command-palette rows, TUI tests, and TUI UX reviews or render checks. It holds the golden rules, the file map, recipes, the 80x24 layout budget, the test budget, and scripts that render the screen headlessly, run a fake-data demo, audit CLI coverage and list a panel's touchpoints. Don't use it for live certification on the Windows\u002FmacOS\u002FLinux test hosts (use defenseclaw-live-testing) or for EC2 dev-host operations (use defenseclaw-dev-host).\n---\n\n# DefenseClaw TUI\n\nThe TUI is a Python Textual 8 app in `cli\u002Fdefenseclaw\u002Ftui\u002F`. `app.py` holds\n`DefenseClawTUI` (with `SandboxPanelMixin`), and every panel renders into one\nshared surface: `#body`, `DataTable#panel-table`, `#detail-panel`, plus one\nbutton bar per panel. Mutations never happen in the TUI. It builds CLI intents,\npreviews them, and runs the real `defenseclaw` CLI as a subprocess. Source and\ntests are authoritative. If this skill disagrees with them, trust the code and\nfix the skill.\n\n## Golden rules\n\n1. **Keep models pure.** Panel state and logic live in `services\u002F\u003Cx>_state.py`\n   (no I\u002FO, no Textual). The app or a mixin does the I\u002FO. `_body_text` runs on a\n   2 s timer, so it must be cheap and must not read disk, spawn processes or\n   make network calls.\n2. **Mutate only through CLI intents.** Flow: `model.handle_key` → action\u002Fintent →\n   `_confirm_and_run_intent` → `CommandPreviewScreen` →\n   `CommandExecutor` → `_handle_successful_command` refresh. Destructive\n   intents set `risk=\"destructive\"` and go through\n   `ConsequenceModalScreen(danger=True)`. A flow with its own consequence modal\n   that shows the exact command runs it after that confirm; never stack a third\n   prompt. The one sanctioned direct write is the\n   Setup config editor (`apply_config_field` + `config.save()` after `ConfigDiffScreen`).\n3. **Send secrets over stdin, never argv.** Set `intent.secret_stdin` and use\n   `--value-stdin` (for example `keys set NAME --value-stdin`). Secrets never\n   appear in the preview, the Activity log or argv. `click.prompt(hide_input)`\n   and getpass ignore piped stdin.\n4. **Run follow-ups only after success.** A follow-up intent runs after the\n   previous command finishes, and only if it exited 0.\n5. **Route all text entry through `FieldEditorScreen`** (`screens\u002Ffield_editor.py`).\n   Never type into fields through panel keys. `_panel_key` lowercases most\n   capital letters. Test it the way a terminal sends it: a burst of keys and a\n   paste must land whole (`references\u002Fgotchas.md`).\n6. **Only model config-editor fields the Python `Config` can persist.**\n   `Config.save()` silently drops unmodeled keys, so show those read-only with a hint.\n7. **Advertise keys only through `HintEngine` or the per-view keymap**\n   (`panels\u002Fsetup_keys.py` for Setup). Every advertised key must be handled, and\n   every handled key must appear in `?` help. No \"Keys:\" lines in the body.\n8. **Fit at 80x24.** Primary content (the first row, field or wizard) stays\n   above the fold, with at most 2-3 body lines above the table. Button bars hide\n   what doesn't apply to the current view instead of disabling it.\n9. **Rich-escape every data string** (`rich.markup.escape`), send bodies through\n   `_safe_body_renderable`, write hotkey labels as `\\\\[k]`, and use no `@click`\n   links in `#body`.\n10. **Check Windows too.** The executor uses a PTY on POSIX but pipes and a Job\n    Object on Windows. Stdin, cancel and terminal launches behave differently\n    there, so check that path (or say you didn't).\n11. **Stay within the test budget.** Default to pure model tests. Each new\n    screen gets at most 2 Pilot tests, and each new mutating flow gets 1-2\n    journey tests, all at 80x24. See `references\u002Ftesting.md` for banned patterns.\n12. **Check branch overlap before starting.** `feat\u002Fopenshell-0.1` and `main`\n    both move `app.py`\u002F`panels\u002Fsetup.py`. Run\n    `git log --oneline main...HEAD -- cli\u002Fdefenseclaw\u002Ftui | head` and fold in\n    what's already there instead of re-doing it.\n\nCopy style: use plain words and sentence case, start with a verb, avoid internal\njargon, and keep refusals to one line that says what to do next\n(`references\u002Fux-rules.md`).\n\n## Workflow\n\n1. **Map the change.** `touchpoints.py \u003Cpanel>` shows which if-chains in\n   `app.py`\u002F`hint_bar.py` need the panel. `gap_audit.py --prefix \u003Ccmd>` shows\n   whether a CLI command is in the palette, used by the TUI, or has `--json`.\n2. **Pick a recipe** in `references\u002Frecipes.md`: panel, picker, mutating action,\n   secret action, wizard\u002Fconfig field, or palette row.\n3. **Build the model first** and write unit tests for keys → actions, rows and\n   empty states.\n4. **Wire it up**: the app\u002Fmixin I\u002FO, intents, controls, hints and help.\n5. **Render at 80x24 and 120x40** with `render.py`, and add `--expect` for the\n   thing that must be visible.\n6. **Check it interactively** in tmux with `demo.py` (fake executor), or with the\n   real CLI in an isolated `mktemp` home (`references\u002Fverification.md`). Never\n   use the real `~\u002F.defenseclaw`.\n7. **Run the gates**: the TUI suite, ruff, and the touched CLI tests.\n8. **Commit** as `fix(tui): \u003Cplain-English behaviour>` (or `feat(tui): …`,\n   `test(tui): …`). Add a short body saying why and the Co-Authored-By trailer.\n\n## Cheat-sheet (repository root)\n\n```bash\nS=.claude\u002Fskills\u002Fdefenseclaw-tui\u002Fscripts\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --list-panels\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --panel setup --size 80x24            # screen as text\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --keys 0 c --expect \"Config\"           # exit 1 if missing\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --keys : \"text:policy list\" enter      # palette + preview\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --panel alerts --svg \u002Ftmp\u002Falerts.svg   # SVG per size\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --first-run\n.venv\u002Fbin\u002Fpython $S\u002Fdemo.py --panel setup                            # interactive, fake exec\n.venv\u002Fbin\u002Fpython $S\u002Fgap_audit.py --missing-only                      # CLI the TUI can't reach\n.venv\u002Fbin\u002Fpython $S\u002Ftouchpoints.py sandboxes                         # panel wiring checklist\n.venv\u002Fbin\u002Fpython -m pytest cli\u002Ftests\u002Ftui -q -p no:cacheprovider -n 4\n.venv\u002Fbin\u002Fruff check cli\u002Fdefenseclaw\u002F \u003Cnew test files>\ntmux new-session -d -s dc-tui -x 80 -y 24 \".venv\u002Fbin\u002Fpython $S\u002Fdemo.py\"\ntmux send-keys -t dc-tui 0; tmux capture-pane -t dc-tui -p; tmux kill-session -t dc-tui\n```\n\n## References\n\n- `references\u002Farchitecture.md`: file map, render pipeline, `on_key` routing\n  order, the intent pipeline, workers, state services, and theme tokens.\n- `references\u002Frecipes.md`: add a panel (the Sandboxes mixin recipe), a picker, a\n  mutating or destructive action, a secret action, a wizard or config field,\n  or a palette row.\n- `references\u002Fux-rules.md`: 80x24 budget, hints per view, control bars, copy\n  style, reserved keys, and empty states.\n- `references\u002Ftesting.md`: test policy and budget, smoke\u002Fjourney tests with a\n  fake executor, and banned patterns.\n- `references\u002Fverification.md`: render.py, demo.py in tmux, isolated-home runs,\n  and host passes.\n- `references\u002Fgotchas.md`: verified pitfalls. Read this before touching Setup,\n  secrets, policies or keys.\n\n## Scripts\n\nAll scripts run from the repository root with `.venv\u002Fbin\u002Fpython` and are hermetic\n(fake-data app from `cli\u002Ftests\u002Ftui\u002Ffixtures.py`, no agent discovery, no sandbox\ndoctor, and a temp `DEFENSECLAW_HOME`).\n\n- `scripts\u002Frender.py`: headless screen-text dump. Options: `--panel`, `--keys`,\n  `--size` (repeatable), `--first-run`, `--setup-config default|empty`,\n  `--expect TEXT`, `--svg PATH`, `--list-panels`.\n- `scripts\u002Fdemo.py`: runs the same app interactively. HOME, DEFENSECLAW_HOME,\n  CLAUDE_CONFIG_DIR and CODEX_HOME point into a scratch dir. Confirmed commands\n  only echo their argv unless you pass `--real-exec`. The scratch home is deleted\n  on exit unless you pass `--keep-home`. Options: `--panel`, `--first-run`,\n  `--setup-config`, `--real-exec`, `--keep-home`.\n- `scripts\u002Fgap_audit.py`: Click tree against palette rows, TUI argv literals and\n  `--json`. Options: `--missing-only`, `--groups`, `--prefix`.\n- `scripts\u002Ftouchpoints.py PANEL [--stem S]`: which per-panel if-chains mention\n  the panel.\n","# DefenseClaw TUI\n\nThe TUI is a Python Textual 8 app in `cli\u002Fdefenseclaw\u002Ftui\u002F`. `app.py` holds\n`DefenseClawTUI` (with `SandboxPanelMixin`), and every panel renders into one\nshared surface: `#body`, `DataTable#panel-table`, `#detail-panel`, plus one\nbutton bar per panel. Mutations never happen in the TUI. It builds CLI intents,\npreviews them, and runs the real `defenseclaw` CLI as a subprocess. Source and\ntests are authoritative. If this skill disagrees with them, trust the code and\nfix the skill.\n\n## Golden rules\n\n1. **Keep models pure.** Panel state and logic live in `services\u002F\u003Cx>_state.py`\n   (no I\u002FO, no Textual). The app or a mixin does the I\u002FO. `_body_text` runs on a\n   2 s timer, so it must be cheap and must not read disk, spawn processes or\n   make network calls.\n2. **Mutate only through CLI intents.** Flow: `model.handle_key` → action\u002Fintent →\n   `_confirm_and_run_intent` → `CommandPreviewScreen` →\n   `CommandExecutor` → `_handle_successful_command` refresh. Destructive\n   intents set `risk=\"destructive\"` and go through\n   `ConsequenceModalScreen(danger=True)`. A flow with its own consequence modal\n   that shows the exact command runs it after that confirm; never stack a third\n   prompt. The one sanctioned direct write is the\n   Setup config editor (`apply_config_field` + `config.save()` after `ConfigDiffScreen`).\n3. **Send secrets over stdin, never argv.** Set `intent.secret_stdin` and use\n   `--value-stdin` (for example `keys set NAME --value-stdin`). Secrets never\n   appear in the preview, the Activity log or argv. `click.prompt(hide_input)`\n   and getpass ignore piped stdin.\n4. **Run follow-ups only after success.** A follow-up intent runs after the\n   previous command finishes, and only if it exited 0.\n5. **Route all text entry through `FieldEditorScreen`** (`screens\u002Ffield_editor.py`).\n   Never type into fields through panel keys. `_panel_key` lowercases most\n   capital letters. Test it the way a terminal sends it: a burst of keys and a\n   paste must land whole (`references\u002Fgotchas.md`).\n6. **Only model config-editor fields the Python `Config` can persist.**\n   `Config.save()` silently drops unmodeled keys, so show those read-only with a hint.\n7. **Advertise keys only through `HintEngine` or the per-view keymap**\n   (`panels\u002Fsetup_keys.py` for Setup). Every advertised key must be handled, and\n   every handled key must appear in `?` help. No \"Keys:\" lines in the body.\n8. **Fit at 80x24.** Primary content (the first row, field or wizard) stays\n   above the fold, with at most 2-3 body lines above the table. Button bars hide\n   what doesn't apply to the current view instead of disabling it.\n9. **Rich-escape every data string** (`rich.markup.escape`), send bodies through\n   `_safe_body_renderable`, write hotkey labels as `\\\\[k]`, and use no `@click`\n   links in `#body`.\n10. **Check Windows too.** The executor uses a PTY on POSIX but pipes and a Job\n    Object on Windows. Stdin, cancel and terminal launches behave differently\n    there, so check that path (or say you didn't).\n11. **Stay within the test budget.** Default to pure model tests. Each new\n    screen gets at most 2 Pilot tests, and each new mutating flow gets 1-2\n    journey tests, all at 80x24. See `references\u002Ftesting.md` for banned patterns.\n12. **Check branch overlap before starting.** `feat\u002Fopenshell-0.1` and `main`\n    both move `app.py`\u002F`panels\u002Fsetup.py`. Run\n    `git log --oneline main...HEAD -- cli\u002Fdefenseclaw\u002Ftui | head` and fold in\n    what's already there instead of re-doing it.\n\nCopy style: use plain words and sentence case, start with a verb, avoid internal\njargon, and keep refusals to one line that says what to do next\n(`references\u002Fux-rules.md`).\n\n## Workflow\n\n1. **Map the change.** `touchpoints.py \u003Cpanel>` shows which if-chains in\n   `app.py`\u002F`hint_bar.py` need the panel. `gap_audit.py --prefix \u003Ccmd>` shows\n   whether a CLI command is in the palette, used by the TUI, or has `--json`.\n2. **Pick a recipe** in `references\u002Frecipes.md`: panel, picker, mutating action,\n   secret action, wizard\u002Fconfig field, or palette row.\n3. **Build the model first** and write unit tests for keys → actions, rows and\n   empty states.\n4. **Wire it up**: the app\u002Fmixin I\u002FO, intents, controls, hints and help.\n5. **Render at 80x24 and 120x40** with `render.py`, and add `--expect` for the\n   thing that must be visible.\n6. **Check it interactively** in tmux with `demo.py` (fake executor), or with the\n   real CLI in an isolated `mktemp` home (`references\u002Fverification.md`). Never\n   use the real `~\u002F.defenseclaw`.\n7. **Run the gates**: the TUI suite, ruff, and the touched CLI tests.\n8. **Commit** as `fix(tui): \u003Cplain-English behaviour>` (or `feat(tui): …`,\n   `test(tui): …`). Add a short body saying why and the Co-Authored-By trailer.\n\n## Cheat-sheet (repository root)\n\n```bash\nS=.claude\u002Fskills\u002Fdefenseclaw-tui\u002Fscripts\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --list-panels\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --panel setup --size 80x24            # screen as text\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --keys 0 c --expect \"Config\"           # exit 1 if missing\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --keys : \"text:policy list\" enter      # palette + preview\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --panel alerts --svg \u002Ftmp\u002Falerts.svg   # SVG per size\n.venv\u002Fbin\u002Fpython $S\u002Frender.py --first-run\n.venv\u002Fbin\u002Fpython $S\u002Fdemo.py --panel setup                            # interactive, fake exec\n.venv\u002Fbin\u002Fpython $S\u002Fgap_audit.py --missing-only                      # CLI the TUI can't reach\n.venv\u002Fbin\u002Fpython $S\u002Ftouchpoints.py sandboxes                         # panel wiring checklist\n.venv\u002Fbin\u002Fpython -m pytest cli\u002Ftests\u002Ftui -q -p no:cacheprovider -n 4\n.venv\u002Fbin\u002Fruff check cli\u002Fdefenseclaw\u002F \u003Cnew test files>\ntmux new-session -d -s dc-tui -x 80 -y 24 \".venv\u002Fbin\u002Fpython $S\u002Fdemo.py\"\ntmux send-keys -t dc-tui 0; tmux capture-pane -t dc-tui -p; tmux kill-session -t dc-tui\n```\n\n## References\n\n- `references\u002Farchitecture.md`: file map, render pipeline, `on_key` routing\n  order, the intent pipeline, workers, state services, and theme tokens.\n- `references\u002Frecipes.md`: add a panel (the Sandboxes mixin recipe), a picker, a\n  mutating or destructive action, a secret action, a wizard or config field,\n  or a palette row.\n- `references\u002Fux-rules.md`: 80x24 budget, hints per view, control bars, copy\n  style, reserved keys, and empty states.\n- `references\u002Ftesting.md`: test policy and budget, smoke\u002Fjourney tests with a\n  fake executor, and banned patterns.\n- `references\u002Fverification.md`: render.py, demo.py in tmux, isolated-home runs,\n  and host passes.\n- `references\u002Fgotchas.md`: verified pitfalls. Read this before touching Setup,\n  secrets, policies or keys.\n\n## Scripts\n\nAll scripts run from the repository root with `.venv\u002Fbin\u002Fpython` and are hermetic\n(fake-data app from `cli\u002Ftests\u002Ftui\u002Ffixtures.py`, no agent discovery, no sandbox\ndoctor, and a temp `DEFENSECLAW_HOME`).\n\n- `scripts\u002Frender.py`: headless screen-text dump. Options: `--panel`, `--keys`,\n  `--size` (repeatable), `--first-run`, `--setup-config default|empty`,\n  `--expect TEXT`, `--svg PATH`, `--list-panels`.\n- `scripts\u002Fdemo.py`: runs the same app interactively. HOME, DEFENSECLAW_HOME,\n  CLAUDE_CONFIG_DIR and CODEX_HOME point into a scratch dir. Confirmed commands\n  only echo their argv unless you pass `--real-exec`. The scratch home is deleted\n  on exit unless you pass `--keep-home`. Options: `--panel`, `--first-run`,\n  `--setup-config`, `--real-exec`, `--keep-home`.\n- `scripts\u002Fgap_audit.py`: Click tree against palette rows, TUI argv literals and\n  `--json`. Options: `--missing-only`, `--groups`, `--prefix`.\n- `scripts\u002Ftouchpoints.py PANEL [--stem S]`: which per-panel if-chains mention\n  the panel.\n",{"name":5,"description":7},"main","574fc32c036341868e691e24980566946b6fd642",".claude\u002Fskills\u002Fdefenseclaw-tui",167,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw","https:\u002F\u002Fcisco-ai-defense.github.io\u002Fdefenseclaw\u002F","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense","https:\u002F\u002Fcisco-ai-defense.github.io\u002F","Open Source projects for the Cisco AI Defense community","2026-11-14 03:56:14",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add cisco-ai-defense\u002Fdefenseclaw --skill defenseclaw-tui",{"tool":65,"command":66},"bunx","bunx skills add cisco-ai-defense\u002Fdefenseclaw --skill defenseclaw-tui",{"tool":68,"command":69},"pnpm","pnpm dlx skills add cisco-ai-defense\u002Fdefenseclaw --skill defenseclaw-tui","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002FSKILL.md",true,[73,79,83,87,91,95,99,105,109,113],{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Farchitecture.md","REFERENCE","参考文档",9226,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Freferences\u002Farchitecture.md",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Fgotchas.md",7405,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Freferences\u002Fgotchas.md",{"path":84,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Frecipes.md",8353,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Freferences\u002Frecipes.md",{"path":88,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Ftesting.md",4490,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Freferences\u002Ftesting.md",{"path":92,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Fux-rules.md",4608,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Freferences\u002Fux-rules.md",{"path":96,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Fverification.md",5347,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Freferences\u002Fverification.md",{"path":100,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":103,"sourceHtmlUrl":104},"scripts\u002Fdemo.py","SCRIPT","脚本",4426,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Fscripts\u002Fdemo.py",{"path":106,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":107,"sourceHtmlUrl":108},"scripts\u002Fgap_audit.py",5989,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Fscripts\u002Fgap_audit.py",{"path":110,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":111,"sourceHtmlUrl":112},"scripts\u002Frender.py",7049,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Fscripts\u002Frender.py",{"path":114,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":115,"sourceHtmlUrl":116},"scripts\u002Ftouchpoints.py",6172,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002Fscripts\u002Ftouchpoints.py",[118,134,145,154,180,194],{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":44},"01M6HC44X1K8NMF6YBHDZHS9PB","parity-fixture","Fixture for the rule-pack parity test of install admission and skill scan.","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Ftestdata\u002Frulepack_artifact_parity\u002Fskill\u002FSKILL.md",[],[125,126,127,128,129,130,131,132,133],"parity fixture","fixture","for","pack","skill scan","rule","scan","install","test",{"skillNo":135,"name":136,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":142,"publishedAt":44},"01M6HC43H8K4P02PSEJ6R1DCAE","malicious-skill","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fmalicious-skill\u002FSKILL.md",[139],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[143,144],"malicious skill","malicious",{"skillNo":146,"name":147,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":151,"publishedAt":44},"01M6HC425BT2XS2J16M5PBE6YX","clean-skill","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fclean-skill\u002FSKILL.md",[150],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},[152,153],"clean skill","clean",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":165,"publishedAt":44},"01M6HC3W7VSGDPE5WR47ZNH04M","codeguard","Security-aware code generation — teaches the agent CodeGuard rules to write secure code by default","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Fskills\u002Fcodeguard\u002FSKILL.md",[160],{"categoryNo":161,"categoryName":162,"taxonomyType":163,"taxonomyTypeDesc":164},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[156,166,167,168,169,49,170,171,172,173,174,175,176,177,178,179],"calls","generation","local","self","default","write","check","Rules","network","Code Generation","gateway","code","secure","security",{"skillNo":181,"name":182,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":186,"publishedAt":44},"01M6HC3SGQQZQZHNBF80QNTZNE","perf-hello","Prints a friendly greeting when the user asks to say hello.","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Fscripts\u002Fperf\u002Ffixtures\u002Fbenign-skill\u002FSKILL.md",[],[187,188,189,190,191,192,193],"hello","perf","perf hello","say hello","user","say","greeting",{"skillNo":195,"name":196,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":199,"publishedAt":44},"01M6HC3GGVDDJNY36YJBVPXXWX","defenseclaw-develop","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-develop\u002FSKILL.md",[],[200,201],"defenseclaw develop","develop"]