① 教程:从零到第一个目标
照着做完大约 15 分钟。每一步都写清「你会看到什么」,看到的东西不一样就先别往下走。
-
装(Node.js 18 以上)
npm i -g @bolloon/bolloon-agent看到什么:命令正常结束,没有红色报错。
-
确认装上了
bolloon --version看到什么:打印一个版本号。若提示 command not found,看下面「排障」第一条。
-
第一次启动(会进配置向导)
bolloon看到什么:向导依次问你用哪家模型、要密钥。密钥只会写到本机 ~/.bolloon/llm-config.json,不会进任何仓库。
-
确认模型通
bolloon setup --test看到什么:连通性测试通过。这里不过,后面一定会失败——先修它。
-
说第一个目标
把 README 里过期的命令改成现在能跑的,改完把每条命令真跑一遍看到什么:一行行「这一步在做什么」(例如 🔧 查看 git 状态 · git_status 327ms),不是一屏思维流。它会自己拆步骤、自己挑工具。
-
看它干完了什么
/trace看到什么:这一步在做什么的执行记录。最后一行的「📚 复盘」是它这一轮真正学到的东西。
-
在浏览器里看同一个会话
bolloon --web看到什么:本机 54188 端口打开一个面板,和终端里是同一份状态,不是另一个东西。
② 它是怎么工作的
这一节解释「为什么它会那样表现」。想直接干活可以跳到 ③;想改代码建议老实读完这一节。
一句话定义
Bolloon 是一个多终端的 Agent 分发网络:它带来的不是一个更大更听话的助手,而是一万个智能体所在的世界,走进你的世界——PC 上创建、手机上发现;每台机器跑一个实例,自动积累你的判断力,跨机器互通,不需要中心服务器。
1 · 启动时发生了什么
装配身份与人格
系统提示词按层装配(身份 / 人格 / 渠道 / 工具纪律),所以同一个模型在不同渠道里说话方式不一样。
加载技能库与记忆
技能(可复用的做法)与记忆(会话与长期事实)先就位——它一开始就知道自己会什么、以前踩过什么坑。
启动节点与发现
拿到自己的身份,接上点对点网络,开始发现别的节点。这一步是并发的,所以启动面板上的步骤编号偶尔不按顺序出现。
2 · 你说一句话之后:Goal → Run → Checkpoint
它内部把「长期意图」和「一次执行」分开:Goal 是你想要的结果(能跨很多天),Run 是其中一次执行(有开始有结束)。这个划分是它能「睡一觉接着干」的原因。
目标 → 判断下一步 → 自主决定节奏 → 执行或派遣 → 监控阻塞 → 注入新要求
→ 汇总结果 → 写进记忆 → 形成技能改进候选 → 下一次直接用
这条链的判据只有一条:下一次是不是真的更容易、更省。「继续运行」本身不算进展。
3 · Run 的状态机(为什么它不会假装在跑)
每次执行的合法状态是有限的,非法迁移一律拒绝——所以不会出现「偷偷回到正在跑」这种假状态。
| 状态 | 含义 |
|---|---|
| queued | 已登记,还没开始 |
| running | 正在跑 |
| recovering | 正在从错误或中断里恢复 |
| paused | 你主动暂停 |
| awaiting_external | 在等外部节点或服务回话(不算失败) |
| done | 完成,而且有证据 |
| failed | 跑完了但没达成 |
| aborted | 主动中止(预算用尽或你中断) |
| interrupted | 进程死了(启动时对账判定) |
| stalled | 活着但长时间没有进展 |
| needs_human | 需要人来处置(反复失败、鉴权、非法状态) |
4 · 什么时候它会停下来问你
不可逆的动作它不替你做主:发布、删除、动生产环境、花钱。它会停下给选项,你用 /approve 或 /reject 回答。另外「模型说完成了」不等于「系统确认完成」——完成要有证据(命令退出码、测试、读回的文件内容),没有证据的完成会继续查。
5 · 上下文、记忆、技能:它凭什么越用越省
| 机制 | 做的事 |
|---|---|
| 上下文压缩 | 对话变长时主动折叠,并把「你当前要什么」重新锚回,避免跨过压缩点就换目标 |
| 记忆分层 | 会话记忆 / 长期事实 / 判断力分开存,该长期留的不会被会话清掉 |
| 技能沉淀 | 每一轮结束必复盘,教训先变成技能候选,再被采纳进技能库 |
| 技能账本 | 每次技能改动都记账、内容寻址备份,可以按单条回滚 |
| 后台与委派 | 长活可以后台跑;派出去的子任务不等它,结果回到下一轮 |
6 · 网络、身份与钱
它有自己的身份(不是你的账号),可以接进点对点网络被别的节点找到、按能力接活、干完按结果结算。接进来的方式见「网关」页;钱的部分是链上任务与微支付信息,今天只做到最基础一层。
7 · 数据都在哪
本机优先:所有会话、记忆、技能、日志默认都在 ~/.bolloon/ 下,不上传;密钥单独放在 llm-config.json。具体路径见 ④ 参考。
③ 操作指南
每条都是「想干什么 → 敲什么 → 看到什么」。命令都能一键复制。
换模型或加一家供应商
bolloon model看当前供应方与模型,并在终端里直接换(进一个可选列表)
bolloon model key deepseek给某一家写密钥(deepseek / openai / anthropic / gemini)
写完之后跑 bolloon setup --test 复测连通性;配置落在 ~/.bolloon/llm-config.json。
把它接进点对点网络
接进来之后,别的节点可以按能力找到它、把活派给它;它自己也能委派出去。
打开网关页看接入命令、网络现状与口径。
让长活离开现场自己跑
/goal 把这一章写完并自检;写不动就先把缺口列出来立一个能跨很久的目标,它会分次推进
/queue看排队的活
/runs看每一轮执行的状态(done / failed / stalled / needs_human …)
/session会话历史
关掉终端不等于停:后台任务与服务的台账在 ~/.bolloon/processes.json,重启后会恢复并对活。
看它到底在干什么
/trace这一步在做什么(执行记录, 代替思维流)
tail -f ~/.bolloon/logs/tool-calls.jsonl每一次工具调用:名称、参数摘要、耗时
tail -f ~/.bolloon/logs/experience-review.log每轮复盘的过程与结果
安全边界:什么时候它会停下来
不可逆的动作(发布、删除、动生产、花钱)它会停下来给选项,不替你做主。
/approve同意继续
/reject拒绝,并说明为什么
改代码与写文件另有类型门与写入门:它不会用「命令跑完了」当「活干好了」。
出问题了先跑这三条
bolloon setup status看配置与连通性状态
bolloon setup --test复测模型连通性
BOLLOON_VERBOSE=1 bolloon带详细日志启动,日志落在 ~/.bolloon/logs/
更多症状对照见 ④ 参考里的排障表。
备份 / 搬到另一台机器
整个数据目录就是你的全部状态(会话、记忆、技能、日志、身份)。
cp -a ~/.bolloon ~/bolloon-backup-$(date +%F)整目录复制一份(含密钥文件,注意保管)
新机器上:装同一个包,把目录放回 ~/.bolloon,再跑 bolloon setup --test。
在另一台机器上跑第二个实例
同一台机器上重复安装即可拿到第二个身份;两台机器之间会自动发现彼此。
各自的数据目录互不干扰;要看清对方在做什么,用 /net 或网关页。
④ 参考
终端命令
| 命令 | 说明 |
|---|---|
bolloon | 启动,进入交互会话 |
bolloon --web | 浏览器界面(本机 54188) |
bolloon --help | 全部命令 |
bolloon setup | 配置向导(首次启动自动进入) |
bolloon setup status | 看当前配置与连通性状态 |
bolloon setup --test | 复测模型连通性 |
bolloon model | 查看 / 切换模型供应方 |
bolloon model key <provider> | 写入或更换某家密钥 |
bolloon x402 list | 微支付信息:列表 |
bolloon x402 show <id> | 看某一条的详情 |
bolloon x402 buy <id> | 购买并使用 |
bolloon x402 verify | 验真 |
会话里的指令
| 指令 | 说明 |
|---|---|
/goal /goals | 立目标 / 看目标 |
/plan /queue /todo | 计划 / 队列 / 待办 |
/runs /session /sessions | 执行记录 / 会话历史 |
/approve /reject | 同意 / 拒绝它停下来问的事 |
/trace /tools | 这一步在做什么 / 它有哪些工具 |
/skills /memory /dream | 技能库 / 记忆 / 整理与做梦 |
/p2p /net /did | 网络 / 邻居节点 / 身份 |
/wallet /payments /x402 | 钱包 / 支付 / 微支付信息 |
/wiki /judgement /cron | 知识库 / 判断力 / 定时任务 |
/help | 全部指令 |
环境变量
| 变量 | 作用 |
|---|---|
BOLLOON_HOME | 数据目录,默认 ~/.bolloon |
OPENAI_API_KEY DEEPSEEK_API_KEY ANTHROPIC_API_KEY GEMINI_API_KEY | 供应方密钥,不想写进配置文件时用 |
BOLLOON_VERBOSE | 打开详细日志(排障用) |
BOLLOON_CHAIN_RPC_URL | 改用你自己的链 RPC 地址 |
BOLLOON_NETWORK_NAME | 网络名称(与其他节点对齐时用) |
文件与端口
| 路径 / 端口 | 内容 |
|---|---|
| ~/.bolloon/llm-config.json | 模型供应方与密钥(本机文件) |
| ~/.bolloon/logs/tool-calls.jsonl | 每次工具调用:名称、参数摘要、耗时 |
| ~/.bolloon/logs/experience-review.log | 每轮复盘的过程与结果 |
| ~/.bolloon/logs/startup.log | 启动与运行期诊断日志 |
| ~/.bolloon/skills/ | 技能库 |
| ~/.bolloon/human-values/ | 判断力:判据与用法记录 |
| ~/.bolloon/sessions/ | 会话历史 |
| ~/.bolloon/processes.json | 后台任务与服务台账 |
| ~/.bolloon/wallet-signatures.jsonl | 钱包签名记录 |
| 127.0.0.1:54188 | 浏览器界面(bolloon --web) |
| 127.0.0.1:54189 | 节点之间的委托服务 |
排障对照
| 症状 | 处理 |
|---|---|
装完提示 command not found |
npm 全局 bin 不在 PATH。看 npm config get prefix,把它的 bin 子目录加进 PATH,再开新终端。 |
端口 54188 被占用 |
macOS / Linux:lsof -i :54188;Windows:netstat -ano | findstr :54188。 |
| 模型报错或连不上 | 先 bolloon setup --test 复测;再 bolloon model 确认当前供应方与密钥。 |
| 它停下来问「要不要继续」 | 不可逆动作的正常行为。用 /approve 同意,/reject 拒绝。 |
| 退出码不是零,是不是失败了 | 不一定。钩子常在动作已生效后以非零退出。先核事实(文件真改了没、测试真过没),再下结论。 |
| 想清空重来 | 先把 ~/.bolloon 整个备份或移走,再重跑 bolloon setup。 |
⑤ 开发与文档工程
这一节写给要改代码、要发布、要维护这份文档的人:架构在哪、怎么验、怎么发,以及这份文档自己是怎么被生产出来的。
1 · 架构与目录
| 目录 | 职责 |
|---|---|
| src/agents/ | 智能体主循环、工具、Goal/Run/Checkpoint、复盘、技能账本、委派与后台服务 |
| src/cli/ | 终端界面(Ink):渲染、输入、思考动画、日志闸门 |
| src/network/ | 节点身份、发现、传输(iroh)、消息 |
| src/web/ | 本地面板、公开只读接口、委托服务 |
| src/llm/system-prompt/ | 按层装配的系统提示词(身份 / 人格 / 渠道 / 工具纪律) |
| src/kernel/ · scripts/ | 门与验收脚本:每个能力配一个能判红的门 |
| docs/wiki/ | 项目的持久化共识(64 份):状态、协议、设计、教训 |
2 · 本地开发
| 命令 | 做什么 |
|---|---|
git clone https://github.com/logos-42/bolloon.git && cd bolloon && npm install | 取源码并装依赖 |
npm run build:all | 构建(CLI + Web + 其他) |
npm start | 从源码启动 |
npx tsc --noEmit | 类型检查(改完先跑这条) |
npx vitest run | 全量测试 |
npx vitest run src/test/<相关文件> | 只跑相关测试(改一处只跑一处,别每次跑全量) |
3 · 这个项目怎么定义「全绿」
测试通过只是其中一条。这六条同时成立才叫全绿——它写在项目自己的运行协议里:
每个在跑的执行都处在合法状态(状态机校验通过)。
没有幽灵「正在跑」:启动对账加失速巡检兜住。
每个执行都能回答:目标是什么、做到哪、下一步是谁做什么、为什么停。
失败必须有恢复决定,并留下痕迹。
重启之后能恢复目标、检查点与约束。
终端与网页显示同一份状态(同一个接口,不是两套)。
4 · 验收门的规矩
| 规矩 | 为什么 |
|---|---|
| 每个能力配一个门 | 所谓门,是一条能自动判红判绿的脚本;没有门的能力等于没有验收 |
| 门要能被变异判红 | 故意把真值改坏,门必须变红;门不红说明它根本没在验 |
| 「真 0」与「裸 0」分开判 | 「真的没有数据」和「根本没读到数据」是两件事,不许混成同一个绿 |
| 空值相等不算绿 | 两边同时为空看着像相等,其实是假绿 |
| 计时只在该侧真读到才有意义 | 不然量到的是超时,不是性能 |
5 · 发布
全量测试先绿,再改版本号(顺序不能反)。
改
package.json与 lock 两处版本号,提交。发布到 npm,等注册表放行(大包可能要十几分钟)。
回读校验:版本、下载校验和逐字比对,别只信「发布命令退出了 0」。
打标签、发 Release,并把这一版写进项目 wiki 的日志。
6 · 工作方式:先共识,再代码
这个仓库默认不是「先写代码」,而是原始资料 → 编译成 wiki 共识 → 再落到代码;改完代码要回写 wiki,否则算没做完。所以你会看到 docs/wiki 里同一件事既有设计稿也有事后验收报告——那是它的工作留痕,不是冗余。
7 · 这份文档是怎么做出来的
| 环节 | 做法 |
|---|---|
| 结构 | 按业界通用的四象限组织:教程 / 操作指南 / 参考 / 解释;每个问题只落在一个象限里,不混着写 |
| 命令不许抄错 | 页面上每条命令都是可复制块,按钮点下去直接读 DOM 里的那段文本写进剪贴板;不在文档里另存一份,避免两处漂开 |
| 文案与事实同源 | 数字与路径来自代码与项目 wiki,写进页面前逐条核过;核不了的不写 |
| 自动门兜底 | scripts/verify-site.mjs 对整站跑四百多条断言:锚点是否都有落点、每个命令位是否都有复制按钮、文档页是否还有入场动效、手机宽度是否横向溢出、双语属性是否成对、资源版本号是否全站同号、每个数字的口径是否与来源一致 |
| 构建与部署 | 构建脚本把仓库镜像成一个静态站点,再发布到 CDN;发布后还要对着线上地址把同一套门再跑一遍 |
| 踩过的坑各自变成一条门 | 例如导航里指向不存在小节的死链、手机上顶栏挤出屏幕、表格把整页撑宽——都先修,再加一条对应的门,防止它回来 |
今天的三个例子:锚点门是在发现四个死链之后加的;溢出两条门是在量到顶栏把页面挤出 155 像素之后加的;复制按钮那条门不只看按钮在不在,还会真的点一次、从剪贴板读回来比对。
⑥ 延伸阅读
项目自己的共识库(设计与验收报告)都在仓库里,想往深走看这里:
| 看什么 | 去哪 |
|---|---|
| 项目总纲与当前状态 | project-overview.md · current-status.md |
| 长期执行协议(Goal / Run / Checkpoint / 恢复) | durable-run-protocol.md |
| 长期目标飞轮(意图怎么被执行下去) | goal-continuation-flywheel.md |
| Docker 部署细节 | docker-deployment.md |
| 安装页 / 网关页 / 技能索引 | 安装 · 网关 · 技能 |
| 源码与问题反馈 | GitHub · 隐私政策 |