Optional Components
CodeForge includes several components that are available but not always enabled in the default setup. This page covers how to enable and configure them.
Per-Hook Disable
Section titled “Per-Hook Disable”Individual hooks can be disabled without turning off their entire plugin. The file .codeforge/config/disabled-hooks.json contains a "disabled" array of script names:
{ "disabled": [ "git-state-injector", "ticket-linker", "spec-reminder", "commit-reminder" ]}Add a hook’s script name (without path or extension) to disable it. Remove it to re-enable. Changes take effect immediately — no container rebuild required.
This is useful when a hook is noisy or conflicts with your workflow but you want the rest of the plugin to keep running. See Hooks — Per-Hook Disable for the full reference.
LSP Servers
Section titled “LSP Servers”Language Server Protocol servers provide inline diagnostics, go-to-definition, and completions for supported languages. LSP servers are disabled by default.
Enabling
Section titled “Enabling”- In
devcontainer.json, set thelsp-serversfeature version to"latest":
"./features/lsp-servers": { "version": "latest" }- In
settings.json, ensure thecodeforge-lspplugin is enabled:
{ "enabledPlugins": { "codeforge-lsp@devs-marketplace": true }}- Rebuild the container.
ccms (Claude Code Memory Search)
Section titled “ccms (Claude Code Memory Search)”A Rust-based session search tool. Replaced in the default build by codeforge session search, but still available as an opt-in feature.
Enabling
Section titled “Enabling”Uncomment the ccms entry in devcontainer.json:
"./features/ccms": {}ccburn
Section titled “ccburn”A terminal burn-down visualization tool. Currently commented out in the default build — it has been replaced by ccstatusline.
If you want the older burn-down view, uncomment it in devcontainer.json:
"./features/ccburn": {}Rust Toolchain
Section titled “Rust Toolchain”The Rust compiler and Cargo are available as an opt-in feature for projects that need Rust compilation (including ccms).
Enabling
Section titled “Enabling”Uncomment the Rust feature in devcontainer.json:
"ghcr.io/devcontainers/features/rust:1.5.0": { "version": "latest" }Rebuild the container after enabling.
Go Runtime
Section titled “Go Runtime”The Go compiler and toolchain are available as an opt-in feature for projects that include Go code.
Enabling
Section titled “Enabling”Uncomment the Go feature in devcontainer.json:
"ghcr.io/devcontainers/features/go:1": { "version": "latest" }Rebuild the container after enabling.
Formatters and Linters
Section titled “Formatters and Linters”Several formatters and linters are present in devcontainer.json but disabled by default (set to "version": "none"). To enable any of them, change the version to "latest" and rebuild:
| Tool | Feature Path | Purpose |
|---|---|---|
| shfmt | ./features/shfmt | Shell script formatter |
| dprint | ./features/dprint | Pluggable code formatter (Markdown, TOML, JSON, etc.) |
| shellcheck | ./features/shellcheck | Shell script static analysis |
| hadolint | ./features/hadolint | Dockerfile linter |
Example
Section titled “Example”{ "features": { "./features/shfmt": { "version": "latest" }, "./features/dprint": { "version": "latest" }, "./features/shellcheck": { "version": "latest" }, "./features/hadolint": { "version": "latest" } }}These tools integrate with the auto-code-quality plugin — once installed, they are automatically invoked at Stop for any files they support.
mcp-qdrant (Vector Memory for Claude)
Section titled “mcp-qdrant (Vector Memory for Claude)”Adds persistent vector memory to Claude Code via a Qdrant MCP server. Claude can store and retrieve information across sessions using qdrant-store and qdrant-find tools.
Enabling
Section titled “Enabling”Add to devcontainer.json under "features":
"./features/mcp-qdrant": { "collectionName": "my-project-memory", "embeddingModel": "all-MiniLM-L6-v2"}Options
Section titled “Options”| Option | Default | Description |
|---|---|---|
collectionName | agent-memory | Qdrant collection name |
embeddingModel | all-MiniLM-L6-v2 | Embedding model for vector search |
qdrantUrl | (empty) | Remote Qdrant server URL. If empty, uses local storage. |
qdrantApiKey | (empty) | API key for remote Qdrant server |
qdrantLocalPath | /workspaces/.qdrant/storage | Local storage path (when no URL set) |
Supported Embedding Models
Section titled “Supported Embedding Models”all-MiniLM-L6-v2— default, smallest, fastestBAAI/bge-small-en-v1.5BAAI/bge-base-en-v1.5sentence-transformers/all-mpnet-base-v2
How It Works
Section titled “How It Works”- During container build, the embedding model is pre-downloaded from GCS (not HuggingFace, to avoid network issues in containers).
- On container start, a post-start hook registers the Qdrant MCP server in Claude Code’s
settings.json. - Claude Code can then use
qdrant-storeandqdrant-findtools to persist and search memories.
Verification
Section titled “Verification”uvx mcp-server-qdrant --helpCodex CLI
Section titled “Codex CLI”OpenAI’s open-source terminal coding agent. Enabled by default — set "version": "none" to disable.
Configuration
Section titled “Configuration”The feature installs Codex CLI via npm and creates ~/.codex/ for credentials and configuration. A user-editable config.toml is deployed from .codeforge/config/codex-config.toml via the file manifest.
"./features/codex-cli": {}Authentication
Section titled “Authentication”Codex CLI requires an OpenAI account. Two methods:
- Browser login — run
codexand select “Sign in with ChatGPT” (requires ChatGPT Plus, Pro, Business, Edu, or Enterprise plan) - API key — set
OPENAI_API_KEYin.devcontainer/.secretsor as a Codespaces secret. On container start,setup-auth.shauto-creates~/.codex/auth.json.
Credentials persist across container rebuilds via a Docker named volume (codeforge-codex-config-${devcontainerId}).
Disabling
Section titled “Disabling”"./features/codex-cli": { "version": "none" }Disabling Default Features
Section titled “Disabling Default Features”Any feature can be disabled without removing it from devcontainer.json by setting "version": "none":
"./features/hadolint": { "version": "none" },"./features/shellcheck": { "version": "none" }The feature entry stays in the config for easy re-enabling — just remove "version": "none" or set it to "latest".
Related
Section titled “Related”- Settings and Permissions — runtime settings and plugin toggles
- Container Configuration — devcontainer.json and feature configuration
- Plugin System — plugin system overview and per-plugin configuration
- Troubleshooting — solutions for build and feature issues