claude-code-kit 0.22.0__tar.gz → 0.23.0__tar.gz
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.
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/.claude-plugin/marketplace.json +1 -1
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/.claude-plugin/plugin.json +1 -1
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/CHANGELOG.md +32 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/CONTRIBUTING.md +9 -5
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/PKG-INFO +7 -1
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/README.md +6 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/commands/init.md +21 -7
- claude_code_kit-0.23.0/hooks/hooks.json +106 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/pyproject.toml +1 -1
- claude_code_kit-0.23.0/scripts/gen_hooks.py +69 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/scripts/init.sh +10 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/__init__.py +1 -1
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/hooks.py +157 -26
- claude_code_kit-0.23.0/templates/settings.json +74 -0
- claude_code_kit-0.22.0/hooks/hooks.json +0 -58
- claude_code_kit-0.22.0/templates/settings.json +0 -47
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/.gitignore +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/CLAUDE.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/LICENSE +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/acceptance-reviewer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/auditor.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/dependency-scanner.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/developer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/devils-advocate.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/devops-engineer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/e2e-tester.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/em-reviewer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/incident-responder.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/merge-reviewer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/observability-engineer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/orchestrator.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/owasp-reviewer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/policy-validator.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/pr-raiser.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/risk-classifier.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/sdlc-code-reviewer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/secret-scanner.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/security-reviewer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/senior-backend-dev.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/senior-frontend-dev.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/senior-tester.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/spec-doc-writer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/story-planner.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/technical-architect.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/tester.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/ui-designer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/agents/unit-tester.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/catalog/capture.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/catalog/mcp.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/catalog/org.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/catalog/profiles.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/catalog/stacks.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/commands/abort.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/commands/sdlc.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/commands/status.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/docs/agentic-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/docs/agents.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/docs/architecture.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/docs/coverage-audit.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/docs/eval-harness.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/docs/org-capabilities.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/docs/stack-skills/GAP-ANALYSIS.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/docs/stack-skills/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/docs/stack-skills/REPO-INVENTORY.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/audit-log.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/capture-learnings.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/guard-destructive-git.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/guard-kubectl-delete.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/guard-secrets.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/lint-fix.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/load-autonomy.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/load-continuity.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/load-learnings.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/type-check.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/validate-frontmatter.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/validate-settings.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/warn-large-edits.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/warn-llm-io.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/warn-missing-tests.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/warn-sensitive-files.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/hooks/scripts/warn-shared-modules.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/agent-guardrails.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/agent-memory.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/agent-resilience.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/autonomy-levels.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/code-organization.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/continuity.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/design-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/devops-observability.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/documentation.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/evals.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/frontend-best-practices.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/goal-setting-and-monitoring.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/human-in-the-loop.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/linting-and-formatting.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/mandatory-workflow.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/model-tiers.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/quality-gates.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/rarv-cycle.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/reasoning-techniques.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/responsive-and-accessibility.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/risk-classification.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/testing.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/rules/tool-design.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/scripts/check_docs_consistency.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/_references/accessibility-checklist.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/_references/orchestration-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/_references/performance-checklist.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/_references/security-checklist.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/_references/testing-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/accessibility-review/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/alembic-migrations/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/alembic-migrations/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/alembic-migrations/references/alembic-setup-and-env.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/alembic-migrations/references/async-and-multitenant-migrations.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/alembic-migrations/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/alembic-migrations/references/troubleshooting-and-debugging.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/alembic-migrations/references/writing-migrations.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/anthropic-vertex-integration/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/anthropic-vertex-integration/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/anthropic-vertex-integration/references/generate-helpers-and-retry.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/anthropic-vertex-integration/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/anthropic-vertex-integration/references/vertex-client-and-auth.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/api-and-interface-design/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/api-integration/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/api-pagination-filtering-sorting/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/api-pagination-filtering-sorting/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/api-pagination-filtering-sorting/references/query-params-conventions.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/api-pagination-filtering-sorting/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/api-pagination-filtering-sorting/references/response-metadata.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/archive-sprint/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/async-python-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/async-python-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/async-python-patterns/references/async-boundaries.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/async-python-patterns/references/lifecycle-and-gather.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/async-python-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/auth-and-rbac/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/auth-and-rbac/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/auth-and-rbac/references/auth-dependencies.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/auth-and-rbac/references/rbac-and-permissions.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/auth-and-rbac/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/auth-and-rbac/references/security-hardening.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/auth-and-rbac/references/tokens-and-hashing.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/backend-repo-architecture/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/backend-repo-architecture/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/backend-repo-architecture/references/deployment-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/backend-repo-architecture/references/entrypoint-and-config.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/backend-repo-architecture/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/backend-repo-architecture/references/structure-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/backend-repo-architecture/references/troubleshooting.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/backlog/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/backlog/item-template.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/browser-testing-with-devtools/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/bug-hunt/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/ci-cd-and-automation/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/code-review-and-quality/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/code-simplification/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/component-design/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/configargparse-yaml-env-layering/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/configargparse-yaml-env-layering/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/configargparse-yaml-env-layering/references/config-layering-anatomy.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/configargparse-yaml-env-layering/references/mode-dispatch-and-precedence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/configargparse-yaml-env-layering/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/consolidate-learnings/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/containerization-and-deployment/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/containerization-and-deployment/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/containerization-and-deployment/references/deployment-and-secrets.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/containerization-and-deployment/references/dockerfile-and-compose.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/containerization-and-deployment/references/entrypoint-and-modes.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/containerization-and-deployment/references/kerberos-kinit-bootstrap.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/containerization-and-deployment/references/makefile-dev-workflow.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/containerization-and-deployment/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/context-engineering/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/cron-and-scheduled-jobs/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/cron-and-scheduled-jobs/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/cron-and-scheduled-jobs/references/choosing-and-operations.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/cron-and-scheduled-jobs/references/kubernetes-cronjob.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/cron-and-scheduled-jobs/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/cron-and-scheduled-jobs/references/temporal-schedules.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/data-engineering-bigquery-gcs/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/data-engineering-bigquery-gcs/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/data-engineering-bigquery-gcs/references/bigquery-advanced-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/data-engineering-bigquery-gcs/references/bigquery-gcs-io.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/data-engineering-bigquery-gcs/references/medallion-architecture.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/data-engineering-bigquery-gcs/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/data-engineering-bigquery-gcs/references/temp-table-merge-pattern.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/debugging-and-error-recovery/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/decision/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/decision/adr-template.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/deprecation-and-migration/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/design-patterns-and-conventions/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/design-patterns-and-conventions/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/design-patterns-and-conventions/references/anti-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/design-patterns-and-conventions/references/naming-and-layout.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/design-patterns-and-conventions/references/patterns-catalog.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/design-patterns-and-conventions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/design-patterns-and-conventions/references/testing-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/design-patterns-and-conventions/references/troubleshooting.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-compose/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-compose/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-compose/references/compose-services-and-healthchecks.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-compose/references/dev-vs-prod-variants.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-compose/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-shared/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-shared/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-shared/references/dockerignore-and-build-secrets.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-shared/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-shared/references/shared-base-images.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/docker-shared/references/shared-compose-fragments.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-backend/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-backend/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-backend/references/backend-dockerfile-anatomy.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-backend/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-backend/references/system-deps-and-caching.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-frontend/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-frontend/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-frontend/references/build-args-and-nginx.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-frontend/references/frontend-dockerfile-anatomy.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/dockerfile-frontend/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/documentation-and-adrs/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/doubt-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/edge-to-service-trust-boundary/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/edge-to-service-trust-boundary/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/edge-to-service-trust-boundary/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/edge-to-service-trust-boundary/references/trust-contract.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/execute/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/fastapi-service-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/fastapi-service-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/fastapi-service-patterns/references/api-versioning.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/fastapi-service-patterns/references/app-factory-and-lifespan.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/fastapi-service-patterns/references/custom-route-and-middleware.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/fastapi-service-patterns/references/dependency-injection.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/fastapi-service-patterns/references/model-and-serialization-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/fastapi-service-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/file-export-and-reporting/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/file-export-and-reporting/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/file-export-and-reporting/references/excel-generation.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/file-export-and-reporting/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/file-export-and-reporting/references/streaming-and-downloads.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/frontend-repo-architecture/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/frontend-repo-architecture/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/frontend-repo-architecture/references/api-layer-and-types.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/frontend-repo-architecture/references/divergences.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/frontend-repo-architecture/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/frontend-repo-architecture/references/structure-and-state.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/frontend-repo-architecture/references/testing-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/frontend-ui-engineering/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcp-cloud-run-github-actions/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcp-cloud-run-github-actions/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcp-cloud-run-github-actions/references/cloud-run-deploy.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcp-cloud-run-github-actions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcp-cloud-run-github-actions/references/workflow-structure.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcs-file-storage-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcs-file-storage-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcs-file-storage-patterns/references/client-and-uploads.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcs-file-storage-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/gcs-file-storage-patterns/references/signed-urls-and-reads.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/git-workflow-and-versioning/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/grafana-dashboards-and-alerts/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/grafana-dashboards-and-alerts/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/grafana-dashboards-and-alerts/references/dashboard-json-and-templating.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/grafana-dashboards-and-alerts/references/provisioning-and-organization.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/grafana-dashboards-and-alerts/references/red-metrics-queries.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/grafana-dashboards-and-alerts/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/grafana-dashboards-and-alerts/references/unified-alerting.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/graphql-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/graphql-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/graphql-patterns/references/apollo-client-frontend.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/graphql-patterns/references/apollo-client-setup.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/graphql-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/graphql-patterns/references/strawberry-backend.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/graphql-patterns/references/when-to-use-graphql.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/idea-refine/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/idea-refine/examples.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/idea-refine/frameworks.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/idea-refine/refinement-criteria.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/idea-refine/scripts/idea-refine.sh +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/incident-postmortem/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/incremental-implementation/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/interview-me/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kafka-config-driven/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kafka-config-driven/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kafka-config-driven/references/config-and-sasl-kerberos.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kafka-config-driven/references/consumer-producer-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kafka-config-driven/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kafka-config-driven/references/troubleshooting-and-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubectl-operations/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubectl-operations/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubectl-operations/references/command-reference.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubectl-operations/references/context-namespace-rbac.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubectl-operations/references/debugging-playbooks.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubectl-operations/references/output-formats-and-selectors.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubectl-operations/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubernetes-workload-hardening/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubernetes-workload-hardening/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubernetes-workload-hardening/references/networkpolicy-and-rbac.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubernetes-workload-hardening/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/kubernetes-workload-hardening/references/securitycontext-and-podsecurity.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/langfuse-llm-tracing/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/langfuse-llm-tracing/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/langfuse-llm-tracing/references/langfuse-client-and-tracing.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/langfuse-llm-tracing/references/python-and-typescript.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/langfuse-llm-tracing/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/load-testing/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/manual-test/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/modernization-and-migration/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/modernization-and-migration/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/modernization-and-migration/references/migration-best-practices.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/modernization-and-migration/references/pydantic-v1-to-v2.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/modernization-and-migration/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/modernization-and-migration/references/shared-internal-library.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/modernization-and-migration/references/sqlalchemy-14-to-20.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/multi-tenancy-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/multi-tenancy-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/multi-tenancy-patterns/references/caching-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/multi-tenancy-patterns/references/isolation-strategies.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/multi-tenancy-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/multi-tenancy-patterns/references/tenant-resolution.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-express-service/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-express-service/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-express-service/references/app-factory-and-mode-dispatch.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-express-service/references/config-and-module-alias.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-express-service/references/middleware-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-express-service/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-objection-knex/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-objection-knex/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-objection-knex/references/migrations-and-validation.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-objection-knex/references/objection-model-and-knex.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/node-objection-knex/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/notifications-and-messaging/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/notifications-and-messaging/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/notifications-and-messaging/references/provider-abstraction.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/notifications-and-messaging/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/notifications-and-messaging/references/templates-and-fallback.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/observability-and-logging/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/observability-and-logging/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/observability-and-logging/references/health-and-readiness.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/observability-and-logging/references/logging-and-structlog.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/observability-and-logging/references/outbound-metrics-and-multi-mode.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/observability-and-logging/references/pii-redaction.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/observability-and-logging/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/observability-and-logging/references/tracing-and-metrics.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/over-engineering-review/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/performance-optimization/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/planning-and-task-breakdown/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/playwright-verification/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/pydantic-schema-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/pydantic-schema-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/pydantic-schema-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/pydantic-schema-patterns/references/settings-and-validation.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/pydantic-schema-patterns/references/troubleshooting-and-common-errors.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/pydantic-schema-patterns/references/v1-vs-v2.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/python-dao-and-database/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/python-dao-and-database/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/python-dao-and-database/references/advanced-query-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/python-dao-and-database/references/basedao-and-sessions.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/python-dao-and-database/references/mongodb-advanced.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/python-dao-and-database/references/other-db-mongodb.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/python-dao-and-database/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/python-dao-and-database/references/sqlalchemy-1x-vs-2x.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/radix-tailwind-component-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/radix-tailwind-component-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/radix-tailwind-component-patterns/references/radix-primitives-and-variants.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/radix-tailwind-component-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/radix-tailwind-component-patterns/references/tailwind-theme-and-cn.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/react-hook-form-zod-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/react-hook-form-zod-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/react-hook-form-zod-patterns/references/form-setup-and-zod.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/react-hook-form-zod-patterns/references/multi-step-and-modes.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/react-hook-form-zod-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/redis-caching-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/redis-caching-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/redis-caching-patterns/references/cache-manager-and-fallback.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/redis-caching-patterns/references/namespacing-and-invalidation.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/redis-caching-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/refresh-docs/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/remember/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/scope/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/scope/scope-template.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/sdlc/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/security-and-hardening/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/security-verification/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/shannon-ai-pentest/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/shannon-ai-pentest/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/shannon-ai-pentest/references/operating-guide.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/shipping-and-launch/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/simplification-debt/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/smoke-test/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/source-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/spec-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/sprint/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/sprint/sprint-template.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/tanstack-react-query-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/tanstack-react-query-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/tanstack-react-query-patterns/references/mutations-and-cache.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/tanstack-react-query-patterns/references/query-keys-and-hooks.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/tanstack-react-query-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/task-tracker-sync/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/temporal-config-driven/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/temporal-config-driven/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/temporal-config-driven/references/config-and-retry-idempotency.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/temporal-config-driven/references/dag-dsl-interpreter.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/temporal-config-driven/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/temporal-config-driven/references/schedule-registration.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/temporal-config-driven/references/schedules-and-cron.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/temporal-config-driven/references/worker-workflow-activity-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/test-driven-development/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/test-plan-review/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/references/async-and-mocking.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/references/coverage-gap-and-recommendations.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/references/github-actions-test-orchestration.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/references/pytest-and-fixtures.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/references/pytest-asyncio-modes.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/references/security-regression-tests.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/testing-conventions/references/vitest-frontend-testing.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/threat-model/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/triage/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/ui-ux-design/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/unit-test/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/using-agent-skills/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/vitest-rtl-msw-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/vitest-rtl-msw-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/vitest-rtl-msw-patterns/references/msw-and-contract-tests.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/vitest-rtl-msw-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/vitest-rtl-msw-patterns/references/vitest-rtl-setup.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zap-vapt-scanning/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zap-vapt-scanning/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zap-vapt-scanning/references/operating-guide.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zap-vapt-scanning/scripts/endpoints.example.txt +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zap-vapt-scanning/scripts/requirements.txt +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zap-vapt-scanning/scripts/zap_vapt.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zustand-state-patterns/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zustand-state-patterns/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zustand-state-patterns/references/async-polling-and-persistence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zustand-state-patterns/references/repo-evidence.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/skills/zustand-state-patterns/references/store-structure-and-selectors.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/__main__.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/catalog.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/cli.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/models.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/prompts.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/render.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/scaffold.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/upgrader.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/src/claude_kit/validator.py +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/CLAUDE.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/CLAUDE.stack.md.tmpl +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/CONTINUITY.template.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/README.claude-sdlc.md.tmpl +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/agent-memory/MEMORY.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/agent-memory/api/.gitkeep +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/agent-memory/architecture/.gitkeep +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/agent-memory/debugging/.gitkeep +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/agent-memory/gotchas/.gitkeep +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/agent-memory/patterns/.gitkeep +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/agent-memory/performance/.gitkeep +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/artifacts/adr.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/artifacts/api-change-report.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/artifacts/feature-spec.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/artifacts/release-plan.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/artifacts/runbook.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/artifacts/security-review.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/artifacts/test-plan.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/agents/data-workflow-agent.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/agents/founder-prototype-agent.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/agents/internal-tools-builder.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/agents/pm-copilot.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/agents/staff-pm-reviewer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/agents/support-ticket-engineer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/devops-and-release/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/devops-and-release/pack.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/engineering-core/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/engineering-core/pack.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/non-engineer-builder/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/non-engineer-builder/pack.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/onboarding-and-docs/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/onboarding-and-docs/pack.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/product-to-code/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/product-to-code/pack.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/quality-and-review/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/quality-and-review/pack.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/security-and-compliance/README.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/packs/security-and-compliance/pack.yaml +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/ai-working-agreement.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/ambiguity-resolution.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/branch-and-pr-policy.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/compliance-policy.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/non-engineer-safe-coding.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/pii-policy.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/production-data-policy.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/prompt-to-task-conversion.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/prototype-boundaries.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/rules/secrets-policy.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/skills/customer-issue-to-fix/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/skills/feature-from-idea/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/skills/prompt-to-safe-task/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/skills/prototype-to-production/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/skills/repo-onboarding/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/skills/review-scope/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/skills/review-sprint/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/skills/review-sprint-plan/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/org/skills/review-ux-flow/SKILL.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/backend/go/net-http/rules/go-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/backend/python/fastapi/rules/fastapi-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/db/mongodb/agents/migration-specialist.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/db/mongodb/agents/mongodb-specialist.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/db/mongodb/rules/mongodb-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/db/postgres/agents/db-performance-reviewer.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/db/postgres/agents/migration-specialist.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/db/postgres/agents/postgres-specialist.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/db/postgres/rules/database-performance.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/db/postgres/rules/postgres-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/frontend/react/rules/design-system-compliance.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/frontend/react/rules/mobile-design-guidelines.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/frontend/react/rules/react-patterns.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/frontend/react/rules/ui-design-system.md +0 -0
- {claude_code_kit-0.22.0 → claude_code_kit-0.23.0}/templates/stacks/frontend/react/rules/ux-patterns.md +0 -0
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"name": "claude-kit",
|
|
11
11
|
"source": "./",
|
|
12
12
|
"description": "Cookiecutter-style scaffolder for an autonomous Claude Code SDLC config (no app code, no Docker): install CLAUDE.md + .claude/ (rules, the profile's agents/skills, hooks, artifact templates) + optional .mcp.json, then run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates, working memory, and a self-improving learnings loop.",
|
|
13
|
-
"version": "0.
|
|
13
|
+
"version": "0.23.0",
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"keywords": ["sdlc", "agents", "orchestration", "quality-gates", "workflow", "scaffold", "cookiecutter"]
|
|
16
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"description": "Cookiecutter-style scaffolder for an autonomous Claude Code SDLC config (no app code, no Docker). `claude-kit init` asks ordered questions and installs CLAUDE.md + .claude/ (rules, the profile's agents/skills, hooks, artifact templates) + optional .mcp.json; run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates with working memory and a self-improving learnings loop.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Arjunsingh Yadav",
|
|
@@ -4,6 +4,38 @@ All notable changes to claude-kit are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/), and the project uses
|
|
5
5
|
[semantic versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [0.23.0] — 2026-06-23
|
|
8
|
+
|
|
9
|
+
**PR2 of the phased hardening review: structural single-source-of-truth for hooks, and plugin/CLI
|
|
10
|
+
parity that fails loud instead of silently degrading.**
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **Hooks are now generated from one registry.** The two previously hand-maintained static hook files —
|
|
15
|
+
the plugin's `hooks/hooks.json` and the no-pip starter `templates/settings.json` — are now generated
|
|
16
|
+
from `src/claude_kit/hooks.py` (`HOOK_REGISTRY` + per-channel membership data) via
|
|
17
|
+
`scripts/gen_hooks.py`. They had already drifted (the starter was missing `load-autonomy`, the PR1
|
|
18
|
+
`jq`-degradation prefix, and used a slightly different block message). A drift test
|
|
19
|
+
(`gen_hooks.py --check`, run in the suite) fails the build if either file is hand-edited.
|
|
20
|
+
- The installed per-profile `.claude/settings.json` (built by `build_settings`) is **byte-identical**
|
|
21
|
+
to before — pure refactor, verified against `origin/main`.
|
|
22
|
+
- `hooks/hooks.json` is **semantically identical** to before (reflowed to canonical 2-space JSON; no
|
|
23
|
+
hook added, removed, or reordered).
|
|
24
|
+
- `templates/settings.json` changes only by refreshing its two inline Bash guards to the registry
|
|
25
|
+
versions (gaining the `command -v jq … || exit 0` no-jq degradation + aligned message); same hook
|
|
26
|
+
membership.
|
|
27
|
+
- **`guard-kubectl-delete` is now declared data.** It moves into a `PLUGIN_ONLY_HOOKS` map (with a
|
|
28
|
+
`reason`) — the single documented exception to "the registry is the source of truth" — instead of
|
|
29
|
+
being a silent hand-edit in `hooks.json`.
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **Plugin/CLI parity: `/claude-kit:init` requires the CLI and fails loud.** The command no longer
|
|
34
|
+
silently falls back to the thin `scripts/init.sh` scaffolder when neither `claude-kit` nor `ckit` is
|
|
35
|
+
on PATH — it stops and instructs `pipx install claude-code-kit` (or `pip install …`). The shell
|
|
36
|
+
fallback is now opt-in only (`CLAUDE_KIT_BASIC=1`) and prints a loud "degraded, no-resolution
|
|
37
|
+
install; upgrade/diff won't work" warning. README onboarding documents the CLI requirement.
|
|
38
|
+
|
|
7
39
|
## [0.22.0] — 2026-06-23
|
|
8
40
|
|
|
9
41
|
**Critical-correctness hardening (PR1 of a phased review): a non-destructive `init` merge that no longer
|
|
@@ -38,11 +38,15 @@ locally, and how to release.
|
|
|
38
38
|
*when* to use it. Add it to the relevant profile(s) in `catalog/profiles.yaml`.
|
|
39
39
|
- **Rule** → add `rules/<name>.md`; cross-reference siblings as `.claude/rules/<name>.md`.
|
|
40
40
|
- **Hook** → add a script to `hooks/scripts/`, register it in the `HOOK_REGISTRY` in
|
|
41
|
-
`src/claude_kit/hooks.py`,
|
|
42
|
-
|
|
43
|
-
**
|
|
44
|
-
`
|
|
45
|
-
|
|
41
|
+
`src/claude_kit/hooks.py`, and list its id in the relevant profile's `hooks:`. To surface it in the
|
|
42
|
+
plugin and/or the no-pip starter, add its id to `PLUGIN_HOOK_IDS` / `STARTER_HOOK_IDS` (same module),
|
|
43
|
+
then **run `python scripts/gen_hooks.py`** to regenerate `hooks/hooks.json` and
|
|
44
|
+
`templates/settings.json` — **never hand-edit those two files** (a drift test, `gen_hooks.py --check`,
|
|
45
|
+
fails the build if they diverge from the registry). A plugin-only hook (no CLI scaffold equivalent,
|
|
46
|
+
e.g. `guard-kubectl-delete`) goes in `PLUGIN_ONLY_HOOKS` with a `reason` instead of the registry.
|
|
47
|
+
(Exception: the agent-side capture hooks `capture-learnings[-catchup|-stop]` are **not** profile-listed
|
|
48
|
+
— they're installed by the init-time `capture_mode` choice via `catalog/capture.yaml` +
|
|
49
|
+
`catalog._apply_capture_mode`. One script, three triggers, dispatched by an arg.)
|
|
46
50
|
- **Stack** (framework / database) → a **data change**: add an entry to `catalog/stacks.yaml`
|
|
47
51
|
(`label`, `overlay_rules`, optional `overlay_agents`, `skills`, `stack_dir`, `commands`) and create
|
|
48
52
|
`templates/stacks/<stack_dir>/rules/<name>.md` (+ `agents/` for a database). Mark not-yet-ready
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-kit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.23.0
|
|
4
4
|
Summary: Cookiecutter-style scaffolder for an autonomous Claude Code SDLC configuration (no app code, no Docker). Asks ordered questions and installs CLAUDE.md + .claude/ (rules, the chosen profile's agents/skills, hooks, artifact templates) + optional .mcp.json; run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates, working memory, and a self-improving learnings loop.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ajyadav013/claude-kit
|
|
6
6
|
Project-URL: Repository, https://github.com/ajyadav013/claude-kit
|
|
@@ -110,6 +110,12 @@ Then, inside any project you want the pipeline to manage:
|
|
|
110
110
|
/sdlc Add a CSV export button to the reports page
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
+
> **`/claude-kit:init` requires the Python CLI** (`pipx install claude-code-kit`, or `pip install
|
|
114
|
+
> claude-code-kit`) — it's what resolves your stack/profile/MCP catalog and records `init-options.json`
|
|
115
|
+
> for safe `upgrade`/`diff`. If the CLI isn't on PATH the command stops and tells you to install it
|
|
116
|
+
> rather than doing a partial install. (A degraded, no-resolution shell scaffolder is available only by
|
|
117
|
+
> explicitly setting `CLAUDE_KIT_BASIC=1`; `upgrade`/`diff` won't work against it.)
|
|
118
|
+
|
|
113
119
|
> `/sdlc` is a **project skill** installed by `init`, so it becomes available after the restart. The
|
|
114
120
|
> plugin also exposes `/claude-kit:sdlc <task>`, which works immediately (no restart needed).
|
|
115
121
|
|
|
@@ -83,6 +83,12 @@ Then, inside any project you want the pipeline to manage:
|
|
|
83
83
|
/sdlc Add a CSV export button to the reports page
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
+
> **`/claude-kit:init` requires the Python CLI** (`pipx install claude-code-kit`, or `pip install
|
|
87
|
+
> claude-code-kit`) — it's what resolves your stack/profile/MCP catalog and records `init-options.json`
|
|
88
|
+
> for safe `upgrade`/`diff`. If the CLI isn't on PATH the command stops and tells you to install it
|
|
89
|
+
> rather than doing a partial install. (A degraded, no-resolution shell scaffolder is available only by
|
|
90
|
+
> explicitly setting `CLAUDE_KIT_BASIC=1`; `upgrade`/`diff` won't work against it.)
|
|
91
|
+
|
|
86
92
|
> `/sdlc` is a **project skill** installed by `init`, so it becomes available after the restart. The
|
|
87
93
|
> plugin also exposes `/claude-kit:sdlc <task>`, which works immediately (no restart needed).
|
|
88
94
|
|
|
@@ -6,21 +6,35 @@ allowed-tools: Bash, Read, Glob
|
|
|
6
6
|
|
|
7
7
|
Install the claude-kit autonomous-SDLC configuration into the current project.
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**The Python CLI is required.** It runs the ordered prompts, resolves the stack/profile/MCP catalog,
|
|
10
10
|
installs overlay rules + agents, assembles `settings.json`, and records `init-options.json` for safe
|
|
11
|
-
upgrades). Check whether it's on PATH and use it, passing through
|
|
11
|
+
upgrades (`claude-kit upgrade` / `diff`). Check whether it's on PATH and use it, passing through
|
|
12
|
+
`$ARGUMENTS`:
|
|
12
13
|
|
|
13
14
|
```
|
|
14
15
|
command -v claude-kit >/dev/null 2>&1 && claude-kit init $ARGUMENTS \
|
|
15
|
-
|| { command -v ckit >/dev/null 2>&1 && ckit init $ARGUMENTS
|
|
16
|
+
|| { command -v ckit >/dev/null 2>&1 && ckit init $ARGUMENTS \
|
|
17
|
+
|| echo "CKIT_CLI_MISSING"; }
|
|
16
18
|
```
|
|
17
19
|
|
|
18
|
-
If
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
**If the output is `CKIT_CLI_MISSING`, STOP — do not scaffold anything.** Neither `claude-kit` nor
|
|
21
|
+
`ckit` is installed. Tell the user the CLI is required and how to install it, then have them re-run
|
|
22
|
+
`/claude-kit:init`. Do **not** silently fall back to a partial install:
|
|
23
|
+
|
|
24
|
+
- Recommended: `pipx install claude-code-kit`
|
|
25
|
+
- Or: `pip install claude-code-kit`
|
|
26
|
+
|
|
27
|
+
**Escape hatch (advanced, opt-in only).** A thin shell scaffolder exists for locked-down environments
|
|
28
|
+
where installing the CLI is impossible. It copies the full payload as a **superset** with **no**
|
|
29
|
+
stack/profile/MCP resolution, and `claude-kit upgrade` / `diff` will **not** work against it. Use it
|
|
30
|
+
**only** if the user has explicitly opted in by setting `CLAUDE_KIT_BASIC=1`:
|
|
21
31
|
|
|
22
32
|
```
|
|
23
|
-
|
|
33
|
+
if [ "${CLAUDE_KIT_BASIC:-0}" = "1" ]; then
|
|
34
|
+
bash "${CLAUDE_PLUGIN_ROOT}/scripts/init.sh" $ARGUMENTS
|
|
35
|
+
else
|
|
36
|
+
echo "set CLAUDE_KIT_BASIC=1 to use the degraded no-CLI scaffolder (the CLI is the supported path)"
|
|
37
|
+
fi
|
|
24
38
|
```
|
|
25
39
|
|
|
26
40
|
If `${CLAUDE_PLUGIN_ROOT}` is not set (running from a source checkout), locate `scripts/init.sh` in
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SessionStart": [
|
|
4
|
+
{
|
|
5
|
+
"matcher": "",
|
|
6
|
+
"hooks": [
|
|
7
|
+
{
|
|
8
|
+
"type": "command",
|
|
9
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/load-continuity.sh\""
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"type": "command",
|
|
13
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/load-learnings.sh\""
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"type": "command",
|
|
17
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/load-autonomy.sh\""
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "command",
|
|
21
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/capture-learnings.sh\" catchup"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"PreToolUse": [
|
|
27
|
+
{
|
|
28
|
+
"matcher": "Bash",
|
|
29
|
+
"hooks": [
|
|
30
|
+
{
|
|
31
|
+
"type": "command",
|
|
32
|
+
"command": "command -v jq >/dev/null 2>&1 || exit 0; CMD=$(jq -r '.tool_input.command'); if echo \"$CMD\" | grep -qE 'rm[[:space:]]+-[^[:space:]]*r[^[:space:]]*f'; then echo 'BLOCKED: rm -rf is disabled by claude-kit. Move to trash or delete specific paths explicitly.' >&2; exit 2; fi"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"type": "command",
|
|
36
|
+
"command": "command -v jq >/dev/null 2>&1 || exit 0; CMD=$(jq -r '.tool_input.command'); if echo \"$CMD\" | grep -qE 'git[[:space:]]+push.*[[:space:]:](main|master)([[:space:]]|$)'; then echo 'BLOCKED: refusing to push to main/master — use a feature branch and a PR.' >&2; exit 2; fi"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"type": "command",
|
|
40
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/guard-destructive-git.sh\""
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"type": "command",
|
|
44
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/guard-secrets.sh\""
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"type": "command",
|
|
48
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/guard-kubectl-delete.sh\""
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"matcher": "Edit|Write",
|
|
54
|
+
"hooks": [
|
|
55
|
+
{
|
|
56
|
+
"type": "command",
|
|
57
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/warn-shared-modules.sh\""
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"type": "command",
|
|
61
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/warn-llm-io.sh\""
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"type": "command",
|
|
65
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/warn-sensitive-files.sh\""
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"matcher": "Write",
|
|
71
|
+
"hooks": [
|
|
72
|
+
{
|
|
73
|
+
"type": "command",
|
|
74
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/validate-settings.sh\""
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"Stop": [
|
|
80
|
+
{
|
|
81
|
+
"matcher": "",
|
|
82
|
+
"hooks": [
|
|
83
|
+
{
|
|
84
|
+
"type": "command",
|
|
85
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/lint-fix.sh\""
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"type": "command",
|
|
89
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/type-check.sh\""
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
"SessionEnd": [
|
|
95
|
+
{
|
|
96
|
+
"matcher": "",
|
|
97
|
+
"hooks": [
|
|
98
|
+
{
|
|
99
|
+
"type": "command",
|
|
100
|
+
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/capture-learnings.sh\" end"
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "claude-code-kit"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.23.0"
|
|
8
8
|
description = "Cookiecutter-style scaffolder for an autonomous Claude Code SDLC configuration (no app code, no Docker). Asks ordered questions and installs CLAUDE.md + .claude/ (rules, the chosen profile's agents/skills, hooks, artifact templates) + optional .mcp.json; run /sdlc to drive spec → review → build → test → security → ship through profile-aware quality gates, working memory, and a self-improving learnings loop."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Generate (or --check) the two *static* hook files from the single ``hooks.py`` registry.
|
|
3
|
+
|
|
4
|
+
claude-kit ships hooks through three channels, but only one should ever be hand-maintained:
|
|
5
|
+
|
|
6
|
+
* the **installed** ``.claude/settings.json`` — built per-profile by ``hooks.build_settings`` at init;
|
|
7
|
+
* the auto-discovered **plugin** ``hooks/hooks.json`` (``${CLAUDE_PLUGIN_ROOT}`` paths);
|
|
8
|
+
* the thin no-pip **starter** ``templates/settings.json`` (``$CLAUDE_PROJECT_DIR`` paths).
|
|
9
|
+
|
|
10
|
+
The latter two used to be edited by hand and silently drifted from the registry (and each other).
|
|
11
|
+
This script regenerates both from ``claude_kit.hooks`` so the registry is the single source of truth.
|
|
12
|
+
|
|
13
|
+
Usage::
|
|
14
|
+
|
|
15
|
+
python scripts/gen_hooks.py # regenerate the two files in place
|
|
16
|
+
python scripts/gen_hooks.py --check # exit 1 if either file is out of sync (CI / tests)
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
import json
|
|
22
|
+
import sys
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
ROOT = Path(__file__).resolve().parent.parent
|
|
26
|
+
sys.path.insert(
|
|
27
|
+
0, str(ROOT / "src")
|
|
28
|
+
) # importable from a bare checkout (no editable install needed)
|
|
29
|
+
|
|
30
|
+
from claude_kit import hooks # noqa: E402
|
|
31
|
+
|
|
32
|
+
#: (path on disk, generator) for each static file derived from the registry.
|
|
33
|
+
TARGETS = [
|
|
34
|
+
(ROOT / "hooks" / "hooks.json", hooks.generate_plugin_hooks_json),
|
|
35
|
+
(ROOT / "templates" / "settings.json", hooks.generate_starter_settings),
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _render(doc: dict) -> str:
|
|
40
|
+
"""Canonical JSON form (2-space indent, literal Unicode, trailing newline) for both files."""
|
|
41
|
+
return json.dumps(doc, indent=2, ensure_ascii=False) + "\n"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def main(argv: list[str]) -> int:
|
|
45
|
+
check = "--check" in argv
|
|
46
|
+
drift: list[Path] = []
|
|
47
|
+
for path, generate in TARGETS:
|
|
48
|
+
want = _render(generate())
|
|
49
|
+
have = path.read_text(encoding="utf-8") if path.is_file() else ""
|
|
50
|
+
if check:
|
|
51
|
+
if want != have:
|
|
52
|
+
drift.append(path)
|
|
53
|
+
else:
|
|
54
|
+
path.write_text(want, encoding="utf-8")
|
|
55
|
+
print(f"wrote {path.relative_to(ROOT)}")
|
|
56
|
+
if check:
|
|
57
|
+
if drift:
|
|
58
|
+
print(
|
|
59
|
+
"hooks drift: FAIL — run `python scripts/gen_hooks.py` to regenerate:"
|
|
60
|
+
)
|
|
61
|
+
for path in drift:
|
|
62
|
+
print(f" - {path.relative_to(ROOT)}")
|
|
63
|
+
return 1
|
|
64
|
+
print("hooks: in sync with the registry")
|
|
65
|
+
return 0
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
if __name__ == "__main__":
|
|
69
|
+
sys.exit(main(sys.argv[1:]))
|
|
@@ -40,6 +40,16 @@ done
|
|
|
40
40
|
|
|
41
41
|
DEST="$TARGET/.claude"
|
|
42
42
|
mkdir -p "$DEST"
|
|
43
|
+
|
|
44
|
+
# Loud warning: this is the degraded, no-pip path. The full experience is the Python CLI.
|
|
45
|
+
echo "================================================================" >&2
|
|
46
|
+
echo "claude-kit BASIC scaffolder (no Python CLI)" >&2
|
|
47
|
+
echo " SUPERSET install: NO stack / profile / MCP resolution." >&2
|
|
48
|
+
echo " 'claude-kit upgrade' and 'diff' will NOT work against it." >&2
|
|
49
|
+
echo " For the full catalog-driven experience + safe upgrades:" >&2
|
|
50
|
+
echo " pipx install claude-code-kit (then re-run /claude-kit:init)" >&2
|
|
51
|
+
echo "================================================================" >&2
|
|
52
|
+
|
|
43
53
|
echo "claude-kit: scaffolding into $TARGET"
|
|
44
54
|
|
|
45
55
|
copy_root_file() { # src, dest, label
|
|
@@ -60,6 +60,19 @@ def _script_entry(name: str, arg: str = "") -> dict[str, str]:
|
|
|
60
60
|
return {"type": "command", "command": command}
|
|
61
61
|
|
|
62
62
|
|
|
63
|
+
def _plugin_entry(name: str, arg: str = "") -> dict[str, str]:
|
|
64
|
+
"""Build a settings.json command entry that runs a hook script from the plugin root.
|
|
65
|
+
|
|
66
|
+
The plugin variant of :func:`_script_entry` — Claude Code exposes the plugin's own directory via
|
|
67
|
+
``${CLAUDE_PLUGIN_ROOT}``, so the auto-discovered ``hooks/hooks.json`` references scripts there
|
|
68
|
+
rather than in a scaffolded project's ``.claude/hooks/``.
|
|
69
|
+
"""
|
|
70
|
+
command = f'bash "${{CLAUDE_PLUGIN_ROOT}}/hooks/scripts/{name}"'
|
|
71
|
+
if arg:
|
|
72
|
+
command += f" {arg}"
|
|
73
|
+
return {"type": "command", "command": command}
|
|
74
|
+
|
|
75
|
+
|
|
63
76
|
#: The canonical registry. Order here is the order hooks appear in assembled settings.json.
|
|
64
77
|
#: Each value: ``event``, ``matcher``, ``entry`` (settings.json hook object), and ``script``
|
|
65
78
|
#: (basename under payload ``hooks/scripts/`` to copy, or ``None`` for inline/prompt hooks).
|
|
@@ -180,21 +193,97 @@ HOOK_REGISTRY: dict[str, dict[str, Any]] = {
|
|
|
180
193
|
"matcher": "",
|
|
181
194
|
"entry": _script_entry("capture-learnings.sh", "end"),
|
|
182
195
|
"script": "capture-learnings.sh",
|
|
196
|
+
"arg": "end",
|
|
183
197
|
},
|
|
184
198
|
"capture-learnings-catchup": {
|
|
185
199
|
"event": "SessionStart",
|
|
186
200
|
"matcher": "",
|
|
187
201
|
"entry": _script_entry("capture-learnings.sh", "catchup"),
|
|
188
202
|
"script": "capture-learnings.sh",
|
|
203
|
+
"arg": "catchup",
|
|
189
204
|
},
|
|
190
205
|
"capture-learnings-stop": {
|
|
191
206
|
"event": "Stop",
|
|
192
207
|
"matcher": "",
|
|
193
208
|
"entry": _script_entry("capture-learnings.sh", "stop"),
|
|
194
209
|
"script": "capture-learnings.sh",
|
|
210
|
+
"arg": "stop",
|
|
195
211
|
},
|
|
196
212
|
}
|
|
197
213
|
|
|
214
|
+
#: Hooks the plugin ships but the pip CLI does NOT — the single declared exception to "the registry
|
|
215
|
+
#: is the source of truth". These run from the auto-discovered ``hooks/hooks.json`` only; they are
|
|
216
|
+
#: deliberately absent from ``HOOK_REGISTRY`` / ``catalog/profiles.yaml`` so ``claude-kit init`` output
|
|
217
|
+
#: is unchanged. Each entry carries a ``reason`` so the divergence is documented data, not an accident.
|
|
218
|
+
PLUGIN_ONLY_HOOKS: dict[str, dict[str, Any]] = {
|
|
219
|
+
"guard-kubectl-delete": {
|
|
220
|
+
"event": "PreToolUse",
|
|
221
|
+
"matcher": "Bash",
|
|
222
|
+
"script": "guard-kubectl-delete.sh",
|
|
223
|
+
"arg": "",
|
|
224
|
+
"reason": (
|
|
225
|
+
"Blocks destructive `kubectl delete` from the agent's Bash tool. Plugin-only by design: "
|
|
226
|
+
"intentionally not added to the CLI scaffold registry / profiles, so `claude-kit init` "
|
|
227
|
+
"output is unchanged (see PR #25)."
|
|
228
|
+
),
|
|
229
|
+
},
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
#: Which registry hooks each *static* generated file ships (the dynamic per-profile installed
|
|
233
|
+
#: settings.json comes from the profile's hook list instead). Declaring channel membership as data —
|
|
234
|
+
#: rather than hand-editing two JSON files — is what keeps the plugin file and the no-pip starter from
|
|
235
|
+
#: silently drifting apart; ``scripts/gen_hooks.py`` regenerates both and a drift test enforces it.
|
|
236
|
+
#:
|
|
237
|
+
#: The plugin file (hooks/hooks.json, always-on for any project using the plugin) carries the broad
|
|
238
|
+
#: recommended set plus the plugin-only guards above.
|
|
239
|
+
PLUGIN_HOOK_IDS: frozenset[str] = frozenset(
|
|
240
|
+
{
|
|
241
|
+
"load-continuity",
|
|
242
|
+
"load-learnings",
|
|
243
|
+
"load-autonomy",
|
|
244
|
+
"guard-rm-rf",
|
|
245
|
+
"guard-push-main",
|
|
246
|
+
"guard-destructive-git",
|
|
247
|
+
"guard-commit-secrets",
|
|
248
|
+
"warn-shared-modules",
|
|
249
|
+
"warn-llm-io",
|
|
250
|
+
"warn-sensitive-files",
|
|
251
|
+
"validate-settings",
|
|
252
|
+
"lint-fix",
|
|
253
|
+
"type-check",
|
|
254
|
+
"capture-learnings",
|
|
255
|
+
"capture-learnings-catchup",
|
|
256
|
+
}
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
#: The thin no-pip starter (templates/settings.json, copied by scripts/init.sh) ships a smaller subset
|
|
260
|
+
#: — the degraded fallback path keeps a minimal, broadly-safe set rather than the full plugin roster.
|
|
261
|
+
STARTER_HOOK_IDS: frozenset[str] = frozenset(
|
|
262
|
+
{
|
|
263
|
+
"load-continuity",
|
|
264
|
+
"load-learnings",
|
|
265
|
+
"guard-rm-rf",
|
|
266
|
+
"guard-push-main",
|
|
267
|
+
"warn-shared-modules",
|
|
268
|
+
"lint-fix",
|
|
269
|
+
"type-check",
|
|
270
|
+
"capture-learnings",
|
|
271
|
+
"capture-learnings-catchup",
|
|
272
|
+
}
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
#: $comment headers for the two channels (kept here so generation is the single source).
|
|
276
|
+
_INSTALLED_COMMENT = (
|
|
277
|
+
"Claude Code settings installed by claude-kit. Hooks wire the SDLC working-memory, "
|
|
278
|
+
"learnings, guardrails, and quality checks to scripts in .claude/hooks/. Personal "
|
|
279
|
+
"overrides belong in .claude/settings.local.json (gitignored)."
|
|
280
|
+
)
|
|
281
|
+
_STARTER_COMMENT = (
|
|
282
|
+
"Recommended Claude Code settings installed by claude-kit. Hooks wire the SDLC working-memory, "
|
|
283
|
+
"learnings, guardrails, and quality checks to the scripts in .claude/hooks/. Merge with your "
|
|
284
|
+
"existing settings.json as needed."
|
|
285
|
+
)
|
|
286
|
+
|
|
198
287
|
#: Event ordering for a stable, readable settings.json.
|
|
199
288
|
_EVENT_ORDER = (
|
|
200
289
|
"SessionStart",
|
|
@@ -221,42 +310,84 @@ def scripts_for(hook_ids: list[str]) -> list[str]:
|
|
|
221
310
|
return sorted(set(out))
|
|
222
311
|
|
|
223
312
|
|
|
224
|
-
def
|
|
225
|
-
"""
|
|
313
|
+
def _hooks_block(specs: list[tuple[str, str, dict[str, Any]]]) -> dict[str, Any]:
|
|
314
|
+
"""Group ``(event, matcher, entry)`` specs into the ``{EVENT: [{matcher, hooks}]}`` schema.
|
|
315
|
+
|
|
316
|
+
Order is preserved from ``specs`` (callers pass them in registry order), with events sorted by
|
|
317
|
+
:data:`_EVENT_ORDER`. This is the one place the settings/hooks schema is assembled, shared by the
|
|
318
|
+
installed-settings, plugin, and starter generators so all three stay byte-identical in shape.
|
|
319
|
+
"""
|
|
320
|
+
grouped: dict[str, dict[str, list[dict[str, Any]]]] = {}
|
|
321
|
+
for event, matcher, entry in specs:
|
|
322
|
+
grouped.setdefault(event, {}).setdefault(matcher, []).append(entry)
|
|
323
|
+
ordered_events = [e for e in _EVENT_ORDER if e in grouped] + [
|
|
324
|
+
e for e in grouped if e not in _EVENT_ORDER
|
|
325
|
+
]
|
|
326
|
+
return {
|
|
327
|
+
event: [
|
|
328
|
+
{"matcher": matcher, "hooks": entries}
|
|
329
|
+
for matcher, entries in grouped[event].items()
|
|
330
|
+
]
|
|
331
|
+
for event in ordered_events
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
def build_settings(
|
|
336
|
+
hook_ids: list[str], *, comment: str | None = None
|
|
337
|
+
) -> dict[str, Any]:
|
|
338
|
+
"""Assemble an installed ``.claude/settings.json`` document from the selected hook ids.
|
|
226
339
|
|
|
227
340
|
Groups the selected hooks by event and matcher, preserving registry order, into the schema
|
|
228
|
-
Claude Code expects (``{"hooks": {EVENT: [{"matcher": …, "hooks": [entry, …]}]}}``).
|
|
341
|
+
Claude Code expects (``{"hooks": {EVENT: [{"matcher": …, "hooks": [entry, …]}]}}``). Uses the
|
|
342
|
+
project-relative script paths (``$CLAUDE_PROJECT_DIR/.claude/hooks/…``).
|
|
229
343
|
|
|
230
344
|
Args:
|
|
231
345
|
hook_ids: Hook ids to enable.
|
|
346
|
+
comment: Optional ``$comment`` header (defaults to the installed-settings blurb).
|
|
232
347
|
|
|
233
348
|
Returns:
|
|
234
349
|
A JSON-serialisable settings mapping (always includes an explanatory ``$comment``).
|
|
235
350
|
"""
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
grouped.setdefault(spec["event"], {}).setdefault(spec["matcher"], []).append(
|
|
242
|
-
spec["entry"]
|
|
351
|
+
specs = [
|
|
352
|
+
(
|
|
353
|
+
HOOK_REGISTRY[hid]["event"],
|
|
354
|
+
HOOK_REGISTRY[hid]["matcher"],
|
|
355
|
+
HOOK_REGISTRY[hid]["entry"],
|
|
243
356
|
)
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
ordered_events = [e for e in _EVENT_ORDER if e in grouped] + [
|
|
247
|
-
e for e in grouped if e not in _EVENT_ORDER
|
|
357
|
+
for hid in HOOK_REGISTRY
|
|
358
|
+
if hid in set(hook_ids)
|
|
248
359
|
]
|
|
249
|
-
for event in ordered_events:
|
|
250
|
-
hooks_block[event] = [
|
|
251
|
-
{"matcher": matcher, "hooks": entries}
|
|
252
|
-
for matcher, entries in grouped[event].items()
|
|
253
|
-
]
|
|
254
|
-
|
|
255
360
|
return {
|
|
256
|
-
"$comment":
|
|
257
|
-
|
|
258
|
-
"learnings, guardrails, and quality checks to scripts in .claude/hooks/. Personal "
|
|
259
|
-
"overrides belong in .claude/settings.local.json (gitignored)."
|
|
260
|
-
),
|
|
261
|
-
"hooks": hooks_block,
|
|
361
|
+
"$comment": comment or _INSTALLED_COMMENT,
|
|
362
|
+
"hooks": _hooks_block(specs),
|
|
262
363
|
}
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
def generate_starter_settings() -> dict[str, Any]:
|
|
367
|
+
"""Generate the thin no-pip starter ``templates/settings.json`` from :data:`STARTER_HOOK_IDS`."""
|
|
368
|
+
return build_settings(sorted(STARTER_HOOK_IDS), comment=_STARTER_COMMENT)
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
def generate_plugin_hooks_json() -> dict[str, Any]:
|
|
372
|
+
"""Generate the auto-discovered plugin ``hooks/hooks.json`` from the registry.
|
|
373
|
+
|
|
374
|
+
Ships :data:`PLUGIN_HOOK_IDS` (rebuilt with ``${CLAUDE_PLUGIN_ROOT}`` script paths; inline guard
|
|
375
|
+
commands are path-independent and reused verbatim) plus :data:`PLUGIN_ONLY_HOOKS`, which are
|
|
376
|
+
appended after the registry hooks within their event/matcher group. No ``$comment`` (the plugin
|
|
377
|
+
loader reads this as a hooks fragment).
|
|
378
|
+
"""
|
|
379
|
+
specs: list[tuple[str, str, dict[str, Any]]] = []
|
|
380
|
+
for hid in HOOK_REGISTRY:
|
|
381
|
+
if hid not in PLUGIN_HOOK_IDS:
|
|
382
|
+
continue
|
|
383
|
+
spec = HOOK_REGISTRY[hid]
|
|
384
|
+
if spec["script"]:
|
|
385
|
+
entry = _plugin_entry(spec["script"], spec.get("arg", ""))
|
|
386
|
+
else:
|
|
387
|
+
entry = spec["entry"] # inline command — no path to rewrite
|
|
388
|
+
specs.append((spec["event"], spec["matcher"], entry))
|
|
389
|
+
for po in PLUGIN_ONLY_HOOKS.values():
|
|
390
|
+
specs.append(
|
|
391
|
+
(po["event"], po["matcher"], _plugin_entry(po["script"], po.get("arg", "")))
|
|
392
|
+
)
|
|
393
|
+
return {"hooks": _hooks_block(specs)}
|