codeforge-dev 1.14.1 → 2.0.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 (111) hide show
  1. package/{.devcontainer/config/defaults → .codeforge/config}/ccstatusline-settings.json +44 -6
  2. package/{.devcontainer/config/defaults → .codeforge/config}/main-system-prompt.md +14 -6
  3. package/.codeforge/config/orchestrator-system-prompt.md +333 -0
  4. package/{.devcontainer/config/defaults → .codeforge/config}/settings.json +3 -1
  5. package/{.devcontainer/config → .codeforge}/file-manifest.json +15 -9
  6. package/{.devcontainer → .codeforge/scripts}/connect-external-terminal.sh +3 -1
  7. package/.devcontainer/.env.example +5 -5
  8. package/.devcontainer/.secrets.example +3 -0
  9. package/.devcontainer/CHANGELOG.md +251 -3
  10. package/.devcontainer/CLAUDE.md +129 -22
  11. package/.devcontainer/README.md +34 -19
  12. package/.devcontainer/devcontainer.json +28 -10
  13. package/.devcontainer/features/agent-browser/install.sh +2 -0
  14. package/.devcontainer/features/ast-grep/install.sh +2 -0
  15. package/.devcontainer/features/biome/install.sh +2 -0
  16. package/.devcontainer/features/ccburn/devcontainer-feature.json +0 -5
  17. package/.devcontainer/features/ccburn/install.sh +2 -0
  18. package/.devcontainer/features/ccms/install.sh +2 -0
  19. package/.devcontainer/features/ccstatusline/README.md +7 -6
  20. package/.devcontainer/features/ccstatusline/install.sh +9 -4
  21. package/.devcontainer/features/ccusage/devcontainer-feature.json +0 -5
  22. package/.devcontainer/features/ccusage/install.sh +2 -0
  23. package/.devcontainer/features/chromaterm/chromaterm.yml +2 -2
  24. package/.devcontainer/features/chromaterm/install.sh +2 -0
  25. package/.devcontainer/features/claude-code-native/README.md +47 -0
  26. package/.devcontainer/features/claude-code-native/devcontainer-feature.json +29 -0
  27. package/.devcontainer/features/claude-code-native/install.sh +131 -0
  28. package/.devcontainer/features/claude-monitor/devcontainer-feature.json +0 -5
  29. package/.devcontainer/features/claude-monitor/install.sh +2 -0
  30. package/.devcontainer/features/claude-session-dashboard/README.md +2 -2
  31. package/.devcontainer/features/claude-session-dashboard/devcontainer-feature.json +1 -2
  32. package/.devcontainer/features/claude-session-dashboard/install.sh +2 -0
  33. package/.devcontainer/features/dprint/install.sh +2 -0
  34. package/.devcontainer/features/hadolint/install.sh +2 -0
  35. package/.devcontainer/features/kitty-terminfo/README.md +3 -1
  36. package/.devcontainer/features/kitty-terminfo/install.sh +2 -0
  37. package/.devcontainer/features/lsp-servers/install.sh +2 -0
  38. package/.devcontainer/features/mcp-qdrant/CHANGES.md +3 -3
  39. package/.devcontainer/features/mcp-qdrant/README.md +1 -0
  40. package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +1 -7
  41. package/.devcontainer/features/mcp-qdrant/install.sh +9 -2
  42. package/.devcontainer/features/mcp-qdrant/poststart-hook.sh +9 -2
  43. package/.devcontainer/features/notify-hook/devcontainer-feature.json +1 -1
  44. package/.devcontainer/features/notify-hook/install.sh +2 -0
  45. package/.devcontainer/features/ruff/install.sh +2 -0
  46. package/.devcontainer/features/shellcheck/install.sh +2 -0
  47. package/.devcontainer/features/shfmt/install.sh +2 -0
  48. package/.devcontainer/features/tmux/README.md +3 -3
  49. package/.devcontainer/features/tmux/install.sh +3 -1
  50. package/.devcontainer/features/tree-sitter/devcontainer-feature.json +0 -6
  51. package/.devcontainer/features/tree-sitter/install.sh +2 -0
  52. package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +27 -11
  53. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/README.md +23 -4
  54. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/claude-guide.md +4 -4
  55. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/documenter.md +254 -0
  56. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/implementer.md +260 -0
  57. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/investigator.md +255 -0
  58. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/tester.md +304 -0
  59. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/README.md +1 -1
  60. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/scripts/advisory-test-runner.py +4 -2
  61. package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py +2 -2
  62. package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/.claude-plugin/plugin.json +7 -0
  63. package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/README.md +125 -0
  64. package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/skills/pr-review/SKILL.md +325 -0
  65. package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/skills/ship/SKILL.md +314 -0
  66. package/.devcontainer/plugins/devs-marketplace/plugins/prompt-snippets/.claude-plugin/plugin.json +5 -0
  67. package/.devcontainer/plugins/devs-marketplace/plugins/prompt-snippets/README.md +52 -0
  68. package/.devcontainer/plugins/devs-marketplace/plugins/prompt-snippets/skills/ps/SKILL.md +37 -0
  69. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected-bash.py +1 -1
  70. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +1 -1
  71. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/README.md +30 -14
  72. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/hooks/hooks.json +13 -1
  73. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/scripts/collect-session-edits.py +44 -0
  74. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/scripts/commit-reminder.py +89 -10
  75. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/.claude-plugin/plugin.json +1 -1
  76. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/README.md +19 -11
  77. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/scripts/skill-suggester.py +476 -282
  78. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/worktree/SKILL.md +227 -0
  79. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/worktree/references/manual-worktree-commands.md +238 -0
  80. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/worktree/references/parallel-workflow-patterns.md +228 -0
  81. package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/scripts/ticket-linker.py +2 -2
  82. package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/README.md +1 -1
  83. package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py +3 -2
  84. package/.devcontainer/scripts/check-setup.sh +5 -3
  85. package/.devcontainer/scripts/preflight.sh +113 -0
  86. package/.devcontainer/scripts/setup-aliases.sh +13 -8
  87. package/.devcontainer/scripts/setup-auth.sh +46 -0
  88. package/.devcontainer/scripts/setup-config.sh +29 -10
  89. package/.devcontainer/scripts/setup-migrate-claude.sh +80 -0
  90. package/.devcontainer/scripts/setup-migrate-codeforge.sh +60 -0
  91. package/.devcontainer/scripts/setup-plugins.sh +3 -1
  92. package/.devcontainer/scripts/setup-projects.sh +3 -1
  93. package/.devcontainer/scripts/setup-terminal.sh +3 -1
  94. package/.devcontainer/scripts/setup-update-claude.sh +22 -27
  95. package/.devcontainer/scripts/setup.sh +57 -5
  96. package/LICENSE.txt +14 -0
  97. package/README.md +79 -5
  98. package/package.json +2 -1
  99. package/setup.js +392 -21
  100. package/.devcontainer/docs/configuration-reference.md +0 -93
  101. package/.devcontainer/docs/keybindings.md +0 -100
  102. package/.devcontainer/docs/optional-features.md +0 -64
  103. package/.devcontainer/docs/plugins.md +0 -176
  104. package/.devcontainer/docs/troubleshooting.md +0 -128
  105. package/.devcontainer/scripts/setup-symlink-claude.sh +0 -36
  106. /package/{.devcontainer/config/defaults → .codeforge/config}/keybindings.json +0 -0
  107. /package/{.devcontainer/config/defaults → .codeforge/config}/rules/session-search.md +0 -0
  108. /package/{.devcontainer/config/defaults → .codeforge/config}/rules/spec-workflow.md +0 -0
  109. /package/{.devcontainer/config/defaults → .codeforge/config}/rules/workspace-scope.md +0 -0
  110. /package/{.devcontainer/config/defaults → .codeforge/config}/writing-system-prompt.md +0 -0
  111. /package/{.devcontainer → .codeforge/scripts}/connect-external-terminal.ps1 +0 -0
@@ -1,18 +1,266 @@
1
1
  # CodeForge Devcontainer Changelog
2
2
 
3
- ## [v1.14.1] - 2026-02-24
3
+ ## [Unreleased]
4
+
5
+ ### Changed
6
+
7
+ #### Port Forwarding
8
+ - Dynamic port forwarding for all ports in VS Code — previously only port 7847 was statically forwarded; now all ports auto-forward with notification
9
+
10
+ #### Documentation
11
+ - Updated prerequisites and installation docs to support all DevContainer clients (VS Code, CLI, JetBrains Gateway, DevPod, Codespaces)
12
+ - Added tabbed client-specific instructions on the installation page
13
+ - Added dedicated port forwarding reference page covering VS Code auto-detect, devcontainer-bridge, and SSH tunneling
14
+ - **Ported `.devcontainer/docs/` to docs site** — migrated content from 5 legacy reference docs into the Starlight documentation site:
15
+ - New **Keybindings** page (Customization) — VS Code/Claude Code shortcut conflicts and resolution options
16
+ - New **Troubleshooting** page (Reference) — 12+ problem/solution entries for build, auth, plugins, and performance issues
17
+ - New **Optional Features** page (Customization) — mcp-qdrant vector memory setup guide
18
+ - Merged setup variables (`.env` flags) into the Environment Variables reference
19
+ - Merged `.secrets` file authentication docs into the Configuration page
20
+ - Removed `.devcontainer/docs/` directory — all content now lives in the docs site
21
+
22
+ ### Fixed
23
+
24
+ #### Session Context Plugin
25
+ - **Commit reminder** no longer blocks Claude from stopping — switched from `decision: "block"` to advisory `systemMessage` wrapped in `<system-reminder>` tags
26
+ - **Commit reminder** now uses tiered logic: meaningful changes (3+ files, 2+ source files, or test files) get an advisory suggestion; small changes are silent
27
+ - **Commit reminder** only fires when the session actually modified files (via new PostToolUse edit tracker), preventing false reminders during read-only sessions
28
+
29
+ #### Auto Code Quality Plugin
30
+ - **Advisory test runner** now reads from the correct tmp file prefix (`claude-cq-edited` instead of `claude-edited-files`), fixing a mismatch that prevented it from ever finding edited files
31
+
32
+ #### Docs
33
+ - Removed stale merge conflict marker in first-session docs page
34
+
35
+ ### Added
36
+
37
+ #### Startup
38
+ - **Container runtime pre-flight check** — validates Docker or Podman is installed and running before attempting to build the devcontainer; aborts with OS-specific remediation guidance (Windows/WSL, macOS, Linux) instead of a cryptic Docker client error
39
+
40
+ #### README
41
+ - **"Why CodeForge?" section** — motivation and value proposition explaining the project's origins as a power user's personal setup
42
+ - **Architecture overview** — three-layer diagram (DevContainer → CodeForge Layer → Claude Code) with brief descriptions and link to full architecture docs
43
+ - **Configuration summary** — table of key config files with links to the documentation site
44
+
45
+ #### Public Repo Quality
46
+ - **CI workflow** (`.github/workflows/ci.yml`) — test and lint jobs on PRs and pushes to main (Node 18, `npm test` + Biome check)
47
+ - **CodeQL security analysis** (`.github/workflows/codeql.yml`) — JavaScript scanning on PRs, pushes, and weekly schedule
48
+ - **Dependabot** (`.github/dependabot.yml`) — weekly updates for npm (root + docs) and GitHub Actions
49
+ - **Bug report template** (`.github/ISSUE_TEMPLATE/bug-report.yml`) — YAML form with version, environment, and repro steps
50
+ - **Feature request template** (`.github/ISSUE_TEMPLATE/feature-request.yml`) — YAML form with problem/solution/alternatives
51
+ - **Issue template config** (`.github/ISSUE_TEMPLATE/config.yml`) — commercial licensing contact link
52
+ - **Pull request template** (`.github/pull_request_template.md`) — description, type of change, and checklist
53
+ - **CONTRIBUTING.md** — contribution guidelines with GPL-3.0 licensing and CLA requirement
54
+ - **CLA.md** — Individual Contributor License Agreement enabling dual licensing
55
+ - **Dual licensing notice** — added to README.md (Contributing + License sections) and LICENSE.txt (header)
56
+ - **CI badge** — added to README.md badge row
57
+ - **SPDX copyright headers** — `GPL-3.0-only` identifier and `Copyright (c) 2026 Marcus Krueger` added to all 36 source files (setup.js, test.js, 34 shell scripts)
58
+
59
+ #### Docs
60
+ - **CLAUDE.md** — new "Status Bar Widgets" section documenting widget properties, token color conventions, label fusion pattern, and available widget types
61
+
62
+ #### Skills
63
+ - **worktree** — New skill for git worktree creation, management, and cleanup. Covers `EnterWorktree` tool, `--worktree` CLI flag, `.worktreeinclude` setup, worktree naming conventions, cleanup lifecycle, and CodeForge integration (Project Manager auto-detection, agent isolation). Includes two reference files: manual worktree commands and parallel workflow patterns.
64
+
65
+ #### Claude Code Installation
66
+ - **Post-start onboarding hook** (`99-claude-onboarding.sh`) — ensures `hasCompletedOnboarding: true` in `.claude.json` when token auth is configured; catches overwrites from Claude Code CLI/extension that race with `postStartCommand`
67
+
68
+ #### Git Workflow Plugin
69
+ - **`/ship`** — Combined commit/push/PR command with full code review, commit message approval, and AskUserQuestion confirmation before PR creation; optionally links to tickets if context exists
70
+ - **`/pr:review`** — Review any PR by number/URL or auto-detect from current branch; posts findings as PR comment with severity ratings; never approves or merges
71
+
72
+ #### Features
73
+ - **devcontainer-bridge (dbr)** — Ports opened inside the container are now automatically discovered and forwarded to the host, even outside VS Code. Requires `dbr host-daemon` running on the host. See [devcontainer-bridge](https://github.com/bradleybeddoes/devcontainer-bridge)
74
+
75
+ #### Orchestrator Mode
76
+ - **`cc-orc` alias** — new Claude Code entry point using `orchestrator-system-prompt.md` for delegation-first operation; orchestrator decomposes tasks, delegates to agents, surfaces questions, and synthesizes results without performing direct implementation work
77
+ - **`orchestrator-system-prompt.md`** — slim system prompt (~250 lines) containing only delegation model, agent catalog, question surfacing protocol, planning gates, spec enforcement, and action safety; all code standards, testing standards, and implementation details live in agent prompts
78
+
79
+ #### Workhorse Agents
80
+ - **`investigator`** — consolidated read-only research agent (sonnet) merging the domains of researcher, explorer, dependency-analyst, git-archaeologist, debug-logs, and perf-profiler; handles codebase search, web research, git forensics, dependency auditing, log analysis, and performance profiling
81
+ - **`implementer`** — consolidated read-write implementation agent (opus, worktree) merging generalist, refactorer, and migrator; handles all code modifications with embedded code standards, execution discipline, and Stop hook regression testing
82
+ - **`tester`** — enhanced test agent (opus, worktree) with full testing standards, framework-specific guidance, and Stop hook verification; creates and verifies test suites
83
+ - **`documenter`** — consolidated documentation and specification agent (opus) merging doc-writer and spec-writer; handles README, API docs, docstrings, and the full spec lifecycle (create, refine, build, review, update, check)
84
+ - **Question Surfacing Protocol** — all 4 workhorse agents carry an identical protocol requiring them to STOP and return `## BLOCKED: Questions` sections when hitting ambiguities, ensuring no assumptions are made without user input
85
+
86
+ ### Fixed
87
+
88
+ #### CCStatusLine Deployment
89
+ - **`CONFIG_SOURCE_DIR` deprecation guard** — `setup.sh` now detects stale `CONFIG_SOURCE_DIR=/workspaces/.claude` in `.env`, overrides to `$DEVCONTAINER_DIR/config`, and auto-comments the line on disk; the wrong path caused `setup-config.sh` to skip the file manifest entirely, leaving ccstatusline (and all manifest-based configs) undeployed
90
+ - **System template directory permissions** — `install.sh` now chowns `/usr/local/share/ccstatusline/` to the target user so `setup-config.sh` can write the template file during post-start
91
+ - **Silent copy failures** — `setup-config.sh` now reports warnings when file deployment fails instead of logging success after a failed `cp`
92
+
93
+ #### Post-Integration Review Fixes
94
+ - **skill-engine** — worktree skill definition uses weighted tuples (was plain strings, caused crash)
95
+ - **dangerous-command-blocker** — fail closed on unexpected exceptions (was fail-open)
96
+ - **ticket-workflow** — remove redundant `ValueError` from exception handlers
97
+ - **workspace-scope-guard** — use maxsplit in variable assignment detection
98
+ - **Shell scripts** — add executable bit to `check-setup.sh`, quote `PLUGIN_BLACKLIST` variable, add `set -uo pipefail` to tmux installer, replace deprecated `which` with `command -v`, normalize `&>` redirects in setup scripts
99
+ - **Documentation** — update agent count to 21, skill count to 38, plugin count to 14 across all docs site pages
100
+ - **Documentation** — add missing plugin pages for git-workflow and prompt-snippets
101
+ - **Documentation** — add `cc-orc` and `dbr` to commands reference
102
+ - **Documentation** — remove merge conflict marker from first-session.md
103
+ - **Documentation** — update architecture.md directory tree with new plugins
104
+
105
+ #### CodeRabbit Review Fixes
106
+ - **`implementer.md`** — changed PostToolUse hook (fires every Edit) to Stop hook (fires once at task end) with 120s timeout; prevents redundant test runs during multi-file tasks
107
+ - **`tester.md`** — increased Stop hook timeout from 30s to 120s to accommodate larger test suites
108
+ - **`setup-aliases.sh`** — added `cc-orc` to `cc-tools` discovery loop so it appears in tool audit
109
+ - **`CLAUDE.md`** — added missing `keybindings.json`, `orchestrator-system-prompt.md`, and `writing-system-prompt.md` to directory structure tree
110
+ - **`agent-system/README.md`** — updated `verify-no-regression.py` comment to list both consumers (implementer, refactorer); hyphenated "question-surfacing protocol"
111
+ - **`orchestrator-system-prompt.md`** — clarified plan mode allows investigator delegation for research; added catch-all entry in selection criteria pointing to the full specialist catalog
112
+ - **MD040 compliance** — added `text` language specifiers to 7 fenced code blocks across `investigator.md`, `tester.md`, and `documenter.md`
113
+ - **`setup.js` path traversal** — `configApply()` now validates that source paths resolve within `.codeforge/` and destination paths resolve within allowed directories (`CLAUDE_CONFIG_DIR`, `HOME`, `/usr/local/`), preventing directory traversal via `../` in manifest entries
114
+ - **`setup.sh` CODEFORGE_DIR** — deprecation guard now uses default-assignment semantics (`:=`) instead of unconditional overwrite, preserving any user-defined `CODEFORGE_DIR` from `.env`
115
+ - **Docs site URLs** — replaced `anexileddev.github.io/CodeForge/` with custom domain `codeforge.core-directive.com/` across README.md, CLAUDE.md, and .devcontainer/README.md
116
+ - **Architecture docs** — added `.checksums/` and `.markers/` directories to the `.codeforge/` tree in architecture.md
117
+ - **Troubleshooting docs** — renamed "Reset to Defaults" to "How to Reset" and clarified that `--reset` preserves `.codeforge/` user modifications; added step for restoring default config sources
118
+
119
+ ### Changed
120
+
121
+ #### Skill Engine: Auto-Suggestion
122
+ - **Weighted scoring** — Skill suggestion phrases now carry confidence weights (0.0–1.0) instead of binary match/no-match. Specific phrases like "build a fastapi app" score 1.0; ambiguous phrases like "start building" score 0.2
123
+ - **Negative patterns** — Skills can define substrings that instantly disqualify them. Prevents `fastapi` from triggering when discussing `pydantic-ai`, and `docker` from triggering for `docker-py` prompts
124
+ - **Context guards** — Low-confidence matches (score < 0.6) require a confirming context word elsewhere in the prompt. "health check" only suggests `docker` if "docker", "container", or "compose" also appears
125
+ - **Ranked results, capped at 3** — Suggestions are sorted by score (then priority tier), and only the top 3 are returned. Eliminates 6+ skill suggestion floods
126
+ - **Priority tiers** — Explicit commands (priority 10) outrank technology skills (7), which outrank patterns (5) and generic skills (3) when scores tie
127
+
128
+ #### Claude Code Installation
129
+ - **Claude Code now installs as a native binary** — uses Anthropic's official installer (`https://claude.ai/install.sh`) via new `./features/claude-code-native` feature, replacing the npm-based `ghcr.io/anthropics/devcontainer-features/claude-code:1.0.5`
130
+ - **In-session auto-updater now works without root** — native binary at `~/.local/bin/claude` is owned by the container user, so `claude update` succeeds without permission issues
131
+
132
+ #### System Prompt
133
+ - **`<git_worktrees>` section** — Updated to document Claude Code native worktree convention (`<repo>/.claude/worktrees/`) as the recommended approach alongside the legacy `.worktrees/` convention. Added `EnterWorktree` tool guidance, `.worktreeinclude` file documentation, and path convention comparison table.
134
+
135
+ #### Configuration
136
+ - Moved `.claude` directory from `/workspaces/.claude` to `~/.claude` (home directory)
137
+ - Added Docker named volume for persistence across rebuilds (per-instance isolation via `${devcontainerId}`)
138
+ - `CLAUDE_CONFIG_DIR` now defaults to `~/.claude`
139
+ - `file-manifest.json` — added deployment entry for `orchestrator-system-prompt.md`
140
+ - `setup-aliases.sh` — added `cc-orc` alias alongside existing `cc`, `claude`, `ccw`, `ccraw`
141
+ - `CLAUDE.md` — documented `cc-orc` command and orchestrator system prompt in key configuration table
142
+
143
+ #### Agent System
144
+ - Agent count increased from 17 to 21 (4 workhorse + 17 specialist)
145
+ - Agent-system README updated with workhorse agent table, per-agent hooks for implementer and tester, and updated plugin structure
146
+
147
+ #### Authentication
148
+ - Added `CLAUDE_AUTH_TOKEN` support in `.secrets` for long-lived tokens from `claude setup-token`
149
+ - Auto-creates `.credentials.json` from token on container start (skips if already exists)
150
+ - Added `CLAUDE_AUTH_TOKEN` to devcontainer.json secrets declaration
151
+
152
+ #### Security
153
+ - Protected-files-guard now blocks modifications to `.credentials.json`
154
+ - Replaced `eval` tilde expansion with `getent passwd` lookup across all scripts (prevents shell injection via `SUDO_USER`/`USER`)
155
+ - Auth token value is now JSON-escaped before writing to `.credentials.json`
156
+ - Credential directory created with restrictive umask (700) matching credential file permissions (600)
157
+
158
+ #### Status Bar
159
+ - **ccstatusline line 1** — distinct background colors for each token widget (blue=input, magenta=output, yellow=cached, green=total), bold 2-char labels (In, Ou, Ca, Tt) fused to data widgets, `rawValue: true` on model widget to strip "Model:" prefix, restored spacing between token segments
160
+
161
+ #### Scripts
162
+ - Replaced `setup-symlink-claude.sh` with `setup-migrate-claude.sh` (one-time migration)
163
+ - Auto-migrates from `/workspaces/.claude/` if `.credentials.json` present
164
+ - `chown` in mcp-qdrant poststart hooks now uses resolved `_USERNAME` instead of hardcoded `vscode` or `$(id -un)`
165
+ - **Migration script hardened** — switched from `cp -rn` to `cp -a` (archive mode); added marker-based idempotency, critical file verification, ownership fixup, and old-directory rename
166
+ - **`.env` deprecation guard** — `setup.sh` detects stale `CLAUDE_CONFIG_DIR=/workspaces/.claude` in `.env`, overrides to `$HOME/.claude`, and auto-comments the line on disk
167
+
168
+ #### Documentation
169
+ - All docs now reference `~/.claude` as default config path
170
+ - Added `CLAUDE_AUTH_TOKEN` setup flow to README, configuration reference, and troubleshooting
171
+ - ccstatusline README verification commands now respect `CLAUDE_CONFIG_DIR`
4
172
 
5
173
  ### Fixed
6
174
 
7
- #### CI: Release Workflow
175
+ #### Claude Code Installation
176
+ - **Update script no longer silently discards errors** — background update output now captured to log file instead of being discarded via `&>/dev/null`
177
+ - **Update script simplified to native-binary-only** — removed npm fallback and `claude install` bootstrap code; added 60s timeout and transitional npm cleanup
178
+ - **Alias resolution simplified** — `_CLAUDE_BIN` now resolves directly to native binary path (removed npm and `/usr/local/bin` fallbacks)
179
+ - **POSIX redirect** — replaced `&>/dev/null` with `>/dev/null 2>&1` in dependency check for portability
180
+ - **Installer shell** — changed `sh -s` to `bash -s` when piping the official installer (it requires bash)
181
+ - **Unquoted `${TARGET}`** — quoted variable in `su -c` command to prevent word splitting
182
+ - **Directory prep** — added `~/.local/state` and `~/.claude` pre-creation; consolidated `chown` to cover entire `~/.local` tree
183
+
184
+ #### Plugin Marketplace
185
+ - **`marketplace.json` schema fix** — changed all 11 plugin `source` fields from bare names (e.g., `"codeforge-lsp"`) to relative paths (`"./plugins/codeforge-lsp"`) so `claude plugin marketplace add` passes schema validation and all plugins register correctly
186
+
187
+ #### ChromaTerm
188
+ - **Regex lookbehinds** — replaced alternation inside lookbehinds (`(?<=[\s(]|^)` and `(?<=commit |merge |...)`) with non-capturing groups containing individual lookbehinds (`(?:(?<=[\s(])|^)` and `(?:(?<=commit )|(?<=merge )|...)`) for PCRE2 compatibility
189
+
190
+ #### Terminal Color Support
191
+ - **devcontainer.json** — added `TERM` and `COLORTERM=truecolor` to `remoteEnv`; Docker defaults to `TERM=xterm` (8 colors) which caused Claude Code and other CLI tools to downgrade rendering
192
+ - **devcontainer.json** — `TERM` uses `${localEnv:TERM:xterm-256color}` to forward the host terminal type (e.g., `xterm-kitty`) instead of unconditionally overriding it
193
+ - **setup-aliases.sh** — added terminal color defaults to managed shell block so tmux panes, `docker exec`, and SSH sessions also get 256-color and truecolor support
194
+ - **kitty-terminfo/README.md** — updated documentation to reflect `localEnv` forwarding and clarify behavior across VS Code vs non-VS Code entry points
195
+ - **CLAUDE.md** — documented `TERM` and `COLORTERM` environment variables in the Environment section
196
+
197
+ ### Removed
198
+
199
+ #### Scripts
200
+ - `setup-symlink-claude.sh` — no longer needed with native home directory location
201
+
202
+ #### VS Code Extensions
203
+ - **Todo+** (`fabiospampinato.vscode-todo-plus`) — removed from devcontainer extensions
204
+
205
+ ## [v2.0.0] - 2026-02-26
206
+
207
+ ### Added
208
+
209
+ #### .codeforge/ User Customization Directory
210
+ - New `.codeforge/` directory centralizes all user-customizable configuration files
211
+ - Checksum-based modification detection preserves user changes during updates
212
+ - `codeforge config apply` CLI command deploys config files to `~/.claude/` (same as container start)
213
+ - Auto-migration from `.devcontainer/config/defaults/` to `.codeforge/config/` for existing users
214
+ - `.codeforge/.codeforge-preserve` for listing additional files to preserve during updates
215
+
216
+ ### Changed
217
+
218
+ #### Configuration
219
+ - Config files moved from `.devcontainer/config/defaults/` to `.codeforge/config/`
220
+ - File manifest moved from `.devcontainer/config/file-manifest.json` to `.codeforge/file-manifest.json`
221
+ - Terminal connection scripts moved from `.devcontainer/` to `.codeforge/scripts/`
222
+ - `CONFIG_SOURCE_DIR` env var deprecated in favor of `CODEFORGE_DIR`
223
+ - `--force` updates now use checksum comparison for `.codeforge/` files (writes `.default` instead of `.codeforge-new`)
224
+ - `--reset` preserves `.codeforge/` user modifications (only `.devcontainer/` is wiped)
225
+
226
+ #### Migration
227
+ - v2 migration marker moved to `.codeforge/.markers/v2-migrated`
228
+ - Container start auto-migrates `.devcontainer/config/defaults/` to `.codeforge/config/` if needed
229
+
230
+ ## [v1.14.2] - 2026-02-24
231
+
232
+ ### Added
233
+
234
+ #### Prompt Snippets Plugin
235
+ - **New plugin: `prompt-snippets`** — single `/ps` slash command for quick behavioral mode switches (noaction, brief, plan, go, review, ship, deep, hold, recall, wait)
236
+ - Snippets inject short directives that persist for the conversation (e.g., `/ps noaction` → "Investigate and report only. Take no action.")
237
+ - Composable: `/ps noaction brief` applies multiple snippets at once
238
+ - Isolated from skill-engine auto-suggestion (`disable-model-invocation: true`) and independently toggleable via `enabledPlugins`
239
+
240
+ ### Changed
241
+
242
+ #### Docs
243
+ - **First Session page** — trimmed from 198 to 128 lines by consolidating "What Happens Automatically" into a concise summary, replacing full agent/skill tables with brief teasers linking to their dedicated pages
244
+ - **Installation Troubleshooting** — expanded from 4 to 10 FAQ entries covering `npx` failures, VS Code extension issues, Docker permissions on Linux, WSL 2 integration, port conflicts, and slow rebuilds
245
+
246
+ ### Fixed
247
+
248
+ #### CI: Release Workflow (v1.14.1)
8
249
  - **test.js** — settings.json path updated from `config/settings.json` to `config/defaults/settings.json` to match config externalization refactor
9
250
  - **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
251
  - **setup.js** — file permissions changed from 644 to 755 (executable) to match shebang and `bin` declaration in package.json
11
252
 
12
- #### CI: Publish DevContainer Features Workflow
253
+ #### CI: Publish DevContainer Features Workflow (v1.14.1)
13
254
  - **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
255
  - **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
256
 
257
+ #### CI: Publish DevContainer Features Workflow (v1.14.2)
258
+ - **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
259
+
260
+ #### Docs
261
+ - **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
262
+ - **Stale skill counts** — 5 pages (First Session, Getting Started index, Features index) referenced "21 skills" instead of the correct total of 34 across all plugins (skill-engine: 21, spec-workflow: 8, ticket-workflow: 4, agent-system: 1)
263
+
16
264
  ## [v1.14.0] - 2026-02-24
17
265
 
18
266
  ### Fixed (CodeRabbit review)
@@ -8,51 +8,92 @@ CodeForge devcontainer for AI-assisted development with Claude Code.
8
8
  .devcontainer/
9
9
  ├── devcontainer.json # Container definition
10
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
11
  ├── features/ # Custom devcontainer features
19
12
  ├── plugins/devs-marketplace/ # Local plugin marketplace
20
13
  └── scripts/ # Setup scripts (run via postStartCommand)
14
+
15
+ .codeforge/
16
+ ├── file-manifest.json # Declarative config file deployment
17
+ ├── config/ # Source files deployed on start via file-manifest
18
+ │ ├── settings.json # Model, permissions, plugins, env vars
19
+ │ ├── keybindings.json # Keyboard shortcuts
20
+ │ ├── main-system-prompt.md
21
+ │ ├── orchestrator-system-prompt.md
22
+ │ ├── writing-system-prompt.md
23
+ │ ├── ccstatusline-settings.json # Status bar widget layout
24
+ │ └── rules/ # Deployed to .claude/rules/
25
+ ├── scripts/ # Terminal connection scripts
26
+ │ ├── connect-external-terminal.sh
27
+ │ └── connect-external-terminal.ps1
28
+ └── .codeforge-preserve # Lists additional files to preserve during updates
21
29
  ```
22
30
 
23
31
  ## Key Configuration
24
32
 
25
33
  | File | Purpose |
26
34
  |------|---------|
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 |
35
+ | `.codeforge/config/settings.json` | Model, tokens, permissions, plugins, env vars |
36
+ | `.codeforge/config/main-system-prompt.md` | System prompt defining assistant behavior |
37
+ | `.codeforge/config/orchestrator-system-prompt.md` | Orchestrator mode prompt (delegation-first) |
38
+ | `.codeforge/config/ccstatusline-settings.json` | Status bar widget layout (deployed to ~/.config/ccstatusline/) |
39
+ | `.codeforge/file-manifest.json` | Controls which config files deploy and when |
31
40
  | `devcontainer.json` | Container definition: image, features, mounts |
32
41
  | `.env` | Boolean flags controlling setup steps |
33
42
 
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}`.
43
+ Config files deploy via `.codeforge/file-manifest.json` on every container start. Most deploy to `~/.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
+
45
+ ## Worktrees
46
+
47
+ Git worktrees allow checking out multiple branches simultaneously, each in its own directory.
48
+
49
+ **Native (recommended for Claude Code sessions):**
50
+ - **In-session:** `EnterWorktree` tool — creates worktree at `<repo>/.claude/worktrees/<name>/`, branch `worktree-<name>`, auto-cleaned if no changes
51
+ - **New session:** `claude --worktree <name>` — starts Claude in its own worktree; combine with `--tmux` for background work
52
+
53
+ **Manual (legacy convention):**
54
+ ```bash
55
+ mkdir -p /workspaces/projects/.worktrees
56
+ git worktree add /workspaces/projects/.worktrees/<branch-name> -b <branch>
57
+ ```
58
+
59
+ **Environment files:** Place a `.worktreeinclude` file at the project root listing `.gitignore`-excluded files to copy into new worktrees (e.g., `.env`). Uses `.gitignore` pattern syntax; only files matching both `.worktreeinclude` and `.gitignore` are copied.
60
+
61
+ **Management:**
62
+
63
+ | Command | Purpose |
64
+ |---------|---------|
65
+ | `git worktree list` | Show all active worktrees |
66
+ | `git worktree remove <path>` | Remove a worktree (destructive — confirm first) |
67
+ | `git worktree prune` | Clean up stale references (destructive — confirm first) |
68
+
69
+ **Path conventions:**
70
+ - **Native:** `<repo>/.claude/worktrees/<name>/` — used by `--worktree` flag and `EnterWorktree`
71
+ - **Legacy:** `.worktrees/` as sibling to the main repo — used for manual `git worktree add` and Project Manager integration
35
72
 
36
73
  ## Commands
37
74
 
38
75
  | Command | Purpose |
39
76
  |---------|---------|
40
77
  | `cc` / `claude` | Run Claude Code with auto-configuration |
78
+ | `codeforge config apply` | Deploy config files to `~/.claude/` (same as container start) |
79
+ | `codeforge` | CLI for CodeForge management commands |
41
80
  | `ccraw` | Vanilla Claude Code (bypasses config) |
42
81
  | `ccw` | Claude Code with writing system prompt |
82
+ | `cc-orc` | Claude Code in orchestrator mode (delegation-first) |
43
83
  | `ccms` | Search session history (project-scoped) |
44
84
  | `ccusage` / `ccburn` | Token usage analysis / burn rate |
45
85
  | `agent-browser` | Headless Chromium (Playwright-based) |
46
86
  | `check-setup` | Verify CodeForge setup health |
47
87
  | `claude-dashboard` | Session analytics dashboard (port 7847) |
88
+ | `dbr` | Dynamic port forwarding (devcontainer-bridge) |
48
89
  | `cc-tools` | List all installed tools with versions |
49
90
 
50
91
  ## Plugins
51
92
 
52
93
  Declared in `settings.json` under `enabledPlugins`, auto-activated on start:
53
94
 
54
- - **agent-system** — 17 custom agents + built-in agent redirection
55
- - **skill-engine** — 21 general coding skills + auto-suggestion
95
+ - **agent-system** — 21 custom agents (4 workhorse + 17 specialist) + built-in agent redirection
96
+ - **skill-engine** — 22 general coding skills + auto-suggestion
56
97
  - **spec-workflow** — 8 spec lifecycle skills + spec-reminder hook
57
98
  - **session-context** — Git state injection, TODO harvesting, commit reminders
58
99
  - **auto-code-quality** — Auto-format + auto-lint + advisory test runner
@@ -61,37 +102,103 @@ Declared in `settings.json` under `enabledPlugins`, auto-activated on start:
61
102
  - **protected-files-guard** — Blocks edits to secrets/lock files
62
103
  - **codeforge-lsp** — LSP for Python + TypeScript/JavaScript
63
104
  - **ticket-workflow** — EARS ticket workflow + auto-linking
105
+ - **git-workflow** — Standalone ship (commit/push/PR) + PR review
64
106
  - **notify-hook** — Desktop notifications on completion
65
107
  - **frontend-design** (Anthropic official) — UI/frontend design skill
108
+ - **prompt-snippets** — Quick behavioral mode switches via /ps command
66
109
 
67
110
  ## Rules System
68
111
 
69
- Rules in `config/defaults/rules/` deploy to `.claude/rules/` on every container start. They load into ALL sessions automatically.
112
+ Rules in `.codeforge/config/rules/` deploy to `.claude/rules/` on every container start. They load into ALL sessions automatically.
70
113
 
71
114
  **Current rules:** `spec-workflow.md`, `workspace-scope.md`, `session-search.md`
72
115
 
73
- **Adding rules:** Create `.md` in `config/defaults/rules/`, add a manifest entry in `file-manifest.json`.
116
+ **Adding rules:** Create `.md` in `.codeforge/config/rules/`, add a manifest entry in `.codeforge/file-manifest.json`.
74
117
 
75
118
  ## Environment
76
119
 
77
120
  | Variable | Value |
78
121
  |----------|-------|
79
- | `CLAUDE_CONFIG_DIR` | `/workspaces/.claude` |
122
+ | `CLAUDE_CONFIG_DIR` | `/home/vscode/.claude` |
123
+ | `CLAUDE_AUTH_TOKEN` | Long-lived token from `claude setup-token` (optional, via `.secrets` or Codespaces secrets) |
80
124
  | `ANTHROPIC_MODEL` | `claude-opus-4-6` |
81
125
  | `WORKSPACE_ROOT` | `/workspaces` |
126
+ | `TERM` | `${localEnv:TERM:xterm-256color}` (via `remoteEnv` — forwards host TERM, falls back to 256-color) |
127
+ | `COLORTERM` | `truecolor` (via `remoteEnv` — enables 24-bit color support) |
82
128
 
83
129
  All experimental feature flags are in `settings.json` under `env`. Setup steps controlled by boolean flags in `.env`.
84
130
 
131
+ ## Authentication & Persistence
132
+
133
+ The `~/.claude/` directory is backed by a Docker named volume (`codeforge-claude-config-${devcontainerId}`), persisting config, credentials, and session data across container rebuilds. Each devcontainer instance gets an isolated volume.
134
+
135
+ **Token authentication:** Set `CLAUDE_AUTH_TOKEN` in `.devcontainer/.secrets` (or as a Codespaces secret) with a long-lived token from `claude setup-token`. On container start, `setup-auth.sh` auto-creates `~/.claude/.credentials.json` with `600` permissions. If `.credentials.json` already exists, token injection is skipped (idempotent). Tokens must match `sk-ant-*` format.
136
+
85
137
  ## Modifying Behavior
86
138
 
87
- 1. **Change model**: Edit `config/defaults/settings.json` → `"model"` field
88
- 2. **Change system prompt**: Edit `config/defaults/main-system-prompt.md`
89
- 3. **Add config file**: Add entry to `config/file-manifest.json`
139
+ 1. **Change model**: Edit `.codeforge/config/settings.json` → `"model"` field
140
+ 2. **Change system prompt**: Edit `.codeforge/config/main-system-prompt.md`
141
+ 3. **Add config file**: Place in `.codeforge/config/`, add entry to `.codeforge/file-manifest.json`
90
142
  4. **Add features**: Add to `"features"` in `devcontainer.json`
91
143
  5. **Disable features**: Set `"version": "none"` in the feature's config
92
144
  6. **Disable setup steps**: Set flags to `false` in `.env`
93
- 7. **Customize status bar**: Edit `config/defaults/ccstatusline-settings.json`
145
+ 7. **Customize status bar**: Edit `.codeforge/config/ccstatusline-settings.json` (see below)
146
+
147
+ ## Status Bar Widgets
148
+
149
+ The status bar is configured in `.codeforge/config/ccstatusline-settings.json` (deploys to `~/.config/ccstatusline/settings.json`). Each widget is a JSON object in a line array.
150
+
151
+ ### Widget Properties
152
+
153
+ | Property | Purpose |
154
+ |----------|---------|
155
+ | `id` | Unique identifier (UUID or descriptive string) |
156
+ | `type` | Widget type (see below) |
157
+ | `backgroundColor` | Background color: `bgBlue`, `bgMagenta`, `bgYellow`, `bgGreen`, `bgRed`, etc. |
158
+ | `color` | Text color: `brightWhite`, `black`, `cyan`, `yellow`, etc. |
159
+ | `rawValue` | `true` to strip type-specific prefixes (e.g., removes "Model:" from model widget) |
160
+ | `bold` | `true` for bold text |
161
+ | `merge` | `"no-padding"` fuses this widget to the next (no separator/space between them) |
162
+ | `customText` | Static text content (only for `custom-text` type) |
163
+
164
+ ### Token Widgets
165
+
166
+ Each token metric uses a distinct background color for at-a-glance identification:
167
+
168
+ | Type | Color | Label |
169
+ |------|-------|-------|
170
+ | `tokens-input` | Blue (`bgBlue`) | **In** |
171
+ | `tokens-output` | Magenta (`bgMagenta`) | **Ou** |
172
+ | `tokens-cached` | Yellow (`bgYellow`) | **Ca** |
173
+ | `tokens-total` | Green (`bgGreen`) | **Tt** |
174
+
175
+ Labels are `custom-text` widgets with `merge: "no-padding"` so they fuse visually to their data widget:
176
+
177
+ ```json
178
+ { "id": "lbl-tokens-input", "type": "custom-text", "customText": "In",
179
+ "backgroundColor": "bgBlue", "color": "brightWhite", "bold": true, "merge": "no-padding" },
180
+ { "id": "5", "type": "tokens-input",
181
+ "backgroundColor": "bgBlue", "color": "brightWhite", "rawValue": true }
182
+ ```
183
+
184
+ ### Other Widget Types
185
+
186
+ `model`, `context-length`, `context-percentage-usable`, `git-branch`, `git-changes`, `git-worktree`, `session-clock`, `session-cost`, `block-timer`, `version`, `custom-command`
94
187
 
95
188
  ## Features
96
189
 
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`.
190
+ 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 as a native binary via `./features/claude-code-native` (uses Anthropic's official installer at `https://claude.ai/install.sh`).
191
+
192
+ ## Port Forwarding
193
+
194
+ Three mechanisms handle port access depending on your client:
195
+
196
+ | Mechanism | Client | Discovery |
197
+ |-----------|--------|-----------|
198
+ | VS Code auto-detect | VS Code only | Dynamic — all ports auto-forwarded with notification |
199
+ | devcontainer-bridge (`dbr`) | Any terminal client | Dynamic — polls `/proc/net/tcp` |
200
+ | SSH tunneling | Any SSH client | Manual — `ssh -L localPort:localhost:remotePort` |
201
+
202
+ VS Code auto-detects all ports opened inside the container (configured via `portsAttributes` in `devcontainer.json`). Outside VS Code, `dbr` provides dynamic port discovery via a reverse connection model (container→host). The container daemon auto-starts and is inert without the host daemon (`dbr host-daemon`). Both mechanisms coexist. See [devcontainer-bridge](https://github.com/bradleybeddoes/devcontainer-bridge).
203
+
204
+ For full setup instructions, see the [Port Forwarding reference](https://codeforge.core-directive.com/reference/port-forwarding/) in the docs.