Skip to content

Configuration Reference

Crucible uses TOML configuration files. The main config file is at ~/.config/crucible/config.toml.

# Minimal config - just set your kiln path
kiln_path = "/home/user/notes"
[chat]
provider = "ollama"
model = "llama3.2"
OptionTypeDefaultDescription
kiln_pathpathcurrent dirPath to your notes directory (kiln)
agent_directorieslist[]Additional directories to search for agent cards

Controls the chat interface and LLM settings for internal agents.

OptionTypeDefaultDescription
modelstringprovider defaultModel to use (e.g., “llama3.2”, “gpt-4o”)
providerstring"ollama"LLM provider: ollama, openai, anthropic
agent_preferencestring"acp"Prefer acp (external) or crucible (internal) agents
endpointstringprovider defaultCustom API endpoint URL
temperaturefloat0.7Generation temperature (0.0-2.0)
max_tokensint2048Maximum tokens to generate
timeout_secsint120API timeout in seconds
enable_markdownbooltrueEnable markdown rendering
size_aware_promptsbooltrueEnable size-aware prompt optimization for small models

Size-aware prompts: When enabled, models under 4B parameters get explicit tool guidance and read-only tools only, preventing tool loops. Disable if you want to experiment with small models having full tool access.

Controls external agent communication (Claude Code, OpenCode, etc.).

OptionTypeDefaultDescription
default_agentstringauto-discoverDefault agent to use
enable_discoverybooltrueEnable agent auto-discovery
session_timeout_minutesint30Session timeout
max_message_size_mbint25Maximum message size in MB
streaming_timeout_minutesint15Timeout for streaming responses
lazy_agent_selectionbooltrueShow agent picker on startup

Define custom agent profiles with environment overrides:

[acp.agents.opencode-local]
env.LOCAL_ENDPOINT = "http://localhost:11434/v1"
env.OPENCODE_MODEL = "ollama/llama3.2"
[acp.agents.claude-proxy]
extends = "claude"
env.ANTHROPIC_BASE_URL = "http://localhost:4000"
[acp.agents.custom-agent]
command = "/usr/local/bin/my-agent"
args = ["--mode", "acp"]
env.MY_API_KEY = "secret"

Controls how text embeddings are generated for semantic search.

OptionTypeDefaultDescription
providerstring"fastembed"Provider type (see below)
modelstringprovider defaultModel name
api_urlstringprovider defaultAPI endpoint for remote providers
batch_sizeint16Batch size for processing
max_concurrentintprovider defaultMax concurrent embedding jobs

Providers:

  • fastembed - Local CPU-friendly (default: BAAI/bge-small-en-v1.5)
  • ollama - Local Ollama (default: nomic-embed-text)
  • openai - OpenAI API (default: text-embedding-3-small)
  • anthropic - Anthropic API
  • burn - Local GPU via Burn framework
  • llamacpp - Local GPU via llama.cpp

Controls how project context is loaded.

OptionTypeDefaultDescription
rules_fileslistsee belowFiles to search for project rules

Default rules files: ["AGENTS.md", ".rules", ".github/copilot-instructions.md"]

Rules files are loaded hierarchically from git root to workspace directory. See Rules Files for details.

[context]
# Add Cursor and Claude Code compatibility
rules_files = ["AGENTS.md", "CLAUDE.md", ".rules", ".cursorrules"]
OptionTypeDefaultDescription
show_progressbooltrueShow progress bars for long operations
confirm_destructivebooltrueConfirm destructive operations
verboseboolfalseEnable verbose logging

Define multiple LLM provider instances by name:

[llm]
default = "local"
[llm.providers.local]
type = "ollama"
endpoint = "http://localhost:11434"
default_model = "llama3.2"
[llm.providers.cloud]
type = "openai"
default_model = "gpt-4o"
api_key = "OPENAI_API_KEY" # Uses env var
temperature = 0.9
max_tokens = 8192

Configure upstream MCP (Model Context Protocol) servers to aggregate external tools.

OptionTypeDefaultDescription
serverslist[]List of upstream MCP server configurations

Each server in the list has these options:

OptionTypeDefaultDescription
namestringrequiredUnique identifier for this upstream
prefixstringrequiredPrefix for tool names (must end with _)
transporttablerequiredConnection configuration
allowed_toolslistallWhitelist of tool patterns (glob)
blocked_toolslistnoneBlacklist of tool patterns (glob)
auto_reconnectbooltrueReconnect on disconnect
timeout_secsint30Tool call timeout

Transport types:

  • stdio - Spawn subprocess: command, args, env
  • sse - HTTP SSE: url, auth_header
[[mcp.servers]]
name = "github"
prefix = "gh_"
[mcp.servers.transport]
type = "stdio"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
[mcp.servers.transport.env]
GITHUB_TOKEN = "{env:GITHUB_TOKEN}"

See MCP Configuration for full details.

Controls how notes are processed during indexing.

[processing]
# Processing options here
[logging]
# Logging options here

Some settings can be overridden via environment variables:

VariableDescription
CRUCIBLE_KILN_PATHOverride kiln path
OPENAI_API_KEYOpenAI API key
ANTHROPIC_API_KEYAnthropic API key
  • Global config: ~/.config/crucible/config.toml
  • Workspace config: .crucible/config.toml (in project root)

Workspace config overrides global config.

kiln_path = "/home/user/notes"
[chat]
provider = "ollama"
model = "llama3.2"
endpoint = "http://localhost:11434"
[embedding]
provider = "ollama"
model = "nomic-embed-text"
kiln_path = "/home/user/notes"
[chat]
provider = "ollama"
model = "qwen2.5-coder-32b"
endpoint = "https://llama.example.com"
[embedding]
provider = "ollama"
model = "nomic-embed-text"
api_url = "https://llama.example.com"
kiln_path = "/home/user/notes"
[chat]
provider = "openai"
model = "gpt-4o"
[embedding]
provider = "openai"
model = "text-embedding-3-small"

Mixed Setup (Local embeddings, Cloud chat)

Section titled “Mixed Setup (Local embeddings, Cloud chat)”
kiln_path = "/home/user/notes"
[chat]
provider = "openai"
model = "gpt-4o"
[embedding]
provider = "fastembed"
model = "BAAI/bge-small-en-v1.5"
[chat]
model = "granite-3b"
size_aware_prompts = false # Give small model all tools