codeforge-dev 1.12.0 → 1.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/CHANGELOG.md +175 -2
- package/.devcontainer/CLAUDE.md +61 -268
- package/.devcontainer/README.md +17 -9
- package/.devcontainer/config/defaults/ccstatusline-settings.json +147 -0
- package/.devcontainer/config/defaults/main-system-prompt.md +6 -1
- package/.devcontainer/config/defaults/rules/spec-workflow.md +1 -55
- package/.devcontainer/config/defaults/rules/workspace-scope.md +13 -4
- package/.devcontainer/config/defaults/settings.json +5 -3
- package/.devcontainer/config/file-manifest.json +14 -0
- package/.devcontainer/devcontainer.json +32 -7
- package/.devcontainer/docs/optional-features.md +0 -65
- package/.devcontainer/docs/plugins.md +38 -23
- package/.devcontainer/features/ast-grep/devcontainer-feature.json +0 -1
- package/.devcontainer/features/biome/install.sh +13 -0
- package/.devcontainer/features/ccburn/devcontainer-feature.json +0 -1
- package/.devcontainer/features/ccms/devcontainer-feature.json +0 -1
- package/.devcontainer/features/ccms/install.sh +1 -1
- package/.devcontainer/features/ccstatusline/devcontainer-feature.json +0 -1
- package/.devcontainer/features/ccstatusline/install.sh +17 -115
- package/.devcontainer/features/ccusage/devcontainer-feature.json +0 -1
- package/.devcontainer/features/chromaterm/README.md +42 -0
- package/.devcontainer/features/chromaterm/chromaterm.yml +35 -0
- package/.devcontainer/features/chromaterm/devcontainer-feature.json +22 -0
- package/.devcontainer/features/chromaterm/install.sh +113 -0
- package/.devcontainer/features/claude-monitor/devcontainer-feature.json +0 -1
- package/.devcontainer/features/claude-session-dashboard/README.md +40 -0
- package/.devcontainer/features/claude-session-dashboard/devcontainer-feature.json +34 -0
- package/.devcontainer/features/claude-session-dashboard/install.sh +172 -0
- package/.devcontainer/features/kitty-terminfo/README.md +32 -0
- package/.devcontainer/features/kitty-terminfo/devcontainer-feature.json +13 -0
- package/.devcontainer/features/kitty-terminfo/install.sh +72 -0
- package/.devcontainer/features/lsp-servers/devcontainer-feature.json +0 -1
- package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +0 -1
- package/.devcontainer/features/shellcheck/install.sh +6 -2
- package/.devcontainer/features/tree-sitter/devcontainer-feature.json +0 -1
- package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +48 -59
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/AGENT-REDIRECTION.md +7 -12
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/README.md +197 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/REVIEW-RUBRIC.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/architect.md +3 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/bash-exec.md +3 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/claude-guide.md +5 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/debug-logs.md +7 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/dependency-analyst.md +6 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/doc-writer.md +4 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/explorer.md +4 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/generalist.md +10 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/git-archaeologist.md +5 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/migrator.md +4 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/perf-profiler.md +4 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/refactorer.md +5 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/researcher.md +6 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/security-auditor.md +5 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/spec-writer.md +3 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/statusline-config.md +4 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/test-writer.md +4 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/hooks/hooks.json +51 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/guard-readonly-bash.py +2 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/inject-cwd.py +7 -4
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/redirect-builtin-agents.py +17 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/scripts/task-completed-check.py +166 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/scripts/teammate-idle-check.py +81 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/verify-no-regression.py +14 -10
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/verify-tests-pass.py +2 -14
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/README.md +17 -31
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/hooks/hooks.json +5 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → auto-code-quality}/scripts/advisory-test-runner.py +9 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/codeforge-lsp/README.md +28 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/README.md +28 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py +2 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/README.md +28 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/hooks/hooks.json +0 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/README.md +28 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected-bash.py +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +2 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/README.md +140 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/hooks/hooks.json +33 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → session-context}/scripts/commit-reminder.py +3 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → session-context}/scripts/git-state-injector.py +18 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → session-context}/scripts/todo-harvester.py +9 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/README.md +158 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/hooks/hooks.json +16 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/scripts/skill-suggester.py +189 -100
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/api-design/SKILL.md +9 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/ast-grep-patterns/SKILL.md +7 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-agent-sdk/SKILL.md +8 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-code-headless/SKILL.md +8 -9
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/debugging/SKILL.md +11 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/dependency-management/SKILL.md +10 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker/SKILL.md +8 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker-py/SKILL.md +9 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/documentation-patterns/SKILL.md +7 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/SKILL.md +9 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/git-forensics/SKILL.md +11 -9
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/migration-patterns/SKILL.md +7 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/performance-profiling/SKILL.md +10 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/pydantic-ai/SKILL.md +8 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/refactoring-patterns/SKILL.md +9 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/security-checklist/SKILL.md +9 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/skill-building/SKILL.md +7 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/SKILL.md +9 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/SKILL.md +7 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/team/SKILL.md +271 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/testing/SKILL.md +10 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/README.md +192 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/hooks/hooks.json +16 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/scripts/spec-reminder.py +3 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-build/SKILL.md +9 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-check/SKILL.md +10 -5
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-init/SKILL.md +8 -4
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-init/references/roadmap-template.md +33 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-new/SKILL.md +8 -4
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-refine/SKILL.md +10 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-review/SKILL.md +10 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-update/SKILL.md +10 -5
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/specification-writing/SKILL.md +9 -9
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/plugin.json +1 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/README.md +28 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/hooks/hooks.json +16 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → ticket-workflow}/scripts/ticket-linker.py +9 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/README.md +104 -32
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/hooks/hooks.json +49 -3
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py +269 -58
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/inject-workspace-cwd.py +44 -0
- package/.devcontainer/scripts/setup-aliases.sh +13 -5
- package/.devcontainer/scripts/setup-config.sh +1 -0
- package/.devcontainer/scripts/setup-projects.sh +1 -1
- package/README.md +5 -5
- package/package.json +6 -2
- package/setup.js +3 -2
- package/.devcontainer/.env +0 -33
- package/.devcontainer/features/README.md +0 -126
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/.claude-plugin/plugin.json +0 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/README.md +0 -81
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/hooks/hooks.json +0 -17
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/__pycache__/format-on-stop.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-on-stop.py +0 -297
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/.claude-plugin/plugin.json +0 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/README.md +0 -92
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/hooks/hooks.json +0 -17
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/__pycache__/lint-file.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/lint-file.py +0 -536
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/.claude-plugin/plugin.json +0 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/README.md +0 -250
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/hooks/hooks.json +0 -112
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/advisory-test-runner.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/collect-edited-files.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/commit-reminder.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/git-state-injector.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/guard-readonly-bash.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/redirect-builtin-agents.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/skill-suggester.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/syntax-validator.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/ticket-linker.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/todo-harvester.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/verify-no-regression.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/verify-tests-pass.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/collect-edited-files.py +0 -46
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/syntax-validator.py +0 -146
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/__pycache__/block-dangerous.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/__pycache__/guard-protected.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/system-prompt.md +0 -184
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/__pycache__/guard-workspace-scope.cpython-314.pyc +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive/.claude-plugin/commands/debug.md → agent-system/skills/debug/SKILL.md} +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/api-design/references/error-handling.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/api-design/references/rest-conventions.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/ast-grep-patterns/references/language-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-agent-sdk/references/sdk-typescript-reference.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-code-headless/references/cli-flags-and-output.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-code-headless/references/sdk-and-mcp.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/debugging/references/error-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/debugging/references/log-locations.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/dependency-management/references/ecosystem-commands.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/dependency-management/references/license-compliance.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker/references/compose-services.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker/references/dockerfile-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker-py/references/container-lifecycle.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker-py/references/resources-and-security.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/documentation-patterns/references/api-doc-templates.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/documentation-patterns/references/docstring-formats.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/references/middleware-and-lifespan.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/references/pydantic-models.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/references/routing-and-dependencies.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/references/sse-and-streaming.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/git-forensics/references/advanced-commands.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/git-forensics/references/investigation-playbooks.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/migration-patterns/references/javascript-migrations.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/migration-patterns/references/python-migrations.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/performance-profiling/references/interpreting-results.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/performance-profiling/references/tool-commands.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/pydantic-ai/references/agents-and-tools.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/pydantic-ai/references/models-and-streaming.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/refactoring-patterns/references/safe-transformations.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/refactoring-patterns/references/smell-catalog.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/security-checklist/references/owasp-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/security-checklist/references/secrets-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/skill-building/references/cross-vendor-principles.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/skill-building/references/patterns-and-antipatterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/skill-building/references/skill-authoring-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/references/advanced-queries.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/references/javascript-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/references/python-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/references/schema-and-pragmas.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/ai-sdk-svelte.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/component-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/layercake.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/migration-guide.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/runes-and-reactivity.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/spa-and-routing.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/svelte-dnd-action.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/testing/references/fastapi-testing.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/testing/references/svelte-testing.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-build/references/review-checklist.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-init/references/backlog-template.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-init/references/milestones-template.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-new/references/template.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/specification-writing/references/criteria-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/specification-writing/references/ears-templates.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/{.claude-plugin/commands/ticket/357/200/272create-pr.md" → skills/ticketcreate-pr/SKILL.md} +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/{.claude-plugin/commands/ticket/357/200/272new.md" → skills/ticketnew/SKILL.md} +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/{.claude-plugin/commands/ticket/357/200/272review-commit.md" → skills/ticketreview-commit/SKILL.md} +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/{.claude-plugin/commands/ticket/357/200/272work.md" → skills/ticketwork/SKILL.md} +0 -0
|
@@ -50,45 +50,31 @@ Biome is resolved in this order:
|
|
|
50
50
|
|
|
51
51
|
## Installation
|
|
52
52
|
|
|
53
|
-
###
|
|
53
|
+
### CodeForge DevContainer
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
Pre-installed and activated automatically — no setup needed.
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
your-marketplace/
|
|
59
|
-
├── .claude-plugin/
|
|
60
|
-
│ └── marketplace.json
|
|
61
|
-
└── plugins/
|
|
62
|
-
└── auto-code-quality/ ← this directory
|
|
63
|
-
```
|
|
57
|
+
### From GitHub
|
|
64
58
|
|
|
65
|
-
|
|
59
|
+
Use this plugin in any Claude Code setup:
|
|
66
60
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
```json
|
|
70
|
-
{
|
|
71
|
-
"name": "auto-code-quality",
|
|
72
|
-
"description": "Self-contained code quality: auto-format + auto-lint edited files",
|
|
73
|
-
"version": "1.0.0",
|
|
74
|
-
"source": "./plugins/auto-code-quality",
|
|
75
|
-
"category": "development"
|
|
76
|
-
}
|
|
77
|
-
```
|
|
61
|
+
1. Clone the [CodeForge](https://github.com/AnExiledDev/CodeForge) repository:
|
|
78
62
|
|
|
79
|
-
|
|
63
|
+
```bash
|
|
64
|
+
git clone https://github.com/AnExiledDev/CodeForge.git
|
|
65
|
+
```
|
|
80
66
|
|
|
81
|
-
|
|
67
|
+
2. Enable the plugin in your `.claude/settings.json`:
|
|
82
68
|
|
|
83
|
-
```json
|
|
84
|
-
{
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
```
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"enabledPlugins": {
|
|
72
|
+
"auto-code-quality@<clone-path>/.devcontainer/plugins/devs-marketplace": true
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
90
76
|
|
|
91
|
-
Replace
|
|
77
|
+
Replace `<clone-path>` with the absolute path to your CodeForge clone.
|
|
92
78
|
|
|
93
79
|
## How It Works
|
|
94
80
|
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
],
|
|
21
21
|
"Stop": [
|
|
22
22
|
{
|
|
23
|
-
"matcher": "",
|
|
24
23
|
"hooks": [
|
|
25
24
|
{
|
|
26
25
|
"type": "command",
|
|
@@ -31,6 +30,11 @@
|
|
|
31
30
|
"type": "command",
|
|
32
31
|
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/lint-file.py",
|
|
33
32
|
"timeout": 60
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"type": "command",
|
|
36
|
+
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/advisory-test-runner.py",
|
|
37
|
+
"timeout": 20
|
|
34
38
|
}
|
|
35
39
|
]
|
|
36
40
|
}
|
|
@@ -4,11 +4,11 @@ Advisory test runner — Stop hook that injects test results as context.
|
|
|
4
4
|
|
|
5
5
|
Reads the list of files edited this session (written by collect-edited-files.py),
|
|
6
6
|
maps them to affected test files, and runs only those tests. Skips entirely
|
|
7
|
-
if no files were edited. Results are returned as
|
|
8
|
-
|
|
7
|
+
if no files were edited. Results are returned as systemMessage (pass/timeout) or decision/reason
|
|
8
|
+
block (failure) so Claude acts on test failures before finishing.
|
|
9
9
|
|
|
10
10
|
Reads hook input from stdin (JSON). Returns JSON on stdout.
|
|
11
|
-
Always exits 0
|
|
11
|
+
Always exits 0. Failures use decision: "block" to prevent stopping.
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
14
|
import json
|
|
@@ -310,9 +310,7 @@ def main():
|
|
|
310
310
|
)
|
|
311
311
|
except subprocess.TimeoutExpired:
|
|
312
312
|
json.dump(
|
|
313
|
-
{
|
|
314
|
-
"additionalContext": f"[Tests] {framework} timed out after {TIMEOUT_SECONDS}s"
|
|
315
|
-
},
|
|
313
|
+
{"systemMessage": f"[Tests] {framework} timed out after {TIMEOUT_SECONDS}s"},
|
|
316
314
|
sys.stdout,
|
|
317
315
|
)
|
|
318
316
|
sys.exit(0)
|
|
@@ -323,7 +321,7 @@ def main():
|
|
|
323
321
|
|
|
324
322
|
if result.returncode == 0:
|
|
325
323
|
json.dump(
|
|
326
|
-
{"
|
|
324
|
+
{"systemMessage": f"[Tests] All tests passed ({framework})"},
|
|
327
325
|
sys.stdout,
|
|
328
326
|
)
|
|
329
327
|
sys.exit(0)
|
|
@@ -337,7 +335,10 @@ def main():
|
|
|
337
335
|
output = "...(truncated)\n" + "\n".join(lines[-30:])
|
|
338
336
|
|
|
339
337
|
json.dump(
|
|
340
|
-
{
|
|
338
|
+
{
|
|
339
|
+
"decision": "block",
|
|
340
|
+
"reason": f"[Tests] Some tests FAILED ({framework}):\n{output}",
|
|
341
|
+
},
|
|
341
342
|
sys.stdout,
|
|
342
343
|
)
|
|
343
344
|
sys.exit(0)
|
|
@@ -20,6 +20,34 @@ The plugin uses the `lspServers` field in `plugin.json` to declare server config
|
|
|
20
20
|
|
|
21
21
|
Each server maps file extensions to language identifiers. When Claude Code opens a file matching a registered extension, it routes it to the corresponding LSP server for diagnostics, completions, and other language features.
|
|
22
22
|
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
### CodeForge DevContainer
|
|
26
|
+
|
|
27
|
+
Pre-installed and activated automatically — no setup needed.
|
|
28
|
+
|
|
29
|
+
### From GitHub
|
|
30
|
+
|
|
31
|
+
Use this plugin in any Claude Code setup:
|
|
32
|
+
|
|
33
|
+
1. Clone the [CodeForge](https://github.com/AnExiledDev/CodeForge) repository:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git clone https://github.com/AnExiledDev/CodeForge.git
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. Enable the plugin in your `.claude/settings.json`:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"enabledPlugins": {
|
|
44
|
+
"codeforge-lsp@<clone-path>/.devcontainer/plugins/devs-marketplace": true
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Replace `<clone-path>` with the absolute path to your CodeForge clone.
|
|
50
|
+
|
|
23
51
|
## Plugin Structure
|
|
24
52
|
|
|
25
53
|
```
|
|
@@ -53,6 +53,34 @@ Claude calls the Bash tool
|
|
|
53
53
|
|
|
54
54
|
The hook has a 5-second timeout. If the script takes longer, Claude Code proceeds with the command.
|
|
55
55
|
|
|
56
|
+
## Installation
|
|
57
|
+
|
|
58
|
+
### CodeForge DevContainer
|
|
59
|
+
|
|
60
|
+
Pre-installed and activated automatically — no setup needed.
|
|
61
|
+
|
|
62
|
+
### From GitHub
|
|
63
|
+
|
|
64
|
+
Use this plugin in any Claude Code setup:
|
|
65
|
+
|
|
66
|
+
1. Clone the [CodeForge](https://github.com/AnExiledDev/CodeForge) repository:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
git clone https://github.com/AnExiledDev/CodeForge.git
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
2. Enable the plugin in your `.claude/settings.json`:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"enabledPlugins": {
|
|
77
|
+
"dangerous-command-blocker@<clone-path>/.devcontainer/plugins/devs-marketplace": true
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Replace `<clone-path>` with the absolute path to your CodeForge clone.
|
|
83
|
+
|
|
56
84
|
## Plugin Structure
|
|
57
85
|
|
|
58
86
|
```
|
|
@@ -116,8 +116,8 @@ def main():
|
|
|
116
116
|
is_dangerous, message = check_command(command)
|
|
117
117
|
|
|
118
118
|
if is_dangerous:
|
|
119
|
-
# Output error
|
|
120
|
-
print(
|
|
119
|
+
# Output error to stderr (exit 2 ignores stdout)
|
|
120
|
+
print(message, file=sys.stderr)
|
|
121
121
|
sys.exit(2)
|
|
122
122
|
|
|
123
123
|
# Allow command to proceed
|
|
@@ -25,6 +25,34 @@ Claude stops responding (Stop event)
|
|
|
25
25
|
|
|
26
26
|
The hook has a 5-second timeout. The plugin contains no scripts of its own — it delegates entirely to the `claude-notify` binary.
|
|
27
27
|
|
|
28
|
+
## Installation
|
|
29
|
+
|
|
30
|
+
### CodeForge DevContainer
|
|
31
|
+
|
|
32
|
+
Pre-installed and activated automatically — no setup needed.
|
|
33
|
+
|
|
34
|
+
### From GitHub
|
|
35
|
+
|
|
36
|
+
Use this plugin in any Claude Code setup:
|
|
37
|
+
|
|
38
|
+
1. Clone the [CodeForge](https://github.com/AnExiledDev/CodeForge) repository:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
git clone https://github.com/AnExiledDev/CodeForge.git
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
2. Enable the plugin in your `.claude/settings.json`:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"enabledPlugins": {
|
|
49
|
+
"notify-hook@<clone-path>/.devcontainer/plugins/devs-marketplace": true
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Replace `<clone-path>` with the absolute path to your CodeForge clone.
|
|
55
|
+
|
|
28
56
|
## Plugin Structure
|
|
29
57
|
|
|
30
58
|
```
|
|
@@ -66,6 +66,34 @@ The Bash guard parses commands for write-indicating patterns and extracts the ta
|
|
|
66
66
|
|
|
67
67
|
Both hooks have a 5-second timeout.
|
|
68
68
|
|
|
69
|
+
## Installation
|
|
70
|
+
|
|
71
|
+
### CodeForge DevContainer
|
|
72
|
+
|
|
73
|
+
Pre-installed and activated automatically — no setup needed.
|
|
74
|
+
|
|
75
|
+
### From GitHub
|
|
76
|
+
|
|
77
|
+
Use this plugin in any Claude Code setup:
|
|
78
|
+
|
|
79
|
+
1. Clone the [CodeForge](https://github.com/AnExiledDev/CodeForge) repository:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
git clone https://github.com/AnExiledDev/CodeForge.git
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
2. Enable the plugin in your `.claude/settings.json`:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"enabledPlugins": {
|
|
90
|
+
"protected-files-guard@<clone-path>/.devcontainer/plugins/devs-marketplace": true
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Replace `<clone-path>` with the absolute path to your CodeForge clone.
|
|
96
|
+
|
|
69
97
|
## Plugin Structure
|
|
70
98
|
|
|
71
99
|
```
|
|
@@ -104,7 +104,7 @@ def main():
|
|
|
104
104
|
for target in targets:
|
|
105
105
|
is_protected, message = check_path(target)
|
|
106
106
|
if is_protected:
|
|
107
|
-
print(
|
|
107
|
+
print(f"{message} (via bash command)", file=sys.stderr)
|
|
108
108
|
sys.exit(2)
|
|
109
109
|
|
|
110
110
|
sys.exit(0)
|
|
@@ -89,8 +89,8 @@ def main():
|
|
|
89
89
|
is_protected, message = check_path(file_path)
|
|
90
90
|
|
|
91
91
|
if is_protected:
|
|
92
|
-
# Output error
|
|
93
|
-
print(
|
|
92
|
+
# Output error to stderr (exit 2 ignores stdout)
|
|
93
|
+
print(message, file=sys.stderr)
|
|
94
94
|
sys.exit(2)
|
|
95
95
|
|
|
96
96
|
# Allow edit to proceed
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# session-context
|
|
2
|
+
|
|
3
|
+
Claude Code plugin that injects contextual information at session boundaries. Provides git state awareness at session start, surfaces TODO/FIXME markers, and reminds about uncommitted changes when Claude finishes responding.
|
|
4
|
+
|
|
5
|
+
## What It Does
|
|
6
|
+
|
|
7
|
+
Three hooks that run automatically at session lifecycle boundaries:
|
|
8
|
+
|
|
9
|
+
| Phase | Script | What It Injects |
|
|
10
|
+
|-------|--------|-----------------|
|
|
11
|
+
| Session start | `git-state-injector.py` | Current branch, status, recent commits, uncommitted changes |
|
|
12
|
+
| Session start | `todo-harvester.py` | Count and top 10 TODO/FIXME/HACK/XXX markers in the codebase |
|
|
13
|
+
| Stop | `commit-reminder.py` | Advisory about staged/unstaged changes that should be committed |
|
|
14
|
+
|
|
15
|
+
All hooks are non-blocking and cap their output to prevent context bloat.
|
|
16
|
+
|
|
17
|
+
### Git State Injection
|
|
18
|
+
|
|
19
|
+
Runs at session start and injects:
|
|
20
|
+
- Current branch name
|
|
21
|
+
- Working tree status (up to 20 lines)
|
|
22
|
+
- Recent commit log
|
|
23
|
+
- Diff stat of uncommitted changes (up to 15 lines)
|
|
24
|
+
- Total output capped at 2000 characters
|
|
25
|
+
|
|
26
|
+
### TODO Harvesting
|
|
27
|
+
|
|
28
|
+
Scans source files for tech debt markers and injects a summary:
|
|
29
|
+
- Searches for `TODO`, `FIXME`, `HACK`, `XXX` comments
|
|
30
|
+
- File types: `.py`, `.ts`, `.tsx`, `.js`, `.jsx`, `.go`, `.rs`, `.sh`, `.svelte`, `.vue`, `.rb`, `.java`, `.kt`
|
|
31
|
+
- Shows total count plus top 10 items
|
|
32
|
+
- Output capped at 800 characters
|
|
33
|
+
|
|
34
|
+
### Commit Reminder
|
|
35
|
+
|
|
36
|
+
Fires when Claude stops responding and checks for uncommitted work:
|
|
37
|
+
- Detects staged and unstaged changes
|
|
38
|
+
- Injects an advisory so Claude can naturally ask if the user wants to commit
|
|
39
|
+
- Uses a guard flag to prevent infinite loops (the reminder itself is a Stop event)
|
|
40
|
+
|
|
41
|
+
## How It Works
|
|
42
|
+
|
|
43
|
+
### Hook Lifecycle
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Session starts
|
|
47
|
+
|
|
|
48
|
+
+-> SessionStart fires
|
|
49
|
+
| |
|
|
50
|
+
| +-> git-state-injector.py
|
|
51
|
+
| | |
|
|
52
|
+
| | +-> Runs git branch, status, log, diff --stat
|
|
53
|
+
| | +-> Caps output, injects as additionalContext
|
|
54
|
+
| |
|
|
55
|
+
| +-> todo-harvester.py
|
|
56
|
+
| |
|
|
57
|
+
| +-> Greps codebase for TODO/FIXME/HACK/XXX
|
|
58
|
+
| +-> Injects count + top 10 as additionalContext
|
|
59
|
+
|
|
|
60
|
+
| ... Claude works ...
|
|
61
|
+
|
|
|
62
|
+
Claude stops responding
|
|
63
|
+
|
|
|
64
|
+
+-> Stop fires
|
|
65
|
+
|
|
|
66
|
+
+-> commit-reminder.py
|
|
67
|
+
|
|
|
68
|
+
+-> Checks git status for changes
|
|
69
|
+
+-> Has changes? -> Inject commit advisory
|
|
70
|
+
+-> No changes? -> Silent (no output)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Exit Code Behavior
|
|
74
|
+
|
|
75
|
+
All three scripts exit 0 (advisory only). They never block operations.
|
|
76
|
+
|
|
77
|
+
### Error Handling
|
|
78
|
+
|
|
79
|
+
| Scenario | Behavior |
|
|
80
|
+
|----------|----------|
|
|
81
|
+
| Not a git repository | Silent exit (no output) |
|
|
82
|
+
| Git command failure | Silent exit (no output) |
|
|
83
|
+
| JSON parse failure | Silent exit |
|
|
84
|
+
|
|
85
|
+
### Timeouts
|
|
86
|
+
|
|
87
|
+
| Hook | Timeout |
|
|
88
|
+
|------|---------|
|
|
89
|
+
| Git state injection | 10s |
|
|
90
|
+
| TODO harvesting | 8s |
|
|
91
|
+
| Commit reminder | 8s |
|
|
92
|
+
|
|
93
|
+
## Installation
|
|
94
|
+
|
|
95
|
+
### CodeForge DevContainer
|
|
96
|
+
|
|
97
|
+
Pre-installed and activated automatically — no setup needed.
|
|
98
|
+
|
|
99
|
+
### From GitHub
|
|
100
|
+
|
|
101
|
+
Use this plugin in any Claude Code setup:
|
|
102
|
+
|
|
103
|
+
1. Clone the [CodeForge](https://github.com/AnExiledDev/CodeForge) repository:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
git clone https://github.com/AnExiledDev/CodeForge.git
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
2. Enable the plugin in your `.claude/settings.json`:
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"enabledPlugins": {
|
|
114
|
+
"session-context@<clone-path>/.devcontainer/plugins/devs-marketplace": true
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Replace `<clone-path>` with the absolute path to your CodeForge clone.
|
|
120
|
+
|
|
121
|
+
## Plugin Structure
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
session-context/
|
|
125
|
+
+-- .claude-plugin/
|
|
126
|
+
| +-- plugin.json # Plugin metadata
|
|
127
|
+
+-- hooks/
|
|
128
|
+
| +-- hooks.json # Hook registrations (SessionStart + Stop)
|
|
129
|
+
+-- scripts/
|
|
130
|
+
| +-- git-state-injector.py # Git state context (SessionStart)
|
|
131
|
+
| +-- todo-harvester.py # Tech debt markers (SessionStart)
|
|
132
|
+
| +-- commit-reminder.py # Uncommitted changes advisory (Stop)
|
|
133
|
+
+-- README.md # This file
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Requirements
|
|
137
|
+
|
|
138
|
+
- Python 3.11+
|
|
139
|
+
- Git (for git state injection and commit reminders)
|
|
140
|
+
- Claude Code with plugin hook support
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Context injection at session boundaries: git state, TODO harvesting, commit reminders",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "command",
|
|
10
|
+
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/git-state-injector.py",
|
|
11
|
+
"timeout": 10
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"type": "command",
|
|
15
|
+
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/todo-harvester.py",
|
|
16
|
+
"timeout": 8
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"Stop": [
|
|
22
|
+
{
|
|
23
|
+
"hooks": [
|
|
24
|
+
{
|
|
25
|
+
"type": "command",
|
|
26
|
+
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/commit-reminder.py",
|
|
27
|
+
"timeout": 8
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -7,7 +7,8 @@ an advisory reminder as additionalContext. Claude sees it and can
|
|
|
7
7
|
naturally ask the user if they want to commit.
|
|
8
8
|
|
|
9
9
|
Reads hook input from stdin (JSON). Returns JSON on stdout.
|
|
10
|
-
|
|
10
|
+
Blocks with decision/reason so Claude addresses uncommitted changes
|
|
11
|
+
before finishing. The stop_hook_active guard prevents infinite loops.
|
|
11
12
|
"""
|
|
12
13
|
|
|
13
14
|
import json
|
|
@@ -82,7 +83,7 @@ def main():
|
|
|
82
83
|
"Consider asking the user if they'd like to commit before finishing."
|
|
83
84
|
)
|
|
84
85
|
|
|
85
|
-
json.dump({"
|
|
86
|
+
json.dump({"decision": "block", "reason": message}, sys.stdout)
|
|
86
87
|
sys.exit(0)
|
|
87
88
|
|
|
88
89
|
|
|
@@ -64,7 +64,15 @@ def main():
|
|
|
64
64
|
f"Working Directory: {cwd} — restrict all file operations to this "
|
|
65
65
|
f"directory unless explicitly instructed otherwise."
|
|
66
66
|
)
|
|
67
|
-
json.dump(
|
|
67
|
+
json.dump(
|
|
68
|
+
{
|
|
69
|
+
"hookSpecificOutput": {
|
|
70
|
+
"hookEventName": "SessionStart",
|
|
71
|
+
"additionalContext": output,
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
sys.stdout,
|
|
75
|
+
)
|
|
68
76
|
sys.exit(0)
|
|
69
77
|
|
|
70
78
|
sections = []
|
|
@@ -117,7 +125,15 @@ def main():
|
|
|
117
125
|
if len(output) > TOTAL_OUTPUT_CAP:
|
|
118
126
|
output = output[:TOTAL_OUTPUT_CAP] + "\n...(truncated)"
|
|
119
127
|
|
|
120
|
-
json.dump(
|
|
128
|
+
json.dump(
|
|
129
|
+
{
|
|
130
|
+
"hookSpecificOutput": {
|
|
131
|
+
"hookEventName": "SessionStart",
|
|
132
|
+
"additionalContext": output,
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
sys.stdout,
|
|
136
|
+
)
|
|
121
137
|
sys.exit(0)
|
|
122
138
|
|
|
123
139
|
|
|
@@ -122,7 +122,15 @@ def main():
|
|
|
122
122
|
if len(body) > TOTAL_OUTPUT_CAP:
|
|
123
123
|
body = body[:TOTAL_OUTPUT_CAP] + "\n...(truncated)"
|
|
124
124
|
|
|
125
|
-
json.dump(
|
|
125
|
+
json.dump(
|
|
126
|
+
{
|
|
127
|
+
"hookSpecificOutput": {
|
|
128
|
+
"hookEventName": "SessionStart",
|
|
129
|
+
"additionalContext": body,
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
sys.stdout,
|
|
133
|
+
)
|
|
126
134
|
sys.exit(0)
|
|
127
135
|
|
|
128
136
|
|