You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Fixed (CodeRabbit review)
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 -u to prevent unbound variable abort under set -euo pipefail
setup.js — ccstatusline-settings.json added to DEFAULT_PRESERVE so user customizations survive --force package updates
docs agent-system.md — spec-writer moved from Full-Access to Read-Only agents table (matches its permissionMode: plan definition)
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"
Added
Nuclear Workspace Scope Enforcement
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
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)
Agent System Enhancements
task-completed-check.py — quality gate hook (TaskCompleted) runs test suite before allowing task completion
teammate-idle-check.py — quality gate hook (TeammateIdle) prevents teammates from going idle with incomplete tasks
skills/debug/SKILL.md — structured log investigation skill replacing the old /debug slash command
permissionMode declared 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
Skill Engine Enhancements
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
New Features
chromaterm — terminal output colorizer via ChromaTerm2 YAML rules
kitty-terminfo — xterm-kitty terminfo for Kitty terminal compatibility
Documentation Site
Astro/Starlight docs (docs/) — full documentation portal with getting-started guides, plugin reference (12 pages), feature docs, customization, and API reference
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
Other
Marketplace metadata — marketplace.json restructured with metadata object, pluginRoot, and keywords arrays for all plugins
Port forwarding for Claude Dashboard (port 7847) in devcontainer.json
ChromaTerm wrapper in setup-aliases.sh — cc/claude/ccw aliases pipe through ct when available
Widget config extracted from inline jq -n generation in install.sh into config/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 to setup-config.sh — enables manifest entries targeting user home directory paths
Development Rules
CLAUDE.md (project root) — added changelog and documentation update rules: all changes must have a changelog entry and update relevant docs
Changed
ccstatusline Feature
install.sh simplified — removed ~90 lines of inline JSON config generation, validation, and template creation. Config deployment now handled by file-manifest system
Workspace Scope Guard
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
Hook Output Schema Migration
All hooks migrated to hookSpecificOutput wrapper with explicit hookEventName
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 with decision: block; passes/timeouts use systemMessage
ticket-linker.py — output wrapped in hookSpecificOutput
git-state-injector.py, todo-harvester.py — output wrapped in hookSpecificOutput
Ticket Workflow
Migrated from slash commands to skill-based approach — 4 slash commands and system-prompt.md replaced by skills directory
Skill Definitions
All 21+ SKILL.md files rewritten with USE WHEN / DO NOT USE guidance, action-oriented descriptions, bumped to v0.2.0
skill-suggester.py keyword 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
Error Output
block-dangerous.py — errors now written to stderr (was JSON on stdout)
guard-protected.py, guard-protected-bash.py — errors now written to stderr