@soleur/opencode 0.0.0-stage → 3.354.2
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.
- package/.claude-plugin/agents.manifest.json +476 -0
- package/.claude-plugin/plugin.json +42 -0
- package/README.md +44 -2
- package/agents/community/.gitkeep +0 -0
- package/agents/engineering/cto.md +87 -0
- package/agents/engineering/design/ddd-architect.md +95 -0
- package/agents/engineering/discovery/agent-finder.md +214 -0
- package/agents/engineering/discovery/functional-discovery.md +182 -0
- package/agents/engineering/infra/infra-security.md +151 -0
- package/agents/engineering/infra/platform-strategist.md +109 -0
- package/agents/engineering/infra/terraform-architect.md +171 -0
- package/agents/engineering/prompt-engineer.md +37 -0
- package/agents/engineering/research/best-practices-researcher.md +115 -0
- package/agents/engineering/research/framework-docs-researcher.md +93 -0
- package/agents/engineering/research/git-history-analyzer.md +53 -0
- package/agents/engineering/research/learnings-researcher.md +285 -0
- package/agents/engineering/research/repo-research-analyst.md +118 -0
- package/agents/engineering/review/agent-native-reviewer.md +279 -0
- package/agents/engineering/review/architecture-strategist.md +61 -0
- package/agents/engineering/review/code-quality-analyst.md +92 -0
- package/agents/engineering/review/code-simplicity-reviewer.md +109 -0
- package/agents/engineering/review/data-integrity-guardian.md +82 -0
- package/agents/engineering/review/data-migration-expert.md +98 -0
- package/agents/engineering/review/deployment-verification-agent.md +183 -0
- package/agents/engineering/review/dhh-rails-reviewer.md +46 -0
- package/agents/engineering/review/kieran-rails-reviewer.md +87 -0
- package/agents/engineering/review/legacy-code-expert.md +55 -0
- package/agents/engineering/review/observability-coverage-reviewer.md +147 -0
- package/agents/engineering/review/pattern-recognition-specialist.md +59 -0
- package/agents/engineering/review/performance-oracle.md +130 -0
- package/agents/engineering/review/security-sentinel.md +167 -0
- package/agents/engineering/review/semgrep-sast.md +36 -0
- package/agents/engineering/review/test-design-reviewer.md +150 -0
- package/agents/engineering/review/user-impact-reviewer.md +70 -0
- package/agents/engineering/workflow/pr-comment-resolver.md +69 -0
- package/agents/finance/budget-analyst.md +29 -0
- package/agents/finance/cfo.md +44 -0
- package/agents/finance/financial-reporter.md +30 -0
- package/agents/finance/revenue-analyst.md +30 -0
- package/agents/legal/clo.md +115 -0
- package/agents/legal/legal-compliance-auditor.md +110 -0
- package/agents/legal/legal-document-generator.md +134 -0
- package/agents/marketing/analytics-analyst.md +25 -0
- package/agents/marketing/brand-architect.md +181 -0
- package/agents/marketing/cmo.md +76 -0
- package/agents/marketing/conversion-optimizer.md +19 -0
- package/agents/marketing/copywriter.md +20 -0
- package/agents/marketing/fact-checker.md +70 -0
- package/agents/marketing/growth-strategist.md +145 -0
- package/agents/marketing/paid-media-strategist.md +28 -0
- package/agents/marketing/pricing-strategist.md +17 -0
- package/agents/marketing/programmatic-seo-specialist.md +25 -0
- package/agents/marketing/retention-strategist.md +23 -0
- package/agents/marketing/seo-aeo-analyst.md +164 -0
- package/agents/operations/coo.md +50 -0
- package/agents/operations/ops-advisor.md +78 -0
- package/agents/operations/ops-provisioner.md +101 -0
- package/agents/operations/ops-research.md +52 -0
- package/agents/operations/service-automator.md +278 -0
- package/agents/product/business-validator.md +206 -0
- package/agents/product/competitive-intelligence.md +89 -0
- package/agents/product/cpo.md +63 -0
- package/agents/product/design/ux-design-lead.md +209 -0
- package/agents/product/spec-flow-analyzer.md +122 -0
- package/agents/sales/cro.md +44 -0
- package/agents/sales/deal-architect.md +29 -0
- package/agents/sales/outbound-strategist.md +29 -0
- package/agents/sales/pipeline-analyst.md +29 -0
- package/agents/support/cco.md +48 -0
- package/agents/support/community-manager.md +570 -0
- package/agents/support/ticket-triage.md +70 -0
- package/bin/soleur-opencode.js +29 -0
- package/commands/go.md +660 -0
- package/commands/help.md +273 -0
- package/commands/sync.md +977 -0
- package/commands/version.md +103 -0
- package/hooks/antigravity-hooks.json +84 -0
- package/hooks/antigravity-session-start.sh +15 -0
- package/hooks/bare-root-cwd-guard.sh +131 -0
- package/hooks/browser-snapshot-credential-guard.sh +200 -0
- package/hooks/codex-session-start.sh +9 -0
- package/hooks/compaction-state.sh +525 -0
- package/hooks/destructive-command-guard.sh +1387 -0
- package/hooks/devin-session-start.sh +90 -0
- package/hooks/ext-filter-detect.sh +171 -0
- package/hooks/hooks.json +133 -0
- package/hooks/lib/hook-tool-kind.sh +24 -0
- package/hooks/lib/log-rotation.sh +176 -0
- package/hooks/lib/shell-argv.pl +576 -0
- package/hooks/memory-backstop.sh +1114 -0
- package/hooks/operator-stage-approval.sh +391 -0
- package/hooks/stop-hook.sh +367 -0
- package/hooks/unkept-promise-hook.sh +383 -0
- package/hooks/version-banner.sh +127 -0
- package/hooks/welcome-hook.sh +50 -0
- package/install.js +29 -0
- package/lib/agent-registry.ts +154 -0
- package/lib/c4-canonical-cli.mjs +34 -0
- package/lib/c4-canonical.mjs +46 -0
- package/lib/c4-from-components.ts +554 -0
- package/lib/go-routing.ts +81 -0
- package/lib/grok-inspect-contract.ts +311 -0
- package/lib/harness-model-map.ts +101 -0
- package/lib/harness-parity.ts +726 -0
- package/lib/harness-tool-map.ts +180 -0
- package/lib/harness.ts +716 -0
- package/lib/heartbeat-live-reconcile.ts +1153 -0
- package/lib/heartbeat-manifest.ts +361 -0
- package/lib/kb-coverage.ts +252 -0
- package/lib/pr-merge-poll.ts +103 -0
- package/lib/workflow-fidelity.ts +388 -0
- package/opencode/INSTRUCTIONS.md +171 -0
- package/opencode/agents/engineering/cto.md +10 -0
- package/opencode/agents/engineering/design/ddd-architect.md +10 -0
- package/opencode/agents/engineering/discovery/agent-finder.md +10 -0
- package/opencode/agents/engineering/discovery/functional-discovery.md +10 -0
- package/opencode/agents/engineering/infra/infra-security.md +10 -0
- package/opencode/agents/engineering/infra/platform-strategist.md +10 -0
- package/opencode/agents/engineering/infra/terraform-architect.md +10 -0
- package/opencode/agents/engineering/prompt-engineer.md +10 -0
- package/opencode/agents/engineering/research/best-practices-researcher.md +10 -0
- package/opencode/agents/engineering/research/framework-docs-researcher.md +10 -0
- package/opencode/agents/engineering/research/git-history-analyzer.md +10 -0
- package/opencode/agents/engineering/research/learnings-researcher.md +10 -0
- package/opencode/agents/engineering/research/repo-research-analyst.md +10 -0
- package/opencode/agents/engineering/review/agent-native-reviewer.md +10 -0
- package/opencode/agents/engineering/review/architecture-strategist.md +10 -0
- package/opencode/agents/engineering/review/code-quality-analyst.md +10 -0
- package/opencode/agents/engineering/review/code-simplicity-reviewer.md +10 -0
- package/opencode/agents/engineering/review/data-integrity-guardian.md +10 -0
- package/opencode/agents/engineering/review/data-migration-expert.md +10 -0
- package/opencode/agents/engineering/review/deployment-verification-agent.md +10 -0
- package/opencode/agents/engineering/review/dhh-rails-reviewer.md +10 -0
- package/opencode/agents/engineering/review/kieran-rails-reviewer.md +10 -0
- package/opencode/agents/engineering/review/legacy-code-expert.md +10 -0
- package/opencode/agents/engineering/review/observability-coverage-reviewer.md +10 -0
- package/opencode/agents/engineering/review/pattern-recognition-specialist.md +10 -0
- package/opencode/agents/engineering/review/performance-oracle.md +10 -0
- package/opencode/agents/engineering/review/security-sentinel.md +10 -0
- package/opencode/agents/engineering/review/semgrep-sast.md +10 -0
- package/opencode/agents/engineering/review/test-design-reviewer.md +10 -0
- package/opencode/agents/engineering/review/user-impact-reviewer.md +10 -0
- package/opencode/agents/engineering/workflow/pr-comment-resolver.md +10 -0
- package/opencode/agents/finance/budget-analyst.md +10 -0
- package/opencode/agents/finance/cfo.md +10 -0
- package/opencode/agents/finance/financial-reporter.md +10 -0
- package/opencode/agents/finance/revenue-analyst.md +10 -0
- package/opencode/agents/legal/clo.md +10 -0
- package/opencode/agents/legal/legal-compliance-auditor.md +10 -0
- package/opencode/agents/legal/legal-document-generator.md +10 -0
- package/opencode/agents/marketing/analytics-analyst.md +10 -0
- package/opencode/agents/marketing/brand-architect.md +10 -0
- package/opencode/agents/marketing/cmo.md +10 -0
- package/opencode/agents/marketing/conversion-optimizer.md +10 -0
- package/opencode/agents/marketing/copywriter.md +10 -0
- package/opencode/agents/marketing/fact-checker.md +10 -0
- package/opencode/agents/marketing/growth-strategist.md +10 -0
- package/opencode/agents/marketing/paid-media-strategist.md +10 -0
- package/opencode/agents/marketing/pricing-strategist.md +10 -0
- package/opencode/agents/marketing/programmatic-seo-specialist.md +10 -0
- package/opencode/agents/marketing/retention-strategist.md +10 -0
- package/opencode/agents/marketing/seo-aeo-analyst.md +10 -0
- package/opencode/agents/operations/coo.md +10 -0
- package/opencode/agents/operations/ops-advisor.md +10 -0
- package/opencode/agents/operations/ops-provisioner.md +10 -0
- package/opencode/agents/operations/ops-research.md +10 -0
- package/opencode/agents/operations/service-automator.md +10 -0
- package/opencode/agents/product/business-validator.md +10 -0
- package/opencode/agents/product/competitive-intelligence.md +10 -0
- package/opencode/agents/product/cpo.md +10 -0
- package/opencode/agents/product/design/ux-design-lead.md +10 -0
- package/opencode/agents/product/spec-flow-analyzer.md +10 -0
- package/opencode/agents/sales/cro.md +10 -0
- package/opencode/agents/sales/deal-architect.md +10 -0
- package/opencode/agents/sales/outbound-strategist.md +10 -0
- package/opencode/agents/sales/pipeline-analyst.md +10 -0
- package/opencode/agents/support/cco.md +10 -0
- package/opencode/agents/support/community-manager.md +10 -0
- package/opencode/agents/support/ticket-triage.md +10 -0
- package/opencode/commands/go.md +10 -0
- package/opencode/commands/help.md +10 -0
- package/opencode/commands/sync.md +10 -0
- package/opencode/commands/version.md +11 -0
- package/opencode/opencode.json +8 -0
- package/opencode/plugin.ts +818 -0
- package/package.json +36 -4
- package/scripts/admin-merge-ready.sh +545 -0
- package/scripts/admin-merge-ready.test.sh +753 -0
- package/scripts/affected-tests.sh +908 -0
- package/scripts/affected-tests.test.sh +1797 -0
- package/scripts/alpha-metrics.sh +78 -0
- package/scripts/alpha-metrics.test.sh +115 -0
- package/scripts/ancestor-signal-helpers.baseline.txt +16 -0
- package/scripts/audit-flag-flip.sh +107 -0
- package/scripts/check-red-on-main.sh +316 -0
- package/scripts/ci-head-verdict.sh +411 -0
- package/scripts/cloud-detect.sh +193 -0
- package/scripts/delegation-verify.sh +657 -0
- package/scripts/delegation-verify.test.sh +1424 -0
- package/scripts/deploy-arm.sh +475 -0
- package/scripts/domain-model-drift.sh +419 -0
- package/scripts/emit-decision.sh +144 -0
- package/scripts/emit-decision.test.sh +144 -0
- package/scripts/ext-filter-divergence-corpus.txt +15 -0
- package/scripts/ext-filter-divergence.sh +189 -0
- package/scripts/generate-c4-from-components.ts +442 -0
- package/scripts/grok-fidelity-gate.sh +68 -0
- package/scripts/grok-pre-push-gate.sh +232 -0
- package/scripts/harness-discovery-smoke.ts +906 -0
- package/scripts/harness-parity-census.ts +92 -0
- package/scripts/inngest-luks-alert-armed-probe.ts +29 -0
- package/scripts/install-opencode-adapter.ts +509 -0
- package/scripts/lib/affected-tests/common.sh +365 -0
- package/scripts/lib/affected-tests/go.sh +157 -0
- package/scripts/lib/affected-tests/js.sh +188 -0
- package/scripts/lib/affected-tests/nx-turbo.sh +98 -0
- package/scripts/lib/affected-tests/python.sh +185 -0
- package/scripts/lib/context-sanitize.sh +49 -0
- package/scripts/lib/domain-model-lib.sh +180 -0
- package/scripts/lib/ext-filter-grammar.tsv +34 -0
- package/scripts/lib/operator-script.sh +1236 -0
- package/scripts/lib/proc.sh +580 -0
- package/scripts/lib/session-state.sh +748 -0
- package/scripts/lib/tmp-classify.sh +843 -0
- package/scripts/lib/wrapper-boundary.sh +47 -0
- package/scripts/lint-ratchet.py +1547 -0
- package/scripts/monitor-pr-checks.sh +441 -0
- package/scripts/pipeline-tally.sh +756 -0
- package/scripts/pipeline-tally.test.sh +740 -0
- package/scripts/plugin-version.sh +528 -0
- package/scripts/precommit-guard.sh +115 -0
- package/scripts/precommit-guard.test.sh +254 -0
- package/scripts/reconcile-live-heartbeats.ts +705 -0
- package/scripts/render-c4-model.sh +217 -0
- package/scripts/resolve-git-root.sh +55 -0
- package/scripts/resolve-regenerable-conflicts.sh +363 -0
- package/scripts/resolve-regenerable-conflicts.test.sh +780 -0
- package/scripts/ruff-requirements.txt +22 -0
- package/scripts/run-in-pid-namespace.sh +98 -0
- package/scripts/run-in-pid-namespace.test.sh +290 -0
- package/scripts/scan-ancestor-signal-helpers.py +556 -0
- package/scripts/scan-ancestor-signal-helpers.test.sh +670 -0
- package/scripts/setup-ralph-loop.sh +238 -0
- package/scripts/sync-cursor-name-map.ts +316 -0
- package/scripts/sync-grok-agent-compat.ts +188 -0
- package/scripts/sync-npm-package.ts +165 -0
- package/scripts/sync-opencode-adapter.ts +498 -0
- package/scripts/sync-pr-behind.sh +647 -0
- package/scripts/sync-pr-behind.test.sh +252 -0
- package/scripts/taste-profile-update.sh +180 -0
- package/scripts/taste-profile-update.test.sh +167 -0
- package/scripts/write-budget-marker.sh +23 -0
- package/scripts/write-kb-coverage.ts +113 -0
- package/skills/admin-ip-refresh/SKILL.md +81 -0
- package/skills/admin-ip-refresh/references/admin-ip-refresh-procedure.md +201 -0
- package/skills/agent-browser/SKILL.md +698 -0
- package/skills/agent-browser/scripts/playwright-mcp-profile-slot.sh +304 -0
- package/skills/agent-browser/scripts/playwright-mcp-redact-proxy.py +964 -0
- package/skills/agent-browser/scripts/redact-a11y-snapshot.py +443 -0
- package/skills/agent-browser/test/fixtures/capture-playwright-mcp-fixtures.py +217 -0
- package/skills/agent-browser/test/fixtures/fake-passthrough-proxy.py +24 -0
- package/skills/agent-browser/test/fixtures/fake-playwright-mcp.py +131 -0
- package/skills/agent-browser/test/fixtures/make-proxy-mutant.py +48 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/dialog-link-injection.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/empty-content.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-and-result.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-code-bool.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-code-string.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-message-tree.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-no-data.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-string.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-with-data.json +9 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/evaluate-escaped-object.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/invalid-utf8.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/link-result.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/list-two-results.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/meta-in-result.json +13 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/no-content.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/quoted-key.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/resource-block.json +18 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/result-and-method.json +11 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/result-string.json +3 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped-one-row.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/structured-content.json +13 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/tools-list-no-tools.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/tree-no-credential.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/two-text-blocks.json +14 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/unparsable-line.json +3 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-brace.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-link-substring.json +10 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/close.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/evaluate.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/find.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/framing.json +6 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/initialize.json +14 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate-link.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/roots-list-request.json +5 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/screenshot.json +17 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-filename.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-json.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-raw.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/tools-list.json +827 -0
- package/skills/agent-browser/test/fixtures/proxy-session-driver.py +138 -0
- package/skills/agent-browser/test/fixtures/session-facts.py +102 -0
- package/skills/agent-browser/test/playwright-mcp-lifetime.test.sh +1620 -0
- package/skills/agent-browser/test/playwright-mcp-redact-proxy.test.sh +1599 -0
- package/skills/agent-browser/test/redact-a11y-snapshot.test.sh +527 -0
- package/skills/agent-native-architecture/SKILL.md +479 -0
- package/skills/agent-native-architecture/references/action-parity-discipline.md +430 -0
- package/skills/agent-native-architecture/references/agent-execution-patterns.md +483 -0
- package/skills/agent-native-architecture/references/agent-native-testing.md +605 -0
- package/skills/agent-native-architecture/references/architecture-patterns.md +493 -0
- package/skills/agent-native-architecture/references/dynamic-context-injection.md +358 -0
- package/skills/agent-native-architecture/references/files-universal-interface.md +314 -0
- package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +381 -0
- package/skills/agent-native-architecture/references/mcp-tool-design.md +524 -0
- package/skills/agent-native-architecture/references/mobile-patterns.md +897 -0
- package/skills/agent-native-architecture/references/product-implications.md +478 -0
- package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +342 -0
- package/skills/agent-native-architecture/references/self-modification.md +294 -0
- package/skills/agent-native-architecture/references/shared-workspace-architecture.md +700 -0
- package/skills/agent-native-architecture/references/system-prompt-design.md +263 -0
- package/skills/agent-native-audit/SKILL.md +300 -0
- package/skills/agent-native-audit/workflows/agent-native-audit.workflow.js +423 -0
- package/skills/andrew-kane-gem-writer/SKILL.md +189 -0
- package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/skills/andrew-kane-gem-writer/references/resources.md +126 -0
- package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/skills/architecture/SKILL.md +436 -0
- package/skills/architecture/references/adr-template.md +154 -0
- package/skills/architecture/references/likec4-reference.md +136 -0
- package/skills/architecture/references/nfr-reference.md +126 -0
- package/skills/archive-kb/SKILL.md +86 -0
- package/skills/archive-kb/scripts/archive-kb.sh +300 -0
- package/skills/archive-kb/test/archive-kb-partial-run.test.sh +276 -0
- package/skills/atdd-developer/SKILL.md +65 -0
- package/skills/brainstorm/SKILL.md +701 -0
- package/skills/brainstorm/references/brainstorm-brand-workshop.md +153 -0
- package/skills/brainstorm/references/brainstorm-domain-config.md +63 -0
- package/skills/brainstorm/references/brainstorm-validation-workshop.md +65 -0
- package/skills/brainstorm/references/ui-surface-terms.md +42 -0
- package/skills/brainstorm-techniques/SKILL.md +231 -0
- package/skills/brainstorm-techniques/references/decision-principles.md +150 -0
- package/skills/brainstorm-techniques/references/phase-boundaries.md +103 -0
- package/skills/brainstorm-techniques/references/standing-delegation.md +407 -0
- package/skills/brainstorm-techniques/references/technical-ruling-delegation.md +174 -0
- package/skills/campaign-calendar/SKILL.md +145 -0
- package/skills/cf-token-scope/SKILL.md +164 -0
- package/skills/cf-token-scope/references/widen-playbook.md +114 -0
- package/skills/cf-token-scope/scripts/cf-token-scope.sh +253 -0
- package/skills/changelog/SKILL.md +142 -0
- package/skills/code-to-prd/SKILL.md +66 -0
- package/skills/code-to-prd/references/banner-template.md +12 -0
- package/skills/code-to-prd/references/prd-template.md +41 -0
- package/skills/code-to-prd/scripts/code-to-prd.sh +634 -0
- package/skills/code-to-prd/test/code-to-prd.test.sh +447 -0
- package/skills/code-to-prd/test/fixture/.env.example +7 -0
- package/skills/code-to-prd/test/fixture/app/about/page.tsx +11 -0
- package/skills/code-to-prd/test/fixture/app/api/health/route.ts +10 -0
- package/skills/code-to-prd/test/fixture/app/page.tsx +14 -0
- package/skills/code-to-prd/test/fixture/next.config.mjs +3 -0
- package/skills/code-to-prd/test/fixture/package.json +6 -0
- package/skills/cohort-status/SKILL.md +62 -0
- package/skills/community/SKILL.md +210 -0
- package/skills/community/scripts/bsky-community.sh +644 -0
- package/skills/community/scripts/bsky-setup.sh +631 -0
- package/skills/community/scripts/community-router.sh +93 -0
- package/skills/community/scripts/discord-community.sh +487 -0
- package/skills/community/scripts/discord-setup.sh +784 -0
- package/skills/community/scripts/github-community.sh +706 -0
- package/skills/community/scripts/hn-community.sh +233 -0
- package/skills/community/scripts/lib/hmac-sha1-b64.sh +126 -0
- package/skills/community/scripts/linkedin-community.sh +750 -0
- package/skills/community/scripts/linkedin-setup.sh +758 -0
- package/skills/community/scripts/x-community.sh +890 -0
- package/skills/community/scripts/x-setup.sh +713 -0
- package/skills/community/test/community-argv.test.sh +2922 -0
- package/skills/community/test/github-community.test.sh +981 -0
- package/skills/competitive-analysis/SKILL.md +69 -0
- package/skills/competitive-analysis/references/peer-plugin-audit.md +218 -0
- package/skills/compound/SKILL.md +673 -0
- package/skills/compound/scripts/token-efficiency-report.sh +334 -0
- package/skills/compound/test/phase-16.test.sh +379 -0
- package/skills/compound-capture/SKILL.md +791 -0
- package/skills/compound-capture/assets/critical-pattern-template.md +37 -0
- package/skills/compound-capture/assets/resolution-template.md +116 -0
- package/skills/compound-capture/references/yaml-schema.md +67 -0
- package/skills/compound-capture/schema.yaml +181 -0
- package/skills/constraint-scaffold/SKILL.md +175 -0
- package/skills/constraint-scaffold/references/boundary-readme.template +35 -0
- package/skills/constraint-scaffold/references/constraint-gates-workflow.template +69 -0
- package/skills/constraint-scaffold/references/depcruise-config.template +230 -0
- package/skills/constraint-scaffold/references/fix-constraints-stage-a.template +240 -0
- package/skills/constraint-scaffold/references/fix-constraints-stage-b.template +313 -0
- package/skills/constraint-scaffold/references/shared-runner.template +135 -0
- package/skills/constraint-scaffold/scripts/constraint-scaffold.sh +589 -0
- package/skills/constraint-scaffold/test/bite-proof.test.sh +1338 -0
- package/skills/constraint-scaffold/test/boundary.test.sh +734 -0
- package/skills/constraint-scaffold/test/emit-fix-constraints.test.sh +193 -0
- package/skills/constraint-scaffold/test/generator.test.sh +93 -0
- package/skills/constraint-scaffold/test/parity.test.sh +285 -0
- package/skills/content-writer/SKILL.md +242 -0
- package/skills/content-writer/scripts/blog-jargon-scan.sh +42 -0
- package/skills/cron-delete/SKILL.md +56 -0
- package/skills/cron-list/SKILL.md +54 -0
- package/skills/deepen-plan/SKILL.md +937 -0
- package/skills/deepen-plan/workflows/deepen-plan.workflow.js +488 -0
- package/skills/deploy/SKILL.md +115 -0
- package/skills/deploy/references/hetzner-setup.md +67 -0
- package/skills/deploy/scripts/deploy.sh +37 -0
- package/skills/deploy-docs/SKILL.md +95 -0
- package/skills/dhh-rails-style/SKILL.md +203 -0
- package/skills/dhh-rails-style/references/architecture.md +717 -0
- package/skills/dhh-rails-style/references/controllers.md +323 -0
- package/skills/dhh-rails-style/references/frontend.md +556 -0
- package/skills/dhh-rails-style/references/gems.md +316 -0
- package/skills/dhh-rails-style/references/models.md +388 -0
- package/skills/dhh-rails-style/references/testing.md +354 -0
- package/skills/discord-content/SKILL.md +126 -0
- package/skills/docs-site/SKILL.md +214 -0
- package/skills/drain-labeled-backlog/SKILL.md +203 -0
- package/skills/drain-labeled-backlog/scripts/group-by-area.sh +208 -0
- package/skills/drain-labeled-backlog/workflows/drain-labeled-backlog.workflow.js +433 -0
- package/skills/drain-prs/SKILL.md +143 -0
- package/skills/drain-prs/scripts/triage-prs.sh +192 -0
- package/skills/drain-prs/test/argv-ceiling.test.sh +183 -0
- package/skills/dspy-ruby/SKILL.md +634 -0
- package/skills/dspy-ruby/assets/config-template.rb +359 -0
- package/skills/dspy-ruby/assets/module-template.rb +326 -0
- package/skills/dspy-ruby/assets/signature-template.rb +143 -0
- package/skills/dspy-ruby/references/core-concepts.md +268 -0
- package/skills/dspy-ruby/references/optimization.md +623 -0
- package/skills/dspy-ruby/references/providers.md +335 -0
- package/skills/eval-harness/README.md +194 -0
- package/skills/eval-harness/SKILL.md +157 -0
- package/skills/eval-harness/enums/go-routes.json +13 -0
- package/skills/eval-harness/enums/incident-threshold.json +5 -0
- package/skills/eval-harness/enums/lane.json +5 -0
- package/skills/eval-harness/enums/tool-selection.json +20 -0
- package/skills/eval-harness/enums/triage-levels.json +5 -0
- package/skills/eval-harness/gated-skills.json +34 -0
- package/skills/eval-harness/models.generated.json +5 -0
- package/skills/eval-harness/promptfooconfig-go-routing.yaml +35 -0
- package/skills/eval-harness/promptfooconfig-incident-threshold.yaml +32 -0
- package/skills/eval-harness/promptfooconfig-lane-inference.yaml +33 -0
- package/skills/eval-harness/promptfooconfig-ticket-triage.yaml +34 -0
- package/skills/eval-harness/promptfooconfig-tool-selection.yaml +33 -0
- package/skills/eval-harness/prompts/go-baseline.txt +6 -0
- package/skills/eval-harness/prompts/go-skill.txt +21 -0
- package/skills/eval-harness/prompts/incident-threshold-baseline.txt +6 -0
- package/skills/eval-harness/prompts/incident-threshold-skill.txt +12 -0
- package/skills/eval-harness/prompts/lane-inference-baseline.txt +6 -0
- package/skills/eval-harness/prompts/lane-inference-skill.txt +15 -0
- package/skills/eval-harness/prompts/tool-selection-baseline.txt +19 -0
- package/skills/eval-harness/prompts/tool-selection-skill.txt +22 -0
- package/skills/eval-harness/prompts/triage-baseline.txt +7 -0
- package/skills/eval-harness/prompts/triage-skill.txt +10 -0
- package/skills/eval-harness/scripts/eval-gate.cjs +318 -0
- package/skills/eval-harness/scripts/extract-block.cjs +87 -0
- package/skills/eval-harness/scripts/gate-classification.cjs +28 -0
- package/skills/eval-harness/scripts/gen-models.sh +41 -0
- package/skills/eval-harness/scripts/gen-skill-prompt.cjs +177 -0
- package/skills/eval-harness/scripts/measure-classification.cjs +30 -0
- package/skills/eval-harness/scripts/parse-label.cjs +93 -0
- package/skills/eval-harness/scripts/verdict.cjs +132 -0
- package/skills/eval-harness/tasks/go-routing.jsonl +8 -0
- package/skills/eval-harness/tasks/incident-threshold.jsonl +7 -0
- package/skills/eval-harness/tasks/lane-inference.jsonl +7 -0
- package/skills/eval-harness/tasks/ticket-triage.jsonl +6 -0
- package/skills/eval-harness/tasks/tool-selection.jsonl +15 -0
- package/skills/eval-harness/test/eval-gate.test.sh +132 -0
- package/skills/eval-harness/test/extract-block.test.sh +87 -0
- package/skills/eval-harness/test/gate-classification.test.sh +77 -0
- package/skills/eval-harness/test/gen-models.test.sh +75 -0
- package/skills/eval-harness/test/measure-classification.test.sh +74 -0
- package/skills/eval-harness/test/parse-label.test.sh +129 -0
- package/skills/eval-harness/test/registry-completeness.test.sh +109 -0
- package/skills/eval-harness/test/verdict.test.sh +123 -0
- package/skills/every-style-editor/SKILL.md +142 -0
- package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/skills/feature-tweet/SKILL.md +199 -0
- package/skills/feature-video/SKILL.md +412 -0
- package/skills/feature-video/scripts/check_deps.sh +281 -0
- package/skills/file-todos/SKILL.md +267 -0
- package/skills/file-todos/assets/todo-template.md +166 -0
- package/skills/fix-issue/SKILL.md +278 -0
- package/skills/fix-issue/references/agent-authored-exclusion.md +120 -0
- package/skills/fix-issue/references/exclude-label-jq-snippet.md +97 -0
- package/skills/flag-bootstrap/SETUP.md +142 -0
- package/skills/flag-create/SKILL.md +145 -0
- package/skills/flag-create/scripts/create.sh +273 -0
- package/skills/flag-delete/SKILL.md +167 -0
- package/skills/flag-delete/scripts/delete.sh +288 -0
- package/skills/flag-list/SKILL.md +99 -0
- package/skills/flag-list/scripts/list.sh +275 -0
- package/skills/flag-set-role/SKILL.md +229 -0
- package/skills/flag-set-role/scripts/flip.sh +774 -0
- package/skills/frontend-anti-slop/SKILL.md +106 -0
- package/skills/frontend-anti-slop/references/anti-patterns.md +199 -0
- package/skills/frontend-anti-slop/references/slop-rules.md +65 -0
- package/skills/frontend-anti-slop/scripts/tier1-scan.ts +525 -0
- package/skills/frontend-design/SKILL.md +77 -0
- package/skills/gdpr-gate/NOTICE +136 -0
- package/skills/gdpr-gate/SKILL.md +341 -0
- package/skills/gdpr-gate/references/fields.md +160 -0
- package/skills/gdpr-gate/references/layers/api-layer.md +355 -0
- package/skills/gdpr-gate/references/layers/auth-sessions.md +290 -0
- package/skills/gdpr-gate/references/layers/data-in-transit.md +331 -0
- package/skills/gdpr-gate/references/layers/data-lifecycle.md +341 -0
- package/skills/gdpr-gate/references/layers/frontend.md +249 -0
- package/skills/gdpr-gate/references/layers/testing-seeding.md +256 -0
- package/skills/gdpr-gate/references/leakage-vectors.md +248 -0
- package/skills/gdpr-gate/references/legacy/legal-consent-v1-prose.md +48 -0
- package/skills/gdpr-gate/references/legal-consent.md +140 -0
- package/skills/gdpr-gate/references/non-negotiables.md +60 -0
- package/skills/gdpr-gate/scripts/gdpr-gate.sh +271 -0
- package/skills/gdpr-gate/scripts/notice-frontmatter.sh +337 -0
- package/skills/gdpr-gate/scripts/path-denylist.txt +39 -0
- package/skills/gdpr-gate/scripts/repo-scan.sh +158 -0
- package/skills/gdpr-gate/scripts/vendor-drift-classify.sh +120 -0
- package/skills/gdpr-gate/scripts/vendor-pin-integrity.sh +237 -0
- package/skills/gemini-imagegen/SKILL.md +283 -0
- package/skills/gemini-imagegen/requirements.txt +5 -0
- package/skills/gemini-imagegen/scripts/_error_handling.py +146 -0
- package/skills/gemini-imagegen/scripts/compose_images.py +150 -0
- package/skills/gemini-imagegen/scripts/edit_image.py +137 -0
- package/skills/gemini-imagegen/scripts/gemini_images.py +256 -0
- package/skills/gemini-imagegen/scripts/generate_image.py +147 -0
- package/skills/gemini-imagegen/scripts/multi_turn_chat.py +223 -0
- package/skills/gemini-imagegen/scripts/test_error_handling.py +179 -0
- package/skills/git-worktree/SKILL.md +534 -0
- package/skills/git-worktree/scripts/git-repo-readiness-diag.sh +98 -0
- package/skills/git-worktree/scripts/worktree-manager.sh +4773 -0
- package/skills/git-worktree/test/create-from-origin-main.test.sh +116 -0
- package/skills/git-worktree/test/lease-protects-active.test.sh +1056 -0
- package/skills/git-worktree/test/no-repo-fail-loud.test.sh +88 -0
- package/skills/git-worktree/test/orphan-reaper-honest-count.test.sh +379 -0
- package/skills/git-worktree/test/reap-archive-persistence.test.sh +725 -0
- package/skills/git-worktree/test/stale-lock-sweep.test.sh +176 -0
- package/skills/go/SKILL.md +54 -0
- package/skills/growth/SKILL.md +164 -0
- package/skills/harvest-debt/SKILL.md +78 -0
- package/skills/harvest-debt/scripts/harvest-debt.sh +114 -0
- package/skills/heal-skill/SKILL.md +173 -0
- package/skills/help/SKILL.md +46 -0
- package/skills/incident/NOTICE +39 -0
- package/skills/incident/SKILL.md +395 -0
- package/skills/incident/scripts/dry-run.sh +448 -0
- package/skills/incident/scripts/redact-engine.py +412 -0
- package/skills/incident/scripts/redact-sentinel.sh +44 -0
- package/skills/incident/templates/pir.md +139 -0
- package/skills/incident/test/fixtures/dry-run-incident.json +26 -0
- package/skills/incident/test/fixtures/dry-run-secret-leak.json +26 -0
- package/skills/incident/test/fixtures/legacy-bash-scanner.sh +82 -0
- package/skills/incident/test/fixtures/positive-corpus.md +87 -0
- package/skills/incident/test/redact-sentinel.test.sh +1420 -0
- package/skills/invoice/SKILL.md +206 -0
- package/skills/kb-glossary/SKILL.md +71 -0
- package/skills/kb-glossary/references/glossary-format.md +111 -0
- package/skills/kb-glossary/references/rejected-request-register.md +115 -0
- package/skills/kb-search/SKILL.md +276 -0
- package/skills/kb-search/scripts/kb-search-cache.sh +123 -0
- package/skills/legal-audit/SKILL.md +161 -0
- package/skills/legal-generate/NOTICE +242 -0
- package/skills/legal-generate/SKILL.md +244 -0
- package/skills/legal-generate/references/templates/advisor-agreement/template.md +12 -0
- package/skills/legal-generate/references/templates/business-associate-agreement/template.md +112 -0
- package/skills/legal-generate/references/templates/cookie-notice/template.md +82 -0
- package/skills/legal-generate/references/templates/dpa-global/template.md +439 -0
- package/skills/legal-generate/references/templates/dpa-us/template.md +222 -0
- package/skills/legal-generate/references/templates/employee-offer-letter/template.md +75 -0
- package/skills/legal-generate/references/templates/master-services-agreement/template.md +252 -0
- package/skills/legal-generate/references/templates/mutual-nda/template.md +66 -0
- package/skills/legal-generate/references/templates/one-way-nda/template.md +38 -0
- package/skills/legal-generate/references/templates/privacy-policy-gdpr/template.md +427 -0
- package/skills/legal-generate/references/templates/privacy-policy-us/template.md +313 -0
- package/skills/legal-generate/references/templates/terms-of-use/template.md +75 -0
- package/skills/legal-generate/scripts/strip-vendor-credit.sh +96 -0
- package/skills/linear-fetch/SKILL.md +247 -0
- package/skills/linear-fetch/scripts/assert-no-linear-telemetry.sh +66 -0
- package/skills/linear-fetch/scripts/redact-linear-urls.sh +51 -0
- package/skills/linear-fetch/scripts/render-caller-template.sh +36 -0
- package/skills/linear-fetch/test/assert-no-linear-telemetry.test.sh +113 -0
- package/skills/linear-fetch/test/parity.test.sh +112 -0
- package/skills/linear-fetch/test/persist-safe-integration.test.sh +191 -0
- package/skills/linear-fetch/test/redact-linear-urls.test.sh +226 -0
- package/skills/merge-pr/SKILL.md +670 -0
- package/skills/model-launch-review/SKILL.md +255 -0
- package/skills/model-launch-review/scripts/audit-models.sh +501 -0
- package/skills/one-shot/SKILL.md +316 -0
- package/skills/one-shot/references/token-discipline.md +74 -0
- package/skills/operator-bootstrap/SKILL.md +412 -0
- package/skills/operator-bootstrap/template.sh +439 -0
- package/skills/operator-digest/SKILL.md +287 -0
- package/skills/operator-digest/assets/operator-digest.workflow.yml +175 -0
- package/skills/operator-digest/scripts/digest-scrub.sh +119 -0
- package/skills/operator-digest/scripts/provision-operator-digest-repo.sh +147 -0
- package/skills/operator-rephrase/SKILL.md +98 -0
- package/skills/pencil-setup/SKILL.md +201 -0
- package/skills/pencil-setup/scripts/check_deps.sh +556 -0
- package/skills/pencil-setup/scripts/copy_adapter.sh +80 -0
- package/skills/pencil-setup/scripts/package-lock.json +1172 -0
- package/skills/pencil-setup/scripts/package.json +14 -0
- package/skills/pencil-setup/scripts/pencil-error-enrichment.mjs +21 -0
- package/skills/pencil-setup/scripts/pencil-mcp-adapter.mjs +733 -0
- package/skills/pencil-setup/scripts/pencil-response-classify.mjs +38 -0
- package/skills/pencil-setup/scripts/pencil-save-gate.mjs +26 -0
- package/skills/pencil-setup/scripts/sanitize-filename.mjs +25 -0
- package/skills/plan/SKILL.md +1140 -0
- package/skills/plan/references/differential-migration-testing.md +185 -0
- package/skills/plan/references/plan-community-discovery.md +42 -0
- package/skills/plan/references/plan-founder-check.md +137 -0
- package/skills/plan/references/plan-functional-overlap.md +25 -0
- package/skills/plan/references/plan-host-fanout.md +51 -0
- package/skills/plan/references/plan-issue-templates.md +779 -0
- package/skills/plan/references/plan-network-outage-checklist.md +131 -0
- package/skills/plan/references/plan-scope-check.md +126 -0
- package/skills/plan/references/plan-sharp-edges.md +331 -0
- package/skills/plan/references/plan-signoff-lifecycle.md +12 -0
- package/skills/plan/references/webapp-cwv-observability.md +143 -0
- package/skills/plan-review/SKILL.md +91 -0
- package/skills/plan-review/lib/named-panel.mjs +58 -0
- package/skills/plan-review/workflows/plan-review.workflow.js +477 -0
- package/skills/postmerge/SKILL.md +642 -0
- package/skills/postmerge/references/deploy-status-debugging.md +141 -0
- package/skills/postmerge/references/graceful-degradation.md +20 -0
- package/skills/postmerge/references/sentry-error-count-delta.md +137 -0
- package/skills/preflight/SKILL.md +1553 -0
- package/skills/preflight/references/check-13-founder-check.md +286 -0
- package/skills/preflight/scripts/founder-check.py +1640 -0
- package/skills/preflight/scripts/parse-form-a.awk +107 -0
- package/skills/preflight/scripts/probe-verb-gate.sh +108 -0
- package/skills/product-roadmap/SKILL.md +357 -0
- package/skills/product-roadmap/scripts/roadmap-reconcile.sh +327 -0
- package/skills/provision-cloudflare/SKILL.md +67 -0
- package/skills/provision-cloudflare/scripts/provision-cloudflare.sh +271 -0
- package/skills/provision-doppler/SKILL.md +58 -0
- package/skills/provision-doppler/scripts/provision-doppler.sh +358 -0
- package/skills/provision-github/SKILL.md +59 -0
- package/skills/provision-github/scripts/provision-github.sh +300 -0
- package/skills/provision-hetzner/SKILL.md +76 -0
- package/skills/provision-hetzner/scripts/provision-hetzner.sh +262 -0
- package/skills/provision-hetzner/test/fixture/knowledge-base/legal/tenant-dpa-register.md +26 -0
- package/skills/provision-hetzner/test/fixture/provision-hetzner-dry-run.golden +34 -0
- package/skills/provision-hetzner/test/provision-hetzner-characterization.test.sh +227 -0
- package/skills/qa/SKILL.md +263 -0
- package/skills/qa/references/browser-preflight.md +22 -0
- package/skills/questionnaire-generate/SKILL.md +328 -0
- package/skills/questionnaire-generate/references/questionnaire.template +60 -0
- package/skills/rclone/SKILL.md +162 -0
- package/skills/rclone/scripts/check_setup.sh +63 -0
- package/skills/release-announce/SKILL.md +65 -0
- package/skills/release-docs/SKILL.md +92 -0
- package/skills/reproduce-bug/SKILL.md +358 -0
- package/skills/resolve-debt/SKILL.md +85 -0
- package/skills/resolve-debt/scripts/resolve-debt.py +584 -0
- package/skills/resolve-parallel/SKILL.md +45 -0
- package/skills/resolve-parallel/workflows/resolve-parallel.workflow.js +415 -0
- package/skills/resolve-pr-parallel/SKILL.md +68 -0
- package/skills/resolve-pr-parallel/workflows/resolve-pr-parallel.workflow.js +419 -0
- package/skills/resolve-todo-parallel/SKILL.md +57 -0
- package/skills/resolve-todo-parallel/workflows/resolve-todo-parallel.workflow.js +398 -0
- package/skills/review/SKILL.md +1620 -0
- package/skills/review/references/anti-slop-scanner-hook.md +40 -0
- package/skills/review/references/defect-classes-migrations.md +9 -0
- package/skills/review/references/generated-input-oracle-surfaces.md +15 -0
- package/skills/review/references/review-e2e-testing.md +116 -0
- package/skills/review/references/review-evidence-comment.md +36 -0
- package/skills/review/references/review-todo-structure.md +165 -0
- package/skills/review/references/risk-tier-and-fix-rounds.md +97 -0
- package/skills/review/references/semgrep-custom-rules.yaml +174 -0
- package/skills/review/references/ultrathink-phases.md +98 -0
- package/skills/review/references/wfs.md +6 -0
- package/skills/review/scripts/emit-review-trailer.sh +499 -0
- package/skills/review/scripts/ensure-semgrep.sh +99 -0
- package/skills/review/scripts/fix-round-seats.sh +197 -0
- package/skills/review/test/emit-review-trailer.test.sh +387 -0
- package/skills/review/test/ensure-semgrep.test.sh +111 -0
- package/skills/review/test/fix-round-seats.test.sh +237 -0
- package/skills/review/workflows/README.md +147 -0
- package/skills/review/workflows/review.workflow.js +667 -0
- package/skills/schedule/SKILL.md +796 -0
- package/skills/seo-aeo/SKILL.md +139 -0
- package/skills/seo-aeo/scripts/validate-csp.sh +233 -0
- package/skills/seo-aeo/scripts/validate-seo.sh +262 -0
- package/skills/ship/SKILL.md +3023 -0
- package/skills/ship/references/adr-ordinal-collision.md +47 -0
- package/skills/ship/references/affected-gate-contract.md +115 -0
- package/skills/ship/references/ci-run-diagnosis.md +29 -0
- package/skills/ship/references/ci-workflow-authoring.md +68 -0
- package/skills/ship/references/cleanup-merged-archival.md +39 -0
- package/skills/ship/references/counsel-review-clo-attestation.md +38 -0
- package/skills/ship/references/cto-ruling-armed-push.md +5 -0
- package/skills/ship/references/decision-challenges-render.md +71 -0
- package/skills/ship/references/delegated-act-authoring-form.md +7 -0
- package/skills/ship/references/detached-battery-verdict.md +13 -0
- package/skills/ship/references/epic-close-sweep.md +62 -0
- package/skills/ship/references/feature-tweet-draft.md +42 -0
- package/skills/ship/references/followthrough-issue-body-template.md +47 -0
- package/skills/ship/references/followthrough-stub-template.sh +92 -0
- package/skills/ship/references/merge-queue-dequeue.md +39 -0
- package/skills/ship/references/operator-holds.md +179 -0
- package/skills/ship/references/pipeline-tally-render.md +43 -0
- package/skills/ship/references/pr-overlap.md +153 -0
- package/skills/ship/references/queue-mode.md +7 -0
- package/skills/ship/references/ready-run-wait.md +36 -0
- package/skills/ship/references/red-on-main-quarantine.md +110 -0
- package/skills/ship/references/register-update-pr-pattern.md +88 -0
- package/skills/ship/references/settle-then-admin-merge.md +130 -0
- package/skills/ship/references/supabase-column-probe.md +13 -0
- package/skills/ship/scripts/auto-close-scan.sh +76 -0
- package/skills/ship/scripts/battery-owed.sh +403 -0
- package/skills/ship/scripts/hold-gate-eval.sh +410 -0
- package/skills/ship/scripts/net-issue-flow.sh +665 -0
- package/skills/ship/scripts/pr-overlap-preflight.sh +483 -0
- package/skills/ship/scripts/ship-pir-action-items-gate.sh +246 -0
- package/skills/ship/scripts/technical-ruling-gate.sh +444 -0
- package/skills/skill-creator/SKILL.md +299 -0
- package/skills/skill-creator/references/api-security.md +248 -0
- package/skills/skill-creator/references/authoring-levers.md +110 -0
- package/skills/skill-creator/references/be-clear-and-direct.md +587 -0
- package/skills/skill-creator/references/best-practices.md +431 -0
- package/skills/skill-creator/references/common-patterns.md +639 -0
- package/skills/skill-creator/references/core-principles.md +193 -0
- package/skills/skill-creator/references/executable-code.md +188 -0
- package/skills/skill-creator/references/iteration-and-testing.md +509 -0
- package/skills/skill-creator/references/official-spec.md +193 -0
- package/skills/skill-creator/references/recommended-structure.md +180 -0
- package/skills/skill-creator/references/skill-structure.md +396 -0
- package/skills/skill-creator/references/using-scripts.md +122 -0
- package/skills/skill-creator/references/using-templates.md +120 -0
- package/skills/skill-creator/references/workflows-and-validation.md +541 -0
- package/skills/skill-creator/scripts/init_skill.py +322 -0
- package/skills/skill-creator/scripts/package_skill.py +110 -0
- package/skills/skill-creator/scripts/quick_validate.py +64 -0
- package/skills/skill-creator/templates/router-skill.md +73 -0
- package/skills/skill-creator/templates/simple-skill.md +34 -0
- package/skills/skill-creator/workflows/add-reference.md +96 -0
- package/skills/skill-creator/workflows/add-script.md +104 -0
- package/skills/skill-creator/workflows/add-template.md +83 -0
- package/skills/skill-creator/workflows/add-workflow.md +128 -0
- package/skills/skill-creator/workflows/audit-skill.md +159 -0
- package/skills/skill-creator/workflows/create-domain-expertise-skill.md +623 -0
- package/skills/skill-creator/workflows/create-new-skill.md +207 -0
- package/skills/skill-creator/workflows/get-guidance.md +134 -0
- package/skills/skill-creator/workflows/upgrade-to-router.md +170 -0
- package/skills/skill-creator/workflows/verify-skill.md +226 -0
- package/skills/skill-security-scan/SKILL.md +145 -0
- package/skills/skill-security-scan/references/disclaimer.md +21 -0
- package/skills/skill-security-scan/references/first-party-allowlist.yaml +38 -0
- package/skills/skill-security-scan/references/override-artifact-schema.json +68 -0
- package/skills/skill-security-scan/references/override-mechanism.md +171 -0
- package/skills/skill-security-scan/references/redirect-domains.yaml +27 -0
- package/skills/skill-security-scan/references/regex-patterns.md +136 -0
- package/skills/skill-security-scan/references/rules/code-exec.yaml +70 -0
- package/skills/skill-security-scan/references/rules/filesystem-boundary.yaml +29 -0
- package/skills/skill-security-scan/references/rules/manifest.yaml +44 -0
- package/skills/skill-security-scan/references/rules/supply-chain.yaml +36 -0
- package/skills/skill-security-scan/references/scan-meta-schema.json +63 -0
- package/skills/skill-security-scan/references/test-fixtures/clean-soleur-style.skill.md +23 -0
- package/skills/skill-security-scan/references/test-fixtures/clean-third-party.skill.md +26 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-codeexec.skill.md +23 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-curl-pipe-bash.skill.md +69 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-prompt-injection.skill.md +17 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-telemetry-beacon.skill.md +23 -0
- package/skills/skill-security-scan/references/typosquat-targets.yaml +65 -0
- package/skills/skill-security-scan/scripts/check-codeexec.sh +41 -0
- package/skills/skill-security-scan/scripts/check-filesystem-boundary.sh +19 -0
- package/skills/skill-security-scan/scripts/check-prompt-injection.sh +95 -0
- package/skills/skill-security-scan/scripts/check-supply-chain.sh +219 -0
- package/skills/skill-security-scan/scripts/check-telemetry-surface.sh +126 -0
- package/skills/skill-security-scan/scripts/lib.sh +197 -0
- package/skills/skill-security-scan/scripts/parse-override.sh +231 -0
- package/skills/skill-security-scan/scripts/run-scan.sh +342 -0
- package/skills/skill-security-scan/scripts/run-self-test.sh +95 -0
- package/skills/skill-security-scan/test/argv-ceiling.test.sh +180 -0
- package/skills/skill-security-scan/test/meta-dir-reap.test.sh +411 -0
- package/skills/skill-security-scan/test/parse-override.test.sh +607 -0
- package/skills/skill-security-scan/test/redact-pii-ghs-shape.test.sh +251 -0
- package/skills/social-distribute/SKILL.md +485 -0
- package/skills/spec-templates/SKILL.md +274 -0
- package/skills/sync/SKILL.md +49 -0
- package/skills/test-browser/SKILL.md +464 -0
- package/skills/test-browser/references/feature-map.md +161 -0
- package/skills/test-fix-loop/SKILL.md +159 -0
- package/skills/test-fix-loop/references/determinism-checklist.md +154 -0
- package/skills/triage/SKILL.md +402 -0
- package/skills/trigger-cron/SKILL.md +136 -0
- package/skills/trigger-cron/scripts/trigger.sh +198 -0
- package/skills/user-set-role/SKILL.md +147 -0
- package/skills/user-set-role/scripts/set-role.sh +218 -0
- package/skills/user-story-writer/SKILL.md +77 -0
- package/skills/ux-audit/SKILL.md +251 -0
- package/skills/ux-audit/references/finding.schema.json +62 -0
- package/skills/ux-audit/references/route-list.yaml +95 -0
- package/skills/ux-audit/scripts/bot-fixture.ts +270 -0
- package/skills/ux-audit/scripts/bot-signin.ts +135 -0
- package/skills/ux-audit/scripts/dedup-hash.ts +46 -0
- package/skills/verification-scaffold/SKILL.md +73 -0
- package/skills/verification-scaffold/references/gitleaks.toml.template +13 -0
- package/skills/verification-scaffold/references/guardrail-audit.md +156 -0
- package/skills/verification-scaffold/references/guards/block-stash-hook.sh.template +72 -0
- package/skills/verification-scaffold/references/guards/commit-on-main-hook.sh.template +82 -0
- package/skills/verification-scaffold/references/guards/orphan-test-check.sh.template +102 -0
- package/skills/verification-scaffold/references/guards/precommit-guard.sh.template +115 -0
- package/skills/verification-scaffold/references/guards/secret-scan-hook.sh.template +176 -0
- package/skills/verification-scaffold/references/guards/verification-gates.yml.template +49 -0
- package/skills/verification-scaffold/references/guards/wrapper-boundary.sh.template +47 -0
- package/skills/verification-scaffold/references/guards.tsv +21 -0
- package/skills/verification-scaffold/references/verification-readme.template +55 -0
- package/skills/verification-scaffold/scripts/verification-scaffold.sh +785 -0
- package/skills/verification-scaffold/test/bite-proof.test.sh +159 -0
- package/skills/verification-scaffold/test/generator.test.sh +319 -0
- package/skills/verification-scaffold/test/manifest.test.sh +144 -0
- package/skills/work/SKILL.md +1480 -0
- package/skills/work/references/end-of-work-resume.md +7 -0
- package/skills/work/references/hook-test-main-cwd.md +24 -0
- package/skills/work/references/key-principles.md +83 -0
- package/skills/work/references/property-testing.md +122 -0
- package/skills/work/references/sql-security-definer-rpc-scaffold.sql +78 -0
- package/skills/work/references/work-agent-teams.md +97 -0
- package/skills/work/references/work-lifecycle-parallel.md +147 -0
- package/skills/work/references/work-lockfile-bumps.md +97 -0
- package/skills/work/references/work-scratch-sandboxes.md +212 -0
- package/skills/work/references/work-subagent-fanout.md +61 -0
- package/skills/work/references/work-test-harness-sharp-edges.md +73 -0
- package/skills/xcode-test/SKILL.md +360 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Workflow: Verify Skill Content Accuracy
|
|
2
|
+
|
|
3
|
+
<required_reading>
|
|
4
|
+
**Read these reference files NOW:**
|
|
5
|
+
|
|
6
|
+
1. references/skill-structure.md
|
|
7
|
+
</required_reading>
|
|
8
|
+
|
|
9
|
+
<purpose>
|
|
10
|
+
Audit checks structure. **Verify checks truth.**
|
|
11
|
+
|
|
12
|
+
Skills contain claims about external things: APIs, CLI tools, frameworks, services. These change over time. This workflow checks if a skill's content is still accurate.
|
|
13
|
+
</purpose>
|
|
14
|
+
|
|
15
|
+
<process>
|
|
16
|
+
## Step 1: Select the Skill
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
ls ~/.claude/skills/
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Present numbered list, ask: "Which skill should I verify for accuracy?"
|
|
23
|
+
|
|
24
|
+
## Step 2: Read and Categorize
|
|
25
|
+
|
|
26
|
+
Read the entire skill (SKILL.md + workflows/ + references/):
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
cat ~/.claude/skills/{skill-name}/SKILL.md
|
|
30
|
+
cat ~/.claude/skills/{skill-name}/workflows/*.md 2>/dev/null
|
|
31
|
+
cat ~/.claude/skills/{skill-name}/references/*.md 2>/dev/null
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Categorize by primary dependency type:
|
|
35
|
+
|
|
36
|
+
| Type | Examples | Verification Method |
|
|
37
|
+
|------|----------|---------------------|
|
|
38
|
+
| **API/Service** | manage-stripe, manage-gohighlevel | Context7 + WebSearch |
|
|
39
|
+
| **CLI Tools** | build-macos-apps (xcodebuild, swift) | Run commands |
|
|
40
|
+
| **Framework** | build-iphone-apps (SwiftUI, UIKit) | Context7 for docs |
|
|
41
|
+
| **Integration** | setup-stripe-payments | WebFetch + Context7 |
|
|
42
|
+
| **Pure Process** | create-agent-skills | No external deps |
|
|
43
|
+
|
|
44
|
+
Report: "This skill is primarily [type]-based. I'll verify using [method]."
|
|
45
|
+
|
|
46
|
+
## Step 3: Extract Verifiable Claims
|
|
47
|
+
|
|
48
|
+
Scan skill content and extract:
|
|
49
|
+
|
|
50
|
+
**CLI Tools mentioned:**
|
|
51
|
+
|
|
52
|
+
- Tool names (xcodebuild, swift, npm, etc.)
|
|
53
|
+
- Specific flags/options documented
|
|
54
|
+
- Expected output patterns
|
|
55
|
+
|
|
56
|
+
**API Endpoints:**
|
|
57
|
+
|
|
58
|
+
- Service names (Stripe, Meta, etc.)
|
|
59
|
+
- Specific endpoints documented
|
|
60
|
+
- Authentication methods
|
|
61
|
+
- SDK versions
|
|
62
|
+
|
|
63
|
+
**Framework Patterns:**
|
|
64
|
+
|
|
65
|
+
- Framework names (SwiftUI, React, etc.)
|
|
66
|
+
- Specific APIs/patterns documented
|
|
67
|
+
- Version-specific features
|
|
68
|
+
|
|
69
|
+
**File Paths/Structures:**
|
|
70
|
+
|
|
71
|
+
- Expected project structures
|
|
72
|
+
- Config file locations
|
|
73
|
+
|
|
74
|
+
Present: "Found X verifiable claims to check."
|
|
75
|
+
|
|
76
|
+
## Step 4: Verify by Type
|
|
77
|
+
|
|
78
|
+
### For CLI Tools
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Check tool exists
|
|
82
|
+
which {tool-name}
|
|
83
|
+
|
|
84
|
+
# Check version
|
|
85
|
+
{tool-name} --version
|
|
86
|
+
|
|
87
|
+
# Verify documented flags work
|
|
88
|
+
{tool-name} --help | grep "{documented-flag}"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### For API/Service Skills
|
|
92
|
+
|
|
93
|
+
Use Context7 to fetch current documentation:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
mcp__context7__resolve-library-id: {service-name}
|
|
97
|
+
mcp__context7__get-library-docs: {library-id}, topic: {relevant-topic}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Compare skill's documented patterns against current docs:
|
|
101
|
+
|
|
102
|
+
- Are endpoints still valid?
|
|
103
|
+
- Has authentication changed?
|
|
104
|
+
- Are there deprecated methods being used?
|
|
105
|
+
|
|
106
|
+
### For Framework Skills
|
|
107
|
+
|
|
108
|
+
Use Context7:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
mcp__context7__resolve-library-id: {framework-name}
|
|
112
|
+
mcp__context7__get-library-docs: {library-id}, topic: {specific-api}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Check:
|
|
116
|
+
|
|
117
|
+
- Are documented APIs still current?
|
|
118
|
+
- Have patterns changed?
|
|
119
|
+
- Are there newer recommended approaches?
|
|
120
|
+
|
|
121
|
+
### For Integration Skills
|
|
122
|
+
|
|
123
|
+
WebSearch for recent changes:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
"[service name] API changes 2026"
|
|
127
|
+
"[service name] breaking changes"
|
|
128
|
+
"[service name] deprecated endpoints"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Then Context7 for current SDK patterns.
|
|
132
|
+
|
|
133
|
+
### For Services with Status Pages
|
|
134
|
+
|
|
135
|
+
WebFetch official docs/changelog if available.
|
|
136
|
+
|
|
137
|
+
## Step 5: Generate Freshness Report
|
|
138
|
+
|
|
139
|
+
Present findings:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
## Verification Report: {skill-name}
|
|
143
|
+
|
|
144
|
+
### ✅ Verified Current
|
|
145
|
+
- [Claim]: [Evidence it's still accurate]
|
|
146
|
+
|
|
147
|
+
### ⚠️ May Be Outdated
|
|
148
|
+
- [Claim]: [What changed / newer info found]
|
|
149
|
+
→ Current: [what docs now say]
|
|
150
|
+
|
|
151
|
+
### ❌ Broken / Invalid
|
|
152
|
+
- [Claim]: [Why it's wrong]
|
|
153
|
+
→ Fix: [What it should be]
|
|
154
|
+
|
|
155
|
+
### ℹ️ Could Not Verify
|
|
156
|
+
- [Claim]: [Why verification wasn't possible]
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
**Overall Status:** [Fresh / Needs Updates / Significantly Stale]
|
|
160
|
+
**Last Verified:** [Today's date]
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Step 6: Offer Updates
|
|
164
|
+
|
|
165
|
+
If issues found:
|
|
166
|
+
|
|
167
|
+
"Found [N] items that need updating. Would you like me to:"
|
|
168
|
+
|
|
169
|
+
1. **Update all** - Apply all corrections
|
|
170
|
+
2. **Review each** - Show each change before applying
|
|
171
|
+
3. **Just the report** - No changes
|
|
172
|
+
|
|
173
|
+
If updating:
|
|
174
|
+
|
|
175
|
+
- Make changes based on verified current information
|
|
176
|
+
- Add verification date comment if appropriate
|
|
177
|
+
- Report what was updated
|
|
178
|
+
|
|
179
|
+
## Step 7: Suggest Verification Schedule
|
|
180
|
+
|
|
181
|
+
Based on skill type, recommend:
|
|
182
|
+
|
|
183
|
+
| Skill Type | Recommended Frequency |
|
|
184
|
+
|------------|----------------------|
|
|
185
|
+
| API/Service | Every 1-2 months |
|
|
186
|
+
| Framework | Every 3-6 months |
|
|
187
|
+
| CLI Tools | Every 6 months |
|
|
188
|
+
| Pure Process | Annually |
|
|
189
|
+
|
|
190
|
+
"This skill should be re-verified in approximately [timeframe]."
|
|
191
|
+
</process>
|
|
192
|
+
|
|
193
|
+
<verification_shortcuts>
|
|
194
|
+
|
|
195
|
+
## Quick Verification Commands
|
|
196
|
+
|
|
197
|
+
**Check if CLI tool exists and get version:**
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
which {tool} && {tool} --version
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Context7 pattern for any library:**
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
1. resolve-library-id: "{library-name}"
|
|
207
|
+
2. get-library-docs: "{id}", topic: "{specific-feature}"
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**WebSearch patterns:**
|
|
211
|
+
|
|
212
|
+
- Breaking changes: "{service} breaking changes 2026"
|
|
213
|
+
- Deprecations: "{service} deprecated API"
|
|
214
|
+
- Current best practices: "{framework} best practices 2026"
|
|
215
|
+
</verification_shortcuts>
|
|
216
|
+
|
|
217
|
+
<success_criteria>
|
|
218
|
+
Verification is complete when:
|
|
219
|
+
|
|
220
|
+
- [ ] Skill categorized by dependency type
|
|
221
|
+
- [ ] Verifiable claims extracted
|
|
222
|
+
- [ ] Each claim checked with appropriate method
|
|
223
|
+
- [ ] Freshness report generated
|
|
224
|
+
- [ ] Updates applied (if requested)
|
|
225
|
+
- [ ] User knows when to re-verify
|
|
226
|
+
</success_criteria>
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-security-scan
|
|
3
|
+
description: "This skill should be used when scanning Claude Code skills or agent files for advisory security risks: code-execution, prompt-injection, supply-chain, filesystem-boundary, telemetry. Emits LOW-RISK | REVIEW | HIGH-RISK."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- soleur-cloud-mode:start -->
|
|
7
|
+
**Cloud Mode (Devin):** before pipeline work run `bash "${CLAUDE_PLUGIN_ROOT}/scripts/cloud-detect.sh"`. If `CLAUDE_PLUGIN_ROOT` is unset (cloud exec shells do not export it), resolve the root by IDENTITY, never by script basename: for `d` in `"$HOME/.local/share/devin/cli/plugins/cache"` and `/opt/.devin/plugins`, skip unless `[ -d "$d" ]`, then `MANIFEST="$(find "$d" -path '*/.claude-plugin/plugin.json' -exec grep -l '"name"[[:space:]]*:[[:space:]]*"soleur"' {} + 2>/dev/null | head -1)"`, `ROOT="${MANIFEST%/.claude-plugin/plugin.json}"` — one resolution, two consumers: `$ROOT/scripts/cloud-detect.sh` and `$ROOT/scripts/precommit-guard.sh`. (Shape check, not authentication: a planted `{"name":"soleur"}` dir passes — ADR-179 A11.) `local` or `not-local:no-devin-env` proceeds normally; any other `not-local:<reason>` applies `<plugin-root>/devin/INSTRUCTIONS.md` §Cloud Mode: emit the `--banner`, fan out sequentially with `Reviewed-Coverage: sequential-fallback` disclosure (never claim an independent review ran), `message_user` ack before any secrets read or production mutation, and run `precommit-guard.sh` before any `git commit` — hooks do not fire in cloud.
|
|
8
|
+
<!-- soleur-cloud-mode:end -->
|
|
9
|
+
|
|
10
|
+
<!-- grok-harness-invoke:start -->
|
|
11
|
+
**Grok Build (`plugins/soleur/lib/harness.ts` `invokeSkill()`):** Read this SKILL.md in this process and run it to completion. A one-segment `soleur:<name>` in this document names a SKILL — on Grok Build, Read `plugins/soleur/skills/<name>/SKILL.md` in this process; it is not a nested tool_use. A multi-segment id such as `soleur:<domain>:<name>` names an AGENT: spawn it, never Read it, and on Grok Build spawn_subagent takes the id with its colons replaced by hyphens (`agentIdToGrokSubagentType`). **Claude Code:** Skill tool for a skill (`soleur:<name>`), Task tool with `subagent_type` for an agent. Forbidden is executing a subset, not the Read.
|
|
12
|
+
<!-- grok-harness-invoke:end -->
|
|
13
|
+
|
|
14
|
+
# skill-security-scan
|
|
15
|
+
|
|
16
|
+
<!--
|
|
17
|
+
Pattern provenance: portions of the detection-pattern taxonomy and the five-category
|
|
18
|
+
breakdown are adapted from alirezarezvani/claude-skills (skill-security-auditor),
|
|
19
|
+
licensed under the MIT License. The verbatim license text is preserved at
|
|
20
|
+
[LICENSES/skill-security-auditor.MIT.txt](../../../../LICENSES/skill-security-auditor.MIT.txt).
|
|
21
|
+
No verbatim code is copied; only the conceptual taxonomy and category framing.
|
|
22
|
+
-->
|
|
23
|
+
|
|
24
|
+
Advisory static-analysis gate that scans a SKILL.md or agent markdown file for five
|
|
25
|
+
categories of security risk. Emits one of `LOW-RISK | REVIEW | HIGH-RISK` plus a
|
|
26
|
+
findings report, with a mandatory advisory disclaimer footer. **Advisory only:**
|
|
27
|
+
output is not a security audit, certification, or warranty. The skill executes in
|
|
28
|
+
the operator's environment under the operator's account; the operator remains
|
|
29
|
+
responsible for review.
|
|
30
|
+
|
|
31
|
+
## Detection categories
|
|
32
|
+
|
|
33
|
+
1. **Code-execution anti-patterns** — dynamic-eval primitives, shell-spawn with
|
|
34
|
+
user-controlled args, obfuscation signatures. See
|
|
35
|
+
[references/rules/code-exec.yaml](./references/rules/code-exec.yaml).
|
|
36
|
+
2. **Prompt-injection** — frontmatter role-hijack and body proximity-gated patterns,
|
|
37
|
+
with Soleur prose allowlist. See
|
|
38
|
+
[references/regex-patterns.md](./references/regex-patterns.md).
|
|
39
|
+
3. **Supply-chain risk** — osv.dev batch query against parsed manifest references,
|
|
40
|
+
with ecosystem allowlist + REVIEW-on-unknown + network-error-as-REVIEW.
|
|
41
|
+
4. **Filesystem boundary violations** — path traversal, symlink-out, write attempts
|
|
42
|
+
to credential dotfiles. See
|
|
43
|
+
[references/rules/filesystem-boundary.yaml](./references/rules/filesystem-boundary.yaml).
|
|
44
|
+
5. **Third-Party Telemetry Surface** — utm-tagged links, redirect-tracking domains,
|
|
45
|
+
outbound-beacon URLs, vendor-branding footers. URL host-aware allowlist (not raw
|
|
46
|
+
substring match — adversarial `https://attacker.com/?ref=soleur.ai` is detected
|
|
47
|
+
as host=attacker.com). See
|
|
48
|
+
[references/first-party-allowlist.yaml](./references/first-party-allowlist.yaml).
|
|
49
|
+
|
|
50
|
+
## Verdict semantics
|
|
51
|
+
|
|
52
|
+
| Verdict | Meaning | Operator action |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `LOW-RISK` | No findings, or only finding-level metadata WARN tags | Proceed silently |
|
|
55
|
+
| `REVIEW` | At least one category emitted REVIEW | Read findings; decide |
|
|
56
|
+
| `HIGH-RISK` | At least one category emitted HIGH-RISK | Block-by-default; override via structured artifact |
|
|
57
|
+
|
|
58
|
+
Aggregation rule: max-severity across the five categories wins. Per-finding
|
|
59
|
+
`severity: WARN` contributes `REVIEW` to the aggregate verdict, never `HIGH-RISK`
|
|
60
|
+
alone.
|
|
61
|
+
|
|
62
|
+
## Invocation
|
|
63
|
+
|
|
64
|
+
Scan a file:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
bash "${CLAUDE_PLUGIN_ROOT}/skills/skill-security-scan/scripts/run-scan.sh" < path/to/SKILL.md
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Scan stdin content (used by `soleur:engineering:discovery:agent-finder` post-fetch / `skill-creator` post-scaffold
|
|
71
|
+
integrations):
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
echo "$skill_md_content" | bash "${CLAUDE_PLUGIN_ROOT}/skills/skill-security-scan/scripts/run-scan.sh"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**No verdict line means REVIEW.** If the output carries no `LOW-RISK`/`REVIEW`/`HIGH-RISK` verdict — the script
|
|
78
|
+
crashed, or the shell printed `No such file or directory` because the plugin root did not resolve — treat the
|
|
79
|
+
skill as **REVIEW**, never LOW-RISK (ADR-179 A18).
|
|
80
|
+
|
|
81
|
+
Output: markdown findings table on stdout, mandatory advisory disclaimer footer
|
|
82
|
+
(non-removable), and `.scan-meta.json` persisted under
|
|
83
|
+
`$XDG_RUNTIME_DIR/skill-security-scan-<pid>/` (or `SKILL_SCAN_META_BASE` when
|
|
84
|
+
set; `/tmp` when neither is set). Retention is bounded by the scanner's own
|
|
85
|
+
startup age-reap: `skill-security-scan-*` dirs older than
|
|
86
|
+
`SKILL_SCAN_META_REAP_MIN` minutes (default 10080 = 7 days) are reaped at the
|
|
87
|
+
next invocation, and the same knob bounds a sibling sweep under
|
|
88
|
+
`${TMPDIR:-/tmp}` covering `skill-scan-*` scratch orphans, stranded
|
|
89
|
+
`skill-security-scan-*` crossover dirs, and `sss-write.*.err` hook captures
|
|
90
|
+
(#6789, #6760). One knob, two scopes: shrinking it shrinks BOTH the Art. 32
|
|
91
|
+
evidence window and the scratch floor — and both sweeps clamp to a 60-minute
|
|
92
|
+
minimum because a lower floor can reap a concurrent scan's live scratch or
|
|
93
|
+
live meta dir.
|
|
94
|
+
The dir is deliberately NOT EXIT-trap-cleaned: the override flow reads the
|
|
95
|
+
path after the scan exits.
|
|
96
|
+
|
|
97
|
+
## Override mechanism
|
|
98
|
+
|
|
99
|
+
When the scanner returns `HIGH-RISK` and the operator judges the finding to be a
|
|
100
|
+
false-positive or accepted-risk, override by committing a structured artifact:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
knowledge-base/engineering/security/skill-overrides/YYYY-MM-DD-<slug>.md
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The artifact is the sole audit-trail (no git trailer involved — squash-merge-safe).
|
|
107
|
+
Schema: [references/override-artifact-schema.json](./references/override-artifact-schema.json).
|
|
108
|
+
Process: [references/override-mechanism.md](./references/override-mechanism.md).
|
|
109
|
+
|
|
110
|
+
## Self-defense
|
|
111
|
+
|
|
112
|
+
The scanner is itself an attack surface. Defenses:
|
|
113
|
+
|
|
114
|
+
- **Rule-pack SHA pinning** via [references/rules/manifest.yaml](./references/rules/manifest.yaml).
|
|
115
|
+
`run-scan.sh` validates rule-file SHAs at every run; tampering → REVIEW with
|
|
116
|
+
reason `rule pack tampered`.
|
|
117
|
+
- **OSV untrusted-input handling**: schema validation, body-size cap, ecosystem
|
|
118
|
+
allowlist (unknown ecosystem → REVIEW, never LOW-RISK), network-failure →
|
|
119
|
+
REVIEW.
|
|
120
|
+
- **Fail-loud self-test**:
|
|
121
|
+
[scripts/run-self-test.sh](./scripts/run-self-test.sh) runs the scanner over
|
|
122
|
+
known-malicious + known-clean fixtures; any false-negative or false-positive on
|
|
123
|
+
the seed set fails the test loudly. Wired into CI per
|
|
124
|
+
`.github/workflows/skill-security-scan-corpus.yml`.
|
|
125
|
+
|
|
126
|
+
## PII redaction
|
|
127
|
+
|
|
128
|
+
Findings persisted to `.scan-meta.json` and override artifacts run through
|
|
129
|
+
email/IP/IBAN-shape redaction before write (per gdpr-gate `GDPR-DataMin-1`).
|
|
130
|
+
Operator-facing stdout is unredacted; persisted forms are redacted. Sentry mirrors
|
|
131
|
+
of scanner errors use `reportSilentFallback(err, { feature: 'skill-security-scan',
|
|
132
|
+
extra: { ...redacted } })`.
|
|
133
|
+
|
|
134
|
+
## Integrations
|
|
135
|
+
|
|
136
|
+
- `skill-creator` Step 5: post-validation scan before packaging.
|
|
137
|
+
- `soleur:engineering:discovery:agent-finder` §4b.5: cooperative-fast-path scan post-fetch / pre-write.
|
|
138
|
+
- PreToolUse hook on `Write` to `.claude/skills/**` and `.claude/agents/**`:
|
|
139
|
+
load-bearing block-on-HIGH-RISK gate at the tool layer.
|
|
140
|
+
- Lefthook commit-time advisory: belt-and-suspenders for IDE / CLI commit paths.
|
|
141
|
+
- CI pre-merge required check + post-merge audit: defense-in-depth against
|
|
142
|
+
tool-layer bypass.
|
|
143
|
+
|
|
144
|
+
See [references/override-mechanism.md](./references/override-mechanism.md) for
|
|
145
|
+
operator workflows.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Mandatory advisory disclaimer (CLO Decision 1)
|
|
2
|
+
|
|
3
|
+
This text is appended verbatim by `run-scan.sh` to every scanner output. It is
|
|
4
|
+
the SINGLE point of insertion (per plan Sharp Edge #9). Per-script outputs do
|
|
5
|
+
NOT include the disclaimer; the aggregator does.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
---
|
|
9
|
+
Advisory static analysis only. LOW-RISK does not constitute a security audit,
|
|
10
|
+
certification, or warranty of safety. The skill executes in your environment
|
|
11
|
+
under your account; you remain responsible for review.
|
|
12
|
+
|
|
13
|
+
Scanner version: <version> Rule pack: <sha-prefix> Scanned: <ISO-8601>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The token `<version>` is replaced with the value of `scanner_version` from the
|
|
17
|
+
manifest. `<sha-prefix>` is the first 12 hex chars of the rule-pack manifest
|
|
18
|
+
SHA. `<ISO-8601>` is the scan timestamp in `date -u +"%Y-%m-%dT%H:%M:%SZ"`.
|
|
19
|
+
|
|
20
|
+
The disclaimer is required regardless of verdict — including LOW-RISK — so
|
|
21
|
+
that downstream consumers cannot infer "no warning" as a positive certification.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# First-party allowlist for category 5 (telemetry-surface).
|
|
2
|
+
#
|
|
3
|
+
# Matched on URL host segment after parsing (NOT raw substring).
|
|
4
|
+
# Adversarial `https://attacker.com/redirect?ref=soleur.ai` MUST trip detection
|
|
5
|
+
# (host = attacker.com, NOT in this list). See R14 / Sharp Edge #23.
|
|
6
|
+
#
|
|
7
|
+
# Hosts use domain-suffix matching: a literal entry `soleur.ai` matches
|
|
8
|
+
# `soleur.ai` and any subdomain `*.soleur.ai`. The wildcard form `*.soleur.ai`
|
|
9
|
+
# is equivalent and provided for documentation clarity.
|
|
10
|
+
|
|
11
|
+
domains:
|
|
12
|
+
- soleur.ai
|
|
13
|
+
- "*.soleur.ai"
|
|
14
|
+
- soleur.dev
|
|
15
|
+
- "*.soleur.dev"
|
|
16
|
+
- github.com # Soleur is hosted on github.com/jikig-ai
|
|
17
|
+
- github.io # for github pages docs
|
|
18
|
+
- jikigai.com
|
|
19
|
+
- "*.jikigai.com"
|
|
20
|
+
- anthropic.com # Claude Code surface
|
|
21
|
+
- "*.anthropic.com"
|
|
22
|
+
- claude.com # Claude Code surface
|
|
23
|
+
- "*.claude.com"
|
|
24
|
+
|
|
25
|
+
# Approved utm_campaign IDs. utm-tagged links to non-allowlisted campaigns
|
|
26
|
+
# emit REVIEW (never HIGH-RISK on their own).
|
|
27
|
+
utm_campaigns:
|
|
28
|
+
- soleur-launch
|
|
29
|
+
- soleur-blog
|
|
30
|
+
- soleur-docs
|
|
31
|
+
- soleur-discord
|
|
32
|
+
- soleur-github
|
|
33
|
+
- soleur-x
|
|
34
|
+
- soleur-bluesky
|
|
35
|
+
- soleur-linkedin
|
|
36
|
+
- soleur-hn
|
|
37
|
+
- soleur-indiehackers
|
|
38
|
+
- soleur-reddit
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://soleur.ai/schemas/skill-security-scan/override-artifact.json",
|
|
4
|
+
"title": "Skill Security Scan Override Artifact",
|
|
5
|
+
"description": "Frontmatter schema for knowledge-base/engineering/security/skill-overrides/YYYY-MM-DD-<slug>.md. The artifact alone is the audit-trail; no git trailer is involved (squash-merge-safe).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"skill",
|
|
9
|
+
"source",
|
|
10
|
+
"findings_json",
|
|
11
|
+
"justification",
|
|
12
|
+
"approver",
|
|
13
|
+
"scanner_version",
|
|
14
|
+
"rule_pack_sha256",
|
|
15
|
+
"verdict",
|
|
16
|
+
"timestamp"
|
|
17
|
+
],
|
|
18
|
+
"additionalProperties": false,
|
|
19
|
+
"properties": {
|
|
20
|
+
"skill": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"pattern": "^[a-z][a-z0-9-]*$",
|
|
23
|
+
"description": "Skill slug. Lowercase + hyphens only; rejects regex meta-chars to prevent bash interpolation hazards in filename matching."
|
|
24
|
+
},
|
|
25
|
+
"source": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"minLength": 1,
|
|
28
|
+
"description": "URL or 'skill-creator' (where the skill content originated)."
|
|
29
|
+
},
|
|
30
|
+
"findings_json": {
|
|
31
|
+
"description": "Inline JSON copy of the .scan-meta.json findings_summary at override time, or a path string referencing the .scan-meta.json file.",
|
|
32
|
+
"oneOf": [
|
|
33
|
+
{ "type": "string" },
|
|
34
|
+
{ "type": "object" }
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
"justification": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"minLength": 1,
|
|
40
|
+
"description": "Free-text rationale explaining why the operator accepts the HIGH-RISK or REVIEW verdict."
|
|
41
|
+
},
|
|
42
|
+
"approver": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"format": "email",
|
|
45
|
+
"description": "git config user.email of the operator approving the override."
|
|
46
|
+
},
|
|
47
|
+
"scanner_version": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$",
|
|
50
|
+
"description": "Semver of the scanner at override time."
|
|
51
|
+
},
|
|
52
|
+
"rule_pack_sha256": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"pattern": "^[a-f0-9]{8,64}$",
|
|
55
|
+
"description": "SHA-256 (or sha-prefix ≥8 chars) of the rule-pack manifest at override time. Mismatch with current manifest indicates stale findings; operator must re-run scanner and update the artifact."
|
|
56
|
+
},
|
|
57
|
+
"verdict": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"enum": ["HIGH-RISK", "REVIEW"],
|
|
60
|
+
"description": "Verdict the operator is overriding. LOW-RISK never requires an override."
|
|
61
|
+
},
|
|
62
|
+
"timestamp": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"format": "date-time",
|
|
65
|
+
"description": "ISO-8601 timestamp of override creation."
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# skill-security-scan override mechanism
|
|
2
|
+
|
|
3
|
+
When the scanner returns `HIGH-RISK` or `REVIEW` and the operator judges the
|
|
4
|
+
finding to be a false-positive or accepted-risk, override by committing a
|
|
5
|
+
**structured artifact** under `knowledge-base/engineering/security/skill-overrides/`.
|
|
6
|
+
|
|
7
|
+
The artifact alone is the audit-trail. **No git trailer is involved** — the
|
|
8
|
+
`Skill-Security-Ack:` trailer was dropped during plan review (DHH + simplicity
|
|
9
|
+
HIGH-confidence cut, Kieran P0-2). This eliminates squash-merge invariant
|
|
10
|
+
concerns: the artifact appears in `git diff main...HEAD --diff-filter=A`
|
|
11
|
+
regardless of merge strategy.
|
|
12
|
+
|
|
13
|
+
## Artifact location and naming
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
knowledge-base/engineering/security/skill-overrides/YYYY-MM-DD-<slug>.md
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
- `YYYY-MM-DD` — ISO-8601 date the override was created.
|
|
20
|
+
- `<slug>` — skill slug, lowercase + hyphens only, regex `^[a-z][a-z0-9-]*$`.
|
|
21
|
+
Capital letters and regex meta-characters are rejected (prevents bash
|
|
22
|
+
interpolation hazards in the filename match).
|
|
23
|
+
|
|
24
|
+
## Artifact frontmatter schema
|
|
25
|
+
|
|
26
|
+
Validated against [override-artifact-schema.json](./override-artifact-schema.json).
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
---
|
|
30
|
+
skill: <slug>
|
|
31
|
+
source: <url-or-skill-creator>
|
|
32
|
+
findings_json: <inline-JSON-or-path-to-.scan-meta.json>
|
|
33
|
+
justification: <free-text explaining why operator accepts the verdict>
|
|
34
|
+
approver: <git config user.email>
|
|
35
|
+
scanner_version: 0.1.0
|
|
36
|
+
rule_pack_sha256: <prefix ≥ 8 chars from .scan-meta.json>
|
|
37
|
+
verdict: HIGH-RISK | REVIEW
|
|
38
|
+
timestamp: <ISO-8601>
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
# Override: <skill-slug>
|
|
42
|
+
|
|
43
|
+
## Findings (verdict: <verdict>)
|
|
44
|
+
<path to .scan-meta.json — see "PII safety" below>
|
|
45
|
+
|
|
46
|
+
## Justification
|
|
47
|
+
<free-text rationale>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Operator workflow
|
|
51
|
+
|
|
52
|
+
1. Operator hits HIGH-RISK on a third-party skill they want to install.
|
|
53
|
+
2. Scanner emits findings + suggested override-artifact path + the runtime
|
|
54
|
+
path to the redacted `.scan-meta.json` (printed on stdout).
|
|
55
|
+
3. Operator inspects the findings, decides override is appropriate.
|
|
56
|
+
4. Operator creates the artifact (manual or via `skill-creator` Step 5):
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
cat > knowledge-base/engineering/security/skill-overrides/$(date -u +%Y-%m-%d)-<slug>.md <<EOF
|
|
60
|
+
---
|
|
61
|
+
skill: <slug>
|
|
62
|
+
source: <where-the-skill-came-from>
|
|
63
|
+
findings_json: <path-to-redacted-.scan-meta.json>
|
|
64
|
+
justification: <rationale>
|
|
65
|
+
approver: $(git config user.email)
|
|
66
|
+
scanner_version: 0.1.0
|
|
67
|
+
rule_pack_sha256: <prefix-from-scan-meta>
|
|
68
|
+
verdict: HIGH-RISK
|
|
69
|
+
timestamp: $(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
# Override: <slug>
|
|
73
|
+
|
|
74
|
+
## Findings
|
|
75
|
+
<path to .scan-meta.json>
|
|
76
|
+
|
|
77
|
+
## Justification
|
|
78
|
+
<text>
|
|
79
|
+
EOF
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
5. Operator commits the artifact in the same PR as the skill install.
|
|
83
|
+
6. CI pre-merge gate (job `skill-security-scan` in `pr-quality-guards.yml`) and the PreToolUse
|
|
84
|
+
hook on Write run `parse-override.sh` to validate. Valid artifact → install
|
|
85
|
+
accepted.
|
|
86
|
+
|
|
87
|
+
### PII safety — findings provenance
|
|
88
|
+
|
|
89
|
+
The `findings_json` field MUST carry **redacted bytes from the persisted
|
|
90
|
+
`.scan-meta.json`** — never an inline copy typed from scanner stdout. Reason:
|
|
91
|
+
scanner stdout (which the operator sees during review) is intentionally
|
|
92
|
+
unredacted for in-terminal inspection; the persisted `.scan-meta.json` runs
|
|
93
|
+
through `redact_pii()` (email, IPv4, IBAN, JWT, Anthropic/OpenAI keys, GitHub
|
|
94
|
+
PAT/OAuth, GitLab PAT, Doppler tokens, Slack tokens, AWS keys). Copy-pasting
|
|
95
|
+
from terminal scrollback lands raw PII / secrets in a permanent git artifact
|
|
96
|
+
retained "for repository lifetime" per Art. 32 evidence retention. The
|
|
97
|
+
path form is the default because it cannot be mis-pasted.
|
|
98
|
+
|
|
99
|
+
`parse-override.sh` enforces this: artifacts whose body contains a raw email
|
|
100
|
+
pattern outside the `approver:` field are rejected with `invalid_schema`.
|
|
101
|
+
|
|
102
|
+
The path form is valid only inside the retention window: the scanner's startup
|
|
103
|
+
reap removes `skill-security-scan-*` dirs older than `SKILL_SCAN_META_REAP_MIN`
|
|
104
|
+
minutes (default 10080 = 7 days), and `$XDG_RUNTIME_DIR` is cleared on logout
|
|
105
|
+
regardless (#6789, #6760). For a reference that must outlive the window, embed
|
|
106
|
+
the findings inline — the schema's `oneOf` admits an object form — copied from
|
|
107
|
+
the **redacted `.scan-meta.json`**, never from scanner stdout (the mandate
|
|
108
|
+
above is about where the bytes come from, not the YAML shape). Two mechanics
|
|
109
|
+
matter: the presence check (#10167) counts `findings_json` present iff the
|
|
110
|
+
`findings_json:` key line carries non-whitespace, non-null content OR a
|
|
111
|
+
following *indented* line does before the block ends — so both the inline
|
|
112
|
+
`findings_json: {…}` form and the block mapping (`findings_json:` then
|
|
113
|
+
indented `key: value` lines) are accepted, while `findings_json:` bare,
|
|
114
|
+
whitespace-only, `null`/`~`, a same-line comment (`findings_json: # …`,
|
|
115
|
+
reads as null), or `findings_json:{…}` (no separation space — YAML reads that
|
|
116
|
+
as a scalar, not a mapping) still report missing. And the
|
|
117
|
+
source bytes must still be the redacted file.
|
|
118
|
+
|
|
119
|
+
## Multiple overrides per PR
|
|
120
|
+
|
|
121
|
+
A single PR may install multiple skills. Each skill's override is one artifact
|
|
122
|
+
file. `parse-override.sh` enumerates all matched artifacts independently;
|
|
123
|
+
there is no shared state.
|
|
124
|
+
|
|
125
|
+
## Stale findings
|
|
126
|
+
|
|
127
|
+
If the rule pack updates between override creation and PR merge, the artifact's
|
|
128
|
+
`rule_pack_sha256` will no longer match the current `manifest.yaml` SHA.
|
|
129
|
+
`parse-override.sh` reports this as `stale_findings` and the CI gate fails with
|
|
130
|
+
an instruction to re-run the scan and update the artifact.
|
|
131
|
+
|
|
132
|
+
## Retention
|
|
133
|
+
|
|
134
|
+
Override artifacts are retained for the **repository lifetime** as Article 32
|
|
135
|
+
evidence (GDPR Art. 6(1)(c) lawful basis: legal obligation; Art. 6(1)(f):
|
|
136
|
+
legitimate interest in maintaining audit trail). Future operators must NOT
|
|
137
|
+
bulk-delete them. PII in the embedded `findings_json` is redacted at scan-time
|
|
138
|
+
per `GDPR-DataMin-1` (email/IPv4/IBAN-shape).
|
|
139
|
+
|
|
140
|
+
## Defense-in-depth
|
|
141
|
+
|
|
142
|
+
The override mechanism is the LAST gate. Earlier gates:
|
|
143
|
+
|
|
144
|
+
1. **PreToolUse hook on Write** (`.claude/hooks/skill-security-scan-write.sh`)
|
|
145
|
+
— load-bearing tool-layer block on `HIGH-RISK without override artifact`.
|
|
146
|
+
2. **Cooperative-fast-path in soleur:engineering:discovery:agent-finder §4b.5** — surfaces findings to
|
|
147
|
+
operator before the Write attempt.
|
|
148
|
+
3. **Cooperative-fast-path in skill-creator Step 5** — same as above for
|
|
149
|
+
scaffold workflows.
|
|
150
|
+
4. **Lefthook commit-time advisory** (`.claude/hooks/skill-security-scan.sh`)
|
|
151
|
+
— belt-and-suspenders for IDE / manual `git commit` paths.
|
|
152
|
+
5. **CI pre-merge required check** (job `skill-security-scan` in `pr-quality-guards.yml`) —
|
|
153
|
+
Layer C: blocks merge if any new HIGH-RISK skill install lacks a valid
|
|
154
|
+
override artifact.
|
|
155
|
+
6. **CI post-merge audit** (`skill-security-scan-postmerge.yml`) — Layer D:
|
|
156
|
+
re-validates on push to main. Auto-files `compliance/critical` issue if
|
|
157
|
+
pre-merge gate was bypassed via admin merge or force-push.
|
|
158
|
+
7. **Branch protection** — `main` requires the `skill-security-scan PR gate` check (job `skill-security-scan` in `pr-quality-guards.yml`)
|
|
159
|
+
pre-merge status check. Bypassing requires explicit admin action that
|
|
160
|
+
auto-files a compliance issue.
|
|
161
|
+
|
|
162
|
+
## Future extensions (NOT implemented in v1)
|
|
163
|
+
|
|
164
|
+
The original brainstorm and CTO Decision 12 contemplated a `soleur:plan`-aware
|
|
165
|
+
skip-and-warn mode for the scanner. Phase 6 of the plan removed this for v1
|
|
166
|
+
because `soleur:plan` does not scaffold or fetch skills — those code paths
|
|
167
|
+
live in `skill-creator` and `soleur:engineering:discovery:agent-finder` only. If a future plan-time
|
|
168
|
+
scaffolding workflow emerges, re-evaluate this design with a tracking issue.
|
|
169
|
+
The `SKILL_SECURITY_SCAN_PLAN_MODE` env-flag idea is preserved here as
|
|
170
|
+
documented future-extension guidance only; it is not implemented in this v1
|
|
171
|
+
release.
|