codeforge-dev 1.7.0 → 1.8.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 (136) hide show
  1. package/.devcontainer/.env +4 -6
  2. package/.devcontainer/.env.example +29 -0
  3. package/.devcontainer/.gitignore +8 -0
  4. package/.devcontainer/.secrets.example +12 -0
  5. package/.devcontainer/CHANGELOG.md +130 -0
  6. package/.devcontainer/CLAUDE.md +56 -19
  7. package/.devcontainer/README.md +111 -56
  8. package/.devcontainer/config/{main-system-prompt.md → defaults/main-system-prompt.md} +72 -0
  9. package/.devcontainer/config/file-manifest.json +20 -0
  10. package/.devcontainer/devcontainer.json +20 -0
  11. package/.devcontainer/docs/configuration-reference.md +90 -0
  12. package/.devcontainer/docs/keybindings.md +100 -0
  13. package/.devcontainer/docs/optional-features.md +129 -0
  14. package/.devcontainer/docs/plugins.md +154 -0
  15. package/.devcontainer/docs/troubleshooting.md +128 -0
  16. package/.devcontainer/features/agent-browser/install.sh +6 -0
  17. package/.devcontainer/features/ast-grep/install.sh +6 -0
  18. package/.devcontainer/features/biome/README.md +27 -0
  19. package/.devcontainer/features/biome/install.sh +6 -0
  20. package/.devcontainer/features/ccburn/install.sh +6 -0
  21. package/.devcontainer/features/ccstatusline/devcontainer-feature.json +5 -0
  22. package/.devcontainer/features/ccstatusline/install.sh +7 -0
  23. package/.devcontainer/features/ccusage/install.sh +6 -0
  24. package/.devcontainer/features/claude-monitor/install.sh +6 -0
  25. package/.devcontainer/features/dprint/README.md +30 -0
  26. package/.devcontainer/features/dprint/devcontainer-feature.json +18 -0
  27. package/.devcontainer/features/dprint/install.sh +131 -0
  28. package/.devcontainer/features/hadolint/README.md +35 -0
  29. package/.devcontainer/features/hadolint/devcontainer-feature.json +13 -0
  30. package/.devcontainer/features/hadolint/install.sh +86 -0
  31. package/.devcontainer/features/lsp-servers/devcontainer-feature.json +5 -0
  32. package/.devcontainer/features/lsp-servers/install.sh +7 -0
  33. package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +5 -0
  34. package/.devcontainer/features/mcp-qdrant/install.sh +13 -6
  35. package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +5 -0
  36. package/.devcontainer/features/mcp-reasoner/install.sh +8 -1
  37. package/.devcontainer/features/notify-hook/devcontainer-feature.json +5 -0
  38. package/.devcontainer/features/notify-hook/install.sh +7 -0
  39. package/.devcontainer/features/ruff/README.md +26 -0
  40. package/.devcontainer/features/ruff/devcontainer-feature.json +21 -0
  41. package/.devcontainer/features/ruff/install.sh +74 -0
  42. package/.devcontainer/features/shellcheck/README.md +38 -0
  43. package/.devcontainer/features/shellcheck/devcontainer-feature.json +13 -0
  44. package/.devcontainer/features/shellcheck/install.sh +24 -0
  45. package/.devcontainer/features/shfmt/README.md +37 -0
  46. package/.devcontainer/features/shfmt/devcontainer-feature.json +13 -0
  47. package/.devcontainer/features/shfmt/install.sh +85 -0
  48. package/.devcontainer/features/splitrail/devcontainer-feature.json +5 -0
  49. package/.devcontainer/features/splitrail/install.sh +7 -0
  50. package/.devcontainer/features/tmux/install.sh +8 -0
  51. package/.devcontainer/features/tree-sitter/install.sh +6 -0
  52. package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +3 -10
  53. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/.claude-plugin/plugin.json +1 -1
  54. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/__pycache__/format-on-stop.cpython-314.pyc +0 -0
  55. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-on-stop.py +114 -9
  56. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/.claude-plugin/plugin.json +1 -1
  57. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/hooks/hooks.json +4 -5
  58. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/__pycache__/lint-file.cpython-314.pyc +0 -0
  59. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/lint-file.py +478 -76
  60. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/.claude-plugin/plugin.json +1 -1
  61. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/AGENT-REDIRECTION.md +226 -0
  62. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/architect.md +17 -0
  63. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/bash-exec.md +4 -4
  64. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/claude-guide.md +14 -23
  65. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/debug-logs.md +2 -0
  66. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/dependency-analyst.md +2 -0
  67. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/doc-writer.md +13 -0
  68. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/explorer.md +2 -0
  69. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/generalist.md +10 -1
  70. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/migrator.md +6 -0
  71. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/refactorer.md +4 -0
  72. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/spec-writer.md +36 -23
  73. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/statusline-config.md +3 -3
  74. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/test-writer.md +3 -0
  75. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/hooks/hooks.json +39 -0
  76. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/advisory-test-runner.cpython-314.pyc +0 -0
  77. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/collect-edited-files.cpython-314.pyc +0 -0
  78. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/commit-reminder.cpython-314.pyc +0 -0
  79. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/git-state-injector.cpython-314.pyc +0 -0
  80. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/redirect-builtin-agents.cpython-314.pyc +0 -0
  81. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/ticket-linker.cpython-314.pyc +0 -0
  82. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/todo-harvester.cpython-314.pyc +0 -0
  83. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/advisory-test-runner.py +174 -0
  84. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/collect-edited-files.py +8 -6
  85. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/commit-reminder.py +90 -0
  86. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/git-state-injector.py +114 -0
  87. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/skill-suggester.py +61 -0
  88. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/ticket-linker.py +137 -0
  89. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/todo-harvester.py +130 -0
  90. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/SKILL.md +224 -0
  91. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/error-handling.md +166 -0
  92. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/rest-conventions.md +215 -0
  93. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/SKILL.md +211 -0
  94. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/references/language-patterns.md +327 -0
  95. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/SKILL.md +134 -0
  96. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/ecosystem-commands.md +264 -0
  97. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/license-compliance.md +80 -0
  98. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/SKILL.md +153 -0
  99. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/api-doc-templates.md +221 -0
  100. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/docstring-formats.md +296 -0
  101. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/SKILL.md +150 -0
  102. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/javascript-migrations.md +179 -0
  103. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/python-migrations.md +141 -0
  104. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/specification-writing/SKILL.md +32 -0
  105. package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/__pycache__/block-dangerous.cpython-314.pyc +0 -0
  106. package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/hooks/hooks.json +1 -1
  107. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/__pycache__/guard-protected.cpython-314.pyc +0 -0
  108. package/.devcontainer/scripts/check-setup.sh +72 -0
  109. package/.devcontainer/scripts/setup-aliases.sh +43 -3
  110. package/.devcontainer/scripts/setup-auth.sh +74 -0
  111. package/.devcontainer/scripts/setup-config.sh +112 -22
  112. package/.devcontainer/scripts/setup-update-claude.sh +8 -0
  113. package/.devcontainer/scripts/setup.sh +46 -13
  114. package/README.md +23 -190
  115. package/package.json +1 -1
  116. package/setup.js +245 -71
  117. package/.devcontainer/features/claude-code/README.md +0 -498
  118. package/.devcontainer/features/claude-code/config/settings.json +0 -72
  119. package/.devcontainer/features/claude-code/config/system-prompt.md +0 -118
  120. package/.devcontainer/features/claude-code/config/world-building-sp.md +0 -1432
  121. package/.devcontainer/features/claude-code/devcontainer-feature.json +0 -42
  122. package/.devcontainer/features/claude-code/install.sh +0 -466
  123. package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/.claude-plugin/plugin.json +0 -7
  124. package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/hooks/hooks.json +0 -17
  125. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/.claude-plugin/plugin.json +0 -6
  126. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/config/planning-instructions.md +0 -14
  127. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/functional-conjuring-map.md +0 -989
  128. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/hooks/hooks.json +0 -33
  129. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/__pycache__/post-enhance-task.cpython-314.pyc +0 -0
  130. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhance-planning.py +0 -71
  131. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-plan.sh +0 -68
  132. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-task.sh +0 -120
  133. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-plan.py +0 -133
  134. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-task.py +0 -253
  135. /package/.devcontainer/config/{keybindings.json → defaults/keybindings.json} +0 -0
  136. /package/.devcontainer/config/{settings.json → defaults/settings.json} +0 -0
@@ -396,6 +396,78 @@ offset = len(header) + 1 # null terminator in legacy format
396
396
  offset = len(header) + 1 # add one to header length
397
397
  </documentation>
398
398
 
399
+ <specification_management>
400
+ Specs and project-level docs live in `.specs/` at the project root.
401
+
402
+ You (the orchestrator) own spec creation and maintenance. Agents do not update
403
+ specs directly — they flag when specs need attention, and you handle it.
404
+
405
+ Folder structure:
406
+ ```
407
+ .specs/
408
+ ├── roadmap.md # What each version delivers and why (≤150 lines)
409
+ ├── lessons-learned.md # Workflow anti-patterns
410
+ ├── ci-cd.md # CI/CD pipeline, environments, deploy process
411
+ ├── v0.1.0.md # Feature spec (single file per version if ≤200 lines)
412
+ ├── v0.2.0/ # Version folder when multiple specs needed
413
+ │ ├── overview.md # Parent linking sub-specs (≤50 lines)
414
+ │ └── feature-name.md # Sub-spec per feature (≤200 lines each)
415
+ ```
416
+
417
+ Spec rules:
418
+ - ≤200 lines per spec file. Split by feature boundary if larger; link via
419
+ a parent overview (≤50 lines). Monolithic specs rot — no AI context window
420
+ can use a 4,000-line spec.
421
+ - Reference files, don't reproduce them. Write "see `src/engine/db/migrations/002.sql`
422
+ lines 48-70" — never paste full schemas, SQL DDL, or type definitions. The
423
+ code is the source of truth; duplicated snippets go stale.
424
+ - Each spec is independently loadable. Include version, status, last-updated,
425
+ intent, key file paths, and acceptance criteria in every spec file.
426
+
427
+ Standard template:
428
+ ```
429
+ # Feature: [Name]
430
+ **Version:** v0.X.0
431
+ **Status:** implemented | partial | planned
432
+ **Last Updated:** YYYY-MM-DD
433
+
434
+ ## Intent
435
+ ## Acceptance Criteria
436
+ ## Key Files
437
+ ## Schema / Data Model (reference only — no inline DDL)
438
+ ## API Endpoints (table: Method | Path | Description)
439
+ ## Requirements (EARS format: FR-1, NFR-1)
440
+ ## Dependencies
441
+ ## Out of Scope
442
+ ## Implementation Notes (as-built deviations — post-implementation only)
443
+ ## Discrepancies (spec vs reality gaps)
444
+ ```
445
+
446
+ As-built workflow (after implementing a feature):
447
+ 1. Find the feature spec: Glob `.specs/**/*.md`
448
+ 2. Set status to "implemented" or "partial"
449
+ 3. Check off acceptance criteria with passing tests
450
+ 4. Add Implementation Notes for any deviations
451
+ 5. Update file paths if they changed
452
+ 6. Update Last Updated date
453
+ If no spec exists and the change is substantial, create one or note "spec needed."
454
+
455
+ Document types — don't mix:
456
+ - Roadmap (`.specs/roadmap.md`): what each version delivers and why. No
457
+ implementation detail — that belongs in feature specs. Target: ≤150 lines.
458
+ - Feature spec (`.specs/v*.md` or `.specs/vX.Y.0/*.md`): how a feature works.
459
+ ≤200 lines.
460
+ - CI/CD (`.specs/ci-cd.md`): pipeline stages, environments, deploy process,
461
+ and automation config. Keep declarative — reference workflow files, don't
462
+ reproduce them.
463
+ - Lessons learned (`.specs/lessons-learned.md`): workflow anti-patterns.
464
+
465
+ After a version ships, update feature specs to as-built status. Delete or
466
+ merge superseded planning artifacts — don't accumulate snapshot documents.
467
+
468
+ Delegate spec writing to the spec-writer agent when creating new specs.
469
+ </specification_management>
470
+
399
471
  <code_standards>
400
472
  Files:
401
473
  - Small, focused, single reason to change
@@ -0,0 +1,20 @@
1
+ [
2
+ {
3
+ "src": "defaults/settings.json",
4
+ "dest": "${CLAUDE_CONFIG_DIR}",
5
+ "enabled": true,
6
+ "overwrite": "if-changed"
7
+ },
8
+ {
9
+ "src": "defaults/keybindings.json",
10
+ "dest": "${CLAUDE_CONFIG_DIR}",
11
+ "enabled": true,
12
+ "overwrite": "if-changed"
13
+ },
14
+ {
15
+ "src": "defaults/main-system-prompt.md",
16
+ "dest": "${CLAUDE_CONFIG_DIR}",
17
+ "enabled": true,
18
+ "overwrite": "if-changed"
19
+ }
20
+ ]
@@ -12,6 +12,11 @@
12
12
  "TMPDIR": "/workspaces/.tmp"
13
13
  },
14
14
 
15
+ // Feature install order: external runtimes first (Node, uv, Go, Bun),
16
+ // then Claude Code (needs Node), then custom features.
17
+ // npm-dependent features (agent-browser, ccusage, ccburn, biome, lsp-servers)
18
+ // must come after Node. uv-dependent features (ruff, claude-monitor) must
19
+ // come after uv. notify-hook is last (lightweight, no dependencies).
15
20
  "overrideFeatureInstallOrder": [
16
21
  "ghcr.io/devcontainers/features/node",
17
22
  "ghcr.io/devcontainers/features/github-cli",
@@ -29,6 +34,11 @@
29
34
  "./features/ast-grep",
30
35
  "./features/tree-sitter",
31
36
  "./features/lsp-servers",
37
+ "./features/ruff",
38
+ "./features/shfmt",
39
+ "./features/dprint",
40
+ "./features/shellcheck",
41
+ "./features/hadolint",
32
42
  "./features/biome",
33
43
  "./features/notify-hook"
34
44
  ],
@@ -69,6 +79,16 @@
69
79
  "./features/tree-sitter": {},
70
80
  "./features/lsp-servers": {},
71
81
  "./features/agent-browser": {},
82
+ "./features/ruff": {
83
+ "version": "latest",
84
+ "username": "automatic"
85
+ },
86
+ "./features/shfmt": {},
87
+ "./features/dprint": {
88
+ "username": "automatic"
89
+ },
90
+ "./features/shellcheck": {},
91
+ "./features/hadolint": {},
72
92
  "./features/biome": {},
73
93
  "./features/notify-hook": {
74
94
  "enableBell": true,
@@ -0,0 +1,90 @@
1
+ # Configuration Reference
2
+
3
+ Quick reference for all CodeForge configuration options.
4
+
5
+ ## Which File to Edit
6
+
7
+ | Task | File to Edit |
8
+ |------|-------------|
9
+ | Change default model | `config/defaults/settings.json` |
10
+ | Change system prompt | `config/defaults/main-system-prompt.md` |
11
+ | Customize keybindings | `config/defaults/keybindings.json` |
12
+ | Control setup steps | `.env` |
13
+ | Add custom config file | `config/file-manifest.json` |
14
+ | Disable a feature | `devcontainer.json` (set `"version": "none"`) |
15
+ | Disable a plugin | `config/defaults/settings.json` (remove from `enabledPlugins`) |
16
+ | Skip a plugin install | `.env` (`PLUGIN_BLACKLIST`) |
17
+ | Change container memory | `devcontainer.json` (`runArgs`) |
18
+ | Add VS Code extension | `devcontainer.json` (`customizations.vscode.extensions`) |
19
+
20
+ ## `.env` Variables (Setup Behavior)
21
+
22
+ These control what `setup.sh` does on each container start. Copy `.env.example` to `.env` and customize.
23
+
24
+ | Variable | Default | Description |
25
+ |----------|---------|-------------|
26
+ | `CLAUDE_CONFIG_DIR` | `/workspaces/.claude` | Where Claude Code config files are stored |
27
+ | `CONFIG_SOURCE_DIR` | `(auto-detected)` | Source directory for config defaults |
28
+ | `SETUP_CONFIG` | `true` | Copy config files per `file-manifest.json` |
29
+ | `SETUP_ALIASES` | `true` | Add cc/claude/ccraw/cc-tools aliases to shell |
30
+ | `SETUP_AUTH` | `true` | Configure Git/NPM auth from `.secrets` file |
31
+ | `SETUP_PLUGINS` | `true` | Install Anthropic plugins + register local marketplace |
32
+ | `SETUP_UPDATE_CLAUDE` | `true` | Background-update Claude Code CLI binary |
33
+ | `SETUP_PROJECTS` | `true` | Auto-detect projects for VS Code Project Manager |
34
+ | `PLUGIN_BLACKLIST` | `""` | Comma-separated plugin names to skip during installation |
35
+
36
+ ## `devcontainer.json` `remoteEnv` (Container Runtime)
37
+
38
+ These environment variables are set in every terminal session inside the container.
39
+
40
+ | Variable | Value | Description |
41
+ |----------|-------|-------------|
42
+ | `WORKSPACE_ROOT` | `/workspaces` | Workspace root directory |
43
+ | `CLAUDE_CONFIG_DIR` | `/workspaces/.claude` | Claude Code config directory |
44
+ | `GH_CONFIG_DIR` | `/workspaces/.gh` | GitHub CLI config directory |
45
+ | `TMPDIR` | `/workspaces/.tmp` | Temporary files directory |
46
+
47
+ ## `config/file-manifest.json` (File Copy Rules)
48
+
49
+ Each entry in the manifest array controls how a config file is deployed:
50
+
51
+ ```json
52
+ {
53
+ "src": "defaults/settings.json",
54
+ "dest": "${CLAUDE_CONFIG_DIR}",
55
+ "destFilename": "settings.json",
56
+ "overwrite": "if-changed",
57
+ "enabled": true
58
+ }
59
+ ```
60
+
61
+ | Field | Required | Default | Description |
62
+ |-------|----------|---------|-------------|
63
+ | `src` | Yes | — | Source file path relative to `config/` |
64
+ | `dest` | Yes | — | Destination directory (supports `${CLAUDE_CONFIG_DIR}`, `${WORKSPACE_ROOT}`) |
65
+ | `destFilename` | No | basename of `src` | Override the destination filename |
66
+ | `overwrite` | No | `"if-changed"` | `"always"`, `"never"`, or `"if-changed"` (sha256 comparison) |
67
+ | `enabled` | No | `true` | Set `false` to skip this entry |
68
+
69
+ ## Feature Options
70
+
71
+ Each feature in `devcontainer.json` supports options defined in its `devcontainer-feature.json`. Common options:
72
+
73
+ | Option | Description | Used By |
74
+ |--------|-------------|---------|
75
+ | `version` | Tool version to install. `"none"` skips installation. | All local features |
76
+ | `username` | Container user to install for. `"automatic"` auto-detects. | dprint, ruff, ccusage, ccburn, etc. |
77
+ | `shells` | Which shell rc files to modify (`"both"`, `"bash"`, `"zsh"`). | ccusage, ccburn |
78
+
79
+ ## `.secrets` File (Authentication)
80
+
81
+ Create `.devcontainer/.secrets` with tokens for automatic authentication:
82
+
83
+ ```bash
84
+ GH_TOKEN=ghp_your_token_here
85
+ GH_USERNAME=your-github-username
86
+ GH_EMAIL=your-email@example.com
87
+ NPM_TOKEN=npm_your_token_here
88
+ ```
89
+
90
+ Environment variables with the same names take precedence over `.secrets` file values (useful for Codespaces).
@@ -0,0 +1,100 @@
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.
@@ -0,0 +1,129 @@
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
+ ## mcp-reasoner (Enhanced Reasoning)
56
+
57
+ Adds a reasoning MCP server that gives Claude Code access to structured thinking tools (beam search, Monte Carlo tree search, etc.).
58
+
59
+ ### Enabling
60
+
61
+ Add to `devcontainer.json` under `"features"`:
62
+
63
+ ```json
64
+ "./features/mcp-reasoner": {}
65
+ ```
66
+
67
+ ### Options
68
+
69
+ | Option | Default | Description |
70
+ |--------|---------|-------------|
71
+ | `version` | `latest` | Version to install. `"none"` to skip. |
72
+ | `username` | `automatic` | Container user to install for |
73
+
74
+ ### Prerequisites
75
+
76
+ Already met by default container: Node.js LTS is pre-installed.
77
+
78
+ ### How It Works
79
+
80
+ 1. During build, clones and builds the mcp-reasoner Node.js project.
81
+ 2. On container start, a post-start hook registers it as an MCP server in `settings.json`.
82
+ 3. Claude Code gains access to reasoning tools: `beam_search`, `mcts`, `hypothesis_test`, etc.
83
+
84
+ ### Verification
85
+
86
+ ```bash
87
+ node ~/mcp-reasoner/dist/index.js --help
88
+ ```
89
+
90
+ ---
91
+
92
+ ## splitrail (Terminal Splitting)
93
+
94
+ A terminal multiplexer utility for splitting panes. Useful for Agent Teams workflows.
95
+
96
+ ### Enabling
97
+
98
+ Add to `devcontainer.json` under `"features"`:
99
+
100
+ ```json
101
+ "./features/splitrail": {}
102
+ ```
103
+
104
+ ### Prerequisites
105
+
106
+ Requires Rust toolchain. Add the Rust devcontainer feature first:
107
+
108
+ ```json
109
+ "ghcr.io/devcontainers/features/rust:1": {}
110
+ ```
111
+
112
+ Then add splitrail to `overrideFeatureInstallOrder` after the Rust feature.
113
+
114
+ ### How It Works
115
+
116
+ splitrail is a Rust-based tool that provides tmux pane management for Claude Code Agent Teams. It works alongside the tmux feature to provide split-pane terminal sessions.
117
+
118
+ ---
119
+
120
+ ## Disabling Default Features
121
+
122
+ Any feature can be disabled without removing it from `devcontainer.json` by setting `"version": "none"`:
123
+
124
+ ```json
125
+ "./features/hadolint": { "version": "none" },
126
+ "./features/shellcheck": { "version": "none" }
127
+ ```
128
+
129
+ The feature entry stays in the config for easy re-enabling — just remove `"version": "none"` or set it to `"latest"`.
@@ -0,0 +1,154 @@
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-formatter/ # Batch formatter (Stop hook)
18
+ ├── auto-linter/ # Batch linter (Stop hook)
19
+ └── code-directive/ # Agents, skills, hooks
20
+ ```
21
+
22
+ Each plugin has a `.claude-plugin/plugin.json` manifest defining its name, description, and capabilities.
23
+
24
+ ## Enabling/Disabling Plugins
25
+
26
+ Plugins are enabled in `config/defaults/settings.json` under `enabledPlugins`:
27
+
28
+ ```json
29
+ "enabledPlugins": [
30
+ "auto-formatter@devs-marketplace",
31
+ "auto-linter@devs-marketplace",
32
+ "code-directive@devs-marketplace"
33
+ ]
34
+ ```
35
+
36
+ To disable a plugin, remove its entry from the `enabledPlugins` array.
37
+
38
+ ## PLUGIN_BLACKLIST
39
+
40
+ To skip a plugin during the installation/registration step (without editing `settings.json`), add it to `PLUGIN_BLACKLIST` in `.env`:
41
+
42
+ ```bash
43
+ PLUGIN_BLACKLIST="ticket-workflow,auto-linter"
44
+ ```
45
+
46
+ This prevents the plugin from being registered on container start but doesn't remove it from `enabledPlugins`.
47
+
48
+ ---
49
+
50
+ ## Plugin Reference
51
+
52
+ ### codeforge-lsp
53
+
54
+ **Purpose**: Provides Language Server Protocol servers for code intelligence.
55
+
56
+ **Servers**:
57
+ - **Pyright** — Python type checking and completion (`.py`, `.pyi`)
58
+ - **TypeScript Language Server** — TypeScript/JavaScript (`.ts`, `.tsx`, `.js`, `.jsx`, `.mts`, `.cts`, `.mjs`, `.cjs`)
59
+ - **gopls** — Go language server (`.go`, `.mod`, `.sum`)
60
+
61
+ Claude Code automatically uses these for hover info, go-to-definition, and find-references.
62
+
63
+ ### ticket-workflow
64
+
65
+ **Purpose**: EARS-based ticket workflow with GitHub integration.
66
+
67
+ Provides structured ticket management using EARS (Easy Approach to Requirements Syntax) format. Integrates with GitHub Issues for tracking.
68
+
69
+ **Commands**: `/ticket:new`, `/ticket:work`, `/ticket:review-commit`, `/ticket:create-pr`
70
+
71
+ ### notify-hook
72
+
73
+ **Purpose**: Desktop notifications when Claude Code finishes responding.
74
+
75
+ 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).
76
+
77
+ **Configuration**: Enabled via `devcontainer.json` feature options:
78
+ ```json
79
+ "./features/notify-hook": {
80
+ "enableBell": true,
81
+ "enableOsc": true
82
+ }
83
+ ```
84
+
85
+ ### dangerous-command-blocker
86
+
87
+ **Purpose**: Prevents Claude Code from executing destructive bash commands.
88
+
89
+ **Blocked patterns**:
90
+ - `rm -rf /` and variants
91
+ - `sudo rm` on system directories
92
+ - `chmod 777` on sensitive paths
93
+ - `git push --force` to protected branches
94
+ - `dd` with output to block devices
95
+ - Other destructive system commands
96
+
97
+ The blocker runs as a PreToolUse hook on Bash commands. It checks the command against a pattern list and rejects matches.
98
+
99
+ ### protected-files-guard
100
+
101
+ **Purpose**: Prevents Claude Code from modifying sensitive files.
102
+
103
+ **Protected patterns**:
104
+ - `.env` and `.secrets` files
105
+ - Lock files (`package-lock.json`, `uv.lock`, `Cargo.lock`, etc.)
106
+ - `.git/` directory contents
107
+ - Credential files and SSH keys
108
+
109
+ Runs as a PreToolUse hook on Write and Edit operations.
110
+
111
+ ### auto-formatter
112
+
113
+ **Purpose**: Batch-formats all files edited during a Claude Code session.
114
+
115
+ **Supported languages**:
116
+ | Language | Formatter |
117
+ |----------|-----------|
118
+ | Python | Ruff |
119
+ | Go | gofmt |
120
+ | JavaScript/TypeScript/CSS/JSON/GraphQL/HTML | Biome |
121
+ | Shell scripts | shfmt |
122
+ | Markdown/YAML/TOML/Dockerfile | dprint |
123
+ | Rust | rustfmt |
124
+
125
+ **How it works**: Runs as a Stop hook. When Claude Code stops (end of a conversation turn), it checks which files were edited, detects their language, and runs the appropriate formatter. Has a 30-second timeout.
126
+
127
+ ### auto-linter
128
+
129
+ **Purpose**: Batch-lints all files edited during a Claude Code session.
130
+
131
+ **Supported linters**:
132
+ | Language | Linter |
133
+ |----------|--------|
134
+ | Python | Pyright + Ruff |
135
+ | JavaScript/TypeScript/CSS/GraphQL | Biome |
136
+ | Shell scripts | ShellCheck |
137
+ | Go | go vet |
138
+ | Dockerfile | hadolint |
139
+ | Rust | clippy |
140
+
141
+ **How it works**: Runs as a Stop hook alongside auto-formatter. Checks edited files and runs the appropriate linter. Results are reported but don't block — they're informational.
142
+
143
+ ### code-directive
144
+
145
+ **Purpose**: The main intelligence layer — custom agents, coding skills, and behavior hooks.
146
+
147
+ **Components**:
148
+ - **17 custom agents** — Specialized agent definitions for different task types (architect, test-writer, refactorer, etc.)
149
+ - **16 coding skills** — Domain-specific reference materials (FastAPI, Docker, testing patterns, etc.)
150
+ - **Agent redirection hook** — Transparently swaps built-in agent types to custom agents (e.g., `Explore` → `explorer`, `Plan` → `architect`)
151
+ - **Syntax validation hook** — Validates code syntax before commits
152
+ - **Skill auto-suggestion hook** — Suggests relevant skills based on conversation context
153
+
154
+ For detailed agent and skill documentation, see the agent markdown files in `plugins/devs-marketplace/plugins/code-directive/agents/` and skill files in `plugins/devs-marketplace/plugins/code-directive/skills/`.