@harness-engineering/cli 1.15.0 → 1.17.0
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/dist/agents/commands/codex/AGENTS.md +39 -0
- package/dist/agents/commands/codex/harness/add-harness-component/SKILL.md +195 -0
- package/dist/agents/commands/codex/harness/add-harness-component/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/cleanup-dead-code/SKILL.md +248 -0
- package/dist/agents/commands/codex/harness/cleanup-dead-code/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/detect-doc-drift/SKILL.md +182 -0
- package/dist/agents/commands/codex/harness/detect-doc-drift/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/enforce-architecture/SKILL.md +299 -0
- package/dist/agents/commands/codex/harness/enforce-architecture/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-architecture-advisor/SKILL.md +452 -0
- package/dist/agents/commands/codex/harness/harness-architecture-advisor/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-autopilot/SKILL.md +919 -0
- package/dist/agents/commands/codex/harness/harness-autopilot/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-brainstorming/SKILL.md +409 -0
- package/dist/agents/commands/codex/harness/harness-brainstorming/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-code-review/SKILL.md +860 -0
- package/dist/agents/commands/codex/harness/harness-code-review/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-codebase-cleanup/SKILL.md +227 -0
- package/dist/agents/commands/codex/harness/harness-codebase-cleanup/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-debugging/SKILL.md +369 -0
- package/dist/agents/commands/codex/harness/harness-debugging/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-dependency-health/SKILL.md +182 -0
- package/dist/agents/commands/codex/harness/harness-dependency-health/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-docs-pipeline/SKILL.md +463 -0
- package/dist/agents/commands/codex/harness/harness-docs-pipeline/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-execution/SKILL.md +513 -0
- package/dist/agents/commands/codex/harness/harness-execution/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-hotspot-detector/SKILL.md +164 -0
- package/dist/agents/commands/codex/harness/harness-hotspot-detector/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-impact-analysis/SKILL.md +187 -0
- package/dist/agents/commands/codex/harness/harness-impact-analysis/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-integrity/SKILL.md +170 -0
- package/dist/agents/commands/codex/harness/harness-integrity/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-onboarding/SKILL.md +291 -0
- package/dist/agents/commands/codex/harness/harness-onboarding/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-perf/SKILL.md +263 -0
- package/dist/agents/commands/codex/harness/harness-perf/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-planning/SKILL.md +582 -0
- package/dist/agents/commands/codex/harness/harness-planning/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-refactoring/SKILL.md +172 -0
- package/dist/agents/commands/codex/harness/harness-refactoring/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-release-readiness/SKILL.md +692 -0
- package/dist/agents/commands/codex/harness/harness-release-readiness/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-roadmap/SKILL.md +598 -0
- package/dist/agents/commands/codex/harness/harness-roadmap/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-security-scan/SKILL.md +157 -0
- package/dist/agents/commands/codex/harness/harness-security-scan/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-skill-authoring/SKILL.md +295 -0
- package/dist/agents/commands/codex/harness/harness-skill-authoring/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-soundness-review/SKILL.md +1270 -0
- package/dist/agents/commands/codex/harness/harness-soundness-review/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-supply-chain-audit/SKILL.md +247 -0
- package/dist/agents/commands/codex/harness/harness-supply-chain-audit/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-tdd/SKILL.md +180 -0
- package/dist/agents/commands/codex/harness/harness-tdd/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-test-advisor/SKILL.md +163 -0
- package/dist/agents/commands/codex/harness/harness-test-advisor/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-verification/SKILL.md +424 -0
- package/dist/agents/commands/codex/harness/harness-verification/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-verify/SKILL.md +162 -0
- package/dist/agents/commands/codex/harness/harness-verify/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/initialize-harness-project/SKILL.md +235 -0
- package/dist/agents/commands/codex/harness/initialize-harness-project/agents/openai.yaml +3 -0
- package/dist/agents/commands/cursor/harness/add-harness-component.mdc +200 -0
- package/dist/agents/commands/cursor/harness/cleanup-dead-code.mdc +253 -0
- package/dist/agents/commands/cursor/harness/detect-doc-drift.mdc +187 -0
- package/dist/agents/commands/cursor/harness/enforce-architecture.mdc +304 -0
- package/dist/agents/commands/cursor/harness/harness-architecture-advisor.mdc +457 -0
- package/dist/agents/commands/cursor/harness/harness-autopilot.mdc +924 -0
- package/dist/agents/commands/cursor/harness/harness-brainstorming.mdc +414 -0
- package/dist/agents/commands/cursor/harness/harness-code-review.mdc +865 -0
- package/dist/agents/commands/cursor/harness/harness-codebase-cleanup.mdc +232 -0
- package/dist/agents/commands/cursor/harness/harness-debugging.mdc +374 -0
- package/dist/agents/commands/cursor/harness/harness-dependency-health.mdc +187 -0
- package/dist/agents/commands/cursor/harness/harness-docs-pipeline.mdc +468 -0
- package/dist/agents/commands/cursor/harness/harness-execution.mdc +518 -0
- package/dist/agents/commands/cursor/harness/harness-hotspot-detector.mdc +169 -0
- package/dist/agents/commands/cursor/harness/harness-impact-analysis.mdc +192 -0
- package/dist/agents/commands/cursor/harness/harness-integrity.mdc +175 -0
- package/dist/agents/commands/cursor/harness/harness-onboarding.mdc +296 -0
- package/dist/agents/commands/cursor/harness/harness-perf.mdc +268 -0
- package/dist/agents/commands/cursor/harness/harness-planning.mdc +587 -0
- package/dist/agents/commands/cursor/harness/harness-refactoring.mdc +177 -0
- package/dist/agents/commands/cursor/harness/harness-release-readiness.mdc +697 -0
- package/dist/agents/commands/cursor/harness/harness-roadmap.mdc +603 -0
- package/dist/agents/commands/cursor/harness/harness-security-scan.mdc +162 -0
- package/dist/agents/commands/cursor/harness/harness-skill-authoring.mdc +300 -0
- package/dist/agents/commands/cursor/harness/harness-soundness-review.mdc +1275 -0
- package/dist/agents/commands/cursor/harness/harness-supply-chain-audit.mdc +252 -0
- package/dist/agents/commands/cursor/harness/harness-tdd.mdc +185 -0
- package/dist/agents/commands/cursor/harness/harness-test-advisor.mdc +168 -0
- package/dist/agents/commands/cursor/harness/harness-verification.mdc +429 -0
- package/dist/agents/commands/cursor/harness/harness-verify.mdc +167 -0
- package/dist/agents/commands/cursor/harness/initialize-harness-project.mdc +240 -0
- package/dist/agents/skills/claude-code/enforce-architecture/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-api-design/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-architecture-advisor/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-auth/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +123 -14
- package/dist/agents/skills/claude-code/harness-autopilot/skill.yaml +6 -0
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +97 -3
- package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +6 -0
- package/dist/agents/skills/claude-code/harness-codebase-cleanup/SKILL.md +2 -4
- package/dist/agents/skills/claude-code/harness-database/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +99 -3
- package/dist/agents/skills/claude-code/harness-planning/skill.yaml +6 -0
- package/dist/agents/skills/claude-code/harness-pre-commit-review/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +204 -0
- package/dist/agents/skills/claude-code/harness-roadmap-pilot/skill.yaml +52 -0
- package/dist/agents/skills/claude-code/harness-security-review/SKILL.md +27 -7
- package/dist/agents/skills/claude-code/harness-security-scan/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-supply-chain-audit/SKILL.md +281 -0
- package/dist/agents/skills/claude-code/harness-supply-chain-audit/skill.yaml +51 -0
- package/dist/agents/skills/codex/add-harness-component/SKILL.md +192 -0
- package/dist/agents/skills/codex/add-harness-component/skill.yaml +33 -0
- package/dist/agents/skills/codex/align-documentation/SKILL.md +213 -0
- package/dist/agents/skills/codex/align-documentation/skill.yaml +32 -0
- package/dist/agents/skills/codex/check-mechanical-constraints/SKILL.md +191 -0
- package/dist/agents/skills/codex/check-mechanical-constraints/skill.yaml +33 -0
- package/dist/agents/skills/codex/cleanup-dead-code/SKILL.md +245 -0
- package/dist/agents/skills/codex/cleanup-dead-code/skill.yaml +34 -0
- package/dist/agents/skills/codex/detect-doc-drift/SKILL.md +179 -0
- package/dist/agents/skills/codex/detect-doc-drift/skill.yaml +31 -0
- package/dist/agents/skills/codex/enforce-architecture/SKILL.md +296 -0
- package/dist/agents/skills/codex/enforce-architecture/skill.yaml +35 -0
- package/dist/agents/skills/codex/harness-accessibility/SKILL.md +281 -0
- package/dist/agents/skills/codex/harness-accessibility/skill.yaml +52 -0
- package/dist/agents/skills/codex/harness-api-design/SKILL.md +356 -0
- package/dist/agents/skills/codex/harness-api-design/skill.yaml +74 -0
- package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +449 -0
- package/dist/agents/skills/codex/harness-architecture-advisor/skill.yaml +49 -0
- package/dist/agents/skills/codex/harness-auth/SKILL.md +331 -0
- package/dist/agents/skills/codex/harness-auth/skill.yaml +81 -0
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +916 -0
- package/dist/agents/skills/codex/harness-autopilot/skill.yaml +67 -0
- package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +406 -0
- package/dist/agents/skills/codex/harness-brainstorming/skill.yaml +50 -0
- package/dist/agents/skills/codex/harness-caching/SKILL.md +309 -0
- package/dist/agents/skills/codex/harness-caching/skill.yaml +73 -0
- package/dist/agents/skills/codex/harness-chaos/SKILL.md +295 -0
- package/dist/agents/skills/codex/harness-chaos/skill.yaml +72 -0
- package/dist/agents/skills/codex/harness-code-review/SKILL.md +857 -0
- package/dist/agents/skills/codex/harness-code-review/skill.yaml +52 -0
- package/dist/agents/skills/codex/harness-codebase-cleanup/SKILL.md +224 -0
- package/dist/agents/skills/codex/harness-codebase-cleanup/skill.yaml +65 -0
- package/dist/agents/skills/codex/harness-compliance/SKILL.md +303 -0
- package/dist/agents/skills/codex/harness-compliance/skill.yaml +78 -0
- package/dist/agents/skills/codex/harness-containerization/SKILL.md +284 -0
- package/dist/agents/skills/codex/harness-containerization/skill.yaml +80 -0
- package/dist/agents/skills/codex/harness-data-pipeline/SKILL.md +274 -0
- package/dist/agents/skills/codex/harness-data-pipeline/skill.yaml +81 -0
- package/dist/agents/skills/codex/harness-data-validation/SKILL.md +343 -0
- package/dist/agents/skills/codex/harness-data-validation/skill.yaml +75 -0
- package/dist/agents/skills/codex/harness-database/SKILL.md +310 -0
- package/dist/agents/skills/codex/harness-database/skill.yaml +80 -0
- package/dist/agents/skills/codex/harness-debugging/SKILL.md +366 -0
- package/dist/agents/skills/codex/harness-debugging/skill.yaml +48 -0
- package/dist/agents/skills/codex/harness-dependency-health/SKILL.md +179 -0
- package/dist/agents/skills/codex/harness-dependency-health/skill.yaml +42 -0
- package/dist/agents/skills/codex/harness-deployment/SKILL.md +307 -0
- package/dist/agents/skills/codex/harness-deployment/skill.yaml +77 -0
- package/dist/agents/skills/codex/harness-design/SKILL.md +265 -0
- package/dist/agents/skills/codex/harness-design/skill.yaml +54 -0
- package/dist/agents/skills/codex/harness-design-mobile/SKILL.md +336 -0
- package/dist/agents/skills/codex/harness-design-mobile/skill.yaml +50 -0
- package/dist/agents/skills/codex/harness-design-system/SKILL.md +282 -0
- package/dist/agents/skills/codex/harness-design-system/skill.yaml +51 -0
- package/dist/agents/skills/codex/harness-design-web/SKILL.md +360 -0
- package/dist/agents/skills/codex/harness-design-web/skill.yaml +53 -0
- package/dist/agents/skills/codex/harness-diagnostics/SKILL.md +318 -0
- package/dist/agents/skills/codex/harness-diagnostics/skill.yaml +51 -0
- package/dist/agents/skills/codex/harness-docs-pipeline/SKILL.md +460 -0
- package/dist/agents/skills/codex/harness-docs-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/codex/harness-dx/SKILL.md +276 -0
- package/dist/agents/skills/codex/harness-dx/skill.yaml +76 -0
- package/dist/agents/skills/codex/harness-e2e/SKILL.md +245 -0
- package/dist/agents/skills/codex/harness-e2e/skill.yaml +78 -0
- package/dist/agents/skills/codex/harness-event-driven/SKILL.md +280 -0
- package/dist/agents/skills/codex/harness-event-driven/skill.yaml +77 -0
- package/dist/agents/skills/codex/harness-execution/SKILL.md +510 -0
- package/dist/agents/skills/codex/harness-execution/skill.yaml +52 -0
- package/dist/agents/skills/codex/harness-feature-flags/SKILL.md +287 -0
- package/dist/agents/skills/codex/harness-feature-flags/skill.yaml +74 -0
- package/dist/agents/skills/codex/harness-git-workflow/SKILL.md +268 -0
- package/dist/agents/skills/codex/harness-git-workflow/skill.yaml +32 -0
- package/dist/agents/skills/codex/harness-hotspot-detector/SKILL.md +161 -0
- package/dist/agents/skills/codex/harness-hotspot-detector/skill.yaml +45 -0
- package/dist/agents/skills/codex/harness-i18n/SKILL.md +484 -0
- package/dist/agents/skills/codex/harness-i18n/skill.yaml +55 -0
- package/dist/agents/skills/codex/harness-i18n-process/SKILL.md +388 -0
- package/dist/agents/skills/codex/harness-i18n-process/skill.yaml +44 -0
- package/dist/agents/skills/codex/harness-i18n-workflow/SKILL.md +512 -0
- package/dist/agents/skills/codex/harness-i18n-workflow/skill.yaml +54 -0
- package/dist/agents/skills/codex/harness-impact-analysis/SKILL.md +184 -0
- package/dist/agents/skills/codex/harness-impact-analysis/skill.yaml +45 -0
- package/dist/agents/skills/codex/harness-incident-response/SKILL.md +223 -0
- package/dist/agents/skills/codex/harness-incident-response/skill.yaml +78 -0
- package/dist/agents/skills/codex/harness-infrastructure-as-code/SKILL.md +279 -0
- package/dist/agents/skills/codex/harness-infrastructure-as-code/skill.yaml +80 -0
- package/dist/agents/skills/codex/harness-integration-test/SKILL.md +271 -0
- package/dist/agents/skills/codex/harness-integration-test/skill.yaml +73 -0
- package/dist/agents/skills/codex/harness-integrity/SKILL.md +167 -0
- package/dist/agents/skills/codex/harness-integrity/skill.yaml +48 -0
- package/dist/agents/skills/codex/harness-knowledge-mapper/SKILL.md +195 -0
- package/dist/agents/skills/codex/harness-knowledge-mapper/skill.yaml +50 -0
- package/dist/agents/skills/codex/harness-load-testing/SKILL.md +274 -0
- package/dist/agents/skills/codex/harness-load-testing/skill.yaml +79 -0
- package/dist/agents/skills/codex/harness-ml-ops/SKILL.md +341 -0
- package/dist/agents/skills/codex/harness-ml-ops/skill.yaml +79 -0
- package/dist/agents/skills/codex/harness-mobile-patterns/SKILL.md +326 -0
- package/dist/agents/skills/codex/harness-mobile-patterns/skill.yaml +82 -0
- package/dist/agents/skills/codex/harness-mutation-test/SKILL.md +251 -0
- package/dist/agents/skills/codex/harness-mutation-test/skill.yaml +70 -0
- package/dist/agents/skills/codex/harness-observability/SKILL.md +283 -0
- package/dist/agents/skills/codex/harness-observability/skill.yaml +78 -0
- package/dist/agents/skills/codex/harness-onboarding/SKILL.md +288 -0
- package/dist/agents/skills/codex/harness-onboarding/skill.yaml +31 -0
- package/dist/agents/skills/codex/harness-parallel-agents/SKILL.md +256 -0
- package/dist/agents/skills/codex/harness-parallel-agents/skill.yaml +34 -0
- package/dist/agents/skills/codex/harness-perf/SKILL.md +260 -0
- package/dist/agents/skills/codex/harness-perf/skill.yaml +51 -0
- package/dist/agents/skills/codex/harness-perf-tdd/SKILL.md +249 -0
- package/dist/agents/skills/codex/harness-perf-tdd/skill.yaml +48 -0
- package/dist/agents/skills/codex/harness-planning/SKILL.md +579 -0
- package/dist/agents/skills/codex/harness-planning/skill.yaml +56 -0
- package/dist/agents/skills/codex/harness-pre-commit-review/SKILL.md +324 -0
- package/dist/agents/skills/codex/harness-pre-commit-review/skill.yaml +34 -0
- package/dist/agents/skills/codex/harness-product-spec/SKILL.md +285 -0
- package/dist/agents/skills/codex/harness-product-spec/skill.yaml +72 -0
- package/dist/agents/skills/codex/harness-property-test/SKILL.md +281 -0
- package/dist/agents/skills/codex/harness-property-test/skill.yaml +71 -0
- package/dist/agents/skills/codex/harness-refactoring/SKILL.md +169 -0
- package/dist/agents/skills/codex/harness-refactoring/skill.yaml +34 -0
- package/dist/agents/skills/codex/harness-release-readiness/SKILL.md +689 -0
- package/dist/agents/skills/codex/harness-release-readiness/skill.yaml +58 -0
- package/dist/agents/skills/codex/harness-resilience/SKILL.md +255 -0
- package/dist/agents/skills/codex/harness-resilience/skill.yaml +76 -0
- package/dist/agents/skills/codex/harness-roadmap/SKILL.md +595 -0
- package/dist/agents/skills/codex/harness-roadmap/skill.yaml +44 -0
- package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +204 -0
- package/dist/agents/skills/codex/harness-roadmap-pilot/skill.yaml +52 -0
- package/dist/agents/skills/codex/harness-secrets/SKILL.md +293 -0
- package/dist/agents/skills/codex/harness-secrets/skill.yaml +76 -0
- package/dist/agents/skills/codex/harness-security-review/SKILL.md +260 -0
- package/dist/agents/skills/codex/harness-security-review/skill.yaml +53 -0
- package/dist/agents/skills/codex/harness-security-scan/SKILL.md +154 -0
- package/dist/agents/skills/codex/harness-security-scan/skill.yaml +42 -0
- package/dist/agents/skills/codex/harness-skill-authoring/SKILL.md +292 -0
- package/dist/agents/skills/codex/harness-skill-authoring/skill.yaml +33 -0
- package/dist/agents/skills/codex/harness-soundness-review/SKILL.md +1267 -0
- package/dist/agents/skills/codex/harness-soundness-review/skill.yaml +49 -0
- package/dist/agents/skills/codex/harness-sql-review/SKILL.md +315 -0
- package/dist/agents/skills/codex/harness-sql-review/skill.yaml +74 -0
- package/dist/agents/skills/codex/harness-state-management/SKILL.md +309 -0
- package/dist/agents/skills/codex/harness-state-management/skill.yaml +33 -0
- package/dist/agents/skills/codex/harness-supply-chain-audit/SKILL.md +281 -0
- package/dist/agents/skills/codex/harness-supply-chain-audit/skill.yaml +51 -0
- package/dist/agents/skills/codex/harness-tdd/SKILL.md +177 -0
- package/dist/agents/skills/codex/harness-tdd/skill.yaml +49 -0
- package/dist/agents/skills/codex/harness-test-advisor/SKILL.md +160 -0
- package/dist/agents/skills/codex/harness-test-advisor/skill.yaml +45 -0
- package/dist/agents/skills/codex/harness-test-data/SKILL.md +268 -0
- package/dist/agents/skills/codex/harness-test-data/skill.yaml +74 -0
- package/dist/agents/skills/codex/harness-ux-copy/SKILL.md +271 -0
- package/dist/agents/skills/codex/harness-ux-copy/skill.yaml +77 -0
- package/dist/agents/skills/codex/harness-verification/SKILL.md +421 -0
- package/dist/agents/skills/codex/harness-verification/skill.yaml +43 -0
- package/dist/agents/skills/codex/harness-verify/SKILL.md +159 -0
- package/dist/agents/skills/codex/harness-verify/skill.yaml +41 -0
- package/dist/agents/skills/codex/harness-visual-regression/SKILL.md +257 -0
- package/dist/agents/skills/codex/harness-visual-regression/skill.yaml +74 -0
- package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +232 -0
- package/dist/agents/skills/codex/initialize-harness-project/skill.yaml +32 -0
- package/dist/agents/skills/codex/validate-context-engineering/SKILL.md +150 -0
- package/dist/agents/skills/codex/validate-context-engineering/skill.yaml +32 -0
- package/dist/agents/skills/cursor/add-harness-component/SKILL.md +192 -0
- package/dist/agents/skills/cursor/add-harness-component/skill.yaml +33 -0
- package/dist/agents/skills/cursor/align-documentation/SKILL.md +213 -0
- package/dist/agents/skills/cursor/align-documentation/skill.yaml +32 -0
- package/dist/agents/skills/cursor/check-mechanical-constraints/SKILL.md +191 -0
- package/dist/agents/skills/cursor/check-mechanical-constraints/skill.yaml +33 -0
- package/dist/agents/skills/cursor/cleanup-dead-code/SKILL.md +245 -0
- package/dist/agents/skills/cursor/cleanup-dead-code/skill.yaml +34 -0
- package/dist/agents/skills/cursor/detect-doc-drift/SKILL.md +179 -0
- package/dist/agents/skills/cursor/detect-doc-drift/skill.yaml +31 -0
- package/dist/agents/skills/cursor/enforce-architecture/SKILL.md +296 -0
- package/dist/agents/skills/cursor/enforce-architecture/skill.yaml +35 -0
- package/dist/agents/skills/cursor/harness-accessibility/SKILL.md +281 -0
- package/dist/agents/skills/cursor/harness-accessibility/skill.yaml +52 -0
- package/dist/agents/skills/cursor/harness-api-design/SKILL.md +356 -0
- package/dist/agents/skills/cursor/harness-api-design/skill.yaml +74 -0
- package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +449 -0
- package/dist/agents/skills/cursor/harness-architecture-advisor/skill.yaml +49 -0
- package/dist/agents/skills/cursor/harness-auth/SKILL.md +331 -0
- package/dist/agents/skills/cursor/harness-auth/skill.yaml +81 -0
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +916 -0
- package/dist/agents/skills/cursor/harness-autopilot/skill.yaml +67 -0
- package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +406 -0
- package/dist/agents/skills/cursor/harness-brainstorming/skill.yaml +50 -0
- package/dist/agents/skills/cursor/harness-caching/SKILL.md +309 -0
- package/dist/agents/skills/cursor/harness-caching/skill.yaml +73 -0
- package/dist/agents/skills/cursor/harness-chaos/SKILL.md +295 -0
- package/dist/agents/skills/cursor/harness-chaos/skill.yaml +72 -0
- package/dist/agents/skills/cursor/harness-code-review/SKILL.md +857 -0
- package/dist/agents/skills/cursor/harness-code-review/skill.yaml +52 -0
- package/dist/agents/skills/cursor/harness-codebase-cleanup/SKILL.md +224 -0
- package/dist/agents/skills/cursor/harness-codebase-cleanup/skill.yaml +65 -0
- package/dist/agents/skills/cursor/harness-compliance/SKILL.md +303 -0
- package/dist/agents/skills/cursor/harness-compliance/skill.yaml +78 -0
- package/dist/agents/skills/cursor/harness-containerization/SKILL.md +284 -0
- package/dist/agents/skills/cursor/harness-containerization/skill.yaml +80 -0
- package/dist/agents/skills/cursor/harness-data-pipeline/SKILL.md +274 -0
- package/dist/agents/skills/cursor/harness-data-pipeline/skill.yaml +81 -0
- package/dist/agents/skills/cursor/harness-data-validation/SKILL.md +343 -0
- package/dist/agents/skills/cursor/harness-data-validation/skill.yaml +75 -0
- package/dist/agents/skills/cursor/harness-database/SKILL.md +310 -0
- package/dist/agents/skills/cursor/harness-database/skill.yaml +80 -0
- package/dist/agents/skills/cursor/harness-debugging/SKILL.md +366 -0
- package/dist/agents/skills/cursor/harness-debugging/skill.yaml +48 -0
- package/dist/agents/skills/cursor/harness-dependency-health/SKILL.md +179 -0
- package/dist/agents/skills/cursor/harness-dependency-health/skill.yaml +42 -0
- package/dist/agents/skills/cursor/harness-deployment/SKILL.md +307 -0
- package/dist/agents/skills/cursor/harness-deployment/skill.yaml +77 -0
- package/dist/agents/skills/cursor/harness-design/SKILL.md +265 -0
- package/dist/agents/skills/cursor/harness-design/skill.yaml +54 -0
- package/dist/agents/skills/cursor/harness-design-mobile/SKILL.md +336 -0
- package/dist/agents/skills/cursor/harness-design-mobile/skill.yaml +50 -0
- package/dist/agents/skills/cursor/harness-design-system/SKILL.md +282 -0
- package/dist/agents/skills/cursor/harness-design-system/skill.yaml +51 -0
- package/dist/agents/skills/cursor/harness-design-web/SKILL.md +360 -0
- package/dist/agents/skills/cursor/harness-design-web/skill.yaml +53 -0
- package/dist/agents/skills/cursor/harness-diagnostics/SKILL.md +318 -0
- package/dist/agents/skills/cursor/harness-diagnostics/skill.yaml +51 -0
- package/dist/agents/skills/cursor/harness-docs-pipeline/SKILL.md +460 -0
- package/dist/agents/skills/cursor/harness-docs-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/cursor/harness-dx/SKILL.md +276 -0
- package/dist/agents/skills/cursor/harness-dx/skill.yaml +76 -0
- package/dist/agents/skills/cursor/harness-e2e/SKILL.md +245 -0
- package/dist/agents/skills/cursor/harness-e2e/skill.yaml +78 -0
- package/dist/agents/skills/cursor/harness-event-driven/SKILL.md +280 -0
- package/dist/agents/skills/cursor/harness-event-driven/skill.yaml +77 -0
- package/dist/agents/skills/cursor/harness-execution/SKILL.md +510 -0
- package/dist/agents/skills/cursor/harness-execution/skill.yaml +52 -0
- package/dist/agents/skills/cursor/harness-feature-flags/SKILL.md +287 -0
- package/dist/agents/skills/cursor/harness-feature-flags/skill.yaml +74 -0
- package/dist/agents/skills/cursor/harness-git-workflow/SKILL.md +268 -0
- package/dist/agents/skills/cursor/harness-git-workflow/skill.yaml +32 -0
- package/dist/agents/skills/cursor/harness-hotspot-detector/SKILL.md +161 -0
- package/dist/agents/skills/cursor/harness-hotspot-detector/skill.yaml +45 -0
- package/dist/agents/skills/cursor/harness-i18n/SKILL.md +484 -0
- package/dist/agents/skills/cursor/harness-i18n/skill.yaml +55 -0
- package/dist/agents/skills/cursor/harness-i18n-process/SKILL.md +388 -0
- package/dist/agents/skills/cursor/harness-i18n-process/skill.yaml +44 -0
- package/dist/agents/skills/cursor/harness-i18n-workflow/SKILL.md +512 -0
- package/dist/agents/skills/cursor/harness-i18n-workflow/skill.yaml +54 -0
- package/dist/agents/skills/cursor/harness-impact-analysis/SKILL.md +184 -0
- package/dist/agents/skills/cursor/harness-impact-analysis/skill.yaml +45 -0
- package/dist/agents/skills/cursor/harness-incident-response/SKILL.md +223 -0
- package/dist/agents/skills/cursor/harness-incident-response/skill.yaml +78 -0
- package/dist/agents/skills/cursor/harness-infrastructure-as-code/SKILL.md +279 -0
- package/dist/agents/skills/cursor/harness-infrastructure-as-code/skill.yaml +80 -0
- package/dist/agents/skills/cursor/harness-integration-test/SKILL.md +271 -0
- package/dist/agents/skills/cursor/harness-integration-test/skill.yaml +73 -0
- package/dist/agents/skills/cursor/harness-integrity/SKILL.md +167 -0
- package/dist/agents/skills/cursor/harness-integrity/skill.yaml +48 -0
- package/dist/agents/skills/cursor/harness-knowledge-mapper/SKILL.md +195 -0
- package/dist/agents/skills/cursor/harness-knowledge-mapper/skill.yaml +50 -0
- package/dist/agents/skills/cursor/harness-load-testing/SKILL.md +274 -0
- package/dist/agents/skills/cursor/harness-load-testing/skill.yaml +79 -0
- package/dist/agents/skills/cursor/harness-ml-ops/SKILL.md +341 -0
- package/dist/agents/skills/cursor/harness-ml-ops/skill.yaml +79 -0
- package/dist/agents/skills/cursor/harness-mobile-patterns/SKILL.md +326 -0
- package/dist/agents/skills/cursor/harness-mobile-patterns/skill.yaml +82 -0
- package/dist/agents/skills/cursor/harness-mutation-test/SKILL.md +251 -0
- package/dist/agents/skills/cursor/harness-mutation-test/skill.yaml +70 -0
- package/dist/agents/skills/cursor/harness-observability/SKILL.md +283 -0
- package/dist/agents/skills/cursor/harness-observability/skill.yaml +78 -0
- package/dist/agents/skills/cursor/harness-onboarding/SKILL.md +288 -0
- package/dist/agents/skills/cursor/harness-onboarding/skill.yaml +31 -0
- package/dist/agents/skills/cursor/harness-parallel-agents/SKILL.md +256 -0
- package/dist/agents/skills/cursor/harness-parallel-agents/skill.yaml +34 -0
- package/dist/agents/skills/cursor/harness-perf/SKILL.md +260 -0
- package/dist/agents/skills/cursor/harness-perf/skill.yaml +51 -0
- package/dist/agents/skills/cursor/harness-perf-tdd/SKILL.md +249 -0
- package/dist/agents/skills/cursor/harness-perf-tdd/skill.yaml +48 -0
- package/dist/agents/skills/cursor/harness-planning/SKILL.md +579 -0
- package/dist/agents/skills/cursor/harness-planning/skill.yaml +56 -0
- package/dist/agents/skills/cursor/harness-pre-commit-review/SKILL.md +324 -0
- package/dist/agents/skills/cursor/harness-pre-commit-review/skill.yaml +34 -0
- package/dist/agents/skills/cursor/harness-product-spec/SKILL.md +285 -0
- package/dist/agents/skills/cursor/harness-product-spec/skill.yaml +72 -0
- package/dist/agents/skills/cursor/harness-property-test/SKILL.md +281 -0
- package/dist/agents/skills/cursor/harness-property-test/skill.yaml +71 -0
- package/dist/agents/skills/cursor/harness-refactoring/SKILL.md +169 -0
- package/dist/agents/skills/cursor/harness-refactoring/skill.yaml +34 -0
- package/dist/agents/skills/cursor/harness-release-readiness/SKILL.md +689 -0
- package/dist/agents/skills/cursor/harness-release-readiness/skill.yaml +58 -0
- package/dist/agents/skills/cursor/harness-resilience/SKILL.md +255 -0
- package/dist/agents/skills/cursor/harness-resilience/skill.yaml +76 -0
- package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +595 -0
- package/dist/agents/skills/cursor/harness-roadmap/skill.yaml +44 -0
- package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +204 -0
- package/dist/agents/skills/cursor/harness-roadmap-pilot/skill.yaml +52 -0
- package/dist/agents/skills/cursor/harness-secrets/SKILL.md +293 -0
- package/dist/agents/skills/cursor/harness-secrets/skill.yaml +76 -0
- package/dist/agents/skills/cursor/harness-security-review/SKILL.md +260 -0
- package/dist/agents/skills/cursor/harness-security-review/skill.yaml +53 -0
- package/dist/agents/skills/cursor/harness-security-scan/SKILL.md +154 -0
- package/dist/agents/skills/cursor/harness-security-scan/skill.yaml +42 -0
- package/dist/agents/skills/cursor/harness-skill-authoring/SKILL.md +292 -0
- package/dist/agents/skills/cursor/harness-skill-authoring/skill.yaml +33 -0
- package/dist/agents/skills/cursor/harness-soundness-review/SKILL.md +1267 -0
- package/dist/agents/skills/cursor/harness-soundness-review/skill.yaml +49 -0
- package/dist/agents/skills/cursor/harness-sql-review/SKILL.md +315 -0
- package/dist/agents/skills/cursor/harness-sql-review/skill.yaml +74 -0
- package/dist/agents/skills/cursor/harness-state-management/SKILL.md +309 -0
- package/dist/agents/skills/cursor/harness-state-management/skill.yaml +33 -0
- package/dist/agents/skills/cursor/harness-supply-chain-audit/SKILL.md +281 -0
- package/dist/agents/skills/cursor/harness-supply-chain-audit/skill.yaml +51 -0
- package/dist/agents/skills/cursor/harness-tdd/SKILL.md +177 -0
- package/dist/agents/skills/cursor/harness-tdd/skill.yaml +49 -0
- package/dist/agents/skills/cursor/harness-test-advisor/SKILL.md +160 -0
- package/dist/agents/skills/cursor/harness-test-advisor/skill.yaml +45 -0
- package/dist/agents/skills/cursor/harness-test-data/SKILL.md +268 -0
- package/dist/agents/skills/cursor/harness-test-data/skill.yaml +74 -0
- package/dist/agents/skills/cursor/harness-ux-copy/SKILL.md +271 -0
- package/dist/agents/skills/cursor/harness-ux-copy/skill.yaml +77 -0
- package/dist/agents/skills/cursor/harness-verification/SKILL.md +421 -0
- package/dist/agents/skills/cursor/harness-verification/skill.yaml +43 -0
- package/dist/agents/skills/cursor/harness-verify/SKILL.md +159 -0
- package/dist/agents/skills/cursor/harness-verify/skill.yaml +41 -0
- package/dist/agents/skills/cursor/harness-visual-regression/SKILL.md +257 -0
- package/dist/agents/skills/cursor/harness-visual-regression/skill.yaml +74 -0
- package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +232 -0
- package/dist/agents/skills/cursor/initialize-harness-project/skill.yaml +32 -0
- package/dist/agents/skills/cursor/validate-context-engineering/SKILL.md +150 -0
- package/dist/agents/skills/cursor/validate-context-engineering/skill.yaml +32 -0
- package/dist/agents/skills/gemini-cli/enforce-architecture/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +123 -14
- package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +6 -0
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +97 -3
- package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +6 -0
- package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/SKILL.md +2 -4
- package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +99 -3
- package/dist/agents/skills/gemini-cli/harness-planning/skill.yaml +6 -0
- package/dist/agents/skills/gemini-cli/harness-pre-commit-review/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +204 -0
- package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/skill.yaml +52 -0
- package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +27 -7
- package/dist/agents/skills/gemini-cli/harness-security-scan/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-supply-chain-audit/SKILL.md +281 -0
- package/dist/agents/skills/gemini-cli/harness-supply-chain-audit/skill.yaml +51 -0
- package/dist/agents/skills/package.json +5 -5
- package/dist/agents/skills/templates/discipline-template.md +49 -0
- package/dist/agents/skills/tests/schema.ts +1 -1
- package/dist/{agents-md-ZGNIDWAF.js → agents-md-DUYNKHJZ.js} +1 -1
- package/dist/{architecture-ZLIH5533.js → architecture-UBO5KKUV.js} +2 -2
- package/dist/bin/harness-mcp.js +14 -14
- package/dist/bin/harness.js +20 -20
- package/dist/{check-phase-gate-ZOXVBDCN.js → check-phase-gate-OSHN2AEL.js} +3 -3
- package/dist/{chunk-NNHDDXYT.js → chunk-2DMIQ35P.js} +486 -132
- package/dist/{chunk-OFXQSFOW.js → chunk-5FM64G6D.js} +2 -2
- package/dist/{chunk-RCWZBSK5.js → chunk-6KWBH4EO.js} +1 -1
- package/dist/{chunk-LGYBN7Y6.js → chunk-ABQUCXRE.js} +2 -1
- package/dist/{chunk-VEPAJXBW.js → chunk-APNPXLB2.js} +4 -4
- package/dist/{chunk-ZOAWBDWU.js → chunk-CJDVBBPB.js} +5 -1
- package/dist/{chunk-FTMXDOR6.js → chunk-CZZXE6BL.js} +1 -1
- package/dist/{chunk-N25INEIX.js → chunk-GWXP3JVA.js} +3 -3
- package/dist/{chunk-XYLGHKG6.js → chunk-HKUX2X7O.js} +11 -2
- package/dist/{chunk-YBJ262QL.js → chunk-LRG3B43J.js} +1 -1
- package/dist/{chunk-AOZRDOIP.js → chunk-M6TIO6NF.js} +1 -1
- package/dist/{chunk-J4RAX7YB.js → chunk-OA3MOZGG.js} +1683 -507
- package/dist/{chunk-YLXFKVJE.js → chunk-OHZVGIPE.js} +9 -9
- package/dist/{chunk-2BKLWLY6.js → chunk-QSRRBNLY.js} +8 -8
- package/dist/{chunk-3ZZKVN62.js → chunk-TG7IUJ3J.js} +1 -1
- package/dist/{chunk-EDXIVMAP.js → chunk-TZIHFNEG.js} +20 -6
- package/dist/{chunk-ND2ENWDM.js → chunk-UX3JHYEA.js} +1 -1
- package/dist/{chunk-Z2OOPXJO.js → chunk-VF23UTNB.js} +1771 -164
- package/dist/{chunk-7MJAPE3Z.js → chunk-YLN34N65.js} +1 -0
- package/dist/{chunk-B2HKP423.js → chunk-ZA2I7S3E.js} +28 -1
- package/dist/{ci-workflow-765LSHRD.js → ci-workflow-FJZMNZPT.js} +1 -1
- package/dist/{create-skill-XSWHMSM5.js → create-skill-NDXQSTIK.js} +2 -2
- package/dist/{dist-ALQDD67R.js → dist-MF5BK5AD.js} +77 -1
- package/dist/{dist-B26DFXMP.js → dist-U7EAO6T2.js} +110 -60
- package/dist/{docs-NRMQCOJ6.js → docs-WZHW4N4P.js} +3 -3
- package/dist/{engine-3RB7MXPP.js → engine-VS6ZJ2VZ.js} +2 -2
- package/dist/{entropy-6AGX2ZUN.js → entropy-FCIGJIIT.js} +2 -2
- package/dist/{feedback-MY4QZIFD.js → feedback-O3FYTZIE.js} +1 -1
- package/dist/{generate-agent-definitions-ZAE726AU.js → generate-agent-definitions-EYG263XD.js} +3 -3
- package/dist/{graph-loader-2M2HXDQI.js → graph-loader-KMHDQYDT.js} +1 -1
- package/dist/index.d.ts +95 -15
- package/dist/index.js +20 -20
- package/dist/{loader-UUTVMQCC.js → loader-B4XWX4K6.js} +1 -1
- package/dist/{mcp-VU5FMO52.js → mcp-DVVUODN7.js} +14 -14
- package/dist/{performance-2D7G6NMJ.js → performance-NMJDV6HF.js} +4 -2
- package/dist/{review-pipeline-RAQ55ISU.js → review-pipeline-MSEJWTKM.js} +1 -1
- package/dist/{runtime-BCK5RRZQ.js → runtime-YHVLJNPG.js} +1 -1
- package/dist/{security-2RPQEN62.js → security-HTDKKGMX.js} +1 -1
- package/dist/{skill-executor-XZLYZYAK.js → skill-executor-XEVDGXUM.js} +2 -2
- package/dist/{validate-KBYQAEWE.js → validate-SPSTH2YW.js} +2 -2
- package/dist/{validate-cross-check-OABMREW4.js → validate-cross-check-YTDWIMFI.js} +1 -1
- package/package.json +20 -20
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Harness Roadmap Pilot
|
|
2
|
+
|
|
3
|
+
> AI-assisted selection of the next highest-impact unblocked roadmap item. Scores candidates, recommends one, assigns it, and transitions to the appropriate next skill.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When the team or individual needs to pick the next item to work on from the roadmap
|
|
8
|
+
- When there are multiple unblocked items and prioritization guidance is needed
|
|
9
|
+
- After completing a feature and looking for the next highest-impact work
|
|
10
|
+
- NOT when the roadmap does not exist (direct user to harness-roadmap --create)
|
|
11
|
+
- NOT when the user already knows what to work on (use harness-brainstorming or harness-autopilot directly)
|
|
12
|
+
|
|
13
|
+
## Process
|
|
14
|
+
|
|
15
|
+
### Iron Law
|
|
16
|
+
|
|
17
|
+
**Never assign or transition without the human confirming the recommendation first.**
|
|
18
|
+
|
|
19
|
+
Present the ranked candidates, the AI reasoning, and the recommended pick. Wait for explicit confirmation before making any changes.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
### Phase 1: SCAN -- Score Candidates
|
|
24
|
+
|
|
25
|
+
1. Check if `docs/roadmap.md` exists.
|
|
26
|
+
- If missing: error. "No roadmap found at docs/roadmap.md. Run harness-roadmap --create first."
|
|
27
|
+
2. Parse the roadmap using `parseRoadmap` from `@harness-engineering/core`.
|
|
28
|
+
3. Determine the current user:
|
|
29
|
+
- Use the `--user` argument if provided
|
|
30
|
+
- Otherwise, attempt to detect from git config: `git config user.name` or `git config user.email`
|
|
31
|
+
- If neither available, proceed without affinity scoring
|
|
32
|
+
4. Call `scoreRoadmapCandidates(roadmap, { currentUser })` from `@harness-engineering/core`.
|
|
33
|
+
5. If no candidates: inform the human. "No unblocked planned or backlog items found. All items are either in-progress, done, blocked, or the roadmap is empty."
|
|
34
|
+
|
|
35
|
+
Present the top 5 candidates:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
ROADMAP PILOT -- Candidate Scoring
|
|
39
|
+
|
|
40
|
+
Top candidates (scored by position 50%, dependents 30%, affinity 20%):
|
|
41
|
+
|
|
42
|
+
# Feature Milestone Priority Score Breakdown
|
|
43
|
+
1. Feature A MVP Release P0 0.85 pos:0.9 dep:0.8 aff:1.0
|
|
44
|
+
2. Feature B MVP Release P1 0.72 pos:0.8 dep:0.6 aff:0.5
|
|
45
|
+
3. Feature C Q2 Release -- 0.65 pos:0.7 dep:0.5 aff:0.0
|
|
46
|
+
4. Feature D Backlog -- 0.40 pos:0.3 dep:0.4 aff:0.0
|
|
47
|
+
5. Feature E Backlog -- 0.35 pos:0.2 dep:0.3 aff:0.0
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Phase 2: RECOMMEND -- AI-Assisted Analysis
|
|
51
|
+
|
|
52
|
+
1. For the top 3 candidates, read their spec files (if they exist):
|
|
53
|
+
- Read the spec's Overview and Goals section
|
|
54
|
+
- Read the spec's Success Criteria section
|
|
55
|
+
- Assess effort and impact from the spec content
|
|
56
|
+
|
|
57
|
+
2. Provide a recommendation with reasoning:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
RECOMMENDATION
|
|
61
|
+
|
|
62
|
+
I recommend Feature A (MVP Release, P0, score: 0.85).
|
|
63
|
+
|
|
64
|
+
Reasoning:
|
|
65
|
+
- Highest priority (P0) with strong positional signal (first in MVP milestone)
|
|
66
|
+
- Unblocks 2 downstream features (Feature X, Feature Y)
|
|
67
|
+
- You completed its blocker "Foundation" -- high context affinity
|
|
68
|
+
- Spec exists with clear success criteria (12 acceptance tests)
|
|
69
|
+
- Estimated effort: medium (8 tasks in the plan)
|
|
70
|
+
|
|
71
|
+
Alternative: Feature B (P1, score: 0.72) -- consider if Feature A's scope is too large for the current time window.
|
|
72
|
+
|
|
73
|
+
Proceed with Feature A? (y/n/pick another)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Phase 3: CONFIRM -- Human Decision
|
|
77
|
+
|
|
78
|
+
1. Wait for human confirmation.
|
|
79
|
+
- If **yes**: proceed to Phase 4.
|
|
80
|
+
- If **pick another**: ask which candidate number, then proceed with that pick.
|
|
81
|
+
- If **no**: stop. No changes made.
|
|
82
|
+
|
|
83
|
+
### Phase 4: ASSIGN -- Execute Assignment and Transition
|
|
84
|
+
|
|
85
|
+
1. Call `assignFeature(roadmap, feature, currentUser, todayDate)` from `@harness-engineering/core`.
|
|
86
|
+
- This updates the feature's `Assignee` field
|
|
87
|
+
- Appends `assigned` record to assignment history (and `unassigned` for previous assignee if reassignment)
|
|
88
|
+
|
|
89
|
+
2. Serialize and write the updated roadmap to `docs/roadmap.md`.
|
|
90
|
+
|
|
91
|
+
3. If tracker config exists in `harness.config.json`, sync the assignment:
|
|
92
|
+
- Call the external tracker's `assignTicket` to push the assignment
|
|
93
|
+
- Log result but do not block on failure
|
|
94
|
+
|
|
95
|
+
4. Determine the transition target:
|
|
96
|
+
- If the feature has a `spec` field (non-null): transition to `harness:autopilot`
|
|
97
|
+
- If the feature has no `spec`: transition to `harness:brainstorming`
|
|
98
|
+
|
|
99
|
+
5. Present the transition to the human via `emit_interaction`:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
emit_interaction({
|
|
103
|
+
path: "<project-root>",
|
|
104
|
+
type: "transition",
|
|
105
|
+
transition: {
|
|
106
|
+
completedPhase: "roadmap-pilot",
|
|
107
|
+
suggestedNext: "<brainstorming|autopilot>",
|
|
108
|
+
reason: "Feature '<name>' assigned and ready for <brainstorming|execution>",
|
|
109
|
+
artifacts: ["docs/roadmap.md"],
|
|
110
|
+
requiresConfirmation: true,
|
|
111
|
+
summary: "Assigned '<name>' to <user>. <Spec exists -- ready for autopilot|No spec -- needs brainstorming first>.",
|
|
112
|
+
qualityGate: {
|
|
113
|
+
checks: [
|
|
114
|
+
{ "name": "roadmap-parsed", "passed": true },
|
|
115
|
+
{ "name": "candidate-scored", "passed": true },
|
|
116
|
+
{ "name": "human-confirmed", "passed": true },
|
|
117
|
+
{ "name": "assignment-written", "passed": true }
|
|
118
|
+
],
|
|
119
|
+
allPassed: true
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
})
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
6. Run `harness validate`.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Harness Integration
|
|
130
|
+
|
|
131
|
+
- **`parseRoadmap` / `serializeRoadmap`** -- Parse and write `docs/roadmap.md`. Import from `@harness-engineering/core`.
|
|
132
|
+
- **`scoreRoadmapCandidates`** -- Core scoring algorithm. Import from `@harness-engineering/core`. Takes a `Roadmap` and optional `PilotScoringOptions` (currentUser for affinity).
|
|
133
|
+
- **`assignFeature`** -- Assignment with history tracking. Import from `@harness-engineering/core`. Handles new assignment and reassignment (unassigned + assigned records).
|
|
134
|
+
- **`emit_interaction`** -- Used for the skill transition at the end. Transitions to `harness:brainstorming` (no spec) or `harness:autopilot` (spec exists).
|
|
135
|
+
- **`harness validate`** -- Run after assignment is written.
|
|
136
|
+
- **External sync** -- If `harness.config.json` has tracker config, use `fullSync` or direct `assignTicket` to push assignment to external service.
|
|
137
|
+
|
|
138
|
+
## Success Criteria
|
|
139
|
+
|
|
140
|
+
1. Roadmap is parsed and unblocked planned/backlog items are scored
|
|
141
|
+
2. Scoring uses two-tier sort: explicit priority first, then weighted score
|
|
142
|
+
3. AI reads top candidates' specs and provides recommendation with reasoning
|
|
143
|
+
4. Human confirms before any changes are made
|
|
144
|
+
5. Assignment updates feature field, appends history records, and syncs externally
|
|
145
|
+
6. Reassignment produces two history records (unassigned + assigned)
|
|
146
|
+
7. Transition routes to brainstorming (no spec) or autopilot (spec exists)
|
|
147
|
+
8. `harness validate` passes after all changes
|
|
148
|
+
|
|
149
|
+
## Examples
|
|
150
|
+
|
|
151
|
+
### Example: Pick Next Item from a Multi-Milestone Roadmap
|
|
152
|
+
|
|
153
|
+
**Context:** A roadmap with 3 milestones, 8 features. 2 are in-progress, 1 is done, 2 are blocked, 3 are planned/backlog and unblocked. User is @cwarner who completed "Core Library Design".
|
|
154
|
+
|
|
155
|
+
**Phase 1: SCAN**
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
ROADMAP PILOT -- Candidate Scoring
|
|
159
|
+
|
|
160
|
+
Top candidates:
|
|
161
|
+
# Feature Milestone Priority Score Breakdown
|
|
162
|
+
1. Graph Connector MVP Release P2 0.78 pos:0.8 dep:0.6 aff:1.0
|
|
163
|
+
2. Performance Baselines Q3 Hardening -- 0.45 pos:0.5 dep:0.3 aff:0.0
|
|
164
|
+
3. Push Notifications Backlog -- 0.30 pos:0.2 dep:0.2 aff:0.5
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Phase 2: RECOMMEND**
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
I recommend Graph Connector (MVP Release, P2, score: 0.78).
|
|
171
|
+
|
|
172
|
+
Reasoning:
|
|
173
|
+
- Only prioritized item among candidates (P2)
|
|
174
|
+
- You completed its blocker "Core Library Design" -- maximum affinity bonus
|
|
175
|
+
- Unblocks "API Integration" downstream
|
|
176
|
+
- Spec exists at docs/changes/graph-connector/proposal.md
|
|
177
|
+
|
|
178
|
+
Proceed? (y/n/pick another)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Human confirms **y**.
|
|
182
|
+
|
|
183
|
+
**Phase 4: ASSIGN**
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
Assigned: Graph Connector -> @cwarner
|
|
187
|
+
History: +1 record (assigned, 2026-04-02)
|
|
188
|
+
Roadmap updated: docs/roadmap.md
|
|
189
|
+
External sync: github:harness-eng/harness#43 assigned
|
|
190
|
+
|
|
191
|
+
Transitioning to harness:autopilot (spec exists)...
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Gates
|
|
195
|
+
|
|
196
|
+
- **No assignment without human confirmation.** The CONFIRM phase must complete with explicit approval. Never auto-assign.
|
|
197
|
+
- **No transition without assignment.** The skill must write the assignment before transitioning to the next skill.
|
|
198
|
+
- **No scoring without a parsed roadmap.** If `docs/roadmap.md` does not exist or fails to parse, stop with an error.
|
|
199
|
+
|
|
200
|
+
## Escalation
|
|
201
|
+
|
|
202
|
+
- **When no unblocked candidates exist:** Inform the human. Suggest reviewing blocked items to see if blockers can be resolved, or adding new features via `harness-roadmap --add`.
|
|
203
|
+
- **When affinity data is unavailable:** Proceed without affinity scoring (weight falls to 0 for all candidates). Note this in the output.
|
|
204
|
+
- **When external sync fails:** Log the error, complete the local assignment, and note that external sync can be retried with `harness-roadmap --sync`.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: harness-roadmap-pilot
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: AI-assisted selection of the next highest-impact roadmap item with scoring, assignment, and skill transition
|
|
4
|
+
cognitive_mode: constructive-architect
|
|
5
|
+
triggers:
|
|
6
|
+
- manual
|
|
7
|
+
platforms:
|
|
8
|
+
- claude-code
|
|
9
|
+
- gemini-cli
|
|
10
|
+
tools:
|
|
11
|
+
- Bash
|
|
12
|
+
- Read
|
|
13
|
+
- Write
|
|
14
|
+
- Edit
|
|
15
|
+
- Glob
|
|
16
|
+
- Grep
|
|
17
|
+
- emit_interaction
|
|
18
|
+
cli:
|
|
19
|
+
command: harness skill run harness-roadmap-pilot
|
|
20
|
+
args:
|
|
21
|
+
- name: path
|
|
22
|
+
description: Project root path
|
|
23
|
+
required: false
|
|
24
|
+
- name: user
|
|
25
|
+
description: "Current user identifier (e.g., @cwarner) for affinity matching"
|
|
26
|
+
required: false
|
|
27
|
+
mcp:
|
|
28
|
+
tool: run_skill
|
|
29
|
+
input:
|
|
30
|
+
skill: harness-roadmap-pilot
|
|
31
|
+
path: string
|
|
32
|
+
type: rigid
|
|
33
|
+
tier: 2
|
|
34
|
+
phases:
|
|
35
|
+
- name: scan
|
|
36
|
+
description: Parse roadmap, filter unblocked candidates, compute scores
|
|
37
|
+
required: true
|
|
38
|
+
- name: recommend
|
|
39
|
+
description: AI reads top candidates specs and provides recommendation
|
|
40
|
+
required: true
|
|
41
|
+
- name: confirm
|
|
42
|
+
description: Present recommendation to human for approval
|
|
43
|
+
required: true
|
|
44
|
+
- name: assign
|
|
45
|
+
description: Update assignee, history, sync external, transition to next skill
|
|
46
|
+
required: true
|
|
47
|
+
state:
|
|
48
|
+
persistent: false
|
|
49
|
+
depends_on:
|
|
50
|
+
- harness-brainstorming
|
|
51
|
+
- harness-autopilot
|
|
52
|
+
- harness-roadmap
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
# Harness Secrets
|
|
2
|
+
|
|
3
|
+
> Secret detection, credential hygiene, and vault integration. Find exposed secrets, classify risk, and enforce externalization before they reach production.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When scanning source code for hardcoded secrets, API keys, or credentials
|
|
8
|
+
- When auditing environment variable hygiene and `.env` file management
|
|
9
|
+
- On PRs that modify configuration files or add new service integrations
|
|
10
|
+
- NOT for general application security review (use harness-security-review)
|
|
11
|
+
- NOT for infrastructure credential management (use harness-infrastructure-as-code)
|
|
12
|
+
- NOT for CI/CD secret injection (use harness-deployment)
|
|
13
|
+
|
|
14
|
+
## Process
|
|
15
|
+
|
|
16
|
+
### Phase 1: SCAN -- Detect Secrets in Source Code
|
|
17
|
+
|
|
18
|
+
1. **Scan source files for secret patterns.** Search for common secret formats:
|
|
19
|
+
- **API keys:** Patterns matching `sk-`, `pk_`, `AKIA`, `AIza`, `ghp_`, `glpat-`, `xoxb-`
|
|
20
|
+
- **Connection strings:** Database URIs with embedded credentials (`postgres://user:pass@`)
|
|
21
|
+
- **Private keys:** `-----BEGIN RSA PRIVATE KEY-----`, `-----BEGIN EC PRIVATE KEY-----`
|
|
22
|
+
- **JWT tokens:** Base64-encoded strings matching `eyJ` header pattern
|
|
23
|
+
- **Generic secrets:** Variables named `password`, `secret`, `token`, `api_key` with literal string values
|
|
24
|
+
|
|
25
|
+
2. **Scan configuration files.** Check files that commonly contain secrets:
|
|
26
|
+
- `.env`, `.env.local`, `.env.production` (should be gitignored)
|
|
27
|
+
- `config/*.json`, `config/*.yaml` with credential fields
|
|
28
|
+
- `docker-compose.yml` with inline environment values
|
|
29
|
+
- `application.properties`, `appsettings.json` with connection strings
|
|
30
|
+
- CI/CD pipeline files with hardcoded values
|
|
31
|
+
|
|
32
|
+
3. **Check `.gitignore` coverage.** Verify that sensitive files are excluded from version control:
|
|
33
|
+
- `.env*` files (except `.env.example`)
|
|
34
|
+
- `*.pem`, `*.key` private key files
|
|
35
|
+
- `credentials/`, `secrets/` directories
|
|
36
|
+
- Service account JSON files (`*-credentials.json`)
|
|
37
|
+
- IDE-specific files that may cache environment variables
|
|
38
|
+
|
|
39
|
+
4. **Scan git history for leaked secrets.** Check recent commits:
|
|
40
|
+
- Run `git log --diff-filter=A --name-only` for recently added files
|
|
41
|
+
- Check if any `.env` or credential files were committed and later removed
|
|
42
|
+
- Flag files that appear in git history but are now gitignored (the secret is still in history)
|
|
43
|
+
|
|
44
|
+
5. **Present scan results:**
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
Secret Scan: 7 findings in 5 files
|
|
48
|
+
|
|
49
|
+
CRITICAL (2):
|
|
50
|
+
src/config/database.ts:8 -- Hardcoded PostgreSQL connection string with password
|
|
51
|
+
src/services/stripe.ts:3 -- Stripe secret key (sk_live_...)
|
|
52
|
+
|
|
53
|
+
HIGH (3):
|
|
54
|
+
docker-compose.yml:15 -- MySQL root password in plaintext
|
|
55
|
+
src/config/aws.ts:12 -- AWS access key pattern (AKIA...)
|
|
56
|
+
.env.production:1 -- File committed to git (should be gitignored)
|
|
57
|
+
|
|
58
|
+
MEDIUM (2):
|
|
59
|
+
src/utils/auth.ts:45 -- JWT secret as string literal
|
|
60
|
+
config/app.json:22 -- Generic "apiKey" field with literal value
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### Phase 2: CLASSIFY -- Categorize by Risk and Type
|
|
66
|
+
|
|
67
|
+
1. **Assign severity levels.** Classify each finding:
|
|
68
|
+
- **CRITICAL:** Live production credentials, private keys, cloud provider access keys. Immediate rotation required.
|
|
69
|
+
- **HIGH:** Secrets in committed files, database passwords, service API keys. Rotation strongly recommended.
|
|
70
|
+
- **MEDIUM:** Development-only secrets in source, JWT signing keys, generic tokens. Should be externalized.
|
|
71
|
+
- **LOW:** Example values that look like secrets but are placeholders (`YOUR_API_KEY_HERE`), test-only credentials in test fixtures.
|
|
72
|
+
|
|
73
|
+
2. **Identify secret type.** Categorize each finding:
|
|
74
|
+
- Cloud provider credentials (AWS, GCP, Azure)
|
|
75
|
+
- Database credentials (connection strings, passwords)
|
|
76
|
+
- Third-party API keys (Stripe, SendGrid, Twilio)
|
|
77
|
+
- Authentication secrets (JWT keys, OAuth client secrets)
|
|
78
|
+
- Encryption keys (symmetric keys, private keys)
|
|
79
|
+
- Internal service tokens (inter-service auth)
|
|
80
|
+
|
|
81
|
+
3. **Assess blast radius.** For each CRITICAL and HIGH finding:
|
|
82
|
+
- What systems does this credential access?
|
|
83
|
+
- Is the credential scoped (read-only, limited permissions) or broad (admin)?
|
|
84
|
+
- Is the credential shared across environments?
|
|
85
|
+
- When was the credential last rotated?
|
|
86
|
+
|
|
87
|
+
4. **Check for false positives.** Verify findings are actual secrets:
|
|
88
|
+
- Example/placeholder values in documentation
|
|
89
|
+
- Test fixtures with fake credentials
|
|
90
|
+
- Base64-encoded non-secret data matching JWT patterns
|
|
91
|
+
- Hash values that match key patterns but are not keys
|
|
92
|
+
|
|
93
|
+
5. **Generate classification report:**
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Classification:
|
|
97
|
+
CRITICAL: 2 (require immediate rotation)
|
|
98
|
+
HIGH: 3 (require rotation within 24 hours)
|
|
99
|
+
MEDIUM: 2 (require externalization)
|
|
100
|
+
LOW: 0
|
|
101
|
+
False positives: 1 (removed from findings)
|
|
102
|
+
|
|
103
|
+
Affected systems:
|
|
104
|
+
- PostgreSQL database (production)
|
|
105
|
+
- Stripe payment processing
|
|
106
|
+
- AWS S3 storage
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### Phase 3: REMEDIATE -- Extract and Secure Secrets
|
|
112
|
+
|
|
113
|
+
1. **Recommend secret externalization.** For each finding, provide the remediation:
|
|
114
|
+
- Replace hardcoded value with environment variable reference
|
|
115
|
+
- Add the variable to `.env.example` with a placeholder value
|
|
116
|
+
- Add the actual value to the deployment secret store
|
|
117
|
+
- Verify `.gitignore` includes the actual `.env` file
|
|
118
|
+
|
|
119
|
+
2. **Recommend secret management integration.** Based on the project's infrastructure:
|
|
120
|
+
- **HashiCorp Vault:** Dynamic secrets, lease-based rotation, transit encryption
|
|
121
|
+
- **AWS Secrets Manager:** Native AWS integration, automatic rotation for RDS
|
|
122
|
+
- **Google Secret Manager:** GCP-native, IAM-based access control
|
|
123
|
+
- **Azure Key Vault:** Azure-native, HSM-backed key storage
|
|
124
|
+
- **dotenv + CI secrets:** Minimum viable approach for smaller projects
|
|
125
|
+
|
|
126
|
+
3. **Recommend rotation procedure.** For each CRITICAL and HIGH finding:
|
|
127
|
+
- Generate a new credential in the source system
|
|
128
|
+
- Update the secret store with the new value
|
|
129
|
+
- Deploy the updated configuration
|
|
130
|
+
- Verify the service works with the new credential
|
|
131
|
+
- Revoke the old credential
|
|
132
|
+
- Confirm no systems depend on the old credential
|
|
133
|
+
|
|
134
|
+
4. **Provide code transformation examples.** Show before/after for each finding:
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
// BEFORE (hardcoded)
|
|
138
|
+
const stripe = new Stripe('sk_live_abc123...');
|
|
139
|
+
|
|
140
|
+
// AFTER (externalized)
|
|
141
|
+
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
5. **If `--fix` flag is set,** apply automatic transformations:
|
|
145
|
+
- Extract hardcoded values to environment variables
|
|
146
|
+
- Add `.env.example` entries with placeholder values
|
|
147
|
+
- Update `.gitignore` if `.env` files are not excluded
|
|
148
|
+
- Present the diff for review before committing
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### Phase 4: VALIDATE -- Verify Remediation Completeness
|
|
153
|
+
|
|
154
|
+
1. **Re-scan after remediation.** Run the same scan from Phase 1 to verify:
|
|
155
|
+
- All CRITICAL and HIGH findings are resolved
|
|
156
|
+
- No new secrets were introduced during remediation
|
|
157
|
+
- Environment variable references resolve correctly
|
|
158
|
+
|
|
159
|
+
2. **Verify `.gitignore` coverage.** Confirm:
|
|
160
|
+
- All `.env` files (except `.env.example`) are gitignored
|
|
161
|
+
- Private key files are gitignored
|
|
162
|
+
- The gitignore patterns are specific enough (not overly broad)
|
|
163
|
+
|
|
164
|
+
3. **Verify `.env.example` completeness.** Check that:
|
|
165
|
+
- Every environment variable referenced in code has an entry
|
|
166
|
+
- Values are placeholders, not actual secrets
|
|
167
|
+
- Each entry has a comment describing the variable's purpose
|
|
168
|
+
- Required vs. optional variables are clearly marked
|
|
169
|
+
|
|
170
|
+
4. **Check git history for residual exposure.** If secrets were previously committed:
|
|
171
|
+
- Warn that the secret exists in git history even after removal
|
|
172
|
+
- Recommend `git filter-repo` or BFG Repo-Cleaner for history rewriting
|
|
173
|
+
- Emphasize that rotation is required regardless of history cleanup
|
|
174
|
+
- Note that force-push to remote may be required after history rewrite
|
|
175
|
+
|
|
176
|
+
5. **Generate validation report:**
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
Secret Validation: [PASS/WARN/FAIL]
|
|
180
|
+
|
|
181
|
+
Rescan: PASS (0 CRITICAL, 0 HIGH findings)
|
|
182
|
+
.gitignore: PASS (all sensitive patterns covered)
|
|
183
|
+
.env.example: WARN (missing STRIPE_WEBHOOK_SECRET entry)
|
|
184
|
+
Git history: WARN (2 secrets exist in history -- rotation required)
|
|
185
|
+
|
|
186
|
+
Actions remaining:
|
|
187
|
+
1. Add STRIPE_WEBHOOK_SECRET to .env.example
|
|
188
|
+
2. Rotate PostgreSQL password (exposed in commit abc1234)
|
|
189
|
+
3. Rotate Stripe key (exposed in commit def5678)
|
|
190
|
+
4. Consider git history rewrite after rotation
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Harness Integration
|
|
196
|
+
|
|
197
|
+
- **`harness skill run harness-secrets`** -- Primary invocation for secret scanning and remediation.
|
|
198
|
+
- **`harness validate`** -- Run after remediation to verify project health.
|
|
199
|
+
- **`harness check-security`** -- Complementary mechanical security scan that includes basic secret detection.
|
|
200
|
+
- **`emit_interaction`** -- Present findings and gather decisions on remediation approach.
|
|
201
|
+
|
|
202
|
+
## Success Criteria
|
|
203
|
+
|
|
204
|
+
- All source files are scanned for secret patterns
|
|
205
|
+
- Findings are classified by severity with accurate false-positive filtering
|
|
206
|
+
- CRITICAL and HIGH findings have specific rotation recommendations
|
|
207
|
+
- Environment variable externalization is verified
|
|
208
|
+
- `.gitignore` covers all sensitive file patterns
|
|
209
|
+
- `.env.example` is complete with placeholder values
|
|
210
|
+
- Git history exposure is flagged with rotation guidance
|
|
211
|
+
|
|
212
|
+
## Examples
|
|
213
|
+
|
|
214
|
+
### Example: Express.js API with Hardcoded Stripe Keys
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
Phase 1: SCAN
|
|
218
|
+
Scanned: 86 files
|
|
219
|
+
Findings: 4
|
|
220
|
+
|
|
221
|
+
CRITICAL: src/payments/stripe.ts:5 -- sk_live_EXAMPLE_KEY_REDACTED_0000
|
|
222
|
+
HIGH: docker-compose.yml:22 -- POSTGRES_PASSWORD=supersecret
|
|
223
|
+
MEDIUM: src/config/jwt.ts:3 -- JWT_SECRET = "my-jwt-secret-key"
|
|
224
|
+
LOW: tests/fixtures/auth.ts:8 -- fake-api-key-for-testing (false positive)
|
|
225
|
+
|
|
226
|
+
Phase 2: CLASSIFY
|
|
227
|
+
CRITICAL: 1 (Stripe production secret key -- full payment access)
|
|
228
|
+
HIGH: 1 (PostgreSQL password -- database access)
|
|
229
|
+
MEDIUM: 1 (JWT secret -- token forgery risk)
|
|
230
|
+
False positives: 1 (test fixture removed from findings)
|
|
231
|
+
|
|
232
|
+
Phase 3: REMEDIATE
|
|
233
|
+
1. Stripe key -> process.env.STRIPE_SECRET_KEY
|
|
234
|
+
2. Postgres password -> ${POSTGRES_PASSWORD} in compose, actual value in .env
|
|
235
|
+
3. JWT secret -> process.env.JWT_SECRET
|
|
236
|
+
Added 3 entries to .env.example
|
|
237
|
+
Updated .gitignore with .env* pattern
|
|
238
|
+
|
|
239
|
+
Phase 4: VALIDATE
|
|
240
|
+
Rescan: PASS (0 findings)
|
|
241
|
+
.gitignore: PASS
|
|
242
|
+
.env.example: PASS (all 3 variables documented)
|
|
243
|
+
Git history: WARN (Stripe key in commit history)
|
|
244
|
+
Result: WARN -- secrets externalized, rotation required for Stripe and Postgres
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Example: Django Application with AWS Credentials
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
Phase 1: SCAN
|
|
251
|
+
Scanned: 124 files
|
|
252
|
+
Findings: 5
|
|
253
|
+
|
|
254
|
+
CRITICAL: settings/production.py:45 -- AWS_ACCESS_KEY_ID = "AKIA..."
|
|
255
|
+
CRITICAL: settings/production.py:46 -- AWS_SECRET_ACCESS_KEY = "wJal..."
|
|
256
|
+
HIGH: .env.production committed to git (12 secrets inside)
|
|
257
|
+
MEDIUM: settings/base.py:88 -- SECRET_KEY = "django-insecure-..."
|
|
258
|
+
MEDIUM: settings/base.py:92 -- DATABASE_URL with embedded password
|
|
259
|
+
|
|
260
|
+
Phase 2: CLASSIFY
|
|
261
|
+
CRITICAL: 2 (AWS IAM credentials -- full account access)
|
|
262
|
+
HIGH: 1 (.env.production in git -- 12 leaked values)
|
|
263
|
+
MEDIUM: 2 (Django secret key and database URL)
|
|
264
|
+
|
|
265
|
+
Phase 3: REMEDIATE
|
|
266
|
+
1. AWS credentials -> boto3 credential chain (env vars or IAM role)
|
|
267
|
+
2. Remove .env.production from git, add to .gitignore
|
|
268
|
+
3. Django SECRET_KEY -> os.environ["DJANGO_SECRET_KEY"]
|
|
269
|
+
4. DATABASE_URL -> os.environ["DATABASE_URL"]
|
|
270
|
+
Recommend: Switch to django-environ for all settings
|
|
271
|
+
Recommend: Use IAM roles instead of access keys for production
|
|
272
|
+
|
|
273
|
+
Phase 4: VALIDATE
|
|
274
|
+
Rescan: PASS
|
|
275
|
+
.gitignore: PASS
|
|
276
|
+
.env.example: PASS
|
|
277
|
+
Git history: CRITICAL (AWS keys and .env.production in history)
|
|
278
|
+
Result: FAIL -- rotation required before deployment, history rewrite recommended
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Gates
|
|
282
|
+
|
|
283
|
+
- **No CRITICAL findings may remain unaddressed.** Production credentials exposed in source code are blocking. Execution halts until the credential is rotated and the code is remediated.
|
|
284
|
+
- **No `.env` files with actual secrets committed to git.** A committed `.env` file containing real credentials is a blocking finding, even if the file is later gitignored.
|
|
285
|
+
- **No secrets in git history without rotation.** If a secret was previously committed, it must be rotated regardless of whether it was removed from the current tree.
|
|
286
|
+
- **No remediation without verification.** The `--fix` flag must be followed by a rescan to confirm all findings are resolved.
|
|
287
|
+
|
|
288
|
+
## Escalation
|
|
289
|
+
|
|
290
|
+
- **When a production credential is exposed in a public repository:** This is an emergency. Immediately recommend rotating the credential, then address code remediation. Do not wait for a PR review cycle -- rotation must happen within minutes.
|
|
291
|
+
- **When git history contains secrets and the repo is public:** Recommend making the repo private temporarily, rotating all exposed credentials, running BFG Repo-Cleaner, and force-pushing. Note that GitHub caches may retain the data -- contact GitHub support if needed.
|
|
292
|
+
- **When the team has no secret management infrastructure:** Recommend starting with CI/CD platform secrets (GitHub Secrets, GitLab CI variables) as a minimum viable approach. Design a migration path to a dedicated secret manager for later.
|
|
293
|
+
- **When false positive rate is high:** Adjust scan patterns for the project's domain. Add a `.harness/secret-scan-ignore` file with documented exceptions for known false positives (test fixtures, example values, hash constants).
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
name: harness-secrets
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Vault integration, credential rotation, and environment variable hygiene
|
|
4
|
+
cognitive_mode: meticulous-verifier
|
|
5
|
+
tier: 3
|
|
6
|
+
internal: false
|
|
7
|
+
keywords:
|
|
8
|
+
- secrets
|
|
9
|
+
- vault
|
|
10
|
+
- credentials
|
|
11
|
+
- env
|
|
12
|
+
- environment variables
|
|
13
|
+
- rotation
|
|
14
|
+
- HashiCorp
|
|
15
|
+
- AWS Secrets Manager
|
|
16
|
+
- dotenv
|
|
17
|
+
- encryption
|
|
18
|
+
- API keys
|
|
19
|
+
stack_signals:
|
|
20
|
+
- ".env*"
|
|
21
|
+
- "vault.hcl"
|
|
22
|
+
- "src/**/secrets/**"
|
|
23
|
+
- "src/**/config/**"
|
|
24
|
+
- ".sops.yaml"
|
|
25
|
+
- "secrets/"
|
|
26
|
+
- "credentials/"
|
|
27
|
+
triggers:
|
|
28
|
+
- manual
|
|
29
|
+
- on_pr
|
|
30
|
+
- on_commit
|
|
31
|
+
platforms:
|
|
32
|
+
- claude-code
|
|
33
|
+
- gemini-cli
|
|
34
|
+
tools:
|
|
35
|
+
- Bash
|
|
36
|
+
- Read
|
|
37
|
+
- Glob
|
|
38
|
+
- Grep
|
|
39
|
+
- emit_interaction
|
|
40
|
+
cli:
|
|
41
|
+
command: harness skill run harness-secrets
|
|
42
|
+
args:
|
|
43
|
+
- name: path
|
|
44
|
+
description: Project root path
|
|
45
|
+
required: false
|
|
46
|
+
- name: changed-only
|
|
47
|
+
description: Only scan git-changed files
|
|
48
|
+
type: boolean
|
|
49
|
+
required: false
|
|
50
|
+
- name: fix
|
|
51
|
+
description: Auto-remediate by extracting secrets to env vars
|
|
52
|
+
type: boolean
|
|
53
|
+
required: false
|
|
54
|
+
mcp:
|
|
55
|
+
tool: run_skill
|
|
56
|
+
input:
|
|
57
|
+
skill: harness-secrets
|
|
58
|
+
path: string
|
|
59
|
+
type: rigid
|
|
60
|
+
phases:
|
|
61
|
+
- name: scan
|
|
62
|
+
description: Detect secrets, credentials, and sensitive values in source code
|
|
63
|
+
required: true
|
|
64
|
+
- name: classify
|
|
65
|
+
description: Categorize findings by severity and secret type
|
|
66
|
+
required: true
|
|
67
|
+
- name: remediate
|
|
68
|
+
description: Recommend or apply secret extraction and rotation strategies
|
|
69
|
+
required: true
|
|
70
|
+
- name: validate
|
|
71
|
+
description: Verify secrets are properly externalized and gitignored
|
|
72
|
+
required: true
|
|
73
|
+
state:
|
|
74
|
+
persistent: false
|
|
75
|
+
files: []
|
|
76
|
+
depends_on: []
|