contextdevkit 1.8.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/CHANGELOG.md +592 -0
- package/LICENSE +21 -0
- package/README.md +401 -0
- package/docs/AGENT-PACKAGE-FORMAT.md +140 -0
- package/docs/ARCHITECTURE.md +258 -0
- package/docs/CHANGELOG.md +559 -0
- package/docs/CUSTOMIZING.md +211 -0
- package/docs/LEVELS.md +151 -0
- package/docs/ROADMAP.md +385 -0
- package/docs/SQUAD-PIPELINE-FORMAT.md +258 -0
- package/docs/SQUADS/agent-forge.md +65 -0
- package/docs/SQUADS/design-team.md +161 -0
- package/docs/token-economy-plan.md +135 -0
- package/install.mjs +273 -0
- package/instrucoes.md +274 -0
- package/package.json +46 -0
- package/templates/CLAUDE.md.tpl +133 -0
- package/templates/claude/agents/_TEMPLATE.md +52 -0
- package/templates/claude/agents/accessibility.md +36 -0
- package/templates/claude/agents/agent-architect.md +37 -0
- package/templates/claude/agents/architect.md +39 -0
- package/templates/claude/agents/code-reviewer.md +43 -0
- package/templates/claude/agents/code-security.md +59 -0
- package/templates/claude/agents/context-keeper.md +40 -0
- package/templates/claude/agents/devops.md +40 -0
- package/templates/claude/agents/eval-designer.md +40 -0
- package/templates/claude/agents/forge-orchestrator.md +42 -0
- package/templates/claude/agents/governance-officer.md +45 -0
- package/templates/claude/agents/growth.md +92 -0
- package/templates/claude/agents/infra-security.md +53 -0
- package/templates/claude/agents/landing-architect.md +154 -0
- package/templates/claude/agents/model-router.md +34 -0
- package/templates/claude/agents/packager.md +38 -0
- package/templates/claude/agents/privacy-lgpd.md +64 -0
- package/templates/claude/agents/product-owner.md +51 -0
- package/templates/claude/agents/prompt-engineer.md +33 -0
- package/templates/claude/agents/qa-e2e.md +52 -0
- package/templates/claude/agents/qa-fuzzer.md +24 -0
- package/templates/claude/agents/qa-integration.md +21 -0
- package/templates/claude/agents/qa-orchestrator.md +40 -0
- package/templates/claude/agents/qa-perf.md +40 -0
- package/templates/claude/agents/qa-unit.md +39 -0
- package/templates/claude/agents/rag-designer.md +54 -0
- package/templates/claude/agents/retention.md +85 -0
- package/templates/claude/agents/security.md +48 -0
- package/templates/claude/agents/seo-specialist.md +106 -0
- package/templates/claude/agents/test-engineer.md +48 -0
- package/templates/claude/agents/tool-designer.md +32 -0
- package/templates/claude/agents/ui-designer.md +37 -0
- package/templates/claude/agents/ux-designer.md +38 -0
- package/templates/claude/commands/README.md +95 -0
- package/templates/claude/commands/advise.md +80 -0
- package/templates/claude/commands/audit/analyze-code-ia-practices.md +75 -0
- package/templates/claude/commands/audit/audit.md +35 -0
- package/templates/claude/commands/audit/contract-check.md +21 -0
- package/templates/claude/commands/audit/deep-analysis.md +48 -0
- package/templates/claude/commands/audit/deps-audit.md +49 -0
- package/templates/claude/commands/audit/security-setup.md +35 -0
- package/templates/claude/commands/audit/seo-audit.md +63 -0
- package/templates/claude/commands/audit/tech-debt-sweep.md +35 -0
- package/templates/claude/commands/bug-hunt.md +42 -0
- package/templates/claude/commands/claude-md.md +36 -0
- package/templates/claude/commands/close-version.md +25 -0
- package/templates/claude/commands/context-refresh.md +19 -0
- package/templates/claude/commands/context-stats.md +15 -0
- package/templates/claude/commands/dashboard.md +66 -0
- package/templates/claude/commands/distill-apply.md +19 -0
- package/templates/claude/commands/distill-sessions.md +26 -0
- package/templates/claude/commands/fleet.md +47 -0
- package/templates/claude/commands/forge/forge-audit.md +16 -0
- package/templates/claude/commands/forge/forge-budget.md +16 -0
- package/templates/claude/commands/forge/forge-deprecate.md +16 -0
- package/templates/claude/commands/forge/forge-doctor.md +17 -0
- package/templates/claude/commands/forge/forge-eval.md +16 -0
- package/templates/claude/commands/forge/forge-fallback-test.md +17 -0
- package/templates/claude/commands/forge/forge-killswitch.md +17 -0
- package/templates/claude/commands/forge/forge-list.md +17 -0
- package/templates/claude/commands/forge/forge-new.md +41 -0
- package/templates/claude/commands/forge/forge-policy.md +16 -0
- package/templates/claude/commands/forge/forge-redteam.md +17 -0
- package/templates/claude/commands/forge/forge-refresh-matrix.md +20 -0
- package/templates/claude/commands/forge/forge-route.md +17 -0
- package/templates/claude/commands/forge/forge-show.md +16 -0
- package/templates/claude/commands/landing-page.md +71 -0
- package/templates/claude/commands/log-session.md +59 -0
- package/templates/claude/commands/media-gen.md +93 -0
- package/templates/claude/commands/new-adr.md +30 -0
- package/templates/claude/commands/pipeline/dev-start.md +64 -0
- package/templates/claude/commands/pipeline/pipeline.md +36 -0
- package/templates/claude/commands/pipeline/resume.md +70 -0
- package/templates/claude/commands/pipeline/retro.md +34 -0
- package/templates/claude/commands/pipeline/runs.md +63 -0
- package/templates/claude/commands/pipeline/ship.md +54 -0
- package/templates/claude/commands/pipeline/workflow.md +85 -0
- package/templates/claude/commands/playbook.md +27 -0
- package/templates/claude/commands/predictions-review.md +28 -0
- package/templates/claude/commands/qa/qa-signoff.md +24 -0
- package/templates/claude/commands/qa/scaffold-tests.md +27 -0
- package/templates/claude/commands/qa/test-plan.md +26 -0
- package/templates/claude/commands/qa/visual-test.md +42 -0
- package/templates/claude/commands/roadmap.md +48 -0
- package/templates/claude/commands/setup/aidevtool-from0.md +104 -0
- package/templates/claude/commands/setup/context-config.md +25 -0
- package/templates/claude/commands/setup/context-doctor.md +21 -0
- package/templates/claude/commands/setup/context-level.md +17 -0
- package/templates/claude/commands/setup/setupcontextdevkit.md +121 -0
- package/templates/claude/commands/simulate-impact.md +32 -0
- package/templates/claude/commands/squad.md +44 -0
- package/templates/claude/commands/state.md +21 -0
- package/templates/claude/commands/token-report.md +29 -0
- package/templates/claude/commands/tune-agents.md +35 -0
- package/templates/claude/commands/vcs/claim.md +18 -0
- package/templates/claude/commands/vcs/git.md +83 -0
- package/templates/claude/commands/vcs/release.md +15 -0
- package/templates/claude/commands/vcs/worktree-new.md +18 -0
- package/templates/claude/commands/watch.md +47 -0
- package/templates/contextkit/.env.example +36 -0
- package/templates/contextkit/CLAUDE.child.md.tpl +38 -0
- package/templates/contextkit/README.md +74 -0
- package/templates/contextkit/behaviors-examples.md +183 -0
- package/templates/contextkit/behaviors.md +116 -0
- package/templates/contextkit/best-practices.md +323 -0
- package/templates/contextkit/config.json +66 -0
- package/templates/contextkit/detectors/README.md +45 -0
- package/templates/contextkit/detectors/example-detector.mjs.example +25 -0
- package/templates/contextkit/instrucoes.md +114 -0
- package/templates/contextkit/memory/GLOSSARY.md +13 -0
- package/templates/contextkit/memory/SESSIONS.md +9 -0
- package/templates/contextkit/memory/WORKSPACE.md +7 -0
- package/templates/contextkit/memory/business-rules/_TEMPLATE.md +33 -0
- package/templates/contextkit/memory/decisions/0000-record-architecture-decisions.md +34 -0
- package/templates/contextkit/memory/decisions/_TEMPLATE.md +25 -0
- package/templates/contextkit/memory/predictions/.gitkeep +0 -0
- package/templates/contextkit/memory/roadmap.md +28 -0
- package/templates/contextkit/memory/sessions/.gitkeep +0 -0
- package/templates/contextkit/memory/workflows/.gitkeep +0 -0
- package/templates/contextkit/pipeline/backlog/.gitkeep +0 -0
- package/templates/contextkit/pipeline/conclusion/.gitkeep +0 -0
- package/templates/contextkit/pipeline/devpipeline.md +9 -0
- package/templates/contextkit/pipeline/testing/.gitkeep +0 -0
- package/templates/contextkit/pipeline/working/.gitkeep +0 -0
- package/templates/contextkit/review-protocol.md +214 -0
- package/templates/contextkit/runtime/config/defaults.mjs +215 -0
- package/templates/contextkit/runtime/config/levels.mjs +42 -0
- package/templates/contextkit/runtime/config/load.mjs +105 -0
- package/templates/contextkit/runtime/config/paths.mjs +92 -0
- package/templates/contextkit/runtime/config/presets.mjs +47 -0
- package/templates/contextkit/runtime/config/schema.mjs +88 -0
- package/templates/contextkit/runtime/config/settings-compose.mjs +55 -0
- package/templates/contextkit/runtime/git-hooks/commit-msg.mjs +55 -0
- package/templates/contextkit/runtime/git-hooks/pre-commit.mjs +47 -0
- package/templates/contextkit/runtime/git-hooks/pre-push.mjs +102 -0
- package/templates/contextkit/runtime/hooks/boot-context-readers.mjs +111 -0
- package/templates/contextkit/runtime/hooks/boot-signals.mjs +135 -0
- package/templates/contextkit/runtime/hooks/check-registration.mjs +228 -0
- package/templates/contextkit/runtime/hooks/concurrency-guard.mjs +110 -0
- package/templates/contextkit/runtime/hooks/ledger.mjs +231 -0
- package/templates/contextkit/runtime/hooks/md-extract.mjs +65 -0
- package/templates/contextkit/runtime/hooks/path-classification.mjs +62 -0
- package/templates/contextkit/runtime/hooks/safe-io.mjs +84 -0
- package/templates/contextkit/runtime/hooks/session-digest-core.mjs +85 -0
- package/templates/contextkit/runtime/hooks/session-start.mjs +248 -0
- package/templates/contextkit/runtime/hooks/simulate-gate.mjs +108 -0
- package/templates/contextkit/runtime/hooks/track-edits.mjs +154 -0
- package/templates/contextkit/runtime/providers/media/_adapter.mjs +120 -0
- package/templates/contextkit/runtime/providers/media/nano-banana.mjs +110 -0
- package/templates/contextkit/runtime/providers/media/veo.mjs +162 -0
- package/templates/contextkit/runtime/providers/review/_adapter.mjs +71 -0
- package/templates/contextkit/runtime/providers/review/detect.mjs +115 -0
- package/templates/contextkit/runtime/providers/review/gh.mjs +103 -0
- package/templates/contextkit/runtime/state/state-io.mjs +172 -0
- package/templates/contextkit/runtime/statusline.mjs +51 -0
- package/templates/contextkit/squads/README.md +115 -0
- package/templates/contextkit/squads/_BRIEFING.md.tpl +27 -0
- package/templates/contextkit/squads/agent-forge/README.md +69 -0
- package/templates/contextkit/squads/agent-forge/ROADMAP.md +108 -0
- package/templates/contextkit/squads/agent-forge/best-practices.md +89 -0
- package/templates/contextkit/squads/agent-forge/cli/forge-admin.mjs +132 -0
- package/templates/contextkit/squads/agent-forge/cli/forge-eval-cli.mjs +163 -0
- package/templates/contextkit/squads/agent-forge/cli/forge-new.mjs +97 -0
- package/templates/contextkit/squads/agent-forge/cli/forge-ops.mjs +177 -0
- package/templates/contextkit/squads/agent-forge/lib/architect.mjs +112 -0
- package/templates/contextkit/squads/agent-forge/lib/eval-designer.mjs +133 -0
- package/templates/contextkit/squads/agent-forge/lib/eval-runner.mjs +167 -0
- package/templates/contextkit/squads/agent-forge/lib/governance-officer.mjs +178 -0
- package/templates/contextkit/squads/agent-forge/lib/package-ops.mjs +101 -0
- package/templates/contextkit/squads/agent-forge/lib/packager.mjs +219 -0
- package/templates/contextkit/squads/agent-forge/lib/prompt-gen.mjs +122 -0
- package/templates/contextkit/squads/agent-forge/lib/rag-designer.mjs +102 -0
- package/templates/contextkit/squads/agent-forge/lib/router.mjs +165 -0
- package/templates/contextkit/squads/agent-forge/lib/tool-gen.mjs +113 -0
- package/templates/contextkit/squads/agent-forge/lib/yaml.mjs +47 -0
- package/templates/contextkit/squads/agent-forge/pipeline.yaml +65 -0
- package/templates/contextkit/squads/agent-forge/router/capability-matrix.json +112 -0
- package/templates/contextkit/squads/agent-forge/router/decision-rules.json +120 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/.agentforgerc +12 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/CHANGELOG.md +13 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/LICENSE +5 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/README.md +39 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/adapters/go/README.md +10 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/adapters/go/agent.go +14 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/adapters/go/go.mod +3 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/adapters/node/README.md +11 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/adapters/node/index.js +53 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/adapters/node/package.json +9 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/adapters/python/README.md +10 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/adapters/python/agent.py +16 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/adapters/python/pyproject.toml +10 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/evals/golden.jsonl +1 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/evals/red-team.jsonl +3 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/evals/rubric.yaml +14 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/evals/run-eval.md +17 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/evals/thresholds.yaml +18 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/examples/basic.node.md +17 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/examples/with-fallback.node.md +24 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/examples/with-rag.python.md +20 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/governance/audit.schema.json +23 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/governance/compliance.policy.yaml +43 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/governance/cost.policy.yaml +36 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/governance/fallback-chain.yaml +16 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/governance/quality.policy.yaml +43 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/manifest.yaml +91 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/prompts/system.anthropic.md +19 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/prompts/system.canonical.md +25 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/prompts/system.deepseek.md +21 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/prompts/system.google.md +19 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/prompts/system.ollama.md +21 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/prompts/system.openai.md +20 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/rag/config.yaml +17 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/rag/index/.gitkeep +3 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/rag/ingestion/chunker.config.yaml +6 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/rag/ingestion/sources.yaml +8 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/rag/retrieval/query-template.md +16 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/rag/retrieval/rerank.config.yaml +6 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/tools/adapters/anthropic.tools.json +11 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/tools/adapters/deepseek.tools.json +14 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/tools/adapters/google.tools.json +11 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/tools/adapters/ollama.tools.json +14 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/tools/adapters/openai.tools.json +14 -0
- package/templates/contextkit/squads/agent-forge/templates/agent-package/tools/schemas.canonical.json +25 -0
- package/templates/contextkit/starters/tanstack/README.md +86 -0
- package/templates/contextkit/starters/tanstack/index.html +12 -0
- package/templates/contextkit/starters/tanstack/package.json +25 -0
- package/templates/contextkit/starters/tanstack/src/main.tsx +40 -0
- package/templates/contextkit/starters/tanstack/src/router.tsx +12 -0
- package/templates/contextkit/starters/tanstack/src/routes/__root.tsx +10 -0
- package/templates/contextkit/starters/tanstack/src/routes/index.tsx +17 -0
- package/templates/contextkit/starters/tanstack/tsconfig.json +19 -0
- package/templates/contextkit/starters/tanstack/vite.config.ts +10 -0
- package/templates/contextkit/tools/scripts/adr-digest-core.mjs +42 -0
- package/templates/contextkit/tools/scripts/adr-digest.mjs +78 -0
- package/templates/contextkit/tools/scripts/agent-tuning.mjs +74 -0
- package/templates/contextkit/tools/scripts/aiso-audit.mjs +174 -0
- package/templates/contextkit/tools/scripts/audit-shared.mjs +129 -0
- package/templates/contextkit/tools/scripts/claim.mjs +133 -0
- package/templates/contextkit/tools/scripts/claude-md.mjs +123 -0
- package/templates/contextkit/tools/scripts/clean-drive.mjs +78 -0
- package/templates/contextkit/tools/scripts/context-config.mjs +111 -0
- package/templates/contextkit/tools/scripts/context-level.mjs +98 -0
- package/templates/contextkit/tools/scripts/context-pack.mjs +120 -0
- package/templates/contextkit/tools/scripts/contract-scan.mjs +186 -0
- package/templates/contextkit/tools/scripts/dashboard-data.mjs +198 -0
- package/templates/contextkit/tools/scripts/dashboard-html.mjs +215 -0
- package/templates/contextkit/tools/scripts/dashboard-server.mjs +129 -0
- package/templates/contextkit/tools/scripts/dashboard.mjs +107 -0
- package/templates/contextkit/tools/scripts/deep-analysis.mjs +62 -0
- package/templates/contextkit/tools/scripts/deps-audit.mjs +201 -0
- package/templates/contextkit/tools/scripts/detect-stack.mjs +164 -0
- package/templates/contextkit/tools/scripts/distill-detect.mjs +90 -0
- package/templates/contextkit/tools/scripts/doctor.mjs +165 -0
- package/templates/contextkit/tools/scripts/fleet.mjs +170 -0
- package/templates/contextkit/tools/scripts/generate-context.mjs +142 -0
- package/templates/contextkit/tools/scripts/gh-alerts.mjs +117 -0
- package/templates/contextkit/tools/scripts/git.mjs +97 -0
- package/templates/contextkit/tools/scripts/home.mjs +106 -0
- package/templates/contextkit/tools/scripts/mark-simulation.mjs +78 -0
- package/templates/contextkit/tools/scripts/media-gen.mjs +154 -0
- package/templates/contextkit/tools/scripts/pipeline-board.mjs +74 -0
- package/templates/contextkit/tools/scripts/pipeline-prioritize.mjs +68 -0
- package/templates/contextkit/tools/scripts/pipeline-session.mjs +99 -0
- package/templates/contextkit/tools/scripts/pipeline-validate.mjs +136 -0
- package/templates/contextkit/tools/scripts/pipeline.mjs +302 -0
- package/templates/contextkit/tools/scripts/playbook.mjs +123 -0
- package/templates/contextkit/tools/scripts/predictions-review.mjs +113 -0
- package/templates/contextkit/tools/scripts/release.mjs +60 -0
- package/templates/contextkit/tools/scripts/resume.mjs +114 -0
- package/templates/contextkit/tools/scripts/roadmap.mjs +86 -0
- package/templates/contextkit/tools/scripts/runs.mjs +116 -0
- package/templates/contextkit/tools/scripts/seo-audit.mjs +150 -0
- package/templates/contextkit/tools/scripts/session-digest.mjs +89 -0
- package/templates/contextkit/tools/scripts/session-reindex.mjs +91 -0
- package/templates/contextkit/tools/scripts/setup-complete.mjs +69 -0
- package/templates/contextkit/tools/scripts/squad-meta.mjs +23 -0
- package/templates/contextkit/tools/scripts/squad-pipeline-condition.mjs +192 -0
- package/templates/contextkit/tools/scripts/squad-pipeline.mjs +301 -0
- package/templates/contextkit/tools/scripts/squad.mjs +80 -0
- package/templates/contextkit/tools/scripts/stats.mjs +138 -0
- package/templates/contextkit/tools/scripts/sync-check.mjs +235 -0
- package/templates/contextkit/tools/scripts/tech-debt-detectors.mjs +76 -0
- package/templates/contextkit/tools/scripts/tech-debt-scan.mjs +164 -0
- package/templates/contextkit/tools/scripts/token-report.mjs +153 -0
- package/templates/contextkit/tools/scripts/visual-test.mjs +132 -0
- package/templates/contextkit/tools/scripts/watch.mjs +106 -0
- package/templates/contextkit/tools/scripts/workflow.mjs +136 -0
- package/templates/contextkit/tools/scripts/workspace-sync.mjs +220 -0
- package/templates/contextkit/tools/scripts/worktree-new.mjs +50 -0
- package/templates/contextkit/workflows/L1-static-loading.md +59 -0
- package/templates/contextkit/workflows/L2-session-ledger.md +86 -0
- package/templates/contextkit/workflows/L3-multi-session.md +80 -0
- package/templates/contextkit/workflows/L4-squads.md +68 -0
- package/templates/contextkit/workflows/L5-proactive.md +88 -0
- package/templates/contextkit/workflows/README.md +47 -0
- package/templates/contextkit/workflows/playbooks/distillation-cycle.md +74 -0
- package/templates/contextkit/workflows/playbooks/landing-page.md +197 -0
- package/templates/contextkit/workflows/playbooks/security-batch.md +68 -0
- package/templates/contextkit/workflows/playbooks/seo-aiso.md +288 -0
- package/templates/contextkit/workflows/playbooks/simulate-impact.md +83 -0
- package/templates/contextkit/workflows/playbooks/tanstack.md +164 -0
- package/templates/contextkit/workflows/playbooks/tech-debt-sweep.md +77 -0
- package/templates/docs/CHANGELOG.md.tpl +11 -0
- package/templates/gitattributes +3 -0
- package/templates/github/ISSUE_TEMPLATE/bug_report.md +30 -0
- package/templates/github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/templates/github/PULL_REQUEST_TEMPLATE.md +27 -0
- package/templates/github/dependabot.yml +27 -0
- package/templates/github/workflows/quality.yml +36 -0
- package/templates/github/workflows/security.yml +54 -0
- package/tools/install/cli.mjs +62 -0
- package/tools/install/fs.mjs +56 -0
- package/tools/install/git.mjs +114 -0
- package/tools/install/project.mjs +51 -0
- package/tools/install/uninstall.mjs +54 -0
- package/tools/integration-test-compozy.mjs +88 -0
- package/tools/integration-test-guards.mjs +269 -0
- package/tools/integration-test-tooling-agent-forge.mjs +189 -0
- package/tools/integration-test-tooling-pipeline.mjs +164 -0
- package/tools/integration-test-tooling.mjs +172 -0
- package/tools/integration-test.mjs +228 -0
- package/tools/it-helpers.mjs +60 -0
- package/tools/selfcheck-agent-forge-ops.mjs +107 -0
- package/tools/selfcheck-agent-forge.mjs +304 -0
- package/tools/selfcheck-config.mjs +80 -0
- package/tools/selfcheck-runtime.mjs +135 -0
- package/tools/selfcheck-source.mjs +326 -0
- package/tools/selfcheck.mjs +268 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# L4 — Squads of specialized agents
|
|
2
|
+
|
|
3
|
+
> Level 4. Solves: **"How do we stop every change from falling on a single
|
|
4
|
+
> generalist Claude whose monolithic context dilutes each domain's posture?"**
|
|
5
|
+
|
|
6
|
+
## The problem
|
|
7
|
+
|
|
8
|
+
L1–L3 give one agent context and coordination. But a monolithic posture:
|
|
9
|
+
- accumulates rules from very different domains in one `CLAUDE.md`;
|
|
10
|
+
- applies the same mindset to "implement a feature" and "audit a PR against the
|
|
11
|
+
constitution" — different work;
|
|
12
|
+
- inflates the context loaded for any task.
|
|
13
|
+
|
|
14
|
+
## The solution: squads of specialized agents
|
|
15
|
+
|
|
16
|
+
Agents are grouped into **squads** under `contextkit/squads/`, declared by a manifest
|
|
17
|
+
([`contextkit/squads/README.md`](../squads/README.md)). The base squad is `devteam`
|
|
18
|
+
(architect, code-reviewer, context-keeper, test-engineer, …); higher levels add
|
|
19
|
+
`qa-team`, `security-team`, `design-team`, and more. Each agent is a stack-agnostic
|
|
20
|
+
**archetype** you specialize to your project.
|
|
21
|
+
|
|
22
|
+
## Two tiers — lean executable + rich briefing
|
|
23
|
+
|
|
24
|
+
| Tier | Path | Consumed by |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| Executable frontmatter (auto-load) | `.claude/agents/<name>.md` | Claude Code (the orchestrator) |
|
|
27
|
+
| Rich briefing (reference) | `contextkit/squads/<team>/<name>.md` | a human reading; the agent when consulted |
|
|
28
|
+
|
|
29
|
+
Keeping the briefing out of the agent file keeps the frontmatter compact — fast to
|
|
30
|
+
load, cheap to carry — while the depth stays one hop away. Scaffold a briefing with
|
|
31
|
+
`/squad brief <agent>`; see coverage with `/squad list`.
|
|
32
|
+
|
|
33
|
+
## How squads are invoked
|
|
34
|
+
|
|
35
|
+
**Auto-dispatched** — when a task clearly falls in an agent's domain, the main Claude
|
|
36
|
+
delegates via `Agent(subagent_type="<name>")`. The `description` in the agent's
|
|
37
|
+
frontmatter drives selection. *Example: "add input validation to this route" → the
|
|
38
|
+
backend/service agent.*
|
|
39
|
+
|
|
40
|
+
**Manual** — in orchestration, or when a session needs a specific posture:
|
|
41
|
+
`Agent(subagent_type="code-reviewer", prompt="review this branch against the constitution")`.
|
|
42
|
+
|
|
43
|
+
**Delegation between agents** — each briefing has a "delegate to" section. An
|
|
44
|
+
implementer hands off to the data/schema specialist for a migration; `code-reviewer`
|
|
45
|
+
dispatches the right specialist to fix what its report found.
|
|
46
|
+
|
|
47
|
+
## What each agent carries
|
|
48
|
+
|
|
49
|
+
1. The slice of the **constitution** that applies to its domain.
|
|
50
|
+
2. The **stack points** (libs/configs) it touches — filled per project.
|
|
51
|
+
3. Domain-specific **anti-patterns** (bad vs good examples) in the briefing.
|
|
52
|
+
4. **Delegation triggers** — when to hand off.
|
|
53
|
+
|
|
54
|
+
## When to update agents
|
|
55
|
+
|
|
56
|
+
- Constitution changes → revisit `code-reviewer`'s checklist and the "forbidden"
|
|
57
|
+
sections of the others.
|
|
58
|
+
- New library adopted → add it to the relevant agent's "stack you touch".
|
|
59
|
+
- Anti-pattern discovered → add it to the rich briefing with an example.
|
|
60
|
+
- Squad reorg (merge/split agents, new squad) → an ADR + update the manifest and the
|
|
61
|
+
delegation tables. Use `/squad` to show, route, or grow the roster.
|
|
62
|
+
|
|
63
|
+
## Quality criterion
|
|
64
|
+
|
|
65
|
+
After ~20 sessions using the squad, review: were delegations correct? did an agent
|
|
66
|
+
need to read another's briefing to continue? was any agent never invoked (a fuzzy or
|
|
67
|
+
redundant domain)? did any domain end up ownerless (a gap)? Feed the answers back via
|
|
68
|
+
`/retro` (L6).
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# L5 — Proactive engineering layer
|
|
2
|
+
|
|
3
|
+
> Level 5. Solves: **"How do we turn 'architecture before syntax' from a posture
|
|
4
|
+
> into executable mechanism — anticipating blast radius and instrumenting code
|
|
5
|
+
> health as versioned artifacts?"**
|
|
6
|
+
|
|
7
|
+
## The problem
|
|
8
|
+
|
|
9
|
+
L1–L4 give context, drift detection, multi-session coordination, and a squad. But
|
|
10
|
+
three frictions remain:
|
|
11
|
+
1. **High-blast-radius changes land silently** — no pre-flight analysis.
|
|
12
|
+
2. **The constitution is audited manually and the result vanishes in the chat** — no
|
|
13
|
+
persistent artifact, so debt grows unseen.
|
|
14
|
+
3. **The system generates memory faster than it distills it** — ledgers and session
|
|
15
|
+
files accumulate; the boot payload inflates.
|
|
16
|
+
|
|
17
|
+
## Components
|
|
18
|
+
|
|
19
|
+
### 1. `/simulate-impact <objective>` — parallel fan-out to the squad
|
|
20
|
+
|
|
21
|
+
An architectural pre-flight before cross-domain features. It fans `Agent()` out to
|
|
22
|
+
the squad in parallel and aggregates a **Blast Radius Report** shown before any edit.
|
|
23
|
+
It persists a file in `contextkit/memory/predictions/` and marks the ledger via
|
|
24
|
+
`mark-simulation.mjs`. Playbook: [`playbooks/simulate-impact.md`](playbooks/simulate-impact.md).
|
|
25
|
+
|
|
26
|
+
### 2. `/tech-debt-sweep [profile]` — audit as a versioned artifact
|
|
27
|
+
|
|
28
|
+
Runs deterministic detectors against the constitution (file-size budget, "And/Or"
|
|
29
|
+
naming, orphan JSDoc, framework state loops) and writes a board under
|
|
30
|
+
`contextkit/memory/`. Profiles are config-driven. CLI: `node
|
|
31
|
+
contextkit/tools/scripts/tech-debt-scan.mjs`. Playbook:
|
|
32
|
+
[`playbooks/tech-debt-sweep.md`](playbooks/tech-debt-sweep.md).
|
|
33
|
+
|
|
34
|
+
### 3. Contract-drift gate — shift-left on breaking changes
|
|
35
|
+
|
|
36
|
+
`/contract-check` (`contract-scan.mjs`) compares the public surface declared by
|
|
37
|
+
`contractGlobs` (config) between HEAD and the baseline, flagging removed/renamed
|
|
38
|
+
exports without a `BREAKING CHANGE:` footer. Wire it as a CI job to fail the build.
|
|
39
|
+
|
|
40
|
+
### 4. PreToolUse gate + staged auto-distill
|
|
41
|
+
|
|
42
|
+
- **PreToolUse gate** (`contextkit/runtime/hooks/simulate-gate.mjs`) blocks
|
|
43
|
+
`Edit|Write|MultiEdit` on `highRiskPaths` (config) when this session has no
|
|
44
|
+
`/simulate-impact` recorded in the ledger. Auditable bypass: a simulation marked
|
|
45
|
+
`"BYPASS: <reason>"`.
|
|
46
|
+
- **Staged distill** — Stage 0: `check-registration.mjs` archives old registered
|
|
47
|
+
ledgers (zero risk). Stage 1: `session-start.mjs` observes patterns over the last
|
|
48
|
+
N sessions and injects an "observed patterns" boot section **without writing to
|
|
49
|
+
CLAUDE.md**. Stage 2: `/distill-sessions` proposes a CLAUDE.md diff
|
|
50
|
+
(`.distillation-proposal.md`); `/distill-apply` applies it and records an ADR.
|
|
51
|
+
Playbook: [`playbooks/distillation-cycle.md`](playbooks/distillation-cycle.md).
|
|
52
|
+
|
|
53
|
+
### 5. `contextkit/config.json` + `/context-config` — cross-cutting configuration
|
|
54
|
+
|
|
55
|
+
Replaces hardcoded allowlists, cadences, and L5 parameters. Validated by an optional
|
|
56
|
+
zod schema (dynamic import only — the loader stays zero-dep). Inspect/edit with
|
|
57
|
+
`/context-config show|set`.
|
|
58
|
+
|
|
59
|
+
## The golden rule
|
|
60
|
+
|
|
61
|
+
> For any change touching a path in `highRiskPaths`, editing without a
|
|
62
|
+
> `/simulate-impact` recorded in this session's ledger is **forbidden** — not by
|
|
63
|
+
> convention, but by the PreToolUse gate that enforces it. Bypass requires a
|
|
64
|
+
> documented, deliberate act.
|
|
65
|
+
|
|
66
|
+
## When L5 does NOT apply
|
|
67
|
+
|
|
68
|
+
- **Bug fixes** — use `/bug-hunt`; there are no feature semantics to simulate.
|
|
69
|
+
- **Refactor with scope locked by `/dev-start`** — the scope is the predictor.
|
|
70
|
+
- **String/i18n/comment/internal rename** — the sweep and contract gate cover what
|
|
71
|
+
matters; `/simulate-impact` explicitly declines.
|
|
72
|
+
|
|
73
|
+
## How L5 interacts with L1–L4
|
|
74
|
+
|
|
75
|
+
| Level | Interaction |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| L1 | Root `CLAUDE.md` lists the L5 commands. |
|
|
78
|
+
| L2 | L5 extends the ledger schema with `simulations[]`; the PreToolUse gate reads what L2 writes. |
|
|
79
|
+
| L3 | Predictions and the debt board are versioned, so they survive worktrees and parallel sessions. |
|
|
80
|
+
| L4 | `/simulate-impact` consumes the squad **in parallel** — the first feature to fan out, multiplying the ROI of specialization. |
|
|
81
|
+
|
|
82
|
+
## Calibration over time
|
|
83
|
+
|
|
84
|
+
`/simulate-impact` predictions get a "predicted vs actual" appendix from
|
|
85
|
+
`/predictions-review` (also run automatically by `/log-session`), which fills each
|
|
86
|
+
prediction's *Actual* section from the ledger; recurring misses refine the command's
|
|
87
|
+
prompts (or become an ADR). Sequential diffs of the debt board show the trend. After
|
|
88
|
+
enough cycles, feed the patterns into `/retro` (L6).
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# contextkit/workflows — the levels (L1–L6) + playbooks
|
|
2
|
+
|
|
3
|
+
ContextDevKit's context system operates in **levels**. Each one solves a distinct
|
|
4
|
+
problem of humans + Claude sharing one codebase across many sessions. These docs
|
|
5
|
+
are the *narrative* layer — the **why** and **how it fits together** — behind the
|
|
6
|
+
executable hooks (`contextkit/runtime/hooks/`), slash commands (`.claude/commands/`),
|
|
7
|
+
and config (`contextkit/config.json`).
|
|
8
|
+
|
|
9
|
+
> These are reference docs; they never run. Behaviour lives in the hooks and
|
|
10
|
+
> scripts — this folder explains the design so a human (or Claude) can reason about
|
|
11
|
+
> it. Keep a doc in sync **in the same change** that alters its mechanism.
|
|
12
|
+
|
|
13
|
+
## The levels
|
|
14
|
+
|
|
15
|
+
| Level | Problem it solves | Doc |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| **L1** | Loading the essentials at boot without the user re-explaining. | [`L1-static-loading.md`](L1-static-loading.md) |
|
|
18
|
+
| **L2** | Detecting that a session touched important files but was never logged. | [`L2-session-ledger.md`](L2-session-ledger.md) |
|
|
19
|
+
| **L3** | Parallel sessions (one dev in many chats, or many devs) without state corruption. | [`L3-multi-session.md`](L3-multi-session.md) |
|
|
20
|
+
| **L4** | Domain delegation via a squad of specialized sub-agents. | [`L4-squads.md`](L4-squads.md) |
|
|
21
|
+
| **L5** | Turning "architecture before syntax" into executable gates (impact, debt, contracts). | [`L5-proactive.md`](L5-proactive.md) |
|
|
22
|
+
| **L6** | Insight, autonomy, and a learning loop on top of the L5 gates. | *capability tier — see below* |
|
|
23
|
+
|
|
24
|
+
**L6 adds no new hook** — same wiring as L5. It's a capability tier: insight
|
|
25
|
+
(`/context-stats`), autonomy (`/ship`), and a learning loop (`/retro` +
|
|
26
|
+
`/distill-sessions`). See [`docs/ROADMAP.md`](../../docs/ROADMAP.md) for the rationale.
|
|
27
|
+
|
|
28
|
+
## Playbooks
|
|
29
|
+
|
|
30
|
+
Files in [`playbooks/`](playbooks/) describe **reusable working procedures** Claude
|
|
31
|
+
follows during a session. Each is the detailed *why / how to read / anti-patterns*
|
|
32
|
+
behind a slash command — the file in `.claude/commands/` is the operational spec;
|
|
33
|
+
the playbook is the judgment around it.
|
|
34
|
+
|
|
35
|
+
| Playbook | Slash command(s) | What it governs |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| [`tech-debt-sweep.md`](playbooks/tech-debt-sweep.md) | `/tech-debt-sweep` | Reading the deterministic debt scan; resisting "fix it all". |
|
|
38
|
+
| [`simulate-impact.md`](playbooks/simulate-impact.md) | `/simulate-impact` | Pre-flight blast-radius analysis before high-risk edits. |
|
|
39
|
+
| [`distillation-cycle.md`](playbooks/distillation-cycle.md) | `/distill-sessions` + `/distill-apply` | Turning observed patterns into governed CLAUDE.md rules. |
|
|
40
|
+
| [`security-batch.md`](playbooks/security-batch.md) | `/deep-analysis` + `/deps-audit` | The recurring security sweep and how to triage it. |
|
|
41
|
+
|
|
42
|
+
## Maintenance
|
|
43
|
+
|
|
44
|
+
- Keep each doc **lean** and under the constitution's file-size budget (280 lines).
|
|
45
|
+
- These are stack-agnostic on purpose. Project-specific detail belongs in a scoped
|
|
46
|
+
`CLAUDE.md` or an ADR, not here.
|
|
47
|
+
- A stale workflow doc is worse than none — update it when its mechanism changes.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Playbook — Distillation cycle (L5 Stage 2)
|
|
2
|
+
|
|
3
|
+
> Operational: `.claude/commands/{distill-sessions,distill-apply}.md` + the Stage 2
|
|
4
|
+
> nudge in `check-registration.mjs`. This page is the **end-to-end flow**,
|
|
5
|
+
> **anti-patterns**, and **calibration**.
|
|
6
|
+
|
|
7
|
+
## The cycle in one sentence
|
|
8
|
+
|
|
9
|
+
> Stage 1 observes silently. Stage 2 proposes (`/distill-sessions`) and applies with
|
|
10
|
+
> human approval (`/distill-apply`). Each applied cycle becomes an ADR.
|
|
11
|
+
|
|
12
|
+
## Prerequisites before the first Stage 2
|
|
13
|
+
|
|
14
|
+
Do **not** run `/distill-sessions` before:
|
|
15
|
+
- several weeks of Stage 1 active;
|
|
16
|
+
- enough registered sessions to have signal;
|
|
17
|
+
- the boot context consistently showing the "observed patterns" section with real
|
|
18
|
+
data (≥ 2 entries in at least one category).
|
|
19
|
+
|
|
20
|
+
Earlier than that, Stage 2 produces speculative rules — and a bad rule applied via
|
|
21
|
+
ADR is costlier to remove than to avoid.
|
|
22
|
+
|
|
23
|
+
## End-to-end flow
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
[soak] → Stop hook counts registered sessions ≥ proposeAfterSessions → nudge suggests /distill-sessions
|
|
27
|
+
USER runs /distill-sessions
|
|
28
|
+
→ observe patterns · read 5–10 session excerpts · delegate the proposal to context-keeper
|
|
29
|
+
→ write .distillation-proposal.md (gitignored) · show the user
|
|
30
|
+
USER reviews (edits / removes rules)
|
|
31
|
+
USER runs /distill-apply (or deletes the proposal)
|
|
32
|
+
→ create ADR "Distillation cycle X" · update the ADR index · apply the CLAUDE.md diff
|
|
33
|
+
→ clean up the proposal · show git diff --stat
|
|
34
|
+
USER commits
|
|
35
|
+
[next cycle gated by another soak]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## What makes a good distilled rule
|
|
39
|
+
|
|
40
|
+
- **Frequency** — ≥ 3 sessions mention the same pattern.
|
|
41
|
+
- **Concreteness** — fits in 1–3 lines in CLAUDE.md.
|
|
42
|
+
- **Non-duplication** — not already in CLAUDE.md or an ADR.
|
|
43
|
+
- **Actionability** — the next session behaves differently because of it.
|
|
44
|
+
- **Mentally testable** — you can picture the error it prevents.
|
|
45
|
+
|
|
46
|
+
## Anti-patterns
|
|
47
|
+
|
|
48
|
+
1. **Skipping Stage 1.** Stage 1 feeds Stage 2 statistical signal; without it, Stage
|
|
49
|
+
2 is an agent guessing — the very anti-pattern L5 avoids.
|
|
50
|
+
2. **Applying without reading the proposal.** The propose/apply split exists to force
|
|
51
|
+
a read in the middle. Skipping it is applying a diff blind.
|
|
52
|
+
3. **A "rule" that's really an ADR.** If it needs 50 lines to explain, it's an
|
|
53
|
+
architectural decision — `/new-adr`, then reference it in one line.
|
|
54
|
+
4. **Back-to-back cycles.** The soak window exists so patterns are stable, not
|
|
55
|
+
emergent. Respect `proposeAfterSessions`.
|
|
56
|
+
5. **Editing the proposal to force a rule the agent rejected.** It was rejected for a
|
|
57
|
+
reason (contradiction, duplication, vagueness). Ask why; if it still holds, make a
|
|
58
|
+
direct ADR — don't bypass the check.
|
|
59
|
+
|
|
60
|
+
## Calibration over time
|
|
61
|
+
|
|
62
|
+
After ~5 applied cycles: audit reverts (did a rule get contradicted? refine the
|
|
63
|
+
prompts), audit "no-shows" (a Stage 1 pattern that never became a rule — maybe the
|
|
64
|
+
frequency threshold is wrong), and consider a more frequent auto-propose stage only
|
|
65
|
+
after the manual stage has proven itself.
|
|
66
|
+
|
|
67
|
+
## Relation to `/log-session` and ADRs
|
|
68
|
+
|
|
69
|
+
| Event | Artifact | Lifecycle |
|
|
70
|
+
| --- | --- | --- |
|
|
71
|
+
| `/log-session` | `contextkit/memory/sessions/<file>.md` | Immutable after creation |
|
|
72
|
+
| `/simulate-impact` | `contextkit/memory/predictions/<file>.md` | Updated by `/log-session` |
|
|
73
|
+
| `/distill-sessions` | `.distillation-proposal.md` | Temporary, gitignored |
|
|
74
|
+
| `/distill-apply` | `contextkit/memory/decisions/NNNN-distillation-cycle-X.md` + CLAUDE.md diff | Permanent, versioned, revertible |
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Playbook — Landing page & high-conversion sites
|
|
2
|
+
|
|
3
|
+
> Operational entry: `/landing-page` (the slash command) calls the
|
|
4
|
+
> `landing-architect` briefing, which reads this playbook on every
|
|
5
|
+
> invocation. The SEO + AISO gate (ADR-0025) is mandatory — every
|
|
6
|
+
> public surface goes through `seo-specialist` before this playbook's
|
|
7
|
+
> visual recommendations apply.
|
|
8
|
+
>
|
|
9
|
+
> Authority: [ADR-0023](../../memory/decisions/0023-landing-page-and-conversion-posture.md). Freshness: package recommendations dated **2026-06-02** — re-evaluate quarterly.
|
|
10
|
+
|
|
11
|
+
## Why this playbook exists
|
|
12
|
+
|
|
13
|
+
The current generation of AI-generated landing pages has a uniform
|
|
14
|
+
look: gradient hero, three feature cards, three-tier pricing,
|
|
15
|
+
testimonial slider, FAQ accordion, newsletter signup. A savvy visitor
|
|
16
|
+
recognises the pattern in under three seconds, and recognition reads as
|
|
17
|
+
"AI-built" — which reads as "low effort" — which costs conversion on
|
|
18
|
+
the same page that was supposed to convert. This playbook is the kit's
|
|
19
|
+
explicit refusal of that pattern and its substitute.
|
|
20
|
+
|
|
21
|
+
## Folds — the strategic minimum
|
|
22
|
+
|
|
23
|
+
| Folds | Use when | Cost of more |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| **3 (min)** — hero · proof · CTA | utility tool, single-feature, free product with one job-to-be-done | adding more is "while we're here" — every extra fold is friction |
|
|
26
|
+
| **5–7 (ideal, SaaS)** — hero · problem · solution · social proof · pricing/CTA · FAQ · footer-CTA | most SaaS landing pages | beyond 7, recall + scroll-depth fall off; pick the fight you actually need |
|
|
27
|
+
| **9 (max recommended)** — adds: how it works · integrations · founder note | high-ticket B2B where the deal needs more context | beyond 9 you are writing a sales letter; that is a different format |
|
|
28
|
+
|
|
29
|
+
**Per-fold rule, non-negotiable:**
|
|
30
|
+
|
|
31
|
+
- **One message.** One thing the visitor should take away.
|
|
32
|
+
- **One action.** One next step that fold invites.
|
|
33
|
+
- **One proof.** When you make a claim, one concrete artefact that
|
|
34
|
+
makes it credible (a number, a quote, a logo, a screenshot — never
|
|
35
|
+
three "as featured in" rows).
|
|
36
|
+
|
|
37
|
+
A fold that does not pass all three is the section to cut.
|
|
38
|
+
|
|
39
|
+
## Above the fold (the only fold that exists at first)
|
|
40
|
+
|
|
41
|
+
Hard rules:
|
|
42
|
+
|
|
43
|
+
- **Value prop ≤ 8 words.** If it does not fit, the message is not
|
|
44
|
+
sharp yet. "X for Y" / "The Z that does W" / "Verb + outcome" are
|
|
45
|
+
the shapes that work. Refuse: "Solutions for the modern enterprise",
|
|
46
|
+
"AI-powered platform for the future of work", "Empower your team to
|
|
47
|
+
do more with less" — all dead.
|
|
48
|
+
- **One concrete next action.** Not "Learn more" + "See pricing" +
|
|
49
|
+
"Watch demo" all weighted equally — that is paralysis. Pick the
|
|
50
|
+
*next* action the visitor's funnel state implies, give it visual
|
|
51
|
+
weight, demote the rest to text links.
|
|
52
|
+
- **No second-guessing in the headline.** "We help teams" / "We
|
|
53
|
+
believe" / "We're on a mission" — refuse. The reader does not care
|
|
54
|
+
about you yet; they care about themselves.
|
|
55
|
+
|
|
56
|
+
## Anti-Lovable refusals (cookie-cutter patterns the playbook rejects)
|
|
57
|
+
|
|
58
|
+
Each row: the smell, why it is wrong, the substitute.
|
|
59
|
+
|
|
60
|
+
| Cookie-cutter | Why it dies | Substitute |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| Gradient purple-pink hero with centred title + "Get Started" button | recognised in 3 s as AI-generated; signals low effort | editorial layout: a strong point of view in the headline, asymmetric grid, real imagery — Veo/Nano Banana hero (ADR-0024) of the *actual* product or domain |
|
|
63
|
+
| Three feature cards in a row with icon + 2-line description | tells nothing; the icons are decorative; the descriptions are generic | one feature shown in context (screenshot + 1-sentence outcome), repeated 2–3 times, each tied to a real user moment |
|
|
64
|
+
| Three-tier pricing table (Basic / Pro / Enterprise) as default | most products do not have three tiers; the table is performative | start with one price + a "is this for me?" decision tree; if multi-tier, lay out as recommendation engine ("for teams of X → plan Y"), not table |
|
|
65
|
+
| Testimonial slider at the bottom | sliders hide content; visitors do not interact with them | in-context quotes *next to the feature they validate* + a single hero testimonial above the fold with a real photo |
|
|
66
|
+
| FAQ accordion at the bottom | hidden by default; never read; useless for AISO | FAQ as scannable Q&A headings near the relevant section + `FAQPage` JSON-LD schema for AISO (ADR-0025) |
|
|
67
|
+
| Full-width newsletter signup in the footer | nobody signs up for a newsletter from a landing page in 2026 | offer one specific resource (a guide, a calculator, a template) gated by an email — earned, not begged |
|
|
68
|
+
| Generic stock photos of people at laptops | reads as fake; everyone uses the same Unsplash bucket | real product screenshots, custom illustrations, or Veo/Nano Banana renders of the *domain* (ADR-0024) |
|
|
69
|
+
| `Inter` font, `Heroicons` icons, `tailwindui.com` patterns | the "AI tells" of 2026 — recognised instantly | pair a display face (e.g. Fraunces / Schibsted Grotesk / Migra) with a clean body (e.g. Geist / SF Pro Web fallback). Lucide or hand-rolled SVG for icons. |
|
|
70
|
+
|
|
71
|
+
## Package recommendations — by concern (dated 2026-06-02)
|
|
72
|
+
|
|
73
|
+
Refresh quarterly. A recommendation that no longer holds gets replaced
|
|
74
|
+
via an ADR-0023 amendment.
|
|
75
|
+
|
|
76
|
+
### Framework (rendering — load-bearing for SEO/AISO)
|
|
77
|
+
|
|
78
|
+
| Pick | When |
|
|
79
|
+
|---|---|
|
|
80
|
+
| **Astro** (recommended default) | content-driven landing page, marketing site, blog. SSG by default, islands for interactivity, zero JS shipped for static parts. Indexable by default. |
|
|
81
|
+
| **Next.js App Router** (RSC) | landing page is part of a larger Next app; team already runs Next. Heavier than Astro for pure marketing pages but ergonomically familiar. |
|
|
82
|
+
| **Nuxt** | same shape as Next for Vue teams. |
|
|
83
|
+
| **SvelteKit** | same shape as Next for Svelte teams. |
|
|
84
|
+
| **Plain Vite + React** | **refused** for a landing page. The empty `<div id="root">` SSR payload fails the indexability gate (ADR-0025). Use Astro instead. |
|
|
85
|
+
|
|
86
|
+
### Styling
|
|
87
|
+
|
|
88
|
+
| Pick | Notes |
|
|
89
|
+
|---|---|
|
|
90
|
+
| **Tailwind CSS** + **CSS custom properties for tokens** | the unopinionated default. Tokens via `:root { --color-primary: ... }` and Tailwind's `theme.extend` — never raw hex literals in components. |
|
|
91
|
+
| **Material UI, Chakra, NextUI** | **refused as defaults** — too generic; turn every product into the same product. Pick if the design team explicitly wants the trade-off. |
|
|
92
|
+
| **CSS-in-JS (Emotion, styled-components)** | fine technically; pays a runtime cost on every render. Prefer Tailwind for landing pages. |
|
|
93
|
+
|
|
94
|
+
### Animation
|
|
95
|
+
|
|
96
|
+
| Pick | When |
|
|
97
|
+
|---|---|
|
|
98
|
+
| **Motion** (formerly Framer Motion) | React/Vue interactions. The default. |
|
|
99
|
+
| **Lenis** | smooth scroll. Adds polish at zero cost for users who prefer reduced motion (respects `prefers-reduced-motion`). |
|
|
100
|
+
| **GSAP** | complex sequenced animations (scroll-driven, sequenced timelines). Pay the licence if commercial. |
|
|
101
|
+
| **View Transitions API** | route transitions, expanding cards. Astro + Next + Nuxt all wire it up. |
|
|
102
|
+
|
|
103
|
+
### Typography
|
|
104
|
+
|
|
105
|
+
| Pick | Notes |
|
|
106
|
+
|---|---|
|
|
107
|
+
| **Fontsource** | self-host any Google Font. No `<link>` to fonts.googleapis.com (GDPR + performance). |
|
|
108
|
+
| **`@next/font` / Astro Fonts** | same, framework-native. |
|
|
109
|
+
| **`Inter` as the only face** | **refused as default** — became the Helvetica of 2025; signals "AI-built". Pair a display face with a clean body. |
|
|
110
|
+
|
|
111
|
+
### Icons
|
|
112
|
+
|
|
113
|
+
| Pick | Notes |
|
|
114
|
+
|---|---|
|
|
115
|
+
| **Lucide** | clean, consistent, tree-shakeable. The default. |
|
|
116
|
+
| **Hand-rolled SVG** | when the brand justifies it. |
|
|
117
|
+
| **Heroicons** | **refused as default** — too tied to Tailwind UI templates. |
|
|
118
|
+
|
|
119
|
+
### Forms
|
|
120
|
+
|
|
121
|
+
| Pick | Notes |
|
|
122
|
+
|---|---|
|
|
123
|
+
| **react-hook-form + zod** | unopinionated, type-safe, zero re-render cost. |
|
|
124
|
+
| **Form backend**: **Formspree**, **Convex**, or a server route. Pick by what the rest of the project uses. |
|
|
125
|
+
|
|
126
|
+
### Analytics
|
|
127
|
+
|
|
128
|
+
| Pick | Notes |
|
|
129
|
+
|---|---|
|
|
130
|
+
| **Plausible** | privacy-first, GDPR-OK, lightweight (1 KB script). RUM-friendly for Core Web Vitals. The default. |
|
|
131
|
+
| **Vercel Analytics** | if already on Vercel. Web Vitals included. |
|
|
132
|
+
| **GA4** | **refused as default** — heavy, ugly DX, GDPR-fragile. Pick when the stakeholder requires it. |
|
|
133
|
+
|
|
134
|
+
### Experimentation
|
|
135
|
+
|
|
136
|
+
| Pick | Notes |
|
|
137
|
+
|---|---|
|
|
138
|
+
| **GrowthBook** | self-hostable, OSS, feature flags + A/B. The kit's recommended option (user preference recorded in memory). |
|
|
139
|
+
| **PostHog** | if already running PostHog for product analytics. |
|
|
140
|
+
|
|
141
|
+
### Imagery & video
|
|
142
|
+
|
|
143
|
+
| Pick | Notes |
|
|
144
|
+
|---|---|
|
|
145
|
+
| **`/media-gen`** (the kit) | Veo for video, Nano Banana for image — ADR-0024. Domain-specific renders instead of stock. |
|
|
146
|
+
| **Unsplash API** | placeholders while iterating. Replace before launch. |
|
|
147
|
+
|
|
148
|
+
## Performance budget (Core Web Vitals are a ranking signal)
|
|
149
|
+
|
|
150
|
+
Targets:
|
|
151
|
+
|
|
152
|
+
- **LCP < 2.5 s** (Largest Contentful Paint)
|
|
153
|
+
- **INP < 200 ms** (Interaction to Next Paint — replaced FID)
|
|
154
|
+
- **CLS < 0.1** (Cumulative Layout Shift)
|
|
155
|
+
- **First-fold JS < 100 kB compressed**
|
|
156
|
+
|
|
157
|
+
Measure with:
|
|
158
|
+
|
|
159
|
+
- **PageSpeed Insights** during development
|
|
160
|
+
- **Lighthouse CI** on every PR
|
|
161
|
+
- **Plausible** or **Vercel Analytics** for real-user metrics post-launch
|
|
162
|
+
|
|
163
|
+
A landing page that fails any of these in lab measurement is a refusal
|
|
164
|
+
on this playbook + a finding in `seo-audit.mjs`.
|
|
165
|
+
|
|
166
|
+
## Indexability gate (cross-link)
|
|
167
|
+
|
|
168
|
+
Every public route the user wants indexed goes through
|
|
169
|
+
[`seo-aiso.md`](seo-aiso.md) before this playbook's visual
|
|
170
|
+
recommendations apply. The gate refuses:
|
|
171
|
+
|
|
172
|
+
- Plain client-rendered SPAs (no SSR/SSG).
|
|
173
|
+
- Pages with `<title>` set in JS.
|
|
174
|
+
- Routes missing `<link rel="canonical">`.
|
|
175
|
+
- Sites without `sitemap.xml`, `robots.txt`, or `llms.txt` at the root.
|
|
176
|
+
|
|
177
|
+
The override path is a project-local ADR explicitly carving out the
|
|
178
|
+
surface (e.g. "internal admin tool — no SEO needed").
|
|
179
|
+
|
|
180
|
+
## Freshness protocol
|
|
181
|
+
|
|
182
|
+
Package recommendations decay. This playbook's rec table carries a
|
|
183
|
+
date (top of the file). When that date is more than 90 days old,
|
|
184
|
+
`seo-specialist` and `landing-architect` are licensed to override the
|
|
185
|
+
rec inline with a one-line note, and an amendment ADR is filed if the
|
|
186
|
+
override would be permanent.
|
|
187
|
+
|
|
188
|
+
## When this playbook does NOT apply
|
|
189
|
+
|
|
190
|
+
- **Internal tools / admin dashboards** — no indexability gate, no
|
|
191
|
+
conversion focus. Use `ui-designer` + `ux-designer` directly.
|
|
192
|
+
- **Documentation sites** — different posture; SSG-by-default is the
|
|
193
|
+
same but the playbook's hero / fold rules do not apply. Use a docs-
|
|
194
|
+
specific frame (Astro Starlight, Nextra, Docusaurus).
|
|
195
|
+
- **Web apps with a marketing wrapper** — the marketing page follows
|
|
196
|
+
this playbook; the app inside does not. Keep them on separate
|
|
197
|
+
routes / subdomains so the SEO posture is unambiguous.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Playbook — Security batch (recurring security sweep)
|
|
2
|
+
|
|
3
|
+
> Operational specs: [`.claude/commands/deep-analysis.md`](../../../.claude/commands/deep-analysis.md)
|
|
4
|
+
> and [`.claude/commands/deps-audit.md`](../../../.claude/commands/deps-audit.md).
|
|
5
|
+
> This page is the **why**, the **recurring rhythm**, and how to **triage** the output.
|
|
6
|
+
|
|
7
|
+
## Why it exists
|
|
8
|
+
|
|
9
|
+
Security review tends to happen reactively — after an incident, or never. A *batch*
|
|
10
|
+
turns it into a scheduled, artifact-producing sweep, so risk is found before it ships
|
|
11
|
+
and the findings live in the backlog, not in a lost chat.
|
|
12
|
+
|
|
13
|
+
The kit makes security **active, not reactive**: a SessionStart trigger reminds you
|
|
14
|
+
to run `/deep-analysis` every N sessions (`securityMode.everyNSessions`, on by
|
|
15
|
+
default). This playbook is what you do when that reminder fires — or before a release
|
|
16
|
+
that touches a sensitive surface.
|
|
17
|
+
|
|
18
|
+
## The batch, in order
|
|
19
|
+
|
|
20
|
+
1. **Dependency & supply chain** — `/deps-audit`: lockfile present and respected,
|
|
21
|
+
versions pinned, known CVEs, license posture. Owned by the **security-team**
|
|
22
|
+
(`security` for AppSec, `infra-security` for IaC/cloud, `devops` for delivery).
|
|
23
|
+
2. **Global sweep** — `/deep-analysis`: aggregates every deterministic scanner
|
|
24
|
+
(tech-debt, deps, contract) into one report, then adds judgment — a security pass,
|
|
25
|
+
an architecture pass, a bug pass.
|
|
26
|
+
3. **Triage into the backlog** — every finding becomes a DevPipeline task
|
|
27
|
+
(`/pipeline`) with a severity (S1–S4) and an SLA, so nothing is "noted and
|
|
28
|
+
forgotten".
|
|
29
|
+
4. **Promote the systemic ones to ADRs** — a recurring class of finding (not a
|
|
30
|
+
one-off) is a decision, not a ticket: `/new-adr`.
|
|
31
|
+
|
|
32
|
+
## How to triage
|
|
33
|
+
|
|
34
|
+
- **Severity over volume.** One S1 (auth bypass, secret exposure, RCE) outranks
|
|
35
|
+
twenty nits. Sort by blast radius, not by count.
|
|
36
|
+
- **Trust boundaries first.** Findings at input boundaries (auth, deserialization,
|
|
37
|
+
external webhooks, file upload) outrank internal hygiene.
|
|
38
|
+
- **A scanner finding is a lead, not a verdict.** Deterministic scanners produce
|
|
39
|
+
false positives; confirm before filing an S1.
|
|
40
|
+
- **Pin the fix to an owner.** Each accepted finding → a backlog task with an owner
|
|
41
|
+
and an SLA, or an explicit, recorded "won't fix (why)".
|
|
42
|
+
|
|
43
|
+
## Anti-patterns
|
|
44
|
+
|
|
45
|
+
1. **Running the batch and never triaging.** A report nobody turns into tasks is
|
|
46
|
+
theatre. The deliverable is backlog items, not a markdown file.
|
|
47
|
+
2. **Fixing low-severity nits while an S1 waits.** Severity ordering is the whole
|
|
48
|
+
point.
|
|
49
|
+
3. **Suppressing a CVE by ignoring the advisory.** Upgrade, replace, or record an
|
|
50
|
+
accepted-risk decision with an expiry — never silently mute.
|
|
51
|
+
4. **Treating every finding as an ADR.** One-offs are tickets; only the recurring,
|
|
52
|
+
systemic class earns an ADR.
|
|
53
|
+
5. **Disabling security mode "because it's noisy".** Tune `everyNSessions` instead;
|
|
54
|
+
turning it off removes the signal exactly when it matters.
|
|
55
|
+
|
|
56
|
+
## Cadence & configuration
|
|
57
|
+
|
|
58
|
+
`securityMode` lives in `contextkit/config.json` (`active`, `everyNSessions`). Tune via
|
|
59
|
+
`/context-config set`. Pair the batch with a release: run it before closing a version
|
|
60
|
+
(`/close-version`) that touched auth, crypto, dependencies, or infra.
|
|
61
|
+
|
|
62
|
+
## Relation to other components
|
|
63
|
+
|
|
64
|
+
- **`/tech-debt-sweep`** — health vs security: the sweep's `security` profile is a
|
|
65
|
+
fast pre-filter; the batch is the deep pass.
|
|
66
|
+
- **`/simulate-impact`** — fire it before implementing a fix on a high-risk path.
|
|
67
|
+
- **Contract-drift gate** — a security fix that changes a public signature still
|
|
68
|
+
needs a `BREAKING CHANGE:` footer.
|