codeforge-dev 1.11.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/.env +7 -1
- package/.devcontainer/.gitignore +1 -0
- package/.devcontainer/CHANGELOG.md +106 -0
- package/.devcontainer/CLAUDE.md +93 -15
- package/.devcontainer/README.md +44 -10
- package/.devcontainer/config/defaults/main-system-prompt.md +28 -0
- package/.devcontainer/config/defaults/rules/workspace-scope.md +13 -4
- package/.devcontainer/config/defaults/settings.json +5 -3
- package/.devcontainer/config/defaults/writing-system-prompt.md +46 -4
- package/.devcontainer/connect-external-terminal.ps1 +1 -1
- package/.devcontainer/devcontainer.json +41 -11
- package/.devcontainer/docs/configuration-reference.md +3 -0
- package/.devcontainer/docs/plugins.md +9 -2
- package/.devcontainer/docs/troubleshooting.md +2 -2
- package/.devcontainer/features/README.md +8 -9
- package/.devcontainer/features/agent-browser/devcontainer-feature.json +21 -21
- package/.devcontainer/features/agent-browser/install.sh +0 -7
- package/.devcontainer/features/ast-grep/devcontainer-feature.json +22 -22
- package/.devcontainer/features/biome/devcontainer-feature.json +12 -14
- package/.devcontainer/features/ccms/install.sh +30 -13
- package/.devcontainer/features/claude-session-dashboard/README.md +40 -0
- package/.devcontainer/features/claude-session-dashboard/devcontainer-feature.json +35 -0
- package/.devcontainer/features/claude-session-dashboard/install.sh +172 -0
- package/.devcontainer/features/lsp-servers/devcontainer-feature.json +43 -43
- package/.devcontainer/features/mcp-qdrant/poststart-hook.sh +2 -1
- package/.devcontainer/features/ruff/devcontainer-feature.json +17 -19
- package/.devcontainer/features/tmux/install.sh +2 -2
- package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +24 -3
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/.claude-plugin/plugin.json +8 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/AGENT-REDIRECTION.md +7 -12
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/REVIEW-RUBRIC.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/hooks/hooks.json +29 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/redirect-builtin-agents.py +17 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/README.md +81 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/README.md +92 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/codeforge-lsp/README.md +41 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/README.md +72 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py +73 -47
- package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/README.md +42 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/README.md +86 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/hooks/hooks.json +25 -15
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected-bash.py +122 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +3 -3
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/.claude-plugin/plugin.json +8 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/hooks/hooks.json +34 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/.claude-plugin/plugin.json +8 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/hooks/hooks.json +29 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/team/SKILL.md +205 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/.claude-plugin/plugin.json +8 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/hooks/hooks.json +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-init/references/roadmap-template.md +33 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/README.md +96 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/hooks/hooks.json +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/README.md +94 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py +1 -3
- package/.devcontainer/scripts/check-setup.sh +1 -1
- package/.devcontainer/scripts/setup-projects.sh +24 -17
- package/.devcontainer/scripts/setup.sh +48 -5
- package/README.md +17 -8
- package/package.json +1 -2
- package/.devcontainer/features/mcp-reasoner/README.md +0 -177
- package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +0 -25
- package/.devcontainer/features/mcp-reasoner/install.sh +0 -184
- package/.devcontainer/features/mcp-reasoner/poststart-hook.sh +0 -67
- package/.devcontainer/features/splitrail/README.md +0 -140
- package/.devcontainer/features/splitrail/devcontainer-feature.json +0 -39
- package/.devcontainer/features/splitrail/install.sh +0 -136
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/.claude-plugin/plugin.json +0 -8
- 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/{code-directive → agent-system}/.claude-plugin/commands/debug.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/architect.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/bash-exec.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/claude-guide.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/debug-logs.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/dependency-analyst.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/doc-writer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/explorer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/generalist.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/git-archaeologist.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/migrator.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/perf-profiler.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/refactorer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/researcher.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/security-auditor.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/spec-writer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/statusline-config.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/test-writer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/guard-readonly-bash.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/inject-cwd.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/verify-no-regression.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/verify-tests-pass.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → auto-code-quality}/scripts/advisory-test-runner.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → session-context}/scripts/commit-reminder.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → session-context}/scripts/git-state-injector.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → session-context}/scripts/todo-harvester.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/scripts/skill-suggester.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/api-design/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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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/SKILL.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}/scripts/spec-reminder.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-build/SKILL.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-check/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-init/SKILL.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/SKILL.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/spec-refine/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-review/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-update/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/specification-writing/SKILL.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/{code-directive → ticket-workflow}/scripts/ticket-linker.py +0 -0
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
2
|
+
"id": "lsp-servers",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"name": "LSP Servers for Claude Code",
|
|
5
|
+
"description": "Installs language server binaries for Python (pyright), TypeScript (typescript-language-server), and Go (gopls)",
|
|
6
|
+
"maintainer": "AnExiledDev",
|
|
7
|
+
"documentationURL": "https://code.claude.com/docs/en/discover-plugins#code-intelligence",
|
|
8
|
+
"options": {
|
|
9
|
+
"version": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Set to 'none' to skip installation of all LSP servers",
|
|
12
|
+
"default": "latest"
|
|
13
|
+
},
|
|
14
|
+
"pyrightVersion": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Pyright npm package version (e.g., 'latest', '1.1.350')",
|
|
17
|
+
"default": "1.1.408"
|
|
18
|
+
},
|
|
19
|
+
"typescriptLspVersion": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "typescript-language-server npm package version (e.g., 'latest', '4.3.0')",
|
|
22
|
+
"default": "5.1.3"
|
|
23
|
+
},
|
|
24
|
+
"typescriptVersion": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "TypeScript npm package version (e.g., 'latest', '5.3.0')",
|
|
27
|
+
"default": "5.9.3"
|
|
28
|
+
},
|
|
29
|
+
"goplsVersion": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "gopls version (e.g., 'latest', 'v0.16.0')",
|
|
32
|
+
"default": "latest"
|
|
33
|
+
},
|
|
34
|
+
"username": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "Container user to install for",
|
|
37
|
+
"default": "automatic"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"installsAfter": [
|
|
41
|
+
"ghcr.io/devcontainers/features/common-utils:2",
|
|
42
|
+
"ghcr.io/devcontainers/features/node:1",
|
|
43
|
+
"ghcr.io/devcontainers/features/go:1"
|
|
44
|
+
]
|
|
45
45
|
}
|
|
@@ -35,7 +35,8 @@ if [ -n "${MODEL_URL}" ] && [ ! -d "${FASTEMBED_CACHE}/${MODEL_DIR}" ]; then
|
|
|
35
35
|
tar -xzf "${TEMP_TAR}" -C "${FASTEMBED_CACHE}/" 2>/dev/null || true
|
|
36
36
|
find "${FASTEMBED_CACHE}" -name "._*" -delete 2>/dev/null || true
|
|
37
37
|
rm -f "${TEMP_TAR}"
|
|
38
|
-
|
|
38
|
+
chown -R "vscode:vscode" "${FASTEMBED_CACHE}" 2>/dev/null || true
|
|
39
|
+
chmod -R 755 "${FASTEMBED_CACHE}" 2>/dev/null || true
|
|
39
40
|
echo "[mcp-qdrant] ✓ Embedding model downloaded to ${FASTEMBED_CACHE}/${MODEL_DIR}"
|
|
40
41
|
else
|
|
41
42
|
echo "[mcp-qdrant] WARNING: Failed to download embedding model"
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"ghcr.io/devcontainers-extra/features/uv"
|
|
20
|
-
]
|
|
2
|
+
"id": "ruff",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"name": "Ruff",
|
|
5
|
+
"description": "Fast Python linter and formatter (replaces Black + Flake8)",
|
|
6
|
+
"options": {
|
|
7
|
+
"version": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"default": "0.15.1",
|
|
10
|
+
"description": "Ruff version to install"
|
|
11
|
+
},
|
|
12
|
+
"username": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"default": "automatic",
|
|
15
|
+
"description": "Container user to install for"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"installsAfter": ["ghcr.io/devcontainers-extra/features/uv"]
|
|
21
19
|
}
|
|
@@ -11,9 +11,9 @@ fi
|
|
|
11
11
|
|
|
12
12
|
echo "Installing tmux for Claude Code Agent Teams..."
|
|
13
13
|
|
|
14
|
-
# Install tmux via apt
|
|
14
|
+
# Install tmux and inotify-tools via apt
|
|
15
15
|
apt-get update
|
|
16
|
-
apt-get install -y tmux
|
|
16
|
+
apt-get install -y tmux inotify-tools
|
|
17
17
|
|
|
18
18
|
# Install Catppuccin theme (shallow clone for fast builds)
|
|
19
19
|
CATPPUCCIN_DIR="/usr/share/tmux/plugins/catppuccin"
|
|
@@ -89,10 +89,31 @@
|
|
|
89
89
|
"category": "development"
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
|
-
"name": "
|
|
93
|
-
"description": "17 custom agents
|
|
92
|
+
"name": "agent-system",
|
|
93
|
+
"description": "17 custom agents with built-in agent redirection, CWD injection, and read-only bash enforcement",
|
|
94
94
|
"version": "1.0.0",
|
|
95
|
-
"source": "./plugins/
|
|
95
|
+
"source": "./plugins/agent-system",
|
|
96
|
+
"category": "development"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "skill-engine",
|
|
100
|
+
"description": "21 coding knowledge packs with auto-suggestion for frameworks, tools, and patterns",
|
|
101
|
+
"version": "1.0.0",
|
|
102
|
+
"source": "./plugins/skill-engine",
|
|
103
|
+
"category": "development"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "spec-workflow",
|
|
107
|
+
"description": "Specification lifecycle management: creation, refinement, building, reviewing, updating, and auditing",
|
|
108
|
+
"version": "1.0.0",
|
|
109
|
+
"source": "./plugins/spec-workflow",
|
|
110
|
+
"category": "workflow"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"name": "session-context",
|
|
114
|
+
"description": "Session lifecycle hooks: git state injection, TODO harvesting, and commit reminders",
|
|
115
|
+
"version": "1.0.0",
|
|
116
|
+
"source": "./plugins/session-context",
|
|
96
117
|
"category": "development"
|
|
97
118
|
},
|
|
98
119
|
{
|
|
@@ -65,7 +65,7 @@ REDIRECT_MAP = {
|
|
|
65
65
|
}
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
When Claude decides to spawn an `Explore` agent, the hook rewrites it to `
|
|
68
|
+
When Claude decides to spawn an `Explore` agent, the hook rewrites it to `agent-system:explorer` — a custom agent with tailored instructions, tool restrictions, and model selection. The original prompt passes through unchanged.
|
|
69
69
|
|
|
70
70
|
### Custom Agent Definitions
|
|
71
71
|
|
|
@@ -138,7 +138,7 @@ elif "refactor" in prompt.lower():
|
|
|
138
138
|
target = "refactorer"
|
|
139
139
|
else:
|
|
140
140
|
target = "generalist"
|
|
141
|
-
updated = {**tool_input, "subagent_type": f"
|
|
141
|
+
updated = {**tool_input, "subagent_type": f"agent-system:{target}"}
|
|
142
142
|
```
|
|
143
143
|
|
|
144
144
|
### Block Certain Operations
|
|
@@ -197,7 +197,7 @@ This is how the auto-linter and syntax validator work — they inspect the resul
|
|
|
197
197
|
## File Layout
|
|
198
198
|
|
|
199
199
|
```
|
|
200
|
-
|
|
200
|
+
agent-system/
|
|
201
201
|
├── agents/ # Agent definitions (17 .md files)
|
|
202
202
|
│ ├── explorer.md
|
|
203
203
|
│ ├── architect.md
|
|
@@ -205,15 +205,10 @@ code-directive/
|
|
|
205
205
|
│ └── ...
|
|
206
206
|
├── hooks/
|
|
207
207
|
│ └── hooks.json # Hook registrations
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
│ └── skill-suggester.py # Suggests skills on prompt
|
|
213
|
-
└── skills/ # Skill definitions (16 directories)
|
|
214
|
-
├── fastapi/
|
|
215
|
-
├── svelte5/
|
|
216
|
-
└── ...
|
|
208
|
+
└── scripts/
|
|
209
|
+
├── redirect-builtin-agents.py # The redirection hook
|
|
210
|
+
├── inject-cwd.py # CWD injection for subagents
|
|
211
|
+
└── guard-readonly-bash.py # Read-only bash enforcement
|
|
217
212
|
```
|
|
218
213
|
|
|
219
214
|
## Writing Your Own
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Agent & Skill Quality Rubric
|
|
2
2
|
|
|
3
|
-
> Compiled from Anthropic's official documentation, Claude Code subagent docs, skill authoring best practices, and industry research on LLM agent design patterns. This rubric drives the quality review of all agents and skills in the `
|
|
3
|
+
> Compiled from Anthropic's official documentation, Claude Code subagent docs, skill authoring best practices, and industry research on LLM agent design patterns. This rubric drives the quality review of all agents in the `agent-system` plugin and skills in the `skill-engine` / `spec-workflow` plugins.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Agent redirection and subagent configuration hooks",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"PreToolUse": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "Task",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "command",
|
|
10
|
+
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/redirect-builtin-agents.py",
|
|
11
|
+
"timeout": 5
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"SubagentStart": [
|
|
17
|
+
{
|
|
18
|
+
"matcher": "",
|
|
19
|
+
"hooks": [
|
|
20
|
+
{
|
|
21
|
+
"type": "command",
|
|
22
|
+
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/inject-cwd.py",
|
|
23
|
+
"timeout": 3
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
Redirect built-in agents - PreToolUse hook for Task tool.
|
|
4
4
|
|
|
5
5
|
Intercepts Task tool calls and transparently redirects built-in agent
|
|
6
|
-
types to enhanced custom agents defined in the
|
|
6
|
+
types to enhanced custom agents defined in the agent-system plugin.
|
|
7
|
+
|
|
8
|
+
Handles three cases:
|
|
9
|
+
- Built-in name (e.g. "claude-code-guide") → qualified custom name
|
|
10
|
+
- Unqualified custom name (e.g. "claude-guide") → qualified custom name
|
|
11
|
+
- Already-qualified name (e.g. "agent-system:claude-guide") → passthrough
|
|
7
12
|
|
|
8
13
|
The redirect preserves the original prompt — only the subagent_type
|
|
9
14
|
is changed. Model selection is left to the custom agent's YAML config.
|
|
@@ -28,7 +33,11 @@ REDIRECT_MAP = {
|
|
|
28
33
|
}
|
|
29
34
|
|
|
30
35
|
# Plugin name prefix for fully-qualified agent references
|
|
31
|
-
PLUGIN_PREFIX = "
|
|
36
|
+
PLUGIN_PREFIX = "agent-system"
|
|
37
|
+
|
|
38
|
+
# Unqualified custom name → fully-qualified custom name
|
|
39
|
+
# Handles cases where the model uses the short name directly
|
|
40
|
+
UNQUALIFIED_MAP = {v: f"{PLUGIN_PREFIX}:{v}" for v in REDIRECT_MAP.values()}
|
|
32
41
|
|
|
33
42
|
LOG_FILE = os.environ.get("AGENT_REDIRECT_LOG", "/tmp/agent-redirect.log")
|
|
34
43
|
|
|
@@ -54,12 +63,14 @@ def main() -> None:
|
|
|
54
63
|
tool_input = input_data.get("tool_input", {})
|
|
55
64
|
subagent_type = tool_input.get("subagent_type", "")
|
|
56
65
|
|
|
57
|
-
if subagent_type
|
|
66
|
+
if subagent_type in REDIRECT_MAP:
|
|
67
|
+
target = REDIRECT_MAP[subagent_type]
|
|
68
|
+
qualified_name = f"{PLUGIN_PREFIX}:{target}"
|
|
69
|
+
elif subagent_type in UNQUALIFIED_MAP:
|
|
70
|
+
qualified_name = UNQUALIFIED_MAP[subagent_type]
|
|
71
|
+
else:
|
|
58
72
|
sys.exit(0)
|
|
59
73
|
|
|
60
|
-
target = REDIRECT_MAP[subagent_type]
|
|
61
|
-
qualified_name = f"{PLUGIN_PREFIX}:{target}"
|
|
62
|
-
|
|
63
74
|
log(f"{subagent_type} → {qualified_name}")
|
|
64
75
|
|
|
65
76
|
# Include all original fields in updatedInput — Claude Code may replace
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# auto-formatter
|
|
2
|
+
|
|
3
|
+
Claude Code plugin that batch-formats edited files when Claude finishes responding. Reads file paths collected by the `code-directive` plugin's `collect-edited-files.py` hook and formats each file based on its extension.
|
|
4
|
+
|
|
5
|
+
## What It Does
|
|
6
|
+
|
|
7
|
+
When Claude stops responding, the plugin reads the session's list of edited files and formats each one using the appropriate tool:
|
|
8
|
+
|
|
9
|
+
| Language / File Type | Formatter | Fallback |
|
|
10
|
+
|----------------------|-----------|----------|
|
|
11
|
+
| Python (`.py`, `.pyi`) | [ruff format](https://docs.astral.sh/ruff/) | [black](https://github.com/psf/black) |
|
|
12
|
+
| Go (`.go`) | gofmt (bundled with Go) | — |
|
|
13
|
+
| JS/TS/CSS/JSON/GraphQL/HTML (`.js`, `.jsx`, `.ts`, `.tsx`, `.css`, `.json`, `.jsonc`, `.graphql`, `.gql`, `.html`, `.vue`, `.svelte`, `.astro`) | [biome](https://biomejs.dev/) check --write | — |
|
|
14
|
+
| Shell (`.sh`, `.bash`, `.zsh`, `.mksh`, `.bats`) | [shfmt](https://github.com/mvdan/sh) | — |
|
|
15
|
+
| Markdown/YAML/TOML (`.md`, `.markdown`, `.yaml`, `.yml`, `.toml`) | [dprint](https://dprint.dev/) | — |
|
|
16
|
+
| Dockerfile | dprint | — |
|
|
17
|
+
| Rust (`.rs`) | rustfmt (bundled with Rust) | — |
|
|
18
|
+
|
|
19
|
+
All formatting is non-blocking. Missing tools are silently skipped. The plugin always exits 0 — it will never interrupt Claude.
|
|
20
|
+
|
|
21
|
+
## How It Works
|
|
22
|
+
|
|
23
|
+
### Hook Lifecycle
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
code-directive's collect-edited-files.py (PostToolUse on Edit/Write)
|
|
27
|
+
│
|
|
28
|
+
└─→ Appends edited file path to /tmp/claude-edited-files-{session_id}
|
|
29
|
+
│
|
|
30
|
+
│ ... Claude keeps working ...
|
|
31
|
+
│
|
|
32
|
+
Claude stops responding (Stop event)
|
|
33
|
+
│
|
|
34
|
+
└─→ format-on-stop.py reads the temp file, deduplicates paths,
|
|
35
|
+
formats each file by extension, then cleans up the temp file
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Dependency on code-directive
|
|
39
|
+
|
|
40
|
+
This plugin does **not** collect file paths itself. It relies on the `code-directive` plugin's `collect-edited-files.py` PostToolUse hook to write edited file paths to `/tmp/claude-edited-files-{session_id}`. Both plugins must be enabled for formatting to work.
|
|
41
|
+
|
|
42
|
+
### Biome Discovery
|
|
43
|
+
|
|
44
|
+
Biome is resolved in this order:
|
|
45
|
+
1. **Project-local**: walks up from the edited file looking for `node_modules/.bin/biome`
|
|
46
|
+
2. **Global**: checks PATH via `which biome`
|
|
47
|
+
|
|
48
|
+
### dprint Configuration
|
|
49
|
+
|
|
50
|
+
The dprint formatter looks for a config file at `/usr/local/share/dprint/dprint.json`. If this file doesn't exist, dprint formatting is skipped.
|
|
51
|
+
|
|
52
|
+
### Timeouts
|
|
53
|
+
|
|
54
|
+
| Scope | Timeout |
|
|
55
|
+
|-------|---------|
|
|
56
|
+
| Entire Stop hook | 15s |
|
|
57
|
+
| Individual tool invocation | 10-12s |
|
|
58
|
+
|
|
59
|
+
## Conflict Warning
|
|
60
|
+
|
|
61
|
+
Do **not** enable this plugin alongside `auto-code-quality`. That plugin bundles its own formatter with the same functionality. Enabling both won't corrupt data (different temp file prefixes: `claude-edited-files-*` vs `claude-cq-*`), but files would be formatted twice.
|
|
62
|
+
|
|
63
|
+
## Plugin Structure
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
auto-formatter/
|
|
67
|
+
├── .claude-plugin/
|
|
68
|
+
│ └── plugin.json # Plugin metadata
|
|
69
|
+
├── hooks/
|
|
70
|
+
│ └── hooks.json # Stop hook registration
|
|
71
|
+
├── scripts/
|
|
72
|
+
│ └── format-on-stop.py # Batch formatter (Stop)
|
|
73
|
+
└── README.md # This file
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Requirements
|
|
77
|
+
|
|
78
|
+
- Python 3.11+
|
|
79
|
+
- Claude Code with plugin hook support
|
|
80
|
+
- `code-directive` plugin enabled (provides the file path collector)
|
|
81
|
+
- Install the formatting tools for the languages you work with — everything is optional
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# auto-linter
|
|
2
|
+
|
|
3
|
+
Claude Code plugin that batch-lints edited files when Claude finishes responding. Reads file paths collected by the `code-directive` plugin's `collect-edited-files.py` hook and lints each file using the appropriate tool. Lint results are returned as advisory context — never blocking.
|
|
4
|
+
|
|
5
|
+
## What It Does
|
|
6
|
+
|
|
7
|
+
When Claude stops responding, the plugin reads the session's list of edited files, lints each one, and injects any warnings as `additionalContext` so Claude sees them on its next response.
|
|
8
|
+
|
|
9
|
+
| Language / File Type | Linter(s) |
|
|
10
|
+
|----------------------|-----------|
|
|
11
|
+
| Python (`.py`, `.pyi`) | [pyright](https://github.com/microsoft/pyright) (type checking) + [ruff check](https://docs.astral.sh/ruff/) (style/correctness) |
|
|
12
|
+
| JS/TS/CSS/GraphQL (`.js`, `.jsx`, `.ts`, `.tsx`, `.css`, `.graphql`, `.gql`) | [biome lint](https://biomejs.dev/) |
|
|
13
|
+
| Shell (`.sh`, `.bash`, `.zsh`, `.mksh`, `.bats`) | [shellcheck](https://github.com/koalaman/shellcheck) |
|
|
14
|
+
| Go (`.go`) | go vet (bundled with Go) |
|
|
15
|
+
| Dockerfile | [hadolint](https://github.com/hadolint/hadolint) |
|
|
16
|
+
| Rust (`.rs`) | [clippy](https://doc.rust-lang.org/clippy/) (via cargo) |
|
|
17
|
+
|
|
18
|
+
All linting is non-blocking. Missing tools are silently skipped. The plugin always exits 0 and returns warnings as `additionalContext` — it will never interrupt Claude.
|
|
19
|
+
|
|
20
|
+
## How It Works
|
|
21
|
+
|
|
22
|
+
### Hook Lifecycle
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
code-directive's collect-edited-files.py (PostToolUse on Edit/Write)
|
|
26
|
+
│
|
|
27
|
+
└─→ Appends edited file path to /tmp/claude-lint-files-{session_id}
|
|
28
|
+
│
|
|
29
|
+
│ ... Claude keeps working ...
|
|
30
|
+
│
|
|
31
|
+
Claude stops responding (Stop event)
|
|
32
|
+
│
|
|
33
|
+
└─→ lint-file.py reads the temp file, deduplicates paths,
|
|
34
|
+
lints each file by extension, groups results by linter,
|
|
35
|
+
injects warnings as additionalContext, then cleans up
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Dependency on code-directive
|
|
39
|
+
|
|
40
|
+
This plugin relies on the `code-directive` plugin's `collect-edited-files.py` PostToolUse hook to write edited file paths to `/tmp/claude-lint-files-{session_id}`. Both plugins must be enabled for linting to work.
|
|
41
|
+
|
|
42
|
+
### Output Format
|
|
43
|
+
|
|
44
|
+
Lint results are grouped by linter and returned as `additionalContext`. Each file shows up to 5 issues with severity, line number, and message:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
[Auto-linter] Pyright results:
|
|
48
|
+
example.py: 2 issue(s)
|
|
49
|
+
✗ Line 15: Cannot assign type "str" to declared type "int"
|
|
50
|
+
! Line 42: Variable "x" is not defined
|
|
51
|
+
|
|
52
|
+
[Auto-linter] Ruff results:
|
|
53
|
+
example.py: 1 issue(s)
|
|
54
|
+
! Line 8: [F401] `os` imported but unused
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Biome Discovery
|
|
58
|
+
|
|
59
|
+
Biome is resolved in this order:
|
|
60
|
+
1. **Project-local**: walks up from the edited file looking for `node_modules/.bin/biome`
|
|
61
|
+
2. **Global**: checks PATH via `which biome`
|
|
62
|
+
|
|
63
|
+
### Timeouts
|
|
64
|
+
|
|
65
|
+
| Scope | Timeout |
|
|
66
|
+
|-------|---------|
|
|
67
|
+
| Entire Stop hook | 60s |
|
|
68
|
+
| Individual tool invocation | 10s |
|
|
69
|
+
|
|
70
|
+
## Conflict Warning
|
|
71
|
+
|
|
72
|
+
Do **not** enable this plugin alongside `auto-code-quality`. That plugin bundles its own linter with the same functionality. Enabling both won't corrupt data (different temp file prefixes: `claude-lint-files-*` vs `claude-cq-*`), but files would be linted twice.
|
|
73
|
+
|
|
74
|
+
## Plugin Structure
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
auto-linter/
|
|
78
|
+
├── .claude-plugin/
|
|
79
|
+
│ └── plugin.json # Plugin metadata
|
|
80
|
+
├── hooks/
|
|
81
|
+
│ └── hooks.json # Stop hook registration
|
|
82
|
+
├── scripts/
|
|
83
|
+
│ └── lint-file.py # Batch linter (Stop)
|
|
84
|
+
└── README.md # This file
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Requirements
|
|
88
|
+
|
|
89
|
+
- Python 3.11+
|
|
90
|
+
- Claude Code with plugin hook support
|
|
91
|
+
- `code-directive` plugin enabled (provides the file path collector)
|
|
92
|
+
- Install the linting tools for the languages you work with — everything is optional
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# codeforge-lsp
|
|
2
|
+
|
|
3
|
+
Purely declarative Claude Code plugin that registers Language Server Protocol (LSP) servers for Python, TypeScript/JavaScript, and Go. No hooks, no scripts — just server definitions in the plugin manifest.
|
|
4
|
+
|
|
5
|
+
## What It Does
|
|
6
|
+
|
|
7
|
+
Provides Claude Code with language intelligence (type checking, diagnostics, go-to-definition) by registering three LSP servers:
|
|
8
|
+
|
|
9
|
+
| Server | Command | Languages | File Extensions |
|
|
10
|
+
|--------|---------|-----------|-----------------|
|
|
11
|
+
| [Pyright](https://github.com/microsoft/pyright) | `pyright-langserver --stdio` | Python | `.py`, `.pyi` |
|
|
12
|
+
| [TypeScript Language Server](https://github.com/typescript-language-server/typescript-language-server) | `typescript-language-server --stdio` | TypeScript, JavaScript | `.ts`, `.tsx`, `.js`, `.jsx`, `.mts`, `.cts`, `.mjs`, `.cjs` |
|
|
13
|
+
| [gopls](https://pkg.go.dev/golang.org/x/tools/gopls) | `gopls serve` | Go | `.go`, `.mod`, `.sum` |
|
|
14
|
+
|
|
15
|
+
Servers activate only if their binary is available on PATH. Missing servers are silently skipped — the plugin never fails on a missing tool.
|
|
16
|
+
|
|
17
|
+
## How It Works
|
|
18
|
+
|
|
19
|
+
The plugin uses the `lspServers` field in `plugin.json` to declare server configurations. Claude Code reads this at startup and launches each server whose command binary exists. There is no hook logic or runtime behavior — everything is static configuration.
|
|
20
|
+
|
|
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
|
+
|
|
23
|
+
## Plugin Structure
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
codeforge-lsp/
|
|
27
|
+
├── .claude-plugin/
|
|
28
|
+
│ └── plugin.json # Plugin metadata + LSP server definitions
|
|
29
|
+
└── README.md # This file
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Requirements
|
|
33
|
+
|
|
34
|
+
- Claude Code with LSP plugin support
|
|
35
|
+
- Install the language servers you need:
|
|
36
|
+
|
|
37
|
+
| Server | Install |
|
|
38
|
+
|--------|---------|
|
|
39
|
+
| Pyright | `npm i -g pyright` |
|
|
40
|
+
| TypeScript Language Server | `npm i -g typescript-language-server typescript` |
|
|
41
|
+
| gopls | `go install golang.org/x/tools/gopls@latest` |
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# dangerous-command-blocker
|
|
2
|
+
|
|
3
|
+
Claude Code plugin that intercepts Bash tool calls and blocks destructive commands before they execute. Acts as a safety net against accidental or misguided destructive operations.
|
|
4
|
+
|
|
5
|
+
## What It Does
|
|
6
|
+
|
|
7
|
+
Inspects every Bash command Claude attempts to run against a set of dangerous patterns. If a match is found, the command is blocked with an error message explaining why. Safe commands pass through untouched.
|
|
8
|
+
|
|
9
|
+
### Blocked Patterns
|
|
10
|
+
|
|
11
|
+
| Category | Examples |
|
|
12
|
+
|----------|----------|
|
|
13
|
+
| Destructive filesystem deletion | `rm -rf /`, `rm -rf ~`, `rm -rf ../` |
|
|
14
|
+
| Privileged deletion | `sudo rm` |
|
|
15
|
+
| World-writable permissions | `chmod 777`, `chmod -R 777` |
|
|
16
|
+
| Force push to main/master | `git push --force origin main`, `git push -f origin master` |
|
|
17
|
+
| Bare force push | `git push -f`, `git push --force` (no branch specified) |
|
|
18
|
+
| Git history destruction | `git reset --hard origin/main`, `git clean -f` |
|
|
19
|
+
| System directory writes | `> /usr/`, `> /etc/`, `> /bin/`, `> /sbin/` |
|
|
20
|
+
| Disk formatting | `mkfs.*`, `dd of=/dev/` |
|
|
21
|
+
| Docker container escape | `docker run --privileged`, `docker run -v /:/...` |
|
|
22
|
+
| Destructive Docker operations | `docker stop`, `docker rm`, `docker kill`, `docker rmi` |
|
|
23
|
+
| Dangerous find operations | `find -exec rm`, `find -delete` |
|
|
24
|
+
|
|
25
|
+
## How It Works
|
|
26
|
+
|
|
27
|
+
### Hook Lifecycle
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
Claude calls the Bash tool
|
|
31
|
+
│
|
|
32
|
+
└─→ PreToolUse hook fires for Bash
|
|
33
|
+
│
|
|
34
|
+
└─→ block-dangerous.py reads the command from stdin
|
|
35
|
+
│
|
|
36
|
+
├─→ Pattern match found → exit 2 (block with error)
|
|
37
|
+
└─→ No match → exit 0 (allow)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Exit Code Behavior
|
|
41
|
+
|
|
42
|
+
| Exit Code | Meaning |
|
|
43
|
+
|-----------|---------|
|
|
44
|
+
| 0 | Command is safe — allow execution |
|
|
45
|
+
| 2 | Command matches a dangerous pattern — block with error message |
|
|
46
|
+
|
|
47
|
+
### Error Handling
|
|
48
|
+
|
|
49
|
+
- **JSON parse failure**: Fails closed (exit 2) — if the input can't be read, the command is blocked
|
|
50
|
+
- **Other exceptions**: Fails open (exit 0) — logs the error to stderr but does not block
|
|
51
|
+
|
|
52
|
+
### Timeout
|
|
53
|
+
|
|
54
|
+
The hook has a 5-second timeout. If the script takes longer, Claude Code proceeds with the command.
|
|
55
|
+
|
|
56
|
+
## Plugin Structure
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
dangerous-command-blocker/
|
|
60
|
+
├── .claude-plugin/
|
|
61
|
+
│ └── plugin.json # Plugin metadata
|
|
62
|
+
├── hooks/
|
|
63
|
+
│ └── hooks.json # PreToolUse/Bash hook registration
|
|
64
|
+
├── scripts/
|
|
65
|
+
│ └── block-dangerous.py # Pattern matcher (PreToolUse)
|
|
66
|
+
└── README.md # This file
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Requirements
|
|
70
|
+
|
|
71
|
+
- Python 3.11+
|
|
72
|
+
- Claude Code with plugin hook support
|