colin.toml, a TOML file in your project root. This file defines project metadata, directory paths, output destinations, LLM settings, and MCP server connections.
Project Settings
The[project] section contains core project configuration:
colin.toml
| Setting | Description | Default |
|---|---|---|
name | Project name for display | Directory name |
model-path | Directory containing source documents | models |
output-path | Directory for compiled output (see Output Targets) | output |
Directory Paths
Paths can be relative to the location ofcolin.toml or absolute:
src/context/ and writes to dist/.
Absolute paths are also supported:
Output Targets
Output targets control where Colin writes compiled files. The simpleoutput-path setting works for most projects, but when you need more control over output behavior, use the [project.output] section.
Target Types
Colin supports three target types, each suited to different use cases. Local targets write to a directory you specify. This is the default behavior and equivalent to usingoutput-path directly. The entire output directory is managed as a unit, with a single manifest at the root tracking all files.
colin.toml
stripe/payments.md and github/issues.md, Colin writes separate manifests to stripe/.colin-manifest.json and github/.colin-manifest.json.
colin.toml
scope parameter determines whether skills are user-wide or project-specific.
colin.toml
scope = "user", Colin writes to ~/.claude/skills/. This makes skills available in all Claude Code sessions on your machine.
With scope = "project", Colin writes to .claude/skills/ relative to the project. Colin searches upward from the project root to find an existing .claude directory; if none exists, it creates one in the project root. Project-scoped skills are available only when Claude Code runs from within that project.
colin.toml
path, which takes precedence over the scope-based location:
colin.toml
Manifest Ownership
Each target type determines how manifests track file ownership. Manifests enable Colin to clean up stale files without affecting unrelated content in the output directory. Local targets use a single manifest at the output root. All files in the directory are considered managed by Colin. Skill targets and Claude skill targets use per-subdirectory manifests. Each first-level directory (likestripe/ or github/) gets its own manifest that tracks only files within that directory. This allows different projects or compilation runs to write to sibling directories without interfering with each other.
Compatibility
The simpleoutput-path configuration remains fully supported. When you use output-path, Colin treats it as a local target with that path:
colin.toml
colin.toml
output-path for straightforward local output. Switch to [project.output] when you need skill manifests or Claude Code integration.
LLM Provider
Configure the default LLM model using[[providers.llm]]:
colin.toml
provider:model-name. Currently supported providers:
| Provider | Example Models |
|---|---|
anthropic | claude-sonnet-4-5, claude-haiku-4-5 |
openai | gpt-4o, gpt-4o-mini |
COLIN_DEFAULT_LLM_MODEL environment variable, then to anthropic:claude-sonnet-4-5.
MCP Servers
MCP servers are configured under[[providers.mcp]]. Each entry requires a name that becomes accessible in templates as colin.mcp.<name>. See Providers for usage documentation.
Stdio Servers
Local process servers communicate via stdin/stdout:colin.toml
| Field | Description |
|---|---|
command | Executable to run |
args | Command-line arguments as an array |
env | Environment variables as a table |
scheme-suffix overrides the URI scheme suffix (defaults to name). Templates still use the name, but ref URIs use mcp.<scheme-suffix>://....
Environment Variables
Pass environment variables to server processes:colin.toml
${VAR} syntax:
Remote Servers
HTTP and SSE servers connect over the network:colin.toml
colin.toml
Using MCP Resources
Reference configured servers in your documents:models/sources/projects.md
name, and the argument is the resource URI, which varies by server.
Environment Variables
Colin supports environment variables for global settings:| Environment Variable | Description | Default |
|---|---|---|
COLIN_DEFAULT_LLM_MODEL | Fallback LLM model when not configured in project | anthropic:claude-sonnet-4-5 |
COLIN_FERNET_KEY | Encryption key for OAuth token storage | None (unencrypted) |
[[providers.llm]] model → COLIN_DEFAULT_LLM_MODEL → built-in default.
OAuth Token Encryption
OAuth tokens for providers like Linear and Notion are stored at~/.colin/mcp-oauth/. By default, tokens are stored unencrypted.
To encrypt stored tokens, set COLIN_FERNET_KEY to a Fernet encryption key:
Environment Variable Substitution
Colin substitutes${VAR} patterns anywhere in colin.toml:
colin.toml
${VAR:-default}. If LLM_MODEL is unset, Colin uses anthropic:claude-haiku-4-5.
Unset variables without defaults become empty strings. This is useful for optional configuration but can cause errors if required values are missing—Colin won’t warn about unset variables at parse time.
Complete Example
A full configuration demonstrating all options:colin.toml
context/, compiles them using Claude Sonnet for any LLM operations, and writes the results directly to your user-level Claude Code skills directory. The compiled skills become immediately available in all your Claude Code sessions. Four MCP servers provide access to GitHub, Linear, a Postgres data warehouse, and an internal API.