Persistent, structured project management for AI coding agents.
Give your AI assistant a memory that survives sessions, context windows, and compaction.
curl -fsSL https://raw.githubusercontent.com/colliery-io/metis/main/scripts/install.sh | bashThis installs the Metis desktop app. Launch it once -- on first launch it installs the metis CLI (which includes the MCP server) to your system PATH. After that, you're ready to connect Claude Code.
Other install methods
Manual download from GitHub Releases:
- macOS (Apple Silicon):
Metis_x.x.x_aarch64.dmg - macOS (Intel):
Metis_x.x.x_x64.dmg - Windows:
Metis_x.x.x_x64-setup.exe - Linux:
Metis_x.x.x_amd64.AppImage
macOS note: You may need to run sudo xattr -rd com.apple.quarantine "/Applications/Metis.app" after installing.
AI coding agents lose context constantly -- not just between sessions, but during them. Context compaction, token limits, and session boundaries all erase the plan, the progress, and the reasoning behind decisions already made.
Metis is a memory system for AI agents. It gives them a persistent, file-backed place to generate work, track progress, and record decisions -- so nothing is lost when context shifts. It uses the Flight Levels methodology to add opinionated structure around how work is created and tracked, so your AI doesn't just remember what to do, it works through it intentionally.
- Persistent across everything. Progress, decisions, and next steps live in markdown files that survive compaction, session restarts, and context window limits. Your AI reads the task and picks up where it left off.
- Intentional work generation. Instead of jumping straight to code, Metis structures work top-down: Vision > Initiative > Task. Each level has phases that enforce thinking before doing -- discovery before design, design before decomposition.
- Human-in-the-loop where it matters. Strategic decisions (initiative direction, architectural choices, task breakdown) require your approval. Tactical execution can be autonomous. You control the "what," the AI handles the "how."
- Plain markdown, git-friendly. Documents are markdown with YAML frontmatter in a
.metis/directory. No lock-in, no proprietary formats. Read them in any editor, commit them with your code, diff them in PRs.
After launching the Metis app once (so the CLI is installed), add the MCP server and plugin:
claude mcp add --scope user --transport stdio metis -- metis mcpThen inside Claude Code:
/plugin marketplace add colliery-io/metis
/plugin install metis@colliery-io-metis
With the plugin installed, Metis detects your project automatically. Just talk to Claude:
You: "Initialize Metis for this project."
Claude creates the .metis/ directory and works with you to write a vision statement -- the purpose and direction of the project. Even for an existing codebase, the vision captures where the project is headed so all future work traces back to it.
You: "I want to add real-time collaboration to this app."
Claude creates initiatives under the vision. You discuss scope, approve the direction, and shape what gets built:
"Build a real-time collaboration platform" # Vision - the why
├── "Implement WebSocket infrastructure" # Initiative - a project
├── "Build presence system" # Initiative
└── "Design conflict resolution" # Initiative
You: "Break down the WebSocket initiative into tasks."
Claude proposes a task breakdown, you review and adjust, and Claude creates the tasks:
"Implement WebSocket infrastructure"
├── "Set up WebSocket server" # Task
├── "Add connection pooling" # Task
└── "Write integration tests" # Task
You: "/metis-ralph PROJ-T-0001"
Claude picks up the task, transitions it to active, and works on it autonomously -- writing code, running tests, updating the task document with progress. When it's done, it signals for your review.
This is the key idea. While a task is active, the AI continuously updates it with:
- What it completed, what files it changed
- What it discovered (unexpected patterns, blockers)
- Decisions made and why
- What's left to do
If the session ends or context compacts, the next session reads the task and picks up seamlessly. No work is lost.
Choose the right level of structure for your project:
Streamlined (default) -- good for most projects:
Vision → Initiative → Task
Full -- for complex, multi-team efforts:
Vision → Strategy → Initiative → Task
Direct -- for simple, solo work:
Vision → Task
Set during init or change later:
metis init --name "My Project" --preset full
metis config set --preset directEach document type progresses through defined phases:
| Type | Phases |
|---|---|
| Vision | draft > review > published |
| Strategy | shaping > design > ready > active > completed |
| Initiative | discovery > design > ready > decompose > active > completed |
| Task | todo > active > completed (+ blocked) |
| ADR | draft > discussion > decided > superseded |
Phases are forward-only. You can't skip from todo to completed -- the task must go through active first. This prevents cutting corners.
Claude interacts with Metis through MCP tools:
| Tool | Purpose |
|---|---|
initialize_project |
Create a .metis/ workspace |
create_document |
Create vision, initiative, task, ADR, or backlog item |
read_document |
Read document content by short code |
edit_document |
Update document content |
transition_phase |
Advance through workflow phases |
list_documents |
List all documents with filtering |
search_documents |
Full-text search across documents |
archive_document |
Archive completed documents and children |
reassign_parent |
Move tasks between initiatives or to/from backlog |
index_code |
Generate a code index for AI codebase navigation |
Every document gets a unique short code (e.g., PROJ-T-0042) used to reference it in all operations.
The metis CLI works directly from your terminal too:
metis init --name "Project Vision" # Initialize
metis create initiative "Auth System" --vision "project-vision" # Create documents
metis list --type task # List documents
metis transition "PROJ-T-0001" # Advance phase
metis search "authentication" # Full-text search
metis status # Project overview
metis index # Generate code index
metis index --incremental # Re-index changed files onlyA visual kanban interface for managing projects. Boards for each document type, a rich markdown editor, drag-and-drop phase transitions, and multi-project support. Installed automatically via the install script.
/metis-ralph <SHORT_CODE> -- Autonomous task execution loop. Claude picks up a task, works on it iteratively (writing code, running tests, fixing issues), updates the task document with progress, and signals when done for your review. Use /cancel-metis-ralph to stop a running loop.
The plugin also includes skills (contextual methodology guidance for decomposition, phase transitions, and project setup) and hooks (automatic project detection on session start, state re-injection after context compaction).
See the full plugin documentation for details.
Metis can generate a structured codebase map at .metis/code-index.md for AI agent navigation. It uses tree-sitter to extract symbols (functions, structs, traits, classes, interfaces) across five languages: Rust, Python, TypeScript, JavaScript, and Go.
The index has two layers:
- Structural (automated) -- deterministic symbol extraction with file paths, signatures, visibility, and line numbers. Generated by
metis indexor theindex_codeMCP tool. - Semantic (AI-generated) -- module-level summaries explaining what code means, not just what symbols exist. Generated by the plugin's code-index skill using a background agent.
metis index # Full index
metis index --incremental # Re-index only changed files (uses BLAKE3 hashing)Incremental indexing tracks file content hashes so only modified files are re-parsed. On large codebases this takes seconds instead of minutes. The plugin automatically tracks which files you edit and triggers incremental re-indexing before context compaction, so the index stays fresh without manual intervention.
AI-generated summaries are preserved across re-indexing -- only new or changed modules get placeholder text.
Documents are generated from Tera templates with a fallback chain:
- Project:
.metis/templates/{type}/content.md(highest priority) - Global:
~/.config/metis/templates/{type}/content.md - Built-in defaults
Available variables include {{ title }}, {{ slug }}, {{ short_code }}, {{ created_at }}, and type-specific variables like {{ parent_title }} for tasks.
Metis is built in Rust with six crates:
| Crate | Role |
|---|---|
metis-docs-core |
Domain logic, document management, SQLite + FTS5 search |
metis-docs-cli |
CLI binary (metis), bundled with GUI installer |
metis-docs-mcp |
MCP server for AI assistant integration |
metis-docs-gui |
Desktop app (Tauri + Vue 3), auto-installs CLI on first launch |
metis-code-index |
Tree-sitter code extraction and indexing engine |
metis-docs-tui |
Terminal UI (deprecated) |
Documents are markdown files with YAML frontmatter, indexed in SQLite with FTS5 for fast full-text search. The filesystem is the source of truth; the database is a disposable cache.
angreal test # Run all tests
angreal build # Build all crates
angreal check # Clippy + format + check
angreal coverage # Generate coverage report
angreal gui # Launch GUI in dev modeApache 2.0 License. Contributions welcome:
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure
angreal checkandangreal testpass - For GUI changes, include a written test journey
- Submit a pull request