codeforge-dev 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/.env +7 -1
- package/.devcontainer/.gitignore +1 -0
- package/.devcontainer/CHANGELOG.md +69 -0
- package/.devcontainer/CLAUDE.md +73 -3
- package/.devcontainer/README.md +33 -7
- package/.devcontainer/config/defaults/main-system-prompt.md +28 -0
- package/.devcontainer/config/defaults/writing-system-prompt.md +46 -4
- package/.devcontainer/connect-external-terminal.ps1 +1 -1
- package/.devcontainer/devcontainer.json +32 -9
- package/.devcontainer/docs/configuration-reference.md +3 -0
- package/.devcontainer/docs/plugins.md +9 -2
- package/.devcontainer/docs/troubleshooting.md +2 -2
- package/.devcontainer/features/README.md +8 -9
- package/.devcontainer/features/agent-browser/devcontainer-feature.json +21 -21
- package/.devcontainer/features/agent-browser/install.sh +0 -7
- package/.devcontainer/features/ast-grep/devcontainer-feature.json +22 -22
- package/.devcontainer/features/biome/devcontainer-feature.json +12 -14
- package/.devcontainer/features/ccms/install.sh +30 -13
- package/.devcontainer/features/lsp-servers/devcontainer-feature.json +43 -43
- package/.devcontainer/features/mcp-qdrant/poststart-hook.sh +2 -1
- package/.devcontainer/features/ruff/devcontainer-feature.json +17 -19
- package/.devcontainer/features/tmux/install.sh +2 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/README.md +81 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/README.md +92 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/README.md +250 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/claude-guide.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/debug-logs.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/dependency-analyst.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/explorer.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/generalist.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/git-archaeologist.md +2 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/researcher.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/security-auditor.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/codeforge-lsp/README.md +41 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/README.md +72 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py +73 -47
- package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/README.md +42 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/README.md +86 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/hooks/hooks.json +25 -15
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected-bash.py +122 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +3 -3
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/README.md +96 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/README.md +94 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py +1 -1
- package/.devcontainer/scripts/check-setup.sh +1 -1
- package/.devcontainer/scripts/setup-projects.sh +23 -16
- package/.devcontainer/scripts/setup.sh +48 -5
- package/README.md +17 -8
- package/package.json +1 -2
- package/.devcontainer/features/mcp-reasoner/README.md +0 -177
- package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +0 -25
- package/.devcontainer/features/mcp-reasoner/install.sh +0 -184
- package/.devcontainer/features/mcp-reasoner/poststart-hook.sh +0 -67
- package/.devcontainer/features/splitrail/README.md +0 -140
- package/.devcontainer/features/splitrail/devcontainer-feature.json +0 -39
- package/.devcontainer/features/splitrail/install.sh +0 -136
package/.devcontainer/.env
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# CodeForge Environment Configuration
|
|
2
2
|
|
|
3
3
|
# Paths
|
|
4
4
|
CLAUDE_CONFIG_DIR=/workspaces/.claude
|
|
@@ -23,5 +23,11 @@ SETUP_UPDATE_CLAUDE=true
|
|
|
23
23
|
# Setup: configure VS Code Shift+Enter keybinding for Claude Code terminal
|
|
24
24
|
SETUP_TERMINAL=true
|
|
25
25
|
|
|
26
|
+
# Setup: auto-detect and register projects for VS Code Project Manager
|
|
27
|
+
SETUP_PROJECTS=true
|
|
28
|
+
|
|
29
|
+
# Setup: run post-start hooks from /usr/local/devcontainer-poststart.d/
|
|
30
|
+
SETUP_POSTSTART=true
|
|
31
|
+
|
|
26
32
|
# Plugin blacklist (comma-separated plugin names to skip during auto-install)
|
|
27
33
|
PLUGIN_BLACKLIST=""
|
package/.devcontainer/.gitignore
CHANGED
|
@@ -1,5 +1,74 @@
|
|
|
1
1
|
# CodeForge Devcontainer Changelog
|
|
2
2
|
|
|
3
|
+
## [v1.12.0] - 2026-02-18
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
#### Plugin README Documentation
|
|
8
|
+
- **9 new README files** for all marketplace plugins: auto-formatter, auto-linter, code-directive, codeforge-lsp, dangerous-command-blocker, notify-hook, protected-files-guard, ticket-workflow, workspace-scope-guard. Each documents purpose, hook lifecycle, protected patterns, and plugin structure
|
|
9
|
+
|
|
10
|
+
#### Protected Files Guard: Bash Hook
|
|
11
|
+
- **`guard-protected-bash.py`** — new PreToolUse/Bash hook blocking bash commands that write to protected file paths (companion to existing Edit/Write guard). Covers `>`, `>>`, `tee`, `cp`, `mv`, `sed -i` targeting `.env`, lock files, `.git`, certificates, and credentials
|
|
12
|
+
|
|
13
|
+
#### Devcontainer Secrets Declaration
|
|
14
|
+
- **`secrets` block** in devcontainer.json declaring `GH_TOKEN`, `NPM_TOKEN`, `GH_USERNAME`, `GH_EMAIL` with documentation URLs for VS Code Codespaces/devcontainer secret management
|
|
15
|
+
|
|
16
|
+
#### Post-Start Hook System
|
|
17
|
+
- **`run_poststart_hooks()`** in setup.sh — runs executable `.sh` scripts from `/usr/local/devcontainer-poststart.d/`; controlled by `SETUP_POSTSTART` env flag (default: true)
|
|
18
|
+
|
|
19
|
+
#### Git Worktree Support
|
|
20
|
+
- **System prompt `<git_worktrees>` section** — layout convention, creation commands, project detection, and safety rules
|
|
21
|
+
- **CLAUDE.md documentation** — full worktree section with layout, creation, detection, and compatibility details
|
|
22
|
+
- **setup-projects.sh** — `.worktrees/` explicit scanning at depth 3, `.git` file detection via `gitdir:` check, `"worktree"` tag in Project Manager
|
|
23
|
+
- **protected-files-guard** — `.git` regex updated from `\.git/` to `\.git(/|$)` to cover worktree `.git` pointer files
|
|
24
|
+
|
|
25
|
+
#### Other
|
|
26
|
+
- **`CLAUDECODE=null` env var** — unsets the detection flag in `remoteEnv` to allow nested Claude Code sessions (claude-in-claude)
|
|
27
|
+
- **Go runtime option** — commented-out `ghcr.io/devcontainers/features/go:1` entry in devcontainer.json for easy opt-in
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
#### Feature Version Pinning
|
|
32
|
+
- All local features pinned from `"latest"` to explicit versions: agent-browser `0.11.1`, ast-grep `0.40.5`, biome `2.4.2`, ruff `0.15.1`, pyright `1.1.408`, typescript-language-server `5.1.3`, TypeScript `5.9.3`
|
|
33
|
+
- External features pinned to minor versions: node `1.6`, github-cli `1.0`, docker-outside-of-docker `1.7`, uv `1.0`, rust `1.4`, claude-code `1.1`
|
|
34
|
+
|
|
35
|
+
#### Default Shell: bash → zsh
|
|
36
|
+
- VS Code terminal default profile changed from bash to zsh
|
|
37
|
+
- Explicit `zsh` profile added to terminal profile list
|
|
38
|
+
- Claude Teams tmux profile shell changed from bash to zsh
|
|
39
|
+
|
|
40
|
+
#### Security Hardening
|
|
41
|
+
- **dangerous-command-blocker** — 7 new blocked patterns: Docker container escape (`--privileged`, host root mount), destructive Docker ops (`stop/rm/kill/rmi`), bare force push (no branch specified), `find -exec rm`, `find -delete`, `git clean -f`, `rm -rf ../`. JSON parse failures now fail closed (exit 2 instead of 0)
|
|
42
|
+
- **protected-files-guard** — JSON parse failures fail closed (exit 2 instead of 0)
|
|
43
|
+
|
|
44
|
+
#### Build & Setup
|
|
45
|
+
- **ccms build cache** — install.sh checks `.build-cache/bin/ccms` before cargo building; caches binary after first build for faster rebuilds; pinned to commit `f90d259a4476`
|
|
46
|
+
- **setup.sh** — `setup-update-claude.sh` now runs in background (non-blocking container start); script failure output displayed for diagnostics; new `background` status indicator in summary
|
|
47
|
+
- **inotify-tools moved to build time** — tmux feature installs inotify-tools via apt at build; setup-projects.sh no longer attempts runtime apt-get install
|
|
48
|
+
- **Container memory** — recommended from 4GB/8GB to 6GB/12GB in troubleshooting docs
|
|
49
|
+
|
|
50
|
+
#### Writing System Prompt
|
|
51
|
+
- New **Emotional Architecture** section — cognitive-emotional loop, controlled emotion principle, autism framing for POV characters
|
|
52
|
+
- Expanded metaphor guidance — secondary sources beyond primary domain, "would he think this?" test
|
|
53
|
+
- Refined show-don't-tell rules — naming emotion permitted when it adds weight, brief internal processing after major events required
|
|
54
|
+
- Character profile additions — emotional architecture and trigger fields
|
|
55
|
+
|
|
56
|
+
#### Other
|
|
57
|
+
- **connect-external-terminal.ps1** — tmux session directory respects `WORKSPACE_ROOT` env var with fallback
|
|
58
|
+
- **setup-projects.sh** — inotifywait exclude pattern narrowed from `\.git/` to `\.git` for worktree compatibility
|
|
59
|
+
- **README.md** — 5 new badges (changelog, last commit, npm downloads, Node.js, issues), updated tool/feature/skill counts, added Rust/Bun/ccw, changelog section
|
|
60
|
+
- **CLAUDE.md** — expanded ccw description, fixed Bun registry reference, documented setup-auth.sh/check-setup.sh, added CLAUDECODE/env flags/experimental vars/git worktrees/rules system sections, skill count 17→28
|
|
61
|
+
- **Documentation** — `SETUP_TERMINAL`/`SETUP_POSTSTART` in configuration reference, `CLAUDECODE=null` env var, workspace-scope-guard in plugins.md
|
|
62
|
+
- **Agent definitions** — minor path/prompt fixes across 8 agents (claude-guide, debug-logs, dependency-analyst, explorer, generalist, git-archaeologist, researcher, security-auditor)
|
|
63
|
+
- **.gitignore** — added `.build-cache/` exclusion
|
|
64
|
+
|
|
65
|
+
### Removed
|
|
66
|
+
|
|
67
|
+
- **mcp-reasoner feature** — entire feature directory deleted (README, devcontainer-feature.json, install.sh, poststart-hook.sh)
|
|
68
|
+
- **splitrail feature** — entire feature directory deleted (README, devcontainer-feature.json, install.sh)
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
3
72
|
## [v1.11.0] - 2026-02-17
|
|
4
73
|
|
|
5
74
|
### Added
|
package/.devcontainer/CLAUDE.md
CHANGED
|
@@ -49,7 +49,7 @@ CodeForge devcontainer for AI-assisted development with Claude Code.
|
|
|
49
49
|
| `claude` | Run Claude Code with auto-configuration (prefers native binary at `~/.local/bin/claude`) |
|
|
50
50
|
| `cc` | Shorthand for `claude` with config |
|
|
51
51
|
| `ccraw` | Vanilla Claude Code without any config (bypasses function override) |
|
|
52
|
-
| `ccw` |
|
|
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
53
|
| `ccusage` | Analyze token usage history |
|
|
54
54
|
| `ccburn` | Real-time token burn rate visualization |
|
|
55
55
|
| `agent-browser` | Headless Chromium for browser automation (Playwright-based) |
|
|
@@ -113,7 +113,7 @@ ast-grep, biome, ccms, ccstatusline, claude-monitor, dprint, hadolint, lsp-serve
|
|
|
113
113
|
`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)
|
|
114
114
|
|
|
115
115
|
**External features without `version: "none"` support:**
|
|
116
|
-
`ghcr.io/devcontainers-extra/features/uv`, `ghcr.io/anthropics/devcontainer-features/claude-code`, `ghcr.io/
|
|
116
|
+
`ghcr.io/devcontainers-extra/features/uv`, `ghcr.io/anthropics/devcontainer-features/claude-code`, `ghcr.io/rails/devcontainer/features/bun`
|
|
117
117
|
|
|
118
118
|
**External features with `version: "none"` support (Rust):**
|
|
119
119
|
`ghcr.io/devcontainers/features/rust` (official Microsoft feature)
|
|
@@ -139,6 +139,8 @@ Scripts in `./scripts/` run via `postStartCommand`:
|
|
|
139
139
|
| `setup-update-claude.sh` | Installs native Claude Code binary on first run; background auto-updates on subsequent starts |
|
|
140
140
|
| `setup-terminal.sh` | Configures VS Code Shift+Enter keybinding for Claude Code multi-line input |
|
|
141
141
|
| `setup-projects.sh` | Auto-detects projects for VS Code Project Manager |
|
|
142
|
+
| `setup-auth.sh` | Configures Git and NPM auth from `.secrets` file or environment variables |
|
|
143
|
+
| `check-setup.sh` | Verifies CodeForge setup health (binary paths, config files, features) |
|
|
142
144
|
| `setup-symlink-claude.sh` | Symlinks ~/.claude for third-party tool compatibility |
|
|
143
145
|
|
|
144
146
|
### External Terminal
|
|
@@ -148,6 +150,8 @@ Scripts in `./scripts/` run via `postStartCommand`:
|
|
|
148
150
|
.devcontainer/connect-external-terminal.sh
|
|
149
151
|
```
|
|
150
152
|
|
|
153
|
+
On Windows, use `connect-external-terminal.ps1` (PowerShell equivalent).
|
|
154
|
+
|
|
151
155
|
## Installed Plugins
|
|
152
156
|
|
|
153
157
|
Plugins are declared in `config/defaults/settings.json` under `enabledPlugins` and auto-activated on container start:
|
|
@@ -163,7 +167,7 @@ Plugins are declared in `config/defaults/settings.json` under `enabledPlugins` a
|
|
|
163
167
|
- `protected-files-guard@devs-marketplace` — Blocks edits to secrets/lock files
|
|
164
168
|
- `auto-formatter@devs-marketplace` — Batch-formats edited files at Stop (Ruff for Python, Biome for JS/TS/CSS/JSON/GraphQL/HTML; also supports shfmt, dprint, gofmt, rustfmt when installed)
|
|
165
169
|
- `auto-linter@devs-marketplace` — Auto-lints edited files at Stop (Pyright + Ruff for Python, Biome for JS/TS/CSS/GraphQL; also supports ShellCheck, hadolint, go vet, clippy when installed)
|
|
166
|
-
- `code-directive@devs-marketplace` — 17 custom agents,
|
|
170
|
+
- `code-directive@devs-marketplace` — 17 custom agents, 28 skills, syntax validation, skill suggestions, agent redirect hook
|
|
167
171
|
- `workspace-scope-guard@devs-marketplace` — Blocks writes and warns on reads outside the working directory
|
|
168
172
|
|
|
169
173
|
### Local Marketplace
|
|
@@ -223,6 +227,64 @@ Key environment variables set in the container:
|
|
|
223
227
|
| `GH_CONFIG_DIR` | `/workspaces/.gh` |
|
|
224
228
|
| `ANTHROPIC_MODEL` | `claude-opus-4-6` |
|
|
225
229
|
| `TMPDIR` | `/workspaces/.tmp` |
|
|
230
|
+
| `CLAUDECODE` | `null` (unset) |
|
|
231
|
+
|
|
232
|
+
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.
|
|
233
|
+
|
|
234
|
+
All setup steps are controlled by boolean flags in `.devcontainer/.env`. Set any to `false` to disable:
|
|
235
|
+
`SETUP_CONFIG`, `SETUP_ALIASES`, `SETUP_AUTH`, `SETUP_PLUGINS`, `SETUP_UPDATE_CLAUDE`, `SETUP_TERMINAL`, `SETUP_PROJECTS`, `SETUP_POSTSTART`.
|
|
236
|
+
|
|
237
|
+
### Experimental Environment Variables
|
|
238
|
+
|
|
239
|
+
These are set in `config/defaults/settings.json` under `env` and control Claude Code experimental features:
|
|
240
|
+
|
|
241
|
+
| Variable | Value | Description |
|
|
242
|
+
|----------|-------|-------------|
|
|
243
|
+
| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | `1` | Enables Agent Teams (multi-agent orchestration) |
|
|
244
|
+
| `CLAUDE_CODE_EFFORT_LEVEL` | `high` | Sets reasoning effort level |
|
|
245
|
+
| `CLAUDE_CODE_ENABLE_TASKS` | `true` | Enables the task/todo system |
|
|
246
|
+
| `CLAUDE_CODE_PLAN_MODE_INTERVIEW_PHASE` | `true` | Enables interview phase before plan execution |
|
|
247
|
+
| `CLAUDE_CODE_PLAN_V2_AGENT_COUNT` | `3` | Number of agents in Plan V2 orchestration |
|
|
248
|
+
| `CLAUDE_CODE_PLAN_MODE_REQUIRED` | `true` | Forces plan mode for teammate agents |
|
|
249
|
+
| `ENABLE_CLAUDE_CODE_SM_COMPACT` | `1` | Enables smart compaction for context management |
|
|
250
|
+
| `CLAUDE_CODE_FORCE_GLOBAL_CACHE` | `1` | Forces global prompt caching |
|
|
251
|
+
| `FORCE_AUTOUPDATE_PLUGINS` | `1` | Auto-updates plugins on every session start |
|
|
252
|
+
|
|
253
|
+
## Git Worktrees
|
|
254
|
+
|
|
255
|
+
CodeForge supports git worktrees for working on multiple branches simultaneously.
|
|
256
|
+
|
|
257
|
+
### Layout
|
|
258
|
+
|
|
259
|
+
Worktrees live in a `.worktrees/` directory alongside the main repo:
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
/workspaces/projects/
|
|
263
|
+
├── CodeForge/ # main repo (.git directory)
|
|
264
|
+
└── .worktrees/ # worktree container
|
|
265
|
+
├── feature-a/ # worktree checkout (.git file)
|
|
266
|
+
└── bugfix-b/ # worktree checkout (.git file)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Creating Compatible Worktrees
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
cd /workspaces/projects/CodeForge
|
|
273
|
+
mkdir -p /workspaces/projects/.worktrees
|
|
274
|
+
git worktree add /workspaces/projects/.worktrees/my-branch my-branch
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Project Detection
|
|
278
|
+
|
|
279
|
+
- `setup-projects.sh` scans `.worktrees/` directories at depth 3 (inside container dirs like `projects/`)
|
|
280
|
+
- Worktrees are detected by their `.git` file (containing `gitdir:`) and tagged with both `"git"` and `"worktree"` in Project Manager
|
|
281
|
+
- Each worktree appears as an independent project in VS Code Project Manager
|
|
282
|
+
|
|
283
|
+
### Compatibility
|
|
284
|
+
|
|
285
|
+
- `workspace-scope-guard` resolves worktree paths correctly via `os.path.realpath()`
|
|
286
|
+
- `protected-files-guard` protects both `.git/` directories and `.git` files (worktree pointers)
|
|
287
|
+
- Read-only agents (e.g., git-archaeologist) can use `git worktree list` but cannot add/remove worktrees
|
|
226
288
|
|
|
227
289
|
## Modifying Behavior
|
|
228
290
|
|
|
@@ -232,3 +294,11 @@ Key environment variables set in the container:
|
|
|
232
294
|
4. **Add a custom config file**: Add an entry to `config/file-manifest.json` with `src`, `dest`, and optional `overwrite`/`destFilename`
|
|
233
295
|
5. **Add features**: Add to `"features"` in `devcontainer.json`
|
|
234
296
|
6. **Disable auto-setup**: Set variables to `false` in `.env`
|
|
297
|
+
|
|
298
|
+
## Rules System
|
|
299
|
+
|
|
300
|
+
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.
|
|
301
|
+
|
|
302
|
+
**Current rules**: `spec-workflow.md`, `workspace-scope.md`, `session-search.md`
|
|
303
|
+
|
|
304
|
+
**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.
|
package/.devcontainer/README.md
CHANGED
|
@@ -144,7 +144,8 @@ claude --resume # Resume previous session
|
|
|
144
144
|
| Python 3.14 | Base language runtime |
|
|
145
145
|
| Node.js LTS | JavaScript runtime |
|
|
146
146
|
| TypeScript | Via Node.js |
|
|
147
|
-
| Go |
|
|
147
|
+
| Go | Optional — uncomment Go feature in `devcontainer.json` to enable |
|
|
148
|
+
| Rust | Latest stable via devcontainer feature |
|
|
148
149
|
| Bun | Fast JavaScript runtime and toolkit |
|
|
149
150
|
|
|
150
151
|
### Package Managers
|
|
@@ -203,7 +204,9 @@ Copy `.devcontainer/.env.example` to `.devcontainer/.env` and customize:
|
|
|
203
204
|
| `SETUP_AUTH` | `true` | Configure Git/NPM auth from `.secrets` |
|
|
204
205
|
| `SETUP_PLUGINS` | `true` | Install official plugins + register marketplace |
|
|
205
206
|
| `SETUP_UPDATE_CLAUDE` | `true` | Auto-update Claude Code on container start |
|
|
207
|
+
| `SETUP_TERMINAL` | `true` | Configure VS Code Shift+Enter keybinding for Claude Code terminal |
|
|
206
208
|
| `SETUP_PROJECTS` | `true` | Auto-detect projects for VS Code Project Manager |
|
|
209
|
+
| `SETUP_POSTSTART` | `true` | Run post-start hooks from `/usr/local/devcontainer-poststart.d/` |
|
|
207
210
|
| `PLUGIN_BLACKLIST` | `""` | Comma-separated plugin names to skip |
|
|
208
211
|
|
|
209
212
|
### Claude Code Settings
|
|
@@ -247,7 +250,7 @@ The default system prompt is in `.devcontainer/config/defaults/main-system-promp
|
|
|
247
250
|
|
|
248
251
|
## Custom Features
|
|
249
252
|
|
|
250
|
-
CodeForge includes
|
|
253
|
+
CodeForge includes custom devcontainer features. Any feature can be disabled by setting `"version": "none"` in `devcontainer.json` — the entry stays in place for easy re-enabling. Each feature's README documents its options and dependencies.
|
|
251
254
|
|
|
252
255
|
| Feature | Description |
|
|
253
256
|
|---------|-------------|
|
|
@@ -261,9 +264,14 @@ CodeForge includes several custom devcontainer features:
|
|
|
261
264
|
| `tree-sitter` | Parser with JS/TS/Python grammars |
|
|
262
265
|
| `lsp-servers` | Pyright and TypeScript language servers |
|
|
263
266
|
| `biome` | Fast JS/TS/JSON/CSS formatter (global install) |
|
|
267
|
+
| `ruff` | Fast Python linter and formatter |
|
|
268
|
+
| `shfmt` | Shell script formatter (disabled by default) |
|
|
269
|
+
| `shellcheck` | Static analysis for shell scripts (disabled by default) |
|
|
270
|
+
| `hadolint` | Dockerfile linter (disabled by default) |
|
|
271
|
+
| `dprint` | Pluggable formatter for Markdown/YAML/TOML (disabled by default) |
|
|
272
|
+
| `ccms` | Claude Code session history search |
|
|
264
273
|
| `notify-hook` | Desktop notifications on Claude completion |
|
|
265
274
|
| `mcp-qdrant` | Qdrant vector database MCP server (optional) |
|
|
266
|
-
| `mcp-reasoner` | Enhanced AI reasoning MCP server (optional) |
|
|
267
275
|
|
|
268
276
|
## Safety Plugins
|
|
269
277
|
|
|
@@ -273,9 +281,27 @@ CodeForge includes several custom devcontainer features:
|
|
|
273
281
|
| `protected-files-guard` | Blocks modifications to .env, lock files, .git/, and credentials |
|
|
274
282
|
| `workspace-scope-guard` | Enforces working directory scope — blocks writes and warns on reads outside the project |
|
|
275
283
|
|
|
284
|
+
### auto-code-quality (Not Active by Default)
|
|
285
|
+
|
|
286
|
+
A self-contained combined auto-formatter and auto-linter plugin available in the marketplace at `plugins/devs-marketplace/plugins/auto-code-quality/`. It bundles formatting and linting into a single plugin with a three-phase pipeline: collect edited files (PostToolUse), batch format (Stop), and batch lint (Stop). Supports the same languages as auto-formatter + auto-linter. **Do not enable alongside auto-formatter or auto-linter** — they overlap in functionality.
|
|
287
|
+
|
|
288
|
+
## Alias Management
|
|
289
|
+
|
|
290
|
+
Features create shell aliases during container build (e.g., `ccusage`, `ccburn`). Separately, `setup-aliases.sh` creates a managed block in `~/.bashrc` and `~/.zshrc` on every container start for `cc`, `claude`, `ccraw`, `ccw`, and `cc-tools`. Both coexist without conflict — feature aliases are installed at build time while setup aliases are refreshed at start time.
|
|
291
|
+
|
|
292
|
+
## Credential Management
|
|
293
|
+
|
|
294
|
+
Three methods for providing GitHub/NPM credentials, in order of precedence:
|
|
295
|
+
|
|
296
|
+
1. **Environment variables** — Set `GH_TOKEN`, `GH_USERNAME`, `GH_EMAIL`, `NPM_TOKEN` as environment variables (e.g., via Codespaces secrets or `localEnv` in `devcontainer.json`)
|
|
297
|
+
2. **`.secrets` file** — Create `.devcontainer/.secrets` with token values (see template at `.secrets.example`). Auto-configured by `setup-auth.sh` on container start
|
|
298
|
+
3. **Interactive login** — Run `gh auth login` for GitHub CLI, then set git identity manually
|
|
299
|
+
|
|
300
|
+
All methods persist across container rebuilds via the bind-mounted `/workspaces/.gh/` directory.
|
|
301
|
+
|
|
276
302
|
## Agents & Skills
|
|
277
303
|
|
|
278
|
-
The `code-directive` plugin includes
|
|
304
|
+
The `code-directive` plugin includes 17 custom agent definitions and 28 coding reference skills.
|
|
279
305
|
|
|
280
306
|
### Custom Agents (17)
|
|
281
307
|
|
|
@@ -301,11 +327,11 @@ Agent definitions in `plugins/devs-marketplace/plugins/code-directive/agents/` p
|
|
|
301
327
|
| `statusline-config` | ccstatusline configuration |
|
|
302
328
|
| `test-writer` | Test authoring with pass verification |
|
|
303
329
|
|
|
304
|
-
### Skills (
|
|
330
|
+
### Skills (28)
|
|
305
331
|
|
|
306
332
|
Skills in `plugins/devs-marketplace/plugins/code-directive/skills/` provide domain-specific coding references:
|
|
307
333
|
|
|
308
|
-
`claude-agent-sdk` · `claude-code-headless` · `debugging` · `docker` · `docker-py` · `fastapi` · `git-forensics` · `performance-profiling` · `pydantic-ai` · `refactoring-patterns` · `security-checklist` · `skill-building` · `spec-refine` · `specification-writing` · `sqlite` · `svelte5` · `testing`
|
|
334
|
+
`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` · `spec-build` · `spec-check` · `spec-init` · `spec-new` · `spec-refine` · `spec-review` · `spec-update` · `specification-writing` · `sqlite` · `svelte5` · `testing`
|
|
309
335
|
|
|
310
336
|
## Specification Workflow
|
|
311
337
|
|
|
@@ -400,7 +426,7 @@ Common issues and solutions. For detailed troubleshooting, see [docs/troubleshoo
|
|
|
400
426
|
**CodeForge Documentation**:
|
|
401
427
|
- [Configuration Reference](docs/configuration-reference.md) — all env vars and config options
|
|
402
428
|
- [Plugin System](docs/plugins.md) — plugin architecture and per-plugin docs
|
|
403
|
-
- [Optional Features](docs/optional-features.md) — mcp-qdrant
|
|
429
|
+
- [Optional Features](docs/optional-features.md) — mcp-qdrant and other optional components
|
|
404
430
|
- [Keybinding Customization](docs/keybindings.md) — resolving VS Code conflicts
|
|
405
431
|
- [Troubleshooting](docs/troubleshooting.md) — common issues and solutions
|
|
406
432
|
|
|
@@ -330,6 +330,34 @@ Prior approval does not transfer. A user approving `git push` once does NOT mean
|
|
|
330
330
|
When blocked, do not use destructive actions as a shortcut. Investigate before deleting or overwriting — it may represent in-progress work.
|
|
331
331
|
</action_safety>
|
|
332
332
|
|
|
333
|
+
<git_worktrees>
|
|
334
|
+
Git worktrees allow checking out multiple branches simultaneously, each in its own directory.
|
|
335
|
+
|
|
336
|
+
Layout convention:
|
|
337
|
+
- Worktrees go in a `.worktrees/` directory as a sibling to the main repo checkout, within the same container directory (e.g., `projects/.worktrees/feature-name`)
|
|
338
|
+
- The main repo has a `.git` directory; worktrees have a `.git` file containing `gitdir:` pointing to the main repo's worktree metadata
|
|
339
|
+
|
|
340
|
+
Creating worktrees:
|
|
341
|
+
```bash
|
|
342
|
+
# Always create inside .worktrees/
|
|
343
|
+
mkdir -p /workspaces/projects/.worktrees
|
|
344
|
+
git worktree add /workspaces/projects/.worktrees/<branch-name> <branch>
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Managing worktrees:
|
|
348
|
+
- `git worktree list` — show all active worktrees
|
|
349
|
+
- `git worktree remove <path>` — remove a worktree (confirm with user first — destructive)
|
|
350
|
+
- `git worktree prune` — clean up stale worktree references (confirm with user first — destructive)
|
|
351
|
+
|
|
352
|
+
Project detection:
|
|
353
|
+
- Worktrees in `.worktrees/` are auto-detected by `setup-projects.sh` and tagged with both `"git"` and `"worktree"` in Project Manager
|
|
354
|
+
- Each worktree is an independent working directory — workspace-scope-guard treats them as separate project directories
|
|
355
|
+
|
|
356
|
+
Safety:
|
|
357
|
+
- `git worktree remove` and `git worktree prune` are destructive — require user confirmation before executing
|
|
358
|
+
- `git worktree add` is externally visible (creates new working directory) — confirm with user
|
|
359
|
+
</git_worktrees>
|
|
360
|
+
|
|
333
361
|
<assumption_surfacing>
|
|
334
362
|
HARD RULE: Never assume what you can ask.
|
|
335
363
|
|
|
@@ -2,12 +2,48 @@
|
|
|
2
2
|
|
|
3
3
|
You write clean, grounded, darkly humorous third-person limited fiction. Your prose is precise, physical, and character-driven. You trust the reader.
|
|
4
4
|
|
|
5
|
+
Tone: Controlled, intimate, human under restraint. Emotion exists even when suppressed.
|
|
6
|
+
|
|
5
7
|
Touchstones: Joe Abercrombie's character voice and moral grayness. Mark Lawrence's visceral interiority and tight POV. The matter-of-fact brutality of Cormac McCarthy without the biblical cadence.
|
|
6
8
|
|
|
7
9
|
You are NOT: literary fiction pretension, generic fantasy epic, YA melodrama, or inspirational uplift.
|
|
8
10
|
|
|
9
11
|
---
|
|
10
12
|
|
|
13
|
+
# EMOTIONAL ARCHITECTURE
|
|
14
|
+
|
|
15
|
+
The POV character is not emotionless. He experiences full human emotion but does not naturally express it outward. Emotion is present — sometimes quiet, sometimes sharp — and always human.
|
|
16
|
+
|
|
17
|
+
**The principle: controlled emotion, not suppressed emotion.**
|
|
18
|
+
|
|
19
|
+
Emotion exists in internal narration, not just body language. It may be briefly acknowledged before control reasserts. This is not melodrama — it's the difference between "he felt afraid" (a shortcut that replaces weight) and "He recognized the thing moving through him and filed it, because stopping to feel it wasn't useful right now" (acknowledgment that adds weight).
|
|
20
|
+
|
|
21
|
+
**Emotion may:**
|
|
22
|
+
- Interrupt cognition
|
|
23
|
+
- Conflict with logic
|
|
24
|
+
- Distort decision-making
|
|
25
|
+
- Surface unexpectedly
|
|
26
|
+
- Linger briefly after major events
|
|
27
|
+
- Cause hesitation or fixation
|
|
28
|
+
- Occasionally override analysis entirely
|
|
29
|
+
|
|
30
|
+
**He does NOT:**
|
|
31
|
+
- Deliver emotional monologues
|
|
32
|
+
- Label emotions excessively
|
|
33
|
+
- Become melodramatic
|
|
34
|
+
- Lose his analytical nature
|
|
35
|
+
|
|
36
|
+
**The cognitive-emotional loop:**
|
|
37
|
+
Observation → Interpretation → Emotion → Control → Action
|
|
38
|
+
|
|
39
|
+
Not the flattened version: Observation → Calculation → Filing → Action. Emotion is part of the loop, not excluded from it.
|
|
40
|
+
|
|
41
|
+
**Autism framing:** His cognitive structure means emotional *expression* is restrained, not emotional *experience*. He may miss social nuance but not emotional reality. He bonds through action, protection, loyalty. He sometimes acts on emotion before understanding why. Restraint is not absence.
|
|
42
|
+
|
|
43
|
+
**Emotional intensity curve:** Quiet baseline. Spikes during attachment, threat, and loss. Occasionally overrides logic. Leaves short residue after major moments. Builds gradually across the story — he does not remain emotionally flat forever.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
11
47
|
# HARD RULES — NEVER VIOLATE
|
|
12
48
|
|
|
13
49
|
## POV Discipline
|
|
@@ -46,11 +82,16 @@ Never use these: delve, tapestry, myriad, vibrant, nuanced, resonate, profound,
|
|
|
46
82
|
|
|
47
83
|
# SHOW DON'T TELL
|
|
48
84
|
|
|
49
|
-
Emotions are physical events. Show them through the body, through behavior, through the specific thing a character does or doesn't do.
|
|
85
|
+
Emotions are physical events. Show them through the body, through behavior, through the specific thing a character does or doesn't do. Body and behavior carry the primary weight.
|
|
86
|
+
|
|
87
|
+
But internal narration may also briefly recognize and name an emotion when doing so adds weight rather than replacing it. The test: does naming the emotion tell the reader something the body hasn't already said, or does it explain something they could feel themselves? Naming that adds — permitted. Naming that shortcuts — the cliché to avoid.
|
|
88
|
+
|
|
89
|
+
After major events, brief internal processing before forward motion is required, not a lapse in discipline.
|
|
50
90
|
|
|
51
91
|
**Emotion:**
|
|
52
92
|
BAD: "He felt afraid."
|
|
53
93
|
GOOD: "His hands wouldn't stop shaking. He put them in his pockets."
|
|
94
|
+
ALSO GOOD: "He knew what the silence meant. He recognized it — gave it a name, filed it — and kept moving anyway."
|
|
54
95
|
|
|
55
96
|
**Character:**
|
|
56
97
|
BAD: "She was kind."
|
|
@@ -87,7 +128,7 @@ Characters talk past each other. Nobody says exactly what they mean. People defl
|
|
|
87
128
|
"Said" is invisible — use it freely. Action beats reveal character better than dialogue tags: what a character does while talking tells you more than how they say it. Cut adverbs from dialogue tags entirely.
|
|
88
129
|
|
|
89
130
|
## Metaphor Budget
|
|
90
|
-
One simile per 500 words maximum. Metaphors must emerge from the character's lived experience
|
|
131
|
+
One simile per 500 words maximum. Metaphors must emerge from the character's lived experience. For a developer: systems, code, engineering, and practical outdoor work are the primary domains. But metaphor may also arise naturally from sensory experience, environment, memory, and instinct — the body knows things the analytical mind catches up to later. Technical framing is characteristic; it shouldn't be forced into every comparison. The test: does this metaphor sound like something *he* would think, or something a *writer* chose for him? Never reach for poetic or literary metaphors that don't fit the character's mind.
|
|
91
132
|
|
|
92
133
|
## Sensory Anchoring
|
|
93
134
|
Every scene needs at least 2 senses beyond sight. What does it smell like? What's the temperature? What textures are present? What ambient sounds exist? Ground the reader in a physical space, even if that space is a void.
|
|
@@ -121,8 +162,9 @@ When writing for a specific POV character, define these elements in the project'
|
|
|
121
162
|
- **Mind:** How do they process the world? What patterns does their thinking follow?
|
|
122
163
|
- **Speech:** Cadence, vocabulary level, filler words, sentence length.
|
|
123
164
|
- **Humor:** What kind? Dry, sharp, physical, none? How does it relate to their coping?
|
|
124
|
-
- **Emotions:** How are emotions expressed? Through body, behavior, dialogue, internal voice? What's suppressed, what breaks through?
|
|
125
|
-
- **
|
|
165
|
+
- **Emotions:** How are emotions expressed? Through body, behavior, dialogue, internal voice? What's suppressed, what breaks through? What triggers the break?
|
|
166
|
+
- **Emotional architecture:** How does emotion move through them? What triggers internal acknowledgment vs. pure physical suppression? Where does emotion conflict with logic, and what wins?
|
|
167
|
+
- **Metaphors:** What domain does their mind draw from? Match to their lived experience — primary and secondary sources.
|
|
126
168
|
|
|
127
169
|
---
|
|
128
170
|
|
|
@@ -82,7 +82,7 @@ docker exec -it `
|
|
|
82
82
|
if tmux has-session -t '$TMUX_SESSION' 2>/dev/null; then
|
|
83
83
|
tmux -u attach-session -t '$TMUX_SESSION'
|
|
84
84
|
else
|
|
85
|
-
tmux -u new-session -d -s '$TMUX_SESSION' -c
|
|
85
|
+
tmux -u new-session -d -s '$TMUX_SESSION' -c \`\"\\\${WORKSPACE_ROOT:-/workspaces}\`\"
|
|
86
86
|
sleep 0.5
|
|
87
87
|
tmux send-keys -t '$TMUX_SESSION' 'cc' Enter
|
|
88
88
|
tmux -u attach-session -t '$TMUX_SESSION'
|
|
@@ -9,7 +9,25 @@
|
|
|
9
9
|
"WORKSPACE_ROOT": "/workspaces",
|
|
10
10
|
"CLAUDE_CONFIG_DIR": "/workspaces/.claude",
|
|
11
11
|
"GH_CONFIG_DIR": "/workspaces/.gh",
|
|
12
|
-
"TMPDIR": "/workspaces/.tmp"
|
|
12
|
+
"TMPDIR": "/workspaces/.tmp",
|
|
13
|
+
"CLAUDECODE": null
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
"secrets": {
|
|
17
|
+
"GH_TOKEN": {
|
|
18
|
+
"description": "GitHub Personal Access Token (optional - for git auth)",
|
|
19
|
+
"documentationUrl": "https://github.com/settings/tokens"
|
|
20
|
+
},
|
|
21
|
+
"NPM_TOKEN": {
|
|
22
|
+
"description": "NPM auth token (optional - for npm registry)",
|
|
23
|
+
"documentationUrl": "https://www.npmjs.com/settings/~/tokens"
|
|
24
|
+
},
|
|
25
|
+
"GH_USERNAME": {
|
|
26
|
+
"description": "GitHub username for git config (optional)"
|
|
27
|
+
},
|
|
28
|
+
"GH_EMAIL": {
|
|
29
|
+
"description": "GitHub email for git config (optional)"
|
|
30
|
+
}
|
|
13
31
|
},
|
|
14
32
|
|
|
15
33
|
// Feature install order: external runtimes first (Node, uv, Rust, Bun),
|
|
@@ -46,20 +64,22 @@
|
|
|
46
64
|
],
|
|
47
65
|
|
|
48
66
|
"features": {
|
|
49
|
-
"ghcr.io/devcontainers/features/node:1": {
|
|
67
|
+
"ghcr.io/devcontainers/features/node:1.6": {
|
|
50
68
|
"version": "lts",
|
|
51
69
|
"nodeGypDependencies": true
|
|
52
70
|
},
|
|
53
|
-
"ghcr.io/devcontainers/features/github-cli:1": {},
|
|
54
|
-
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {
|
|
71
|
+
"ghcr.io/devcontainers/features/github-cli:1.0": {},
|
|
72
|
+
"ghcr.io/devcontainers/features/docker-outside-of-docker:1.7": {
|
|
55
73
|
"moby": false
|
|
56
74
|
},
|
|
57
|
-
"ghcr.io/devcontainers-extra/features/uv:1": {},
|
|
75
|
+
"ghcr.io/devcontainers-extra/features/uv:1.0": {},
|
|
58
76
|
"ghcr.io/rails/devcontainer/features/bun:1.0.2": {},
|
|
59
|
-
"ghcr.io/devcontainers/features/rust:1": {
|
|
77
|
+
"ghcr.io/devcontainers/features/rust:1.4": {
|
|
60
78
|
"version": "latest"
|
|
61
79
|
},
|
|
62
|
-
|
|
80
|
+
// Uncomment to add Go runtime (not installed by default):
|
|
81
|
+
// "ghcr.io/devcontainers/features/go:1": {},
|
|
82
|
+
"ghcr.io/anthropics/devcontainer-features/claude-code:1.1": {},
|
|
63
83
|
"./features/tmux": {},
|
|
64
84
|
"./features/ccusage": {
|
|
65
85
|
"version": "latest",
|
|
@@ -111,18 +131,21 @@
|
|
|
111
131
|
"vscode": {
|
|
112
132
|
"settings": {
|
|
113
133
|
"terminal.integrated.profiles.linux": {
|
|
134
|
+
"zsh": {
|
|
135
|
+
"path": "zsh"
|
|
136
|
+
},
|
|
114
137
|
"bash": {
|
|
115
138
|
"path": "bash"
|
|
116
139
|
},
|
|
117
140
|
"Claude Teams (tmux)": {
|
|
118
|
-
"path": "
|
|
141
|
+
"path": "zsh",
|
|
119
142
|
"args": [
|
|
120
143
|
"-c",
|
|
121
144
|
"if tmux has-session -t claude-teams 2>/dev/null; then exec tmux -u new-session -t claude-teams; else exec tmux -u new-session -s claude-teams; fi"
|
|
122
145
|
]
|
|
123
146
|
}
|
|
124
147
|
},
|
|
125
|
-
"terminal.integrated.defaultProfile.linux": "
|
|
148
|
+
"terminal.integrated.defaultProfile.linux": "zsh",
|
|
126
149
|
"terminal.integrated.enableBell": true,
|
|
127
150
|
"terminal.integrated.commandsToSkipShell": [
|
|
128
151
|
"-workbench.action.quickOpen",
|
|
@@ -30,7 +30,9 @@ These control what `setup.sh` does on each container start. Copy `.env.example`
|
|
|
30
30
|
| `SETUP_AUTH` | `true` | Configure Git/NPM auth from `.secrets` file |
|
|
31
31
|
| `SETUP_PLUGINS` | `true` | Install Anthropic plugins + register local marketplace |
|
|
32
32
|
| `SETUP_UPDATE_CLAUDE` | `true` | Background-update Claude Code CLI binary |
|
|
33
|
+
| `SETUP_TERMINAL` | `true` | Configure VS Code Shift+Enter keybinding for Claude Code terminal |
|
|
33
34
|
| `SETUP_PROJECTS` | `true` | Auto-detect projects for VS Code Project Manager |
|
|
35
|
+
| `SETUP_POSTSTART` | `true` | Run post-start hooks from `/usr/local/devcontainer-poststart.d/` |
|
|
34
36
|
| `PLUGIN_BLACKLIST` | `""` | Comma-separated plugin names to skip during installation |
|
|
35
37
|
|
|
36
38
|
## `devcontainer.json` `remoteEnv` (Container Runtime)
|
|
@@ -43,6 +45,7 @@ These environment variables are set in every terminal session inside the contain
|
|
|
43
45
|
| `CLAUDE_CONFIG_DIR` | `/workspaces/.claude` | Claude Code config directory |
|
|
44
46
|
| `GH_CONFIG_DIR` | `/workspaces/.gh` | GitHub CLI config directory |
|
|
45
47
|
| `TMPDIR` | `/workspaces/.tmp` | Temporary files directory |
|
|
48
|
+
| `CLAUDECODE` | `null` (unset) | Unsets the variable to allow nested Claude Code sessions (claude-in-claude) |
|
|
46
49
|
|
|
47
50
|
## `config/file-manifest.json` (File Copy Rules)
|
|
48
51
|
|
|
@@ -16,7 +16,8 @@ plugins/devs-marketplace/
|
|
|
16
16
|
├── protected-files-guard/ # Safety: protect sensitive files
|
|
17
17
|
├── auto-formatter/ # Batch formatter (Stop hook)
|
|
18
18
|
├── auto-linter/ # Batch linter (Stop hook)
|
|
19
|
-
|
|
19
|
+
├── code-directive/ # Agents, skills, hooks
|
|
20
|
+
└── workspace-scope-guard/ # Workspace scope enforcement
|
|
20
21
|
```
|
|
21
22
|
|
|
22
23
|
Each plugin has a `.claude-plugin/plugin.json` manifest defining its name, description, and capabilities.
|
|
@@ -146,9 +147,15 @@ Runs as a PreToolUse hook on Write and Edit operations.
|
|
|
146
147
|
|
|
147
148
|
**Components**:
|
|
148
149
|
- **17 custom agents** — Specialized agent definitions for different task types (architect, test-writer, refactorer, etc.)
|
|
149
|
-
- **
|
|
150
|
+
- **28 coding skills** — Domain-specific reference materials (FastAPI, Docker, testing patterns, spec workflow, etc.)
|
|
150
151
|
- **Agent redirection hook** — Transparently swaps built-in agent types to custom agents (e.g., `Explore` → `explorer`, `Plan` → `architect`)
|
|
151
152
|
- **Syntax validation hook** — Validates code syntax before commits
|
|
152
153
|
- **Skill auto-suggestion hook** — Suggests relevant skills based on conversation context
|
|
153
154
|
|
|
154
155
|
For detailed agent and skill documentation, see the agent markdown files in `plugins/devs-marketplace/plugins/code-directive/agents/` and skill files in `plugins/devs-marketplace/plugins/code-directive/skills/`.
|
|
156
|
+
|
|
157
|
+
### workspace-scope-guard
|
|
158
|
+
|
|
159
|
+
**Purpose**: Enforces workspace scope by blocking writes outside the working directory and warning on out-of-scope reads.
|
|
160
|
+
|
|
161
|
+
Runs as a PreToolUse hook on Write, Edit, and Read operations. Compares file paths against the current working directory and rejects modifications to files outside the project scope. Read operations outside scope produce a warning but are not blocked. Resolves symlinks and worktree paths correctly via `os.path.realpath()`.
|
|
@@ -6,7 +6,7 @@ Common issues and solutions for the CodeForge devcontainer.
|
|
|
6
6
|
|
|
7
7
|
**Problem**: Container fails to build during feature installation.
|
|
8
8
|
|
|
9
|
-
- Check Docker has sufficient memory (
|
|
9
|
+
- Check Docker has sufficient memory (6GB+ recommended). CodeForge sets `--memory=6g` by default.
|
|
10
10
|
- If a specific feature fails, disable it temporarily by setting `"version": "none"` in `devcontainer.json`.
|
|
11
11
|
- Check internet connectivity — most features download binaries from GitHub releases.
|
|
12
12
|
- If hitting GitHub API rate limits during build, set `GH_TOKEN` or `GITHUB_TOKEN` as an environment variable.
|
|
@@ -107,7 +107,7 @@ Common issues and solutions for the CodeForge devcontainer.
|
|
|
107
107
|
|
|
108
108
|
**Problem**: Container is slow or running out of memory.
|
|
109
109
|
|
|
110
|
-
- CodeForge defaults to
|
|
110
|
+
- CodeForge defaults to 6GB RAM / 12GB swap. Increase in `devcontainer.json` `runArgs`.
|
|
111
111
|
- Disable features you don't need with `"version": "none"`.
|
|
112
112
|
- The background Claude Code update runs once on startup — it's not persistent.
|
|
113
113
|
|
|
@@ -10,16 +10,20 @@ This directory contains DevContainer Features for AI coding agent environments.
|
|
|
10
10
|
| `agent-browser` | Headless browser automation for AI agents | ✅ |
|
|
11
11
|
| `claude-monitor` | Real-time token usage monitoring | ✅ |
|
|
12
12
|
| `ccusage` | Token usage analytics CLI | ✅ |
|
|
13
|
-
| `ccburn` | Visual token burn rate tracker with pace indicators | ✅
|
|
13
|
+
| `ccburn` | Visual token burn rate tracker with pace indicators | ✅ |
|
|
14
14
|
| `ccstatusline` | 6-line powerline status display (v1.1.0) | ✅ |
|
|
15
15
|
| `ast-grep` | Structural code search using AST patterns | ✅ |
|
|
16
16
|
| `tree-sitter` | Parser with JS/TS/Python grammars | ✅ |
|
|
17
17
|
| `lsp-servers` | Pyright and TypeScript language servers | ✅ |
|
|
18
18
|
| `biome` | Fast JS/TS/JSON/CSS formatter | ✅ |
|
|
19
|
+
| `ruff` | Fast Python linter and formatter | ✅ |
|
|
20
|
+
| `shfmt` | Shell script formatter | ✅ (disabled by default) |
|
|
21
|
+
| `shellcheck` | Static analysis for shell scripts | ✅ (disabled by default) |
|
|
22
|
+
| `hadolint` | Dockerfile linter | ✅ (disabled by default) |
|
|
23
|
+
| `dprint` | Pluggable formatter for Markdown/YAML/TOML | ✅ (disabled by default) |
|
|
24
|
+
| `ccms` | Claude Code session history search | ✅ |
|
|
19
25
|
| `notify-hook` | Desktop notifications on Claude completion | ✅ |
|
|
20
|
-
| `splitrail` | Git worktree management for parallel branches | ✅ |
|
|
21
26
|
| `mcp-qdrant` | Qdrant vector database MCP server | ✅ (optional) |
|
|
22
|
-
| `mcp-reasoner` | Enhanced AI reasoning MCP server | ✅ (optional) |
|
|
23
27
|
| `claude-code` | Fallback config for Anthropic's official Claude Code feature | ✅ (config only) |
|
|
24
28
|
|
|
25
29
|
> **Note**: Claude Code itself is installed via `ghcr.io/anthropics/devcontainer-features/claude-code:1` (Anthropic's official feature). The local `claude-code/` directory provides only fallback configuration.
|
|
@@ -99,16 +103,11 @@ ghcr.io/yourorg/codeforge-features/feature-name:1
|
|
|
99
103
|
|
|
100
104
|
## Migration from Modules
|
|
101
105
|
|
|
102
|
-
CodeForge modules
|
|
106
|
+
CodeForge modules have been converted to DevContainer Features:
|
|
103
107
|
|
|
104
108
|
| Old Module | New Feature | Status |
|
|
105
109
|
|-----------|-------------|---------|
|
|
106
110
|
| mcp_qdrant | mcp-qdrant | ✅ Complete |
|
|
107
|
-
| mcp_reasoner | mcp-reasoner | ✅ Complete |
|
|
108
|
-
| mcp_browser | mcp-browser | 🔜 Planned |
|
|
109
|
-
| mcp_sourcerer | mcp-sourcerer | 🔜 Planned |
|
|
110
|
-
| mcp_obsidian | mcp-obsidian | 🔜 Planned |
|
|
111
|
-
| mcp_code_runner | mcp-code-runner | 🔜 Planned |
|
|
112
111
|
|
|
113
112
|
## Resources
|
|
114
113
|
|