@moyu-build/council
v0.5.1
Published
Council — 你的思考议会。捕获对话, 蒸馏思维 skill, 召集多 persona 辩论。CLI + MCP server, 跨 Claude Desktop / Cursor / Claude Code 通用。
Downloads
1,138
Maintainers
Readme
Council
Your personal thinking council for the AI era.
Council turns your real conversations into reusable self-personas, then lets you convene them with mentors and roles across CLI, Web, and MCP.
Author: 墨宇 (Siyu Deng) · License: MIT · Status: EvoTavern Hackathon 2026
Stack: Node 20+ · TypeScript · MCP Protocol · Anthropic Claude (Haiku 4.5) · Vite + React + Tailwind
Hackathon Submission
如果你是第一次来到这个项目, 建议先看路演材料, 再决定要不要深入代码。
| Audience | Material | Format | |---|---|---| | 评委 / 导师 | 横屏路演 Deck | PDF | | 评委 / 导师 | 横屏路演源文件 | PPTX | | 移动端浏览 | 竖屏路演 Deck | PDF | | 移动端浏览 | 竖屏路演源文件 | PPTX | | 现场讲述 | 6 分钟 Pitch 稿 | Markdown | | 现场 Demo | Demo Runbook | Markdown | | 叙事背景 | Story Narrative | Markdown |
更多演讲材料、架构图和设计稿见 docs/README.md。
什么是 Council
Council 不是一个“替你思考”的 Agent, 而是一套把你的思考资产结构化、可复用、可召集的个人认知运行时。
capture: 把真实对话沉淀为可追踪的认知素材distill: 从素材里蒸馏出属于你的 self personasconvene: 让 self、mentor、role 在一个议会里相互质疑并形成结论export --mcp: 把这套能力暴露给 Claude Desktop、Cursor、Cherry Studio 等客户端
一句话说: Evolver 让 Agent 自我进化。Council 让人, 自我进化。
5 分钟跑起来
# 1. 安装 (需要 Node 20+)
npm install -g @moyu-build/council
# 2. 准备 API key
echo "ANTHROPIC_API_KEY=sk-ant-..." > ~/.council.env
# 3. 初始化
council init
# 4. 体验三条主链路
council capture --file your-claude-chat.md # 摄入一段思考对话
council distill --auto # 蒸馏出 self persona
council convene "我该不该接这个外包" # 召集议会
council refine self:reframe-before-execute # 让已有 persona 吸收新洞见
# 5. MCP 接入 Claude Desktop / Cursor
council export --mcp
# 把打印出的配置贴进 claude_desktop_config.json / .cursor/mcp.json → 重启客户端v0.3 起全部命令(含
council live网页圆桌)纯 Node 跑, 不再需要 Bun。
为什么要有 Council
每个做"个人 AI"的产品, 都在回答同一个问题: 怎么让 AI / Agent 自我进化、越来越像人?
Hermes 让 AI 和你一起成长。Second Me 训练你的数字分身。Evolver 给 Agent 装进化协议。花叔蒸馏思想家, 让你召唤他们进 Claude。
他们的主语都是 AI / Agent.
Council 反问了一个不一样的问题:
AI 在加速自我进化, 人这一条曲线呢? 谁替你画?
不是让 AI 替你思考。是让你的思考, 像 Agent 一样, 也能自我进化 — 通过结构化、对抗性议会、跨 LLM 召唤。
Evolver 让 Agent 自我进化。Council 让人, 自我进化。
这不是一个更好的 Agent。这不是 Agent。它是一种不同的主语 — 主语是人。
核心流程
真实对话 ──▶ capture ──▶ distill ──▶ 蒸馏出属于你的 self personas
│
你的问题 ──▶ convene ──▶ 召集 self + mentor (Naval/Jobs/Munger) + role (魔鬼代言人)
│
▼
各自独立表态 ──▶ 互相质疑 ──▶ 综合建议 + 明确分歧
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
终端 CLI 网页圆桌直播 MCP 可调用
(数据层) (议会可视化) (Claude/Cursor)两种使用姿势
CLI (开发者/资深用户的本地运行时)
council capture ./my-claude-chat.md # 捕获对话
council distill --auto # 识别高光 + 蒸馏 self persona
council convene "我应该先做不完美的产品推出去吗"每个命令的输出都是真实文件系统里的 Markdown。可 git init, 可手改, 可删除。
Web (让别人看到你议会的开法)
council convene "我应该全职做 Council 吗" --watch同一条命令, 加 --watch。终端日志继续打印, 浏览器自动弹出一张圆桌。椅子亮起表示在发言, 虚线箭头表示互相质疑, 最后中央浮现一张羊皮纸决议卡 (共识 / 仍存分歧 / 如果今天必须决定 / 本次议会的新模式)。
# 或者只启动 live server, 不发起议会:
council live # 浏览器访问 http://localhost:3737MCP (让 Claude Desktop / Cursor 等直接召集)
council export --mcp
# 把打印出来的配置贴进 claude_desktop_config.json → 重启 Claude Desktop之后在 Claude Desktop 里:
你: 帮我决定要不要离职 Claude: 调用 council_convene... Claude: [返回你议会的结构化结论]
目录结构 (用户的议会就是文件系统)
~/.council/
├── identity.md # 告诉 Council 你是谁 (你手写)
├── config.yml # 模型配置 (默认 Haiku 4.5)
├── personas/
│ ├── self/<name>.md # 从你的对话蒸馏
│ ├── mentors/{naval,jobs,munger}.md # 预置
│ └── roles/{devils-advocate,first-customer}.md
├── sessions/<date>-<slug>.md # 捕获的原始对话
├── skills/<观点-slug>.md # 蒸馏出的高光 (按观点命名, 例: 真实性守门员是产品退化的防线.md)
├── transcripts/<date>-<slug>.md # 议会 transcript (人读的)
├── live/<run-id>.jsonl # 议会事件流 (网页/telemetry 订阅)
├── exports/mcp-server/ # MCP 导出产物
└── .state/distilled.json # 防重跑索引Markdown + YAML + JSONL, 没有数据库。用户拥有完全控制权。
安装
路径 A · NPM (推荐, 90% 用户)
# 一次性试水, 不全局装
export ANTHROPIC_API_KEY=sk-ant-...
npx @moyu-build/council@latest init
npx @moyu-build/council@latest convene "我该不该 X"
# 或全局装 (装一次, 之后命令直接是 council)
npm i -g @moyu-build/council
council init
council convene "我该不该 X"要求: Node ≥ 20。Anthropic API key.
v0.3 起
council live(网页圆桌直播) 也跑在 Node 上 (node:http+ws), 不再需要 Bun runtime。所有 npm 安装的用户开箱即用。
想从源码跑 / 贡献代码?
见 CONTRIBUTING.md. 源码级开发推荐 Bun (热重载 + TS 直跑), 但 Node 也能跑。
命令表
| 命令 | 用途 |
|---|---|
| council init | 初始化 ~/.council/ |
| council capture [--file/--clipboard] | 捕获一段对话为 session |
| council distill [id\|--auto] | 蒸馏 session 为 highlights + self personas |
| council persona list | 列出所有 persona |
| council persona add <path\|url> | 导入外部 SKILL.md 作为 mentor |
| council convene "<问题>" [--watch] | 召开议会。--watch 打开网页圆桌直播 |
| council live | 仅启动 Live Server (端口 3737), 不发起议会 |
| council feedback <transcript-id> | 三档评分 h/g/o |
| council evolve | 扫全库, 标记 stale, 建议 merge |
| council merge <a> <b> | 融合两个 persona |
| council export --mcp | 导出 MCP Server 配置 |
| council serve | 启动 MCP Server (stdio) |
MCP 工具
| Tool | 用途 |
|---|---|
| council_who_am_i | 拉用户身份档案 + 全部可用 persona (会话开场调一次) |
| council_list_personas | 列出可用 persona (轻量) |
| council_convene | 召开议会, 返回 transcript |
| council_ask_persona | 单独问某个 persona |
| council_should_capture | 在 capture 前判断对话值不值得 |
| council_capture_this | 把当前对话捕获并立即蒸馏 |
| council_bootstrap_identity | 基于已有 self personas 反向回推 identity 草稿 |
LLM 调用模式 (v0.4 起两种自动选择)
Council 在 MCP 模式下会自动判断该用哪种方式调 LLM:
| 模式 | 何时启用 | 特征 |
|------|---------|------|
| BYOK (Anthropic API) | 配了 ANTHROPIC_API_KEY | ⚡ 流式 / 不弹窗 / 用你的 API 账单 |
| MCP Sampling (借宿主) | 没配 Key, 客户端支持 sampling | 🆓 用客户端订阅 / 不流式 / 客户端可能弹窗 approve |
说人话: 如果你已经在 Claude Desktop / Claude Code 里付了订阅, 不用再配 API Key——Council 会自动反向请求宿主跑 LLM. 在 Cursor 等部分支持的客户端也能用. CLI 和
council live(本地浏览器) 仍然必须 BYOK, 因为它们没有"宿主"可借.取舍: Sampling 不流式 (议会失去逐字现场感), 部分客户端会每次弹 approve. 重度使用建议配 Key 走 BYOK 模式, 体验更顺.
接入 MCP 客户端
Claude Code (零配置, 借用客户端 LLM):
claude mcp add council -- npx -y @moyu-build/council@latest serve不传
-e ANTHROPIC_API_KEY时, Council 自动用 Sampling 模式借 Claude Code 的 LLM. 想走 BYOK (流式 + 不弹窗) 就加-e ANTHROPIC_API_KEY=sk-ant-....
Claude Desktop / Cursor / Cherry Studio (改 JSON 配置):
零配置 (借宿主 LLM, 推荐):
{
"mcpServers": {
"council": {
"command": "npx",
"args": ["-y", "@moyu-build/council@latest", "serve"]
}
}
}走 BYOK (体验更顺, 流式 + 不弹窗):
{
"mcpServers": {
"council": {
"command": "npx",
"args": ["-y", "@moyu-build/council@latest", "serve"],
"env": { "ANTHROPIC_API_KEY": "sk-ant-..." }
}
}
}客户端首次启动会触发
npx拉取最新版, 之后命中 npm 缓存秒启动。@latest标签确保你跟主分支。 数据落在~/.council/, 跨客户端共享同一份身份档案。 启动日志在 stderr (Claude Desktop 在~/Library/Logs/Claude/mcp.log), 第一行会告诉你当前用的是anthropic-api还是mcp-sampling.
架构 (三层解耦)
┌─ CLI ─────────────── MCP Server ───────────── Web (浏览器/Pake app) ─┐
│ │
│ POST /api/command │
│ writes ▼ broadcast │
│ ┌──────── 事件总线 (events.ts) ────────┐ │
│ │ │ │
│ ├─▶ ~/.council/live/*.jsonl (真相) │ │
│ ├─▶ stderr (CLI 渲染) │ │
│ └─▶ WebSocket (网页订阅) │ │
│ │
│ convene / capture / distill / evolve <── 业务引擎 │
│ │ │
│ ▼ │
│ Claude Haiku 4.5 │
└──────────────────────────────────────────────────────────────────────┘三层严格解耦:
- 数据层 (
~/.council/): 文件系统是单一真相。Git-trackable, 用户拥有。 - 运行时 (CLI + MCP + Live Server): 业务逻辑, 事件总线, API 调用。stdout 干净 (MCP 协议安全), 事件通过文件+订阅两路出去。
- 展示层 (CLI 渲染 / 网页圆桌 / MCP 客户端): 只读订阅事件。互相不知道对方存在。
设计哲学
- 你的数据属于你 —
~/.council/是纯 Markdown。Git-trackable, 可审计, 可导出, 可删除。没有数据库, 没有云依赖。 - 协议高于产品 — 兼容 SKILL.md / MCP / AGENTS.md 三大标准。花叔的人物 skill 可以直接作为 mentor persona, Second Me 的模型可以作为 self persona 槽, Hermes/Evolver 蒸馏出的 skill 可以作为能力模块。Council 不竞争, 是协同层。
- 分歧是特性 — 永远同意你的议会是你不需要的议会。synthesis 必须标出"仍存分歧", 不允许和稀泥。
- 减法是纪律 — CLI + Markdown + MCP + 一页式 Web。没有 web UI dashboard, 没有账号, 没有训练, 十年后仍然成立。
- 主语是人 — 这不是功能差异, 是世界观差异。任何对手把 Council 的功能抄光, 只要他们仍以"让 AI / Agent 自我进化"为目标, 他们就做不出 Council。
状态 · 下一步
- ✅ L0: 事件总线 + 结构化 synthesis + persona 视觉元数据
- ✅ L1: Web HTTP/WS server + Vite/React 圆桌页面 +
--watch - ✅ L2: 网页 capture/distill 流程 (粘贴 → 蒸馏 → 直接召集)
- ✅ L3: 链路 C 反哺 (refine + evolve) + 跨 LLM 验证 (Cursor / Claude Desktop)
- ✅ L4: live server 从 Bun 迁到 Node 原生 http + ws — npm 用户零额外安装
- 未来: 剪贴板监听自动 capture, 桌面端全局快捷键, Council 之间的互相借调
完整架构见 docs/architecture/architecture.md · 演讲材料见 docs/ · 贡献请看 CONTRIBUTING.md.
License
MIT © 墨宇 (Siyu Deng)
