- Default model changed to
claude-opus-4-5—ANTHROPIC_MODELandANTHROPIC_DEFAULT_OPUS_MODELin default settings flipped fromclaude-opus-4-7toclaude-opus-4-5. Subagents also run on 4.5 by default. - Per-alias context windows —
CLAUDE_CODE_MAX_CONTEXT_TOKENSandCLAUDE_CODE_AUTO_COMPACT_WINDOWremoved from globalsettings.json env(they pinned 250k globally, which would exceed 4.5's 200k ceiling). Context is now set inline per alias:cc/claude/ccw/cc-orc= 200k;cc7/ccw7/cc-orc7= 400k. - New 4.7 alias variants —
cc7,ccw7,cc-orc7run Claude Code onclaude-opus-4-7with a 400k context window (main / writing / orchestrator system prompts respectively). Use these for sessions that need 4.7's larger window; usecc/ccw/cc-orc(now on 4.5) for standard work. - Thinking display set to summarized —
cc,claude,ccw, andcc-orcaliases now pass--thinking-display summarized, keeping the terminal tidy while still surfacing thinking.ccrawis unaffected (stays vanilla). - View mode set to focus —
viewModechanged fromverbosetofocusin default settings for a cleaner terminal UI.
- Disallowed tools alias splitting — oh-my-claude disallowed tools are now stored as a bash array and expanded per-argument in the Claude aliases, so
--disallowedToolsand each tool name are passed as separate argv entries in both bash and zsh.
- New feature:
claude-code-router— installs claude-code-router proxy daemon for routing Claude Code API calls to alternate LLM providers (DeepSeek, Gemini, OpenRouter, Anthropic). Default-on with autostart. Supports version pinning (latest, semver, ornoneto disable). - Router configuration — user-editable
claude-code-router.jsondeploys to~/.claude-code-router/config.jsonvia file manifest. Uses$ENV_VARinterpolation for API keys. - Provider API keys —
ANTHROPIC_API_KEY,DEEPSEEK_API_KEY,GEMINI_API_KEY,OPENROUTER_API_KEYsupport in.secretsfile and Codespaces secrets. - Daemon supervision — poststart hook with restart-on-failure wrapper; health gate skips autostart if no provider keys configured.
- Quick redeploy —
ccr-applyalias redeploys config and restarts daemon in one command.
- New feature:
codex-cli— installs OpenAI Codex CLI terminal coding agent via npm. Supports version pinning (latest, semver, ornoneto disable). Enabled by default. - Codex authentication —
OPENAI_API_KEYsupport in.secretsfile and Codespaces secrets. Auto-creates~/.codex/auth.jsonon container start. Browser-based ChatGPT OAuth also supported interactively. - Codex config management — user-editable
codex-config.tomldeploys to~/.codex/config.tomlvia file manifest - Codex persistence — separate Docker named volume (
codeforge-codex-config-${devcontainerId}) for~/.codex/, surviving container rebuilds - ccusage Codex support —
ccusage-codexalias installed alongsideccusagefor Codex session token and cost tracking via@ccusage/codex - Tool enumeration —
codexandccusage-codexadded tocc-toolsandcheck-setupoutput
- Dashboard feature removed — the
codeforge-dashboarddevcontainer feature has been removed. The dashboard source was extracted to a separate CodeDirective repository. Install dashboard separately if needed.
- New rule:
auto-memory.md— reinforces auto-memory system usage with constraints: max 100 lines per memory, timestamp requirement (added: YYYY-MM-DD), stale memory cleanup, and date refresh on updates - New rule:
zero-tolerance-bugs.md— every bug found must be fixed immediately; bugs are always in scope; only the user can defer a fix - New rule:
scope-discipline.md— only the user defines scope; nothing is in/out of scope without explicit user approval - New rule:
explicit-start.md— never start work without clear user instruction; research, questions, and planning don't imply "go" - New rule:
plan-presentation.md— show compressed plan overview in chat first; only use Plan tool when user explicitly requests full plan - New rule:
surface-decisions.md— surface all assumptions, decisions, trade-offs, and uncertainties to user before acting
- Model upgrade — all 9 opus-based agents now pinned to explicit
opus-4-5model version (architect, documenter, implementer, investigator, migrator, refactorer, security-auditor, spec-writer, test-writer) - Worktree isolation removed — write-capable agents (documenter, implementer, migrator, refactorer, test-writer) now run in the main worktree instead of isolated git worktrees
- Model tier upgrade — investigator and security-auditor upgraded from sonnet to opus for improved analysis quality
- Effort levels configured — all 19 agents and 23 skills now have
effort:frontmatter for Opus 4.7 adaptive thinking
- Default model updated —
ANTHROPIC_MODELchanged fromclaude-opus-4-6[1m]toclaude-opus-4-7 - Thinking tokens reduced —
MAX_THINKING_TOKENSreduced from 63999 to 31999; adaptive thinking disabled (CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING: 1) - Effort level increased —
CLAUDE_CODE_EFFORT_LEVELchanged frommediumtomax - Compaction tuned — threshold lowered from 90% to 80%; window reduced from 500K to 250K tokens
- Agent teams disabled —
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMSset to0(was1) - New settings —
CLAUDE_AUTO_BACKGROUND_TASKS: 1,CLAUDE_CODE_NO_FLICKER: 1,CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION: false
- Hook gate path changed — all plugin hooks now check
~/.claude/disabled-hooks.jsoninstead of.codeforge/config/disabled-hooks.json. Existing disabled-hooks.json files in project directories will no longer be read.
- Config directory removed — deprecated
container/.codeforge/directory removed from npm package. All configuration now lives incontainer/.devcontainer/defaults/codeforge/and deploys via file manifest. - CLAUDE.md refactored — devcontainer guide moved to
AGENTS.md;CLAUDE.mdnow uses@AGENTS.mdinclude directive for cleaner organization
- Complete docs restructure — reorganized documentation site for clearer navigation:
getting-started/→start-here/(installation, first session, migration)features/+customization/→use/+customize/(daily usage vs. configuration)plugins/→extend/plugins/(extension points under a dedicated section)- New
reference/section consolidates agents, skills, CLI tools, environment variables, and architecture
- Added new reference pages:
agents.md,skills.md,cli-tools.md,environment-variables.md,whats-included.md - Dashboard documentation page removed (feature no longer included)
- Fix wrapper source discovery — search both
/workspaces/cliand/workspaces/projects/CodeForge/cliso the CLI works in nested workspace layouts
- Fix wrapper to add dev-mode source discovery — dashboard now finds and runs from monorepo source when available, matching CLI behavior
- Fix wrapper to exec the bash entrypoint directly instead of through bun (which tried to parse it as JavaScript)
- Improve bun detection in CLI and dashboard install scripts — add explicit
/root/.bun/bin/bunand/home/vscode/.bun/bin/buncandidate paths, detailed error output, andPATHexport for downstream commands
codeforge-devhas been renamed to@coredirective/cf-containeron npm- Install via:
npx @coredirective/cf-container - The old
codeforge-devpackage name is deprecated
- CLI feature now installs from NPM —
codeforge-clifeature installs@coredirective/cf-cliviabun install -ginstead of running from workspace source. Auto-falls back to source when developing CodeForge itself. codeforge proxy— launch Claude Code through mitmproxy for full API traffic inspection. Starts mitmweb in the background, proxies all Claude API requests through it, and opens a browser UI athttp://localhost:8081for real-time request/response inspection. Auto-installs mitmproxy via pipx on first use, handles CA certificate generation and system trust store installation. Supports--no-webfor headless mitmdump output,--setupfor install-only, and-- <claude-args>passthrough. Useful for monitoring token usage, cache behavior, and rate limit utilization — theanthropic-ratelimit-unified-*response headers on/v1/messagesrequests show 5-hour and 7-day quota utilization even with long-lived auth tokens.- Version lock — set
CLAUDE_VERSION_LOCK=<semver>in.envto pin Claude Code to a specific version. The update script installs the exact version instead of updating to latest. Background auto-updater disabled viaDISABLE_AUTOUPDATER.
- First-party dashboard — replaced third-party
claude-session-dashboardnpm package with@coredirective/cf-dash(built from monorepodashboard/package) - Dashboard feature now installs from NPM registry via
bun install -g @coredirective/cf-dash - Auto-launch on container start via poststart hook (controllable with
autostartoption) - Command renamed:
claude-dashboard→codeforge-dashboard - Removed persistence symlink hook (dashboard DB now lives on bind mount at
~/.codeforge/data/)
- Per-hook disable mechanism — add script names to
.codeforge/config/disabled-hooks.jsonto disable individual hooks without disabling the entire plugin. Takes effect immediately, no restart needed. - Disabled by default:
git-state-injector,ticket-linker,spec-reminder,commit-reminder
- Fix
/dev/nullfalse positive — redirects to system paths (/dev/,/proc/,/sys/, etc.) are now allowed regardless of the primary command, not just for system commands likegitorpip - Fix CWD drift — scope root is now persisted on first invocation per session, preventing
cdcommands in Bash from silently changing the enforced scope boundary - CWD context injector now uses the same persisted scope root, keeping advisory context aligned with enforcement
- Fix false positives blocking writes to system paths (
/dev/null,/usr/,/etc/,$HOME/) — scope guard now only enforces isolation between workspace projects - Remove complex system-command exemption logic (no longer needed)
- Remove system directory write redirect blocks (
> /usr/,> /etc/,> /bin/,> /sbin/) — caused false positives on text content in command arguments (e.g. PR body text containing paths); write location enforcement is the scope guard's responsibility
- Added
agent-browserskill to skill-engine plugin — guides headless browser automation with CLI reference, workflow patterns, and authentication
- Add
autoMemoryDirectorysetting — auto-memory now stored in project-local.claude/memory/instead of deep inside~/.claude/projects/, making it visible and version-controllable - Enhanced system prompts with auto-memory system, hooks awareness, safety rules, and anti-over-engineering guidance
- Replace
ccburn-compactstatusline widget with nativesession-usageandweekly-usageccstatusline widgets — eliminates external command dependency and 8s timeout - Comment out
ccburndevcontainer feature (disabled by default) — functionality replaced by native widgets
- Fix
claude-code-nativeinstall failure on Windows/macOS Docker Desktop — installer now falls back toHOMEoverride whensuis unavailable - Remove
preflight.shruntime check — redundant with Docker's own error reporting and caused failures on Windows
- Add codeforge-cli devcontainer feature — installs the CodeForge CLI (
codeforgecommand) globally via npm - Remove dead
codeforgealias from setup-aliases.sh (was pointing to obsoletesetup.js)
- Plugin test suite — 241 pytest tests covering 6 critical plugin scripts that previously had zero tests:
block-dangerous.py(46 tests) — all 22 dangerous command patterns with positive/negative/edge casesguard-workspace-scope.py(40 tests) — blacklist, scope, allowlist, bash enforcement layers, primary command extractionguard-protected.py(55 tests) — all protected file patterns (secrets, locks, keys, credentials, auth dirs)guard-protected-bash.py(24 tests) — write target extraction and protected path integrationguard-readonly-bash.py(63 tests) — general-readonly and git-readonly modes, bypass preventionredirect-builtin-agents.py(13 tests) — redirect mapping, passthrough, output structure
- Added
test:pluginsandtest:allnpm scripts for running plugin tests
- DevContainer CLI guide — dedicated Getting Started page for terminal-only workflows without VS Code
- v2 Migration Guide — path changes, automatic migration, manual steps, breaking changes, and troubleshooting
- Documented 4 previously undocumented agents in agents.md: implementer, investigator, tester, documenter
- Added missing git-workflow and prompt-snippets to configuration.md enabledPlugins example
- Added CONFIG_SOURCE_DIR deprecation note in environment variables reference
- Added cc-orc orchestrator command to first-session launch commands table
- Tabbed client-specific instructions on the installation page
- Dedicated port forwarding reference page covering VS Code auto-detect, devcontainer-bridge, and SSH tunneling
- Document
${CLAUDE_PLUGIN_DATA}variable in CLAUDE.md for future plugin persistent storage
- Breaking: Replaced all 8 spec commands with 3:
/spec(create & refine),/build(implement & close),/specs(dashboard) - Specs are now directory-based "spec packages" with separated human and AI content:
index.md— human-facing entry point (~50-80 lines): intent, decisions, AC summary, scopecontext.md— AI-facing shared context: invariants, anti-patterns, schema intent, constraintsgroups/*.md— AC groups with YAML frontmatter for parallel agent decomposition
- Added Constitution support (
.specs/CONSTITUTION.md) for project-level cross-cutting decisions - Simplified approval model: spec-level
draft/approvedreplaces per-requirement[assumed]/[user-approved]tagging - AI makes obvious decisions autonomously, presents only genuine trade-offs to the human
[ai-decided]workflow: AI records autonomous decisions during build for post-completion review- Group frontmatter (
depends_on,files_owned) drives automatic task decomposition for team builds - Dropped MILESTONES.md and ROADMAP.md — replaced with simple BACKLOG.md idea parking lot
- Updated all 8 agent skill lists, system prompts, orchestrator prompt, skill-suggester, and 8 docs pages
- Ships with a complete example spec package (webhook delivery system) as reference
- Initial release of the
codeforgeCLI — session search, plugin management, config deployment, codebase indexing, and devcontainer management - New
codeforge indexcommand group — build and search a codebase symbol index (build, search, show, stats, tree, clean) - New
codeforge containercommand group — manage devcontainers from the host (up, down, rebuild, exec, ls, shell) - Container proxy — CLI commands auto-proxy into the running devcontainer when run from the host
- Rewrote
codeforge-clidevcontainer feature to use a self-bootstrapping wrapper instead ofnpm install -g— the CLI now runs directly from workspace source viabun, auto-installing dependencies on first use - Removed
ccmsfromcc-toolstool listing (replaced bycodeforge session search)
- Fix scope guard blocking project root access from subdirectory CWDs — now detects git repository root and uses it as scope boundary
- Workspace scope guard now resolves CWD with
os.path.realpath()for consistent comparison with target paths, preventing false positives from symlinks and bind mounts - Scope guard detects
.claude/worktrees/in CWD and expands scope to project root, allowing sibling worktrees and the main project directory to remain in-scope - Improved scope guard error messages to include resolved paths and scope root for easier debugging of false positives
- CWD context injector now references the project root when running inside a worktree
- Commit reminder and spec reminder now have a 5-minute per-session cooldown, preventing repeated firing in team/agent scenarios where Stop events are frequent
- New
.codeforge/directory centralizes all user-customizable configuration files - Checksum-based modification detection preserves user changes during updates
codeforge config applyCLI command deploys config files to~/.claude/(same as container start)- Auto-migration from
.devcontainer/config/defaults/to.codeforge/config/for existing users .codeforge/.codeforge-preservefor listing additional files to preserve during updates- Config files moved from
.devcontainer/config/defaults/to.codeforge/config/ - File manifest moved from
.devcontainer/config/file-manifest.jsonto.codeforge/file-manifest.json - Terminal connection scripts moved from
.devcontainer/to.codeforge/scripts/ CONFIG_SOURCE_DIRenv var deprecated in favor ofCODEFORGE_DIR--forceupdates now use checksum comparison for.codeforge/files (writes.defaultinstead of.codeforge-new)--resetpreserves.codeforge/user modifications (only.devcontainer/is wiped)- v2 migration marker moved to
.codeforge/.markers/v2-migrated - Container start auto-migrates
.devcontainer/config/defaults/to.codeforge/config/if needed - Moved
.claudedirectory from/workspaces/.claudeto~/.claude(home directory) - Added Docker named volume for persistence across rebuilds (per-instance isolation via
${devcontainerId}) CLAUDE_CONFIG_DIRnow defaults to~/.claude
- Main system prompt redesigned — reorganized from 672 to 462 lines; personality, core directives, and response guidelines at the top
- Personality section — communication style (casual-professional, direct, terse), humor rules, honesty approach, AuDHD-aware patterns, good/bad response examples; replaces the empty
<identity>tag - Compressed specification management — 98 to 28 lines; full template and enforcement workflow moved to loadable skills
- Compressed code standards — removed textbook principle recitations (SOLID, DRY/KISS/YAGNI by name); kept only concrete actionable rules
- Browser automation and git worktrees sections moved to loadable skills
- Context-passing protocol in orchestration — mandatory instructions for including gathered context, file paths, and constraints when spawning subagents
- Absorbed
<assumption_surfacing>into<core_directives>,<professional_objectivity>into<personality> - Deduplicated team composition examples; consolidated "no filler" instructions
<git_worktrees>section — updated for Claude Code native worktree convention (<repo>/.claude/worktrees/),EnterWorktreetool guidance,.worktreeincludedocumentation
cc-orcalias — new Claude Code entry point usingorchestrator-system-prompt.mdfor delegation-first operationorchestrator-system-prompt.md— slim prompt (~250 lines) with delegation model, agent catalog, question surfacing protocol, planning gates, spec enforcement, and action safety
- 4 workhorse agents —
investigator(consolidated read-only research, sonnet),implementer(consolidated read-write implementation, opus/worktree),tester(enhanced test agent, opus/worktree),documenter(consolidated docs + specs, opus) - Question Surfacing Protocol — all 4 workhorse agents STOP and return
## BLOCKED: Questionson ambiguities - All 21 agents now have communication protocols — read-only: "Handling Uncertainty"; write-capable: "Question Surfacing Protocol"
- Architect agent overhaul — anti-fluff enforcement (20+ banned patterns), team orchestration planning, complexity scaling (simple/moderate/complex), concrete edit ordering (Models→Services→Routes→Tests→Config), rollback strategy for schema/API changes, 3 new examples
- Generalist rewritten as last-resort — description explicitly warns when a specialist might be better
- Investigator narrowed — repositioned from catch-all to "cross-domain investigations spanning 2+ specialist areas"
- Agent merges — tester→test-writer (single test agent), doc-writer→documenter (single docs agent)
- Bash guard hooks added to researcher, debug-logs, perf-profiler (prevents state-changing commands in read-only agents)
- Improved agent descriptions for routing accuracy — trigger phrases, overlap boundaries between security-auditor/dependency-analyst, explorer/researcher
- Resolved communication protocol contradictions across all agent behavioral rules
- Agent count increased from 17 to 21 (4 workhorse + 17 specialist)
- Agent-system README updated with workhorse agent table, per-agent hooks, plugin structure
- Weighted scoring — suggestion phrases carry confidence weights (0.0–1.0) instead of binary match
- Negative patterns — substrings that instantly disqualify skills (prevents fastapi triggering for pydantic-ai)
- Context guards — low-confidence matches (< 0.6) require confirming context word
- Ranked results capped at 3 — sorted by score then priority tier; eliminates suggestion floods
- Priority tiers — explicit commands (10) > technology skills (7) > patterns (5) > generic (3)
- worktree skill — git worktree creation, management, cleanup,
EnterWorktreetool,.worktreeincludesetup
- Expanded Anthropic official plugins — added
code-review,feature-dev, andpr-review-toolkitfromanthropics/claude-code - Migrated plugin identifiers — switched from
@claude-plugins-officialto@anthropics/claude-codeformat - Git workflow —
/ship(commit/push/PR with code review and approval) and/pr:review(PR review by number/URL, posts findings as comment) - Prompt snippets —
/pscommand for quick behavioral mode switches (noaction, brief, plan, go, review, ship, deep, hold, recall, wait); composable (/ps noaction brief)
- Native binary via Anthropic's official installer (
https://claude.ai/install.sh) replacing npm-based feature - Auto-updater works without root — native binary at
~/.local/bin/claudeowned by container user - Post-start onboarding hook (
99-claude-onboarding.sh) — ensureshasCompletedOnboarding: truewhen token auth configured - Update script captures errors to log (was discarding via
&>/dev/null) - Simplified to native-binary-only (removed npm fallback,
claude installbootstrap) - Alias resolution simplified —
_CLAUDE_BINresolves directly to native binary - POSIX redirect, bash-required installer shell, quoted
${TARGET}, directory pre-creation
- 289 pytest tests covering 6 critical plugin scripts (previously zero tests):
block-dangerous.py(62),guard-workspace-scope.py(40),guard-protected.py(56),guard-protected-bash.py(49),guard-readonly-bash.py(69),redirect-builtin-agents.py(13)
test:pluginsandtest:allnpm scripts- Python plugin tests (
pytest) added to CI pipeline (Q3-08)
CLAUDE_AUTH_TOKENsupport in.secretsfor long-lived tokens fromclaude setup-token- Auto-creates
.credentials.jsonfrom token on container start (idempotent) CLAUDE_AUTH_TOKENin devcontainer.json secrets declaration
- Removed environment variable injection vector in agent redirect log path (S2-01)
- Narrowed config deployment allowed destinations from
/usr/localto/usr/local/share(S2-09) - Protected files guard now fails closed on unexpected errors instead of failing open (S2-04)
- Protected-files-guard blocks
.credentials.jsonmodifications - Replaced
evaltilde expansion withgetent passwdlookup (prevents shell injection) - Auth token JSON-escaped before writing; credential directory with restrictive umask (700)
setup.jspath traversal prevention —configApply()validates source/destination paths
- Commented out Rust toolchain feature — saves ~1.23 GB image size
- Commented out ccms feature (requires Rust)
- Updated Bun to latest (was pinned to 1.3.9)
- npm cache cleanup across 6 features: agent-browser, ast-grep, biome, claude-session-dashboard, lsp-servers, tree-sitter (saves ~96 MB)
- Dynamic forwarding for all ports in VS Code (was only port 7847)
- devcontainer-bridge (dbr) — automatic port discovery and forwarding outside VS Code via devcontainer-bridge
TERMandCOLORTERM=truecolorinremoteEnv(Docker defaults to 8-colorxterm)TERMforwards host terminal type via${localEnv:TERM:xterm-256color}(e.g.,xterm-kitty)- Terminal color defaults in managed shell block for tmux panes,
docker exec, SSH sessions - kitty-terminfo docs updated for
localEnvforwarding
- Distinct background colors per token widget (blue=input, magenta=output, yellow=cached, green=total)
- Bold 2-char labels (In, Ou, Ca, Tt) fused to data widgets,
rawValue: trueon model widget - CLAUDE.md "Status Bar Widgets" section with widget properties and conventions
- Force push block now suggests
git mergeas workaround - Block
--force-with-lease— all force push variants now blocked uniformly - Block remote branch deletion (
git push origin --delete, colon-refspecgit push origin :branch) - Handles prefix bypasses (
\rm,command rm,env rm) and symbolic chmod (S2-03) - Fixed README — error handling documented as "fails open" but code actually fails closed
- Allowed
.env.exampleedits —.env.exampleis no longer blocked by the.env.*pattern; actual secret files (.env.local,.env.production, etc.) remain protected - Fixed greedy alternation in write-target regex —
>>now matched before>(Q3-01) - Unified write-target extraction patterns across guards — protected-files bash guard expanded from 5 to 20 patterns (C1-02)
- Multi-target command support —
rm,touch,mkdir,chmod,chownwith multiple file operands now check all targets - Bare
git stash(equivalent to push) now blocked in read-only mode (Q3-04) - Fixed git global flag handling —
git -C /path stash listno longer misidentifies the stash subcommand
- Commit reminder — switched to advisory (was blocking); tiered logic for meaningful changes; only fires when session modified files
- Advisory test runner — reads from correct tmp file prefix (
claude-cq-editedinstead ofclaude-edited-files)
- Replaced
setup-symlink-claude.shwithsetup-migrate-claude.sh(one-time migration) - Migration script hardened —
cp -aarchive mode, marker-based idempotency, critical file verification, ownership fixup .envdeprecation guard —setup.shdetects staleCLAUDE_CONFIG_DIR=/workspaces/.claude, overrides and auto-commentssetup.shCODEFORGE_DIRuses default-assignment (:=) to preserve user-defined values- Container runtime pre-flight check — validates Docker/Podman before build, OS-specific remediation
- Tag-triggered release workflow (
v*tags only) — prevents accidental releases from version bumps in PRs - CI workflow (Node 18,
npm test+ Biome check), CodeQL security analysis, Dependabot (weekly npm + GitHub Actions) - Bug report + feature request templates, PR template, issue template config
- CONTRIBUTING.md, CLA.md, dual licensing notice, CI badge, SPDX headers on all 36 source files
- Bun PATH in non-interactive shells
- ChromaTerm regex lookbehinds — PCRE2 compatibility
- CCStatusLine
CONFIG_SOURCE_DIRdeprecation guard, template directory permissions, silent copy failure reporting marketplace.jsonschema — pluginsourcefields changed from bare names to relative paths- skill-engine worktree skill weighted tuples (was plain strings, caused crash)
- dangerous-command-blocker fail closed on exceptions (was fail-open)
- ticket-workflow redundant
ValueErrorremoved - workspace-scope-guard maxsplit in variable assignment detection
- Shell scripts — executable bit on
check-setup.sh, quotedPLUGIN_BLACKLIST,set -uo pipefailin tmux installer,command -vreplacing deprecatedwhich, normalized&>redirects implementer.md— PostToolUse hook changed to Stop hook with 120s timeouttester.md— Stop hook timeout 30s→120s- Stale merge conflict marker in first-session docs
- DevContainer CLI guide — dedicated Getting Started page for terminal-only workflows
- v2 Migration Guide — path changes, automatic migration, manual steps, breaking changes, troubleshooting
- Ported
.devcontainer/docs/to docs site — Keybindings page, Troubleshooting page (12+ entries), Optional Features page, merged env vars and .secrets docs - Versioned docs infrastructure (starlight-versions plugin)
- Fixed docs site URL to
https://codeforge.core-directive.com(custom domain, no base path) - Replaced
anexileddev.github.io/CodeForge/URLs with custom domain across all files - README: "Why CodeForge?" section, architecture overview, configuration summary
- Agent/skill/plugin count updates (21 agents, 38 skills, 14 plugins) across all docs pages
- Missing plugin pages for git-workflow and prompt-snippets
- Port Forwarding reference, CLI guide cross-link, slimmed Installation page
- Documented 4 workhorse agents, cc-orc command, CONFIG_SOURCE_DIR deprecation, CLAUDE_AUTH_TOKEN setup
- Added missing git-workflow and prompt-snippets to configuration.md enabledPlugins example
- Tabbed client-specific instructions on the installation page
- MD040 compliance (language specifiers on fenced code blocks)
- Architecture docs —
.checksums/and.markers/in.codeforge/tree - Troubleshooting — "Reset to Defaults" renamed to "How to Reset", clarified
--resetbehavior - Removed
.devcontainer/docs/directory (all content migrated to docs site) - All docs reference
~/.claudeas default config path
setup-symlink-claude.sh— replaced bysetup-migrate-claude.sh- Todo+ VS Code extension (
fabiospampinato.vscode-todo-plus)
- New plugin:
prompt-snippets— single/psslash command for quick behavioral mode switches (noaction, brief, plan, go, review, ship, deep, hold, recall, wait) - Snippets inject short directives that persist for the conversation (e.g.,
/ps noaction→ "Investigate and report only. Take no action.") - Composable:
/ps noaction briefapplies multiple snippets at once - Isolated from skill-engine auto-suggestion (
disable-model-invocation: true) and independently toggleable viaenabledPlugins
- First Session page — trimmed from 198 to 128 lines by consolidating "What Happens Automatically" into a concise summary, replacing full agent/skill tables with brief teasers linking to their dedicated pages
- Installation Troubleshooting — expanded from 4 to 10 FAQ entries covering
npxfailures, VS Code extension issues, Docker permissions on Linux, WSL 2 integration, port conflicts, and slow rebuilds
- test.js — settings.json path updated from
config/settings.jsontoconfig/defaults/settings.jsonto match config externalization refactor - test.js — Test 5 (executable check) result now included in exit condition; previously a failure was logged but did not affect the exit code
- setup.js — file permissions changed from 644 to 755 (executable) to match shebang and
bindeclaration in package.json
- features/README.md — removed from features directory;
devcontainers/action@v1treated it as a feature subdirectory and failed looking forREADME.md/devcontainer-feature.json - 11 devcontainer-feature.json files — removed
"maintainer"field (not in the DevContainer Feature spec schema, causing strict validation failure): ast-grep, ccburn, ccms, ccstatusline, ccusage, chromaterm, claude-monitor, claude-session-dashboard, lsp-servers, mcp-qdrant, tree-sitter
- 6 devcontainer-feature.json files — removed
"proposals"field that coexisted with"enum"on the same option (spec schema treats them as mutually exclusive viaanyOf): ccburn, ccusage, claude-monitor, claude-session-dashboard, mcp-qdrant, tree-sitter
- Active sidebar item — increased background opacity from 0.08 to 0.14, added
font-weight: 600andcolor: var(--sl-color-accent-high)for readable contrast against inactive items - Stale skill counts — 5 pages (First Session, Getting Started index, Features index) referenced "21 skills" instead of the correct total of 34 across all plugins (skill-engine: 21, spec-workflow: 8, ticket-workflow: 4, agent-system: 1)
- chromaterm/install.sh — username auto-detection now resets to empty before candidate loop, so
${USERNAME:-root}fallback works correctly - biome/install.sh — nvm.sh sourcing wrapped in
set +u/set -uto prevent unbound variable abort underset -euo pipefail - setup.js —
ccstatusline-settings.jsonadded to DEFAULT_PRESERVE so user customizations survive--forcepackage updates - docs agent-system.md — spec-writer moved from Full-Access to Read-Only agents table (matches its
permissionMode: plandefinition) - guard-readonly-bash.py — docstring corrected from "Returns JSON on stdout" to "Outputs block reason to stderr"
- git-forensics/SKILL.md — misleading "Blame through renames" comment fixed to "Show patch history through renames"
- Blacklist system —
/workspaces/.devcontainer/permanently blocked for ALL operations (read, write, bash). Checked before allowlist, scope check, and cwd bypass. Cannot be overridden, even from workspace root - Bash enforcement — two-layer detection in
guard-workspace-scope.py:- Layer 1: 20+ regex patterns extract write targets (
>,tee,cp,mv,touch,mkdir,rm,ln,rsync,chmod,chown,dd,wget -O,curl -o,tar -C,unzip -d,gcc -o,sqlite3). System command exemption only when ALL targets resolve to system paths - Layer 2: regex scans entire command for any
/workspaces/path string — catches inline scripts, variable assignments, quoted paths. No exemptions, always runs
- Layer 1: 20+ regex patterns extract write targets (
- CWD context injector (
inject-workspace-cwd.py) — fires on SessionStart, UserPromptSubmit, PreToolUse, SubagentStart to reinforce working directory scope - Fail-closed error handling — JSON parse errors, exceptions, and unknown tools now exit 2 (block) instead of exit 0 (allow)
task-completed-check.py— quality gate hook (TaskCompleted) runs test suite before allowing task completionteammate-idle-check.py— quality gate hook (TeammateIdle) prevents teammates from going idle with incomplete tasksskills/debug/SKILL.md— structured log investigation skill replacing the old/debugslash commandpermissionModedeclared on all 17 agent definitions (plan for read-only, default for write-capable)- Agent-system README — full plugin documentation with hook lifecycle, agent table, quality gates
- 6 new skill matchers in
skill-suggester.py:spec-check,spec-init,spec-new,spec-refine,spec-update,team - Team skill expanded (v0.2.0) — quality gate hooks, plan approval workflow, keyboard shortcuts, use case examples, best practices, limitations
- Skill-engine README — full plugin documentation
- chromaterm — terminal output colorizer via ChromaTerm2 YAML rules
- kitty-terminfo — xterm-kitty terminfo for Kitty terminal compatibility
- Astro/Starlight docs (
docs/) — full documentation portal with getting-started guides, plugin reference (12 pages), feature docs, customization, and API reference - GitHub Actions —
deploy-docs.yml(docs deployment),publish-features.yml(GHCR feature publishing),release.yml(release workflow) - Logos — CodeForgeLogo.png, CodeForgeLogoTr.png, github-avatar.png
- Remote install instructions added to all 11 plugin READMEs — "From GitHub" section with clone + enabledPlugins setup from
https://github.com/AnExiledDev/CodeForge - GHCR feature paths — features README updated with
ghcr.io/anexileddev/codeforge/<feature-name>:<version>and devcontainer.json usage examples - READMEs added to session-context, skill-engine, spec-workflow plugins
- Install sections added to workspace-scope-guard, codeforge-lsp, dangerous-command-blocker, protected-files-guard, notify-hook, ticket-workflow
- Marketplace metadata —
marketplace.jsonrestructured withmetadataobject,pluginRoot, andkeywordsarrays for all plugins - Port forwarding for Claude Dashboard (port 7847) in devcontainer.json
- ChromaTerm wrapper in setup-aliases.sh —
cc/claude/ccwaliases pipe throughctwhen available package.jsonscripts — addedprepublishOnly,docs:dev,docs:build,docs:preview
- Widget config extracted from inline
jq -ngeneration ininstall.shintoconfig/defaults/ccstatusline-settings.json— editable JSON file, single source of truth - File-manifest deployment — two new entries deploy the config to
~/.config/ccstatusline/settings.json(if-changed) and/usr/local/share/ccstatusline/settings.template.json(always) ${HOME}variable expansion added tosetup-config.sh— enables manifest entries targeting user home directory paths
- CLAUDE.md (project root) — added changelog and documentation update rules: all changes must have a changelog entry and update relevant docs
install.shsimplified — removed ~90 lines of inline JSON config generation, validation, and template creation. Config deployment now handled by file-manifest system
- Reads (Read, Glob, Grep) now hard-blocked outside scope — upgraded from warning (exit 0) to block (exit 2)
- Allowlist trimmed to
/workspaces/.claude/and/tmp/only — removed/workspaces/.devcontainer/,/workspaces/.tmp/,/home/vscode/ - Hook timeout increased from 5s to 10s
- Matcher expanded to include Bash tool
- All hooks migrated to
hookSpecificOutputwrapper with explicithookEventName commit-reminder.py— upgraded from advisory to blocking (decision: block)spec-reminder.py— upgraded from advisory to blocking (decision: block)advisory-test-runner.py— test failures now block withdecision: block; passes/timeouts usesystemMessageticket-linker.py— output wrapped inhookSpecificOutputgit-state-injector.py,todo-harvester.py— output wrapped inhookSpecificOutput
- Migrated from slash commands to skill-based approach — 4 slash commands and system-prompt.md replaced by skills directory
- All 21+ SKILL.md files rewritten with USE WHEN / DO NOT USE guidance, action-oriented descriptions, bumped to v0.2.0
skill-suggester.pykeyword maps overhauled with natural phrases and concrete identifiers- Skill suggestion output changed to mandatory directive format
- SubagentStart hook removed — suggestions now fire on UserPromptSubmit only
block-dangerous.py— errors now written to stderr (was JSON on stdout)guard-protected.py,guard-protected-bash.py— errors now written to stderr
ccstatusline— compact 3-line layout (was 8-line),rawValue: trueon token widgetsclaude-session-dashboard— default port 3000 → 7847,--host 0.0.0.0for external accessccms— build cache moved from.devcontainer/.build-cache/to${TMPDIR:-/tmp}/ccms-build-cache
CLAUDE.md(devcontainer) — condensed from ~308 to ~90 lines, removed redundant sectionsspec-workflow.mdrule — condensed, defers to system prompt<specification_management>sectionmain-system-prompt.md— expanded Agent Teams guidance: file ownership, task sizing, quality gate hooks, plan approval- Plugin
plugin.jsonfiles —versionfield removed across all plugins
- Stale references to deleted features (mcp-reasoner, splitrail, claude-code) removed from docs
- Documentation counts updated (features: 21, agents: 17, skills: 34)
- Version mismatch in README.md corrected
- Auto-formatter/auto-linter references consolidated to auto-code-quality throughout
- Code-directive plugin references updated to agent-system, skill-engine, spec-workflow
- Personal project paths removed from .gitignore and .npmignore
- setup.js stale feature references fixed (Reasoner MCP, Go → Rust)
.secretsadded to .npmignore for npm publish safety- Duplicate "### Fixed" header in v1.5.3 changelog entry
- NVM sourcing added to biome install script
- Cleanup trap added to shellcheck install script
auto-formatterplugin — deleted entirely (consolidated into auto-code-quality)auto-linterplugin — deleted entirely (consolidated into auto-code-quality)/debugslash command from agent-system (replaced by debug skill)- 4 ticket-workflow slash commands (
ticket:new,ticket:work,ticket:review-commit,ticket:create-pr) andsystem-prompt.md(replaced by skills) - Optional features docs for mcp-reasoner and splitrail (features no longer exist)
- SubagentStart hook from skill-engine (suggestion now UserPromptSubmit only)
- Feature version pins: node
1.6→1.7.1, github-cli1.0→1.1.0, docker-outside-of-docker1.7→1.6, rust1.4→1.5.0, claude-code1.1→1.0.5 - setup-projects.sh: suppress background inotifywait output
- agent-system: add missing
verify-tests-pass.pyandverify-no-regression.py(referenced by agent defs)
agent-systemplugin — 17 custom agents with built-in agent redirection, CWD injection, and read-only bash enforcementskill-engineplugin — 21 coding skills with auto-suggestion hookspec-workflowplugin — 8 spec lifecycle skills with spec-reminder hooksession-contextplugin — session boundary hooks (git state injection, TODO harvesting, commit reminders)
ticket-workflowhooks — auto-links GitHub issue/PR references in user prompts viaticket-linker.pyauto-code-qualityadvisory test runner — runs affected tests at Stop viaadvisory-test-runner.py/teamskill — agent team creation and management with specialist catalog (inskill-engine)claude-session-dashboardfeature — local analytics dashboard for Claude Code sessions (token usage, tool calls, cost estimates, activity heatmaps). Installed globally via npm withclaude-dashboardcommand. Settings persist across rebuilds via symlink to/workspaces/.claude-dashboard/
- Plugin architecture:
code-directivemonolith replaced by focused plugins (agent-system,skill-engine,spec-workflow,session-context) auto-code-qualitynow consolidatesauto-formatter+auto-linter(disabled separately,auto-code-qualityis the superset)workspace-scope.mdrule hardened — strict enforcement with no exceptions; all file operations must target paths within the current project directory
code-directiveplugin (replaced byagent-system,skill-engine,spec-workflow,session-context)auto-formatterandauto-linterdisabled in settings (consolidated intoauto-code-quality)
- 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
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 -itargeting.env, lock files,.git, certificates, and credentials
secretsblock in devcontainer.json declaringGH_TOKEN,NPM_TOKEN,GH_USERNAME,GH_EMAILwith documentation URLs for VS Code Codespaces/devcontainer secret management
run_poststart_hooks()in setup.sh — runs executable.shscripts from/usr/local/devcontainer-poststart.d/; controlled bySETUP_POSTSTARTenv flag (default: true)
- System prompt
<git_worktrees>section — layout convention, creation commands, project detection, and safety rules - CLAUDE.md documentation — full worktree section with layout, creation, detection, and compatibility details
- setup-projects.sh —
.worktrees/explicit scanning at depth 3,.gitfile detection viagitdir:check,"worktree"tag in Project Manager - protected-files-guard —
.gitregex updated from\.git/to\.git(/|$)to cover worktree.gitpointer files
CLAUDECODE=nullenv var — unsets the detection flag inremoteEnvto allow nested Claude Code sessions (claude-in-claude)- Go runtime option — commented-out
ghcr.io/devcontainers/features/go:1entry in devcontainer.json for easy opt-in
- All local features pinned from
"latest"to explicit versions: agent-browser0.11.1, ast-grep0.40.5, biome2.4.2, ruff0.15.1, pyright1.1.408, typescript-language-server5.1.3, TypeScript5.9.3 - External features pinned to minor versions: node
1.6, github-cli1.0, docker-outside-of-docker1.7, uv1.0, rust1.4, claude-code1.1
- VS Code terminal default profile changed from bash to zsh
- Explicit
zshprofile added to terminal profile list - Claude Teams tmux profile shell changed from bash to zsh
- 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) - protected-files-guard — JSON parse failures fail closed (exit 2 instead of 0)
- ccms build cache — install.sh checks
.build-cache/bin/ccmsbefore cargo building; caches binary after first build for faster rebuilds; pinned to commitf90d259a4476 - setup.sh —
setup-update-claude.shnow runs in background (non-blocking container start); script failure output displayed for diagnostics; newbackgroundstatus indicator in summary - 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
- Container memory — recommended from 4GB/8GB to 6GB/12GB in troubleshooting docs
- New Emotional Architecture section — cognitive-emotional loop, controlled emotion principle, autism framing for POV characters
- Expanded metaphor guidance — secondary sources beyond primary domain, "would he think this?" test
- Refined show-don't-tell rules — naming emotion permitted when it adds weight, brief internal processing after major events required
- Character profile additions — emotional architecture and trigger fields
- connect-external-terminal.ps1 — tmux session directory respects
WORKSPACE_ROOTenv var with fallback - setup-projects.sh — inotifywait exclude pattern narrowed from
\.git/to\.gitfor worktree compatibility - README.md — 5 new badges (changelog, last commit, npm downloads, Node.js, issues), updated tool/feature/skill counts, added Rust/Bun/ccw, changelog section
- 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
- Documentation —
SETUP_TERMINAL/SETUP_POSTSTARTin configuration reference,CLAUDECODE=nullenv var, workspace-scope-guard in plugins.md - Agent definitions — minor path/prompt fixes across 8 agents (claude-guide, debug-logs, dependency-analyst, explorer, generalist, git-archaeologist, researcher, security-auditor)
- .gitignore — added
.build-cache/exclusion
- mcp-reasoner feature — entire feature directory deleted (README, devcontainer-feature.json, install.sh, poststart-hook.sh)
- splitrail feature — entire feature directory deleted (README, devcontainer-feature.json, install.sh)
ccmsdevcontainer feature — Rust-based CLI for searching Claude Code session JSONL files. Installed viacargo install. Supports boolean queries, role filtering, time scoping, project isolation, and JSON outputsession-search.mdrule — global rule requiring project-scopedccmsusage and documenting CLI flags/query syntax- Rust runtime — added
ghcr.io/devcontainers/features/rust:1as a devcontainer feature (required by ccms) - System prompt
<session_search>section — inline reference for ccms usage with key flags and examples - Context management updated —
<context_management>now references ccms as the primary recovery tool for compacted sessions (three-source recovery: session history → source files → plan/requirement files)
ccwalias — launches Claude withwriting-system-prompt.mdfor creative-writing taskswriting-system-prompt.md— dedicated system prompt for writing mode, distributed via file-manifest
workspace-scope-guard— safety plugin that blocks writes and warns on reads outside the working directory. Registered in marketplace.json and enabled by default in settings.json
/spec-build— orchestrates the full implementation lifecycle from an approved spec: plan, build, review, and close in one pass. 5-phase workflow with acceptance criteria markers ([ ]→[~]→[x])/spec-review— standalone deep implementation review against a spec. Reads code, verifies requirements and acceptance criteria, recommends/spec-updatewhen done
inject-cwd.py(PostToolUse, all tools) — injects current working directory into every tool response viaadditionalContext
ccstatusline-cwd— new custom-command widget showing the basename of Claude Code's working directory. Layout expanded from 7 to 8 lines (16 → 17 widgets)
- Block-marker strategy — replaced cleanup+guard approach (which left aliases missing on re-run) with a delete-and-rewrite strategy using
START/ENDblock markers. The managed block is removed wholesale by sed range match, then always re-written fresh — no guard/continueneeded - Legacy cleanup expanded — added removal of v1.10.0 orphaned aliases/exports/
_CLAUDE_BIN/cc-tools()that existed outside block markers, in addition to pre-v1.10.0 function forms - cc-tools expanded — added
ccw,ccms,cargoto the tool listing
- Directory structure — specs now live in domain subfolders (
.specs/{domain}/{feature}.md) instead of version directories (.specs/v0.1.0/feature.md) - ROADMAP.md → MILESTONES.md — version tracker renamed to milestone tracker throughout all skills, templates, and system prompt
**Version:**→**Domain:**— spec template metadata field renamed across spec-new template, spec-writer agent, specification-writing skill, spec-update, spec-checkroadmap-template.md→milestones-template.md— reference template replaced- Acceptance criteria markers — three-state progress tracking:
[ ](not started),[~](implemented, not yet verified),[x](verified). Used by/spec-buildphases and recognized by/spec-checkand/spec-update - Spec lifecycle expanded —
/spec-reviewinserted before/spec-updatein the recommended post-implementation workflow.spec-reminder.pyadvisory message updated accordingly - Agent skill lists — architect, generalist, and spec-writer agents gained
/spec-reviewaccess
codeforge-lsp/plugin.json— addedlspServersblock with pyright (Python), typescript-language-server (JS/TS), and gopls (Go) declarative configurations replacing implicit setup
- Working directory injection — always outputs cwd with scope restriction message, even outside git repos
- cwd from hook input — reads
cwdfrom Claude Code's hook JSON input (falls back toos.getcwd())
- Line unwrapping — long wrapped lines consolidated to single lines throughout (no content changes, only formatting)
- CLAUDE.md — added
ccw,ccmscommands; addedwriting-system-prompt.mdto directory tree and config table; added workspace-scope-guard to plugin list; skill count 17 → 28; added Rust toversion: "none"support; updated setup-aliases.sh description - README.md — added Safety Plugins section; updated spec workflow commands/lifecycle/structure for domain-based organization; added
/spec-buildand/spec-reviewto skill table; fixed system prompt override path (system-prompt.md→main-system-prompt.md) - claude-guide agent — fixed system prompt path reference (
system-prompt.md→main-system-prompt.md) - doc-writer agent — "Version ships" → "Milestone ships" terminology
- marketplace.json — skill count updated (16 → 28); workspace-scope-guard added
- skill-suggester.py — added keyword mappings for
spec-buildandspec-review - spec-workflow.md rule — added
/spec-buildand/spec-reviewrules (#10, #11); added acceptance criteria markers section; updated directory convention to domain-based
spec-init/references/roadmap-template.md— replaced bymilestones-template.md
/spec-refine— iterative 6-phase spec refinement: assumption mining, requirement validation ([assumed]→[user-approved]), acceptance criteria review, scope audit, and final approval gate
- New setup script configures VS Code Shift+Enter keybinding for Claude Code multi-line terminal input (idempotent, merges into existing keybindings.json)
- setup-aliases.sh — introduces
_CLAUDE_BINvariable resolution: prefers~/.local/bin/claude(officialclaude installlocation), falls back to/usr/local/bin/claude, then PATH. All aliases (cc,claude,ccraw) use"$_CLAUDE_BIN" - setup-update-claude.sh — complete rewrite: delegates to
claude install(first run) andclaude update(subsequent starts) instead of manual binary download/checksum/swap. Logs to/tmp/claude-update.log
- advisory-test-runner.py — rewritten to run only affected tests based on edited files. Maps source files to test files (pytest directory mirroring, vitest
--related, jest--findRelatedTests, Go package mapping). Timeout reduced from 60s to 15s. Skips entirely if no files edited - hooks.json — advisory-test-runner timeout reduced from 65s to 20s
- setup-projects.sh — two-pass scanning: depth-1 directories with project markers registered directly; directories without markers treated as containers and children scanned. Recursive inotifywait with noise exclusion. Clean process group shutdown
- spec-writer agent — adds
**Approval:** draftfield, requires[assumed]tagging on all requirements, adds## Resolved Questionssection, references/spec-refinebefore implementation - spec-new skill — pre-fills
**Approval:** draft, notes features should come from backlog - spec-check skill — adds Unapproved (high) and Assumed Requirements (medium) issue checks, Approval column in health table, approval summary
- spec-update skill — minor alignment with approval workflow
- spec-init templates — backlog template expanded with P0–P3 priority grades + Infrastructure section; roadmap template rewritten with pull-from-backlog workflow
- specification-writing skill — updated with approval field and requirement tagging guidance
- spec-workflow.md (global rule) — softened 200-line hard cap to "aim for ~200"; added approval workflow rules (spec-refine gate, requirement tags, spec-reminder hook); added
**Approval:**and## Resolved Questionsto standard template - main-system-prompt.md — softened 4× hard "≤200 lines" references to "~200 lines"
- spec-new skill — fixed "capped at 200" internal contradiction; added explanation of what
/spec-refinedoes and why - spec-new template — added Approval Workflow section explaining
[assumed]/[user-approved]tags anddraft/user-approvedstatus - spec-update skill — added approval gate warning for draft specs; added spec-reminder hook documentation; added approval validation to checklist
- spec-check skill — added
implemented + draft(High) andinconsistent approval(High) checks - spec-init skill — expanded next-steps with full lifecycle (backlog → roadmap → spec → refine → implement → update → check)
- spec-reminder.py — added
/spec-refinemention in advisory message for draft specs
- Relaxed 200-line hard cap to "aim for ~200 lines" across global rule, system prompt, spec-new skill, architect agent, doc-writer agent, documentation-patterns skill, and spec-check skill
- setup.sh — added
SETUP_TERMINALflag, normalized update-claude invocation viarun_scripthelper - check-setup.sh — removed checks for disabled features (shfmt, shellcheck, hadolint, dprint); checks RC files for alias instead of
type cc - connect-external-terminal.sh — uses
${WORKSPACE_ROOT:-/workspaces}instead of hardcoded path - devcontainer.json — formatting normalization
- main-system-prompt.md — updates for spec approval workflow and requirement tagging
- test-project/README.md — deleted (no longer needed)
- Project Context Discovery — all 14 project-interacting agents now read
.claude/rules/*.mdand CLAUDE.md files before starting work. Agents walk up the directory tree from their working directory to the workspace root, applying conventions from each level (deeper files take precedence) - Execution Discipline — 7 agents (generalist, refactorer, migrator, test-writer, doc-writer, architect, researcher) gain structured pre/post-work verification: read before writing, verify after writing, no silent deviations, failure diagnosis before retry
- Code Standards — 5 agents (generalist full; refactorer, migrator, test-writer, architect compact) gain SOLID, DRY/KISS/YAGNI, function size limits, error handling rules, and forbidden patterns (god classes, magic numbers, dead code)
- Professional Objectivity — 10 agents gain explicit instruction to prioritize technical accuracy over agreement, present evidence when it conflicts with assumptions
- Communication Standards — all 14 agents gain response brevity rules: substance-first responses, no preamble, explicit uncertainty marking, file:line references
- Documentation Convention — 2 write agents (generalist, migrator) gain inline comment guidance (explain "why", not "what")
- Context Management — generalist gains instruction to continue working normally when context runs low
- Testing Guidance — generalist gains testing standards (verify behavior not implementation, max 3 mocks per test)
- Scope Discipline — refactorer gains explicit constraint: never expand scope beyond the requested refactoring
- Tiered approach: Tier 1 (generalist, 139→268 lines, all blocks), Tier 2 (4 write agents, full blocks), Tier 3 (9 read-only agents, compact blocks). 3 agents skipped (bash-exec, claude-guide, statusline-config — no project context needed)
/spec-new— creates a new spec from the standard template in.specs//spec-update— performs as-built spec update after implementation (checks off criteria, adds implementation notes, updates paths)/spec-check— audits spec health: stale specs, missing coverage, orphaned files/spec-init— bootstraps.specs/directory structure for projects that don't have onespec-reminder.py[Stop]— new advisory hook reminds about spec updates when implementation work is detected- Spec skills assigned to agents — generalist and spec-writer agents gain spec skill access in frontmatter
config/defaults/rules/— new directory containing default.claude/rules/files distributed to all projects via file-manifestspec-workflow.md— rule enforcing spec-before-implementation workflow, ≤200 line spec limit,.specs/directory convention, as-built update requirementworkspace-scope.md— rule restricting file operations to the current project directory
- Self-contained code quality plugin — combines auto-formatter + auto-linter into a single drop-in plugin with independent temp file namespace (
claude-cq-*). Includes all 7 formatters (Ruff, Biome, gofmt, shfmt, dprint, rustfmt, Black fallback) and 7 linters (Pyright, Ruff, Biome, ShellCheck, go vet, hadolint, clippy) plus syntax validation. Designed for use outside the CodeForge devcontainer where auto-formatter and auto-linter aren't available separately
file-manifest.json— added 2 new entries for default rules files (defaults/rules/spec-workflow.md,defaults/rules/workspace-scope.md) targeting${CLAUDE_CONFIG_DIR}/rulessetup-config.shbug fix — fixed bash field-collapse bug where emptydestFilenamecaused subsequent fields to shift. Uses__NONE__sentinel in jq output to preventreadfrom collapsing consecutive tab delimiters
frontend-designplugin name corrected — fixedfrontend-design@claude-code-plugins→frontend-design@claude-plugins-officialin bothsettings.jsonandCLAUDE.md
hooks.json— addedspec-reminder.pyto Stop hooks (now 3 Stop hooks: advisory-test-runner, commit-reminder, spec-reminder)marketplace.json— addedauto-code-qualityplugin entry (10 plugins total, was 9)- Agent definitions — 14 of 17 agents updated with orchestrator-mirrored instructions (see Agent Context Inheritance above)
- Whitespace normalization —
settings.json,file-manifest.json,marketplace.json,hooks.json,package.json,setup-config.shreformatted to consistent tab indentation
config/file-manifest.json— new declarative manifest controlling which config files are copied and how. Replaces hardcodedcopy_filecalls with per-fileoverwritemodes:"if-changed"(sha256-based, default),"always", or"never"config/defaults/— config files relocated fromconfig/toconfig/defaults/(settings.json, keybindings.json, main-system-prompt.md)setup-config.shrewritten — reads file-manifest.json, supports variable expansion (${CLAUDE_CONFIG_DIR},${WORKSPACE_ROOT}), sha256-based change detection, and legacy fallback if manifest is missing
- ruff feature — Python formatter/linter via
uv tool install ruff; replaces Black as primary Python formatter (Black kept as fallback) - shfmt feature — Shell script formatter via direct binary download from GitHub releases; supports
.sh,.bash,.zsh,.mksh,.bats - dprint feature — Pluggable formatter for Markdown, YAML, TOML, and Dockerfile via GitHub releases binary; ships global config at
/usr/local/share/dprint/dprint.jsonwith four plugins (markdown, yaml, toml, dockerfile) - shellcheck feature — Shell script linter via
apt-get install; JSON output parsing for structured diagnostics - hadolint feature — Dockerfile linter via direct binary download from GitHub releases; JSON output parsing
- Ruff formatter —
.py/.pyifiles now formatted with Ruff (falls back to Black if Ruff not installed) - Biome expanded — added
.css,.json,.jsonc,.graphql,.gql,.html,.vue,.svelte,.astro(was JS/TS only; now 18 extensions total) - shfmt integration —
.sh,.bash,.zsh,.mksh,.batsfiles auto-formatted on Stop - dprint integration —
.md,.markdown,.yaml,.yml,.tomlfiles andDockerfile/.dockerfileauto-formatted on Stop - rustfmt integration —
.rsfiles auto-formatted ifrustfmtis in PATH (conditional, zero overhead when unused)
- Ruff linter — Python files now checked by both Pyright (type checking) and Ruff (style/correctness); complementary, not redundant
- Biome lint — JS/TS/CSS/GraphQL files linted via
biome lint --reporter=json; surfaces unsafe diagnostics not auto-fixed by formatter - ShellCheck — shell scripts linted via
shellcheck --format=json; structured severity/line/message output - go vet —
.gofiles linted viago vet; stderr parsed for diagnostics - hadolint —
Dockerfile/.dockerfilefiles linted viahadolint --format json - clippy —
.rsfiles linted viacargo clippyif cargo is in PATH (conditional)
- All 20 local features now support
"version": "none"in devcontainer.json to skip installation entirely - Added
versionoption to 7 features that previously lacked it: ccstatusline, notify-hook, shellcheck, mcp-qdrant, mcp-reasoner, splitrail, lsp-servers - Added skip guard (
if [ "${VERSION}" = "none" ]; then exit 0; fi) to all 20 install.sh files
- advisory-test-runner.py
[Stop]— runs project test suite on Stop, injects pass/fail results asadditionalContext. Never blocks (always exit 0). Detects pytest, vitest, jest, mocha, go test, cargo test. 60s timeout, truncates to last 30 lines - git-state-injector.py
[SessionStart]— injects branch, status summary, recent commits, and diff stats asadditionalContexton every session start. 5s per git command, total output capped at 2000 chars - ticket-linker.py
[UserPromptSubmit]— auto-fetches GitHub issues/PRs when prompt contains#123or full GitHub URLs. Up to 3 refs per prompt, body capped at 1500 chars each - commit-reminder.py
[Stop]— checks for uncommitted changes (staged/unstaged counts) and injects advisory reminder asadditionalContext. Checksstop_hook_active - 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
- api-design — REST conventions, error handling patterns, OpenAPI/Swagger guidance
- ast-grep-patterns — structural code search patterns across languages
- dependency-management — ecosystem-specific audit commands, license compliance
- documentation-patterns — docstring formats, API doc templates
- migration-patterns — Python and JavaScript framework migration guides
cc-tools— new shell function listing all installed CodeForge tools with version infocheck-setup— new health check script (check-setup.sh) verifying container setup is working correctly; aliased in shell rc files
CLAUDE.md— workspace-level project instructions (workspace scoping rules)test-project/— minimal test project directory
--forceis 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-newversions saved for diffing--resetflag — new option for complete fresh install (deletes and re-copies everything).codeforge-preserve— user-customizable file listing additional paths to preserve during--forceupdates- devcontainer.json handling — user's version backed up as
.bakduring--force, then overwritten with package version .npmignore— excludes.codeforge-new,.bak, and.codeforge-preserveartifacts from npm package
- setup.sh — removed
set -e(individual script failures no longer abort the entire setup); structured pass/fail/skip reporting with elapsed time summary - setup-aliases.sh — backs up
.bashrc/.zshrcbefore modifying (keeps last 3 backups); cleans up old cc-tools/check-setup definitions; addscc-toolsfunction andcheck-setupalias - OVERWRITE_CONFIG deprecated — replaced by per-file
overwriteinconfig/file-manifest.json. Legacy env var triggers a deprecation warning
- hooks.json — expanded from 3 to 6 hook events (added Stop, SessionStart, updated UserPromptSubmit with ticket-linker)
- Agent definitions — architect gains documentation outputs section + api-design skill link; multiple agents updated with refined instructions
- skill-suggester.py — added keyword mappings for 5 new skills (api-design, ast-grep-patterns, dependency-management, documentation-patterns, migration-patterns)
- specification-writing skill — expanded with additional templates and patterns
- code-directive plugin.json — description updated to "17 custom agents, 16 coding skills, agent redirection, syntax validation, and skill auto-suggestion"
- format-on-stop.py — rewritten with expanded dispatch: 7 formatters covering 31 file extensions (was 3 formatters, 12 extensions)
- lint-file.py — rewritten as multi-language dispatcher: 7 linters across Python, JS/TS/CSS, Shell, Go, Dockerfile, Rust (was Pyright-only for Python)
- auto-linter hook timeout — increased from 30s to 60s (each individual linter subprocess still capped at 10s)
- auto-formatter plugin.json — description updated to reflect all 7 formatters
- auto-linter plugin.json — description updated to reflect all 7 linters
- marketplace.json — descriptions updated for auto-formatter, auto-linter, and code-directive plugins
- devcontainer.json — 5 new features registered in
overrideFeatureInstallOrderandfeaturesobject; added install order documentation comments - .env.example — removed
OVERWRITE_CONFIG, addedSETUP_PROJECTS, updated descriptions - .gitignore — updated with additional exclusions
features/claude-code/— entire local feature deleted (Claude Code now installed viaghcr.io/anthropics/devcontainer-features/claude-code:1, the official Anthropic feature)config/settings.json,config/keybindings.json,config/main-system-prompt.md— moved toconfig/defaults/subdirectoryOVERWRITE_CONFIGenv var — deprecated in favor ofconfig/file-manifest.jsonper-file overwrite modes
- New
docs/directory with 5 focused guides: configuration-reference, keybindings, optional-features, plugins, troubleshooting - 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
- 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
- Automatic Git & NPM auth on container start — new
setup-auth.shscript reads tokens from.devcontainer/.secrets(or environment variables) and configures GitHub CLI, git user identity, and NPM registry auth automatically .secrets.exampletemplate — committed template showing required variables (GH_TOKEN,GH_USERNAME,GH_EMAIL,NPM_TOKEN).env.exampletemplate — committed template for environment configuration (.envitself remains gitignored)SETUP_AUTHenv var — controls whether auth setup runs on container start (default:true)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)
- README split by audience — root
README.mdis now the npm/GitHub landing page (install, prerequisites, what's included, quick start);.devcontainer/README.mdis now the usage guide (auth, tools, config, agents, keybindings, gotchas). No duplicated content between the two - 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 collect-edited-files.py— now writes to bothclaude-edited-files-*(formatter) andclaude-lint-files-*(linter) temp files, keeping the two Stop hook pipelines independent.devcontainer/.gitignore— added.secretsexplicit ignore and negation patterns (!.env.example,!.secrets.example,!.gitignore) to override root.*rule for files that should be trackedsetup.shorchestration —setup-auth.shruns early (after symlink, before config/plugins) so NPM auth is available for plugin installationPLUGIN_BLACKLIST— cleared (was"workflow-enhancer,planning-reminder")
workflow-enhancerplugin — deleted entirely (was scaffolding only, never active)planning-reminderplugin — deleted entirely (redundant with Claude Code v2.1+ auto plan mode)
- ccburn feature — new devcontainer feature for visual token burn rate tracking with shell aliases and statusline wrapper
- Session resume widget — ccstatusline displays copyable
cc --resume {sessionId}command on line 5 - Burn rate widget — ccstatusline line 6 shows live ccburn compact output with pace indicators (session/weekly/sonnet limits)
- 17 custom agent definitions — code-directive plugin now includes specialized agents: architect, bash-exec, claude-guide, debug-logs, dependency-analyst, doc-writer, explorer, generalist, git-archaeologist, migrator, perf-profiler, refactorer, researcher, security-auditor, spec-writer, statusline-config, test-writer
- 6 new skills — claude-agent-sdk, git-forensics, performance-profiling, refactoring-patterns, security-checklist, specification-writing
- Agent redirect hook —
redirect-builtin-agents.py(PreToolUse/Task) transparently swaps built-in agent types (Explore→explorer, Plan→architect, etc.) to enhanced custom agents - Readonly bash guard —
guard-readonly-bash.pyblocks write operations for read-only agents - Regression test hooks —
verify-no-regression.py(PostToolUse for refactorer) andverify-tests-pass.py(Stop for test-writer) - REVIEW-RUBRIC.md — quality standards document for agent/skill development
- Keybindings configuration — new
config/keybindings.jsonwith schema support - VS Code terminal passthrough —
Ctrl+PandCtrl+Fpass through to Claude Code viaterminal.integrated.commandsToSkipShell - claude-agent-sdk skill — new code-directive skill for Claude Agent SDK TypeScript integration
- OVERWRITE_CONFIG documentation — documented ephemeral settings behavior
- Project Manager integration —
setup-projects.shauto-detects projects under/workspaces/, watches for changes via inotifywait, maintainsprojects.json - Claude config symlink —
setup-symlink-claude.shsymlinks~/.claude→$CLAUDE_CONFIG_DIRfor third-party tool compatibility - Project Manager VS Code extension —
alefragnani.project-manageradded to devcontainer
- ccstatusline layout — expanded from 3→6 lines (13→16 widgets), reorganized into logical groups (core metrics, tokens, git, session, totals, burn rate)
- ccstatusline version — bumped from 1.0.0 to 1.1.0
- Plugin declarations centralized — all 9 marketplace plugins declared in
enabledPluginsinconfig/settings.json - setup-plugins.sh cache sync — re-added plugin install loop to sync cache from source on every container start; added
.envfallback soPLUGIN_BLACKLISTworks on standalone invocation - Feature-level config synced —
features/claude-code/config/settings.jsonmirrors main config (model →claude-opus-4-6,MAX_THINKING_TOKENS→63999,cleanupPeriodDays→60, all env vars) - 8 new env vars —
CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY,CLAUDE_CODE_MAX_RETRIES,BASH_MAX_OUTPUT_LENGTH,TASK_MAX_OUTPUT_LENGTH,CLAUDE_CODE_PLAN_MODE_INTERVIEW_PHASE,CLAUDE_CODE_PLAN_V2_AGENT_COUNT,CLAUDE_CODE_PLAN_MODE_REQUIRED,CLAUDE_CODE_FORCE_GLOBAL_CACHE - setup-config.sh — added
chownfor correct ownership; added keybindings.json to copy pipeline - setup-aliases.sh — added idempotency guard
- TMPDIR consistency —
setup-update-claude.shandccstatusline/install.shuse${TMPDIR:-/tmp} - installsAfter references — mcp-qdrant and mcp-reasoner updated from
./features/claude-codetoghcr.io/anthropics/devcontainer-features/claude-code:1 - code-directive hooks.json — added PreToolUse/Task hook for agent redirection
- Auto-linter timeout — pyright reduced from 55s to 10s
- Auto-formatter tool paths — resolved via
whichfirst - Protected-files-guard regex — tightened
id_rsapattern - Syntax-validator JSONC regex — handles URLs containing
:// - Skill-suggester keywords — consolidated claude-agent-sdk phrases; added "compose" to docker
- redirect-builtin-agents.py fix —
updatedInputnow preserves all original tool input fields (Claude Code replaces rather than merges) - System prompt hardened — added anti-fabrication rule, failure recovery strategy, and silent-violation guard to
execution_disciplineandrule_precedence
- setup-irie-claude.sh — deleted (personal script, no longer invoked)
- output-style widget — removed from ccstatusline (low value)
- CLAUDE.md — added keybindings.json, updated plugins list, fixed model name, documented VS Code conflicts, documented OVERWRITE_CONFIG, added agents/skills sections, added new scripts
- README.md — fixed max output tokens, added keybindings section, added agents/skills, added project manager
- features/README.md — full rewrite listing all features
- CHANGELOG.md — squashed v1.6.0 + v1.6.1 into this entry
- tmux is now opt-in in VS Code: Reverted auto-tmux-everywhere approach (forced all terminals into tmux, caused shared-view conflicts and hotkey clashes with Claude Code). Default terminal is plain
bash. A "Claude Teams (tmux)" profile is available from the VS Code terminal dropdown for Agent Teams split-pane sessions. External terminal connectors (WezTerm/iTerm2) are unchanged — they still auto-enter tmux - Removed auto-tmux from
.bashrc/.zshrc: Theexec tmuxblock that forced every interactive shell into tmux has been removed fromsetup-aliases.sh
- Catppuccin Mocha tmux theme: Replaced barebones tmux config with Catppuccin v2.1.3. Rounded window tabs, Nerd Font icons, transparent status bar, colored pane borders. Installed at build time via shallow git clone (~200KB, ~2s)
-
ccstatusline powerline glyphs: Powerline separators/caps were empty strings, rendering as underscores. Now uses proper Nerd Font glyphs (U+E0B0, U+E0B4, U+E0B6)
-
Unicode rendering in external terminals: tmux rendered ALL Unicode as underscores because
docker execdoesn't propagate locale vars. External terminal scripts now passLANG/LC_ALL=en_US.UTF-8and usetmux -uto force UTF-8 mode. Locale exports also added to.bashrc/.zshrcas permanent fallback -
cc/claude aliases: Converted from shell functions to simple aliases — functions were not reliably invoked across shell contexts (tmux, docker exec, external terminals), causing Claude to launch without config
-
CLAUDE_CONFIG_DIR export: Now exported in
.bashrc/.zshrcdirectly, so credentials are found in all shells (not just VS Code terminals whereremoteEnvapplies)
- Claude Code Agent Teams: Enabled via
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "1"andteammateMode: "auto" - System prompt guidance: Agent Teams section with 3–5 active teammate limit and usage heuristics
- Task tracking:
CLAUDE_CODE_ENABLE_TASKS: "true"for structured task management - Effort level:
CLAUDE_CODE_EFFORT_LEVEL: "high"
- tmux feature: Split-pane terminal multiplexer for Agent Teams
- Pre-configured Catppuccin color palette, mouse support, 10,000-line scrollback
- Creates
claude-teamssession on container start
- Biome feature: Fast JS/TS/JSON/CSS formatter via global
@biomejs/biomeinstall - External terminal connectors: Bash (
.sh) and PowerShell (.ps1) scripts to connect host terminals to devcontainer tmux sessions - Claude Code auto-update:
setup-update-claude.shchecks for newer Claude Code native binary on every container start- Runs non-blocking in background via
setup.sh - Downloads from GCS, verifies SHA256 checksum, atomic binary replacement
- Controlled by
SETUP_UPDATE_CLAUDEenv var in.env(default:true)
- Runs non-blocking in background via
- code-directive plugin: Replaces
codedirective-skillswith expanded hook infrastructure- New skill:
debugging— Log forensics, Docker log analysis, error pattern recognition - Hooks:
skill-suggester.py(UserPromptSubmit, SubagentStart),syntax-validator.py+collect-edited-files.py(PostToolUse) - All 10 existing skills migrated from
codedirective-skills
- New skill:
GitHub.vscode-github-actions— GitHub Actions workflow supportfabiospampinato.vscode-todo-plus— Todo+ task management
- Default model: Claude Opus 4-5 → Claude Opus 4-6 (frontier)
- Max output tokens: 64,000 → 128,000
- Container memory: 3GB → 4GB (
--memory-swapraised to 8GB) - External terminal connectors: Now run as
vscodeuser and auto-launchccon new tmux sessions - Auto-formatter: Switched from PostToolUse (
format-file.py) to Stop hook (format-on-stop.py)- Added Biome support for JS/TS/CSS alongside existing Black and gofmt
- Batch-formats all edited files when Claude stops instead of formatting on every edit
- Auto-linter: Switched from PostToolUse to Stop hook
- Agent-browser: Optimized to install only Chromium (previously installed all Playwright browsers)
- codedirective-skills plugin: Replaced by
code-directive(all skills preserved) - format-file.py: Replaced by
format-on-stop.py CLAUDE_CODE_SUBAGENT_MODEL: Environment variable removed (no longer needed)
- Added
claude-dev-discord-logs/,devforge/
- Package rename:
claudepod→codeforge-devon npm. Install vianpx codeforge-dev - Full rebrand: All references renamed from ClaudePod/claudepod to CodeForge/codeforge
- codedirective-skills plugin: 9 coding reference skills for the CodeDirective tech stack
fastapi- Routing, middleware, SSE, Pydantic modelspydantic-ai- Agents, tools, models, streamingsvelte5- Runes, reactivity, components, routing, dnd, LayerCake, AI SDKsqlite- Python/JS patterns, schema, pragmas, advanced queriesdocker- Dockerfile patterns, Compose servicesdocker-py- Container lifecycle, resources, securityclaude-code-headless- CLI flags, output, SDK/MCPtesting- FastAPI and Svelte testing patternsskill-building- Meta-skill for authoring skills
- codeforge-lsp plugin: Replaces
claudepod-lspwith identical functionality - Svelte MCP plugin: Added
svelte@sveltejs/mcpto official plugins - Plugin blacklist system:
PLUGIN_BLACKLISTenv var in.envto skip plugins during auto-install- Parsed by
is_blacklisted()helper insetup-plugins.sh - Default:
workflow-enhancerblacklisted
- Parsed by
<execution_discipline>: Verify before assuming, read before writing, instruction fidelity, verify after writing, no silent deviations<professional_objectivity>: Prioritize technical accuracy over agreement, direct measured language<structural_search>: ast-grep and tree-sitter usage guidance with when-to-use-which- Scope discipline: Modify only what the task requires, trust internal code, prefer inline clarity
- Continuation sessions: Re-read source files after compaction, verify state before changes
- Brevity additions: No problem restatement, no filler/narrative, no time estimates
- Bun runtime: Added
ghcr.io/rails/devcontainer/features/bun:1.0.2 - Playwright browsers: Installed via
npx playwright install --with-depsin agent-browser feature - Memory cap: Container limited to 3GB via
--memory=3g --memory-swap=3g - TMPDIR: Set to
/workspaces/.tmp - VS Code remote extension:
wenbopan.vscode-terminal-osc-notifierconfigured as UI extension
- Permission model:
--dangerously-skip-permissions→--permission-mode plan --allow-dangerously-skip-permissions - Settings:
autoCompact: true,alwaysThinkingEnabled: true - Autocompact threshold: 80% → 95%
- Cleanup period: 360 days → 60 days
- Tool search: Added
ENABLE_TOOL_SEARCH: "auto:5" - Tree-sitter: Removed Go grammar from defaults
- Ticket-workflow commands: Renamed
ticket:→ticket꞉for cross-platform filesystem compatibility - notify-hook: Added empty
matcherfield to hooks.json schema
- claudepod-lsp plugin: Replaced by
codeforge-lsp
- Added
code-directive/,article/,claude-research/,dashboard/,simple-review/,workflow-enhancer/
- Plugin installation: Fixed invalid plugin.json schema causing installation failures
- Removed
$schema,category,version,lspServerskeys from individual plugin.json files - These fields now correctly reside only in
marketplace.json
- Removed
- setup-plugins.sh: Fixed path resolution for marketplace discovery
- Changed from
${containerWorkspaceFolder:-.}toSCRIPT_DIRrelative path - Script now works correctly regardless of working directory
- Changed from
- Consolidated LSP setup: Merged
setup-lsp.shintosetup-plugins.sh- Single script now handles both official and local marketplace plugins
- Removed
SETUP_LSPenvironment variable (no longer needed)
- settings.json: Updated Claude Code configuration
- Increased
MAX_THINKING_TOKENSfrom 14999 to 63999 - Added
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE: 80 (auto-compact at 80% context) - Added
CLAUDE_CODE_SHELL: zsh - Added
FORCE_AUTOUPDATE_PLUGINS: true - Added
autoUpdatesChannel: "latest"
- Increased
- setup-lsp.sh: Deleted (functionality consolidated into setup-plugins.sh)
- dangerous-command-blocker: PreToolUse hook blocks dangerous bash commands
- Blocks
rm -rf /,rm -rf ~,sudo rm,chmod 777 - Blocks
git push --forceto main/master - Blocks writes to system directories (
/usr,/etc,/bin) - Blocks disk formatting (
mkfs.*,dd of=/dev/)
- Blocks
- protected-files-guard: PreToolUse hook blocks modifications to sensitive files
- Blocks
.env,.env.*environment files - Blocks
.git/directory - Blocks lock files (
package-lock.json,yarn.lock,poetry.lock, etc.) - Blocks certificates/keys (
.pem,.key,.crt) - Blocks credential files and auth directories (
.ssh/,.aws/)
- Blocks
- auto-formatter: PostToolUse hook auto-formats edited files
- Python files via Black (
/usr/local/py-utils/bin/black) - Go files via gofmt (
/usr/local/go/bin/gofmt)
- Python files via Black (
- auto-linter: PostToolUse hook auto-lints edited files
- Python files via Pyright with JSON output parsing
- planning-reminder: PreToolUse hook encourages plan-before-implement workflow
- notify-hook feature: Desktop notifications when Claude finishes responding
- OSC escape sequences for terminal notification support
- Optional audio bell
- VS Code extension recommendation for terminal notifications
- agent-browser feature: Headless browser automation CLI for AI agents
- Accessibility tree snapshots for AI navigation
- Screenshots and PDF capture
- Element interaction and cookie management
- Go LSP (gopls): Full Go language server support
- Added
goplsto codeforge-lsp plugin configuration - Added
goplsVersionoption to lsp-servers feature - Supports
.go,.mod,.sumfile extensions
- Added
- Go language: Added
ghcr.io/devcontainers/features/go:1feature
- ticket-workflow plugin: EARS-based ticket workflow with GitHub integration
/ticket:new- Transform requirements into EARS-formatted GitHub issues/ticket:work- Create technical implementation plans from tickets/ticket:review-commit- Thorough code review with requirements verification/ticket:create-pr- Create PRs with aggressive security/architecture review
- notify-hook plugin: Claude Code hook integration for completion notifications
- codeforge-lsp plugin.json: Proper plugin structure for LSP servers
- ccraw alias: Runs vanilla Claude Code without any config
- Bypasses the function override via
command claude - Useful for debugging or running without custom system prompt
- Bypasses the function override via
- System prompt: Added
<tools_reference>section with all available tools - System prompt: Added
<browser_automation>section with usage guidance
- claude command: Now behaves the same as
cc(auto-creates local config)- Uses
command claudeinternally to call the actual binary - Both
claudeandccauto-setup.claude/system-prompt.mdand.claude/settings.json
- Uses
- Container name: Now includes project folder name for multi-project clarity
- Format:
CodeForge - ${localWorkspaceFolderBasename}
- Format:
- setup-lsp.sh: Replaced hard-coded plugin list with dynamic discovery
- Now reads all plugins from
marketplace.jsonusingjq - Automatically installs new plugins when added to marketplace
- Now reads all plugins from
- System prompt: Updated to use correct Claude Code tool names
- Fixed plan mode references:
PlanMode→EnterPlanMode/ExitPlanMode - Added explicit tool names throughout directives
- Fixed plan mode references:
- Plugin installation: Reduced from 7 plugins to 1 official plugin (frontend-design skill)
code-review@claude-plugins-official(command plugin)commit-commands@claude-plugins-official(command plugin)pr-review-toolkit@claude-plugins-official(command + agent plugin)code-simplifiernpx installation block
.devcontainer/
├── features/
│ ├── agent-browser/
│ │ ├── devcontainer-feature.json
│ │ ├── install.sh
│ │ └── README.md
│ └── notify-hook/
│ ├── devcontainer-feature.json
│ ├── install.sh
│ └── README.md
└── plugins/devs-marketplace/plugins/
├── auto-formatter/
│ ├── .claude-plugin/plugin.json
│ ├── hooks/hooks.json
│ └── scripts/format-file.py
├── auto-linter/
│ ├── .claude-plugin/plugin.json
│ ├── hooks/hooks.json
│ └── scripts/lint-file.py
├── codeforge-lsp/
│ └── .claude-plugin/plugin.json
├── dangerous-command-blocker/
│ ├── .claude-plugin/plugin.json
│ ├── hooks/hooks.json
│ └── scripts/block-dangerous.py
├── notify-hook/
│ ├── .claude-plugin/plugin.json
│ └── hooks/hooks.json
├── planning-reminder/
│ ├── .claude-plugin/plugin.json
│ └── hooks/hooks.json
├── protected-files-guard/
│ ├── .claude-plugin/plugin.json
│ ├── hooks/hooks.json
│ └── scripts/guard-protected.py
└── ticket-workflow/
└── .claude-plugin/
├── plugin.json
├── system-prompt.md
└── commands/
├── ticket:new.md
├── ticket:work.md
├── ticket:review-commit.md
└── ticket:create-pr.md
.devcontainer/devcontainer.json- Added features, VS Code settings, dynamic name.devcontainer/config/main-system-prompt.md- Tools reference, browser automation.devcontainer/scripts/setup-aliases.sh- Claude function override, ccraw alias.devcontainer/scripts/setup-lsp.sh- Dynamic plugin discovery.devcontainer/scripts/setup-plugins.sh- Trimmed to frontend-design only.devcontainer/features/lsp-servers/install.sh- Added gopls installation.devcontainer/features/lsp-servers/devcontainer-feature.json- Added goplsVersion.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json- All new plugins.devcontainer/CLAUDE.md- Updated plugin docs, local marketplace section.devcontainer/README.md- Added agent-browser, Go to tools tables
- Added
--forceflag support - Removed devpod references
- GitHub CLI: Added
ghcr.io/devcontainers/features/github-cli:1feature - Official Anthropic Plugins: New
setup-plugins.shscript - SETUP_PLUGINS environment variable
- GitHub CLI Credential Persistence:
GH_CONFIG_DIR=/workspaces/.gh - README.md: Comprehensive documentation
- CLAUDE.md: Development guide for Claude Code
- Plan Mode Default: Changed
defaultModefrom"dontAsk"to"plan" - cc Command: Replaced simple alias with smart function
- Specwright: Completely removed (setup script, aliases, plugin files, ORCHESTRATOR.md)