7.9 KiB
Contributing to CLI-Anything
Thank you for your interest in contributing to CLI-Anything! This guide will help you get started.
Types of Contributions
We welcome three main categories of contributions:
A) CLIs for New Software
Adding a new CLI harness is the most impactful contribution. You can either add the harness inside this monorepo or host it in your own standalone repository — both are first-class citizens on the CLI-Hub.
Option 1: In-repo harness
Place your code under <software>/agent-harness/ and ensure the following:
<SOFTWARE>.md— the SOP document exists at<software>/agent-harness/<SOFTWARE>.mddescribing the harness architecture.SKILL.md— the canonical AI-discoverable skill definition exists atskills/cli-anything-<software>/SKILL.md, and the packaged compatibility copy exists atcli_anything/<software>/skills/SKILL.md.- Tests — unit tests (
test_core.py, passable without backend) and E2E tests (test_full_e2e.py) are present and passing. README.md— the project README includes the new software with a link to its harness directory.registry.json— add an entry for the new software (see Registry fields below).repl_skin.py— an unmodified copy from the plugin exists inutils/.
Option 2: Standalone repository (external)
Host your CLI in your own repo and submit a registry-only PR to this repo. Your PR only needs to add an entry to registry.json — no code in this monorepo is required. This is ideal if you want full control over releases, CI, and versioning.
Requirements for standalone CLIs:
- Published package — your CLI must be installable via
pip install <package-name>(PyPI) or apip install git+https://...URL. SKILL.md— an AI-discoverable skill definition exists somewhere in your repo.- Tests — your repo should have its own test suite.
registry.json— add an entry withsource_urlpointing to your repo andskill_mdpointing to the raw URL of your SKILL.md (see Registry fields below).
B) New Features
Feature contributions improve existing harnesses or the plugin framework. Examples include new CLI commands, output formats, backend improvements, or cross-platform fixes.
- Open an issue first to discuss the feature before starting work.
- Follow existing code patterns and conventions in the target harness.
- Include tests for any new functionality.
C) Bug Fixes
Bug fixes resolve incorrect behavior in existing harnesses or the plugin.
- Reference the related issue in your PR (e.g.,
Fixes #123). - Include a test that reproduces the bug and verifies the fix.
- Ensure all existing tests for the affected harness still pass.
CLI-Hub & Registry
All available CLIs are listed in registry.json at the repo root and displayed on the CLI-Hub. The hub reads registry.json directly from main, so it updates immediately when a PR is merged.
Registry fields
Include an entry in registry.json as part of your PR. Each field is described below:
| Field | Required | Description |
|---|---|---|
name |
Yes | Lowercase identifier (e.g. "my-software"). Must be unique. |
display_name |
Yes | Human-readable name shown on the hub (e.g. "My Software"). |
version |
Yes | Semantic version string (e.g. "1.0.0"). |
description |
Yes | One-line description of what the CLI does. |
requires |
Yes | Runtime dependencies the user needs (e.g. "Docker") or null. |
homepage |
Yes | Official homepage of the target software (not your repo). |
source_url |
Yes | For standalone repos: URL to your repo (e.g. "https://github.com/user/repo"). For in-repo harnesses: null (the hub auto-links to <name>/agent-harness/). |
install_cmd |
Yes | Full pip install command. PyPI: "pip install cli-anything-my-software". In-repo: "pip install git+https://github.com/HKUDS/CLI-Anything.git#subdirectory=my-software/agent-harness". |
entry_point |
Yes | CLI command name (e.g. "cli-anything-my-software"). |
skill_md |
Yes | Path to canonical SKILL.md. For standalone repos: full URL (e.g. "https://github.com/user/repo/blob/main/.../SKILL.md"). For in-repo: relative path under the repo-root skills/ tree (e.g. "skills/cli-anything-my-software/SKILL.md"). Set to null if not yet available. |
category |
Yes | One of the existing categories (check registry.json for examples). |
contributors |
Yes | Array of {"name": "...", "url": "..."} objects listing all contributors. |
In-repo example:
{
"name": "my-software",
"display_name": "My Software",
"version": "1.0.0",
"description": "Short description of what the CLI does",
"requires": "backend software or null",
"homepage": "https://my-software.org",
"source_url": null,
"install_cmd": "pip install git+https://github.com/HKUDS/CLI-Anything.git#subdirectory=my-software/agent-harness",
"entry_point": "cli-anything-my-software",
"skill_md": "skills/cli-anything-my-software/SKILL.md",
"category": "category-name",
"contributors": [
{"name": "your-github-username", "url": "https://github.com/your-github-username"}
]
}
Standalone repo example (multiple contributors):
{
"name": "my-software",
"display_name": "My Software",
"version": "2.0.0",
"description": "Short description of what the CLI does",
"requires": "backend software or null",
"homepage": "https://my-software.org",
"source_url": "https://github.com/your-username/cli-anything-my-software",
"install_cmd": "pip install cli-anything-my-software",
"entry_point": "cli-anything-my-software",
"skill_md": "https://github.com/your-username/cli-anything-my-software/blob/main/cli_anything/my_software/skills/SKILL.md",
"category": "category-name",
"contributors": [
{"name": "original-author", "url": "https://github.com/original-author"},
{"name": "current-maintainer", "url": "https://github.com/current-maintainer"}
]
}
Updating an existing CLI on the Hub
When you modify an existing harness, update its registry.json entry in the same PR:
- Bump the
versionfield to reflect the change. - Update
description,requires, orcategoryif they changed. - The hub will reflect the update as soon as the PR is merged to
main.
Development Setup
Each generated CLI lives in <software>/agent-harness/ and is an independent Python package:
# Clone the repo
git clone https://github.com/HKUDS/CLI-Anything.git
cd CLI-Anything
# Install a harness in editable mode
cd <software>/agent-harness
pip install -e .
# Run tests
python3 -m pytest cli_anything/<software>/tests/ -v
Requirements
- Python 3.10+
- Click 8.0+
- pytest 7.0+
Code Style
- Follow PEP 8 conventions.
- Use type hints where practical.
- All CLI commands must support the
--jsonflag for machine-readable output.
Commit Messages
Use clear, descriptive commit messages following the conventional format:
feat: add Krita CLI harness
fix: resolve Blender backend path on macOS
docs: update README with new software entry
test: add unit tests for Inkscape layer commands
Running Tests
# Unit tests (no backend software needed)
python3 -m pytest cli_anything/<software>/tests/test_core.py -v
# E2E tests (requires real backend installed)
python3 -m pytest cli_anything/<software>/tests/test_full_e2e.py -v
# All tests for a harness
python3 -m pytest cli_anything/<software>/tests/ -v
Submitting a Pull Request
- Fork the repository and create a feature branch from
main. - Make your changes following the guidelines above.
- Ensure all tests pass for any harnesses you modified.
- Push your branch and open a Pull Request against
main. - Fill out the PR template completely.
Questions?
If you have questions, feel free to open a Discussion or an issue tagged with type: question.