Skip to content
Agentmart
Submit a tool

cli-anything-harness-builder

Build a new agent-usable CLI harness for GUI software.

Skill by 9529360-cpu

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/9529360-cpu-cli-anything-harness-builder

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Build a new agent-usable CLI harness for GUI software.

Use cases: agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/cli-anything-harness-builder

What's inside

Skill name
cli-anything-harness-builder
Description
Build a new agent-usable CLI harness for GUI software.
License
MIT
Instructions
152 lines in SKILL.md · view on GitHub

Files (4)

  • SKILL.md
  • architecture-and-pitfalls.md · references/
  • packaging.md · references/
  • testing-and-verification.md · references/

SKILL.md (first lines)

# CLI-Anything Harness Builder

Turn a GUI application (or any software with no agent-friendly interface) into
a scriptable, JSON-capable CLI you can then drive with `terminal` — the same
methodology behind [CLI-Anything](https://github.com/HKUDS/CLI-Anything)'s
registry, condensed for Hermes tools (`terminal`, `read_file`/`write_file`,
`patch`, `delegate_task`) instead of the upstream doc's Claude-Code/Codex
framing. This is a bigger job than using an existing harness — expect several
turns of real engineering, not a one-shot script.

## When to Use

- The user wants Stardust to operate a specific piece of software and no
  harness for it exists yet. **Check first**: use the `cli-anything` skill's
  `cli-hub search <name>` — if a harness already exists, install and use it
  instead of rebuilding it.
- The user explicitly asks to "build a CLI for X" / "make X agent-usable."

Do not reach for this to wrap something that already has a decent CLI or a
Hermes-native tool — this is for GUI-only or no-interface software.

## The One Non-Negotiable Rule

**Call the real software. Never reimplement it.** The #1 failure mode is
building a look-alike (a Pillow-based image compositor standing in for GIMP, a
`bpy`-script generator that never actually invokes Blender) — it can't handle
real workloads and silently diverges from the real thing. The software is a
**hard runtime dependency** you shell out to via `terminal`, documented in the
harness's own README with install instructions per OS — never an optional
fallback, never a "gracefully degraded" pure-Python reimplementation.

The shape is always: **build valid project/intermediate data → hand it to the
real software via its CLI/scripting interface → verify the real output.**

| Software | Backend invocation | Native format |
|---|---|---|
| LibreOffice | `libreoffice --headless --convert-to <fmt>` | ODF (ZIP+XML) |
| Blender | `blender --background --python script.py` | `.blend` / bpy script |
| GIMP | `gimp -i -b '(script-fu-console-eval ...)'` | `.xcf` |
| Inkscape | `inkscape --actions="..." --export-filename=...` | SVG |
| Shotcut / Kdenlive | `melt project.mlt -consumer avformat:out.mp4` | MLT XML |
| Audacity | `sox` | `.aup3` |
| Browser (no CLI) | an MCP server, when one exists — see `references/architecture-and-pitfalls.md` | n/a |

## Workflow

### 1. Analyze

Find the backend engine (the library/CLI the GUI itself calls), the native
project-file format, and any command/undo system — those commands ARE your
future CLI operations. Use `terminal`/`read_file` to inspect the target
software's source (if available) or its CLI `--help`/scripting docs.

### 2. Design

- Interaction model: build **both** a stateful REPL (default, no args) and
  one-shot subcommands (scripting) — not just one.
- Command groups by domain: project (new/open/save), core operations
  (the app's actual purpose), import/export, config, session (undo/redo/status).
- Every command supports `--json` for machine output.
- Plan the state model: what persists between commands, and where.

### 3. Implement

Use `write_file`/`patch` to build, in this exact layout (PEP 420 namespace
package — `cli_anything/` itself has **no** `__init__.py`, so unrelated
harnesses can coexist in one Python environment):

```
<software>/agent-harness/
├── <SOFTWARE>.md              # your analysis notes (phase 1)
├── setup.py
└── cli_anything/
    └── <software>/
        ├── __init__.py
        ├── __main__.py
        ├── README.md           # install + run instructions — required
        ├── <software>_cli.py   # Click entry point; REPL when no subcommand
        ├── core/               # one module per domain, e.g. project.py, export.py, session.py
        ├── utils/
        │   └── <software>_backend.py   # the ONLY module that shells out to the real software
        └── tests/
            ├── TEST.md         # test plan, then results — required
            ├── test_core.py
            └── test_full_e2e.py
```

Read `references/architecture-and-pitfalls.md` before writing `export.py` or
any rendering path — the "rendering gap" (effects silently dropped because the
renderer you picked ignores project-level filters) is the #2 failure mode.

### 4–5. Test (plan first, then implement)

Write `tests/TEST.md` as a plan **before** any test code: which modules,
which edge cases, which realistic multi-step workflows (e.g. "podcast
production," "YouTube-style cut/trim") will be simulated, and what output
properties get verified. Then implement against that plan.

Read `references/testing-and-verification.md` before writing `test_full_e2e.py`
— this is the layer that actually invokes the real software and is the one
projects most often skip or fake. **No graceful degradation**: if the real
software isn't installed, tests fail, they don't skip.

Append real `pytest -v` results to `TEST.md` once everything passes.

### 6. Give the harness its own skill

Generate a `SKILL.md` for the finished harness (frontmatter `name`/
`description`, then install prerequisites, command groups, `--json` usage,
realistic examples) so Stardust — or any other agent — can discover and drive
it later without re-reading your source. This is a skill for the *harness*,
separate from this builder skill.

### 7. Package it

Read `references/packaging.md` for the exact `setup.py` namespace-package
template and verification steps (`pip install -e .`, then run the test suite
against the **installed** command, not a module fallback).

From 9529360-cpu/stardust-hermes, MIT.

Signals

Stars
0
Forks
1
Open issues
3
Last commit (this folder)
Sep 26, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from 9529360-cpu

Cite this page

cli-anything-harness-builder skill. Agent Mart. https://agentmart.dev/skills/9529360-cpu-cli-anything-harness-builder (last updated 2026-10-24)