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.
- package/{.devcontainer/config/defaults → .codeforge/config}/ccstatusline-settings.json +44 -6
- package/{.devcontainer/config/defaults → .codeforge/config}/main-system-prompt.md +14 -6
- package/.codeforge/config/orchestrator-system-prompt.md +333 -0
- package/{.devcontainer/config/defaults → .codeforge/config}/settings.json +3 -1
- package/{.devcontainer/config → .codeforge}/file-manifest.json +15 -9
- package/{.devcontainer → .codeforge/scripts}/connect-external-terminal.sh +3 -1
- package/.devcontainer/.env.example +5 -5
- package/.devcontainer/.secrets.example +3 -0
- package/.devcontainer/CHANGELOG.md +251 -3
- package/.devcontainer/CLAUDE.md +129 -22
- package/.devcontainer/README.md +34 -19
- package/.devcontainer/devcontainer.json +28 -10
- package/.devcontainer/features/agent-browser/install.sh +2 -0
- package/.devcontainer/features/ast-grep/install.sh +2 -0
- package/.devcontainer/features/biome/install.sh +2 -0
- package/.devcontainer/features/ccburn/devcontainer-feature.json +0 -5
- package/.devcontainer/features/ccburn/install.sh +2 -0
- package/.devcontainer/features/ccms/install.sh +2 -0
- package/.devcontainer/features/ccstatusline/README.md +7 -6
- package/.devcontainer/features/ccstatusline/install.sh +9 -4
- package/.devcontainer/features/ccusage/devcontainer-feature.json +0 -5
- package/.devcontainer/features/ccusage/install.sh +2 -0
- package/.devcontainer/features/chromaterm/chromaterm.yml +2 -2
- package/.devcontainer/features/chromaterm/install.sh +2 -0
- package/.devcontainer/features/claude-code-native/README.md +47 -0
- package/.devcontainer/features/claude-code-native/devcontainer-feature.json +29 -0
- package/.devcontainer/features/claude-code-native/install.sh +131 -0
- package/.devcontainer/features/claude-monitor/devcontainer-feature.json +0 -5
- package/.devcontainer/features/claude-monitor/install.sh +2 -0
- package/.devcontainer/features/claude-session-dashboard/README.md +2 -2
- package/.devcontainer/features/claude-session-dashboard/devcontainer-feature.json +1 -2
- package/.devcontainer/features/claude-session-dashboard/install.sh +2 -0
- package/.devcontainer/features/dprint/install.sh +2 -0
- package/.devcontainer/features/hadolint/install.sh +2 -0
- package/.devcontainer/features/kitty-terminfo/README.md +3 -1
- package/.devcontainer/features/kitty-terminfo/install.sh +2 -0
- package/.devcontainer/features/lsp-servers/install.sh +2 -0
- package/.devcontainer/features/mcp-qdrant/CHANGES.md +3 -3
- package/.devcontainer/features/mcp-qdrant/README.md +1 -0
- package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +1 -7
- package/.devcontainer/features/mcp-qdrant/install.sh +9 -2
- package/.devcontainer/features/mcp-qdrant/poststart-hook.sh +9 -2
- package/.devcontainer/features/notify-hook/devcontainer-feature.json +1 -1
- package/.devcontainer/features/notify-hook/install.sh +2 -0
- package/.devcontainer/features/ruff/install.sh +2 -0
- package/.devcontainer/features/shellcheck/install.sh +2 -0
- package/.devcontainer/features/shfmt/install.sh +2 -0
- package/.devcontainer/features/tmux/README.md +3 -3
- package/.devcontainer/features/tmux/install.sh +3 -1
- package/.devcontainer/features/tree-sitter/devcontainer-feature.json +0 -6
- package/.devcontainer/features/tree-sitter/install.sh +2 -0
- package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +27 -11
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/README.md +23 -4
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/claude-guide.md +4 -4
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/documenter.md +254 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/implementer.md +260 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/investigator.md +255 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/agents/tester.md +304 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/README.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-code-quality/scripts/advisory-test-runner.py +4 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py +2 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/README.md +125 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/skills/pr-review/SKILL.md +325 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/git-workflow/skills/ship/SKILL.md +314 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/prompt-snippets/.claude-plugin/plugin.json +5 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/prompt-snippets/README.md +52 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/prompt-snippets/skills/ps/SKILL.md +37 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected-bash.py +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/README.md +30 -14
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/hooks/hooks.json +13 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/scripts/collect-session-edits.py +44 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/scripts/commit-reminder.py +89 -10
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/.claude-plugin/plugin.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/README.md +19 -11
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/scripts/skill-suggester.py +476 -282
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/worktree/SKILL.md +227 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/worktree/references/manual-worktree-commands.md +238 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/worktree/references/parallel-workflow-patterns.md +228 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/scripts/ticket-linker.py +2 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/README.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py +3 -2
- package/.devcontainer/scripts/check-setup.sh +5 -3
- package/.devcontainer/scripts/preflight.sh +113 -0
- package/.devcontainer/scripts/setup-aliases.sh +13 -8
- package/.devcontainer/scripts/setup-auth.sh +46 -0
- package/.devcontainer/scripts/setup-config.sh +29 -10
- package/.devcontainer/scripts/setup-migrate-claude.sh +80 -0
- package/.devcontainer/scripts/setup-migrate-codeforge.sh +60 -0
- package/.devcontainer/scripts/setup-plugins.sh +3 -1
- package/.devcontainer/scripts/setup-projects.sh +3 -1
- package/.devcontainer/scripts/setup-terminal.sh +3 -1
- package/.devcontainer/scripts/setup-update-claude.sh +22 -27
- package/.devcontainer/scripts/setup.sh +57 -5
- package/LICENSE.txt +14 -0
- package/README.md +79 -5
- package/package.json +2 -1
- package/setup.js +392 -21
- package/.devcontainer/docs/configuration-reference.md +0 -93
- package/.devcontainer/docs/keybindings.md +0 -100
- package/.devcontainer/docs/optional-features.md +0 -64
- package/.devcontainer/docs/plugins.md +0 -176
- package/.devcontainer/docs/troubleshooting.md +0 -128
- package/.devcontainer/scripts/setup-symlink-claude.sh +0 -36
- /package/{.devcontainer/config/defaults → .codeforge/config}/keybindings.json +0 -0
- /package/{.devcontainer/config/defaults → .codeforge/config}/rules/session-search.md +0 -0
- /package/{.devcontainer/config/defaults → .codeforge/config}/rules/spec-workflow.md +0 -0
- /package/{.devcontainer/config/defaults → .codeforge/config}/rules/workspace-scope.md +0 -0
- /package/{.devcontainer/config/defaults → .codeforge/config}/writing-system-prompt.md +0 -0
- /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"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|