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,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 `/workspaces/.claude/` and persist across container rebuilds.
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 `connect-external-terminal.sh`.
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` | `/workspaces/.claude` | Claude configuration directory |
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 `.devcontainer/config/defaults/settings.json`. File copying is controlled by `config/file-manifest.json`, which specifies per-file overwrite behavior (`"if-changed"`, `"always"`, or `"never"`).
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 `.devcontainer/config/defaults/keybindings.json` (empty by default — Claude Code defaults apply). Customize by adding entries to the `bindings` array.
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 `.devcontainer/config/defaults/main-system-prompt.md`. Override it by creating a `.claude/main-system-prompt.md` in your project directory.
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 (21) — `skill-engine` plugin
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**: `config/file-manifest.json` controls which files are copied and when — default `overwrite: "if-changed"` uses sha256 comparison. Persistent changes go in `.devcontainer/config/defaults/settings.json`
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 `connect-external-terminal.sh` from WezTerm/iTerm2
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 [docs/troubleshooting.md](docs/troubleshooting.md).
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 `config/defaults/settings.json` |
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](docs/configuration-reference.md) — all env vars and config options
436
- - [Plugin System](docs/plugins.md) — plugin architecture and per-plugin docs
437
- - [Optional Features](docs/optional-features.md) — mcp-qdrant and other optional components, disabling features
438
- - [Keybinding Customization](docs/keybindings.md) — resolving VS Code conflicts
439
- - [Troubleshooting](docs/troubleshooting.md) — common issues and solutions
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": "/workspaces/.claude",
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 (needs Node), then custom features.
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
- "ghcr.io/anthropics/devcontainer-features/claude-code",
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
- "ghcr.io/anthropics/devcontainer-features/claude-code:1.0.5": {},
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": [7847],
158
+ "forwardPorts": [],
140
159
  "portsAttributes": {
141
160
  "7847": {
142
161
  "label": "Claude Dashboard",
143
162
  "onAutoForward": "notify"
144
163
  },
145
164
  "*": {
146
- "onAutoForward": "silent"
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
  }
@@ -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
  VERSION="${VERSION:-latest}"
@@ -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
  VERSION="${VERSION:-latest}"
@@ -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
  VERSION="${VERSION:-latest}"
@@ -18,11 +18,6 @@
18
18
  "bash",
19
19
  "zsh",
20
20
  "both"
21
- ],
22
- "proposals": [
23
- "bash",
24
- "zsh",
25
- "both"
26
21
  ]
27
22
  },
28
23
  "username": {
@@ -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
  # === SETUP ===
@@ -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
  # === SETUP ===
@@ -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 `.claude/settings.json`
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 `.claude/settings.json`
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 `.claude/settings.json` to use ccstatusline
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 /workspaces/.claude/settings.json | jq '.statusLine'
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 /workspaces/.claude/settings.json | jq '.statusLine'
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 `.claude/settings.json`:
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: .devcontainer/config/defaults/ccstatusline-settings.json
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: .devcontainer/config/defaults/ccstatusline-settings.json"
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 .devcontainer/config/defaults/ccstatusline-settings.json"
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,11 +18,6 @@
18
18
  "bash",
19
19
  "zsh",
20
20
  "both"
21
- ],
22
- "proposals": [
23
- "bash",
24
- "zsh",
25
- "both"
26
21
  ]
27
22
  },
28
23
  "username": {
@@ -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
  # === SETUP ===
@@ -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
@@ -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
  # ==============================
@@ -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
+ }