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
package/.devcontainer/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CodeForge Usage Guide
|
|
2
2
|
|
|
3
|
-
Everything you need to know once you're inside the devcontainer.
|
|
3
|
+
Everything you need to know once you're inside the devcontainer. These instructions apply regardless of which client you used to start the container — VS Code, the `devcontainer` CLI, JetBrains Gateway, DevPod, or GitHub Codespaces.
|
|
4
4
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
@@ -40,7 +40,20 @@ Get an API key from [console.anthropic.com](https://console.anthropic.com/).
|
|
|
40
40
|
|
|
41
41
|
### Credential Persistence
|
|
42
42
|
|
|
43
|
-
Authentication credentials are stored in
|
|
43
|
+
Authentication credentials are stored in `~/.claude/` and persist across container rebuilds via a Docker named volume.
|
|
44
|
+
|
|
45
|
+
### Long-Lived Token Authentication
|
|
46
|
+
|
|
47
|
+
For headless or automated environments, you can use a long-lived auth token instead of browser login:
|
|
48
|
+
|
|
49
|
+
1. Generate a token: `claude setup-token`
|
|
50
|
+
2. Add to `.devcontainer/.secrets`:
|
|
51
|
+
```bash
|
|
52
|
+
CLAUDE_AUTH_TOKEN=sk-ant-oat01-your-token-here
|
|
53
|
+
```
|
|
54
|
+
3. On next container start, `setup-auth.sh` will create `~/.claude/.credentials.json` automatically.
|
|
55
|
+
|
|
56
|
+
You can also set `CLAUDE_AUTH_TOKEN` as a Codespaces secret for cloud environments.
|
|
44
57
|
|
|
45
58
|
For more options, see the [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code).
|
|
46
59
|
|
|
@@ -111,7 +124,7 @@ Expected output shows your authenticated account and token scopes.
|
|
|
111
124
|
|
|
112
125
|
### Credential Persistence
|
|
113
126
|
|
|
114
|
-
GitHub CLI credentials are automatically persisted across container rebuilds. The container is configured to store credentials in `/workspaces/.gh/` (via `GH_CONFIG_DIR`), which is part of the bind-mounted workspace.
|
|
127
|
+
GitHub CLI credentials are automatically persisted across container rebuilds. The container is configured to store credentials in `/workspaces/.gh/` (via `GH_CONFIG_DIR`), which is part of the bind-mounted workspace. Claude Code credentials persist via a Docker named volume mounted at `~/.claude/`.
|
|
115
128
|
|
|
116
129
|
**You only need to authenticate once.** After running `gh auth login` or configuring `.secrets`, your credentials will survive container rebuilds and be available in future sessions.
|
|
117
130
|
|
|
@@ -119,7 +132,7 @@ GitHub CLI credentials are automatically persisted across container rebuilds. Th
|
|
|
119
132
|
|
|
120
133
|
### The `cc` Command
|
|
121
134
|
|
|
122
|
-
The `cc` command is an alias that launches Claude Code with the project's system prompt and plan-mode permissions. For Agent Teams split-pane support, use the **"Claude Teams (tmux)"** terminal profile in VS Code (dropdown next to the `+` button) or connect via
|
|
135
|
+
The `cc` command is an alias that launches Claude Code with the project's system prompt and plan-mode permissions. For Agent Teams split-pane support, use the **"Claude Teams (tmux)"** terminal profile in VS Code (dropdown next to the `+` button) or connect via `.codeforge/scripts/connect-external-terminal.sh`.
|
|
123
136
|
|
|
124
137
|
```bash
|
|
125
138
|
cc # Start Claude Code in current directory
|
|
@@ -199,7 +212,7 @@ Copy `.devcontainer/.env.example` to `.devcontainer/.env` and customize:
|
|
|
199
212
|
|
|
200
213
|
| Variable | Default | Description |
|
|
201
214
|
|----------|---------|-------------|
|
|
202
|
-
| `CLAUDE_CONFIG_DIR` | `/
|
|
215
|
+
| `CLAUDE_CONFIG_DIR` | `/home/vscode/.claude` | Claude configuration directory |
|
|
203
216
|
| `SETUP_CONFIG` | `true` | Copy config files during setup (per `file-manifest.json`) |
|
|
204
217
|
| `SETUP_ALIASES` | `true` | Add `cc`/`claude`/`ccraw` aliases to shell |
|
|
205
218
|
| `SETUP_AUTH` | `true` | Configure Git/NPM auth from `.secrets` |
|
|
@@ -212,7 +225,7 @@ Copy `.devcontainer/.env.example` to `.devcontainer/.env` and customize:
|
|
|
212
225
|
|
|
213
226
|
### Claude Code Settings
|
|
214
227
|
|
|
215
|
-
Default settings are in `.
|
|
228
|
+
Default settings are in `.codeforge/config/settings.json`. File copying is controlled by `.codeforge/file-manifest.json`, which specifies per-file overwrite behavior (`"if-changed"`, `"always"`, or `"never"`).
|
|
216
229
|
|
|
217
230
|
To add a custom config file, append an entry to `file-manifest.json`:
|
|
218
231
|
```json
|
|
@@ -230,7 +243,7 @@ Key defaults:
|
|
|
230
243
|
|
|
231
244
|
### Keybindings
|
|
232
245
|
|
|
233
|
-
Default keybindings are in `.
|
|
246
|
+
Default keybindings are in `.codeforge/config/keybindings.json` (empty by default — Claude Code defaults apply). Customize by adding entries to the `bindings` array.
|
|
234
247
|
|
|
235
248
|
**VS Code Terminal Passthrough**: `Ctrl+P` and `Ctrl+F` are configured to pass through to the terminal (via `terminal.integrated.commandsToSkipShell`) so Claude Code receives them. Other VS Code shortcuts that conflict with Claude Code:
|
|
236
249
|
|
|
@@ -247,7 +260,7 @@ For conflicting shortcuts, use Meta (Alt) variants or add custom keybindings.
|
|
|
247
260
|
|
|
248
261
|
### System Prompt
|
|
249
262
|
|
|
250
|
-
The default system prompt is in `.
|
|
263
|
+
The default system prompt is in `.codeforge/config/main-system-prompt.md`. Override it by creating a `.claude/main-system-prompt.md` in your project directory.
|
|
251
264
|
|
|
252
265
|
## Custom Features
|
|
253
266
|
|
|
@@ -301,6 +314,8 @@ Three methods for providing GitHub/NPM credentials, in order of precedence:
|
|
|
301
314
|
|
|
302
315
|
All methods persist across container rebuilds via the bind-mounted `/workspaces/.gh/` directory.
|
|
303
316
|
|
|
317
|
+
4. **`.secrets` file with `CLAUDE_AUTH_TOKEN`** — Long-lived Claude auth token from `claude setup-token`. Auto-creates `~/.claude/.credentials.json` on container start.
|
|
318
|
+
|
|
304
319
|
## Agents & Skills
|
|
305
320
|
|
|
306
321
|
Agents and skills are distributed across focused plugins (replacing the former `code-directive` monolith).
|
|
@@ -329,11 +344,11 @@ Agent definitions in `plugins/devs-marketplace/plugins/agent-system/agents/` pro
|
|
|
329
344
|
| `statusline-config` | ccstatusline configuration |
|
|
330
345
|
| `test-writer` | Test authoring with pass verification |
|
|
331
346
|
|
|
332
|
-
### General Skills (
|
|
347
|
+
### General Skills (22) — `skill-engine` plugin
|
|
333
348
|
|
|
334
349
|
Skills in `plugins/devs-marketplace/plugins/skill-engine/skills/` provide domain-specific coding references:
|
|
335
350
|
|
|
336
|
-
`api-design` · `ast-grep-patterns` · `claude-agent-sdk` · `claude-code-headless` · `debugging` · `dependency-management` · `docker` · `docker-py` · `documentation-patterns` · `fastapi` · `git-forensics` · `migration-patterns` · `performance-profiling` · `pydantic-ai` · `refactoring-patterns` · `security-checklist` · `skill-building` · `sqlite` · `svelte5` · `team` · `testing`
|
|
351
|
+
`api-design` · `ast-grep-patterns` · `claude-agent-sdk` · `claude-code-headless` · `debugging` · `dependency-management` · `docker` · `docker-py` · `documentation-patterns` · `fastapi` · `git-forensics` · `migration-patterns` · `performance-profiling` · `pydantic-ai` · `refactoring-patterns` · `security-checklist` · `skill-building` · `sqlite` · `svelte5` · `team` · `testing` · `worktree`
|
|
337
352
|
|
|
338
353
|
### Spec Skills (8) — `spec-workflow` plugin
|
|
339
354
|
|
|
@@ -411,20 +426,20 @@ The `setup-projects.sh` script auto-detects projects under `/workspaces/` and ma
|
|
|
411
426
|
|
|
412
427
|
- **Authentication required**: Run `claude` once to authenticate before using `cc`
|
|
413
428
|
- **Plan mode default**: The container starts in "plan" mode, which prompts for approval before making changes
|
|
414
|
-
- **Config is managed by manifest**:
|
|
429
|
+
- **Config is managed by manifest**: `.codeforge/file-manifest.json` controls which files are copied and when — default `overwrite: "if-changed"` uses sha256 comparison. Persistent changes go in `.codeforge/config/settings.json`
|
|
415
430
|
- **GitHub auth persists**: Run `gh auth login` once or configure `.secrets`; credentials survive container rebuilds
|
|
416
|
-
- **Agent Teams needs tmux**: Split panes only work inside tmux. Use the "Claude Teams (tmux)" VS Code terminal profile or
|
|
431
|
+
- **Agent Teams needs tmux**: Split panes only work inside tmux. Use the "Claude Teams (tmux)" VS Code terminal profile or `.codeforge/scripts/connect-external-terminal.sh` from WezTerm/iTerm2
|
|
417
432
|
|
|
418
433
|
## Troubleshooting
|
|
419
434
|
|
|
420
|
-
Common issues and solutions. For detailed troubleshooting, see [
|
|
435
|
+
Common issues and solutions. For detailed troubleshooting, see the [Troubleshooting](https://codeforge.core-directive.com/reference/troubleshooting/) page on the docs site.
|
|
421
436
|
|
|
422
437
|
| Problem | Solution |
|
|
423
438
|
|---------|----------|
|
|
424
439
|
| `cc: command not found` | Run `source ~/.bashrc` or open a new terminal |
|
|
425
440
|
| `claude` fails during startup | Background update may be in progress — wait 10s and retry |
|
|
426
441
|
| GitHub push fails | Run `gh auth status` to check authentication |
|
|
427
|
-
| Plugin not loading | Check `enabledPlugins` in
|
|
442
|
+
| Plugin not loading | Check `enabledPlugins` in `.codeforge/config/settings.json` |
|
|
428
443
|
| Feature not installed | Check `devcontainer.json` for `"version": "none"` |
|
|
429
444
|
| Tool version/status | Run `cc-tools` to list all tools with version info |
|
|
430
445
|
| Full health check | Run `check-setup` to verify setup status |
|
|
@@ -432,11 +447,11 @@ Common issues and solutions. For detailed troubleshooting, see [docs/troubleshoo
|
|
|
432
447
|
## Further Reading
|
|
433
448
|
|
|
434
449
|
**CodeForge Documentation**:
|
|
435
|
-
- [Configuration Reference](
|
|
436
|
-
- [Plugin System](
|
|
437
|
-
- [Optional Features](
|
|
438
|
-
- [Keybinding Customization](
|
|
439
|
-
- [Troubleshooting](
|
|
450
|
+
- [Configuration Reference](https://codeforge.core-directive.com/customization/configuration/) — all env vars and config options
|
|
451
|
+
- [Plugin System](https://codeforge.core-directive.com/plugins/) — plugin architecture and per-plugin docs
|
|
452
|
+
- [Optional Features](https://codeforge.core-directive.com/customization/optional-features/) — mcp-qdrant and other optional components, disabling features
|
|
453
|
+
- [Keybinding Customization](https://codeforge.core-directive.com/customization/keybindings/) — resolving VS Code conflicts
|
|
454
|
+
- [Troubleshooting](https://codeforge.core-directive.com/reference/troubleshooting/) — common issues and solutions
|
|
440
455
|
|
|
441
456
|
**External**:
|
|
442
457
|
- [Claude Code Documentation](https://docs.anthropic.com/en/docs/claude-code)
|
|
@@ -5,11 +5,23 @@
|
|
|
5
5
|
"workspaceFolder": "/workspaces",
|
|
6
6
|
"workspaceMount": "source=${localWorkspaceFolder},target=/workspaces,type=bind",
|
|
7
7
|
|
|
8
|
+
"initializeCommand": "bash .devcontainer/scripts/preflight.sh",
|
|
9
|
+
|
|
10
|
+
"mounts": [
|
|
11
|
+
{
|
|
12
|
+
"source": "codeforge-claude-config-${devcontainerId}",
|
|
13
|
+
"target": "/home/vscode/.claude",
|
|
14
|
+
"type": "volume"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
|
|
8
18
|
"remoteEnv": {
|
|
9
19
|
"WORKSPACE_ROOT": "/workspaces",
|
|
10
|
-
"CLAUDE_CONFIG_DIR": "/
|
|
20
|
+
"CLAUDE_CONFIG_DIR": "/home/vscode/.claude",
|
|
11
21
|
"GH_CONFIG_DIR": "/workspaces/.gh",
|
|
12
22
|
"TMPDIR": "/workspaces/.tmp",
|
|
23
|
+
"TERM": "${localEnv:TERM:xterm-256color}",
|
|
24
|
+
"COLORTERM": "truecolor",
|
|
13
25
|
"CLAUDECODE": null
|
|
14
26
|
},
|
|
15
27
|
|
|
@@ -27,15 +39,20 @@
|
|
|
27
39
|
},
|
|
28
40
|
"GH_EMAIL": {
|
|
29
41
|
"description": "GitHub email for git config (optional)"
|
|
42
|
+
},
|
|
43
|
+
"CLAUDE_AUTH_TOKEN": {
|
|
44
|
+
"description": "Claude long-lived auth token from 'claude setup-token' (optional - sk-ant-oat01-*)",
|
|
45
|
+
"documentationUrl": "https://docs.anthropic.com/en/docs/claude-code/cli-reference#claude-setup-token"
|
|
30
46
|
}
|
|
31
47
|
},
|
|
32
48
|
|
|
33
49
|
// Feature install order: external runtimes first (Node, uv, Rust, Bun),
|
|
34
|
-
// then Claude Code (
|
|
50
|
+
// then Claude Code native binary (no Node dependency), then custom features.
|
|
35
51
|
// npm-dependent features (agent-browser, ccusage, ccburn, claude-session-dashboard,
|
|
36
52
|
// biome, lsp-servers) must come after Node. uv-dependent features (ruff, claude-monitor) must
|
|
37
53
|
// come after uv. cargo-dependent features (ccms) must come after Rust.
|
|
38
|
-
// notify-hook is last (lightweight, no dependencies).
|
|
54
|
+
// notify-hook is second-to-last (lightweight, no dependencies).
|
|
55
|
+
// dbr (devcontainer-bridge) is last — standalone binary, no dependencies.
|
|
39
56
|
"overrideFeatureInstallOrder": [
|
|
40
57
|
"ghcr.io/devcontainers/features/node",
|
|
41
58
|
"ghcr.io/devcontainers/features/github-cli",
|
|
@@ -43,7 +60,7 @@
|
|
|
43
60
|
"ghcr.io/devcontainers-extra/features/uv",
|
|
44
61
|
"ghcr.io/rails/devcontainer/features/bun",
|
|
45
62
|
"ghcr.io/devcontainers/features/rust",
|
|
46
|
-
"
|
|
63
|
+
"./features/claude-code-native",
|
|
47
64
|
"./features/tmux",
|
|
48
65
|
"./features/agent-browser",
|
|
49
66
|
"./features/claude-monitor",
|
|
@@ -63,7 +80,8 @@
|
|
|
63
80
|
"./features/shellcheck",
|
|
64
81
|
"./features/hadolint",
|
|
65
82
|
"./features/biome",
|
|
66
|
-
"./features/notify-hook"
|
|
83
|
+
"./features/notify-hook",
|
|
84
|
+
"ghcr.io/bradleybeddoes/devcontainer-bridge/dbr"
|
|
67
85
|
],
|
|
68
86
|
|
|
69
87
|
"features": {
|
|
@@ -82,7 +100,7 @@
|
|
|
82
100
|
},
|
|
83
101
|
// Uncomment to add Go runtime (not installed by default):
|
|
84
102
|
// "ghcr.io/devcontainers/features/go:1": {},
|
|
85
|
-
"
|
|
103
|
+
"./features/claude-code-native": {},
|
|
86
104
|
"./features/tmux": {},
|
|
87
105
|
"./features/ccusage": {
|
|
88
106
|
"version": "latest",
|
|
@@ -133,17 +151,18 @@
|
|
|
133
151
|
"./features/notify-hook": {
|
|
134
152
|
"enableBell": true,
|
|
135
153
|
"enableOsc": true
|
|
136
|
-
}
|
|
154
|
+
},
|
|
155
|
+
"ghcr.io/bradleybeddoes/devcontainer-bridge/dbr:0.2.0": {}
|
|
137
156
|
},
|
|
138
157
|
|
|
139
|
-
"forwardPorts": [
|
|
158
|
+
"forwardPorts": [],
|
|
140
159
|
"portsAttributes": {
|
|
141
160
|
"7847": {
|
|
142
161
|
"label": "Claude Dashboard",
|
|
143
162
|
"onAutoForward": "notify"
|
|
144
163
|
},
|
|
145
164
|
"*": {
|
|
146
|
-
"onAutoForward": "
|
|
165
|
+
"onAutoForward": "notify"
|
|
147
166
|
}
|
|
148
167
|
},
|
|
149
168
|
|
|
@@ -188,7 +207,6 @@
|
|
|
188
207
|
"extensions": [
|
|
189
208
|
"wenbopan.vscode-terminal-osc-notifier",
|
|
190
209
|
"GitHub.vscode-github-actions",
|
|
191
|
-
"fabiospampinato.vscode-todo-plus",
|
|
192
210
|
"alefragnani.project-manager"
|
|
193
211
|
]
|
|
194
212
|
}
|
|
@@ -45,7 +45,7 @@ All widgets connected with powerline arrows (monokai theme).
|
|
|
45
45
|
|
|
46
46
|
- **ccstatusline npm package**: Installed on-demand via `npx` (not globally)
|
|
47
47
|
- **Configuration file**: `~/.config/ccstatusline/settings.json` with powerline theme
|
|
48
|
-
- **Claude Code integration**: Automatically updates
|
|
48
|
+
- **Claude Code integration**: Automatically updates `~/.claude/settings.json`
|
|
49
49
|
- **Disk Usage**: Minimal (~2MB when cached by npx)
|
|
50
50
|
|
|
51
51
|
## Requirements
|
|
@@ -75,9 +75,10 @@ The feature will validate these are present and exit with an error if missing.
|
|
|
75
75
|
- ✅ **Session Resume**: Copyable `cc --resume {sessionId}` command via custom-command widget
|
|
76
76
|
- ✅ **Burn Rate Tracking**: Live ccburn compact output showing pace indicators (🧊/🔥/🚨)
|
|
77
77
|
- ✅ **ANSI Colors**: High-contrast colors optimized for dark terminals
|
|
78
|
-
- ✅ **Automatic Integration**: Auto-configures
|
|
78
|
+
- ✅ **Automatic Integration**: Auto-configures `~/.claude/settings.json`
|
|
79
79
|
- ✅ **Idempotent**: Safe to run multiple times
|
|
80
80
|
- ✅ **Multi-user**: Automatically detects container user
|
|
81
|
+
- ✅ **Config-aware**: Respects `CLAUDE_CONFIG_DIR` environment variable (defaults to `~/.claude`)
|
|
81
82
|
|
|
82
83
|
## Post-Installation Steps
|
|
83
84
|
|
|
@@ -85,7 +86,7 @@ The feature will validate these are present and exit with an error if missing.
|
|
|
85
86
|
|
|
86
87
|
This feature automatically:
|
|
87
88
|
1. Creates `~/.config/ccstatusline/settings.json` with powerline configuration
|
|
88
|
-
2. Configures
|
|
89
|
+
2. Configures `~/.claude/settings.json` to use ccstatusline
|
|
89
90
|
|
|
90
91
|
**No manual steps required!**
|
|
91
92
|
|
|
@@ -105,7 +106,7 @@ You should see formatted output with powerline styling.
|
|
|
105
106
|
|
|
106
107
|
**3. Check Claude Code integration:**
|
|
107
108
|
```bash
|
|
108
|
-
cat
|
|
109
|
+
cat "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/settings.json" | jq '.statusLine'
|
|
109
110
|
```
|
|
110
111
|
|
|
111
112
|
Should show:
|
|
@@ -204,7 +205,7 @@ cat ~/.config/ccstatusline/settings.json | jq .
|
|
|
204
205
|
echo '{"model":{"display_name":"Test"}}' | npx -y ccstatusline@latest
|
|
205
206
|
|
|
206
207
|
# 3. Check Claude Code settings
|
|
207
|
-
cat
|
|
208
|
+
cat "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/settings.json" | jq '.statusLine'
|
|
208
209
|
|
|
209
210
|
# 4. Manually run auto-config if needed
|
|
210
211
|
configure-ccstatusline-auto
|
|
@@ -258,7 +259,7 @@ configure-ccstatusline-auto
|
|
|
258
259
|
npm install -g ccstatusline@latest
|
|
259
260
|
```
|
|
260
261
|
|
|
261
|
-
Then update
|
|
262
|
+
Then update `${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json`:
|
|
262
263
|
```json
|
|
263
264
|
{
|
|
264
265
|
"statusLine": {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-only
|
|
3
|
+
# Copyright (c) 2026 Marcus Krueger
|
|
2
4
|
set -euo pipefail
|
|
3
5
|
|
|
4
6
|
# Cleanup on exit
|
|
@@ -67,7 +69,7 @@ else
|
|
|
67
69
|
fi
|
|
68
70
|
|
|
69
71
|
# Widget config is managed by file-manifest.json (deployed by setup-config.sh)
|
|
70
|
-
# Source: .
|
|
72
|
+
# Source: .codeforge/config/ccstatusline-settings.json
|
|
71
73
|
# Deployed to: ~/.config/ccstatusline/settings.json (if-changed)
|
|
72
74
|
# Template: /usr/local/share/ccstatusline/settings.template.json (always)
|
|
73
75
|
echo "[ccstatusline] Widget config managed by file-manifest.json"
|
|
@@ -75,6 +77,7 @@ echo "[ccstatusline] Widget config managed by file-manifest.json"
|
|
|
75
77
|
# Create directories so wrapper doesn't fail before first post-start
|
|
76
78
|
mkdir -p "${USER_HOME}/.config/ccstatusline"
|
|
77
79
|
mkdir -p /usr/local/share/ccstatusline
|
|
80
|
+
chown "${USERNAME}:${USERNAME}" /usr/local/share/ccstatusline
|
|
78
81
|
chown "${USERNAME}:${USERNAME}" "${USER_HOME}/.config/ccstatusline" 2>/dev/null || true
|
|
79
82
|
|
|
80
83
|
# Create session resume helper script for custom-command widget
|
|
@@ -190,9 +193,11 @@ if ! command -v jq &>/dev/null; then
|
|
|
190
193
|
exit 1
|
|
191
194
|
fi
|
|
192
195
|
|
|
193
|
-
SETTINGS_FILE="${WORKSPACE_ROOT:-/workspaces}/.claude/settings.json"
|
|
194
196
|
# Use SUDO_USER since _REMOTE_USER isn't set in post-start hooks
|
|
195
197
|
USERNAME="${SUDO_USER:-vscode}"
|
|
198
|
+
_USER_HOME=$(getent passwd "$USERNAME" 2>/dev/null | cut -d: -f6)
|
|
199
|
+
_USER_HOME="${_USER_HOME:-/home/$USERNAME}"
|
|
200
|
+
SETTINGS_FILE="${CLAUDE_CONFIG_DIR:-${_USER_HOME}/.claude}/settings.json"
|
|
196
201
|
|
|
197
202
|
# Ensure directory exists
|
|
198
203
|
mkdir -p "$(dirname "${SETTINGS_FILE}")"
|
|
@@ -232,7 +237,7 @@ echo " ccstatusline Installation Complete"
|
|
|
232
237
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
233
238
|
echo ""
|
|
234
239
|
echo "Configuration:"
|
|
235
|
-
echo " • Source: .
|
|
240
|
+
echo " • Source: .codeforge/config/ccstatusline-settings.json"
|
|
236
241
|
echo " • Deployed to: ~/.config/ccstatusline/settings.json (by file-manifest)"
|
|
237
242
|
echo " • Template: /usr/local/share/ccstatusline/settings.template.json"
|
|
238
243
|
echo " • User: ${USERNAME}"
|
|
@@ -244,7 +249,7 @@ echo "━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
244
249
|
echo ""
|
|
245
250
|
echo "1. Widget config is deployed automatically on container start"
|
|
246
251
|
echo ""
|
|
247
|
-
echo "2. To customize: edit .
|
|
252
|
+
echo "2. To customize: edit .codeforge/config/ccstatusline-settings.json"
|
|
248
253
|
echo " Changes deploy on next container start (if-changed)"
|
|
249
254
|
echo ""
|
|
250
255
|
echo "3. Test manually:"
|
|
@@ -18,7 +18,7 @@ rules:
|
|
|
18
18
|
# File paths with optional line numbers (e.g., src/main.py:42)
|
|
19
19
|
# Covers common extensions for languages used in development
|
|
20
20
|
- description: File paths with line numbers
|
|
21
|
-
regex: '(?<=[\s(]|^)([a-zA-Z0-9_./-]+\.(py|ts|tsx|js|jsx|md|json|yml|yaml|toml|sh|rs|go|sql|css|html|svelte))(:(\d+))?'
|
|
21
|
+
regex: '(?:(?<=[\s(])|^)([a-zA-Z0-9_./-]+\.(py|ts|tsx|js|jsx|md|json|yml|yaml|toml|sh|rs|go|sql|css|html|svelte))(:(\d+))?'
|
|
22
22
|
color:
|
|
23
23
|
1: f.file_purple underline
|
|
24
24
|
4: f.line_gray
|
|
@@ -31,5 +31,5 @@ rules:
|
|
|
31
31
|
|
|
32
32
|
# Git short commit hashes (7-12 hex chars)
|
|
33
33
|
- description: Git commit hashes
|
|
34
|
-
regex: '(?<=commit |merge |pick |revert |fixup )[0-9a-f]{7,40}'
|
|
34
|
+
regex: '(?:(?<=commit )|(?<=merge )|(?<=pick )|(?<=revert )|(?<=fixup ))[0-9a-f]{7,40}'
|
|
35
35
|
color: f.hash_yellow
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Claude Code CLI (Native Binary)
|
|
2
|
+
|
|
3
|
+
Installs [Claude Code](https://docs.anthropic.com/en/docs/claude-code) as a native binary using Anthropic's official installer.
|
|
4
|
+
|
|
5
|
+
Unlike the npm-based installation (`ghcr.io/anthropics/devcontainer-features/claude-code`), this feature installs the native binary directly to `~/.local/bin/claude`. The binary is owned by the container user, so the in-session auto-updater works without permission issues.
|
|
6
|
+
|
|
7
|
+
## Options
|
|
8
|
+
|
|
9
|
+
| Option | Default | Description |
|
|
10
|
+
|--------|---------|-------------|
|
|
11
|
+
| `version` | `latest` | `latest`, `stable`, or a specific semver (e.g., `2.1.52`). Set to `none` to skip. |
|
|
12
|
+
| `username` | `automatic` | Container user to install for. `automatic` detects from `$_REMOTE_USER`. |
|
|
13
|
+
|
|
14
|
+
## How it works
|
|
15
|
+
|
|
16
|
+
1. Downloads the official installer from `https://claude.ai/install.sh`
|
|
17
|
+
2. Runs it as the target user (not root)
|
|
18
|
+
3. The installer handles platform detection, checksum verification, and binary placement
|
|
19
|
+
4. Binary is installed to `~/.local/bin/claude` with versions stored in `~/.local/share/claude/versions/`
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"features": {
|
|
26
|
+
"./features/claude-code-native": {}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
With version pinning:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"features": {
|
|
36
|
+
"./features/claude-code-native": {
|
|
37
|
+
"version": "2.1.52"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Why native over npm?
|
|
44
|
+
|
|
45
|
+
The npm installation (`npm install -g @anthropic-ai/claude-code`) runs as root during the Docker build, creating a package owned by `root`. When the container user tries to auto-update Claude Code in-session, it fails with `EACCES` because it can't write to the root-owned package directory.
|
|
46
|
+
|
|
47
|
+
The native binary installs to `~/.local/` under the container user's ownership, so `claude update` works without elevated permissions.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "claude-code-native",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"name": "Claude Code CLI (Native Binary)",
|
|
5
|
+
"description": "Installs Claude Code CLI as a native binary via the official Anthropic installer",
|
|
6
|
+
"documentationURL": "https://docs.anthropic.com/en/docs/claude-code",
|
|
7
|
+
"options": {
|
|
8
|
+
"version": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "Version to install: 'latest', 'stable', or a specific semver. Use 'none' to skip.",
|
|
11
|
+
"default": "latest"
|
|
12
|
+
},
|
|
13
|
+
"username": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Container user to install for",
|
|
16
|
+
"default": "automatic"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"customizations": {
|
|
20
|
+
"vscode": {
|
|
21
|
+
"extensions": [
|
|
22
|
+
"anthropic.claude-code"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"installsAfter": [
|
|
27
|
+
"ghcr.io/devcontainers/features/common-utils:2"
|
|
28
|
+
]
|
|
29
|
+
}
|