Cairn
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Cairnread current progress for my-project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Cairn
跨 AI 编程工具、跨会话的项目进度中枢 —— 每个 agent、每个会话,干活前先读"走到哪了",干完自动堆上新的进度标记。
Cairn 在 ~/.cairn/ 维护一份每项目的 PROGRESS.md,作为 Claude Code / Codex / Cursor 等 AI 编程工具共用的"事实来源"。
Web Console 把当前任务(NOW)、下一步(NEXT)、里程碑时间线、Todos、各工具的 token / session 用量集中到一个深色仪表盘。
MCP server 暴露
cairn_read_progress/cairn_write_progress/cairn_add_activity/cairn_mark_milestone等工具,让 agent 一上来就读、干完就写。SessionEnd hook(目前覆盖 Claude Code)会话结束时自动追加进度。
文件级单一事实源:所有写入落到
PROGRESS.md,没有任何隐藏状态,能git diff看清楚。
当前为 MVP:单工具闭环(Claude Code)已通;Codex / Cursor 走日志扫描 + MCP 读写,未接 SessionEnd hook。详见 路线图。
目录
Related MCP server: Claude Habitat
核心理念
进度是文档,不是数据库。
PROGRESS.md用 YAML frontmatter + 几节 Markdown 描述「正在做 / 接下来 / 里程碑 / Todos / 活动流」。AI 工具可以直接读,人也可以直接编辑。跨工具共享同一份记忆。 Claude Code 干一半,明天用 Codex 继续 —— 只要它接了 Cairn MCP,第一件事就是
cairn_read_progress,自然衔接。会话结束自动落账。 SessionEnd hook 抽 transcript 要点写进活动流,不靠用户记得。
派生数据隔离。 Token / session 统计放在
db.sqlite里,是缓存,可以随便删 ——PROGRESS.md才是源。
快速上手
需要 Node ≥ 18,推荐 pnpm。
# 克隆并构建
git clone https://github.com/Zrzzzz/Cairn.git
cd Cairn
pnpm install
pnpm build
# 把当前项目接入 Cairn
node dist/cli/index.js init ~/dev/my-project
# 把 Cairn 注册到 Claude Code / Codex / Cursor 的 MCP 配置里
node dist/cli/index.js mcp-install --all
# 启动 Console(默认 http://127.0.0.1:3737)
node dist/cli/index.js serve打开浏览器访问 http://127.0.0.1:3737,就能看到这个项目和其它已接入项目的进度仪表盘。
需要后台常驻:
node dist/cli/index.js serve -d # daemon 模式
node dist/cli/index.js status # 查看 pid / url
node dist/cli/index.js stop # 停掉后台CLI 命令
命令 | 作用 |
| 接入项目:写 |
| 启动 Console Web + SSE; |
| 管理后台 daemon |
| Claude Code SessionEnd 调用:把会话总结追加到当前项目的活动流 |
| 在 stdio 上启动 MCP server,供 agent 接入 |
| 把 Cairn MCP 注册到 Claude Code / Codex / Cursor 的配置里,省略 |
| 反操作 |
cairn init 关键 flag:
--id <slug>覆盖项目 id(默认从目录名 slugify)--name <name>友好名称--tool claude-code,codex,cursor一次性接入多个工具--no-hook不写 Claude Code 的 SessionEnd hook--force覆盖已有PROGRESS.md
MCP 集成
跑过 cairn mcp-install 之后,agent 在每个新会话开始时应当:
调
cairn_list_projects找到当前 cwd 对应的项目(或显式project参数)。调
cairn_read_progress读取 Now / Next / Milestones / Todos。干活过程中用
cairn_add_activity/cairn_mark_milestone回写。
可用工具:
Tool | 说明 |
| 列出已接入项目(带 cwd 命中标记) |
| 读 PROGRESS.md(结构化输出 frontmatter + sections) |
| 部分更新 Now / Next / Milestones / Todos |
| 追加一条活动流 |
| 把里程碑标成 done / current / blocked / next |
| 列出未完成 Todos |
在 CLAUDE.md / AGENTS.md 里建议加这段提醒(cairn init 已自动写入):
## Cairn 进度
本项目接入了 Cairn 跨工具进度中枢。会话开始前,请先通过 MCP 工具
`cairn_read_progress({ project: "<project-id>" })` 读取当前进度。
推进工作后,用 `cairn_add_activity` / `cairn_mark_milestone` / `cairn_write_progress` 回写。数据布局
~/.cairn/
├── projects/
│ └── <project-id>/
│ └── PROGRESS.md # 单一事实源
├── db.sqlite # 派生缓存:token / session 统计
└── config.jsonPROGRESS.md 示例:
---
schema: cairn/v1
id: my-project
name: My Project
repo: ~/dev/my-project
tools: [claude-code, codex]
last_activity: 2026-06-19T20:11:00.000Z
created: 2026-06-18T09:30:00.000Z
---
## Now
把仪表盘的数据抓取从 fetch 换成 SWR + suspense
## Next
迁移登录页 · 灰度 10% 用户
## Milestones
- [x] 设计系统 — 6/02
- [x] 认证流 — 6/10
- [~] 仪表盘 — 进行中
- [ ] 上线
## Todos
- [ ] 设计 token 颜色梳理 <!-- src:web 2026-06-19 -->
- [x] 接通 SSE 实时刷新
## Activity
- 2026-06-19T20:11:00.000Z · claude-code · 把 ProjectCard 重写为时间线版db.sqlite 只是用来撑仪表盘的派生数据,删了 cairn serve 下一次扫描会重建。
架构
┌───────────────────────────────────────────────────────────┐
│ ~/.cairn/projects/<id>/ │
│ PROGRESS.md │ <- 单一事实源
└────^──────────────────────────────────────^───────────────┘
│ 文件监听 (chokidar) │ 读 / 写
│ │
┌────┴──────────────┐ ┌──────────────────┴──────────────┐
│ cairn serve │ │ cairn mcp (stdio) │
│ · Hono + SSE │ │ · Claude Code / Codex / Cursor │
│ · React Console │ │ · cairn_read_progress 等 │
└────────^──────────┘ └─────────────────────────────────┘
│ HTTP / SSE
│
浏览器 Dashboard后端:
src/web用 Hono 起 HTTP 服务,文件变更走 chokidar → SSE 推到前端。MCP server:
src/mcp走@modelcontextprotocol/sdk的 stdio transport。派生统计:
src/core/jsonl.ts/codex.ts/cursor.ts定时扫各工具的本地 transcript,把 token / session 聚合写入db.sqlite。前端:
ui/是独立的 Vite + React 工程,构建产物被cairn serve直接 mount。
开发
pnpm install
# 前端热更(默认 http://localhost:5173)
pnpm dev:ui
# 后端 + MCP 热更
pnpm dev:server
# 一键类型检查
pnpm typecheck
# 全量构建
pnpm build代码组织:
src/
├── cli/ # cairn 子命令:init / serve / hook / mcp / mcp-install ...
├── core/ # 进度文件解析、文件监听、各 AI 工具日志扫描
├── hook/ # SessionEnd hook 实现
├── mcp/ # MCP server + tools
├── shared/ # 前后端共享类型 (api.ts)
└── web/ # Hono routes + SSE
ui/ # React + Vite 控制台
templates/ # PROGRESS.md / CLAUDE.md / AGENTS.md / .cursorrules 模板
scripts/ # 构建辅助详细贡献流程见 CONTRIBUTING.md。
路线图
PROGRESS.md schema + 解析器
CLI
init/serve/mcp/mcp-installReact Console(时间线 / 当前任务高亮 / 工具筛选 / 搜索)
Claude Code SessionEnd hook
Claude Code / Codex / Cursor 日志扫描
Codex / Cursor 的"会话结束"等价 hook
多项目里程碑联动视图
远程 Console(认证 + 多用户)
PROGRESS.mdschema 版本号兼容机制
贡献
欢迎 issue / PR。开始之前请读一下 CONTRIBUTING.md 和 行为准则。
License
MIT © 2026 Zrzzzz
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Zrzzzz/Cairn'
If you have feedback or need assistance with the MCP directory API, please join our Discord server