English · 简体中文
以 DeepSeek Harness(dsh) 为引擎内核、 一切能力皆可插拔的全能个人助理。 编码、任务、记忆、提醒、渠道消息一把抓; 一台机功能完整,多台可组队互联,断队后单机照常活。
- 顶级编码:任务委派给最强执行体(Claude Code / Codex / 任何按约定接入的 CLI agent), 配 worktree 隔离 + 独立审查闸的验收纪律。
- 常驻主动:晨报 / 提醒 / 定时巡检;渠道里发一句话就建任务、干活、回报。
- 本地台账:服务器 / 服务 / 项目 / repo / 制品的对话式 CRUD。
- 防篡改:skill / MCP 代码签名哈希链 + 加载强制校验 + 把整个信任面锚进比特币(OpenTimestamps)。
- 机队互联:多台组队,hub 派单、worker 领单执行、账本互见证。
- 三通道等价:每个功能都给网页点、agent 代你点网页、命令行三种操作方式。
管理控制台
xiaowu console(:3900)承载前两条:台账 CRUD / 任务看板 / 机队 / 安全, 页面状态全部可寻址;会话里一句话就能让 agent 把网页上的事替你点掉,每次代操作留审计。 交互聊天仍走 dsh 官方 Web UI(xiaowu web),不重造。
数据全在本机 ~/.xiaowu/(SQLite + 文件),不依赖任何服务端;模型走你自己的 key 或网关。
前置(干净机器先备好):
- Node ≥ 22、pnpm(
npm i -g pnpm或corepack enable) - dsh:
npm i -g @deepseek-ai/dsh@0.1.1-rc.2 - LSP server(硬前置,缺了会话起不来):
npm i -g typescript-language-server typescript pyright - uv(Python 环境管理器,管理控制台的运行环境):
brew install uv或见 https://docs.astral.sh/uv/ - 一个能跑的模型 key(
DEEPSEEK_API_KEY,或网关方案~/.xiaowu/gateway.env)
安装:
git clone https://github.com/shblhy/xiaowu.git && cd xiaowu
bash scripts/install.sh # 全能版(交互问授权目录)
# 或
bash scripts/install.sh --lite # 普通人版(不带本地编码委派)install.sh 会:检查前置 → pnpm i && pnpm build → 把 xiaowu 装进 PATH →
xiaowu init(装 profile + 注册开机自启:darwin 用 launchd、linux 用 systemd user)→
打印本地 API 地址与首次对话提示。幂等,可反复重跑。
用起来:
# 起一次会话干活
xiaowu "帮我看看这个项目并列出待办"
# 终端里多轮对话(TUI)
xiaowu
# 浏览器里多轮对话(dsh 官方 Web UI,会话历史与 CLI 那条共用)
xiaowu web # 缺省 127.0.0.1:3080,首次要装包,慢一次
# 常驻服务体检与起停(跑没跑 / 跑的哪版代码 / 重启)
xiaowu server
xiaowu server restart
# 命令行台账 / 任务
xiaowu ledger machines ls
xiaowu task ls升级不用管:装完自带热更——每分钟对着 origin/dev 保鲜,拉码、重建、把常驻服务换到
新代码;有任务在跑就先 drain 等清零,不打断在途会话。xiaowu server 能看到同步状态,
xiaowu update 手动来一轮。不想让它自动拉代码就关掉热更——原理、开关与排查见
docs/热更.md。
详版安装、卸载、升级、故障排查见 docs/安装.md。
| 形态 | 起法 | 干什么 |
|---|---|---|
| 一次性会话 | xiaowu "任务" |
问一句、干完、打印结果退出 |
| 续接上一轮 | xiaowu -r <session-id> "任务" |
带着那个会话的上下文往下干(调度方按 id 串起多轮) |
| 终端交互 | xiaowu |
终端里多轮对话(TUI) |
| 浏览器交互 | xiaowu web |
多轮对话、会话历史、工作区(dsh 官方 Web UI) |
| 无会话常驻 | 开机自启,xiaowu server 管 |
本地 API :3901、渠道消息、定时主动、机队 hub |
单次覆盖参数:--model <id> 换模型、--effort off\|low\|medium\|high\|max 调推理档位、
--provider <id> 换线路;缺省全走机器层 ~/.xiaowu/dsh/settings.yaml。
三者共用同一个 ~/.xiaowu/:CLI 起的会话,在 web 里看得到、接得上。
小雾的能力不许比 dsh 少。 上游有的,我们的装配里一条不缺;真少了会写在 docs/能力对齐-dsh.md 里明确告警。核对:
make capability-diff(离线秒级,升级 dsh 后必跑)。顺带说清一个常见误解:dsh 本体没有终端 TUI,官方只发了 headless 与 web-app 两个 app bundle。小雾的
xiaowuTUI 是自己补的一层。
xiaowu console 起管理控制台(:3900,全局、与当前目录无关):常驻对话 / 需求单 /
执行流水 / 机队 / 台账五模块 / 日志 / 会话与定时 / 盯活工作台 / 仪表盘,每页列表与详情分
路由、筛选与分页进 URL,页面上每个动作都有对应的 xiaowu <子命令> 与 Python SDK 方法
(三通道等价)。
-
常驻对话
/chat:随时能说话的入口——普通问答与网页代操作当场办掉,编码、运维这类 要开工地的活当场变成一张可编辑的需求单派出去。对话分档且档位是硬的:默认dispatch档改文件、跑写命令这类动作做不到(模型试了会被当场拒绝并知道原因),smart交互档全开;档位由人选,模型不能自己给自己升档。对话有线程、隔天接得上; 出单前零副作用,人确认才生效,单与来源线程双向可跳。盯活一屏顶上也常驻一张对话卡, 两处进去是同一条线程。CLI 走xiaowu chat,SDK 与选择器族三通道等价。 -
执行流水
/runs:从对话或需求单派出去的活在执行层单独有页——每次派工一行, 跑成什么样、token 与费用按次归因,与xiaowu run ls同源。 -
配置页
/settings:小雾的全部配置一屏可见可改,真源是~/.xiaowu/config.yml(网页改会保住你手写的注释;命令行xiaowu config ls|get|set)。 -
远程访问:默认只绑环回口。要开远程必须先在本机终端
xiaowu console auth init设用户名密码(agent 自立不了密码),然后在配置页打开开关重启控制台;:3080/:3901/:3902仍只绑环回。 -
全局提示词由工件决定:每个插件贡献一段自己的纪律(工地登记、只 rebase、凭据红线、 哪些动作过闸……),拔掉插件片段随之消失;再拼上你写的基础文本与勾选的
~/.claude/CLAUDE.md/~/.codex/AGENTS.md,物化成 dsh 读的~/.xiaowu/dsh/AGENTS.md。xiaowu prompt preview看最终拼出来的是什么。
同一堆插件的不同装配(不是两个产品):
| 全能版(默认) | lite 版(--lite) |
|
|---|---|---|
| 面向 | 顶级程序员的助理 | 普通人的助理 |
| 编码委派 | ✅ delegate_code_task |
❌ 无 |
| worktree / 审核闸 | ✅ | ❌ |
| 记忆 / 任务 / 台账 / 主动 / 渠道 | ✅ | ✅ |
| 防篡改 / 凭据 / 机队 | ✅ | ✅ |
给小雾加能力全程只写 Python(系统 python3 即可,核心路径零 pip 依赖):
- exec 工具:往
~/.xiaowu/tools/放一份 YAML 清单 + 一个脚本,下次会话即成 模型工具(stdin 收参数 JSON、stdout 即返回;xiaowu tools ls查校验结果)。 - MCP:机器层 patch 加一行配置挂任意 MCP server(
examples/python/mcp/有 零依赖手写版与官方 SDK 版两种姿势)。 - REST SDK:
python/xiaowu_client.py单文件零依赖,覆盖 tasks / 台账 / 记忆 / 工地 / 审核与选路审计 / 安全事件 / 定时 / 会话 / 盯活 / 机队的 API(覆盖面由python/tests/test_route_coverage.py与真实路由集对账,漏一条即红)——外部系统 对接照examples/python/morning_digest.py写。 - markdown skill:纯写文档教小雾知识与流程,零代码。
四条路径怎么选、每条的完整示例:docs/扩展小雾.md。
铺 ~/.xiaowu/feishu.env(FEISHU_APP_ID / FEISHU_APP_SECRET,权限 0600)后重启
server,给 bot 私聊发一句话 → 小雾建任务、在授权目录 spawn 会话干活、把结果回报给你。
渠道是插件(packages/plugin-channels-feishu),照它的样子可以接别的 IM。
多台组队走 hub 单点账本(拓扑 A):
# hub 机(会话里用 fleet_register_worker 工具)→ 得一次性配对 token
# worker 机:
xiaowu fleet pair http://<hub 地址>:3901 <token> --name <本机名>
⚠️ hub 地址要用跨机稳定可达的私网地址。实测在部分环境下 Node(undici)打 LAN IP 会EHOSTUNREACH(同地址 curl 却通,选路不同),走 tailscale 一类 overlay 网络的100.x地址则全通——详见 docs/m3-两台组队验收记录.md。
worker 领单在本机 worktree 隔离执行,拔网线自动降级单机自治;hub 账本被篡改, worker 心跳核对会报警。
- 新 skill / MCP 进小雾前过
mcp-skill-audit审核,人工xiaowu integrity approve批准。 - 已批准工件被改一个字节 → 加载被拒 + incident 报告点名到行。
- 链上锚定:把代码 git HEAD、账本根、关键配置哈希、公钥指纹合成
trust-root, 周期提交到两条通道——第三方 RFC3161 时间戳(秒级生效,但一家公司的签名事后 可能被推翻)与 OpenTimestamps → 比特币(要等出块几小时,但不可推翻)。 两档并存、界面上分开写,不合并成一句「已锚定」。只提交哈希,内容不出机; 锚定从不拦操作,只保证信任面的变更事后藏不住。 装 ots:bash scripts/install-ots.sh;看状态:xiaowu integrity anchor status。 apps/notary(外部见证服务)2026-08-31 已退役,代码保留、默认不启用。- 本地 API 缺省只绑
127.0.0.1,/v1/*一律 Bearer token(~/.xiaowu/server.token,0600)。 要跨机访问就走机队通道,别直接把端口暴露到公网。 - 报安全问题请看 SECURITY.md,别开公开 issue。
- 架构设计:docs/架构设计方案.md
- 开发计划与里程碑:docs/开发计划.md
- 与 dsh 的能力对齐台账:docs/能力对齐-dsh.md
- 把小雾当引擎接进别的系统(机队调度器 / CI / 别的 agent):docs/作为引擎接入.md
- 参与贡献:CONTRIBUTING.md
make setup # 装依赖
make test-unit # 单测(TS + Python),不碰模型,日常内循环
make test # 验收闸门:lint + 单测
make test-module # headless 冒烟,要真模型、花 token(不进 CI)分层:L0 dsh 内核(pin 0.1.1-rc.2,不 fork、不打补丁)→ L1 bundle-base →
L2 能力插件(packages/plugin-*,逐个 disabled: true 即可拔)→ L3 发行 profile
(纯 YAML 装配,无代码)。
- dsh:DeepSeek Harness,本项目的 引擎内核,cordis「一切皆插件」架构。小雾 = dsh + 一堆自有插件的装配。
- 云织(weave):作者内部的多机任务调度系统,未开源。小雾是它的「个人版」思路 重写,两者零耦合——小雾不调它的任何接口。文档里出现只为交代设计来历,不是运行依赖。
- 机队 / hub / worker:多台小雾组队时的角色。hub 持账本派单,worker 领单在本机执行。
- toolhub:一个对外提供
web_search__search的 MCP 网关。xw_web_search工具需要它 (任何提供同名工具的 streamable-http MCP server 都行);不配就只是不注册这个工具, 其余功能不受影响。
MIT。