CodeForge devcontainer for AI-assisted development with Claude Code.
| File | Purpose |
|---|---|
.codeforge/config/settings.json |
Model, tokens, permissions, plugins, env vars |
.codeforge/config/main-system-prompt.md |
System prompt defining assistant behavior |
.codeforge/config/orchestrator-system-prompt.md |
Orchestrator mode prompt (delegation-first) |
.codeforge/config/ccstatusline-settings.json |
Status bar widget layout (deployed to ~/.config/ccstatusline/) |
.codeforge/config/disabled-hooks.json |
Disable individual plugin hooks by script name |
.codeforge/file-manifest.json |
Controls which config files deploy and when |
devcontainer.json |
Container definition: image, features, mounts |
.env |
Boolean flags controlling setup steps |
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}.
| Command | Purpose |
|---|---|
cc / claude |
Run Claude Code with auto-configuration |
codeforge config apply |
Deploy config files to ~/.claude/ (same as container start) |
ccraw |
Vanilla Claude Code (bypasses config) |
ccw |
Claude Code with writing system prompt |
cc-orc |
Claude Code in orchestrator mode (delegation-first) |
ccms |
Session history search (disabled — requires Rust toolchain; uncomment in devcontainer.json to enable) |
codeforge proxy |
Launch Claude Code through mitmproxy — inspect API traffic in browser (port 8081) |
ccusage / ccburn |
Token usage analysis / burn rate |
agent-browser |
Headless Chromium (Playwright-based) |
check-setup |
Verify CodeForge setup health |
codeforge-dashboard |
Session analytics dashboard — auto-launches on start (port 7847) |
dbr |
Dynamic port forwarding (devcontainer-bridge) |
cc-tools |
List all installed tools with versions |
Declared in settings.json under enabledPlugins, auto-activated on start:
- agent-system — 19 custom agents + built-in agent redirection
- skill-engine — 23 general coding skills + auto-suggestion
- spec-workflow — 3 spec lifecycle skills (
/spec,/build,/specs) + spec-reminder hook - session-context — Git state injection, TODO harvesting, commit reminders
- auto-code-quality — Auto-format + auto-lint + advisory test runner
- workspace-scope-guard — Blocks writes outside working directory
- dangerous-command-blocker — Blocks destructive bash commands
- protected-files-guard — Blocks edits to secrets/lock files
- codeforge-lsp — LSP for Python + TypeScript/JavaScript
- ticket-workflow — EARS ticket workflow + auto-linking
- git-workflow — Standalone ship (commit/push/PR) + PR review
- notify-hook — Desktop notifications on completion
- frontend-design (Anthropic official) — UI/frontend design skill
- code-review (Anthropic official) — Code review skill
- feature-dev (Anthropic official) — Feature development skill
- pr-review-toolkit (Anthropic official) — PR review commands + agents
- prompt-snippets — Quick behavioral mode switches via /ps command
Rules in .codeforge/config/rules/ deploy to .claude/rules/ on every container start. They load into ALL sessions automatically.
Current rules: spec-workflow.md, workspace-scope.md, session-search.md
Adding rules: Create .md in .codeforge/config/rules/, add a manifest entry in .codeforge/file-manifest.json.
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.
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.
- Change model: Edit
.codeforge/config/settings.json→"model"field - Change system prompt: Edit
.codeforge/config/main-system-prompt.md - Add config file: Place in
.codeforge/config/, add entry to.codeforge/file-manifest.json - Add features: Add to
"features"indevcontainer.json - Disable features: Set
"version": "none"in the feature's config - Disable setup steps: Set flags to
falsein.env - Customize status bar: Edit
.codeforge/config/ccstatusline-settings.json - Lock Claude Code version: Set
CLAUDE_VERSION_LOCK=2.1.80in.env— the update script installs that exact version on container start instead of updating to latest. Unset to resume auto-updates. - Disable individual hooks: Add script name (without
.py) todisabledarray in.codeforge/config/disabled-hooks.json— takes effect immediately, no restart needed
Available since Claude Code v2.1.78. Resolves to a dedicated data directory per plugin that survives plugin updates (unlike ${CLAUDE_PLUGIN_ROOT}, which points to the plugin's source directory).
Current state: Not used in CodeForge plugins. Plugins store transient state in /tmp/{prefix}-{session_id}.
Future use: When a plugin needs persistent state across sessions (cached configs, learned preferences, usage frequency), use ${CLAUDE_PLUGIN_DATA} in hook commands instead of /tmp/.