@softspark/ai-toolkit 4.21.0 → 4.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/README.md +40 -28
  3. package/app/.claude-plugin/plugin.json +1 -1
  4. package/app/agents/code-reviewer.md +32 -15
  5. package/app/skills/a11y-validate/SKILL.md +61 -179
  6. package/app/skills/a11y-validate/reference/scanner-categories.md +174 -0
  7. package/app/skills/brainstorm/SKILL.md +174 -0
  8. package/app/skills/brand-voice/SKILL.md +1 -1
  9. package/app/skills/ci/SKILL.md +2 -1
  10. package/app/skills/debug/SKILL.md +3 -2
  11. package/app/skills/deploy/SKILL.md +1 -1
  12. package/app/skills/explore/SKILL.md +1 -1
  13. package/app/skills/explore/scripts/visualize.py +15 -1
  14. package/app/skills/fix/SKILL.md +3 -3
  15. package/app/skills/hipaa-validate/SKILL.md +25 -221
  16. package/app/skills/hipaa-validate/reference/scanner-categories.md +224 -0
  17. package/app/skills/migrate/SKILL.md +1 -1
  18. package/app/skills/pr/SKILL.md +2 -2
  19. package/app/skills/review/SKILL.md +50 -5
  20. package/app/skills/rollback/SKILL.md +1 -1
  21. package/app/skills/seo-validate/SKILL.md +63 -309
  22. package/app/skills/seo-validate/reference/scanner-categories.md +304 -0
  23. package/app/surface.json +296 -0
  24. package/benchmarks/ecosystem-doctor-snapshot.json +15 -19
  25. package/kb/procedures/post-release-testing-sop.md +92 -3
  26. package/kb/procedures/release-preparation-sop.md +44 -2
  27. package/kb/reference/architecture-overview.md +3 -3
  28. package/kb/reference/skills-catalog.md +10 -14
  29. package/llms-full.txt +150 -22
  30. package/manifest.json +3 -3
  31. package/package.json +6 -3
  32. package/scripts/check_split.py +493 -0
  33. package/scripts/surface_manifest.py +246 -0
  34. package/scripts/sync_badges.py +133 -0
  35. package/scripts/validate.py +118 -1
package/llms-full.txt CHANGED
@@ -84,6 +84,7 @@
84
84
  - **architecture-audit**: Audits codebase for architectural friction, shallow modules; proposes RFCs. Triggers: improve architecture, shallow modules, deepen modules, reduce coupling.
85
85
  - **architecture-decision**: Architecture decisions in ADR/RFC/RFD format: context, constraints, options, recommendation. Triggers: ADR, RFC, RFD, trade-offs, design choice, pick between, evaluate approach.
86
86
  - **biz-scan**: Scans codebase for revenue opportunities, KPIs, monetization gaps. Triggers: business metrics, KPI, analytics gaps, monetization, revenue.
87
+ - **brainstorm**: Pre-artifact conversation that prices the zero option and can end in 'do not build this'. Triggers: brainstorm, should we build, is this worth it, explore idea, thinking out loud, half-formed idea.
87
88
  - **brand-voice**: Direct technical voice for docs, README, user-facing text. Concise/strict modes. Triggers: documentation, README, content, output-mode, voice, prose style.
88
89
  - **briefing**: Executive daily briefing aggregating reports from all agents into decision-focused summary. Triggers: briefing, daily summary, status across system, executive update.
89
90
  - **build**: Builds project with auto-detected toolchain (npm, poetry, cargo, go, flutter, Docker). Triggers: build, compile, bundle, produce artifacts.
@@ -7018,10 +7019,10 @@ title: "SOP: Post-Release Testing"
7018
7019
  category: procedures
7019
7020
  service: ai-toolkit
7020
7021
  tags: [sop, post-release, smoke-test, npm, sandbox, plugin-pack, provenance, isolation]
7021
- version: "1.0.0"
7022
+ version: "1.1.0"
7022
7023
  created: "2026-07-26"
7023
- last_updated: "2026-07-26"
7024
- description: "Smoke-test a published @softspark/ai-toolkit release from npm in an isolated HOME and npm prefix, without touching the maintainer's real install. Covers provenance, CLI, doctor, and the full plugin-pack lifecycle including the degraded-install path. Written for v4.18.0 and not run; v4.18.0 shipped a pack that broke every command it touched, and every step here would have caught it."
7024
+ last_updated: "2026-08-06"
7025
+ description: "Smoke-test a published @softspark/ai-toolkit release from npm in an isolated HOME and npm prefix, without touching the maintainer's real install. Covers provenance, CLI, doctor, per-skill script resolution, scanner wiring, and the full plugin-pack lifecycle including the degraded-install path. Written for v4.18.0 and not run; v4.18.0 shipped a pack that broke every command it touched. First actually run on v4.22.0, which added Phases 4b and 4c after that release fixed four skills whose documented script path had never resolved and two that shipped a scanner nothing invoked."
7025
7026
  ---
7026
7027
 
7027
7028
  # SOP: Post-Release Testing
@@ -7107,6 +7108,95 @@ npm install -g --prefix "$SB/npm" "@softspark/ai-toolkit@${VERSION}"
7107
7108
  `skills directory missing`.** That is the sandbox being empty, not a defect.
7108
7109
  Install first, then judge doctor.
7109
7110
 
7111
+ ## Phase 4b: Skill scripts resolve and run from the installed copy
7112
+
7113
+ 23 skills ship an executable script under `scripts/`. A skill body invokes it
7114
+ through `${CLAUDE_SKILL_DIR}`, which only resolves once the skill is installed —
7115
+ so a wrong path is invisible in the working tree and invisible to `validate.py`,
7116
+ which checks that the file exists on disk, never that the documented command
7117
+ finds it.
7118
+
7119
+ This is exactly how four skills shipped with `$(dirname "$0")`, which expands to
7120
+ the shell's directory rather than the skill's. Every one of them had been broken
7121
+ for as long as the line existed.
7122
+
7123
+ Iterate over every skill that ships a script. Do not hand-pick the ones the
7124
+ release touched — the point of this phase is to catch the ones nobody remembered.
7125
+
7126
+ ```bash
7127
+ for D in "$HOME"/.claude/skills/*/; do
7128
+ s=$(basename "$D")
7129
+ [ -d "$D/scripts" ] || continue
7130
+ # Match ANY interpreter and ANY extension. Narrowing this to `python3` and
7131
+ # `.py` is how the first version of this phase reported "no invocation" for a
7132
+ # skill that used `python`, and missed one that ran a .py file through bash.
7133
+ ref=$(grep -ohE '(python3?|bash|sh|node) +\$\{CLAUDE_SKILL_DIR\}/scripts/[A-Za-z0-9_.-]+' "$D/SKILL.md" | head -1)
7134
+ [ -n "$ref" ] || { printf '%-22s NO ${CLAUDE_SKILL_DIR} INVOCATION\n' "$s"; continue; }
7135
+ interp=${ref%% *}
7136
+ rel=${ref##*\$\{CLAUDE_SKILL_DIR\}/}
7137
+ printf '%-22s %-10s %-26s ' "$s" "$interp" "$rel"
7138
+ [ -f "$D/$rel" ] || { echo 'PATH DOES NOT RESOLVE'; continue; }
7139
+ out=$(CLAUDE_SKILL_DIR="$D" timeout 20 "$interp" "$D/$rel" --help </dev/null 2>&1 | head -1)
7140
+ printf 'rc=%s %s\n' "$?" "$(echo "$out" | cut -c1-40)"
7141
+ done
7142
+ ```
7143
+
7144
+ **Verify:**
7145
+ - [ ] Every skill with a `scripts/` directory has a documented invocation
7146
+ - [ ] Every documented path resolves to a file that exists
7147
+ - [ ] Every script exits without a traceback and without hanging
7148
+ - [ ] The interpreter matches the file: no `.py` through `bash`, no bare `python`
7149
+
7150
+ A skill reported as `NO ${CLAUDE_SKILL_DIR} INVOCATION` is not automatically a
7151
+ defect — some ship assets rather than executables (`write-a-prd` ships `.html`,
7152
+ `.js` and `.cjs`). Read the skill before filing it. What *is* always a defect is
7153
+ an invocation that names a skill-owned script through any other path.
7154
+
7155
+ `validate.py` now fails the build on that class (`_validate_skill_script_invocations`),
7156
+ so this phase is the second line rather than the first. Keep it: the validator
7157
+ reasons about the source, this runs the real thing.
7158
+
7159
+ **`</dev/null` and `timeout` are not defensive padding.** Several of these
7160
+ scripts are stdin filters (`error-parser.py`, `error-classifier.py`) documented
7161
+ as `command 2>&1 | python3 …`. Probing one with `--help` and an open stdin
7162
+ blocks forever, and the run looks like a slow test rather than a hung one. A
7163
+ correct stdin filter answers an empty stdin with a JSON error and `rc=0`; a
7164
+ traceback there is a real finding.
7165
+
7166
+ ## Phase 4c: Skills that wrap a scanner actually scan
7167
+
7168
+ For any skill whose body tells the model to run a scanner, presence of the script
7169
+ is not evidence the wiring works. Build a fixture with known defects and confirm
7170
+ the scanner reports them.
7171
+
7172
+ ```bash
7173
+ FX="$SB/fixture"; mkdir -p "$FX"
7174
+ cat > "$FX/index.html" <<'EOF'
7175
+ <!DOCTYPE html><html><head><title>t</title></head>
7176
+ <body><h1>A</h1><h3>skipped h2</h3><img src="x.png"><input type="text"><div onclick="go()">click</div></body></html>
7177
+ EOF
7178
+ printf '{"name":"fx","dependencies":{"react":"18"}}\n' > "$FX/package.json"
7179
+
7180
+ for s in a11y-validate seo-validate hipaa-validate cve-scan; do
7181
+ D="$HOME/.claude/skills/$s"
7182
+ script=$(ls "$D"/scripts/*.py 2>/dev/null | head -1)
7183
+ [ -n "$script" ] || continue
7184
+ echo "=== $s ==="
7185
+ CLAUDE_SKILL_DIR="$D" timeout 60 python3 "$script" "$FX" --output json </dev/null 2>&1 | head -3
7186
+ done
7187
+ ```
7188
+
7189
+ **Verify:**
7190
+ - [ ] The scanner returns findings, not an empty set — the fixture has real defects
7191
+ - [ ] Findings span more than one category, proving the whole check set ran
7192
+ - [ ] A scanner that exits non-zero on findings is doing its job, not failing
7193
+
7194
+ `a11y-validate` and `seo-validate` shipped working scanners that **no step in
7195
+ either skill invoked** for their entire life before v4.22.0. The model was told to
7196
+ grep the pattern tables by hand instead. Nothing in the test suite noticed,
7197
+ because a script nobody calls still passes every check that asks whether it
7198
+ exists.
7199
+
7110
7200
  ## Phase 5: Plugin-pack lifecycle
7111
7201
 
7112
7202
  Run this for any pack the release touched. For a pack that downloads a binary,
@@ -7240,9 +7330,9 @@ title: "SOP: Release Preparation"
7240
7330
  category: procedures
7241
7331
  service: ai-toolkit
7242
7332
  tags: [sop, release, version, publish, changelog, semver, provenance, sarif, ecosystem, shellcheck]
7243
- version: "1.13.0"
7333
+ version: "1.14.0"
7244
7334
  created: "2026-04-10"
7245
- last_updated: "2026-07-27"
7335
+ last_updated: "2026-08-06"
7246
7336
  description: "Step-by-step checklist for preparing a new ai-toolkit release — ecosystem-sync drift check, version sync, changelog, artifact regeneration, validation, and tagging. Run BEFORE every git tag. Includes mandatory Provenance, SARIF, and checksum-pin checks added in v2.8.0, the single-run npm test discipline added in v1.8.0, the ecosystem-sync gate added in v1.9.0, the registry-vs-generators drift gate added in v1.10.0, the mandatory pre-tag ShellCheck gate added in v1.11.0 (publish.yml does not run ShellCheck, so a hook lint failure can publish while reddening main CI — see the v4.5.1 postmortem in Phase 5), the pre-push tag assertions added in v1.12.0 after v4.19.0 was tagged on the wrong commit (Phase 7), and the licensing gate added in v1.13.0 with the move to Apache-2.0 (Phase 5c)."
7247
7337
  ---
7248
7338
 
@@ -7447,6 +7537,48 @@ echo "package-lock.json: $(python3 -c "import json; print(json.load(open('packag
7447
7537
 
7448
7538
  All four must print the same version. If not, fix before proceeding.
7449
7539
 
7540
+ ### Public surface review
7541
+
7542
+ ```bash
7543
+ python3 scripts/surface_manifest.py --update
7544
+ git diff app/surface.json
7545
+ ```
7546
+
7547
+ **Every line the diff removes is a breaking change.** Restore it, or take the
7548
+ deprecation path in `BACKWARD_COMPATIBILITY.md` and add a `DECISIONS.md` entry
7549
+ before the tag. Lines added are new surface being adopted into protection — that
7550
+ needs no ceremony.
7551
+
7552
+ Do not run `--update` to make a red build green. The check fails because something
7553
+ users depend on disappeared; regenerating the manifest deletes the evidence, not
7554
+ the problem.
7555
+
7556
+ ### Skill body budget ratchet
7557
+
7558
+ `validate.py` prints the largest skill body on every run:
7559
+
7560
+ ```
7561
+ Body budget: largest is <skill> at <N> bytes (warn 18000, error 20000)
7562
+ ```
7563
+
7564
+ Once that number sits at least 2000 bytes under `SKILL_BODY_BUDGET_WARN`, lower
7565
+ `SKILL_BODY_BUDGET_WARN` by 2000 in `scripts/validate.py` and ship the tightened
7566
+ threshold with the release. Target floor is 12000.
7567
+
7568
+ Two rules, both learned the hard way:
7569
+
7570
+ - **Never lower a threshold in the same change that something violates it.** Split
7571
+ the offending skill into `SKILL.md` + `reference/` first, prove it with
7572
+ `python3 scripts/check_split.py <skill> --before <pre-split SKILL.md>`, then
7573
+ tighten in a follow-up.
7574
+ - **Never raise a threshold to make a red build green.** A body over budget means
7575
+ detail that belongs in `reference/` is loading on every trigger match, including
7576
+ the accidental ones. Raising the number hides the cost, it does not remove it.
7577
+
7578
+ If the largest body has not moved since the previous release, leave the threshold
7579
+ alone and say so in the release notes. A ratchet that never advances is honest;
7580
+ one that advances past reality is not.
7581
+
7450
7582
  ---
7451
7583
 
7452
7584
  ## Phase 3: Write CHANGELOG Entry
@@ -8651,9 +8783,9 @@ title: "AI Toolkit - Architecture Overview"
8651
8783
  category: reference
8652
8784
  service: ai-toolkit
8653
8785
  tags: [architecture, overview, design, structure]
8654
- version: "1.6.0"
8786
+ version: "1.6.1"
8655
8787
  created: "2026-03-23"
8656
- last_updated: "2026-07-26"
8788
+ last_updated: "2026-08-06"
8657
8789
  description: "Architecture of ai-toolkit: directory layout, Claude app export, global install model, editor-aware MCP install, Codex translation layer, skill tiers, and integration with projects."
8658
8790
  ---
8659
8791
 
@@ -8855,7 +8987,7 @@ Three tiers determine how to approach a task:
8855
8987
  | Type | Field | Invocation | Count |
8856
8988
  |------|-------|-----------|-------|
8857
8989
  | Task | `disable-model-invocation: true` | User via `/skill` only | 32 |
8858
- | Hybrid | (neither) | User via `/skill` + agent knowledge | 30 |
8990
+ | Hybrid | (neither) | User via `/skill` + agent knowledge | 31 |
8859
8991
  | Knowledge | `user-invocable: false` | Claude auto-loads | 46 |
8860
8992
 
8861
8993
  ## Multi-Agent Execution
@@ -14511,9 +14643,9 @@ title: "AI Toolkit - Skills Catalog"
14511
14643
  category: reference
14512
14644
  service: ai-toolkit
14513
14645
  tags: [skills, domain-knowledge, catalog, task-skills, hybrid-skills]
14514
- version: "1.4.3"
14646
+ version: "1.5.0"
14515
14647
  created: "2026-03-23"
14516
- last_updated: "2026-04-12"
14648
+ last_updated: "2026-08-06"
14517
14649
  description: "Complete skills catalog with task, hybrid, and knowledge skills. Includes Codex adaptation notes, effort levels, skill-scoped hooks, executable scripts, security auditor, and persona presets."
14518
14650
  ---
14519
14651
 
@@ -14526,13 +14658,13 @@ All functionality is unified under skills. Task and hybrid skills are user-invoc
14526
14658
  | Tier | Skills | When |
14527
14659
  |------|--------|------|
14528
14660
  | **1 — Quick single-agent** | `/debug`, `/review`, `/refactor`, `/analyze`, `/docs`, `/plan`, `/explain`, `/tdd`, `/grill-me`, `/triage-issue` | One concern, fast |
14661
+ | **1.5 — Should we build it?** | `/brainstorm` | Pre-artifact conversation; prices the zero option and may end in "do not build this" |
14529
14662
  | **1.5 — Product planning** | `/write-a-prd` → `/prd-to-plan` → `/prd-to-issues` | Interview-driven PRD → vertical-slice plan → GitHub issues |
14530
14663
  | **1.5 — Design & architecture** | `/design-an-interface`, `/architecture-audit`, `/refactor-plan`, `/ubiquitous-language`, `/qa-session` | Parallel sub-agent exploration |
14531
14664
  | **2 — Multi-agent workflow** | `/workflow <type>` | Cross-cutting task with known pattern |
14532
14665
  | **3 — Custom parallelism** | `/orchestrate`, `/swarm` | No predefined workflow matches |
14533
14666
 
14534
- ## Task Skills (30)
14535
-
14667
+ ## Task Skills
14536
14668
  Task skills execute a specific action. Invoked via slash commands. `disable-model-invocation: true`.
14537
14669
 
14538
14670
  | Skill | Slash Command | Effort | Description |
@@ -14570,8 +14702,7 @@ Task skills execute a specific action. Invoked via slash commands. `disable-mode
14570
14702
  | **seo-validate** | `/seo-validate` | medium | Scan codebase for SEO issues: W3C semantics, meta/OG tags, Schema.org, hreflang, Core Web Vitals (LCP/INP/CLS), resource hints, GEO, SPA/SSG/CSR crawlability, technical SEO, accessibility-for-SEO. Framework-aware (Next/Nuxt/Astro/Gatsby/SvelteKit/Remix/Angular/Vue/static HTML). |
14571
14703
  | **mcp-builder** | `/mcp-builder` | high | Build production-grade MCP servers using the 4-phase methodology (research, implement, test, evaluate). TypeScript/Python, stdio/streamable-http. |
14572
14704
 
14573
- ## Hybrid Skills (32)
14574
-
14705
+ ## Hybrid Skills
14575
14706
  Hybrid skills combine slash-command invocation with domain knowledge that agents reference.
14576
14707
 
14577
14708
  | Skill | Slash Command | Effort | Description |
@@ -14604,6 +14735,7 @@ Hybrid skills combine slash-command invocation with domain knowledge that agents
14604
14735
  | **mem-search** | `/mem-search` | medium | Search past coding sessions via natural language (memory-pack) |
14605
14736
  | **persona** | `/persona` | low | Switch engineering persona at runtime (backend-lead, frontend-lead, devops-eng, junior-dev) |
14606
14737
  | **council** | `/council` | high | 4-perspective decision evaluation (Advocate, Critic, Pragmatist, User-Proxy) with synthesis and confidence-rated recommendation. Tier 1, orchestrator, `context: fork`. |
14738
+ | **brainstorm** | `/brainstorm` | high | Pre-artifact conversation that prices "build nothing" as a real candidate and sends the conclusion to a separate challenger agent before routing. Six exit ramps, one of which is stop. |
14607
14739
  | **introspect** | `/introspect` | medium | Agent self-debugging: classify failure pattern, suggest smallest recovery action, emit structured introspection report |
14608
14740
  | **brand-voice** | `/brand-voice` | medium | Anti-trope list, voice principles, LLM rhetoric prevention; output modes (`concise` ≤60% tokens, `strict` ≤40%) governing conversational responses. |
14609
14741
 
@@ -14627,8 +14759,7 @@ Hybrid skills combine slash-command invocation with domain knowledge that agents
14627
14759
  | `application-deploy` | 3 | Deploy → smoke test → release notes |
14628
14760
  | `proactive-troubleshooting` | 4 | Investigate → check perf → preventive fix → docs |
14629
14761
 
14630
- ## Knowledge Skills - Development (15)
14631
-
14762
+ ## Knowledge Skills - Development
14632
14763
  | Skill | Directory | Domain |
14633
14764
  |-------|-----------|--------|
14634
14765
  | **app-builder** | `skills/app-builder/` | Full-stack application architecture |
@@ -14647,8 +14778,7 @@ Hybrid skills combine slash-command invocation with domain knowledge that agents
14647
14778
  | **design-engineering** | `skills/design-engineering/` | UI polish, animation craft, easing, transforms, accessibility |
14648
14779
  | **documentation-standards** | `skills/documentation-standards/` | KB document conventions, frontmatter validation, category taxonomy |
14649
14780
 
14650
- ## Knowledge Skills - Infrastructure (6)
14651
-
14781
+ ## Knowledge Skills - Infrastructure
14652
14782
  | Skill | Directory | Domain |
14653
14783
  |-------|-----------|--------|
14654
14784
  | **docker-devops** | `skills/docker-devops/` | Docker, deployment, infrastructure |
@@ -14658,8 +14788,7 @@ Hybrid skills combine slash-command invocation with domain knowledge that agents
14658
14788
  | **testing-patterns** | `skills/testing-patterns/` | Multi-language TDD: pytest, vitest, phpunit, go test, flutter |
14659
14789
  | **migration-patterns** | `skills/migration-patterns/` | Database migrations, API versioning, zero-downtime |
14660
14790
 
14661
- ## Knowledge Skills - AI/RAG (6)
14662
-
14791
+ ## Knowledge Skills - AI/RAG
14663
14792
  | Skill | Directory | Domain |
14664
14793
  |-------|-----------|--------|
14665
14794
  | **rag-patterns** | `skills/rag-patterns/` | RAG pipelines, chunking, reranking, evaluation |
@@ -14669,8 +14798,7 @@ Hybrid skills combine slash-command invocation with domain knowledge that agents
14669
14798
  | **content-moderation-patterns** | `skills/content-moderation-patterns/` | Two-stage moderation: pre-filter + LLM classifier; categories; thresholds |
14670
14799
  | **model-routing-patterns** | `skills/model-routing-patterns/` | Haiku/Sonnet/Opus routing; escalation; sub-agent delegation; fallback |
14671
14800
 
14672
- ## Knowledge Skills - Process (6)
14673
-
14801
+ ## Knowledge Skills - Process
14674
14802
  | Skill | Directory | Domain |
14675
14803
  |-------|-----------|--------|
14676
14804
  | **git-mastery** | `skills/git-mastery/` | Git workflows, branching, conflict resolution |
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.21.0",
2
+ "version": "4.22.1",
3
3
  "components": {
4
4
  "agents": {
5
5
  "description": "44 specialized agents (orchestrator, backend, frontend, security, devops, etc.)",
@@ -12,7 +12,7 @@
12
12
  ]
13
13
  },
14
14
  "skills": {
15
- "description": "108 skills (32 task + 30 hybrid + 46 knowledge)",
15
+ "description": "109 skills (32 task + 31 hybrid + 46 knowledge)",
16
16
  "path": "app/skills",
17
17
  "target": ".claude/skills",
18
18
  "type": "symlink",
@@ -137,7 +137,7 @@
137
137
  "default": true
138
138
  },
139
139
  "skills": {
140
- "description": "108 skills (task, hybrid, knowledge)",
140
+ "description": "109 skills (task, hybrid, knowledge)",
141
141
  "default": true
142
142
  },
143
143
  "rules-common": {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@softspark/ai-toolkit",
3
- "version": "4.21.0",
4
- "description": "AI coding toolkit: 108 skills, 44 agents, 12 developer-tool integrations, recoverable native tool-output filtering, Claude Chat/Cowork export, safety constitution, SARIF audit, and signed npm provenance.",
3
+ "version": "4.22.1",
4
+ "description": "AI coding toolkit: 109 skills, 44 agents, 12 developer-tool integrations, recoverable native tool-output filtering, Claude Chat/Cowork export, safety constitution, SARIF audit, and signed npm provenance.",
5
5
  "keywords": [
6
6
  "claude",
7
7
  "claude-code",
@@ -67,7 +67,10 @@
67
67
  "generate:roo-rules": "python3 scripts/generate_roo_rules.py .",
68
68
  "generate:augment-rules": "python3 scripts/generate_augment_rules.py .",
69
69
  "generate:claude-app": "python3 scripts/claude_app.py sync",
70
- "generate:all": "npm run generate:language-rules && npm run generate:claude-app && npm run generate:agents && npm run generate:opencode-agents && npm run generate:opencode-commands && npm run generate:cursor && npm run generate:cursor-mdc && npm run generate:windsurf && npm run generate:windsurf-rules && npm run generate:copilot && npm run generate:gemini && npm run generate:cline && npm run generate:roo && npm run generate:roo-rules && npm run generate:aider && npm run generate:augment-rules && npm run generate:llms"
70
+ "generate:all": "npm run generate:language-rules && npm run generate:claude-app && npm run generate:agents && npm run generate:opencode-agents && npm run generate:opencode-commands && npm run generate:cursor && npm run generate:cursor-mdc && npm run generate:windsurf && npm run generate:windsurf-rules && npm run generate:copilot && npm run generate:gemini && npm run generate:cline && npm run generate:roo && npm run generate:roo-rules && npm run generate:aider && npm run generate:augment-rules && npm run generate:llms && npm run generate:badges",
71
+ "generate:badges": "python3 scripts/sync_badges.py",
72
+ "surface": "python3 scripts/surface_manifest.py",
73
+ "surface:update": "python3 scripts/surface_manifest.py --update"
71
74
  },
72
75
  "files": [
73
76
  "bin/",