Skip to main content
This guide walks through creating a Colin project that compiles a skill from live sources. If you haven’t already installed Colin, follow the installation instructions.

Initialize a Project

Create a new directory and initialize a Colin project:
mkdir my-skill && cd my-skill
colin init
This creates:
  • colin.toml - Project configuration
  • models/ - Directory for your source documents

Create a Source Document

Start with a simple document that will be referenced by the skill:
models/environments.md
---
name: Environment Configuration
---

## Staging
- URL: staging.acme.com
- Auto-deploys on merge to main

## Production
- URL: acme.com
- Manual promotion via `/deploy prod` in Slack

Create a Skill

Now create a skill that references the environments document:
models/deploy/SKILL.md
---
name: deployment-process
description: How to deploy code to staging and production
---

# Deployment

{{ ref('environments').content }}

## Steps

1. Create a PR against main
2. Wait for CI to pass
3. Get approval from a code owner
4. Merge to main
The ref('environments') call does two things:
  1. Registers that SKILL.md depends on environments.md
  2. Returns the compiled content

Compile

Run the compiler:
colin run
Colin displays progress:
Config:  colin.toml
Project: my-skill
Output:  output/

✓ environments.md
✓ deploy/SKILL.md
  ← ref:environments
Colin detected the dependency and compiled environments.md first.

Add LLM Processing

The | llm_extract() filter pulls specific information using an LLM:
models/deploy/SKILL.md
---
name: deployment-process
description: How to deploy code to staging and production
---

# Deployment

{{ ref('environments').content }}

## Steps

1. Create a PR against main
2. Wait for CI to pass
3. Get approval from a code owner
4. Merge to main

## Quick Reference

{{ ref('environments') | llm_extract('a one-line summary of each environment') }}
Compile again:
colin run
Config:  colin.toml
Project: my-skill
Output:  output/

✓ environments.md
✓ deploy/SKILL.md
  ← ref:environments
  ✓ llm:auto:a1b2c3
The ✓ llm: entry shows an LLM call completed. On subsequent runs with the same input, you’ll see » indicating the result was served from cache.

Output to Claude Code

Configure Colin to write directly to Claude Code’s skills folder:
colin.toml
[project]
name = "my-skill"

[project.output]
target = "claude-skill"
scope = "user"
Run colin run again. The skill now appears in ~/.claude/skills/ and is available in all Claude Code sessions.

Incremental Builds

Edit environments.md and run colin run again. Colin detects the change and recompiles SKILL.md because it depends on environments.md. Documents that haven’t changed skip compilation.

What’s Next?

You’ve learned the basics:
  • Initialize a project with colin init
  • Create documents with frontmatter
  • Reference other documents with ref()
  • Transform content with | llm_extract()
  • Output skills to Claude Code
Next: Agent Skills covers skills in depth, including MCP integration and multi-file skills.