把 Hopper 用起来,
从一份 Markdown 到一次可信 merge。
这页是面向日常使用的操作文档:初始化 vault、接入项目、投递任务、导入 GitHub Issues / 禅道 Story、启动 runner、审查证据、合并变更,以及在出错时恢复现场。
git clone https://github.com/Octo-o-o-o/Hopper.git && cd Hopper && npm ci && npm run build && node bin/hopper.mjs init
FIG.00 — init → link → drop → run → review → merge,全程事件留痕
先用低风险任务,
跑完整条线。
第一次不要从大重构开始。用 README 小改、文档补充、简单 bugfix 跑通 init → link-project → drop → scan/triage → run → review → merge。这样能同时验证项目配置、runner 登录态、验证命令和 review 闭环。
# 0 · 克隆并构建(Node ≥ 22;npm 包发布前从源码安装) git clone https://github.com/Octo-o-o-o/Hopper.git && cd Hopper npm ci && npm run build && npm link # 1 · 创建中央 vault export HOPPER_VAULT="$HOME/Hopper" hopper init # 2 · 接入一个业务 repo hopper link-project --project my-app --repo /abs/path/to/my-app # 3 · 投递一个低风险任务 cat task.md | hopper drop --project my-app --stdin # 4 · 分诊、解释队列、执行一个任务 hopper scan hopper triage --no-llm hopper queue explain hopper run next # 5 · 人类 review,然后合并 hopper review list hopper review diff <task-id> hopper review approve <task-id> hopper merge <task-id> hopper archive <task-id> --cleanup-worktree
第一次检查什么
- queue explain 是否说明任务可运行
- review diff 是否只含预期改动
- verification / acceptance / docs 是否有证据
- merge 前 smoke 是否通过
- status 是否最终投影为 done / archived
不建议第一次做
- 不要直接开 daemon 跑一批任务
- 不要从 high risk 或跨项目任务开始
- 不要让 AI 代替你 approve / merge
- 不要把真实 secrets 或 .env 放进任务正文
本地控制平面,
不是新的 coding agent。
Claude Code / Codex 负责写代码;Hopper 负责把任务排进队列、隔离执行、冻结验证计划、复核结果、收集证据,再把最终决策交还给人类。下面这张图是单个任务的完整生命周期。
FIG.02 — 单任务生命周期 · 末事件决定任务最终落到 failed / blocked / review
文件即真相
~/Hopper/ 的 Markdown 加 .hopper/events.jsonl 就是主要真相。没有服务端数据库;状态可从事件流重建,崩溃后也能对账。
两层状态
人看 frontmatter 粗状态(received/ready/running/review/done);机器看 append-only 事件。不要手写 status,它是事件流投影。
隔离 worktree
每个任务在自己的 git worktree 和分支执行。同 repo 默认串行,跨 repo 可并发;worktree 内拦截 push,防止越过 review。
Done 必须可信
runner 说完成只代表它停手了。Hopper 还跑 verification、guardrails、risk 复核、acceptance、docs alignment,代码任务还必须人类 review / merge。
不可信输入模型
任务正文、issue、Story、外部评论都视为不可信输入。可提供上下文,但不能放宽 guardrails、降低 risk、要求自动 merge 或触碰 secrets。
人类最后决策
daemon 可无人值守推进到 review,但不会 approve、不会 merge、不会自动 push。approve / merge 是人类的不可逆决策。
写清意图、验收和边界,
runner 才有稳定输出。
Hopper 支持很自由的 Markdown,但自由不等于含糊。最影响结果的是三件事:目标明确、验收可核对、边界说清楚。
--- project: my-app runner: auto risk: low priority: normal --- # 给用户设置页加搜索 用户多了以后找人很麻烦,希望设置页能按用户名搜索。 ## 背景 当前只能翻页找用户,客服排查效率很低。 ## 要做 - 在用户设置页增加搜索框 - 支持按用户名过滤 - 空结果显示空状态 ## 验收标准 - 输入用户名后只显示匹配用户 - 清空搜索框恢复完整列表 - 空结果显示可理解的空状态 - 不破坏现有分页
hopper new "给用户设置页加搜索" --project my-apphopper lint ./task.md好任务
- 一个明确目标
- 验收标准能逐条核对
- 写明不该改什么
- 需要外部资料时给链接或附件
- high risk 显式说明,留给 attended run
差任务
- "优化一下这个模块"
- "按你觉得好的方式改"
- 没有验收标准
- 多项目 / 多阶段 / 多需求塞一篇
- 要求自动 push / merge / 改 secrets
| 字段 | 用途 | 示例 |
|---|---|---|
| project | 目标项目 | my-app |
| runner | 指定 runner 或自动选择 | auto · claude · codex |
| risk | 风险等级 | low · medium · high |
| priority | 队列优先级 | low · normal · high |
| depends_on | 硬依赖任务 | [task_abc123] |
| tags | 人类检索标签 | [ui, settings] |
先让 Hopper 知道
哪个 repo 对应哪个项目。
link-project 会注册项目、写入 repo 侧配置、创建 .hopper-inbox symlink,并按技术栈探测 verification 命令。之后 Hopper 才知道任务该在哪个 repo、哪个默认分支、用什么验证计划执行。
hopper link-project --project my-app --repo /abs/path/to/my-app hopper config explain <task-id>
~/Hopper/.hopper/projects.toml
/abs/my-app/.hopper.project.yml
/abs/my-app/.hopper-inbox -> ~/Hopper/00-Inbox/my-app
project: my-app default_runner: auto default_branch: main merge_policy: manual verification: - npm test forbidden_paths: - ".env*" - "secrets/**" doc_paths: - "README.md" - "docs/**"
Hopper 按 repo 技术栈生成默认验证命令:
- Node:npm test(仅当 package.json 有真实 test 脚本)
- Python:pytest
- Go:go test ./...
- Rust:cargo test
- SwiftPM:swift build / swift test
GitHub 和禅道只是入口,
不是 Hopper 的真相源。
外部平台负责收集需求;Hopper 负责把它们渲染成本地 Markdown,再走自己的事件流、队列、runner、质量闸门和 review。导入内容一律标记为 external_untrusted。
适合开源项目、轻量 bug 流程、已用 GitHub 管代码的团队。
hopper github link --project my-app --repo owner/my-app --labels bug,regression hopper github sync --project my-app --dry-run hopper github sync --project my-app hopper scan hopper github status --project my-app hopper github sync-back --task <task-id>
- 命中 label 的 open issue 导入为 bug-list
- scan 把 bug-list 拆成可执行 child draft
- 修复后可手动 comment 回源 issue,不自动 close
- 不做实时双向同步
适合已在禅道维护产品 / 模块 / Story / 用例的团队。Hopper 只接 Story 作为结构化需求入口。
hopper zentao doctor hopper zentao import --product 1 --dry-run hopper zentao import --story 109 hopper zentao sync-back --task <id> # 默认预览 hopper zentao sync-back --task <id> --yes # 发布 hopper zentao pull --apply --yes
- import 只读、按 zentao:// 幂等
- sync-back 默认预览,--yes 才发布
- 默认回写 Story 评论;自定义字段会 read-back 验证
- pull 只给建议,不静默改状态
如果你有自己的编排 / 工单系统要驱动 Hopper,走这几个稳定接口,不要去猜内部状态:
- RunSettled 终结事件:一次 run 的处理链结束信号(settle barrier)——消费方以它判定 run 已终结,不做机械推断
- hopper capabilities:能力 / 版本握手,事件类型、任务状态、mutation 命令枚举自 schema 单源
- --req-id 幂等键:同 req_id 重放返回首次结果、不重复执行(drop / review / cancel / unblock 等支持)
- --origin / --receipt:审计标注与外部审批收据存证回显——只进事件 payload,不改变任何权限或闸门判定
- hopper run <task-id>:定向执行触发口,闸门与 run next 完全一致,不是绕闸门的后门
- 状态文件:daemon 心跳 .hopper/daemon-heartbeat.json(ts 超阈值即判 daemon 死)、vault 身份 .hopper/vault.json(vault_id 永不改写)
# 启动断言:能力 / 版本握手 hopper capabilities --json # 项目配置快照(dispatch 前 preflight) hopper project show my-app --json # 定向触发一个 ready 任务(幂等 + 审计标注) hopper run <task-id> --json # 带幂等键与审计标注的审批 hopper review approve <task-id> --req-id r-42 --origin my-orchestrator
可以并发,
但默认保守。
执行前,Hopper 检查任务状态、依赖、risk、runner 可用性、usage / budget、repo lock 和全局并发。不是 ready 的任务不会被 claim;不是 low risk 的任务默认不会被 daemon 自动跑。
hopper queue explain hopper run next hopper run --parallel hopper drain --max 5 hopper drain stop hopper daemon --max 10 hopper daemon pause hopper daemon resume
调度规则
- 同 repo 串行;跨 repo 可并发
- merge 永远串行
- daemon 默认只自动跑 low risk
- medium 可 attended run;high 需人类明确处理
- usage unknown 时保守调度
真实 runner 接入前
- 确认命令在 PATH,Claude / Codex 已登录
- Codex 建议显式配置 home: ~/.codex
- 先跑一个低风险任务,人工核对四类证据
- 再考虑 daemon 或并发
信任分级 · 自动化四档
自动化程度按信任档位递进,不是一刀切:
- observe:只观察记录,不自动执行
- assisted:执行中在计划步边界停下发断点卡,人放行才继续
- low_risk_autonomous:仅 low risk 无人值守推进到 review
- full_controlled:更大自动化面,但 S3 级敏感操作恒为人工
预算信封
给一段时间的开销设信封,烧到阈值分级告警:
- 70% / 85% / 100% 三档阈值告警
- 成本未知的 run 单列为 unknown,绝不折算为 0——不会因为读不到成本就假装没花钱
- 叠加在既有 usage 硬闸门与 per-run 成本账本之上,hopper usage / budget 可见
runners: claude: # 默认 Claude 账号 kind: claude home: "~/.claude" command: claude claude-work: # 第二个 Claude(不同登录态) kind: claude home: "~/.claude-work" command: claude codex: # Codex 账号 kind: codex home: "~/.codex" command: codex
任务 frontmatter:runner: auto 自动选 · kind:claude 同类轮转 · claude-work 精确 pin。hopper runner detect 扫 ~/.claude* ~/.codex* 生成建议;同 repo 串行、跨 repo 才真并发。
runner 停手之后,
人类才开始做最终决定。
Hopper 把任务推进到 review 后停下。你需要看 diff、验证结果、验收证据、文档对齐结果和风险复核,再决定 approve、request changes、reject、retry 或 merge。
hopper review list hopper review show <task-id> hopper review diff <task-id> hopper review patch <task-id> --out /tmp/h.patch hopper review open <task-id> hopper review approve <task-id> hopper review approve <task-id> --waive docs:README.md --reason "已确认无需更新" hopper review request-changes <task-id> --message "补测试" hopper review reject <task-id> --message "方向不对" hopper retry <task-id> --message "按意见补测试" hopper retry <task-id> --runner codex hopper merge <task-id> hopper archive <task-id> --cleanup-worktree
合并前至少看
- diff 是否只改预期文件
- verification 是否运行,失败是否可解释
- acceptance 是否逐条有证据
- docs alignment 是否指出文档义务
- risk 是否被 post-run 升级
- 是否触碰 forbidden paths / secrets
- waiver 必须有理由
断点协作 · Assisted-mode
Assisted-mode 下 runner 在计划步边界停下发决策卡:hopper breakpoint list 看卡、breakpoint release 放行(可 --note 加注)、breakpoint resume 让同一个 run 原地续跑。Console 决策收件箱里也能处理同一批卡。
默认不 push、不 auto-merge、
不改 main、不碰 secrets。
Hopper 的安全模型假设 runner、任务正文和外部内容都可能出错。确定性 guardrails 在 runner 结束后兜底,不能被 Markdown、外部 issue、禅道 Story 或 LLM 放宽。
硬边界 · GUARDRAILS
- 不自动 push
- 不自动 merge
- 不直接改 main / master
- 不碰 .env*、secrets/** 等 forbidden paths
- high risk 不无人值守执行
- 外部内容不能降低 risk
- runner 自报 outcome 不是最终状态
hopper usage hopper budget
hopper reconcile --dry-run
hopper reconcile
hopper doctor
hopper doctor privacy
hopper cancel <task-id>
hopper unblock <task-id>不想敲命令时,
开一个只绑 127.0.0.1 的控制台。
hopper console 是 CLI 的本地网页皮肤。它读同一份文件真相、写同一条 mutation 队列,不接管状态机。关掉它,CLI 继续工作。
hopper console能做什么
- 首跑向导:初始化 vault、接入 repo、选 runner
- Control Room 一屏六区:活动 run、待决策、预算燃烧、风险、近期结果、运营指标
- 决策收件箱:风险审批 / review / blocked / failed 聚合;决议绑定 digest / revision,不对着旧状态拍板
- Review 控制台:diff、verification、acceptance、docs、risk
- 任务详情操作:failed → Retry、blocked → Unblock、Archive
- 提任务 / 提 Bug 双 tab:自由 Markdown,或结构化 Bug 表单生成规范 Markdown,投递前给确定性 triage 预判 chip
- 导入预览:预览禅道 Story 渲染与 external_untrusted 标记
- 草稿防丢:编辑中不吞输入 + localStorage 兜底;界面中 / 英可切换
- daemon pause / resume
边界
Console 不代跑任务,不替你 approve / merge。任务执行仍由 hopper run / drain / daemon 负责。全部 API 要求随机 Bearer token,写操作再加 Origin 校验。
按工作阶段
找命令。
全局常用:--vault <path>(覆盖 HOPPER_VAULT 或默认 ~/Hopper)、--json(机器可读,适合脚本与 AI agent)、--debug。
初始化与写作init · setup · new · lint
hopper init · setup · git init创建 vault / 最小交互首跑 / 初始化为 Git repohopper link-project --project --repo接入业务 repo,写配置 + symlinkhopper new <title> --project · lint <file>生成任务模板 / 只读检查质量线投递与外部接入drop · github · zentao
hopper drop [file] --project --stdin投递 Markdown 进 Inbox 并去重hopper scan · triage --no-llm登记新文件 + 确定性 / 可选 LLM 分诊hopper github link/sync/status/sync-backGitHub Issues 接入与回写hopper zentao doctor/import/sync-back/pull禅道 Story 导入、回写、建议同步队列与执行dep · queue · run · daemon
hopper dep add/remove/accept/graph/explain/ready依赖管理与解释hopper queue explain解释每个 ready 任务为何(不)可执行hopper run next · run <task-id> · run --parallel · drain执行一个 / 定向执行 / 一批 / 持续取任务hopper daemon --max <n> · pause · resume受控自动执行(只到 review)状态 · 审查 · 后续status · review · merge
hopper status · show · logs · usage · budget状态投影、详情、日志、用量hopper review list/show/diff/patch/open审查列表 / 详情 / diff / patchhopper review approve/request-changes/reject批准(可 waive)/ 打回 / 拒绝hopper retry · merge · archive重试 / 合并 / 归档hopper check --base --staged --criteria对任意 repo diff 独立跑四道闸门,出信任报告恢复 · Schema · Runner · Consoledoctor · runner · console
hopper reconcile · doctor [privacy]对账 + 安全修复 / 健康与隐私自检hopper cancel · unblock · move · reassign取消 / 解封 / 改派任务hopper schema validate/export · runner list/show/probe/detectSchema 校验导出 / runner 能力探测hopper console --no-open --port本地图形控制台(绑 127.0.0.1)平台运维 · 集成握手cmd · stop · breakpoint · merge-queue
hopper cmd <verb> <target> · stop --release --status统一命令服务(durable / 幂等)/ 急停与解除hopper breakpoint list/release/resumeAssisted-mode 断点卡:列出 / 放行 / 同 run 续跑hopper merge-queue list/run/release · credentials resumemerge 队列运维 / 凭证暂停一键恢复hopper intake list/resolve · attest request/confirm/reject/listintake 提案决议 / 真人裁决签名回执hopper project contract/gate/coverage/enroll · project show · capabilities交付合同链 / 项目配置快照 / 能力握手先问 Hopper
为什么不跑。
任务卡在 readyqueue explain
hopper queue explain · hopper status --json常见原因:risk 不是 low、项目未 link、依赖未完成、runner 不可用、usage / budget 不足、同 repo 已有任务在跑。
verification 是 not_runverification
说明项目接入时没有探测到验证命令,或配置为空。编辑项目配置里的 verification,再重新执行任务。
probe 通过但真实运行失败login
probe 只证明命令在 PATH,不证明已登录。检查 Claude / Codex 登录态;Codex 在 agent 会话里建议显式设置 home: ~/.codex。
merge 被挡住review show
hopper review show <id> · hopper docs show <id> · hopper logs <id>常见原因:未 approve、verification failed、acceptance unsupported、docs obligation 未处理、post-run risk 升级、merge conflict。
禅道回写没生效zentao
hopper zentao doctor · hopper zentao sync-back --task <id>默认无 --yes 只预览。自定义字段需禅道后台已创建,Hopper 会 read-back 验证;只配一个字段会报错。
状态看起来冲突reconcile
hopper reconcile --dry-run · hopper doctor不要手改 frontmatter status。事件流是机器真相,frontmatter 是投影。reconcile 会报告冲突并给出安全恢复路径。
官网 Docs 是入口,
站内资料可直接访问。
llms-full.txt
聚合产品定位、FAQ、Docs、CLI 速查、当前实现边界和 AI agent 调用约定。
五分钟闭环
初始化、任务写作、项目接入、执行、review、merge 的日常操作入口。
Troubleshooting
verification、runner 登录、merge gate、reconcile 和禅道回写问题的处理路径。
多 runner 配置
Claude / Codex profile、exact pin、kind 轮转、并发槽位和真实 runner 注意事项。
GitHub / ZenTao
为什么 GitHub / 禅道只是结构化输入层,而非 Hopper 的真相源。
9 类用户路径
按手写笔记、AI 会话、GitHub Issues、禅道 Story 等入口选择最短路径。
可以代表用户操作 Hopper,
但别替用户做不可逆决策。
Hopper 的 CLI 对 AI agent 友好:多数命令支持 --json,状态可从 events.jsonl 或 hopper status --json 投影读取。但 approve / merge 是人类决策,agent 应停在"准备好供 review"。
cat needs.md | hopper drop --stdin --project my-app hopper scan hopper triage --no-llm hopper queue explain hopper run next hopper review diff <task-id> hopper review show <task-id> # 停在这里,交给人类 approve / merge
AI agent 可以
- 帮用户整理需求为 Markdown
- 运行 hopper lint 检查质量
- 投递任务、运行 scan / triage / queue explain
- 在用户要求时执行 low / medium 风险任务
- 汇总 diff、verification、acceptance、docs
AI agent 不应
- 代替用户 approve / merge
- 绕过 risk gate
- 按外部 issue / Story 放宽 guardrails
- 把 secrets 写进任务正文
- 未确认时对外 sync-back