codeforge-dev 1.14.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/{.devcontainer/config/defaults → .codeforge/config}/ccstatusline-settings.json +44 -6
  2. package/{.devcontainer/config/defaults → .codeforge/config}/main-system-prompt.md +14 -6
  3. package/.codeforge/config/orchestrator-system-prompt.md +333 -0
  4. package/{.devcontainer/config/defaults → .codeforge/config}/settings.json +3 -1
  5. package/{.devcontainer/config → .codeforge}/file-manifest.json +15 -9
  6. package/{.devcontainer → .codeforge/scripts}/connect-external-terminal.sh +3 -1
  7. package/.devcontainer/.env.example +5 -5
  8. package/.devcontainer/.secrets.example +3 -0
  9. package/.devcontainer/CHANGELOG.md +251 -3
  10. package/.devcontainer/CLAUDE.md +129 -22
  11. package/.devcontainer/README.md +34 -19
  12. package/.devcontainer/devcontainer.json +28 -10
  13. package/.devcontainer/features/agent-browser/install.sh +2 -0
  14. package/.devcontainer/features/ast-grep/install.sh +2 -0
  15. package/.devcontainer/features/biome/install.sh +2 -0
  16. package/.devcontainer/features/ccburn/devcontainer-feature.json +0 -5
  17. package/.devcontainer/features/ccburn/install.sh +2 -0
  18. package/.devcontainer/features/ccms/install.sh +2 -0
  19. package/.devcontainer/features/ccstatusline/README.md +7 -6
  20. package/.devcontainer/features/ccstatusline/install.sh +9 -4
  21. package/.devcontainer/features/ccusage/devcontainer-feature.json +0 -5
  22. package/.devcontainer/features/ccusage/install.sh +2 -0
  23. package/.devcontainer/features/chromaterm/chromaterm.yml +2 -2
  24. package/.devcontainer/features/chromaterm/install.sh +2 -0
  25. package/.devcontainer/features/claude-code-native/README.md +47 -0
  26. package/.devcontainer/features/claude-code-native/devcontainer-feature.json +29 -0
  27. package/.devcontainer/features/claude-code-native/install.sh +131 -0
  28. package/.devcontainer/features/claude-monitor/devcontainer-feature.json +0 -5
  29. package/.devcontainer/features/claude-monitor/install.sh +2 -0
  30. package/.devcontainer/features/claude-session-dashboard/README.md +2 -2
  31. package/.devcontainer/features/claude-session-dashboard/devcontainer-feature.json +1 -2
  32. package/.devcontainer/features/claude-session-dashboard/install.sh +2 -0
  33. package/.devcontainer/features/dprint/install.sh +2 -0
  34. package/.devcontainer/features/hadolint/install.sh +2 -0
  35. package/.devcontainer/features/kitty-terminfo/README.md +3 -1
  36. package/.devcontainer/features/kitty-terminfo/install.sh +2 -0
  37. package/.devcontainer/features/lsp-servers/install.sh +2 -0
  38. package/.devcontainer/features/mcp-qdrant/CHANGES.md +3 -3
  39. package/.devcontainer/features/mcp-qdrant/README.md +1 -0
  40. package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +1 -7
  41. package/.devcontainer/features/mcp-qdrant/install.sh +9 -2
  42. package/.devcontainer/features/mcp-qdrant/poststart-hook.sh +9 -2
  43. package/.devcontainer/features/notify-hook/devcontainer-feature.json +1 -1
  44. package/.devcontainer/features/notify-hook/install.sh +2 -0
  45. package/.devcontainer/features/ruff/install.sh +2 -0
  46. package/.devcontainer/features/shellcheck/install.sh +2 -0
  47. package/.devcontainer/features/shfmt/install.sh +2 -0
  48. package/.devcontainer/features/tmux/README.md +3 -3
  49. package/.devcontainer/features/tmux/install.sh +3 -1
  50. package/.devcontainer/features/tree-sitter/devcontainer-feature.json +0 -6
  51. package/.devcontainer/features/tree-sitter/install.sh +2 -0
  52. package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +27 -11
  53. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/README.md +23 -4
  54. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/claude-guide.md +4 -4
  55. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/documenter.md +254 -0
  56. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/implementer.md +260 -0
  57. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/investigator.md +255 -0
  58. package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/tester.md +304 -0
  59. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/README.md +1 -1
  60. package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/scripts/advisory-test-runner.py +4 -2
  61. package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py +2 -2
  62. package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/.claude-plugin/plugin.json +7 -0
  63. package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/README.md +125 -0
  64. package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/skills/pr-review/SKILL.md +325 -0
  65. package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/skills/ship/SKILL.md +314 -0
  66. package/.devcontainer/plugins/devs-marketplace/plugins/prompt-snippets/.claude-plugin/plugin.json +5 -0
  67. package/.devcontainer/plugins/devs-marketplace/plugins/prompt-snippets/README.md +52 -0
  68. package/.devcontainer/plugins/devs-marketplace/plugins/prompt-snippets/skills/ps/SKILL.md +37 -0
  69. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected-bash.py +1 -1
  70. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +1 -1
  71. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/README.md +30 -14
  72. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/hooks/hooks.json +13 -1
  73. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/scripts/collect-session-edits.py +44 -0
  74. package/.devcontainer/plugins/devs-marketplace/plugins/session-context/scripts/commit-reminder.py +89 -10
  75. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/.claude-plugin/plugin.json +1 -1
  76. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/README.md +19 -11
  77. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/scripts/skill-suggester.py +476 -282
  78. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/worktree/SKILL.md +227 -0
  79. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/worktree/references/manual-worktree-commands.md +238 -0
  80. package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/worktree/references/parallel-workflow-patterns.md +228 -0
  81. package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/scripts/ticket-linker.py +2 -2
  82. package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/README.md +1 -1
  83. package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py +3 -2
  84. package/.devcontainer/scripts/check-setup.sh +5 -3
  85. package/.devcontainer/scripts/preflight.sh +113 -0
  86. package/.devcontainer/scripts/setup-aliases.sh +13 -8
  87. package/.devcontainer/scripts/setup-auth.sh +46 -0
  88. package/.devcontainer/scripts/setup-config.sh +29 -10
  89. package/.devcontainer/scripts/setup-migrate-claude.sh +80 -0
  90. package/.devcontainer/scripts/setup-migrate-codeforge.sh +60 -0
  91. package/.devcontainer/scripts/setup-plugins.sh +3 -1
  92. package/.devcontainer/scripts/setup-projects.sh +3 -1
  93. package/.devcontainer/scripts/setup-terminal.sh +3 -1
  94. package/.devcontainer/scripts/setup-update-claude.sh +22 -27
  95. package/.devcontainer/scripts/setup.sh +57 -5
  96. package/LICENSE.txt +14 -0
  97. package/README.md +79 -5
  98. package/package.json +2 -1
  99. package/setup.js +392 -21
  100. package/.devcontainer/docs/configuration-reference.md +0 -93
  101. package/.devcontainer/docs/keybindings.md +0 -100
  102. package/.devcontainer/docs/optional-features.md +0 -64
  103. package/.devcontainer/docs/plugins.md +0 -176
  104. package/.devcontainer/docs/troubleshooting.md +0 -128
  105. package/.devcontainer/scripts/setup-symlink-claude.sh +0 -36
  106. /package/{.devcontainer/config/defaults → .codeforge/config}/keybindings.json +0 -0
  107. /package/{.devcontainer/config/defaults → .codeforge/config}/rules/session-search.md +0 -0
  108. /package/{.devcontainer/config/defaults → .codeforge/config}/rules/spec-workflow.md +0 -0
  109. /package/{.devcontainer/config/defaults → .codeforge/config}/rules/workspace-scope.md +0 -0
  110. /package/{.devcontainer/config/defaults → .codeforge/config}/writing-system-prompt.md +0 -0
  111. /package/{.devcontainer → .codeforge/scripts}/connect-external-terminal.ps1 +0 -0
@@ -1,100 +0,0 @@
1
- # Keybinding Customization
2
-
3
- Claude Code runs inside VS Code's integrated terminal. Some VS Code shortcuts are intercepted before reaching the terminal, conflicting with Claude Code's keybindings.
4
-
5
- ## Conflicts
6
-
7
- | Shortcut | VS Code Action | Claude Code Action |
8
- |----------|---------------|-------------------|
9
- | `Ctrl+G` | Go to Line | `chat:externalEditor` |
10
- | `Ctrl+S` | Save File | `chat:stash` |
11
- | `Ctrl+T` | Open Symbol | `app:toggleTodos` |
12
- | `Ctrl+O` | Open File | `app:toggleTranscript` |
13
- | `Ctrl+B` | Toggle Sidebar | `task:background` |
14
- | `Ctrl+P` | Quick Open | `chat:modelPicker` |
15
- | `Ctrl+R` | Open Recent | `history:search` |
16
- | `Ctrl+F` | Find in Terminal | (navigation) |
17
-
18
- ## Already Resolved
19
-
20
- `Ctrl+P` and `Ctrl+F` are configured to pass through to Claude Code via `terminal.integrated.commandsToSkipShell` in `devcontainer.json`:
21
-
22
- ```json
23
- "terminal.integrated.commandsToSkipShell": [
24
- "-workbench.action.quickOpen",
25
- "-workbench.action.terminal.focusFind"
26
- ]
27
- ```
28
-
29
- The `-` prefix removes the shortcut from VS Code's interception list when the terminal is focused.
30
-
31
- ## Resolving Other Conflicts
32
-
33
- ### Option 1: Use Meta (Alt) Variants
34
-
35
- Claude Code binds Meta (Alt) variants for all shortcuts. Use `Alt+G` instead of `Ctrl+G`, etc. No configuration needed.
36
-
37
- ### Option 2: Add to VS Code's Skip List
38
-
39
- Add more shortcuts to `terminal.integrated.commandsToSkipShell` in `devcontainer.json`:
40
-
41
- ```json
42
- "terminal.integrated.commandsToSkipShell": [
43
- "-workbench.action.quickOpen",
44
- "-workbench.action.terminal.focusFind",
45
- "-workbench.action.gotoLine",
46
- "-workbench.action.files.save"
47
- ]
48
- ```
49
-
50
- Common command IDs:
51
- | Shortcut | Command ID |
52
- |----------|-----------|
53
- | `Ctrl+G` | `workbench.action.gotoLine` |
54
- | `Ctrl+S` | `workbench.action.files.save` |
55
- | `Ctrl+T` | `workbench.action.showAllSymbols` |
56
- | `Ctrl+O` | `workbench.action.files.openFile` |
57
- | `Ctrl+B` | `workbench.action.toggleSidebarVisibility` |
58
- | `Ctrl+R` | `workbench.action.openRecent` |
59
-
60
- ### Option 3: Custom Claude Code Keybindings
61
-
62
- Edit `config/defaults/keybindings.json` to remap Claude Code actions to non-conflicting shortcuts:
63
-
64
- ```json
65
- {
66
- "bindings": [
67
- {
68
- "key": "ctrl+shift+g",
69
- "command": "chat:externalEditor",
70
- "description": "Open external editor (remapped from Ctrl+G)"
71
- },
72
- {
73
- "key": "ctrl+shift+s",
74
- "command": "chat:stash",
75
- "description": "Stash conversation (remapped from Ctrl+S)"
76
- }
77
- ]
78
- }
79
- ```
80
-
81
- The keybindings file is copied to `/workspaces/.claude/keybindings.json` on container start (controlled by `file-manifest.json`).
82
-
83
- ## Claude Code Keybinding Reference
84
-
85
- Full list of default Claude Code shortcuts (these work when Claude Code has terminal focus):
86
-
87
- | Key | Action |
88
- |-----|--------|
89
- | `Ctrl+C` / `Esc` | Cancel / Interrupt |
90
- | `Ctrl+L` | Clear screen |
91
- | `Ctrl+P` | Model picker |
92
- | `Ctrl+R` | Search history |
93
- | `Ctrl+G` | External editor |
94
- | `Ctrl+S` | Stash conversation |
95
- | `Ctrl+T` | Toggle todos |
96
- | `Ctrl+O` | Toggle transcript |
97
- | `Ctrl+B` | Background current task |
98
- | `Ctrl+F` | Find in output |
99
-
100
- All of these also have `Meta` (Alt) variants that work even when VS Code intercepts the `Ctrl` version.
@@ -1,64 +0,0 @@
1
- # Optional Features
2
-
3
- CodeForge includes several features that are available but not enabled by default. This guide covers how to enable and configure them.
4
-
5
- ## mcp-qdrant (Vector Memory for Claude)
6
-
7
- Adds persistent vector memory to Claude Code via a Qdrant MCP server. Claude can store and retrieve information across sessions.
8
-
9
- ### Enabling
10
-
11
- Add to `devcontainer.json` under `"features"`:
12
-
13
- ```json
14
- "./features/mcp-qdrant": {
15
- "collectionName": "my-project-memory",
16
- "embeddingModel": "all-MiniLM-L6-v2"
17
- }
18
- ```
19
-
20
- ### Options
21
-
22
- | Option | Default | Description |
23
- |--------|---------|-------------|
24
- | `collectionName` | `agent-memory` | Qdrant collection name |
25
- | `embeddingModel` | `all-MiniLM-L6-v2` | Embedding model for vector search |
26
- | `qdrantUrl` | (empty) | Remote Qdrant server URL. If empty, uses local storage. |
27
- | `qdrantApiKey` | (empty) | API key for remote Qdrant server |
28
- | `qdrantLocalPath` | `/workspaces/.qdrant/storage` | Local storage path (when no URL set) |
29
-
30
- ### Supported Embedding Models
31
-
32
- - `all-MiniLM-L6-v2` (default, smallest, fastest)
33
- - `BAAI/bge-small-en-v1.5`
34
- - `BAAI/bge-base-en-v1.5`
35
- - `sentence-transformers/all-mpnet-base-v2`
36
-
37
- ### Prerequisites
38
-
39
- Already met by default container: Python 3.14 and uv are pre-installed.
40
-
41
- ### How It Works
42
-
43
- 1. During container build, the embedding model is pre-downloaded from GCS (not HuggingFace, to avoid network issues in containers).
44
- 2. On container start, a post-start hook registers the Qdrant MCP server in Claude Code's `settings.json`.
45
- 3. Claude Code can then use `qdrant-store` and `qdrant-find` tools to persist and search memories.
46
-
47
- ### Verification
48
-
49
- ```bash
50
- uvx mcp-server-qdrant --help
51
- ```
52
-
53
- ---
54
-
55
- ## Disabling Default Features
56
-
57
- Any feature can be disabled without removing it from `devcontainer.json` by setting `"version": "none"`:
58
-
59
- ```json
60
- "./features/hadolint": { "version": "none" },
61
- "./features/shellcheck": { "version": "none" }
62
- ```
63
-
64
- The feature entry stays in the config for easy re-enabling — just remove `"version": "none"` or set it to `"latest"`.
@@ -1,176 +0,0 @@
1
- # Plugin System
2
-
3
- CodeForge includes a local plugin marketplace that provides specialized tools and hooks for Claude Code.
4
-
5
- ## Architecture
6
-
7
- ```
8
- plugins/devs-marketplace/
9
- ├── .claude-plugin/
10
- │ └── marketplace.json # Marketplace manifest (lists all plugins)
11
- └── plugins/
12
- ├── codeforge-lsp/ # LSP language servers
13
- ├── ticket-workflow/ # EARS ticket workflow
14
- ├── notify-hook/ # Desktop notifications
15
- ├── dangerous-command-blocker/ # Safety: block destructive commands
16
- ├── protected-files-guard/ # Safety: protect sensitive files
17
- ├── auto-code-quality/ # Batch formatter + linter + advisory test runner
18
- ├── agent-system/ # 17 custom agents + redirection hooks
19
- ├── skill-engine/ # 21 coding skills + auto-suggestion
20
- ├── spec-workflow/ # 8 spec lifecycle skills + spec-reminder
21
- ├── session-context/ # Git state, TODO harvesting, commit reminders
22
- └── workspace-scope-guard/ # Workspace scope enforcement
23
- ```
24
-
25
- Each plugin has a `.claude-plugin/plugin.json` manifest defining its name, description, and capabilities.
26
-
27
- ## Enabling/Disabling Plugins
28
-
29
- Plugins are enabled in `config/defaults/settings.json` under `enabledPlugins`:
30
-
31
- ```json
32
- "enabledPlugins": [
33
- "auto-code-quality@devs-marketplace",
34
- "agent-system@devs-marketplace",
35
- "skill-engine@devs-marketplace",
36
- "spec-workflow@devs-marketplace",
37
- "session-context@devs-marketplace"
38
- ]
39
- ```
40
-
41
- To disable a plugin, remove its entry from the `enabledPlugins` array.
42
-
43
- ## PLUGIN_BLACKLIST
44
-
45
- To skip a plugin during the installation/registration step (without editing `settings.json`), add it to `PLUGIN_BLACKLIST` in `.env`:
46
-
47
- ```bash
48
- PLUGIN_BLACKLIST="ticket-workflow,auto-linter"
49
- ```
50
-
51
- This prevents the plugin from being registered on container start but doesn't remove it from `enabledPlugins`.
52
-
53
- ---
54
-
55
- ## Plugin Reference
56
-
57
- ### codeforge-lsp
58
-
59
- **Purpose**: Provides Language Server Protocol servers for code intelligence.
60
-
61
- **Servers**:
62
- - **Pyright** — Python type checking and completion (`.py`, `.pyi`)
63
- - **TypeScript Language Server** — TypeScript/JavaScript (`.ts`, `.tsx`, `.js`, `.jsx`, `.mts`, `.cts`, `.mjs`, `.cjs`)
64
- - **gopls** — Go language server (`.go`, `.mod`, `.sum`)
65
-
66
- Claude Code automatically uses these for hover info, go-to-definition, and find-references.
67
-
68
- ### ticket-workflow
69
-
70
- **Purpose**: EARS-based ticket workflow with GitHub integration.
71
-
72
- Provides structured ticket management using EARS (Easy Approach to Requirements Syntax) format. Integrates with GitHub Issues for tracking.
73
-
74
- **Commands**: `/ticket:new`, `/ticket:work`, `/ticket:review-commit`, `/ticket:create-pr`
75
-
76
- ### notify-hook
77
-
78
- **Purpose**: Desktop notifications when Claude Code finishes responding.
79
-
80
- Sends an OSC escape sequence and terminal bell when Claude completes a response, triggering desktop notifications in supported terminals (WezTerm, iTerm2, VS Code with the OSC notifier extension).
81
-
82
- **Configuration**: Enabled via `devcontainer.json` feature options:
83
- ```json
84
- "./features/notify-hook": {
85
- "enableBell": true,
86
- "enableOsc": true
87
- }
88
- ```
89
-
90
- ### dangerous-command-blocker
91
-
92
- **Purpose**: Prevents Claude Code from executing destructive bash commands.
93
-
94
- **Blocked patterns**:
95
- - `rm -rf /` and variants
96
- - `sudo rm` on system directories
97
- - `chmod 777` on sensitive paths
98
- - `git push --force` to protected branches
99
- - `dd` with output to block devices
100
- - Other destructive system commands
101
-
102
- The blocker runs as a PreToolUse hook on Bash commands. It checks the command against a pattern list and rejects matches.
103
-
104
- ### protected-files-guard
105
-
106
- **Purpose**: Prevents Claude Code from modifying sensitive files.
107
-
108
- **Protected patterns**:
109
- - `.env` and `.secrets` files
110
- - Lock files (`package-lock.json`, `uv.lock`, `Cargo.lock`, etc.)
111
- - `.git/` directory contents
112
- - Credential files and SSH keys
113
-
114
- Runs as a PreToolUse hook on Write and Edit operations.
115
-
116
- ### auto-code-quality
117
-
118
- **Purpose**: Batch-formats, lints, and runs advisory tests on files edited during a Claude Code session.
119
-
120
- **Supported formatters**:
121
- | Language | Formatter |
122
- |----------|-----------|
123
- | Python | Ruff |
124
- | Go | gofmt |
125
- | JavaScript/TypeScript/CSS/JSON/GraphQL/HTML | Biome |
126
- | Shell scripts | shfmt |
127
- | Markdown/YAML/TOML/Dockerfile | dprint |
128
- | Rust | rustfmt |
129
-
130
- **Supported linters**:
131
- | Language | Linter |
132
- |----------|--------|
133
- | Python | Pyright + Ruff |
134
- | JavaScript/TypeScript/CSS/GraphQL | Biome |
135
- | Shell scripts | ShellCheck |
136
- | Go | go vet |
137
- | Dockerfile | hadolint |
138
- | Rust | clippy |
139
-
140
- **How it works**: Runs as a Stop hook. When Claude Code stops, it checks which files were edited, detects their language, and runs the appropriate formatter and linter. Also includes an advisory test runner that runs affected tests. Results are informational — they don't block.
141
-
142
- ### agent-system
143
-
144
- **Purpose**: 17 specialized agent definitions with built-in agent redirection.
145
-
146
- **Components**:
147
- - **17 custom agents** — Specialized agent definitions for different task types (architect, explorer, test-writer, refactorer, security-auditor, researcher, doc-writer, etc.)
148
- - **Agent redirection hook** — Transparently swaps built-in agent types to custom agents (e.g., `Explore` → `explorer`, `Plan` → `architect`)
149
- - **CWD injection hook** — Injects current working directory into agent prompts
150
- - **Read-only bash enforcement** — Prevents read-only agents from executing write operations
151
-
152
- For detailed agent documentation, see `plugins/devs-marketplace/plugins/agent-system/agents/`.
153
-
154
- ### skill-engine
155
-
156
- **Purpose**: 21 domain-specific coding reference skills with auto-suggestion.
157
-
158
- **Skills**: fastapi, svelte5, docker, docker-py, pydantic-ai, sqlite, testing, debugging, security-checklist, refactoring-patterns, git-forensics, performance-profiling, documentation-patterns, migration-patterns, dependency-management, claude-code-headless, claude-agent-sdk, ast-grep-patterns, api-design, skill-building, team
159
-
160
- **How it works**: Skills are loaded on demand via the Skill tool. A PreToolUse hook auto-suggests relevant skills based on conversation context.
161
-
162
- For skill details, see `plugins/devs-marketplace/plugins/skill-engine/skills/`.
163
-
164
- ### spec-workflow
165
-
166
- **Purpose**: 8 spec lifecycle skills with spec-reminder hook.
167
-
168
- **Skills**: spec-new, spec-refine, spec-build, spec-review, spec-update, spec-check, spec-init, specification-writing
169
-
170
- **How it works**: Provides a structured specification workflow. A Stop hook reminds users to update specs when code was modified but specs weren't.
171
-
172
- ### workspace-scope-guard
173
-
174
- **Purpose**: Enforces workspace scope by blocking writes outside the working directory and warning on out-of-scope reads.
175
-
176
- Runs as a PreToolUse hook on Write, Edit, and Read operations. Compares file paths against the current working directory and rejects modifications to files outside the project scope. Read operations outside scope produce a warning but are not blocked. Resolves symlinks and worktree paths correctly via `os.path.realpath()`.
@@ -1,128 +0,0 @@
1
- # Troubleshooting
2
-
3
- Common issues and solutions for the CodeForge devcontainer.
4
-
5
- ## Container Build Failures
6
-
7
- **Problem**: Container fails to build during feature installation.
8
-
9
- - Check Docker has sufficient memory (6GB+ recommended). CodeForge sets `--memory=6g` by default.
10
- - If a specific feature fails, disable it temporarily by setting `"version": "none"` in `devcontainer.json`.
11
- - Check internet connectivity — most features download binaries from GitHub releases.
12
- - If hitting GitHub API rate limits during build, set `GH_TOKEN` or `GITHUB_TOKEN` as an environment variable.
13
-
14
- **Problem**: Build is slow or hangs.
15
-
16
- - The mcp-qdrant feature downloads an embedding model (~90MB). This is normal on first build.
17
- - The mcp-reasoner feature clones and builds a Node.js project. This takes 1-2 minutes.
18
- - Use `"version": "none"` to skip optional features you don't need.
19
-
20
- ## Authentication Issues
21
-
22
- **Problem**: `claude` command fails with authentication error.
23
-
24
- - Run `claude` once interactively to complete authentication.
25
- - If using API key auth, verify `ANTHROPIC_API_KEY` is set correctly.
26
- - Background update may be in progress — wait 10 seconds and retry.
27
-
28
- **Problem**: `gh` CLI not authenticated.
29
-
30
- - Run `gh auth status` to check current state.
31
- - Run `gh auth login` for interactive setup.
32
- - Or configure `.devcontainer/.secrets` with `GH_TOKEN` for automatic auth on container start.
33
- - Credentials persist in `/workspaces/.gh/` across rebuilds.
34
-
35
- **Problem**: Git push fails with permission error.
36
-
37
- - Run `gh auth status` to verify authentication.
38
- - Check git remote URL: `git remote -v`. HTTPS remotes require `gh` auth; SSH remotes require SSH keys.
39
- - Verify `git config --global user.name` and `user.email` are set.
40
-
41
- **Problem**: NPM publish/install fails with 401.
42
-
43
- - Set `NPM_TOKEN` in `.devcontainer/.secrets` or as environment variable.
44
- - Verify token: `npm whoami`.
45
-
46
- ## Feature Installation Failures
47
-
48
- **Problem**: Feature checksum verification fails.
49
-
50
- - This usually means a corrupted download. Rebuild the container to retry.
51
- - If persistent, the release may have been re-tagged. Try pinning a specific version in `devcontainer.json`.
52
-
53
- **Problem**: Feature download fails after retries.
54
-
55
- - Check internet connectivity.
56
- - GitHub may be experiencing issues — check [githubstatus.com](https://www.githubstatus.com/).
57
- - Set `GH_TOKEN` environment variable to avoid rate limiting.
58
-
59
- **Problem**: Permission denied during feature install.
60
-
61
- - Features run as root during build. This shouldn't happen in normal use.
62
- - If modifying features, ensure `install.sh` has `chmod +x` and starts with `#!/bin/bash`.
63
-
64
- ## Plugin Issues
65
-
66
- **Problem**: Plugin not loading or not appearing in Claude Code.
67
-
68
- - Check `enabledPlugins` in `config/defaults/settings.json` — the plugin must be listed there.
69
- - Verify the plugin directory exists under `plugins/devs-marketplace/plugins/`.
70
- - Run `check-setup` to verify core configuration is correct.
71
- - Check plugin blacklist: ensure it's not in `PLUGIN_BLACKLIST` in `.env`.
72
-
73
- **Problem**: Auto-formatter or auto-linter not running.
74
-
75
- - These run on the Stop hook — they only trigger when Claude Code stops (end of conversation turn).
76
- - Verify the underlying tools are installed: `cc-tools` lists all available tools.
77
- - Check the 30-second timeout hasn't been exceeded (large file sets may hit this).
78
-
79
- ## Agent Teams / tmux Issues
80
-
81
- **Problem**: Split panes not working.
82
-
83
- - Agent Teams requires tmux. Use the **"Claude Teams (tmux)"** terminal profile in VS Code.
84
- - Verify tmux is installed: `tmux -V`.
85
- - If using an external terminal, connect via `connect-external-terminal.sh`.
86
-
87
- **Problem**: tmux Unicode/emoji rendering broken.
88
-
89
- - Ensure locale is set: `echo $LANG` should show `en_US.UTF-8`.
90
- - If not, run `source ~/.bashrc` or open a new terminal.
91
-
92
- ## "Command Not Found" Errors
93
-
94
- **Problem**: `cc: command not found` or similar.
95
-
96
- - Run `source ~/.bashrc` (or `~/.zshrc`) to reload aliases.
97
- - Or open a new terminal.
98
- - Verify setup ran: check for `# Claude Code environment and aliases` in your rc file.
99
-
100
- **Problem**: Tool not found (e.g., `ruff`, `dprint`).
101
-
102
- - Run `cc-tools` to see which tools are installed.
103
- - Check if the feature was disabled with `"version": "none"` in `devcontainer.json`.
104
- - Some tools (like `ruff`) install to `~/.local/bin` — ensure it's in your PATH.
105
-
106
- ## Performance Issues
107
-
108
- **Problem**: Container is slow or running out of memory.
109
-
110
- - CodeForge defaults to 6GB RAM / 12GB swap. Increase in `devcontainer.json` `runArgs`.
111
- - Disable features you don't need with `"version": "none"`.
112
- - The background Claude Code update runs once on startup — it's not persistent.
113
-
114
- **Problem**: Slow startup.
115
-
116
- - First start is slower due to `postStartCommand` running all setup scripts.
117
- - Subsequent starts skip unchanged config files (sha256 comparison).
118
- - Disable steps you don't need via `.env` (e.g., `SETUP_PROJECTS=false`).
119
-
120
- ## How to Reset to Defaults
121
-
122
- 1. **Reset config files**: Delete `/workspaces/.claude/` and restart the container. `setup-config.sh` will recopy all files from `config/defaults/`.
123
-
124
- 2. **Reset aliases**: Delete the `# Claude Code environment and aliases` block from `~/.bashrc` and `~/.zshrc`, then run `bash /workspaces/.devcontainer/scripts/setup-aliases.sh`.
125
-
126
- 3. **Full reset**: Rebuild the container from scratch (VS Code: "Dev Containers: Rebuild Container").
127
-
128
- 4. **Reset a single feature**: Set it to `"version": "none"`, rebuild, then set it back to the desired version and rebuild again.
@@ -1,36 +0,0 @@
1
- #!/bin/bash
2
- # Symlink $HOME/.claude → $CLAUDE_CONFIG_DIR so third-party tools
3
- # (ccburn, ccusage, etc.) that hardcode ~/.claude can find auth and config.
4
-
5
- CLAUDE_DIR="${CLAUDE_CONFIG_DIR:=/workspaces/.claude}"
6
- HOME_CLAUDE="$HOME/.claude"
7
-
8
- echo "[setup-symlink] Ensuring $HOME_CLAUDE → $CLAUDE_DIR ..."
9
-
10
- # Already a correct symlink — nothing to do
11
- if [ -L "$HOME_CLAUDE" ]; then
12
- CURRENT_TARGET="$(readlink "$HOME_CLAUDE")"
13
- if [ "$CURRENT_TARGET" = "$CLAUDE_DIR" ]; then
14
- echo "[setup-symlink] Symlink already correct, skipping"
15
- exit 0
16
- fi
17
- # Points somewhere else — remove stale symlink
18
- echo "[setup-symlink] Removing stale symlink ($CURRENT_TARGET)"
19
- rm "$HOME_CLAUDE"
20
- fi
21
-
22
- # Real directory exists — merge contents into target, then remove
23
- if [ -d "$HOME_CLAUDE" ]; then
24
- echo "[setup-symlink] Moving existing $HOME_CLAUDE contents into $CLAUDE_DIR"
25
- mkdir -p "$CLAUDE_DIR"
26
- # Copy contents preserving attributes; skip files that already exist in target
27
- cp -rn "$HOME_CLAUDE/." "$CLAUDE_DIR/" 2>/dev/null || true
28
- rm -rf "$HOME_CLAUDE"
29
- fi
30
-
31
- # Ensure target exists
32
- mkdir -p "$CLAUDE_DIR"
33
-
34
- # Create symlink
35
- ln -s "$CLAUDE_DIR" "$HOME_CLAUDE"
36
- echo "[setup-symlink] Created symlink: $HOME_CLAUDE → $CLAUDE_DIR"