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
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-only
|
|
3
|
+
# Copyright (c) 2026 Marcus Krueger
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
VERSION="${VERSION:-latest}"
|
|
7
|
+
USERNAME="${USERNAME:-automatic}"
|
|
8
|
+
|
|
9
|
+
# Skip installation if version is "none"
|
|
10
|
+
if [ "${VERSION}" = "none" ]; then
|
|
11
|
+
echo "[claude-code-native] Skipping installation (version=none)"
|
|
12
|
+
exit 0
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
echo "[claude-code-native] Starting installation..."
|
|
16
|
+
echo "[claude-code-native] Version: ${VERSION}"
|
|
17
|
+
|
|
18
|
+
# === VALIDATE DEPENDENCIES ===
|
|
19
|
+
# The official installer (claude.ai/install.sh) requires curl internally
|
|
20
|
+
if ! command -v curl >/dev/null 2>&1; then
|
|
21
|
+
echo "[claude-code-native] ERROR: curl is required"
|
|
22
|
+
echo " Ensure common-utils feature is installed first"
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# === DETECT USER ===
|
|
27
|
+
if [ "${USERNAME}" = "auto" ] || [ "${USERNAME}" = "automatic" ]; then
|
|
28
|
+
if [ -n "${_REMOTE_USER:-}" ]; then
|
|
29
|
+
USERNAME="${_REMOTE_USER}"
|
|
30
|
+
elif getent passwd vscode >/dev/null 2>&1; then
|
|
31
|
+
USERNAME="vscode"
|
|
32
|
+
elif getent passwd node >/dev/null 2>&1; then
|
|
33
|
+
USERNAME="node"
|
|
34
|
+
elif getent passwd codespace >/dev/null 2>&1; then
|
|
35
|
+
USERNAME="codespace"
|
|
36
|
+
else
|
|
37
|
+
USERNAME="root"
|
|
38
|
+
fi
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
USER_HOME=$(getent passwd "${USERNAME}" | cut -d: -f6)
|
|
42
|
+
if [ -z "${USER_HOME}" ]; then
|
|
43
|
+
echo "[claude-code-native] ERROR: Could not determine home directory for ${USERNAME}"
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
echo "[claude-code-native] Installing for user: ${USERNAME} (home: ${USER_HOME})"
|
|
48
|
+
|
|
49
|
+
# === PREPARE DIRECTORIES ===
|
|
50
|
+
mkdir -p "${USER_HOME}/.local/bin"
|
|
51
|
+
mkdir -p "${USER_HOME}/.local/share/claude"
|
|
52
|
+
mkdir -p "${USER_HOME}/.local/state"
|
|
53
|
+
mkdir -p "${USER_HOME}/.claude"
|
|
54
|
+
chown -R "${USERNAME}:" "${USER_HOME}/.local" "${USER_HOME}/.claude"
|
|
55
|
+
|
|
56
|
+
# === DETERMINE TARGET ===
|
|
57
|
+
# The official installer accepts: stable, latest, or a specific semver
|
|
58
|
+
TARGET="${VERSION}"
|
|
59
|
+
if [ "${TARGET}" != "latest" ] && [ "${TARGET}" != "stable" ]; then
|
|
60
|
+
if ! echo "${TARGET}" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
|
|
61
|
+
echo "[claude-code-native] ERROR: Invalid version '${TARGET}'"
|
|
62
|
+
echo " Use 'latest', 'stable', or a semver (e.g., 2.1.52)"
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# === INSTALL ===
|
|
68
|
+
# The official Anthropic installer handles:
|
|
69
|
+
# - Platform detection (linux/darwin, x64/arm64, glibc/musl)
|
|
70
|
+
# - Manifest download and checksum verification
|
|
71
|
+
# - Binary download to ~/.local/bin/claude (symlink to ~/.local/share/claude/versions/*)
|
|
72
|
+
echo "[claude-code-native] Downloading official installer..."
|
|
73
|
+
|
|
74
|
+
if [ "${USERNAME}" = "root" ]; then
|
|
75
|
+
curl -fsSL https://claude.ai/install.sh | bash -s -- "${TARGET}"
|
|
76
|
+
else
|
|
77
|
+
su - "${USERNAME}" -c "curl -fsSL https://claude.ai/install.sh | bash -s -- \"${TARGET}\""
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# === VERIFICATION ===
|
|
81
|
+
CLAUDE_BIN="${USER_HOME}/.local/bin/claude"
|
|
82
|
+
|
|
83
|
+
if [ -x "${CLAUDE_BIN}" ]; then
|
|
84
|
+
INSTALLED_VERSION=$(su - "${USERNAME}" -c "${CLAUDE_BIN} --version 2>/dev/null" || echo "unknown")
|
|
85
|
+
echo "[claude-code-native] ✓ Claude Code installed: ${INSTALLED_VERSION}"
|
|
86
|
+
echo "[claude-code-native] Binary: ${CLAUDE_BIN}"
|
|
87
|
+
else
|
|
88
|
+
echo "[claude-code-native] ERROR: Installation failed — ${CLAUDE_BIN} not found or not executable"
|
|
89
|
+
echo "[claude-code-native] Expected binary at: ${CLAUDE_BIN}"
|
|
90
|
+
ls -la "${USER_HOME}/.local/bin/" 2>/dev/null || true
|
|
91
|
+
exit 1
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# === POST-START HOOK ===
|
|
95
|
+
# Ensures hasCompletedOnboarding is set when token auth is configured.
|
|
96
|
+
# Runs as the LAST post-start hook (99- prefix) to catch overwrites from
|
|
97
|
+
# Claude Code CLI/extension that may race with postStartCommand.
|
|
98
|
+
HOOK_DIR="/usr/local/devcontainer-poststart.d"
|
|
99
|
+
mkdir -p "$HOOK_DIR"
|
|
100
|
+
cat > "$HOOK_DIR/99-claude-onboarding.sh" << 'HOOK_EOF'
|
|
101
|
+
#!/bin/bash
|
|
102
|
+
# Ensure hasCompletedOnboarding: true in .claude.json when token auth exists.
|
|
103
|
+
# Runs after all setup scripts to catch any overwrites by Claude Code CLI/extension.
|
|
104
|
+
_USERNAME="${SUDO_USER:-${USER:-vscode}}"
|
|
105
|
+
_USER_HOME=$(getent passwd "$_USERNAME" 2>/dev/null | cut -d: -f6)
|
|
106
|
+
_USER_HOME="${_USER_HOME:-/home/$_USERNAME}"
|
|
107
|
+
CLAUDE_DIR="${CLAUDE_CONFIG_DIR:-${_USER_HOME}/.claude}"
|
|
108
|
+
CLAUDE_JSON="$CLAUDE_DIR/.claude.json"
|
|
109
|
+
CRED_FILE="$CLAUDE_DIR/.credentials.json"
|
|
110
|
+
|
|
111
|
+
# Only act when token auth is configured
|
|
112
|
+
[ -f "$CRED_FILE" ] || exit 0
|
|
113
|
+
|
|
114
|
+
if [ -f "$CLAUDE_JSON" ]; then
|
|
115
|
+
if ! grep -q '"hasCompletedOnboarding"' "$CLAUDE_JSON" 2>/dev/null; then
|
|
116
|
+
if command -v jq >/dev/null 2>&1; then
|
|
117
|
+
jq '. + {"hasCompletedOnboarding": true}' "$CLAUDE_JSON" > "${CLAUDE_JSON}.tmp" && \
|
|
118
|
+
mv "${CLAUDE_JSON}.tmp" "$CLAUDE_JSON"
|
|
119
|
+
else
|
|
120
|
+
sed -i '$ s/}$/,\n "hasCompletedOnboarding": true\n}/' "$CLAUDE_JSON"
|
|
121
|
+
fi
|
|
122
|
+
echo "[claude-onboarding] Injected hasCompletedOnboarding into .claude.json"
|
|
123
|
+
fi
|
|
124
|
+
else
|
|
125
|
+
printf '{\n "hasCompletedOnboarding": true\n}\n' > "$CLAUDE_JSON"
|
|
126
|
+
echo "[claude-onboarding] Created .claude.json with hasCompletedOnboarding"
|
|
127
|
+
fi
|
|
128
|
+
HOOK_EOF
|
|
129
|
+
chmod +x "$HOOK_DIR/99-claude-onboarding.sh"
|
|
130
|
+
|
|
131
|
+
echo "[claude-code-native] Installation complete"
|
|
@@ -33,8 +33,8 @@ claude-dashboard -p 8080
|
|
|
33
33
|
claude-dashboard --help
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
The dashboard reads session data from `~/.claude/projects
|
|
36
|
+
The dashboard reads session data from `~/.claude/projects/`.
|
|
37
37
|
|
|
38
38
|
## How persistence works
|
|
39
39
|
|
|
40
|
-
Dashboard settings and cache are stored at `~/.claude-dashboard/`.
|
|
40
|
+
Dashboard settings and cache are stored at `~/.claude-dashboard/`. A poststart hook symlinks `~/.claude-dashboard` → `/workspaces/.claude-dashboard/`, which is bind-mounted and survives rebuilds.
|
|
@@ -19,8 +19,7 @@
|
|
|
19
19
|
"type": "string",
|
|
20
20
|
"description": "Which shells to configure aliases in (bash, zsh, or both)",
|
|
21
21
|
"default": "both",
|
|
22
|
-
"enum": ["bash", "zsh", "both"]
|
|
23
|
-
"proposals": ["bash", "zsh", "both"]
|
|
22
|
+
"enum": ["bash", "zsh", "both"]
|
|
24
23
|
},
|
|
25
24
|
"username": {
|
|
26
25
|
"type": "string",
|
|
@@ -14,7 +14,9 @@ Downloads and compiles the official kitty terminfo entry from the [Kitty termina
|
|
|
14
14
|
|
|
15
15
|
## Usage
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
The container defaults to `TERM=xterm-256color` with `COLORTERM=truecolor`, which provides full 256-color and 24-bit truecolor support for all terminals.
|
|
18
|
+
|
|
19
|
+
For Kitty users: the `devcontainer.json` `remoteEnv` uses `${localEnv:TERM:xterm-256color}`, which forwards your host `TERM` into VS Code sessions. If your host sets `TERM=xterm-kitty`, the installed terminfo ensures full Kitty-specific capability support (correct `bce` behavior, status line, etc.). For non-VS Code entry points (tmux, `docker exec`, SSH), `setup-aliases.sh` upgrades `TERM=xterm` to `xterm-256color` but preserves any other value. If no Kitty TERM is forwarded, `xterm-256color` provides equivalent color rendering.
|
|
18
20
|
|
|
19
21
|
```bash
|
|
20
22
|
# Verify installation
|
|
@@ -259,11 +259,11 @@ MCP_CONFIG_DIR="${USER_HOME}/.config/mcp"
|
|
|
259
259
|
|
|
260
260
|
**Current Behavior:**
|
|
261
261
|
- Feature creates: `~/.config/mcp/qdrant-config.json`
|
|
262
|
-
- Helper script (`configure-qdrant-mcp`) can update:
|
|
262
|
+
- Helper script (`configure-qdrant-mcp`) can update: `~/.claude/settings.json`
|
|
263
263
|
- User must manually run helper script
|
|
264
264
|
|
|
265
265
|
**Not Implemented (by request):**
|
|
266
|
-
- Automatic injection into
|
|
266
|
+
- Automatic injection into `~/.claude/settings.json` during installation
|
|
267
267
|
- This will be discussed separately
|
|
268
268
|
|
|
269
269
|
---
|
|
@@ -378,7 +378,7 @@ Based on comprehensive review, the following fixes were applied:
|
|
|
378
378
|
2. ✅ Fixed credentials leak - Added cleanup trap, secure temp file handling
|
|
379
379
|
|
|
380
380
|
### High Priority Fixes
|
|
381
|
-
3. ✅ Removed unused config directory (~/.config/mcp) - Target is
|
|
381
|
+
3. ✅ Removed unused config directory (~/.config/mcp) - Target is ~/.claude/settings.json
|
|
382
382
|
4. ✅ Consolidated helper scripts - Removed duplicate manual helper, kept auto-config only
|
|
383
383
|
5. ✅ Fixed redundant redirections - Changed `&>/dev/null 2>&1` to `&>/dev/null`
|
|
384
384
|
6. ✅ Fixed hardcoded workspace paths - Now uses `${WORKSPACE_ROOT:-/workspaces}`
|
|
@@ -154,6 +154,7 @@ The feature will validate these are present and exit with an error if missing.
|
|
|
154
154
|
- ✅ **Cloud or Local**: Supports both Qdrant Cloud and local instances
|
|
155
155
|
- ✅ **Idempotent**: Safe to run multiple times
|
|
156
156
|
- ✅ **Multi-user**: Automatically detects container user
|
|
157
|
+
- ✅ **Config-aware**: Respects `CLAUDE_CONFIG_DIR` environment variable (defaults to `~/.claude`)
|
|
157
158
|
- ✅ **Native mcpServers**: Uses VS Code's native devcontainer mcpServers support (declarative configuration)
|
|
158
159
|
- ✅ **Dynamic Configuration**: Environment variables loaded from `/workspaces/.qdrant-mcp.env` file
|
|
159
160
|
- ✅ **Secure**: API keys protected with 600 permissions on env file
|
|
@@ -39,12 +39,6 @@
|
|
|
39
39
|
"BAAI/bge-small-en-v1.5",
|
|
40
40
|
"sentence-transformers/all-mpnet-base-v2",
|
|
41
41
|
"BAAI/bge-base-en-v1.5"
|
|
42
|
-
],
|
|
43
|
-
"proposals": [
|
|
44
|
-
"all-MiniLM-L6-v2",
|
|
45
|
-
"BAAI/bge-small-en-v1.5",
|
|
46
|
-
"sentence-transformers/all-mpnet-base-v2",
|
|
47
|
-
"BAAI/bge-base-en-v1.5"
|
|
48
42
|
]
|
|
49
43
|
},
|
|
50
44
|
"username": {
|
|
@@ -56,6 +50,6 @@
|
|
|
56
50
|
"installsAfter": [
|
|
57
51
|
"ghcr.io/devcontainers/features/python:1",
|
|
58
52
|
"ghcr.io/devcontainers/features/common-utils:2",
|
|
59
|
-
"
|
|
53
|
+
"./features/claude-code-native"
|
|
60
54
|
]
|
|
61
55
|
}
|
|
@@ -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
|
# Import options from devcontainer-feature.json
|
|
@@ -188,8 +190,13 @@ else
|
|
|
188
190
|
QDRANT_LOCAL_PATH="${QDRANT_LOCAL_PATH:-/workspaces/.qdrant/storage}"
|
|
189
191
|
fi
|
|
190
192
|
|
|
193
|
+
# Resolve target user's home (guards against $HOME=/root during feature install)
|
|
194
|
+
_USERNAME="${SUDO_USER:-${USER:-vscode}}"
|
|
195
|
+
_USER_HOME=$(getent passwd "$_USERNAME" 2>/dev/null | cut -d: -f6)
|
|
196
|
+
_USER_HOME="${_USER_HOME:-/home/$_USERNAME}"
|
|
197
|
+
|
|
191
198
|
# Ensure settings.json exists
|
|
192
|
-
SETTINGS_FILE="
|
|
199
|
+
SETTINGS_FILE="${CLAUDE_CONFIG_DIR:-${_USER_HOME}/.claude}/settings.json"
|
|
193
200
|
if [ ! -f "$SETTINGS_FILE" ]; then
|
|
194
201
|
echo "[mcp-qdrant] ERROR: $SETTINGS_FILE not found"
|
|
195
202
|
exit 1
|
|
@@ -257,7 +264,7 @@ fi
|
|
|
257
264
|
|
|
258
265
|
# Set proper permissions
|
|
259
266
|
chmod 644 "$SETTINGS_FILE"
|
|
260
|
-
chown "$
|
|
267
|
+
chown "${_USERNAME}:${_USERNAME}" "$SETTINGS_FILE" 2>/dev/null || true
|
|
261
268
|
|
|
262
269
|
echo "[mcp-qdrant] ✓ Configuration complete"
|
|
263
270
|
HOOK_EOF
|
|
@@ -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
|
echo "[mcp-qdrant] Registering Qdrant MCP server with Claude Code..."
|
|
@@ -56,8 +58,13 @@ else
|
|
|
56
58
|
QDRANT_LOCAL_PATH="${QDRANT_LOCAL_PATH:-/workspaces/.qdrant/storage}"
|
|
57
59
|
fi
|
|
58
60
|
|
|
61
|
+
# Resolve target user's home (guards against $HOME=/root when hook runs as root)
|
|
62
|
+
_USERNAME="${SUDO_USER:-${USER:-vscode}}"
|
|
63
|
+
_USER_HOME=$(getent passwd "$_USERNAME" 2>/dev/null | cut -d: -f6)
|
|
64
|
+
_USER_HOME="${_USER_HOME:-/home/$_USERNAME}"
|
|
65
|
+
|
|
59
66
|
# Ensure settings.json exists
|
|
60
|
-
SETTINGS_FILE="
|
|
67
|
+
SETTINGS_FILE="${CLAUDE_CONFIG_DIR:-${_USER_HOME}/.claude}/settings.json"
|
|
61
68
|
if [ ! -f "$SETTINGS_FILE" ]; then
|
|
62
69
|
echo "[mcp-qdrant] ERROR: $SETTINGS_FILE not found"
|
|
63
70
|
exit 1
|
|
@@ -125,6 +132,6 @@ fi
|
|
|
125
132
|
|
|
126
133
|
# Set proper permissions
|
|
127
134
|
chmod 644 "$SETTINGS_FILE"
|
|
128
|
-
chown
|
|
135
|
+
chown "${_USERNAME}:${_USERNAME}" "$SETTINGS_FILE" 2>/dev/null || true
|
|
129
136
|
|
|
130
137
|
echo "[mcp-qdrant] ✓ Configuration complete"
|
|
@@ -23,17 +23,17 @@ The VS Code integrated terminal does **not** support tmux split panes. To use sp
|
|
|
23
23
|
|
|
24
24
|
### Option 1: Helper Scripts (Recommended)
|
|
25
25
|
|
|
26
|
-
Use the provided helper scripts in the `.
|
|
26
|
+
Use the provided helper scripts in the `.codeforge/scripts/` folder:
|
|
27
27
|
|
|
28
28
|
**Linux/macOS:**
|
|
29
29
|
```bash
|
|
30
|
-
cd /path/to/your/project/.
|
|
30
|
+
cd /path/to/your/project/.codeforge/scripts
|
|
31
31
|
./connect-external-terminal.sh
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
**Windows (PowerShell):**
|
|
35
35
|
```powershell
|
|
36
|
-
cd C:\path\to\your\project\.
|
|
36
|
+
cd C:\path\to\your\project\.codeforge\scripts
|
|
37
37
|
.\connect-external-terminal.ps1
|
|
38
38
|
```
|
|
39
39
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"name": "codeforge-lsp",
|
|
15
15
|
"description": "LSP servers for CodeForge (Python, TypeScript, Go)",
|
|
16
16
|
"version": "1.0.0",
|
|
17
|
-
"source": "codeforge-lsp",
|
|
17
|
+
"source": "./plugins/codeforge-lsp",
|
|
18
18
|
"category": "development",
|
|
19
19
|
"keywords": ["lsp", "python", "typescript", "go"]
|
|
20
20
|
},
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"name": "ticket-workflow",
|
|
23
23
|
"description": "EARS-based ticket workflow with GitHub integration",
|
|
24
24
|
"version": "1.0.0",
|
|
25
|
-
"source": "ticket-workflow",
|
|
25
|
+
"source": "./plugins/ticket-workflow",
|
|
26
26
|
"category": "workflow",
|
|
27
27
|
"keywords": ["tickets", "github", "workflow", "ears", "issues", "pr"]
|
|
28
28
|
},
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"name": "notify-hook",
|
|
31
31
|
"description": "Desktop notifications and audio chime when Claude finishes responding",
|
|
32
32
|
"version": "1.0.0",
|
|
33
|
-
"source": "notify-hook",
|
|
33
|
+
"source": "./plugins/notify-hook",
|
|
34
34
|
"category": "productivity",
|
|
35
35
|
"keywords": ["notifications", "desktop", "audio"]
|
|
36
36
|
},
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"name": "dangerous-command-blocker",
|
|
39
39
|
"description": "Blocks dangerous bash commands (rm -rf, sudo rm, chmod 777, force push)",
|
|
40
40
|
"version": "1.0.0",
|
|
41
|
-
"source": "dangerous-command-blocker",
|
|
41
|
+
"source": "./plugins/dangerous-command-blocker",
|
|
42
42
|
"category": "safety",
|
|
43
43
|
"keywords": ["safety", "bash", "blocker"]
|
|
44
44
|
},
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"name": "protected-files-guard",
|
|
47
47
|
"description": "Blocks modifications to .env, lock files, .git/, and credentials",
|
|
48
48
|
"version": "1.0.0",
|
|
49
|
-
"source": "protected-files-guard",
|
|
49
|
+
"source": "./plugins/protected-files-guard",
|
|
50
50
|
"category": "safety",
|
|
51
51
|
"keywords": ["safety", "secrets", "env", "lockfiles"]
|
|
52
52
|
},
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"name": "agent-system",
|
|
55
55
|
"description": "17 custom agents with built-in agent redirection, CWD injection, and read-only bash enforcement",
|
|
56
56
|
"version": "1.0.0",
|
|
57
|
-
"source": "agent-system",
|
|
57
|
+
"source": "./plugins/agent-system",
|
|
58
58
|
"category": "development",
|
|
59
59
|
"keywords": ["agents", "subagents", "redirection"]
|
|
60
60
|
},
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"name": "skill-engine",
|
|
63
63
|
"description": "21 coding knowledge packs with auto-suggestion for frameworks, tools, and patterns",
|
|
64
64
|
"version": "1.0.0",
|
|
65
|
-
"source": "skill-engine",
|
|
65
|
+
"source": "./plugins/skill-engine",
|
|
66
66
|
"category": "development",
|
|
67
67
|
"keywords": ["skills", "knowledge", "auto-suggestion"]
|
|
68
68
|
},
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"name": "spec-workflow",
|
|
71
71
|
"description": "Specification lifecycle management: creation, refinement, building, reviewing, updating, and auditing",
|
|
72
72
|
"version": "1.0.0",
|
|
73
|
-
"source": "spec-workflow",
|
|
73
|
+
"source": "./plugins/spec-workflow",
|
|
74
74
|
"category": "workflow",
|
|
75
75
|
"keywords": ["specifications", "lifecycle", "ears"]
|
|
76
76
|
},
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"name": "session-context",
|
|
79
79
|
"description": "Session lifecycle hooks: git state injection, TODO harvesting, and commit reminders",
|
|
80
80
|
"version": "1.0.0",
|
|
81
|
-
"source": "session-context",
|
|
81
|
+
"source": "./plugins/session-context",
|
|
82
82
|
"category": "development",
|
|
83
83
|
"keywords": ["session", "git", "todos", "commits"]
|
|
84
84
|
},
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"name": "auto-code-quality",
|
|
87
87
|
"description": "Self-contained code quality: auto-format + auto-lint edited files (Ruff/Black, Biome, gofmt, shfmt, dprint, rustfmt, Pyright, ShellCheck, go vet, hadolint, clippy)",
|
|
88
88
|
"version": "1.0.0",
|
|
89
|
-
"source": "auto-code-quality",
|
|
89
|
+
"source": "./plugins/auto-code-quality",
|
|
90
90
|
"category": "development",
|
|
91
91
|
"keywords": ["formatting", "linting", "syntax", "quality"]
|
|
92
92
|
},
|
|
@@ -94,9 +94,25 @@
|
|
|
94
94
|
"name": "workspace-scope-guard",
|
|
95
95
|
"description": "Enforces working directory scope — blocks writes and warns on reads outside the project",
|
|
96
96
|
"version": "1.0.0",
|
|
97
|
-
"source": "workspace-scope-guard",
|
|
97
|
+
"source": "./plugins/workspace-scope-guard",
|
|
98
98
|
"category": "safety",
|
|
99
99
|
"keywords": ["safety", "scope", "workspace"]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "prompt-snippets",
|
|
103
|
+
"description": "Quick behavioral mode switches via /ps command",
|
|
104
|
+
"version": "1.0.0",
|
|
105
|
+
"source": "./plugins/prompt-snippets",
|
|
106
|
+
"category": "productivity",
|
|
107
|
+
"keywords": ["snippets", "prompts", "modes", "shortcuts"]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"name": "git-workflow",
|
|
111
|
+
"description": "Standalone git workflow: ship (commit/push/PR) and PR review",
|
|
112
|
+
"version": "1.0.0",
|
|
113
|
+
"source": "./plugins/git-workflow",
|
|
114
|
+
"category": "workflow",
|
|
115
|
+
"keywords": ["git", "commit", "push", "pr", "review", "ship"]
|
|
100
116
|
}
|
|
101
117
|
]
|
|
102
118
|
}
|
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
# agent-system
|
|
2
2
|
|
|
3
|
-
Claude Code plugin that provides
|
|
3
|
+
Claude Code plugin that provides 21 custom agents (4 workhorse + 17 specialist) with automatic built-in agent redirection, working directory injection, read-only bash enforcement, and team quality gates.
|
|
4
4
|
|
|
5
5
|
## What It Does
|
|
6
6
|
|
|
7
7
|
Replaces Claude Code's built-in agents with enhanced custom agents that carry domain-specific instructions, safety hooks, and tailored tool configurations. Also provides team orchestration quality gates.
|
|
8
8
|
|
|
9
|
-
###
|
|
9
|
+
### Workhorse Agents
|
|
10
|
+
|
|
11
|
+
General-purpose agents designed for orchestrator mode (`cc-orc`). Each covers a broad domain, carrying detailed execution discipline, code standards, and a question-surfacing protocol. Most tasks need only 2-3 of these.
|
|
12
|
+
|
|
13
|
+
| Agent | Domain | Access | Model |
|
|
14
|
+
|-------|--------|--------|-------|
|
|
15
|
+
| investigator | Research, codebase search, git forensics, dependency audit, log analysis, performance profiling | Read-only | Sonnet |
|
|
16
|
+
| implementer | Code changes, bug fixes, refactoring, migrations | Full access (worktree) | Opus |
|
|
17
|
+
| tester | Test suite creation, coverage analysis, test verification | Full access (worktree) | Opus |
|
|
18
|
+
| documenter | Documentation, specs, spec lifecycle (create/refine/review/update) | Full access | Opus |
|
|
19
|
+
|
|
20
|
+
### Specialist Agents
|
|
21
|
+
|
|
22
|
+
Domain-specific agents for targeted tasks. Used by both `cc` (monolithic) and `cc-orc` (orchestrator) modes.
|
|
10
23
|
|
|
11
24
|
| Agent | Specialty | Access |
|
|
12
25
|
|-------|-----------|--------|
|
|
@@ -52,7 +65,9 @@ Per-agent hooks (registered within agent definitions, not in hooks.json):
|
|
|
52
65
|
|
|
53
66
|
| Agent | Hook | Script | Purpose |
|
|
54
67
|
|-------|------|--------|---------|
|
|
68
|
+
| implementer | PostToolUse (Edit) | `verify-no-regression.py` | Runs tests after each edit to catch regressions |
|
|
55
69
|
| refactorer | PostToolUse (Edit) | `verify-no-regression.py` | Runs tests after each edit to catch regressions |
|
|
70
|
+
| tester | Stop | `verify-tests-pass.py` | Verifies written tests actually pass |
|
|
56
71
|
| test-writer | Stop | `verify-tests-pass.py` | Verifies written tests actually pass |
|
|
57
72
|
|
|
58
73
|
## How It Works
|
|
@@ -156,7 +171,11 @@ agent-system/
|
|
|
156
171
|
+-- .claude-plugin/
|
|
157
172
|
| +-- plugin.json # Plugin metadata
|
|
158
173
|
+-- agents/
|
|
159
|
-
| +--
|
|
174
|
+
| +-- investigator.md # 4 workhorse agents (orchestrator mode)
|
|
175
|
+
| +-- implementer.md
|
|
176
|
+
| +-- tester.md
|
|
177
|
+
| +-- documenter.md
|
|
178
|
+
| +-- architect.md # 17 specialist agents
|
|
160
179
|
| +-- bash-exec.md
|
|
161
180
|
| +-- claude-guide.md
|
|
162
181
|
| +-- debug-logs.md
|
|
@@ -181,7 +200,7 @@ agent-system/
|
|
|
181
200
|
| +-- redirect-builtin-agents.py # Built-in agent redirection
|
|
182
201
|
| +-- task-completed-check.py # Test suite quality gate
|
|
183
202
|
| +-- teammate-idle-check.py # Incomplete task checker
|
|
184
|
-
| +-- verify-no-regression.py # Post-edit regression tests (refactorer)
|
|
203
|
+
| +-- verify-no-regression.py # Post-edit regression tests (implementer, refactorer)
|
|
185
204
|
| +-- verify-tests-pass.py # Test verification (test-writer)
|
|
186
205
|
+-- skills/
|
|
187
206
|
| +-- debug/
|
|
@@ -72,9 +72,9 @@ Direct model interaction via the Claude API (formerly Anthropic API). Covers Mes
|
|
|
72
72
|
.claude/main-system-prompt.md # Active system prompt
|
|
73
73
|
CLAUDE.md # Project instructions
|
|
74
74
|
|
|
75
|
-
#
|
|
76
|
-
.
|
|
77
|
-
.
|
|
75
|
+
# User-customizable configuration
|
|
76
|
+
.codeforge/config/settings.json # Default settings
|
|
77
|
+
.codeforge/config/main-system-prompt.md # Default system prompt
|
|
78
78
|
|
|
79
79
|
# Plugin directory
|
|
80
80
|
.devcontainer/plugins/devs-marketplace/plugins/ # All plugins
|
|
@@ -142,7 +142,7 @@ If the question involves configuration or SDK usage, provide a complete, runnabl
|
|
|
142
142
|
|
|
143
143
|
**Agent approach**:
|
|
144
144
|
1. WebFetch the Claude Code documentation for environment variable reference
|
|
145
|
-
2. Read local `.
|
|
145
|
+
2. Read local `.codeforge/config/settings.json` to show which are currently configured
|
|
146
146
|
3. Summarize the most important variables with their effects
|
|
147
147
|
|
|
148
148
|
**Output includes**: Answer with a categorized list of environment variables (model selection, behavior, performance, experimental features), Documentation References to the official docs, Related Features noting the `settings.json` `env` field as an alternative to shell environment variables.
|