Three-panel CLI-Anything teaser: a stressed lobster wishes every app worked like Claude Code, discovers CLI-Anything, and becomes agent-native

CLI-Anything gives a coding agent a command line for desktop software you already own. Install a ready-made CLI from its registry, or point its generator at a codebase and it writes a new one. The artifacts stay in the application's own file formats, so a designer can open them afterwards.

🚀 Quick Installation

Two entry points. The registry is the fast one. The generator is for software nobody has covered yet.

CLI-Hub (recommended)

pip install cli-anything-hub
cli-hub list
cli-hub install libreoffice

Generate a new CLI

# Claude Code marketplace
/plugin marketplace add HKUDS/CLI-Anything
/plugin install cli-anything

# Point it at source or a repository
/cli-anything ./gimp

Requirements: Python 3.10+, the upstream application installed (LibreOffice, draw.io, Blender), and a frontier model for generation. Apache-2.0. The hub route needs no account or API key.

🎯 What It Is

Each CLI is a stateful wrapper around the application's own scripting surface. Blender runs through bpy, its Python API. GIMP runs in Script-Fu batch mode. Inkscape writes SVG directly, then calls the inkscape binary to export. LibreOffice calls its headless binary.

The CLI keeps its own working state in a JSON file it owns. The finished artifact is whatever the application exports: a PDF from LibreOffice, a .drawio and a PNG from draw.io, a rendered image from Blender. Nothing gets reimplemented, so any filter the app supports is a filter the agent can use.

"We build structured interfaces TO software, not replacements." — the repository's README

Every command prints a readable table by default and structured JSON when you pass --json. One run leaves three artifacts behind. The CLI's state file. The exported native file. And the JSON on stdout, which the agent reads to decide its next move.

The registry lists 79 CLIs this project built, plus 24 third-party tools. Coverage runs from Blender, Inkscape and GIMP to OBS, Joplin, Zotero and QGIS.

⌨️ What You Actually Type

A short session turns a blank document into a real PDF. The commands and output are the repository's own, condensed and wrapped to fit this column.

$ cli-anything-libreoffice document new \
    -o report.json --type writer
✓ Created Writer document: report.json

$ cli-anything-libreoffice --project report.json \
    writer add-table --rows 4 --cols 3
✓ Added 4×3 table

$ cli-anything-libreoffice --project report.json \
    export render output.pdf -p pdf
✓ Exported: output.pdf (42,831 bytes)
  via libreoffice-headless

$ cli-anything-libreoffice --json \
    document info --project report.json
{"name": "Q1 Report", "type": "writer",
 "pages": 1, "elements": 2}

Nobody watches a window during any of that. The agent reads JSON, checks the exit code, and confirms the file exists before it moves on.

The full run takes about four minutes. This clip is eight seconds of it, sped up, from empty canvas to saved file.

🧊 Watching It Work

Blender is the harder case, because the output is visual. In the drone demo the agent renders a preview after each build step, reads the result, and continues from what it sees. The run keeps a timeline that links each command to the frame it produced.

Blender live preview monitor showing an agent build trace for an orbital relay drone, with preview bundles and telemetry
The agent's build trace beside its own render. A wrong move is visible in the preview before the next command runs.

⏱️ Two Clocks

First working run, registry route. Three installs — the hub, one CLI, the application it drives — then a command. Ten minutes, assuming the application is already on the machine.

First working run, generator route. The slow half. Seven phases, from codebase analysis to a pip-installable package. The README warns that one pass rarely covers everything, so budget an afternoon and one or two /refine rounds against the gaps it lists.

Time to trust it. The test suite runs in minutes and fails rather than skips when a backend is missing. The Blender CLI ships 208 tests, the LibreOffice CLI 158. A week on copies of real project files is a recommendation, not a measurement.

🎨 What It Changes for a Design Team

Native files are the point. An agent that exports a .drawio file hands the designer an editable working file. An agent that hands over a screenshot stops the work there.

It also removes the fragile half of GUI automation. There is no coordinate clicking, and no waiting for a window to appear. The agent talks to the scripting interface instead of the pixel grid.

CLI-Anything architecture: the /cli-anything command runs a seven-phase pipeline that produces one CLI per application against real software
The generator in seven phases. The last arrow ends at the real software rather than at a copy of it.

⚖️ Use It / Skip It

SituationVerdict
You want an agent to operate a tool the team already usesUse it — install the ready-made CLI
Your internal tool has source code and no APIUse it — the generator is built for this
You only have a compiled binarySkip it — coverage drops sharply without source
You want a small local model to build the CLISkip it — generation expects a frontier model
The upstream application cannot be installed on the machineSkip it — calls go to the real backend, with no fallback

🏁 Conclusion

Start with the registry, not the generator. Install the hub, install one CLI, install the application it drives, then run the four commands above on a file you know.

If the output opens in the real application, the approach fits your workflow and you spent ten minutes finding out. A generated CLI earns trust because its tests fail loudly when a backend is missing. That is the property that lets an agent run unattended.