Install
openclaw skills install @buger-gif/work2cli-hitl指导把日常工作沉淀成 CLI 工具集 + agent skill 的工作台,并对写操作接入飞书审批形成极简 HITL(Human-In-The-Loop)。用户只需给一个网站/系统地址,agent 自主勘察 API 面貌、识别哪些功能是写、自行炼化成 CLI。触发条件:用户想把日常/重复工作做成命令行工具、丢来一个平台网址说「帮我把这个做成工具」、想给 CLI 的写操作加审批/二次确认、提到 write-guard/写守卫/HITL/Human-In-The-Loop/飞书审批/守卫守护进程/全局守卫、想搭「CLI + skill」工作台、做完 CLI 要求沉淀使用说明/更新注册表/自进化。
openclaw skills install @buger-gif/work2cli-hitl本 skill 是方法论 + 设计规范 + 自进化注册表。指导 agent 带用户把重复性日常工作(查数据、导报告、回写状态……)按系统沉淀成本地 CLI 工具集,所有写操作统一走一个全局飞书守卫单例服务做人工审批(极简 HITL),并且每做完一个 CLI 就把使用说明回写进本 skill——skill 随使用越来越厚。
设计蓝本提炼自多个实战项目的共性做法(内部平台的 CLI 化 + 写操作审批),本 skill 只保留可迁移的部分,不依赖任何特定公司、系统或行业。
这是软控(soft control),不是硬隔离。 必须在使用前就把边界说明白,否则会给人虚假的安全感:
lark-cli 并完成登录(lark-cli auth login)——全局守卫服务的审批通道靠它。除这两条外不做任何假设:不假设目标系统类型、不假设有 API 文档、不假设内外网、不假设操作系统与实现语言、不假设用户懂技术细节。缺什么就在勘察阶段自己搞清楚,不要退回给用户一堆前置问题。
用户给一个网址(或一段描述/已有脚本)
│ ①agent 用浏览器操作能力自主勘察:抓 API、读写分型、认枚举语义(不问用户)
▼
cli/<system>/ # ②按系统组织:一个系统一个目录
├── <system>_cli # 读:直接执行
├── _guard_client # 写:接全局守卫(所有 CLI 共用同一份客户端)
└── ...
│
│ ③写操作 → 全局飞书守卫单例(一个常驻守护进程服务所有 CLI)
│ 卡片审批(本人点按钮 / 回 ok <hash8>)→ 决定落 spool → CLI 领取
▼
<skill 目录>/<domain>/ # ④agent skill 包装(playbook)
│
│ ⑤自进化:使用说明回写 registry/<system>.md,SKILL.md 只留索引
▼
registry/ # 越用越厚的注册表(渐进描述:细节在条目,入口在本文件)
三个设计支柱:
⚠️ 以上都是软控:约束的是「愿意配合的 agent 少犯错、慢一点」,不约束「铁了心绕过的执行者」。定位详见上节。
原则:用户只负责给入口(网址)和最后拍板,中间的信息收集全部自己做。 具体勘察手法详见 references/autonomous-discovery.md。
勘察流程:
--dry-run;只有信息 genuinely 拿不到时才问用户,问的时候带上下文和猜测方案让用户选。
逐条规范见 references/cli-design-guide.md。组织约定:
<工作区>/cli/
├── _guard/ # 全局守卫客户端(全机共享一份,所有 CLI 引用它,不复制)
│ └── guard_client.<ext>
├── <system-a>/ # 一个系统一个目录
│ ├── <system-a>_cli.<ext>
│ └── tests/
├── <system-b>/...
└── README.md # 各系统入口索引
要点速记:一个系统一个 CLI;命令用动词(list/detail/report/export/apply/pull);输出默认 JSON + --format table + --fields;exit code 语义化(0/1/2/3/4/5/6/7);写命令必须有 --dry-run;认证自备(环境变量 > 本地缓存 > shell 配置文件解析 > 浏览器登录态,全失败 exit 2 打印手动方法);高频多步操作做聚合命令;外部依赖收口到独立模块可整体 mock;大文件/大结果必须渐进读取(元数据先行 → 分块 → CLI 内置 grep,防撑爆 agent 上下文);服务端缺的能力在 CLI 层补偿(正则/路径过滤/行范围/批量);跨系统 ID/URL 映射固化进注册表(一个系统的输出直接喂另一个系统)。详见 references/cli-design-guide.md §8-11。
每个系统配一个 skill 目录(用当前 agent 运行时的 skill 目录约定),SKILL.md 写触发词 + 命令索引(带「什么时候用」注释)+ playbook 工作流 + 已知坑;skill 只写流程和判断标准,执行全落 CLI。
八条底线(完整设计见 references/write-guard-hitl.md):
ok <hash8> / no(5 秒轮询,stdout 倒计时)。result_channel。{"approved": false, "reason": "..."}。card.action.trigger 事件总线独占 → 收回调的守护进程全机一个,服务所有 CLI;CLI 按需拉起它(pid+锁),自己绝不直接 event consume。交付前逐项打勾(命令按实现语言等价替换):只读连通 → 写命令 dry-run → 守卫离线测试(批准/拒绝/超时/哈希不一致/网关故障/守护进程重启回归/卡片复用/300040 回退)→ 真机端到端演练一次。
验收通过不算完——必须执行自进化回写(Phase 6):
每完成一个系统的 CLI(或重大迭代),立即按 references/self-evolution.md 的协议:
registry/<system>.md(命令索引、认证方式、状态枚举、已知坑、实战记录);cli/<system>/,守卫客户端确认走全局共享 _guard/。| 系统 | 一句话 | 条目 | 状态 |
|---|---|---|---|
| (待沉淀——每接入一个系统在这里加一行) |
参考形态见 demo/:demo 目录展示了「cli 按系统组织 + 守卫客户端共享 + 守护进程单例 + 注册表条目」的完整骨架。
<工作区>/
├── cli/
│ ├── _guard/ # 全局守卫客户端(共享)
│ └── <system>/ # 每系统一个目录(CLI + 测试)
├── <skill 目录>/<domain>/ # 每系统一个 SKILL.md + references/
├── registry/<system>.md # 自进化注册表条目
└── README.md
ok <hash> 埋在散文里——退化到文本回复时哈希要给独立代码块,一键可复制