codeforge-dev 1.13.0 → 1.14.2

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 (148) hide show
  1. package/.devcontainer/CHANGELOG.md +146 -4
  2. package/.devcontainer/CLAUDE.md +61 -276
  3. package/.devcontainer/README.md +1 -1
  4. package/.devcontainer/config/defaults/ccstatusline-settings.json +147 -0
  5. package/.devcontainer/config/defaults/main-system-prompt.md +6 -1
  6. package/.devcontainer/config/defaults/rules/spec-workflow.md +1 -55
  7. package/.devcontainer/config/file-manifest.json +14 -0
  8. package/.devcontainer/devcontainer.json +19 -1
  9. package/.devcontainer/docs/optional-features.md +0 -65
  10. package/.devcontainer/docs/plugins.md +38 -23
  11. package/.devcontainer/features/ast-grep/devcontainer-feature.json +0 -1
  12. package/.devcontainer/features/biome/install.sh +13 -0
  13. package/.devcontainer/features/ccburn/devcontainer-feature.json +0 -6
  14. package/.devcontainer/features/ccms/devcontainer-feature.json +0 -1
  15. package/.devcontainer/features/ccms/install.sh +1 -1
  16. package/.devcontainer/features/ccstatusline/devcontainer-feature.json +0 -1
  17. package/.devcontainer/features/ccstatusline/install.sh +17 -115
  18. package/.devcontainer/features/ccusage/devcontainer-feature.json +0 -6
  19. package/.devcontainer/features/chromaterm/README.md +42 -0
  20. package/.devcontainer/features/chromaterm/chromaterm.yml +35 -0
  21. package/.devcontainer/features/chromaterm/devcontainer-feature.json +22 -0
  22. package/.devcontainer/features/chromaterm/install.sh +113 -0
  23. package/.devcontainer/features/claude-monitor/devcontainer-feature.json +0 -6
  24. package/.devcontainer/features/claude-session-dashboard/README.md +2 -2
  25. package/.devcontainer/features/claude-session-dashboard/devcontainer-feature.json +2 -4
  26. package/.devcontainer/features/claude-session-dashboard/install.sh +2 -2
  27. package/.devcontainer/features/kitty-terminfo/README.md +32 -0
  28. package/.devcontainer/features/kitty-terminfo/devcontainer-feature.json +13 -0
  29. package/.devcontainer/features/kitty-terminfo/install.sh +72 -0
  30. package/.devcontainer/features/lsp-servers/devcontainer-feature.json +0 -1
  31. package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +0 -7
  32. package/.devcontainer/features/shellcheck/install.sh +6 -2
  33. package/.devcontainer/features/tree-sitter/devcontainer-feature.json +0 -7
  34. package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +37 -69
  35. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/.claude-plugin/plugin.json +0 -1
  36. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/README.md +197 -0
  37. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/architect.md +3 -1
  38. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/bash-exec.md +3 -0
  39. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/claude-guide.md +4 -1
  40. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/debug-logs.md +6 -1
  41. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/dependency-analyst.md +5 -1
  42. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/doc-writer.md +4 -1
  43. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/explorer.md +3 -1
  44. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/generalist.md +9 -1
  45. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/git-archaeologist.md +3 -0
  46. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/migrator.md +4 -1
  47. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/perf-profiler.md +4 -1
  48. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/refactorer.md +5 -1
  49. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/researcher.md +5 -1
  50. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/security-auditor.md +4 -1
  51. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/spec-writer.md +3 -1
  52. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/statusline-config.md +4 -1
  53. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/test-writer.md +4 -1
  54. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/hooks/hooks.json +23 -1
  55. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/scripts/guard-readonly-bash.py +2 -2
  56. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/scripts/inject-cwd.py +7 -4
  57. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/scripts/task-completed-check.py +166 -0
  58. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/scripts/teammate-idle-check.py +81 -0
  59. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/scripts/verify-no-regression.py +14 -10
  60. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/scripts/verify-tests-pass.py +2 -14
  61. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/README.md +17 -31
  62. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/hooks/hooks.json +5 -1
  63. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/scripts/advisory-test-runner.py +9 -8
  64. package/.devcontainer/plugins/devs-marketplace/plugins/codeforge-lsp/README.md +28 -0
  65. package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/README.md +28 -0
  66. package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py +2 -2
  67. package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/README.md +28 -0
  68. package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/hooks/hooks.json +0 -1
  69. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/README.md +28 -0
  70. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected-bash.py +1 -1
  71. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +2 -2
  72. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/.claude-plugin/plugin.json +0 -1
  73. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/README.md +140 -0
  74. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/hooks/hooks.json +0 -1
  75. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/scripts/commit-reminder.py +3 -2
  76. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/scripts/git-state-injector.py +18 -2
  77. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/scripts/todo-harvester.py +9 -1
  78. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/.claude-plugin/plugin.json +0 -1
  79. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/README.md +158 -0
  80. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/hooks/hooks.json +1 -14
  81. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/scripts/skill-suggester.py +189 -100
  82. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/api-design/SKILL.md +9 -6
  83. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/ast-grep-patterns/SKILL.md +7 -6
  84. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/claude-agent-sdk/SKILL.md +8 -8
  85. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/claude-code-headless/SKILL.md +8 -9
  86. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/debugging/SKILL.md +11 -7
  87. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/dependency-management/SKILL.md +10 -6
  88. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/docker/SKILL.md +8 -8
  89. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/docker-py/SKILL.md +9 -7
  90. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/documentation-patterns/SKILL.md +7 -6
  91. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/fastapi/SKILL.md +9 -8
  92. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/git-forensics/SKILL.md +11 -9
  93. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/migration-patterns/SKILL.md +7 -6
  94. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/performance-profiling/SKILL.md +10 -8
  95. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/pydantic-ai/SKILL.md +8 -7
  96. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/refactoring-patterns/SKILL.md +9 -8
  97. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/security-checklist/SKILL.md +9 -8
  98. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/skill-building/SKILL.md +7 -7
  99. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/sqlite/SKILL.md +9 -7
  100. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/svelte5/SKILL.md +7 -8
  101. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/team/SKILL.md +71 -5
  102. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/testing/SKILL.md +10 -7
  103. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/.claude-plugin/plugin.json +0 -1
  104. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/README.md +192 -0
  105. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/hooks/hooks.json +0 -1
  106. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/scripts/spec-reminder.py +3 -2
  107. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-build/SKILL.md +9 -6
  108. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-check/SKILL.md +10 -5
  109. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-init/SKILL.md +8 -4
  110. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-new/SKILL.md +8 -4
  111. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-refine/SKILL.md +10 -7
  112. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-review/SKILL.md +10 -6
  113. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-update/SKILL.md +10 -5
  114. package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/specification-writing/SKILL.md +9 -9
  115. package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/plugin.json +1 -2
  116. package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/README.md +28 -0
  117. package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/hooks/hooks.json +0 -1
  118. package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/scripts/ticket-linker.py +9 -1
  119. package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/README.md +104 -32
  120. package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/hooks/hooks.json +49 -3
  121. package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py +269 -56
  122. package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/inject-workspace-cwd.py +44 -0
  123. package/.devcontainer/scripts/setup-aliases.sh +13 -5
  124. package/.devcontainer/scripts/setup-config.sh +1 -0
  125. package/README.md +5 -5
  126. package/package.json +6 -2
  127. package/setup.js +3 -2
  128. package/.devcontainer/.env +0 -33
  129. package/.devcontainer/features/README.md +0 -126
  130. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/.claude-plugin/plugin.json +0 -7
  131. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/README.md +0 -81
  132. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/hooks/hooks.json +0 -17
  133. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/__pycache__/format-on-stop.cpython-314.pyc +0 -0
  134. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-on-stop.py +0 -297
  135. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/.claude-plugin/plugin.json +0 -7
  136. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/README.md +0 -92
  137. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/hooks/hooks.json +0 -17
  138. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/__pycache__/lint-file.cpython-314.pyc +0 -0
  139. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/lint-file.py +0 -536
  140. package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/__pycache__/block-dangerous.cpython-314.pyc +0 -0
  141. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/__pycache__/guard-protected.cpython-314.pyc +0 -0
  142. package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/system-prompt.md +0 -184
  143. package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/__pycache__/guard-workspace-scope.cpython-314.pyc +0 -0
  144. /package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/{.claude-plugin/commands/debug.md → skills/debug/SKILL.md} +0 -0
  145. /package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/{.claude-plugin/commands/ticket/357/200/272create-pr.md" → skills/ticketcreate-pr/SKILL.md} +0 -0
  146. /package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/{.claude-plugin/commands/ticket/357/200/272new.md" → skills/ticketnew/SKILL.md} +0 -0
  147. /package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/{.claude-plugin/commands/ticket/357/200/272review-commit.md" → skills/ticketreview-commit/SKILL.md} +0 -0
  148. /package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/{.claude-plugin/commands/ticket/357/200/272work.md" → skills/ticketwork/SKILL.md} +0 -0
@@ -1,8 +1,152 @@
1
1
  # CodeForge Devcontainer Changelog
2
2
 
3
- ## [v1.13.0] - 2026-02-21
3
+ ## [v1.14.2] - 2026-02-24
4
+
5
+ ### Fixed
6
+
7
+ #### CI: Release Workflow (v1.14.1)
8
+ - **test.js** — settings.json path updated from `config/settings.json` to `config/defaults/settings.json` to match config externalization refactor
9
+ - **test.js** — Test 5 (executable check) result now included in exit condition; previously a failure was logged but did not affect the exit code
10
+ - **setup.js** — file permissions changed from 644 to 755 (executable) to match shebang and `bin` declaration in package.json
11
+
12
+ #### CI: Publish DevContainer Features Workflow (v1.14.1)
13
+ - **features/README.md** — removed from features directory; `devcontainers/action@v1` treated it as a feature subdirectory and failed looking for `README.md/devcontainer-feature.json`
14
+ - **11 devcontainer-feature.json files** — removed `"maintainer"` field (not in the DevContainer Feature spec schema, causing strict validation failure): ast-grep, ccburn, ccms, ccstatusline, ccusage, chromaterm, claude-monitor, claude-session-dashboard, lsp-servers, mcp-qdrant, tree-sitter
15
+
16
+ #### CI: Publish DevContainer Features Workflow (v1.14.2)
17
+ - **6 devcontainer-feature.json files** — removed `"proposals"` field that coexisted with `"enum"` on the same option (spec schema treats them as mutually exclusive via `anyOf`): ccburn, ccusage, claude-monitor, claude-session-dashboard, mcp-qdrant, tree-sitter
18
+
19
+ #### Docs
20
+ - **Active sidebar item** — increased background opacity from 0.08 to 0.14, added `font-weight: 600` and `color: var(--sl-color-accent-high)` for readable contrast against inactive items
21
+
22
+ ## [v1.14.0] - 2026-02-24
23
+
24
+ ### Fixed (CodeRabbit review)
25
+ - **chromaterm/install.sh** — username auto-detection now resets to empty before candidate loop, so `${USERNAME:-root}` fallback works correctly
26
+ - **biome/install.sh** — nvm.sh sourcing wrapped in `set +u` / `set -u` to prevent unbound variable abort under `set -euo pipefail`
27
+ - **setup.js** — `ccstatusline-settings.json` added to DEFAULT_PRESERVE so user customizations survive `--force` package updates
28
+ - **docs agent-system.md** — spec-writer moved from Full-Access to Read-Only agents table (matches its `permissionMode: plan` definition)
29
+ - **guard-readonly-bash.py** — docstring corrected from "Returns JSON on stdout" to "Outputs block reason to stderr"
30
+ - **git-forensics/SKILL.md** — misleading "Blame through renames" comment fixed to "Show patch history through renames"
31
+
32
+ ### Added
33
+
34
+ #### Nuclear Workspace Scope Enforcement
35
+ - **Blacklist system** — `/workspaces/.devcontainer/` permanently blocked for ALL operations (read, write, bash). Checked before allowlist, scope check, and cwd bypass. Cannot be overridden, even from workspace root
36
+ - **Bash enforcement** — two-layer detection in `guard-workspace-scope.py`:
37
+ - Layer 1: 20+ regex patterns extract write targets (`>`, `tee`, `cp`, `mv`, `touch`, `mkdir`, `rm`, `ln`, `rsync`, `chmod`, `chown`, `dd`, `wget -O`, `curl -o`, `tar -C`, `unzip -d`, `gcc -o`, `sqlite3`). System command exemption only when ALL targets resolve to system paths
38
+ - Layer 2: regex scans entire command for any `/workspaces/` path string — catches inline scripts, variable assignments, quoted paths. No exemptions, always runs
39
+ - **CWD context injector** (`inject-workspace-cwd.py`) — fires on SessionStart, UserPromptSubmit, PreToolUse, SubagentStart to reinforce working directory scope
40
+ - **Fail-closed error handling** — JSON parse errors, exceptions, and unknown tools now exit 2 (block) instead of exit 0 (allow)
41
+
42
+ #### Agent System Enhancements
43
+ - **`task-completed-check.py`** — quality gate hook (TaskCompleted) runs test suite before allowing task completion
44
+ - **`teammate-idle-check.py`** — quality gate hook (TeammateIdle) prevents teammates from going idle with incomplete tasks
45
+ - **`skills/debug/SKILL.md`** — structured log investigation skill replacing the old `/debug` slash command
46
+ - **`permissionMode`** declared on all 17 agent definitions (plan for read-only, default for write-capable)
47
+ - **Agent-system README** — full plugin documentation with hook lifecycle, agent table, quality gates
48
+
49
+ #### Skill Engine Enhancements
50
+ - **6 new skill matchers** in `skill-suggester.py`: `spec-check`, `spec-init`, `spec-new`, `spec-refine`, `spec-update`, `team`
51
+ - **Team skill expanded** (v0.2.0) — quality gate hooks, plan approval workflow, keyboard shortcuts, use case examples, best practices, limitations
52
+ - **Skill-engine README** — full plugin documentation
53
+
54
+ #### New Features
55
+ - **chromaterm** — terminal output colorizer via ChromaTerm2 YAML rules
56
+ - **kitty-terminfo** — xterm-kitty terminfo for Kitty terminal compatibility
57
+
58
+ #### Documentation Site
59
+ - **Astro/Starlight docs** (`docs/`) — full documentation portal with getting-started guides, plugin reference (12 pages), feature docs, customization, and API reference
60
+ - **GitHub Actions** — `deploy-docs.yml` (docs deployment), `publish-features.yml` (GHCR feature publishing), `release.yml` (release workflow)
61
+ - **Logos** — CodeForgeLogo.png, CodeForgeLogoTr.png, github-avatar.png
62
+
63
+ #### Plugin Installation Documentation
64
+ - **Remote install instructions** added to all 11 plugin READMEs — "From GitHub" section with clone + enabledPlugins setup from `https://github.com/AnExiledDev/CodeForge`
65
+ - **GHCR feature paths** — features README updated with `ghcr.io/anexileddev/codeforge/<feature-name>:<version>` and devcontainer.json usage examples
66
+ - **READMEs added** to session-context, skill-engine, spec-workflow plugins
67
+ - **Install sections added** to workspace-scope-guard, codeforge-lsp, dangerous-command-blocker, protected-files-guard, notify-hook, ticket-workflow
68
+
69
+ #### Other
70
+ - **Marketplace metadata** — `marketplace.json` restructured with `metadata` object, `pluginRoot`, and `keywords` arrays for all plugins
71
+ - **Port forwarding** for Claude Dashboard (port 7847) in devcontainer.json
72
+ - **ChromaTerm wrapper** in setup-aliases.sh — `cc`/`claude`/`ccw` aliases pipe through `ct` when available
73
+ - **`package.json` scripts** — added `prepublishOnly`, `docs:dev`, `docs:build`, `docs:preview`
74
+
75
+ #### ccstatusline Config Externalization
76
+ - **Widget config extracted** from inline `jq -n` generation in `install.sh` into `config/defaults/ccstatusline-settings.json` — editable JSON file, single source of truth
77
+ - **File-manifest deployment** — two new entries deploy the config to `~/.config/ccstatusline/settings.json` (if-changed) and `/usr/local/share/ccstatusline/settings.template.json` (always)
78
+ - **`${HOME}` variable expansion** added to `setup-config.sh` — enables manifest entries targeting user home directory paths
79
+
80
+ #### Development Rules
81
+ - **CLAUDE.md** (project root) — added changelog and documentation update rules: all changes must have a changelog entry and update relevant docs
82
+
83
+ ### Changed
4
84
 
5
- Claude Code is an idiot sandwich and ignored my instructions and workspace scope because it's a god damned idiot.
85
+ #### ccstatusline Feature
86
+ - `install.sh` simplified — removed ~90 lines of inline JSON config generation, validation, and template creation. Config deployment now handled by file-manifest system
87
+
88
+ #### Workspace Scope Guard
89
+ - Reads (Read, Glob, Grep) now **hard-blocked** outside scope — upgraded from warning (exit 0) to block (exit 2)
90
+ - Allowlist trimmed to `/workspaces/.claude/` and `/tmp/` only — removed `/workspaces/.devcontainer/`, `/workspaces/.tmp/`, `/home/vscode/`
91
+ - Hook timeout increased from 5s to 10s
92
+ - Matcher expanded to include Bash tool
93
+
94
+ #### Hook Output Schema Migration
95
+ - All hooks migrated to `hookSpecificOutput` wrapper with explicit `hookEventName`
96
+ - `commit-reminder.py` — upgraded from advisory to blocking (`decision: block`)
97
+ - `spec-reminder.py` — upgraded from advisory to blocking (`decision: block`)
98
+ - `advisory-test-runner.py` — test failures now block with `decision: block`; passes/timeouts use `systemMessage`
99
+ - `ticket-linker.py` — output wrapped in `hookSpecificOutput`
100
+ - `git-state-injector.py`, `todo-harvester.py` — output wrapped in `hookSpecificOutput`
101
+
102
+ #### Ticket Workflow
103
+ - Migrated from slash commands to skill-based approach — 4 slash commands and system-prompt.md replaced by skills directory
104
+
105
+ #### Skill Definitions
106
+ - All 21+ SKILL.md files rewritten with USE WHEN / DO NOT USE guidance, action-oriented descriptions, bumped to v0.2.0
107
+ - `skill-suggester.py` keyword maps overhauled with natural phrases and concrete identifiers
108
+ - Skill suggestion output changed to mandatory directive format
109
+ - SubagentStart hook removed — suggestions now fire on UserPromptSubmit only
110
+
111
+ #### Error Output
112
+ - `block-dangerous.py` — errors now written to stderr (was JSON on stdout)
113
+ - `guard-protected.py`, `guard-protected-bash.py` — errors now written to stderr
114
+
115
+ #### Features
116
+ - `ccstatusline` — compact 3-line layout (was 8-line), `rawValue: true` on token widgets
117
+ - `claude-session-dashboard` — default port 3000 → 7847, `--host 0.0.0.0` for external access
118
+ - `ccms` — build cache moved from `.devcontainer/.build-cache/` to `${TMPDIR:-/tmp}/ccms-build-cache`
119
+
120
+ #### Configuration
121
+ - `CLAUDE.md` (devcontainer) — condensed from ~308 to ~90 lines, removed redundant sections
122
+ - `spec-workflow.md` rule — condensed, defers to system prompt `<specification_management>` section
123
+ - `main-system-prompt.md` — expanded Agent Teams guidance: file ownership, task sizing, quality gate hooks, plan approval
124
+ - Plugin `plugin.json` files — `version` field removed across all plugins
125
+
126
+ ### Fixed
127
+ - Stale references to deleted features (mcp-reasoner, splitrail, claude-code) removed from docs
128
+ - Documentation counts updated (features: 21, agents: 17, skills: 34)
129
+ - Version mismatch in README.md corrected
130
+ - Auto-formatter/auto-linter references consolidated to auto-code-quality throughout
131
+ - Code-directive plugin references updated to agent-system, skill-engine, spec-workflow
132
+ - Personal project paths removed from .gitignore and .npmignore
133
+ - setup.js stale feature references fixed (Reasoner MCP, Go → Rust)
134
+ - `.secrets` added to .npmignore for npm publish safety
135
+ - Duplicate "### Fixed" header in v1.5.3 changelog entry
136
+ - NVM sourcing added to biome install script
137
+ - Cleanup trap added to shellcheck install script
138
+
139
+ ### Removed
140
+ - **`auto-formatter` plugin** — deleted entirely (consolidated into auto-code-quality)
141
+ - **`auto-linter` plugin** — deleted entirely (consolidated into auto-code-quality)
142
+ - **`/debug` slash command** from agent-system (replaced by debug skill)
143
+ - **4 ticket-workflow slash commands** (`ticket:new`, `ticket:work`, `ticket:review-commit`, `ticket:create-pr`) and `system-prompt.md` (replaced by skills)
144
+ - **Optional features docs** for mcp-reasoner and splitrail (features no longer exist)
145
+ - **SubagentStart hook** from skill-engine (suggestion now UserPromptSubmit only)
146
+
147
+ ---
148
+
149
+ ## [v1.13.0] - 2026-02-21
6
150
 
7
151
  ### Fixed
8
152
 
@@ -488,8 +632,6 @@ Claude Code is an idiot sandwich and ignored my instructions and workspace scope
488
632
  - **ccstatusline powerline glyphs**: Powerline separators/caps were empty strings, rendering as underscores. Now uses proper Nerd Font glyphs (U+E0B0, U+E0B4, U+E0B6)
489
633
  - **Unicode rendering in external terminals**: tmux rendered ALL Unicode as underscores because `docker exec` doesn't propagate locale vars. External terminal scripts now pass `LANG`/`LC_ALL=en_US.UTF-8` and use `tmux -u` to force UTF-8 mode. Locale exports also added to `.bashrc`/`.zshrc` as permanent fallback
490
634
 
491
- ### Fixed
492
-
493
635
  - **cc/claude aliases**: Converted from shell functions to simple aliases — functions were not reliably invoked across shell contexts (tmux, docker exec, external terminals), causing Claude to launch without config
494
636
  - **CLAUDE_CONFIG_DIR export**: Now exported in `.bashrc`/`.zshrc` directly, so credentials are found in all shells (not just VS Code terminals where `remoteEnv` applies)
495
637
 
@@ -5,308 +5,93 @@ CodeForge devcontainer for AI-assisted development with Claude Code.
5
5
  ## Directory Structure
6
6
 
7
7
  ```
8
- /workspaces/
9
- ├── .devcontainer/ # Container configuration (this directory)
10
- ├── devcontainer.json # Main container definition
11
- ├── .env # Environment variables
12
- │ ├── config/ # Default configurations
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
18
- │ │ └── writing-system-prompt.md
19
- ├── features/ # Custom devcontainer features
20
- │ ├── plugins/ # Local plugin marketplace
21
- │ │ └── devs-marketplace/
22
- │ └── scripts/ # Setup scripts
23
- ├── .claude/ # Runtime Claude config (created on first run)
24
- │ ├── settings.json # Active settings (managed by file-manifest.json)
25
- │ ├── keybindings.json # Active keybindings
26
- │ └── main-system-prompt.md # Active system prompt
27
- └── .gh/ # GitHub CLI config (persists across rebuilds)
28
- └── hosts.yml # Authenticated hosts
8
+ .devcontainer/
9
+ ├── devcontainer.json # Container definition
10
+ ├── .env # Setup flags (SETUP_CONFIG, SETUP_ALIASES, etc.)
11
+ ├── config/
12
+ │ ├── file-manifest.json # Declarative config file deployment
13
+ └── defaults/ # Source files deployed on start via file-manifest
14
+ ├── settings.json # Model, permissions, plugins, env vars
15
+ │ ├── main-system-prompt.md
16
+ │ ├── ccstatusline-settings.json # Status bar widget layout
17
+ └── rules/ # Deployed to .claude/rules/
18
+ ├── features/ # Custom devcontainer features
19
+ ├── plugins/devs-marketplace/ # Local plugin marketplace
20
+ └── scripts/ # Setup scripts (run via postStartCommand)
29
21
  ```
30
22
 
31
- ## Key Configuration Files
23
+ ## Key Configuration
32
24
 
33
25
  | File | Purpose |
34
26
  |------|---------|
35
- | `devcontainer.json` | Container definition: base image, features, mounts, environment |
36
- | `.env` | Environment variables controlling setup behavior |
37
- | `config/file-manifest.json` | Declarative manifest controlling which config files are copied and how |
38
- | `config/defaults/settings.json` | Claude Code defaults: model, tokens, permissions, plugins |
39
- | `config/defaults/keybindings.json` | Claude Code keybindings (empty by default — customizable) |
40
- | `config/defaults/main-system-prompt.md` | Default system prompt defining assistant behavior |
41
- | `config/defaults/writing-system-prompt.md` | Creative-writing system prompt used by `ccw` alias |
27
+ | `config/defaults/settings.json` | Model, tokens, permissions, plugins, env vars |
28
+ | `config/defaults/main-system-prompt.md` | System prompt defining assistant behavior |
29
+ | `config/defaults/ccstatusline-settings.json` | Status bar widget layout (deployed to ~/.config/ccstatusline/) |
30
+ | `config/file-manifest.json` | Controls which config files deploy and when |
31
+ | `devcontainer.json` | Container definition: image, features, mounts |
32
+ | `.env` | Boolean flags controlling setup steps |
42
33
 
43
- > **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`.
34
+ Config files deploy via `file-manifest.json` on every container start. Most deploy to `/workspaces/.claude/`; ccstatusline config deploys to `~/.config/ccstatusline/`. Each entry supports `overwrite`: `"if-changed"` (default, sha256), `"always"`, or `"never"`. Supported variables: `${CLAUDE_CONFIG_DIR}`, `${WORKSPACE_ROOT}`, `${HOME}`.
44
35
 
45
36
  ## Commands
46
37
 
47
38
  | Command | Purpose |
48
39
  |---------|---------|
49
- | `claude` | Run Claude Code with auto-configuration (prefers native binary at `~/.local/bin/claude`) |
50
- | `cc` | Shorthand for `claude` with config |
51
- | `ccraw` | Vanilla Claude Code without any config (bypasses function override) |
52
- | `ccw` | Claude Code with the writing system prompt — uses `writing-system-prompt.md` instead of `main-system-prompt.md`, optimized for creative and technical writing tasks |
53
- | `ccusage` | Analyze token usage history |
54
- | `ccburn` | Real-time token burn rate visualization |
55
- | `agent-browser` | Headless Chromium for browser automation (Playwright-based) |
56
- | `gh` | GitHub CLI for repo operations |
57
- | `uv` | Fast Python package manager |
58
- | `ast-grep` | Structural code search |
59
- | `ccms` | Search Claude Code session history (project-scoped) |
60
- | `cc-tools` | List all installed tools with version info |
40
+ | `cc` / `claude` | Run Claude Code with auto-configuration |
41
+ | `ccraw` | Vanilla Claude Code (bypasses config) |
42
+ | `ccw` | Claude Code with writing system prompt |
43
+ | `ccms` | Search session history (project-scoped) |
44
+ | `ccusage` / `ccburn` | Token usage analysis / burn rate |
45
+ | `agent-browser` | Headless Chromium (Playwright-based) |
61
46
  | `check-setup` | Verify CodeForge setup health |
62
- | `claude-dashboard` | Local session analytics dashboard (web UI on port 3000) |
47
+ | `claude-dashboard` | Session analytics dashboard (port 7847) |
48
+ | `cc-tools` | List all installed tools with versions |
49
+
50
+ ## Plugins
51
+
52
+ Declared in `settings.json` under `enabledPlugins`, auto-activated on start:
53
+
54
+ - **agent-system** — 17 custom agents + built-in agent redirection
55
+ - **skill-engine** — 21 general coding skills + auto-suggestion
56
+ - **spec-workflow** — 8 spec lifecycle skills + spec-reminder hook
57
+ - **session-context** — Git state injection, TODO harvesting, commit reminders
58
+ - **auto-code-quality** — Auto-format + auto-lint + advisory test runner
59
+ - **workspace-scope-guard** — Blocks writes outside working directory
60
+ - **dangerous-command-blocker** — Blocks destructive bash commands
61
+ - **protected-files-guard** — Blocks edits to secrets/lock files
62
+ - **codeforge-lsp** — LSP for Python + TypeScript/JavaScript
63
+ - **ticket-workflow** — EARS ticket workflow + auto-linking
64
+ - **notify-hook** — Desktop notifications on completion
65
+ - **frontend-design** (Anthropic official) — UI/frontend design skill
63
66
 
64
- ## Feature Development
65
-
66
- Custom features live in `./features/`. Each feature follows the [devcontainer feature spec](https://containers.dev/implementors/features/):
67
-
68
- ```
69
- features/
70
- └── my-feature/
71
- ├── devcontainer-feature.json # Metadata and options
72
- ├── install.sh # Installation script
73
- └── README.md # Documentation
74
- ```
75
-
76
- To test a feature locally, reference it in `devcontainer.json`:
77
- ```json
78
- "features": {
79
- "./features/my-feature": {}
80
- }
81
- ```
82
-
83
- > **Note**: Claude Code is installed via `ghcr.io/anthropics/devcontainer-features/claude-code:1` (Anthropic's official feature).
84
-
85
- ### Disabling Features with `version: "none"`
86
-
87
- 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`.
88
-
89
- ```json
90
- "features": {
91
- "./features/ruff": { "version": "none" },
92
- "./features/biome": {},
93
- "./features/hadolint": { "version": "none" }
94
- }
95
- ```
96
-
97
- 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.
98
-
99
- **Currently disabled features** (not needed for Python/JS/TS workflow):
100
-
101
- | Feature | Handles | Reason |
102
- |---------|---------|--------|
103
- | `shfmt` | Shell formatting | Not needed — Python/JS/TS only |
104
- | `shellcheck` | Shell linting | Not needed — Python/JS/TS only |
105
- | `hadolint` | Dockerfile linting | Not needed — Python/JS/TS only |
106
- | `dprint` | Markdown/YAML/TOML/Dockerfile formatting | Not needed — Python/JS/TS only |
107
-
108
- The auto-formatter and auto-linter plugins gracefully skip missing tools at runtime.
109
-
110
- **All local features support this pattern:**
111
- ast-grep, biome, ccms, ccstatusline, claude-monitor, claude-session-dashboard, dprint, hadolint, lsp-servers, mcp-qdrant, mcp-reasoner, notify-hook, ruff, shfmt, shellcheck, splitrail, tmux
112
-
113
- **External features with `version: "none"` support:**
114
- `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)
115
-
116
- **External features without `version: "none"` support:**
117
- `ghcr.io/devcontainers-extra/features/uv`, `ghcr.io/anthropics/devcontainer-features/claude-code`, `ghcr.io/rails/devcontainer/features/bun`
118
-
119
- **External features with `version: "none"` support (Rust):**
120
- `ghcr.io/devcontainers/features/rust` (official Microsoft feature)
121
-
122
- > **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`:
123
- > ```bash
124
- > if [ "${VERSION}" = "none" ]; then
125
- > echo "[feature-name] Skipping installation (version=none)"
126
- > exit 0
127
- > fi
128
- > ```
129
-
130
- ## Setup Scripts
131
-
132
- Scripts in `./scripts/` run via `postStartCommand`:
133
-
134
- | Script | Purpose |
135
- |--------|---------|
136
- | `setup.sh` | Main orchestrator |
137
- | `setup-config.sh` | Copies config files per `config/file-manifest.json` to destinations |
138
- | `setup-aliases.sh` | Creates `cc`/`claude`/`ccraw`/`ccw` shell aliases (prefers native binary at `~/.local/bin/claude` via `_CLAUDE_BIN`) |
139
- | `setup-plugins.sh` | Registers local marketplace + installs official Anthropic plugins |
140
- | `setup-update-claude.sh` | Installs native Claude Code binary on first run; background auto-updates on subsequent starts |
141
- | `setup-terminal.sh` | Configures VS Code Shift+Enter keybinding for Claude Code multi-line input |
142
- | `setup-projects.sh` | Auto-detects projects for VS Code Project Manager |
143
- | `setup-auth.sh` | Configures Git and NPM auth from `.secrets` file or environment variables |
144
- | `check-setup.sh` | Verifies CodeForge setup health (binary paths, config files, features) |
145
- | `setup-symlink-claude.sh` | Symlinks ~/.claude for third-party tool compatibility |
146
-
147
- ### External Terminal
148
-
149
- `connect-external-terminal.sh` connects to the running devcontainer from an external terminal with tmux support for Claude Code Agent Teams split-pane workflows. Run from the host:
150
- ```bash
151
- .devcontainer/connect-external-terminal.sh
152
- ```
153
-
154
- On Windows, use `connect-external-terminal.ps1` (PowerShell equivalent).
155
-
156
- ## Installed Plugins
157
-
158
- Plugins are declared in `config/defaults/settings.json` under `enabledPlugins` and auto-activated on container start:
159
-
160
- ### Official (Anthropic)
161
- - `frontend-design@claude-plugins-official` — UI/frontend design skill
162
-
163
- ### Local Marketplace (devs-marketplace)
164
- - `codeforge-lsp@devs-marketplace` — LSP for Python + TypeScript/JavaScript
165
- - `ticket-workflow@devs-marketplace` — EARS-based ticket workflow with GitHub integration and auto-linking hook
166
- - `notify-hook@devs-marketplace` — Desktop notifications on completion
167
- - `dangerous-command-blocker@devs-marketplace` — Blocks destructive bash commands
168
- - `protected-files-guard@devs-marketplace` — Blocks edits to secrets/lock files
169
- - `agent-system@devs-marketplace` — 17 custom agents with built-in agent redirection, CWD injection, and read-only bash enforcement
170
- - `skill-engine@devs-marketplace` — 21 coding skills with auto-suggestion hook
171
- - `spec-workflow@devs-marketplace` — 8 spec lifecycle skills with spec-reminder hook
172
- - `session-context@devs-marketplace` — Session boundary hooks (git state injection, TODO harvesting, commit reminders)
173
- - `auto-code-quality@devs-marketplace` — Combined auto-format + auto-lint + advisory test runner
174
- - `workspace-scope-guard@devs-marketplace` — Blocks writes and warns on reads outside the working directory
175
-
176
- ### Local Marketplace
177
-
178
- The `devs-marketplace` in `plugins/` provides locally-managed plugins:
179
-
180
- ```
181
- plugins/devs-marketplace/
182
- ├── .claude-plugin/
183
- │ └── marketplace.json # Marketplace manifest
184
- └── plugins/
185
- ├── codeforge-lsp/ # Combined LSP plugin
186
- ├── ticket-workflow/ # EARS ticket workflow + auto-linking hook
187
- ├── agent-system/ # 17 custom agents + redirection
188
- ├── skill-engine/ # 21 coding skills + auto-suggestion
189
- ├── spec-workflow/ # 8 spec lifecycle skills
190
- ├── session-context/ # Session boundary hooks
191
- ├── auto-code-quality/ # Combined format + lint + test runner
192
- ├── workspace-scope-guard/ # Workspace scope enforcement
193
- └── ...
194
- ```
195
-
196
- ## Agents & Skills
197
-
198
- Agents and skills are distributed across focused plugins:
199
-
200
- **Agents** (`plugins/devs-marketplace/plugins/agent-system/agents/`):
201
- architect, bash-exec, claude-guide, debug-logs, dependency-analyst, doc-writer, explorer, generalist, git-archaeologist, migrator, perf-profiler, refactorer, researcher, security-auditor, spec-writer, statusline-config, test-writer
202
-
203
- The `redirect-builtin-agents.py` hook (PreToolUse/Task) transparently swaps built-in agent types to these custom agents (e.g., Explore→explorer, Plan→architect).
204
-
205
- **General Skills** (`plugins/devs-marketplace/plugins/skill-engine/skills/`):
206
- api-design, ast-grep-patterns, claude-agent-sdk, claude-code-headless, debugging, dependency-management, docker, docker-py, documentation-patterns, fastapi, git-forensics, migration-patterns, performance-profiling, pydantic-ai, refactoring-patterns, security-checklist, skill-building, sqlite, svelte5, team, testing
207
-
208
- **Spec Skills** (`plugins/devs-marketplace/plugins/spec-workflow/skills/`):
209
- spec-build, spec-check, spec-init, spec-new, spec-refine, spec-review, spec-update, specification-writing
210
-
211
- ## VS Code Keybinding Conflicts
212
-
213
- Claude Code runs inside VS Code's integrated terminal. VS Code intercepts some shortcuts before they reach the terminal:
67
+ ## Rules System
214
68
 
215
- | Shortcut | VS Code Action | Claude Code Action |
216
- |----------|---------------|-------------------|
217
- | `Ctrl+G` | Go to Line | `chat:externalEditor` |
218
- | `Ctrl+S` | Save File | `chat:stash` |
219
- | `Ctrl+T` | Open Symbol | `app:toggleTodos` |
220
- | `Ctrl+O` | Open File | `app:toggleTranscript` |
221
- | `Ctrl+B` | Toggle Sidebar | `task:background` |
222
- | `Ctrl+P` | Quick Open | `chat:modelPicker` |
223
- | `Ctrl+R` | Open Recent | `history:search` |
69
+ Rules in `config/defaults/rules/` deploy to `.claude/rules/` on every container start. They load into ALL sessions automatically.
224
70
 
225
- `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`.
71
+ **Current rules:** `spec-workflow.md`, `workspace-scope.md`, `session-search.md`
226
72
 
227
- ## Environment Variables
73
+ **Adding rules:** Create `.md` in `config/defaults/rules/`, add a manifest entry in `file-manifest.json`.
228
74
 
229
- Key environment variables set in the container:
75
+ ## Environment
230
76
 
231
77
  | Variable | Value |
232
78
  |----------|-------|
233
- | `WORKSPACE_ROOT` | `/workspaces` |
234
79
  | `CLAUDE_CONFIG_DIR` | `/workspaces/.claude` |
235
- | `GH_CONFIG_DIR` | `/workspaces/.gh` |
236
80
  | `ANTHROPIC_MODEL` | `claude-opus-4-6` |
237
- | `TMPDIR` | `/workspaces/.tmp` |
238
- | `CLAUDECODE` | `null` (unset) |
239
-
240
- Setting `"CLAUDECODE": null` in `remoteEnv` unsets this variable inside the container, which allows nested Claude Code sessions (claude-in-claude) that would otherwise be blocked by the outer session's detection flag.
241
-
242
- All setup steps are controlled by boolean flags in `.devcontainer/.env`. Set any to `false` to disable:
243
- `SETUP_CONFIG`, `SETUP_ALIASES`, `SETUP_AUTH`, `SETUP_PLUGINS`, `SETUP_UPDATE_CLAUDE`, `SETUP_TERMINAL`, `SETUP_PROJECTS`, `SETUP_POSTSTART`.
244
-
245
- ### Experimental Environment Variables
246
-
247
- These are set in `config/defaults/settings.json` under `env` and control Claude Code experimental features:
248
-
249
- | Variable | Value | Description |
250
- |----------|-------|-------------|
251
- | `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | `1` | Enables Agent Teams (multi-agent orchestration) |
252
- | `CLAUDE_CODE_EFFORT_LEVEL` | `high` | Sets reasoning effort level |
253
- | `CLAUDE_CODE_ENABLE_TASKS` | `true` | Enables the task/todo system |
254
- | `CLAUDE_CODE_PLAN_MODE_INTERVIEW_PHASE` | `true` | Enables interview phase before plan execution |
255
- | `CLAUDE_CODE_PLAN_V2_AGENT_COUNT` | `3` | Number of agents in Plan V2 orchestration |
256
- | `CLAUDE_CODE_PLAN_MODE_REQUIRED` | `true` | Forces plan mode for teammate agents |
257
- | `ENABLE_CLAUDE_CODE_SM_COMPACT` | `1` | Enables smart compaction for context management |
258
- | `CLAUDE_CODE_FORCE_GLOBAL_CACHE` | `1` | Forces global prompt caching |
259
- | `FORCE_AUTOUPDATE_PLUGINS` | `1` | Auto-updates plugins on every session start |
260
-
261
- ## Git Worktrees
262
-
263
- CodeForge supports git worktrees for working on multiple branches simultaneously.
264
-
265
- ### Layout
266
-
267
- Worktrees live in a `.worktrees/` directory alongside the main repo:
268
-
269
- ```
270
- /workspaces/projects/
271
- ├── CodeForge/ # main repo (.git directory)
272
- └── .worktrees/ # worktree container
273
- ├── feature-a/ # worktree checkout (.git file)
274
- └── bugfix-b/ # worktree checkout (.git file)
275
- ```
276
-
277
- ### Creating Compatible Worktrees
278
-
279
- ```bash
280
- cd /workspaces/projects/CodeForge
281
- mkdir -p /workspaces/projects/.worktrees
282
- git worktree add /workspaces/projects/.worktrees/my-branch my-branch
283
- ```
284
-
285
- ### Project Detection
286
-
287
- - `setup-projects.sh` scans `.worktrees/` directories at depth 3 (inside container dirs like `projects/`)
288
- - Worktrees are detected by their `.git` file (containing `gitdir:`) and tagged with both `"git"` and `"worktree"` in Project Manager
289
- - Each worktree appears as an independent project in VS Code Project Manager
290
-
291
- ### Compatibility
81
+ | `WORKSPACE_ROOT` | `/workspaces` |
292
82
 
293
- - `workspace-scope-guard` resolves worktree paths correctly via `os.path.realpath()`
294
- - `protected-files-guard` protects both `.git/` directories and `.git` files (worktree pointers)
295
- - Read-only agents (e.g., git-archaeologist) can use `git worktree list` but cannot add/remove worktrees
83
+ All experimental feature flags are in `settings.json` under `env`. Setup steps controlled by boolean flags in `.env`.
296
84
 
297
85
  ## Modifying Behavior
298
86
 
299
- 1. **Change default model**: Edit `config/defaults/settings.json`, update `"model"` field
87
+ 1. **Change model**: Edit `config/defaults/settings.json` `"model"` field
300
88
  2. **Change system prompt**: Edit `config/defaults/main-system-prompt.md`
301
- 3. **Change keybindings**: Edit `config/defaults/keybindings.json`
302
- 4. **Add a custom config file**: Add an entry to `config/file-manifest.json` with `src`, `dest`, and optional `overwrite`/`destFilename`
303
- 5. **Add features**: Add to `"features"` in `devcontainer.json`
304
- 6. **Disable auto-setup**: Set variables to `false` in `.env`
305
-
306
- ## Rules System
307
-
308
- Rules live in `config/defaults/rules/` and are copied to `.claude/rules/` by the file manifest (`config/file-manifest.json`) on every container start. Unlike CLAUDE.md (which loads on demand when entering a project), rules load automatically on every Claude Code session.
89
+ 3. **Add config file**: Add entry to `config/file-manifest.json`
90
+ 4. **Add features**: Add to `"features"` in `devcontainer.json`
91
+ 5. **Disable features**: Set `"version": "none"` in the feature's config
92
+ 6. **Disable setup steps**: Set flags to `false` in `.env`
93
+ 7. **Customize status bar**: Edit `config/defaults/ccstatusline-settings.json`
309
94
 
310
- **Current rules**: `spec-workflow.md`, `workspace-scope.md`, `session-search.md`
95
+ ## Features
311
96
 
312
- **Adding custom rules**: Create a `.md` file in `config/defaults/rules/`, then add a manifest entry in `config/file-manifest.json` pointing to `${CLAUDE_CONFIG_DIR}/rules` as the destination. The rule will be deployed on the next container start.
97
+ Custom features in `./features/` follow the [devcontainer feature spec](https://containers.dev/implementors/features/). Every local feature supports `"version": "none"` to skip installation. Claude Code is installed via `ghcr.io/anthropics/devcontainer-features/claude-code:1`.
@@ -434,7 +434,7 @@ Common issues and solutions. For detailed troubleshooting, see [docs/troubleshoo
434
434
  **CodeForge Documentation**:
435
435
  - [Configuration Reference](docs/configuration-reference.md) — all env vars and config options
436
436
  - [Plugin System](docs/plugins.md) — plugin architecture and per-plugin docs
437
- - [Optional Features](docs/optional-features.md) — mcp-qdrant and other optional components
437
+ - [Optional Features](docs/optional-features.md) — mcp-qdrant and other optional components, disabling features
438
438
  - [Keybinding Customization](docs/keybindings.md) — resolving VS Code conflicts
439
439
  - [Troubleshooting](docs/troubleshooting.md) — common issues and solutions
440
440