---
title: "CLI-Anythingとは：エージェント用CLIの生成と、CLI-Hubの送信と導入"
description: "HKUDSが公開するCLI-Anythingは、GIMPやLibreOfficeなどのソフトに、AIエージェントが操作できるCLIを生成します。生成の手順、既製のCLIを配るCLI-Hub、入れる前に確かめたい通信とインストールの仕組みを、リポジトリのコードから読みました。"
url: https://udon-dev.com/notes/cli-anything/
lang: ja
published: 2026-10-19
topic: [ai]
tags: ["cli-anything", "ai-agent", "agent-skills", "claude-code", "cli"]
---

# CLI-Anythingとは：エージェント用CLIの生成と、CLI-Hubの送信と導入

- CLI-AnythingはClaude Codeなどのプラグインで、ソフトのソースコードから、JSONで結果を返すPythonのCLIと使い方のSKILL.mdをAIエージェントに生成させる。描画や書き出しは本物のソフトに任せる
- 既製のCLIはCLI-Hubで配られ、リポジトリの一覧には79個あり、そのうち73個はGitHubのリポジトリから版を固定せずにインストールされる
- CLI-Hubは既定で、実行したコマンド名やエージェントから呼ばれたかの判定を、端末ごとのIDを付けてPostHogに送り、環境変数CLI_HUB_NO_ANALYTICS=1で止められる

GitHub Trendingに、[HKUDS/CLI-Anything](https://github.com/HKUDS/CLI-Anything)が上がっていました。「あらゆるソフトをAIエージェントが扱える形にする」という触れ込みで、GIMPやBlender、LibreOfficeをエージェントにコマンドで操作させるためのCLIを作ります。画面を撮って座標をクリックするGUIエージェントとは逆の発想です。何を生成するのか、入れると手元で何が動くのかを、リポジトリのコードから確かめました。

（図: GitHubのリポジトリ「HKUDS/CLI-Anything」の紹介画像。リポジトリ名と説明、コントリビューター数やスター数、組織のアイコン）
出典：[HKUDS/CLI-Anything（GitHub）](https://github.com/HKUDS/CLI-Anything)

## CLI-Anythingとは

最初のコミットは2026年3月8日で、ライセンスはApache 2.0です。OSS Insightの[集計](https://ossinsight.io/blog/agent-native-cli-wave-2026)では、公開から23日の3月31日時点でスターが25,219ありました。6月には作者らが[技術報告](https://arxiv.org/abs/2606.03854)をarXivに出しています。

報告によると、スクリーンショットから要素を探してクリックする方法は、画面の変更や表示の待ち時間で壊れやすいそうです。AIエージェントには人間向けの画面を読ませず、コマンドで操作させ、状態と結果を決まった形で返すほうがよい、というのが報告の主張です。

使い方は2つです。既製のCLIはパッケージマネージャー「CLI-Hub」で探して入れます。まだないソフトはClaude CodeやCodexなどにプラグインを入れ、そのソフトのソースコードからCLIを生成させます。

## 生成されるCLIの中身

手順書の[HARNESS.md](https://github.com/HKUDS/CLI-Anything/blob/main/cli-anything-plugin/HARNESS.md)は、ソースコードの分析からPyPI向けのパッケージ化までを7段階に分けています。途中にはテストの計画、実装、結果の記録があり、エージェント向けの使い方を書いた`SKILL.md`も6段階目のあとに生成させます。Claude Codeでの始め方は、マーケットプレイスを足してプラグインを入れ、`/cli-anything <ソースのパスかGitHubのURL>`を実行する手順です。[コマンドの説明](https://github.com/HKUDS/CLI-Anything/blob/main/cli-anything-plugin/commands/cli-anything.md)によると、ソフトの名前だけでは受け付けず、ソースコードが必要です。

```sh
/plugin marketplace add HKUDS/CLI-Anything
/plugin install cli-anything
/cli-anything ./gimp
```

生成物はPythonのClickで書いた`cli-anything-<ソフト名>`というコマンドです。引数なしで起動すると対話のREPLになり、サブコマンドで1回ずつ実行することもできます。全てのコマンドに`--json`が付くので、エージェントは結果をJSONで受け取れます。

HARNESS.mdが「交渉の余地がない」とする規則で一番大きいのは、描画や書き出しを本物のソフトに任せることです。CLIはODFやSVG、MLTのXMLといったソフトの形式のファイルを直接組み立て、PDFや画像への書き出しは本物のソフトを呼びます。例えばLibreOfficeの[CLI](https://github.com/HKUDS/CLI-Anything/blob/main/libreoffice/agent-harness/cli_anything/libreoffice/utils/lo_backend.py)は、文書をODFとして作り、`libreoffice --headless --convert-to`でPDFやDOCXに変えています。ソフトが入っていなければ、代わりのライブラリで済ませずにエラーで止める決まりで、テストも本物のソフトがないと失敗します。GIMPのCLIを使うには、GIMPそのもののインストールが要るということです。

書き出しの確認にも決まりがあり、終了コードが0でも成功とみなしません。PDFなら先頭のバイト、動画なら特定のフレームの明るさ、音声なら始めと終わりの音量まで調べるよう求めています。HARNESS.mdは理由として、エージェントが自分で誤りを直すには、はっきりしたエラーが要ると書いています。

[README](https://github.com/HKUDS/CLI-Anything/blob/main/README.md)の「制限」の節は、CLIの生成にはClaude Opus 4.6やGPT-5.4のような最上位のモデルが要り、小さいモデルでは不完全なCLIになりやすいと書いています。ソースコードがなく、実行ファイルしかないソフトでは質が大きく落ちること、1回の生成で全機能を覆えず、`/cli-anything:refine`での追加を繰り返す前提であることも書かれています。

## CLI-Hubで配られているCLI

既製のCLIはPyPIの`cli-anything-hub`（10月18日時点で0.4.1）で入れる`cli-hub`コマンドから探します。`cli-hub search image`で探し、`cli-hub install gimp`で入れる形です。エージェントに探させるための`cli-hub-meta-skill`というスキルもあります。

リポジトリの[registry.json](https://github.com/HKUDS/CLI-Anything/blob/main/registry.json)には、CLI-Anythingの方式で作ったCLIが79個載っています。分類ではAIが8個で最も多く、DevOps、Web、動画、グラフィックス（GPUのデバッグや3Dの解析）が6個ずつです。GIMPやBlenderのような制作ソフトのほか、ZoomやJumpServerのようにWebのAPIを包むもの、Slay the Spire IIのようなゲームもあります。別の[public_registry.json](https://github.com/HKUDS/CLI-Anything/blob/main/public_registry.json)には、Lark（Feishu）の公式CLIなど、ほかの開発元のCLIが24個あり、11個はnpmで入れる形です。

READMEのテスト結果の表には、30個のCLIで合計2,464件のテストが通ったとあります。数字は開発元の自己申告で、CLIごとの件数は10件から208件まで開きがあります。

## CLI-Hubが送る情報とインストールの仕組み

CLI-Hubの[README](https://github.com/HKUDS/CLI-Anything/blob/main/cli-hub/README.md)は、利用状況の匿名のイベントを送ると書いています。[コード](https://github.com/HKUDS/CLI-Anything/blob/main/cli-hub/cli_hub/analytics.py)を読むと、送り先は既定でPostHogで、`cli-hub`を実行するたびに次の情報が送られます。

- 実行したサブコマンドの名前と、OSの種類
- エージェントから呼ばれたかの判定。`CLAUDE_CODE`や`CODEX`などの環境変数と、親プロセスの名前（claude、codex、cursorなど）、標準入力が端末かどうかから推し量る。CIやスクリプトから呼ぶと、エージェント扱いになる
- 初回に作り、`~/.cli-hub/`に保存する端末ごとのランダムなID
- `install`、`uninstall`、`launch`のときは対象のCLIの名前。`cli-hub can`などの検索では、入力した検索語の先頭120字

個人のファイルの中身は送りませんが、同じIDで使い方が積み重なります。送信は環境変数`CLI_HUB_NO_ANALYTICS=1`で止められるので、会社の端末やCIでは先に設定しておいたほうがよさそうです。

インストールの仕組みにも、見ておきたい点があります。registry.jsonの79個のうち66個は、`pip install git+https://github.com/HKUDS/CLI-Anything.git#subdirectory=...`の形で、このリポジトリのmainブランチから直接インストールされます。ほかの7個も、別の作者のGitHubのリポジトリから同じ形で入ります。どちらも版を固定しないので、同じ`cli-hub install`でも、実行した日によって入るコードが変わります。一覧そのものは`hkuds.github.io`から取っていて、手元の控えは1時間で古いとみなされます。[installer.py](https://github.com/HKUDS/CLI-Anything/blob/main/cli-hub/cli_hub/installer.py)は、一覧のインストールコマンドに`|`や`&&`があればシェル経由で実行し、そのコメントには「コマンドは信頼できる一覧から来る」とあります。一覧が書き換えられれば、手元でそのコマンドが動く作りです。業務の端末では`cli-hub`を通さず、必要なCLIだけをコミットを指定して`pip install`するほうが、何が入ったかを後から追えそうです。

エージェントが自分でコマンドを組み立てる点は、開発元も危険として扱っています。[SECURITY.md](https://github.com/HKUDS/CLI-Anything/blob/main/SECURITY.md)は、人が1行ずつ確かめない前提で、プロンプトインジェクションを受けたエージェントが細工した引数をソフトに渡す筋書きを挙げています。対策として、`subprocess`で`shell=True`を使わない、コーデック名を許可リストで確かめる、出力先のパスを正規化する、といった決まりをCLIの作り手に課しています。CLIはコミュニティのPull Requestで増えているので、使うCLIがこの決まりを守っているかは、入れる前にコードで確かめたほうがよさそうです。

## 関連する記事

エージェントに手順を渡すスキルの例は、[Googleのスキル集の記事](/notes/google-skills-catalog/)に書きました。CLI-Anythingは、スキルの`SKILL.md`に加えて、ソフトを操作するコマンドそのものを配る点が違います。エージェントにとっての使いやすさの測り方は、[Agent Experienceの記事](/notes/agent-experience-ax/)で扱っています。
