README 口径的安装与使用:先看清它装到哪
CLI-Anything 的 README 开头给的印象很干脆:pip install cli-anything-hub,然后 cli-hub install <name>(README.md:12)。两行命令,看上去像装个包管理器再装包。但真按这条路走下去,你会发现「装到哪」这件事在这个仓库里是分层的,而且分层的说明散在 README 的不同小节里,跳着读很容易漏掉最要紧的那一句。
本文只讲 README 与 registry.json 写了什么。我们的采集日是 2026-08-10,读到的快照 HEAD 是 39634a6(提交日期 2026-08-03),下面每个数字都标了出处行号,你 clone 下来能自己对。
第一层:hub 本身
Quick Start 一上来分了两个入口(README.md:183-187):一是用现成生态,装 cli-anything-hub;二是造新 CLI,装插件跑那套 7 阶段生成器。本文走第一条。
这个 hub 包的身份可以在仓库里直接核对:包名 cli-anything-hub、版本在 cli-hub/setup.py 第 52 到 53 行写死为 0.4.1。注意这是打包声明里的版本,不是 PyPI 上的发布状态——它在 PyPI 上是什么情况,我们没有核实过。
Python 版本要求在两处一致:README 徽章标 ≥3.10(README.md:28),Quick Start 的先决条件同样写 “Python 3.10+“(README.md:249)。
hub 提供的子命令,README 第 199 到 207 行给了一张表,一共七条:
| 子命令 | README 原文形态 |
|---|---|
list | 列出可用条目 |
search | search <query> |
info | info <name> |
install | install <name> |
update | update <name> |
uninstall | uninstall <name> |
launch | launch <name> [args...] |
这七条的实际行为、registry 怎么拉取与合并、往你机器上写哪些目录,都要读 cli-hub/cli_hub/ 的源码才能说清,我们这次没有读那部分代码,关于 cli-hub 的落点另有一篇专门讲,这里不猜。
第二层:cli-hub install <name> 到底装的是什么
这是「装到哪」的第一个岔口。你以为装的是一个 PyPI 包名,但 registry.json 里 install_cmd 字段的实际形态不是那样。数组第一条 jumpserver 的 install_cmd 写在 registry.json 第 16 行,形如:
pip install git+https://github.com/HKUDS/CLI-Anything.git#subdirectory=jumpserver/agent-harness
这条命令指向的是 GitHub 上这个仓库里的一个子目录(jumpserver/agent-harness),而不是索引里一个已发布的包名。要说明的是,我们手上只核对了这一条示例,79 条 install_cmd 的形态分布没有逐条统计;这条命令具体怎么解析、拉到的是什么状态,以 pip 与 git 的实际表现为准,我们没有核实。
另有一个只出现一次的字段值得记一笔:79 条里唯一带 install_strategy 字段的是 siyuan,值为 "pip"。这个字段在整份注册表里只出现一次,cli-hub 拿它做什么,我们没有读源码,不作判断。
真正能直接数出来、也和「装到哪」直接相关的是来源分布:79 条里 source_url 为 null 的有 68 条,非 null 的 11 条。这 11 条正好是根目录下没有同名目录的那批(clibrowser、hacker-feeds-cli、inkstitch、magnific、meerk40t、openwebui、palmier、stata、tinyfish、ueatelier、ve-twini)——它们的实现在别的独立仓库里,剩下 68 条的实现就在本仓库内。也就是说,你从同一个 cli-hub install 命令进去,装到的东西可能来自本仓库,也可能来自第三方仓库。想在装之前分清楚,最直接的动作是打开 registry.json、翻到这一条,看 source_url 是不是 null;至于 cli-hub info 会输出什么,我们没有读它的源码,同样不作判断。
还有两个字段是 79 条全覆盖的:requires 与 entry_point 的出现频次都是 79 次,也就是每条都声明了自己的依赖与入口点。这两个字段的具体取值我们没有逐条展开,但知道它们是必然存在的,读注册表的时候就有固定的落点可看。
另外别把注册表自己的时间戳和我们的采集时间混起来:meta 里的 updated 写的是 2026-06-19(registry.json:3-5),这是注册表声明的更新日期;我们的采集日是 2026-08-10,两者不是一回事。
顺带一提,仓库里还另有一份 22 条的 public_registry.json,那批走的是 npm/brew/uv 等另一套装法。同一个 hub 面对的是两套安装口径,这里只点到为止,两份 registry 的完整差异另有一篇在讲。
第三层:两条命令都不覆盖的那一层
这是本篇最要紧、也最容易被跳过的一句。README 第 236 行明确提醒:包装真实桌面软件的 CLI,需要用户自行安装上游应用。
把这句和前两层放在一起,「装到哪」的完整答案才出来:
pip install cli-anything-hub装的是分发工具本身cli-hub install <name>装的是某个 harness 的 Python 包- 这个 harness 要操控的那个软件(Blender、GIMP、OBS 之类),得你自己在本机装好
第三层不在任何一条 pip 命令里。这也是「注册表里有 79 条」和「你能用 79 个」之间最大的一段距离——注册表条目描述的是有没有这层包装,不是你机器上有没有那个宿主软件。
这段距离还有别的侧面:注册表里 5 条的 skill_md 是 null,而 rekordbox 有目录却没有注册表条目——目录与 registry 的差集另有一篇专门讲,这里不展开。再往 README 那边看,演示表格里带 cli-anything-* 入口的行我们用正则数出来是 44 行,README 正文写的是 “Tested across 18 diverse, complex applications”(README.md:999)。79、44、18 是三个不同口径下的数,各自有各自的位置,别互相替代着用。
还有一点必须说清楚:这类 harness 的工作方式就是在你本机启动、驱动第三方软件并执行脚本。仓库自己在 SECURITY.md 里列了 5 类攻击面(子进程参数、Script-Fu 注入、XML/SVG 内容、路径穿越、凭据泄露)及对应缓解手段(SECURITY.md:14-22),其中把编解码器白名单标为 “Breaking Change”:kdenlive/shotcut 的 melt 后端用 ALLOWED_VCODECS/ALLOWED_ACODECS 两个 frozenset 校验,不在名单内直接抛 ValueError(SECURITY.md:34-38)。这份文件开头还写明它面向人类贡献者与安全评审,“NOT part of the CLI generation methodology — agents should follow HARNESS.md only”(SECURITY.md:3-5)。装之前把这 68 行读一遍,成本很低。
第四层不是 pip:agent 那侧怎么接
如果你的目标是让某个 agent 用上这些 CLI,README 给的入口换了一套工具链。meta-skill 的安装命令写在第 245 行:
npx skills add HKUDS/CLI-Anything --skill cli-hub-meta-skill -g -y
这是 Node 侧的命令,和前面那条 pip install 不是一个体系。所以「装 CLI-Anything」这句话在不同语境下指的可能是两件不同的事:装 hub(Python),还是给 agent 装 meta-skill(Node)。
宿主平台这边,README 列了 10 个 agent 平台分节,加 1 个「更多平台」分节。标注要照实看:带 Experimental 标签的有 5 个——OpenCode(README.md:411)、Goose(:463)、Codex(:536)、Hermes(:588)、Reasonix(:630);另有若干平台带 Community 标签;「More Platforms (Coming Soon)」一节把 Cursor 和 Windsurf 列为 “coming soon”(README.md:695,700-701)。演示区末尾也写着 “More CLI demos coming soon.”(README.md:989)。
README 自己的 Limitations 三条同样值得先读(README.md:1669-1671):依赖前沿模型(点名 Claude Opus 4.6 / Claude Sonnet 4.6 / GPT-5.4)、依赖能拿到源码、常需要多次 /refine 迭代。Roadmap 那边是 5 项未打勾、1 项已打勾,打勾的那项是 “Produce SKILL.md alongside the CLI for agent skill discovery and orchestration”(README.md:1675-1681)。
顺手记两处对不上的地方
第一处在 Quick Start 的编号:README 里只有 “Phase 1”(README.md:190)、“Phase 1.5”(README.md:238)、“Phase 3”(README.md:247),没有 Phase 2。你按编号找步骤时会以为自己漏了一段。
第二处是权威站点有两套说法:README 与徽章指向 https://hkuds.github.io/CLI-Anything/(README.md:12),而 docs/hub/llms.txt 第 5 行声明 “Canonical site: https://clianything.cc”,三份 registry JSON 的对外地址也写成 clianything.cc/...(docs/hub/llms.txt:51-54)。两处不一致,以你实读的仓库内容为准。
说完这两处就停,我们不推断哪一处「才是对的」。
装之前可以自己跑一遍的核对动作
不必先安装任何东西,clone 下来读文件就能把上面这些数字复现出来:
# 注册表条目数
python -c "import io,json; d=json.load(io.open('registry.json',encoding='utf-8')); print(len(d['clis']))"
# 有多少条是从本仓库子目录直装的
python -c "import io,json; d=json.load(io.open('registry.json',encoding='utf-8')); print(sum(1 for c in d['clis'] if c.get('source_url') is None))"
# 根目录有多少个目录
ls -d */ | wc -l
# 安装前先读的两份
wc -l SECURITY.md CONTRIBUTING.md
我们采集时这几条依次得到 79、68、82,以及 SECURITY.md 68 行、CONTRIBUTING.md 188 行。以上命令按仓库中的文件结构组合,未经实测,以官方文档与 --help 的实际输出为准。
真正要记的不是这几个数,而是三层的分界:hub 是一层,harness 包是一层,宿主软件是你自己的一层。前两层各一条命令,第三层一条命令都没有——README 第 236 行那句提醒,是这整套安装流程里最该先看的一行。
本文依据 CLI-Anything 官方仓库(github.com/HKUDS/CLI-Anything)的 README、registry.json、
docs/ 与各 agent-harness/ 下的源码整理,核对日 2026-08-10,对应仓库快照 39634a6。
本文内容为仓库源码与文档口径,我们没有安装或运行过其中任何一个 harness,
也没有在本机驱动过任何一款宿主软件,因此不涉及实际操控效果的任何描述。
这类 harness 会在本机执行外部程序与脚本,是否使用请结合自身环境评估。
注册表与 harness 内容随上游更新而变动,请以仓库最新内容为准。
安全相关做法请结合自身环境评估,本文不构成安全方案建议。