codeforge-dev 1.7.0 → 1.8.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 +4 -6
- package/.devcontainer/.env.example +29 -0
- package/.devcontainer/.gitignore +8 -0
- package/.devcontainer/.secrets.example +12 -0
- package/.devcontainer/CHANGELOG.md +130 -0
- package/.devcontainer/CLAUDE.md +56 -19
- package/.devcontainer/README.md +111 -56
- package/.devcontainer/config/{main-system-prompt.md → defaults/main-system-prompt.md} +72 -0
- package/.devcontainer/config/file-manifest.json +20 -0
- package/.devcontainer/devcontainer.json +20 -0
- package/.devcontainer/docs/configuration-reference.md +90 -0
- package/.devcontainer/docs/keybindings.md +100 -0
- package/.devcontainer/docs/optional-features.md +129 -0
- package/.devcontainer/docs/plugins.md +154 -0
- package/.devcontainer/docs/troubleshooting.md +128 -0
- package/.devcontainer/features/agent-browser/install.sh +6 -0
- package/.devcontainer/features/ast-grep/install.sh +6 -0
- package/.devcontainer/features/biome/README.md +27 -0
- package/.devcontainer/features/biome/install.sh +6 -0
- package/.devcontainer/features/ccburn/install.sh +6 -0
- package/.devcontainer/features/ccstatusline/devcontainer-feature.json +5 -0
- package/.devcontainer/features/ccstatusline/install.sh +7 -0
- package/.devcontainer/features/ccusage/install.sh +6 -0
- package/.devcontainer/features/claude-monitor/install.sh +6 -0
- package/.devcontainer/features/dprint/README.md +30 -0
- package/.devcontainer/features/dprint/devcontainer-feature.json +18 -0
- package/.devcontainer/features/dprint/install.sh +131 -0
- package/.devcontainer/features/hadolint/README.md +35 -0
- package/.devcontainer/features/hadolint/devcontainer-feature.json +13 -0
- package/.devcontainer/features/hadolint/install.sh +86 -0
- package/.devcontainer/features/lsp-servers/devcontainer-feature.json +5 -0
- package/.devcontainer/features/lsp-servers/install.sh +7 -0
- package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +5 -0
- package/.devcontainer/features/mcp-qdrant/install.sh +13 -6
- package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +5 -0
- package/.devcontainer/features/mcp-reasoner/install.sh +8 -1
- package/.devcontainer/features/notify-hook/devcontainer-feature.json +5 -0
- package/.devcontainer/features/notify-hook/install.sh +7 -0
- package/.devcontainer/features/ruff/README.md +26 -0
- package/.devcontainer/features/ruff/devcontainer-feature.json +21 -0
- package/.devcontainer/features/ruff/install.sh +74 -0
- package/.devcontainer/features/shellcheck/README.md +38 -0
- package/.devcontainer/features/shellcheck/devcontainer-feature.json +13 -0
- package/.devcontainer/features/shellcheck/install.sh +24 -0
- package/.devcontainer/features/shfmt/README.md +37 -0
- package/.devcontainer/features/shfmt/devcontainer-feature.json +13 -0
- package/.devcontainer/features/shfmt/install.sh +85 -0
- package/.devcontainer/features/splitrail/devcontainer-feature.json +5 -0
- package/.devcontainer/features/splitrail/install.sh +7 -0
- package/.devcontainer/features/tmux/install.sh +8 -0
- package/.devcontainer/features/tree-sitter/install.sh +6 -0
- package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +3 -10
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/.claude-plugin/plugin.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/__pycache__/format-on-stop.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-on-stop.py +114 -9
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/.claude-plugin/plugin.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/hooks/hooks.json +4 -5
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/__pycache__/lint-file.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/lint-file.py +478 -76
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/.claude-plugin/plugin.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/AGENT-REDIRECTION.md +226 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/architect.md +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/bash-exec.md +4 -4
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/claude-guide.md +14 -23
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/debug-logs.md +2 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/dependency-analyst.md +2 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/doc-writer.md +13 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/explorer.md +2 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/generalist.md +10 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/migrator.md +6 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/refactorer.md +4 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/spec-writer.md +36 -23
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/statusline-config.md +3 -3
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/test-writer.md +3 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/hooks/hooks.json +39 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/advisory-test-runner.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/collect-edited-files.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/commit-reminder.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/git-state-injector.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/redirect-builtin-agents.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/ticket-linker.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/todo-harvester.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/advisory-test-runner.py +174 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/collect-edited-files.py +8 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/commit-reminder.py +90 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/git-state-injector.py +114 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/skill-suggester.py +61 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/ticket-linker.py +137 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/todo-harvester.py +130 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/SKILL.md +224 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/error-handling.md +166 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/rest-conventions.md +215 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/SKILL.md +211 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/references/language-patterns.md +327 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/SKILL.md +134 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/ecosystem-commands.md +264 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/license-compliance.md +80 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/SKILL.md +153 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/api-doc-templates.md +221 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/docstring-formats.md +296 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/SKILL.md +150 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/javascript-migrations.md +179 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/python-migrations.md +141 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/specification-writing/SKILL.md +32 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/__pycache__/block-dangerous.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/hooks/hooks.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/__pycache__/guard-protected.cpython-314.pyc +0 -0
- package/.devcontainer/scripts/check-setup.sh +72 -0
- package/.devcontainer/scripts/setup-aliases.sh +43 -3
- package/.devcontainer/scripts/setup-auth.sh +74 -0
- package/.devcontainer/scripts/setup-config.sh +112 -22
- package/.devcontainer/scripts/setup-update-claude.sh +8 -0
- package/.devcontainer/scripts/setup.sh +46 -13
- package/README.md +23 -190
- package/package.json +1 -1
- package/setup.js +245 -71
- package/.devcontainer/features/claude-code/README.md +0 -498
- package/.devcontainer/features/claude-code/config/settings.json +0 -72
- package/.devcontainer/features/claude-code/config/system-prompt.md +0 -118
- package/.devcontainer/features/claude-code/config/world-building-sp.md +0 -1432
- package/.devcontainer/features/claude-code/devcontainer-feature.json +0 -42
- package/.devcontainer/features/claude-code/install.sh +0 -466
- package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/.claude-plugin/plugin.json +0 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/hooks/hooks.json +0 -17
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/.claude-plugin/plugin.json +0 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/config/planning-instructions.md +0 -14
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/functional-conjuring-map.md +0 -989
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/hooks/hooks.json +0 -33
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/__pycache__/post-enhance-task.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhance-planning.py +0 -71
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-plan.sh +0 -68
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-task.sh +0 -120
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-plan.py +0 -133
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-task.py +0 -253
- /package/.devcontainer/config/{keybindings.json → defaults/keybindings.json} +0 -0
- /package/.devcontainer/config/{settings.json → defaults/settings.json} +0 -0
package/.devcontainer/.env
CHANGED
|
@@ -8,12 +8,12 @@ CLAUDE_CONFIG_DIR=/workspaces/.claude
|
|
|
8
8
|
# Setup: copy config files to CLAUDE_CONFIG_DIR
|
|
9
9
|
SETUP_CONFIG=true
|
|
10
10
|
|
|
11
|
-
# Setup: overwrite existing config files (false = skip if exists)
|
|
12
|
-
OVERWRITE_CONFIG=true
|
|
13
|
-
|
|
14
11
|
# Setup: add cc alias to shell rc files
|
|
15
12
|
SETUP_ALIASES=true
|
|
16
13
|
|
|
14
|
+
# Setup: configure Git and NPM auth from .secrets file
|
|
15
|
+
SETUP_AUTH=true
|
|
16
|
+
|
|
17
17
|
# Setup: install official Anthropic plugins
|
|
18
18
|
SETUP_PLUGINS=true
|
|
19
19
|
|
|
@@ -21,6 +21,4 @@ SETUP_PLUGINS=true
|
|
|
21
21
|
SETUP_UPDATE_CLAUDE=true
|
|
22
22
|
|
|
23
23
|
# Plugin blacklist (comma-separated plugin names to skip during auto-install)
|
|
24
|
-
|
|
25
|
-
# planning-reminder: Redundant with Claude Code v2.1+ which auto-switches to plan mode
|
|
26
|
-
PLUGIN_BLACKLIST="workflow-enhancer,planning-reminder"
|
|
24
|
+
PLUGIN_BLACKLIST=""
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# CodeForge Environment Configuration
|
|
2
|
+
# Copy to .env and customize. .env is gitignored.
|
|
3
|
+
|
|
4
|
+
# Paths
|
|
5
|
+
CLAUDE_CONFIG_DIR=/workspaces/.claude
|
|
6
|
+
# CONFIG_SOURCE_DIR is derived from script location; uncomment to override:
|
|
7
|
+
# CONFIG_SOURCE_DIR=/custom/path/to/config
|
|
8
|
+
|
|
9
|
+
# Setup: copy config files to CLAUDE_CONFIG_DIR (per config/file-manifest.json)
|
|
10
|
+
SETUP_CONFIG=true
|
|
11
|
+
|
|
12
|
+
# Setup: add cc/claude/ccraw aliases to shell rc files
|
|
13
|
+
SETUP_ALIASES=true
|
|
14
|
+
|
|
15
|
+
# Setup: configure Git and NPM auth from .secrets file
|
|
16
|
+
SETUP_AUTH=true
|
|
17
|
+
|
|
18
|
+
# Setup: install official Anthropic plugins + register local marketplace
|
|
19
|
+
SETUP_PLUGINS=true
|
|
20
|
+
|
|
21
|
+
# Setup: auto-update Claude Code CLI to latest on container start (runs in background)
|
|
22
|
+
SETUP_UPDATE_CLAUDE=true
|
|
23
|
+
|
|
24
|
+
# Setup: auto-detect projects for VS Code Project Manager extension
|
|
25
|
+
SETUP_PROJECTS=true
|
|
26
|
+
|
|
27
|
+
# Plugin blacklist: comma-separated plugin names to skip during installation
|
|
28
|
+
# Example: PLUGIN_BLACKLIST="ticket-workflow,auto-linter"
|
|
29
|
+
PLUGIN_BLACKLIST=""
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Copy this file to .secrets and fill in your tokens.
|
|
2
|
+
# .secrets is gitignored and will never be committed.
|
|
3
|
+
|
|
4
|
+
# GitHub Personal Access Token (classic or fine-grained)
|
|
5
|
+
GH_TOKEN=
|
|
6
|
+
# GitHub username for git config
|
|
7
|
+
GH_USERNAME=
|
|
8
|
+
# GitHub email for git config (use noreply for privacy)
|
|
9
|
+
GH_EMAIL=
|
|
10
|
+
|
|
11
|
+
# NPM auth token for registry.npmjs.org
|
|
12
|
+
NPM_TOKEN=
|
|
@@ -1,5 +1,135 @@
|
|
|
1
1
|
# CodeForge Devcontainer Changelog
|
|
2
2
|
|
|
3
|
+
## [v1.8.0] - 2026-02-09
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
#### Config System: Declarative File Manifest
|
|
8
|
+
- **`config/file-manifest.json`** — new declarative manifest controlling which config files are copied and how. Replaces hardcoded `copy_file` calls with per-file `overwrite` modes: `"if-changed"` (sha256-based, default), `"always"`, or `"never"`
|
|
9
|
+
- **`config/defaults/`** — config files relocated from `config/` to `config/defaults/` (settings.json, keybindings.json, main-system-prompt.md)
|
|
10
|
+
- **`setup-config.sh` rewritten** — reads file-manifest.json, supports variable expansion (`${CLAUDE_CONFIG_DIR}`, `${WORKSPACE_ROOT}`), sha256-based change detection, and legacy fallback if manifest is missing
|
|
11
|
+
|
|
12
|
+
#### Features
|
|
13
|
+
- **ruff feature** — Python formatter/linter via `uv tool install ruff`; replaces Black as primary Python formatter (Black kept as fallback)
|
|
14
|
+
- **shfmt feature** — Shell script formatter via direct binary download from GitHub releases; supports `.sh`, `.bash`, `.zsh`, `.mksh`, `.bats`
|
|
15
|
+
- **dprint feature** — Pluggable formatter for Markdown, YAML, TOML, and Dockerfile via GitHub releases binary; ships global config at `/usr/local/share/dprint/dprint.json` with four plugins (markdown, yaml, toml, dockerfile)
|
|
16
|
+
- **shellcheck feature** — Shell script linter via `apt-get install`; JSON output parsing for structured diagnostics
|
|
17
|
+
- **hadolint feature** — Dockerfile linter via direct binary download from GitHub releases; JSON output parsing
|
|
18
|
+
|
|
19
|
+
#### Formatter Coverage (format-on-stop.py)
|
|
20
|
+
- **Ruff formatter** — `.py`/`.pyi` files now formatted with Ruff (falls back to Black if Ruff not installed)
|
|
21
|
+
- **Biome expanded** — added `.css`, `.json`, `.jsonc`, `.graphql`, `.gql`, `.html`, `.vue`, `.svelte`, `.astro` (was JS/TS only; now 18 extensions total)
|
|
22
|
+
- **shfmt integration** — `.sh`, `.bash`, `.zsh`, `.mksh`, `.bats` files auto-formatted on Stop
|
|
23
|
+
- **dprint integration** — `.md`, `.markdown`, `.yaml`, `.yml`, `.toml` files and `Dockerfile`/`.dockerfile` auto-formatted on Stop
|
|
24
|
+
- **rustfmt integration** — `.rs` files auto-formatted if `rustfmt` is in PATH (conditional, zero overhead when unused)
|
|
25
|
+
|
|
26
|
+
#### Linter Coverage (lint-file.py)
|
|
27
|
+
- **Ruff linter** — Python files now checked by both Pyright (type checking) and Ruff (style/correctness); complementary, not redundant
|
|
28
|
+
- **Biome lint** — JS/TS/CSS/GraphQL files linted via `biome lint --reporter=json`; surfaces unsafe diagnostics not auto-fixed by formatter
|
|
29
|
+
- **ShellCheck** — shell scripts linted via `shellcheck --format=json`; structured severity/line/message output
|
|
30
|
+
- **go vet** — `.go` files linted via `go vet`; stderr parsed for diagnostics
|
|
31
|
+
- **hadolint** — `Dockerfile`/`.dockerfile` files linted via `hadolint --format json`
|
|
32
|
+
- **clippy** — `.rs` files linted via `cargo clippy` if cargo is in PATH (conditional)
|
|
33
|
+
|
|
34
|
+
#### version:none Support
|
|
35
|
+
- **All 20 local features** now support `"version": "none"` in devcontainer.json to skip installation entirely
|
|
36
|
+
- Added `version` option to 7 features that previously lacked it: ccstatusline, notify-hook, shellcheck, mcp-qdrant, mcp-reasoner, splitrail, lsp-servers
|
|
37
|
+
- Added skip guard (`if [ "${VERSION}" = "none" ]; then exit 0; fi`) to all 20 install.sh files
|
|
38
|
+
|
|
39
|
+
#### Advisory Hooks (code-directive plugin)
|
|
40
|
+
- **advisory-test-runner.py** `[Stop]` — runs project test suite on Stop, injects pass/fail results as `additionalContext`. Never blocks (always exit 0). Detects pytest, vitest, jest, mocha, go test, cargo test. 60s timeout, truncates to last 30 lines
|
|
41
|
+
- **git-state-injector.py** `[SessionStart]` — injects branch, status summary, recent commits, and diff stats as `additionalContext` on every session start. 5s per git command, total output capped at 2000 chars
|
|
42
|
+
- **ticket-linker.py** `[UserPromptSubmit]` — auto-fetches GitHub issues/PRs when prompt contains `#123` or full GitHub URLs. Up to 3 refs per prompt, body capped at 1500 chars each
|
|
43
|
+
- **commit-reminder.py** `[Stop]` — checks for uncommitted changes (staged/unstaged counts) and injects advisory reminder as `additionalContext`. Checks `stop_hook_active`
|
|
44
|
+
- **todo-harvester.py** `[SessionStart]` — greps for TODO/FIXME/HACK/XXX across 13 source extensions, injects count + top 10 items. Excludes noise dirs, output capped at 800 chars
|
|
45
|
+
|
|
46
|
+
#### New Skills (code-directive plugin — 5 new, 21 total)
|
|
47
|
+
- **api-design** — REST conventions, error handling patterns, OpenAPI/Swagger guidance
|
|
48
|
+
- **ast-grep-patterns** — structural code search patterns across languages
|
|
49
|
+
- **dependency-management** — ecosystem-specific audit commands, license compliance
|
|
50
|
+
- **documentation-patterns** — docstring formats, API doc templates
|
|
51
|
+
- **migration-patterns** — Python and JavaScript framework migration guides
|
|
52
|
+
|
|
53
|
+
#### Commands & Scripts
|
|
54
|
+
- **`cc-tools`** — new shell function listing all installed CodeForge tools with version info
|
|
55
|
+
- **`check-setup`** — new health check script (`check-setup.sh`) verifying container setup is working correctly; aliased in shell rc files
|
|
56
|
+
|
|
57
|
+
#### Workspace
|
|
58
|
+
- **`CLAUDE.md`** — workspace-level project instructions (workspace scoping rules)
|
|
59
|
+
- **`test-project/`** — minimal test project directory
|
|
60
|
+
|
|
61
|
+
### Changed
|
|
62
|
+
|
|
63
|
+
#### NPM Package (setup.js)
|
|
64
|
+
- **`--force` is now non-destructive** — selectively syncs files instead of rm+copy. Framework files (scripts, features, plugins) are overwritten; user config files (settings, keybindings, system prompt, file-manifest) are preserved with `.codeforge-new` versions saved for diffing
|
|
65
|
+
- **`--reset` flag** — new option for complete fresh install (deletes and re-copies everything)
|
|
66
|
+
- **`.codeforge-preserve`** — user-customizable file listing additional paths to preserve during `--force` updates
|
|
67
|
+
- **devcontainer.json handling** — user's version backed up as `.bak` during `--force`, then overwritten with package version
|
|
68
|
+
- **`.npmignore`** — excludes `.codeforge-new`, `.bak`, and `.codeforge-preserve` artifacts from npm package
|
|
69
|
+
|
|
70
|
+
#### Setup System
|
|
71
|
+
- **setup.sh** — removed `set -e` (individual script failures no longer abort the entire setup); structured pass/fail/skip reporting with elapsed time summary
|
|
72
|
+
- **setup-aliases.sh** — backs up `.bashrc`/`.zshrc` before modifying (keeps last 3 backups); cleans up old cc-tools/check-setup definitions; adds `cc-tools` function and `check-setup` alias
|
|
73
|
+
- **OVERWRITE_CONFIG deprecated** — replaced by per-file `overwrite` in `config/file-manifest.json`. Legacy env var triggers a deprecation warning
|
|
74
|
+
|
|
75
|
+
#### Code-Directive Plugin
|
|
76
|
+
- **hooks.json** — expanded from 3 to 6 hook events (added Stop, SessionStart, updated UserPromptSubmit with ticket-linker)
|
|
77
|
+
- **Agent definitions** — architect gains documentation outputs section + api-design skill link; multiple agents updated with refined instructions
|
|
78
|
+
- **skill-suggester.py** — added keyword mappings for 5 new skills (api-design, ast-grep-patterns, dependency-management, documentation-patterns, migration-patterns)
|
|
79
|
+
- **specification-writing skill** — expanded with additional templates and patterns
|
|
80
|
+
- **code-directive plugin.json** — description updated to "17 custom agents, 16 coding skills, agent redirection, syntax validation, and skill auto-suggestion"
|
|
81
|
+
|
|
82
|
+
#### Other
|
|
83
|
+
- **format-on-stop.py** — rewritten with expanded dispatch: 7 formatters covering 31 file extensions (was 3 formatters, 12 extensions)
|
|
84
|
+
- **lint-file.py** — rewritten as multi-language dispatcher: 7 linters across Python, JS/TS/CSS, Shell, Go, Dockerfile, Rust (was Pyright-only for Python)
|
|
85
|
+
- **auto-linter hook timeout** — increased from 30s to 60s (each individual linter subprocess still capped at 10s)
|
|
86
|
+
- **auto-formatter plugin.json** — description updated to reflect all 7 formatters
|
|
87
|
+
- **auto-linter plugin.json** — description updated to reflect all 7 linters
|
|
88
|
+
- **marketplace.json** — descriptions updated for auto-formatter, auto-linter, and code-directive plugins
|
|
89
|
+
- **devcontainer.json** — 5 new features registered in `overrideFeatureInstallOrder` and `features` object; added install order documentation comments
|
|
90
|
+
- **.env.example** — removed `OVERWRITE_CONFIG`, added `SETUP_PROJECTS`, updated descriptions
|
|
91
|
+
- **.gitignore** — updated with additional exclusions
|
|
92
|
+
|
|
93
|
+
### Removed
|
|
94
|
+
|
|
95
|
+
- **`features/claude-code/`** — entire local feature deleted (Claude Code now installed via `ghcr.io/anthropics/devcontainer-features/claude-code:1`, the official Anthropic feature)
|
|
96
|
+
- **`config/settings.json`**, **`config/keybindings.json`**, **`config/main-system-prompt.md`** — moved to `config/defaults/` subdirectory
|
|
97
|
+
- **`OVERWRITE_CONFIG` env var** — deprecated in favor of `config/file-manifest.json` per-file overwrite modes
|
|
98
|
+
|
|
99
|
+
### Documentation
|
|
100
|
+
|
|
101
|
+
- **New `docs/` directory** with 5 focused guides: configuration-reference, keybindings, optional-features, plugins, troubleshooting
|
|
102
|
+
- **CLAUDE.md** — rewritten for new config system (file-manifest.json, config/defaults/), added cc-tools/check-setup commands, added version:none section, updated plugin descriptions
|
|
103
|
+
- **README.md** — added new tools (ruff, shfmt, dprint, shellcheck, hadolint, Bun), updated config system docs, added SETUP_PROJECTS and PLUGIN_BLACKLIST env vars, updated ccstatusline description
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## [v1.7.1] - 2026-02-08
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
|
|
111
|
+
- **Automatic Git & NPM auth on container start** — new `setup-auth.sh` script reads tokens from `.devcontainer/.secrets` (or environment variables) and configures GitHub CLI, git user identity, and NPM registry auth automatically
|
|
112
|
+
- **`.secrets.example` template** — committed template showing required variables (`GH_TOKEN`, `GH_USERNAME`, `GH_EMAIL`, `NPM_TOKEN`)
|
|
113
|
+
- **`.env.example` template** — committed template for environment configuration (`.env` itself remains gitignored)
|
|
114
|
+
- **`SETUP_AUTH` env var** — controls whether auth setup runs on container start (default: `true`)
|
|
115
|
+
- **`AGENT-REDIRECTION.md`** — guide on how the PreToolUse hook system works, how built-in agents are swapped to custom ones, and what else is possible (prompt injection, model overrides, conditional routing, external service chaining)
|
|
116
|
+
|
|
117
|
+
### Changed
|
|
118
|
+
|
|
119
|
+
- **README split by audience** — root `README.md` is now the npm/GitHub landing page (install, prerequisites, what's included, quick start); `.devcontainer/README.md` is now the usage guide (auth, tools, config, agents, keybindings, gotchas). No duplicated content between the two
|
|
120
|
+
- **Auto-linter moved to Stop hook** — was PostToolUse (ran pyright per-edit, caused agent re-reads); now batch-lints all edited Python files when Claude stops, matching auto-formatter's pattern. Uses its own temp file (`claude-lint-files-{session_id}`) independent of the formatter pipeline
|
|
121
|
+
- **`collect-edited-files.py`** — now writes to both `claude-edited-files-*` (formatter) and `claude-lint-files-*` (linter) temp files, keeping the two Stop hook pipelines independent
|
|
122
|
+
- **`.devcontainer/.gitignore`** — added `.secrets` explicit ignore and negation patterns (`!.env.example`, `!.secrets.example`, `!.gitignore`) to override root `.*` rule for files that should be tracked
|
|
123
|
+
- **`setup.sh` orchestration** — `setup-auth.sh` runs early (after symlink, before config/plugins) so NPM auth is available for plugin installation
|
|
124
|
+
- **`PLUGIN_BLACKLIST`** — cleared (was `"workflow-enhancer,planning-reminder"`)
|
|
125
|
+
|
|
126
|
+
### Removed
|
|
127
|
+
|
|
128
|
+
- **`workflow-enhancer` plugin** — deleted entirely (was scaffolding only, never active)
|
|
129
|
+
- **`planning-reminder` plugin** — deleted entirely (redundant with Claude Code v2.1+ auto plan mode)
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
3
133
|
## [v1.7.0] - 2026-02-08
|
|
4
134
|
|
|
5
135
|
### Added
|
package/.devcontainer/CLAUDE.md
CHANGED
|
@@ -10,15 +10,17 @@ CodeForge devcontainer for AI-assisted development with Claude Code.
|
|
|
10
10
|
│ ├── devcontainer.json # Main container definition
|
|
11
11
|
│ ├── .env # Environment variables
|
|
12
12
|
│ ├── config/ # Default configurations
|
|
13
|
-
│ │ ├──
|
|
14
|
-
│ │
|
|
15
|
-
│ │
|
|
13
|
+
│ │ ├── file-manifest.json # Declarative file-copy manifest
|
|
14
|
+
│ │ └── defaults/ # Files copied per manifest
|
|
15
|
+
│ │ ├── settings.json # Claude Code settings
|
|
16
|
+
│ │ ├── keybindings.json # Claude Code keybindings
|
|
17
|
+
│ │ └── main-system-prompt.md
|
|
16
18
|
│ ├── features/ # Custom devcontainer features
|
|
17
19
|
│ ├── plugins/ # Local plugin marketplace
|
|
18
20
|
│ │ └── devs-marketplace/
|
|
19
21
|
│ └── scripts/ # Setup scripts
|
|
20
22
|
├── .claude/ # Runtime Claude config (created on first run)
|
|
21
|
-
│ ├── settings.json # Active settings (
|
|
23
|
+
│ ├── settings.json # Active settings (managed by file-manifest.json)
|
|
22
24
|
│ ├── keybindings.json # Active keybindings
|
|
23
25
|
│ └── system-prompt.md # Active system prompt
|
|
24
26
|
└── .gh/ # GitHub CLI config (persists across rebuilds)
|
|
@@ -31,11 +33,12 @@ CodeForge devcontainer for AI-assisted development with Claude Code.
|
|
|
31
33
|
|------|---------|
|
|
32
34
|
| `devcontainer.json` | Container definition: base image, features, mounts, environment |
|
|
33
35
|
| `.env` | Environment variables controlling setup behavior |
|
|
34
|
-
| `config/
|
|
35
|
-
| `config/
|
|
36
|
-
| `config/
|
|
36
|
+
| `config/file-manifest.json` | Declarative manifest controlling which config files are copied and how |
|
|
37
|
+
| `config/defaults/settings.json` | Claude Code defaults: model, tokens, permissions, plugins |
|
|
38
|
+
| `config/defaults/keybindings.json` | Claude Code keybindings (empty by default — customizable) |
|
|
39
|
+
| `config/defaults/main-system-prompt.md` | Default system prompt defining assistant behavior |
|
|
37
40
|
|
|
38
|
-
> **Note**:
|
|
41
|
+
> **Note**: Config file copying is controlled by `config/file-manifest.json`. Each entry specifies `overwrite`: `"if-changed"` (default, sha256-based), `"always"`, or `"never"`. Persistent changes go in `.devcontainer/config/defaults/settings.json`.
|
|
39
42
|
|
|
40
43
|
## Commands
|
|
41
44
|
|
|
@@ -48,6 +51,8 @@ CodeForge devcontainer for AI-assisted development with Claude Code.
|
|
|
48
51
|
| `gh` | GitHub CLI for repo operations |
|
|
49
52
|
| `uv` | Fast Python package manager |
|
|
50
53
|
| `ast-grep` | Structural code search |
|
|
54
|
+
| `cc-tools` | List all installed tools with version info |
|
|
55
|
+
| `check-setup` | Verify CodeForge setup health |
|
|
51
56
|
|
|
52
57
|
## Feature Development
|
|
53
58
|
|
|
@@ -68,7 +73,38 @@ To test a feature locally, reference it in `devcontainer.json`:
|
|
|
68
73
|
}
|
|
69
74
|
```
|
|
70
75
|
|
|
71
|
-
> **Note**:
|
|
76
|
+
> **Note**: Claude Code is installed via `ghcr.io/anthropics/devcontainer-features/claude-code:1` (Anthropic's official feature).
|
|
77
|
+
|
|
78
|
+
### Disabling Features with `version: "none"`
|
|
79
|
+
|
|
80
|
+
Every local feature supports `"version": "none"` to skip installation entirely. This is useful for trimming build time or disabling tools you don't need without removing them from `devcontainer.json`.
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
"features": {
|
|
84
|
+
"./features/ruff": { "version": "none" },
|
|
85
|
+
"./features/biome": {},
|
|
86
|
+
"./features/hadolint": { "version": "none" }
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
When `version` is set to `"none"`, the feature's `install.sh` exits immediately with a skip message. The feature entry stays in `devcontainer.json` so re-enabling is a one-word change.
|
|
91
|
+
|
|
92
|
+
**All local features support this pattern:**
|
|
93
|
+
ast-grep, biome, ccstatusline, claude-monitor, dprint, hadolint, lsp-servers, mcp-qdrant, mcp-reasoner, notify-hook, ruff, shfmt, shellcheck, splitrail, tmux
|
|
94
|
+
|
|
95
|
+
**External features with `version: "none"` support:**
|
|
96
|
+
`ghcr.io/devcontainers/features/node`, `ghcr.io/devcontainers/features/github-cli`, `ghcr.io/devcontainers/features/docker-outside-of-docker`, `ghcr.io/devcontainers/features/go` (all official Microsoft features)
|
|
97
|
+
|
|
98
|
+
**External features without `version: "none"` support:**
|
|
99
|
+
`ghcr.io/devcontainers-extra/features/uv`, `ghcr.io/anthropics/devcontainer-features/claude-code`, `ghcr.io/nickmccurdy/bun`
|
|
100
|
+
|
|
101
|
+
> **Convention**: Every new local feature must include a `version` option (default `"latest"`) in its `devcontainer-feature.json` and a skip guard at the top of `install.sh`:
|
|
102
|
+
> ```bash
|
|
103
|
+
> if [ "${VERSION}" = "none" ]; then
|
|
104
|
+
> echo "[feature-name] Skipping installation (version=none)"
|
|
105
|
+
> exit 0
|
|
106
|
+
> fi
|
|
107
|
+
> ```
|
|
72
108
|
|
|
73
109
|
## Setup Scripts
|
|
74
110
|
|
|
@@ -77,7 +113,7 @@ Scripts in `./scripts/` run via `postStartCommand`:
|
|
|
77
113
|
| Script | Purpose |
|
|
78
114
|
|--------|---------|
|
|
79
115
|
| `setup.sh` | Main orchestrator |
|
|
80
|
-
| `setup-config.sh` | Copies config files
|
|
116
|
+
| `setup-config.sh` | Copies config files per `config/file-manifest.json` to destinations |
|
|
81
117
|
| `setup-aliases.sh` | Creates `cc`/`claude`/`ccraw` shell aliases |
|
|
82
118
|
| `setup-plugins.sh` | Registers local marketplace + installs official Anthropic plugins |
|
|
83
119
|
| `setup-update-claude.sh` | Background auto-update of Claude Code binary |
|
|
@@ -86,7 +122,7 @@ Scripts in `./scripts/` run via `postStartCommand`:
|
|
|
86
122
|
|
|
87
123
|
## Installed Plugins
|
|
88
124
|
|
|
89
|
-
Plugins are declared in `config/settings.json` under `enabledPlugins` and auto-activated on container start:
|
|
125
|
+
Plugins are declared in `config/defaults/settings.json` under `enabledPlugins` and auto-activated on container start:
|
|
90
126
|
|
|
91
127
|
### Official (Anthropic)
|
|
92
128
|
- `frontend-design@claude-code-plugins` — UI/frontend design skill
|
|
@@ -97,8 +133,8 @@ Plugins are declared in `config/settings.json` under `enabledPlugins` and auto-a
|
|
|
97
133
|
- `notify-hook@devs-marketplace` — Desktop notifications on completion
|
|
98
134
|
- `dangerous-command-blocker@devs-marketplace` — Blocks destructive bash commands
|
|
99
135
|
- `protected-files-guard@devs-marketplace` — Blocks edits to secrets/lock files
|
|
100
|
-
- `auto-formatter@devs-marketplace` —
|
|
101
|
-
- `auto-linter@devs-marketplace` — Auto-lints
|
|
136
|
+
- `auto-formatter@devs-marketplace` — Batch-formats edited files at Stop (Ruff/Black for Python, gofmt for Go, Biome for JS/TS/CSS/JSON/GraphQL/HTML, shfmt for Shell, dprint for Markdown/YAML/TOML/Dockerfile, rustfmt for Rust)
|
|
137
|
+
- `auto-linter@devs-marketplace` — Auto-lints edited files at Stop (Pyright + Ruff for Python, Biome for JS/TS/CSS/GraphQL, ShellCheck for Shell, go vet for Go, hadolint for Dockerfile, clippy for Rust)
|
|
102
138
|
- `code-directive@devs-marketplace` — 17 custom agents, 16 skills, syntax validation, skill suggestions, agent redirect hook
|
|
103
139
|
|
|
104
140
|
### Local Marketplace
|
|
@@ -144,7 +180,7 @@ Claude Code runs inside VS Code's integrated terminal. VS Code intercepts some s
|
|
|
144
180
|
| `Ctrl+P` | Quick Open | `chat:modelPicker` |
|
|
145
181
|
| `Ctrl+R` | Open Recent | `history:search` |
|
|
146
182
|
|
|
147
|
-
`Ctrl+P` and `Ctrl+F` are configured to pass through to the terminal via `terminal.integrated.commandsToSkipShell` in `devcontainer.json`. For other conflicts, use Meta (Alt) variants or customize via `config/keybindings.json`.
|
|
183
|
+
`Ctrl+P` and `Ctrl+F` are configured to pass through to the terminal via `terminal.integrated.commandsToSkipShell` in `devcontainer.json`. For other conflicts, use Meta (Alt) variants or customize via `config/defaults/keybindings.json`.
|
|
148
184
|
|
|
149
185
|
## Environment Variables
|
|
150
186
|
|
|
@@ -160,8 +196,9 @@ Key environment variables set in the container:
|
|
|
160
196
|
|
|
161
197
|
## Modifying Behavior
|
|
162
198
|
|
|
163
|
-
1. **Change default model**: Edit `config/settings.json`, update `"model"` field
|
|
164
|
-
2. **Change system prompt**: Edit `config/main-system-prompt.md`
|
|
165
|
-
3. **Change keybindings**: Edit `config/keybindings.json`
|
|
166
|
-
4. **Add
|
|
167
|
-
5. **
|
|
199
|
+
1. **Change default model**: Edit `config/defaults/settings.json`, update `"model"` field
|
|
200
|
+
2. **Change system prompt**: Edit `config/defaults/main-system-prompt.md`
|
|
201
|
+
3. **Change keybindings**: Edit `config/defaults/keybindings.json`
|
|
202
|
+
4. **Add a custom config file**: Add an entry to `config/file-manifest.json` with `src`, `dest`, and optional `overwrite`/`destFilename`
|
|
203
|
+
5. **Add features**: Add to `"features"` in `devcontainer.json`
|
|
204
|
+
6. **Disable auto-setup**: Set variables to `false` in `.env`
|
package/.devcontainer/README.md
CHANGED
|
@@ -1,34 +1,21 @@
|
|
|
1
|
-
# CodeForge
|
|
1
|
+
# CodeForge Usage Guide
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
[](https://www.npmjs.com/package/codeforge-dev)
|
|
5
|
-
|
|
6
|
-
A curated development environment optimized for AI-powered coding with Claude Code. CodeForge comes pre-configured with language servers, code intelligence tools, and official Anthropic plugins to streamline your development workflow.
|
|
7
|
-
|
|
8
|
-
## Prerequisites
|
|
9
|
-
|
|
10
|
-
- **Docker Desktop** (or compatible container runtime like Podman)
|
|
11
|
-
- **VS Code** with the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers), or **GitHub Codespaces**
|
|
12
|
-
- **Claude Code authentication** - see [Authentication](#authentication) section
|
|
3
|
+
Everything you need to know once you're inside the devcontainer.
|
|
13
4
|
|
|
14
5
|
## Quick Start
|
|
15
6
|
|
|
16
|
-
1. **
|
|
17
|
-
- VS Code: Open the folder, then select "Reopen in Container" from the command palette
|
|
18
|
-
- Codespaces: Create a new codespace from this repository
|
|
19
|
-
|
|
20
|
-
2. **Authenticate** (first time only)
|
|
7
|
+
1. **Authenticate** (first time only)
|
|
21
8
|
```bash
|
|
22
9
|
claude
|
|
23
10
|
```
|
|
24
11
|
Follow the prompts to authenticate via browser or API key.
|
|
25
12
|
|
|
26
|
-
|
|
13
|
+
2. **Start Claude Code**
|
|
27
14
|
```bash
|
|
28
15
|
cc
|
|
29
16
|
```
|
|
30
17
|
|
|
31
|
-
## Authentication
|
|
18
|
+
## Claude Code Authentication
|
|
32
19
|
|
|
33
20
|
Claude Code supports multiple authentication methods. On first run, you'll be prompted to choose:
|
|
34
21
|
|
|
@@ -57,11 +44,39 @@ Authentication credentials are stored in `/workspaces/.claude/` and persist acro
|
|
|
57
44
|
|
|
58
45
|
For more options, see the [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code).
|
|
59
46
|
|
|
60
|
-
## GitHub
|
|
47
|
+
## GitHub & NPM Authentication
|
|
61
48
|
|
|
62
|
-
|
|
49
|
+
### Automatic Auth via `.secrets` (Recommended)
|
|
50
|
+
|
|
51
|
+
CodeForge can automatically configure GitHub CLI, git identity, and NPM auth on every container start. Copy the template and fill in your tokens:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
cp .devcontainer/.secrets.example .devcontainer/.secrets
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Edit `.devcontainer/.secrets`:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
GH_TOKEN=ghp_your_token_here
|
|
61
|
+
GH_USERNAME=your-github-username
|
|
62
|
+
GH_EMAIL=your-email@example.com
|
|
63
|
+
NPM_TOKEN=npm_your_token_here
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
On the next container start (or rebuild), `setup-auth.sh` will:
|
|
67
|
+
- Authenticate `gh` CLI and configure git credential helper
|
|
68
|
+
- Set `git config --global user.name` and `user.email`
|
|
69
|
+
- Set NPM registry auth token
|
|
70
|
+
|
|
71
|
+
The `.secrets` file is gitignored at two levels (root `.*` + `.devcontainer/.gitignore`) and will never be committed.
|
|
72
|
+
|
|
73
|
+
**Environment variable fallback**: For Codespaces or CI, set `GH_TOKEN`, `GH_USERNAME`, `GH_EMAIL`, and/or `NPM_TOKEN` as environment variables (e.g., via Codespaces secrets or `localEnv` in `devcontainer.json`). Environment variables take precedence over `.secrets` file values.
|
|
74
|
+
|
|
75
|
+
Disable automatic auth by setting `SETUP_AUTH=false` in `.devcontainer/.env`.
|
|
63
76
|
|
|
64
|
-
### Interactive Login (
|
|
77
|
+
### Interactive Login (Alternative)
|
|
78
|
+
|
|
79
|
+
GitHub CLI (`gh`) is pre-installed for repository operations like pushing code, creating pull requests, and accessing private repositories.
|
|
65
80
|
|
|
66
81
|
```bash
|
|
67
82
|
gh auth login
|
|
@@ -98,7 +113,28 @@ Expected output shows your authenticated account and token scopes.
|
|
|
98
113
|
|
|
99
114
|
GitHub CLI credentials are automatically persisted across container rebuilds. The container is configured to store credentials in `/workspaces/.gh/` (via `GH_CONFIG_DIR`), which is part of the bind-mounted workspace.
|
|
100
115
|
|
|
101
|
-
**You only need to authenticate once.** After running `gh auth login`, your credentials will survive container rebuilds and be available in future sessions.
|
|
116
|
+
**You only need to authenticate once.** After running `gh auth login` or configuring `.secrets`, your credentials will survive container rebuilds and be available in future sessions.
|
|
117
|
+
|
|
118
|
+
## Using Claude Code
|
|
119
|
+
|
|
120
|
+
### The `cc` Command
|
|
121
|
+
|
|
122
|
+
The `cc` command is an alias that launches Claude Code with the project's system prompt and plan-mode permissions. For Agent Teams split-pane support, use the **"Claude Teams (tmux)"** terminal profile in VS Code (dropdown next to the `+` button) or connect via `connect-external-terminal.sh`.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
cc # Start Claude Code in current directory
|
|
126
|
+
cc "explain this" # Start with an initial prompt
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Direct CLI
|
|
130
|
+
|
|
131
|
+
For more control, use the `claude` command directly:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
claude # Basic invocation
|
|
135
|
+
claude --help # View all options
|
|
136
|
+
claude --resume # Resume previous session
|
|
137
|
+
```
|
|
102
138
|
|
|
103
139
|
## Available Tools
|
|
104
140
|
|
|
@@ -109,6 +145,7 @@ GitHub CLI credentials are automatically persisted across container rebuilds. Th
|
|
|
109
145
|
| Node.js LTS | JavaScript runtime |
|
|
110
146
|
| TypeScript | Via Node.js |
|
|
111
147
|
| Go | Latest stable via devcontainer feature |
|
|
148
|
+
| Bun | Fast JavaScript runtime and toolkit |
|
|
112
149
|
|
|
113
150
|
### Package Managers
|
|
114
151
|
| Tool | Description |
|
|
@@ -126,7 +163,12 @@ GitHub CLI credentials are automatically persisted across container rebuilds. Th
|
|
|
126
163
|
| `jq` | JSON processor |
|
|
127
164
|
| `curl` | HTTP client |
|
|
128
165
|
| `tmux` | Terminal multiplexer for Agent Teams split-pane sessions |
|
|
129
|
-
| `biome` | Fast JS/TS/JSON/CSS formatter |
|
|
166
|
+
| `biome` | Fast JS/TS/JSON/CSS formatter and linter |
|
|
167
|
+
| `ruff` | Fast Python linter and formatter (replaces Black + Flake8) |
|
|
168
|
+
| `shfmt` | Shell script formatter |
|
|
169
|
+
| `dprint` | Pluggable formatter for Markdown, YAML, TOML, Dockerfile |
|
|
170
|
+
| `shellcheck` | Static analysis tool for shell scripts |
|
|
171
|
+
| `hadolint` | Dockerfile linter |
|
|
130
172
|
| `agent-browser` | Headless browser automation for AI agents |
|
|
131
173
|
|
|
132
174
|
### Code Intelligence
|
|
@@ -144,47 +186,38 @@ GitHub CLI credentials are automatically persisted across container rebuilds. Th
|
|
|
144
186
|
| `cc` | Wrapper with auto-configuration |
|
|
145
187
|
| `ccusage` | Token usage analyzer |
|
|
146
188
|
| `ccburn` | Visual token burn rate tracker with pace indicators |
|
|
147
|
-
| `ccstatusline` |
|
|
189
|
+
| `ccstatusline` | Status bar display (integrated into Claude Code, not standalone CLI) |
|
|
148
190
|
| `claude-monitor` | Real-time usage tracking |
|
|
149
191
|
|
|
150
|
-
## Using Claude Code
|
|
151
|
-
|
|
152
|
-
### The `cc` Command
|
|
153
|
-
|
|
154
|
-
The `cc` command is an alias that launches Claude Code with the project's system prompt and plan-mode permissions. For Agent Teams split-pane support, use the **"Claude Teams (tmux)"** terminal profile in VS Code (dropdown next to the `+` button) or connect via `connect-external-terminal.sh`.
|
|
155
|
-
|
|
156
|
-
```bash
|
|
157
|
-
cc # Start Claude Code in current directory
|
|
158
|
-
cc "explain this" # Start with an initial prompt
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
### Direct CLI
|
|
162
|
-
|
|
163
|
-
For more control, use the `claude` command directly:
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
claude # Basic invocation
|
|
167
|
-
claude --help # View all options
|
|
168
|
-
claude --resume # Resume previous session
|
|
169
|
-
```
|
|
170
|
-
|
|
171
192
|
## Configuration
|
|
172
193
|
|
|
173
194
|
### Environment Variables
|
|
174
195
|
|
|
175
|
-
|
|
196
|
+
Copy `.devcontainer/.env.example` to `.devcontainer/.env` and customize:
|
|
176
197
|
|
|
177
198
|
| Variable | Default | Description |
|
|
178
199
|
|----------|---------|-------------|
|
|
179
200
|
| `CLAUDE_CONFIG_DIR` | `/workspaces/.claude` | Claude configuration directory |
|
|
180
|
-
| `SETUP_CONFIG` | `true` | Copy config files during setup |
|
|
181
|
-
| `
|
|
182
|
-
| `
|
|
183
|
-
| `SETUP_PLUGINS` | `true` | Install official plugins |
|
|
201
|
+
| `SETUP_CONFIG` | `true` | Copy config files during setup (per `file-manifest.json`) |
|
|
202
|
+
| `SETUP_ALIASES` | `true` | Add `cc`/`claude`/`ccraw` aliases to shell |
|
|
203
|
+
| `SETUP_AUTH` | `true` | Configure Git/NPM auth from `.secrets` |
|
|
204
|
+
| `SETUP_PLUGINS` | `true` | Install official plugins + register marketplace |
|
|
205
|
+
| `SETUP_UPDATE_CLAUDE` | `true` | Auto-update Claude Code on container start |
|
|
206
|
+
| `SETUP_PROJECTS` | `true` | Auto-detect projects for VS Code Project Manager |
|
|
207
|
+
| `PLUGIN_BLACKLIST` | `""` | Comma-separated plugin names to skip |
|
|
184
208
|
|
|
185
209
|
### Claude Code Settings
|
|
186
210
|
|
|
187
|
-
Default settings are in `.devcontainer/config/settings.json`.
|
|
211
|
+
Default settings are in `.devcontainer/config/defaults/settings.json`. File copying is controlled by `config/file-manifest.json`, which specifies per-file overwrite behavior (`"if-changed"`, `"always"`, or `"never"`).
|
|
212
|
+
|
|
213
|
+
To add a custom config file, append an entry to `file-manifest.json`:
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"src": "my-config.json",
|
|
217
|
+
"dest": "${WORKSPACE_ROOT}",
|
|
218
|
+
"overwrite": "if-changed"
|
|
219
|
+
}
|
|
220
|
+
```
|
|
188
221
|
|
|
189
222
|
Key defaults:
|
|
190
223
|
- **Model**: Claude Opus 4-6
|
|
@@ -193,7 +226,7 @@ Key defaults:
|
|
|
193
226
|
|
|
194
227
|
### Keybindings
|
|
195
228
|
|
|
196
|
-
Default keybindings are in `.devcontainer/config/keybindings.json` (empty by default — Claude Code defaults apply). Customize by adding entries to the `bindings` array.
|
|
229
|
+
Default keybindings are in `.devcontainer/config/defaults/keybindings.json` (empty by default — Claude Code defaults apply). Customize by adding entries to the `bindings` array.
|
|
197
230
|
|
|
198
231
|
**VS Code Terminal Passthrough**: `Ctrl+P` and `Ctrl+F` are configured to pass through to the terminal (via `terminal.integrated.commandsToSkipShell`) so Claude Code receives them. Other VS Code shortcuts that conflict with Claude Code:
|
|
199
232
|
|
|
@@ -210,7 +243,7 @@ For conflicting shortcuts, use Meta (Alt) variants or add custom keybindings.
|
|
|
210
243
|
|
|
211
244
|
### System Prompt
|
|
212
245
|
|
|
213
|
-
The default system prompt is in `.devcontainer/config/main-system-prompt.md`. Override it by creating a `.claude/system-prompt.md` in your project directory.
|
|
246
|
+
The default system prompt is in `.devcontainer/config/defaults/main-system-prompt.md`. Override it by creating a `.claude/system-prompt.md` in your project directory.
|
|
214
247
|
|
|
215
248
|
## Custom Features
|
|
216
249
|
|
|
@@ -223,7 +256,7 @@ CodeForge includes several custom devcontainer features:
|
|
|
223
256
|
| `claude-monitor` | Real-time token usage monitoring with ML predictions |
|
|
224
257
|
| `ccusage` | Usage analytics CLI |
|
|
225
258
|
| `ccburn` | Visual token burn rate tracker with pace indicators |
|
|
226
|
-
| `ccstatusline` |
|
|
259
|
+
| `ccstatusline` | Status bar display (integrated into Claude Code, not standalone CLI) |
|
|
227
260
|
| `ast-grep` | Structural code search using AST patterns |
|
|
228
261
|
| `tree-sitter` | Parser with JS/TS/Python grammars |
|
|
229
262
|
| `lsp-servers` | Pyright and TypeScript language servers |
|
|
@@ -274,12 +307,34 @@ The `setup-projects.sh` script auto-detects projects under `/workspaces/` and ma
|
|
|
274
307
|
|
|
275
308
|
- **Authentication required**: Run `claude` once to authenticate before using `cc`
|
|
276
309
|
- **Plan mode default**: The container starts in "plan" mode, which prompts for approval before making changes
|
|
277
|
-
- **
|
|
278
|
-
- **GitHub auth persists**: Run `gh auth login` once
|
|
310
|
+
- **Config is managed by manifest**: `config/file-manifest.json` controls which files are copied and when — default `overwrite: "if-changed"` uses sha256 comparison. Persistent changes go in `.devcontainer/config/defaults/settings.json`
|
|
311
|
+
- **GitHub auth persists**: Run `gh auth login` once or configure `.secrets`; credentials survive container rebuilds
|
|
279
312
|
- **Agent Teams needs tmux**: Split panes only work inside tmux. Use the "Claude Teams (tmux)" VS Code terminal profile or `connect-external-terminal.sh` from WezTerm/iTerm2
|
|
280
313
|
|
|
314
|
+
## Troubleshooting
|
|
315
|
+
|
|
316
|
+
Common issues and solutions. For detailed troubleshooting, see [docs/troubleshooting.md](docs/troubleshooting.md).
|
|
317
|
+
|
|
318
|
+
| Problem | Solution |
|
|
319
|
+
|---------|----------|
|
|
320
|
+
| `cc: command not found` | Run `source ~/.bashrc` or open a new terminal |
|
|
321
|
+
| `claude` fails during startup | Background update may be in progress — wait 10s and retry |
|
|
322
|
+
| GitHub push fails | Run `gh auth status` to check authentication |
|
|
323
|
+
| Plugin not loading | Check `enabledPlugins` in `config/defaults/settings.json` |
|
|
324
|
+
| Feature not installed | Check `devcontainer.json` for `"version": "none"` |
|
|
325
|
+
| Tool version/status | Run `cc-tools` to list all tools with version info |
|
|
326
|
+
| Full health check | Run `check-setup` to verify setup status |
|
|
327
|
+
|
|
281
328
|
## Further Reading
|
|
282
329
|
|
|
330
|
+
**CodeForge Documentation**:
|
|
331
|
+
- [Configuration Reference](docs/configuration-reference.md) — all env vars and config options
|
|
332
|
+
- [Plugin System](docs/plugins.md) — plugin architecture and per-plugin docs
|
|
333
|
+
- [Optional Features](docs/optional-features.md) — mcp-qdrant, mcp-reasoner, splitrail
|
|
334
|
+
- [Keybinding Customization](docs/keybindings.md) — resolving VS Code conflicts
|
|
335
|
+
- [Troubleshooting](docs/troubleshooting.md) — common issues and solutions
|
|
336
|
+
|
|
337
|
+
**External**:
|
|
283
338
|
- [Claude Code Documentation](https://docs.anthropic.com/en/docs/claude-code)
|
|
284
339
|
- [Dev Containers Specification](https://containers.dev/)
|
|
285
340
|
- [GitHub CLI Manual](https://cli.github.com/manual/)
|