codeforge-dev 1.7.0 → 1.9.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.
Files changed (158) hide show
  1. package/.devcontainer/.env +4 -6
  2. package/.devcontainer/.env.example +29 -0
  3. package/.devcontainer/.gitignore +8 -0
  4. package/.devcontainer/.secrets.example +12 -0
  5. package/.devcontainer/CHANGELOG.md +181 -0
  6. package/.devcontainer/CLAUDE.md +57 -20
  7. package/.devcontainer/README.md +111 -56
  8. package/.devcontainer/config/{main-system-prompt.md → defaults/main-system-prompt.md} +72 -0
  9. package/.devcontainer/config/defaults/rules/spec-workflow.md +67 -0
  10. package/.devcontainer/config/defaults/rules/workspace-scope.md +7 -0
  11. package/.devcontainer/config/defaults/settings.json +67 -0
  12. package/.devcontainer/config/file-manifest.json +32 -0
  13. package/.devcontainer/devcontainer.json +20 -0
  14. package/.devcontainer/docs/configuration-reference.md +90 -0
  15. package/.devcontainer/docs/keybindings.md +100 -0
  16. package/.devcontainer/docs/optional-features.md +129 -0
  17. package/.devcontainer/docs/plugins.md +154 -0
  18. package/.devcontainer/docs/troubleshooting.md +128 -0
  19. package/.devcontainer/features/agent-browser/install.sh +6 -0
  20. package/.devcontainer/features/ast-grep/install.sh +6 -0
  21. package/.devcontainer/features/biome/README.md +27 -0
  22. package/.devcontainer/features/biome/install.sh +6 -0
  23. package/.devcontainer/features/ccburn/install.sh +6 -0
  24. package/.devcontainer/features/ccstatusline/devcontainer-feature.json +5 -0
  25. package/.devcontainer/features/ccstatusline/install.sh +7 -0
  26. package/.devcontainer/features/ccusage/install.sh +6 -0
  27. package/.devcontainer/features/claude-monitor/install.sh +6 -0
  28. package/.devcontainer/features/dprint/README.md +30 -0
  29. package/.devcontainer/features/dprint/devcontainer-feature.json +18 -0
  30. package/.devcontainer/features/dprint/install.sh +131 -0
  31. package/.devcontainer/features/hadolint/README.md +35 -0
  32. package/.devcontainer/features/hadolint/devcontainer-feature.json +13 -0
  33. package/.devcontainer/features/hadolint/install.sh +86 -0
  34. package/.devcontainer/features/lsp-servers/devcontainer-feature.json +5 -0
  35. package/.devcontainer/features/lsp-servers/install.sh +7 -0
  36. package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +5 -0
  37. package/.devcontainer/features/mcp-qdrant/install.sh +13 -6
  38. package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +5 -0
  39. package/.devcontainer/features/mcp-reasoner/install.sh +8 -1
  40. package/.devcontainer/features/notify-hook/devcontainer-feature.json +5 -0
  41. package/.devcontainer/features/notify-hook/install.sh +7 -0
  42. package/.devcontainer/features/ruff/README.md +26 -0
  43. package/.devcontainer/features/ruff/devcontainer-feature.json +21 -0
  44. package/.devcontainer/features/ruff/install.sh +74 -0
  45. package/.devcontainer/features/shellcheck/README.md +38 -0
  46. package/.devcontainer/features/shellcheck/devcontainer-feature.json +13 -0
  47. package/.devcontainer/features/shellcheck/install.sh +24 -0
  48. package/.devcontainer/features/shfmt/README.md +37 -0
  49. package/.devcontainer/features/shfmt/devcontainer-feature.json +13 -0
  50. package/.devcontainer/features/shfmt/install.sh +85 -0
  51. package/.devcontainer/features/splitrail/devcontainer-feature.json +5 -0
  52. package/.devcontainer/features/splitrail/install.sh +7 -0
  53. package/.devcontainer/features/tmux/install.sh +8 -0
  54. package/.devcontainer/features/tree-sitter/install.sh +6 -0
  55. package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +104 -104
  56. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/.claude-plugin/plugin.json +7 -0
  57. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/README.md +158 -0
  58. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/hooks/hooks.json +39 -0
  59. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/scripts/collect-edited-files.py +47 -0
  60. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/scripts/format-on-stop.py +297 -0
  61. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/scripts/lint-file.py +536 -0
  62. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/scripts/syntax-validator.py +146 -0
  63. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/.claude-plugin/plugin.json +1 -1
  64. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/__pycache__/format-on-stop.cpython-314.pyc +0 -0
  65. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-on-stop.py +114 -9
  66. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/.claude-plugin/plugin.json +1 -1
  67. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/hooks/hooks.json +4 -5
  68. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/__pycache__/lint-file.cpython-314.pyc +0 -0
  69. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/lint-file.py +478 -76
  70. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/.claude-plugin/plugin.json +1 -1
  71. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/AGENT-REDIRECTION.md +226 -0
  72. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/architect.md +94 -1
  73. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/bash-exec.md +4 -4
  74. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/claude-guide.md +14 -23
  75. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/debug-logs.md +20 -0
  76. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/dependency-analyst.md +20 -0
  77. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/doc-writer.md +99 -1
  78. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/explorer.md +20 -0
  79. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/generalist.md +152 -9
  80. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/git-archaeologist.md +18 -0
  81. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/migrator.md +114 -1
  82. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/perf-profiler.md +24 -0
  83. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/refactorer.md +101 -1
  84. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/researcher.md +33 -1
  85. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/security-auditor.md +24 -0
  86. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/spec-writer.md +65 -24
  87. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/statusline-config.md +3 -3
  88. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/test-writer.md +99 -1
  89. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/hooks/hooks.json +100 -56
  90. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/advisory-test-runner.cpython-314.pyc +0 -0
  91. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/collect-edited-files.cpython-314.pyc +0 -0
  92. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/commit-reminder.cpython-314.pyc +0 -0
  93. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/git-state-injector.cpython-314.pyc +0 -0
  94. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/redirect-builtin-agents.cpython-314.pyc +0 -0
  95. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/ticket-linker.cpython-314.pyc +0 -0
  96. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/todo-harvester.cpython-314.pyc +0 -0
  97. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/advisory-test-runner.py +174 -0
  98. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/collect-edited-files.py +8 -6
  99. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/commit-reminder.py +90 -0
  100. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/git-state-injector.py +114 -0
  101. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/skill-suggester.py +61 -0
  102. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/spec-reminder.py +121 -0
  103. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/ticket-linker.py +137 -0
  104. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/todo-harvester.py +130 -0
  105. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/SKILL.md +224 -0
  106. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/error-handling.md +166 -0
  107. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/rest-conventions.md +215 -0
  108. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/SKILL.md +211 -0
  109. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/references/language-patterns.md +327 -0
  110. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/SKILL.md +134 -0
  111. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/ecosystem-commands.md +264 -0
  112. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/license-compliance.md +80 -0
  113. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/SKILL.md +153 -0
  114. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/api-doc-templates.md +221 -0
  115. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/docstring-formats.md +296 -0
  116. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/SKILL.md +150 -0
  117. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/javascript-migrations.md +179 -0
  118. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/python-migrations.md +141 -0
  119. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/spec-check/SKILL.md +86 -0
  120. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/spec-init/SKILL.md +97 -0
  121. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/spec-init/references/backlog-template.md +7 -0
  122. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/spec-init/references/roadmap-template.md +13 -0
  123. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/spec-new/SKILL.md +101 -0
  124. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/spec-new/references/template.md +110 -0
  125. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/spec-update/SKILL.md +124 -0
  126. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/specification-writing/SKILL.md +32 -0
  127. package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/__pycache__/block-dangerous.cpython-314.pyc +0 -0
  128. package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/hooks/hooks.json +1 -1
  129. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/__pycache__/guard-protected.cpython-314.pyc +0 -0
  130. package/.devcontainer/scripts/check-setup.sh +72 -0
  131. package/.devcontainer/scripts/setup-aliases.sh +43 -3
  132. package/.devcontainer/scripts/setup-auth.sh +74 -0
  133. package/.devcontainer/scripts/setup-config.sh +117 -24
  134. package/.devcontainer/scripts/setup-update-claude.sh +8 -0
  135. package/.devcontainer/scripts/setup.sh +46 -13
  136. package/README.md +23 -190
  137. package/package.json +42 -42
  138. package/setup.js +245 -71
  139. package/.devcontainer/config/settings.json +0 -70
  140. package/.devcontainer/features/claude-code/README.md +0 -498
  141. package/.devcontainer/features/claude-code/config/settings.json +0 -72
  142. package/.devcontainer/features/claude-code/config/system-prompt.md +0 -118
  143. package/.devcontainer/features/claude-code/config/world-building-sp.md +0 -1432
  144. package/.devcontainer/features/claude-code/devcontainer-feature.json +0 -42
  145. package/.devcontainer/features/claude-code/install.sh +0 -466
  146. package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/.claude-plugin/plugin.json +0 -7
  147. package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/hooks/hooks.json +0 -17
  148. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/.claude-plugin/plugin.json +0 -6
  149. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/config/planning-instructions.md +0 -14
  150. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/functional-conjuring-map.md +0 -989
  151. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/hooks/hooks.json +0 -33
  152. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/__pycache__/post-enhance-task.cpython-314.pyc +0 -0
  153. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhance-planning.py +0 -71
  154. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-plan.sh +0 -68
  155. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-task.sh +0 -120
  156. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-plan.py +0 -133
  157. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-task.py +0 -253
  158. /package/.devcontainer/config/{keybindings.json → defaults/keybindings.json} +0 -0
@@ -8,12 +8,12 @@ CLAUDE_CONFIG_DIR=/workspaces/.claude
8
8
  # Setup: copy config files to CLAUDE_CONFIG_DIR
9
9
  SETUP_CONFIG=true
10
10
 
11
- # Setup: overwrite existing config files (false = skip if exists)
12
- OVERWRITE_CONFIG=true
13
-
14
11
  # Setup: add cc alias to shell rc files
15
12
  SETUP_ALIASES=true
16
13
 
14
+ # Setup: configure Git and NPM auth from .secrets file
15
+ SETUP_AUTH=true
16
+
17
17
  # Setup: install official Anthropic plugins
18
18
  SETUP_PLUGINS=true
19
19
 
@@ -21,6 +21,4 @@ SETUP_PLUGINS=true
21
21
  SETUP_UPDATE_CLAUDE=true
22
22
 
23
23
  # Plugin blacklist (comma-separated plugin names to skip during auto-install)
24
- # workflow-enhancer: Not fully implemented yet — scaffolding only
25
- # planning-reminder: Redundant with Claude Code v2.1+ which auto-switches to plan mode
26
- PLUGIN_BLACKLIST="workflow-enhancer,planning-reminder"
24
+ PLUGIN_BLACKLIST=""
@@ -0,0 +1,29 @@
1
+ # CodeForge Environment Configuration
2
+ # Copy to .env and customize. .env is gitignored.
3
+
4
+ # Paths
5
+ CLAUDE_CONFIG_DIR=/workspaces/.claude
6
+ # CONFIG_SOURCE_DIR is derived from script location; uncomment to override:
7
+ # CONFIG_SOURCE_DIR=/custom/path/to/config
8
+
9
+ # Setup: copy config files to CLAUDE_CONFIG_DIR (per config/file-manifest.json)
10
+ SETUP_CONFIG=true
11
+
12
+ # Setup: add cc/claude/ccraw aliases to shell rc files
13
+ SETUP_ALIASES=true
14
+
15
+ # Setup: configure Git and NPM auth from .secrets file
16
+ SETUP_AUTH=true
17
+
18
+ # Setup: install official Anthropic plugins + register local marketplace
19
+ SETUP_PLUGINS=true
20
+
21
+ # Setup: auto-update Claude Code CLI to latest on container start (runs in background)
22
+ SETUP_UPDATE_CLAUDE=true
23
+
24
+ # Setup: auto-detect projects for VS Code Project Manager extension
25
+ SETUP_PROJECTS=true
26
+
27
+ # Plugin blacklist: comma-separated plugin names to skip during installation
28
+ # Example: PLUGIN_BLACKLIST="ticket-workflow,auto-linter"
29
+ PLUGIN_BLACKLIST=""
@@ -0,0 +1,8 @@
1
+ # Explicitly ignored (safety net on top of root .* rule)
2
+ .review
3
+ .secrets
4
+
5
+ # Un-ignore dotfiles that should be tracked (overrides root .* pattern)
6
+ !.env.example
7
+ !.secrets.example
8
+ !.gitignore
@@ -0,0 +1,12 @@
1
+ # Copy this file to .secrets and fill in your tokens.
2
+ # .secrets is gitignored and will never be committed.
3
+
4
+ # GitHub Personal Access Token (classic or fine-grained)
5
+ GH_TOKEN=
6
+ # GitHub username for git config
7
+ GH_USERNAME=
8
+ # GitHub email for git config (use noreply for privacy)
9
+ GH_EMAIL=
10
+
11
+ # NPM auth token for registry.npmjs.org
12
+ NPM_TOKEN=
@@ -1,5 +1,186 @@
1
1
  # CodeForge Devcontainer Changelog
2
2
 
3
+ ## [v1.9.0] - 2026-02-10
4
+
5
+ ### Added
6
+
7
+ #### Agent Context Inheritance (code-directive plugin)
8
+ - **Project Context Discovery** — all 14 project-interacting agents now read `.claude/rules/*.md` and CLAUDE.md files before starting work. Agents walk up the directory tree from their working directory to the workspace root, applying conventions from each level (deeper files take precedence)
9
+ - **Execution Discipline** — 7 agents (generalist, refactorer, migrator, test-writer, doc-writer, architect, researcher) gain structured pre/post-work verification: read before writing, verify after writing, no silent deviations, failure diagnosis before retry
10
+ - **Code Standards** — 5 agents (generalist full; refactorer, migrator, test-writer, architect compact) gain SOLID, DRY/KISS/YAGNI, function size limits, error handling rules, and forbidden patterns (god classes, magic numbers, dead code)
11
+ - **Professional Objectivity** — 10 agents gain explicit instruction to prioritize technical accuracy over agreement, present evidence when it conflicts with assumptions
12
+ - **Communication Standards** — all 14 agents gain response brevity rules: substance-first responses, no preamble, explicit uncertainty marking, file:line references
13
+ - **Documentation Convention** — 2 write agents (generalist, migrator) gain inline comment guidance (explain "why", not "what")
14
+ - **Context Management** — generalist gains instruction to continue working normally when context runs low
15
+ - **Testing Guidance** — generalist gains testing standards (verify behavior not implementation, max 3 mocks per test)
16
+ - **Scope Discipline** — refactorer gains explicit constraint: never expand scope beyond the requested refactoring
17
+ - **Tiered approach**: Tier 1 (generalist, 139→268 lines, all blocks), Tier 2 (4 write agents, full blocks), Tier 3 (9 read-only agents, compact blocks). 3 agents skipped (bash-exec, claude-guide, statusline-config — no project context needed)
18
+
19
+ #### Specification Workflow System (code-directive plugin — 4 new skills, 25 total)
20
+ - **`/spec-new`** — creates a new spec from the standard template in `.specs/`
21
+ - **`/spec-update`** — performs as-built spec update after implementation (checks off criteria, adds implementation notes, updates paths)
22
+ - **`/spec-check`** — audits spec health: stale specs, missing coverage, orphaned files
23
+ - **`/spec-init`** — bootstraps `.specs/` directory structure for projects that don't have one
24
+ - **`spec-reminder.py`** `[Stop]` — new advisory hook reminds about spec updates when implementation work is detected
25
+ - **Spec skills assigned to agents** — generalist and spec-writer agents gain spec skill access in frontmatter
26
+
27
+ #### Default Rules Distribution
28
+ - **`config/defaults/rules/`** — new directory containing default `.claude/rules/` files distributed to all projects via file-manifest
29
+ - **`spec-workflow.md`** — rule enforcing spec-before-implementation workflow, ≤200 line spec limit, `.specs/` directory convention, as-built update requirement
30
+ - **`workspace-scope.md`** — rule restricting file operations to the current project directory
31
+
32
+ #### New Plugin: auto-code-quality
33
+ - **Self-contained code quality plugin** — combines auto-formatter + auto-linter into a single drop-in plugin with independent temp file namespace (`claude-cq-*`). Includes all 7 formatters (Ruff, Biome, gofmt, shfmt, dprint, rustfmt, Black fallback) and 7 linters (Pyright, Ruff, Biome, ShellCheck, go vet, hadolint, clippy) plus syntax validation. Designed for use outside the CodeForge devcontainer where auto-formatter and auto-linter aren't available separately
34
+
35
+ ### Changed
36
+
37
+ #### Config System
38
+ - **`file-manifest.json`** — added 2 new entries for default rules files (`defaults/rules/spec-workflow.md`, `defaults/rules/workspace-scope.md`) targeting `${CLAUDE_CONFIG_DIR}/rules`
39
+ - **`setup-config.sh` bug fix** — fixed bash field-collapse bug where empty `destFilename` caused subsequent fields to shift. Uses `__NONE__` sentinel in jq output to prevent `read` from collapsing consecutive tab delimiters
40
+
41
+ #### Plugin References
42
+ - **`frontend-design` plugin name corrected** — fixed `frontend-design@claude-code-plugins` → `frontend-design@claude-plugins-official` in both `settings.json` and `CLAUDE.md`
43
+
44
+ #### Code-Directive Plugin
45
+ - **`hooks.json`** — added `spec-reminder.py` to Stop hooks (now 3 Stop hooks: advisory-test-runner, commit-reminder, spec-reminder)
46
+ - **`marketplace.json`** — added `auto-code-quality` plugin entry (10 plugins total, was 9)
47
+ - **Agent definitions** — 14 of 17 agents updated with orchestrator-mirrored instructions (see Agent Context Inheritance above)
48
+
49
+ #### Formatting
50
+ - **Whitespace normalization** — `settings.json`, `file-manifest.json`, `marketplace.json`, `hooks.json`, `package.json`, `setup-config.sh` reformatted to consistent tab indentation
51
+
52
+ ---
53
+
54
+ ## [v1.8.0] - 2026-02-09
55
+
56
+ ### Added
57
+
58
+ #### Config System: Declarative File Manifest
59
+ - **`config/file-manifest.json`** — new declarative manifest controlling which config files are copied and how. Replaces hardcoded `copy_file` calls with per-file `overwrite` modes: `"if-changed"` (sha256-based, default), `"always"`, or `"never"`
60
+ - **`config/defaults/`** — config files relocated from `config/` to `config/defaults/` (settings.json, keybindings.json, main-system-prompt.md)
61
+ - **`setup-config.sh` rewritten** — reads file-manifest.json, supports variable expansion (`${CLAUDE_CONFIG_DIR}`, `${WORKSPACE_ROOT}`), sha256-based change detection, and legacy fallback if manifest is missing
62
+
63
+ #### Features
64
+ - **ruff feature** — Python formatter/linter via `uv tool install ruff`; replaces Black as primary Python formatter (Black kept as fallback)
65
+ - **shfmt feature** — Shell script formatter via direct binary download from GitHub releases; supports `.sh`, `.bash`, `.zsh`, `.mksh`, `.bats`
66
+ - **dprint feature** — Pluggable formatter for Markdown, YAML, TOML, and Dockerfile via GitHub releases binary; ships global config at `/usr/local/share/dprint/dprint.json` with four plugins (markdown, yaml, toml, dockerfile)
67
+ - **shellcheck feature** — Shell script linter via `apt-get install`; JSON output parsing for structured diagnostics
68
+ - **hadolint feature** — Dockerfile linter via direct binary download from GitHub releases; JSON output parsing
69
+
70
+ #### Formatter Coverage (format-on-stop.py)
71
+ - **Ruff formatter** — `.py`/`.pyi` files now formatted with Ruff (falls back to Black if Ruff not installed)
72
+ - **Biome expanded** — added `.css`, `.json`, `.jsonc`, `.graphql`, `.gql`, `.html`, `.vue`, `.svelte`, `.astro` (was JS/TS only; now 18 extensions total)
73
+ - **shfmt integration** — `.sh`, `.bash`, `.zsh`, `.mksh`, `.bats` files auto-formatted on Stop
74
+ - **dprint integration** — `.md`, `.markdown`, `.yaml`, `.yml`, `.toml` files and `Dockerfile`/`.dockerfile` auto-formatted on Stop
75
+ - **rustfmt integration** — `.rs` files auto-formatted if `rustfmt` is in PATH (conditional, zero overhead when unused)
76
+
77
+ #### Linter Coverage (lint-file.py)
78
+ - **Ruff linter** — Python files now checked by both Pyright (type checking) and Ruff (style/correctness); complementary, not redundant
79
+ - **Biome lint** — JS/TS/CSS/GraphQL files linted via `biome lint --reporter=json`; surfaces unsafe diagnostics not auto-fixed by formatter
80
+ - **ShellCheck** — shell scripts linted via `shellcheck --format=json`; structured severity/line/message output
81
+ - **go vet** — `.go` files linted via `go vet`; stderr parsed for diagnostics
82
+ - **hadolint** — `Dockerfile`/`.dockerfile` files linted via `hadolint --format json`
83
+ - **clippy** — `.rs` files linted via `cargo clippy` if cargo is in PATH (conditional)
84
+
85
+ #### version:none Support
86
+ - **All 20 local features** now support `"version": "none"` in devcontainer.json to skip installation entirely
87
+ - Added `version` option to 7 features that previously lacked it: ccstatusline, notify-hook, shellcheck, mcp-qdrant, mcp-reasoner, splitrail, lsp-servers
88
+ - Added skip guard (`if [ "${VERSION}" = "none" ]; then exit 0; fi`) to all 20 install.sh files
89
+
90
+ #### Advisory Hooks (code-directive plugin)
91
+ - **advisory-test-runner.py** `[Stop]` — runs project test suite on Stop, injects pass/fail results as `additionalContext`. Never blocks (always exit 0). Detects pytest, vitest, jest, mocha, go test, cargo test. 60s timeout, truncates to last 30 lines
92
+ - **git-state-injector.py** `[SessionStart]` — injects branch, status summary, recent commits, and diff stats as `additionalContext` on every session start. 5s per git command, total output capped at 2000 chars
93
+ - **ticket-linker.py** `[UserPromptSubmit]` — auto-fetches GitHub issues/PRs when prompt contains `#123` or full GitHub URLs. Up to 3 refs per prompt, body capped at 1500 chars each
94
+ - **commit-reminder.py** `[Stop]` — checks for uncommitted changes (staged/unstaged counts) and injects advisory reminder as `additionalContext`. Checks `stop_hook_active`
95
+ - **todo-harvester.py** `[SessionStart]` — greps for TODO/FIXME/HACK/XXX across 13 source extensions, injects count + top 10 items. Excludes noise dirs, output capped at 800 chars
96
+
97
+ #### New Skills (code-directive plugin — 5 new, 21 total)
98
+ - **api-design** — REST conventions, error handling patterns, OpenAPI/Swagger guidance
99
+ - **ast-grep-patterns** — structural code search patterns across languages
100
+ - **dependency-management** — ecosystem-specific audit commands, license compliance
101
+ - **documentation-patterns** — docstring formats, API doc templates
102
+ - **migration-patterns** — Python and JavaScript framework migration guides
103
+
104
+ #### Commands & Scripts
105
+ - **`cc-tools`** — new shell function listing all installed CodeForge tools with version info
106
+ - **`check-setup`** — new health check script (`check-setup.sh`) verifying container setup is working correctly; aliased in shell rc files
107
+
108
+ #### Workspace
109
+ - **`CLAUDE.md`** — workspace-level project instructions (workspace scoping rules)
110
+ - **`test-project/`** — minimal test project directory
111
+
112
+ ### Changed
113
+
114
+ #### NPM Package (setup.js)
115
+ - **`--force` is now non-destructive** — selectively syncs files instead of rm+copy. Framework files (scripts, features, plugins) are overwritten; user config files (settings, keybindings, system prompt, file-manifest) are preserved with `.codeforge-new` versions saved for diffing
116
+ - **`--reset` flag** — new option for complete fresh install (deletes and re-copies everything)
117
+ - **`.codeforge-preserve`** — user-customizable file listing additional paths to preserve during `--force` updates
118
+ - **devcontainer.json handling** — user's version backed up as `.bak` during `--force`, then overwritten with package version
119
+ - **`.npmignore`** — excludes `.codeforge-new`, `.bak`, and `.codeforge-preserve` artifacts from npm package
120
+
121
+ #### Setup System
122
+ - **setup.sh** — removed `set -e` (individual script failures no longer abort the entire setup); structured pass/fail/skip reporting with elapsed time summary
123
+ - **setup-aliases.sh** — backs up `.bashrc`/`.zshrc` before modifying (keeps last 3 backups); cleans up old cc-tools/check-setup definitions; adds `cc-tools` function and `check-setup` alias
124
+ - **OVERWRITE_CONFIG deprecated** — replaced by per-file `overwrite` in `config/file-manifest.json`. Legacy env var triggers a deprecation warning
125
+
126
+ #### Code-Directive Plugin
127
+ - **hooks.json** — expanded from 3 to 6 hook events (added Stop, SessionStart, updated UserPromptSubmit with ticket-linker)
128
+ - **Agent definitions** — architect gains documentation outputs section + api-design skill link; multiple agents updated with refined instructions
129
+ - **skill-suggester.py** — added keyword mappings for 5 new skills (api-design, ast-grep-patterns, dependency-management, documentation-patterns, migration-patterns)
130
+ - **specification-writing skill** — expanded with additional templates and patterns
131
+ - **code-directive plugin.json** — description updated to "17 custom agents, 16 coding skills, agent redirection, syntax validation, and skill auto-suggestion"
132
+
133
+ #### Other
134
+ - **format-on-stop.py** — rewritten with expanded dispatch: 7 formatters covering 31 file extensions (was 3 formatters, 12 extensions)
135
+ - **lint-file.py** — rewritten as multi-language dispatcher: 7 linters across Python, JS/TS/CSS, Shell, Go, Dockerfile, Rust (was Pyright-only for Python)
136
+ - **auto-linter hook timeout** — increased from 30s to 60s (each individual linter subprocess still capped at 10s)
137
+ - **auto-formatter plugin.json** — description updated to reflect all 7 formatters
138
+ - **auto-linter plugin.json** — description updated to reflect all 7 linters
139
+ - **marketplace.json** — descriptions updated for auto-formatter, auto-linter, and code-directive plugins
140
+ - **devcontainer.json** — 5 new features registered in `overrideFeatureInstallOrder` and `features` object; added install order documentation comments
141
+ - **.env.example** — removed `OVERWRITE_CONFIG`, added `SETUP_PROJECTS`, updated descriptions
142
+ - **.gitignore** — updated with additional exclusions
143
+
144
+ ### Removed
145
+
146
+ - **`features/claude-code/`** — entire local feature deleted (Claude Code now installed via `ghcr.io/anthropics/devcontainer-features/claude-code:1`, the official Anthropic feature)
147
+ - **`config/settings.json`**, **`config/keybindings.json`**, **`config/main-system-prompt.md`** — moved to `config/defaults/` subdirectory
148
+ - **`OVERWRITE_CONFIG` env var** — deprecated in favor of `config/file-manifest.json` per-file overwrite modes
149
+
150
+ ### Documentation
151
+
152
+ - **New `docs/` directory** with 5 focused guides: configuration-reference, keybindings, optional-features, plugins, troubleshooting
153
+ - **CLAUDE.md** — rewritten for new config system (file-manifest.json, config/defaults/), added cc-tools/check-setup commands, added version:none section, updated plugin descriptions
154
+ - **README.md** — added new tools (ruff, shfmt, dprint, shellcheck, hadolint, Bun), updated config system docs, added SETUP_PROJECTS and PLUGIN_BLACKLIST env vars, updated ccstatusline description
155
+
156
+ ---
157
+
158
+ ## [v1.7.1] - 2026-02-08
159
+
160
+ ### Added
161
+
162
+ - **Automatic Git & NPM auth on container start** — new `setup-auth.sh` script reads tokens from `.devcontainer/.secrets` (or environment variables) and configures GitHub CLI, git user identity, and NPM registry auth automatically
163
+ - **`.secrets.example` template** — committed template showing required variables (`GH_TOKEN`, `GH_USERNAME`, `GH_EMAIL`, `NPM_TOKEN`)
164
+ - **`.env.example` template** — committed template for environment configuration (`.env` itself remains gitignored)
165
+ - **`SETUP_AUTH` env var** — controls whether auth setup runs on container start (default: `true`)
166
+ - **`AGENT-REDIRECTION.md`** — guide on how the PreToolUse hook system works, how built-in agents are swapped to custom ones, and what else is possible (prompt injection, model overrides, conditional routing, external service chaining)
167
+
168
+ ### Changed
169
+
170
+ - **README split by audience** — root `README.md` is now the npm/GitHub landing page (install, prerequisites, what's included, quick start); `.devcontainer/README.md` is now the usage guide (auth, tools, config, agents, keybindings, gotchas). No duplicated content between the two
171
+ - **Auto-linter moved to Stop hook** — was PostToolUse (ran pyright per-edit, caused agent re-reads); now batch-lints all edited Python files when Claude stops, matching auto-formatter's pattern. Uses its own temp file (`claude-lint-files-{session_id}`) independent of the formatter pipeline
172
+ - **`collect-edited-files.py`** — now writes to both `claude-edited-files-*` (formatter) and `claude-lint-files-*` (linter) temp files, keeping the two Stop hook pipelines independent
173
+ - **`.devcontainer/.gitignore`** — added `.secrets` explicit ignore and negation patterns (`!.env.example`, `!.secrets.example`, `!.gitignore`) to override root `.*` rule for files that should be tracked
174
+ - **`setup.sh` orchestration** — `setup-auth.sh` runs early (after symlink, before config/plugins) so NPM auth is available for plugin installation
175
+ - **`PLUGIN_BLACKLIST`** — cleared (was `"workflow-enhancer,planning-reminder"`)
176
+
177
+ ### Removed
178
+
179
+ - **`workflow-enhancer` plugin** — deleted entirely (was scaffolding only, never active)
180
+ - **`planning-reminder` plugin** — deleted entirely (redundant with Claude Code v2.1+ auto plan mode)
181
+
182
+ ---
183
+
3
184
  ## [v1.7.0] - 2026-02-08
4
185
 
5
186
  ### Added
@@ -10,15 +10,17 @@ CodeForge devcontainer for AI-assisted development with Claude Code.
10
10
  │ ├── devcontainer.json # Main container definition
11
11
  │ ├── .env # Environment variables
12
12
  │ ├── config/ # Default configurations
13
- │ │ ├── settings.json # Claude Code settings
14
- │ │ ├── keybindings.json # Claude Code keybindings
15
- │ │ └── main-system-prompt.md
13
+ │ │ ├── file-manifest.json # Declarative file-copy manifest
14
+ │ │ └── defaults/ # Files copied per manifest
15
+ │ │ ├── settings.json # Claude Code settings
16
+ │ │ ├── keybindings.json # Claude Code keybindings
17
+ │ │ └── main-system-prompt.md
16
18
  │ ├── features/ # Custom devcontainer features
17
19
  │ ├── plugins/ # Local plugin marketplace
18
20
  │ │ └── devs-marketplace/
19
21
  │ └── scripts/ # Setup scripts
20
22
  ├── .claude/ # Runtime Claude config (created on first run)
21
- │ ├── settings.json # Active settings (OVERWRITE_CONFIG=true rebuilt each start)
23
+ │ ├── settings.json # Active settings (managed by file-manifest.json)
22
24
  │ ├── keybindings.json # Active keybindings
23
25
  │ └── system-prompt.md # Active system prompt
24
26
  └── .gh/ # GitHub CLI config (persists across rebuilds)
@@ -31,11 +33,12 @@ CodeForge devcontainer for AI-assisted development with Claude Code.
31
33
  |------|---------|
32
34
  | `devcontainer.json` | Container definition: base image, features, mounts, environment |
33
35
  | `.env` | Environment variables controlling setup behavior |
34
- | `config/settings.json` | Claude Code defaults: model, tokens, permissions, plugins |
35
- | `config/keybindings.json` | Claude Code keybindings (empty by default customizable) |
36
- | `config/main-system-prompt.md` | Default system prompt defining assistant behavior |
36
+ | `config/file-manifest.json` | Declarative manifest controlling which config files are copied and how |
37
+ | `config/defaults/settings.json` | Claude Code defaults: model, tokens, permissions, plugins |
38
+ | `config/defaults/keybindings.json` | Claude Code keybindings (empty by default — customizable) |
39
+ | `config/defaults/main-system-prompt.md` | Default system prompt defining assistant behavior |
37
40
 
38
- > **Note**: `OVERWRITE_CONFIG=true` (default) means `.claude/settings.json` is overwritten on every container start. All persistent changes must go in `.devcontainer/config/settings.json`.
41
+ > **Note**: Config file copying is controlled by `config/file-manifest.json`. Each entry specifies `overwrite`: `"if-changed"` (default, sha256-based), `"always"`, or `"never"`. Persistent changes go in `.devcontainer/config/defaults/settings.json`.
39
42
 
40
43
  ## Commands
41
44
 
@@ -48,6 +51,8 @@ CodeForge devcontainer for AI-assisted development with Claude Code.
48
51
  | `gh` | GitHub CLI for repo operations |
49
52
  | `uv` | Fast Python package manager |
50
53
  | `ast-grep` | Structural code search |
54
+ | `cc-tools` | List all installed tools with version info |
55
+ | `check-setup` | Verify CodeForge setup health |
51
56
 
52
57
  ## Feature Development
53
58
 
@@ -68,7 +73,38 @@ To test a feature locally, reference it in `devcontainer.json`:
68
73
  }
69
74
  ```
70
75
 
71
- > **Note**: The old `./features/claude-code` local feature is no longer used. Claude Code is installed via `ghcr.io/anthropics/devcontainer-features/claude-code:1` (Anthropic's official feature). The local `features/claude-code/` directory contains only a fallback config for the feature's install script.
76
+ > **Note**: Claude Code is installed via `ghcr.io/anthropics/devcontainer-features/claude-code:1` (Anthropic's official feature).
77
+
78
+ ### Disabling Features with `version: "none"`
79
+
80
+ Every local feature supports `"version": "none"` to skip installation entirely. This is useful for trimming build time or disabling tools you don't need without removing them from `devcontainer.json`.
81
+
82
+ ```json
83
+ "features": {
84
+ "./features/ruff": { "version": "none" },
85
+ "./features/biome": {},
86
+ "./features/hadolint": { "version": "none" }
87
+ }
88
+ ```
89
+
90
+ When `version` is set to `"none"`, the feature's `install.sh` exits immediately with a skip message. The feature entry stays in `devcontainer.json` so re-enabling is a one-word change.
91
+
92
+ **All local features support this pattern:**
93
+ ast-grep, biome, ccstatusline, claude-monitor, dprint, hadolint, lsp-servers, mcp-qdrant, mcp-reasoner, notify-hook, ruff, shfmt, shellcheck, splitrail, tmux
94
+
95
+ **External features with `version: "none"` support:**
96
+ `ghcr.io/devcontainers/features/node`, `ghcr.io/devcontainers/features/github-cli`, `ghcr.io/devcontainers/features/docker-outside-of-docker`, `ghcr.io/devcontainers/features/go` (all official Microsoft features)
97
+
98
+ **External features without `version: "none"` support:**
99
+ `ghcr.io/devcontainers-extra/features/uv`, `ghcr.io/anthropics/devcontainer-features/claude-code`, `ghcr.io/nickmccurdy/bun`
100
+
101
+ > **Convention**: Every new local feature must include a `version` option (default `"latest"`) in its `devcontainer-feature.json` and a skip guard at the top of `install.sh`:
102
+ > ```bash
103
+ > if [ "${VERSION}" = "none" ]; then
104
+ > echo "[feature-name] Skipping installation (version=none)"
105
+ > exit 0
106
+ > fi
107
+ > ```
72
108
 
73
109
  ## Setup Scripts
74
110
 
@@ -77,7 +113,7 @@ Scripts in `./scripts/` run via `postStartCommand`:
77
113
  | Script | Purpose |
78
114
  |--------|---------|
79
115
  | `setup.sh` | Main orchestrator |
80
- | `setup-config.sh` | Copies config files (settings, keybindings, system prompt) to `/workspaces/.claude/` |
116
+ | `setup-config.sh` | Copies config files per `config/file-manifest.json` to destinations |
81
117
  | `setup-aliases.sh` | Creates `cc`/`claude`/`ccraw` shell aliases |
82
118
  | `setup-plugins.sh` | Registers local marketplace + installs official Anthropic plugins |
83
119
  | `setup-update-claude.sh` | Background auto-update of Claude Code binary |
@@ -86,10 +122,10 @@ Scripts in `./scripts/` run via `postStartCommand`:
86
122
 
87
123
  ## Installed Plugins
88
124
 
89
- Plugins are declared in `config/settings.json` under `enabledPlugins` and auto-activated on container start:
125
+ Plugins are declared in `config/defaults/settings.json` under `enabledPlugins` and auto-activated on container start:
90
126
 
91
127
  ### Official (Anthropic)
92
- - `frontend-design@claude-code-plugins` — UI/frontend design skill
128
+ - `frontend-design@claude-plugins-official` — UI/frontend design skill
93
129
 
94
130
  ### Local Marketplace (devs-marketplace)
95
131
  - `codeforge-lsp@devs-marketplace` — LSP for Python + TypeScript/JavaScript
@@ -97,8 +133,8 @@ Plugins are declared in `config/settings.json` under `enabledPlugins` and auto-a
97
133
  - `notify-hook@devs-marketplace` — Desktop notifications on completion
98
134
  - `dangerous-command-blocker@devs-marketplace` — Blocks destructive bash commands
99
135
  - `protected-files-guard@devs-marketplace` — Blocks edits to secrets/lock files
100
- - `auto-formatter@devs-marketplace` — Auto-formats Python/Go/JS/TS on stop
101
- - `auto-linter@devs-marketplace` — Auto-lints Python files via Pyright
136
+ - `auto-formatter@devs-marketplace` — Batch-formats edited files at Stop (Ruff/Black for Python, gofmt for Go, Biome for JS/TS/CSS/JSON/GraphQL/HTML, shfmt for Shell, dprint for Markdown/YAML/TOML/Dockerfile, rustfmt for Rust)
137
+ - `auto-linter@devs-marketplace` — Auto-lints edited files at Stop (Pyright + Ruff for Python, Biome for JS/TS/CSS/GraphQL, ShellCheck for Shell, go vet for Go, hadolint for Dockerfile, clippy for Rust)
102
138
  - `code-directive@devs-marketplace` — 17 custom agents, 16 skills, syntax validation, skill suggestions, agent redirect hook
103
139
 
104
140
  ### Local Marketplace
@@ -144,7 +180,7 @@ Claude Code runs inside VS Code's integrated terminal. VS Code intercepts some s
144
180
  | `Ctrl+P` | Quick Open | `chat:modelPicker` |
145
181
  | `Ctrl+R` | Open Recent | `history:search` |
146
182
 
147
- `Ctrl+P` and `Ctrl+F` are configured to pass through to the terminal via `terminal.integrated.commandsToSkipShell` in `devcontainer.json`. For other conflicts, use Meta (Alt) variants or customize via `config/keybindings.json`.
183
+ `Ctrl+P` and `Ctrl+F` are configured to pass through to the terminal via `terminal.integrated.commandsToSkipShell` in `devcontainer.json`. For other conflicts, use Meta (Alt) variants or customize via `config/defaults/keybindings.json`.
148
184
 
149
185
  ## Environment Variables
150
186
 
@@ -160,8 +196,9 @@ Key environment variables set in the container:
160
196
 
161
197
  ## Modifying Behavior
162
198
 
163
- 1. **Change default model**: Edit `config/settings.json`, update `"model"` field
164
- 2. **Change system prompt**: Edit `config/main-system-prompt.md`
165
- 3. **Change keybindings**: Edit `config/keybindings.json`
166
- 4. **Add features**: Add to `"features"` in `devcontainer.json`
167
- 5. **Disable auto-setup**: Set variables to `false` in `.env`
199
+ 1. **Change default model**: Edit `config/defaults/settings.json`, update `"model"` field
200
+ 2. **Change system prompt**: Edit `config/defaults/main-system-prompt.md`
201
+ 3. **Change keybindings**: Edit `config/defaults/keybindings.json`
202
+ 4. **Add a custom config file**: Add an entry to `config/file-manifest.json` with `src`, `dest`, and optional `overwrite`/`destFilename`
203
+ 5. **Add features**: Add to `"features"` in `devcontainer.json`
204
+ 6. **Disable auto-setup**: Set variables to `false` in `.env`