Skip to main content

Build and publish CMDOP skills

Project description

cmdop-skill

cmdop-skill

Build and publish CMDOP skills.

Install

pip install cmdop-skill

Quick Start

Scaffold a new skill

cmdop-skill init

Interactive wizard: name (with PyPI availability check), description, author.

Or write from scratch

from cmdop_skill import Skill, Arg

skill = Skill()  # name, version, description from pyproject.toml

@skill.command
async def greet(name: str = Arg(help="Who to greet", required=True)) -> dict:
    """Say hello."""
    return {"message": f"Hello, {name}!"}

if __name__ == "__main__":
    skill.run()

Skill() auto-resolves name, version, description from the nearest pyproject.toml. Explicit arguments still win.

Core Features

Feature Description
@skill.command Turn async/sync functions into CLI subcommands
Arg() Declarative arguments: help, required, default, choices, nargs, action
@skill.setup / @skill.teardown Lifecycle hooks (run before/after every command)
SkillCache Typed disk cache with TTL, scoped per skill — docs
TestClient Test harness: client.run("cmd", key=val) / client.run_cli("cmd --flag")
JSON output All commands return {"ok": true, ...} — exit 0 on success, exit 1 on error
Auto src/ path src/ added to sys.path automatically
Single source of truth name, version, description from pyproject.toml, no duplication

SkillCache

Built-in typed disk cache — no extra dependencies, platform-aware paths:

from cmdop_skill import SkillCache

cache = SkillCache("my-skill")
cache.set("data", payload, ttl=86400)   # 24 hours
data = cache.get("data")                # None if missing or expired

Paths: ~/Library/Caches/cmdop/skills/<skill>/ (macOS), ~/.cache/cmdop/skills/<skill>/ (Linux). Full reference → @docs/cache.md

Skill Structure

my-skill/
├── pyproject.toml
├── Makefile
├── README.md
├── skill/
│   ├── config.py       # SkillConfig manifest (required)
│   └── readme.md       # description shown in marketplace
├── src/my_skill/
│   ├── __init__.py
│   └── ...
└── tests/

skill/config.py — minimal manifest:

from cmdop_skill import SkillConfig

config = SkillConfig()  # all fields auto-resolved from pyproject.toml

CLI

Command Description
init [path] Scaffold a new skill project
install <path> Symlink skill into system skills directory
uninstall <name> Remove skill
bump [--minor|--major] Bump version in pyproject.toml
check-name <name> Check PyPI availability
release [--no-bump|--no-publish] Bump + build + PyPI + CMDOP
publish [--path] Publish to CMDOP marketplace
list List your published skills
config set-key / show / reset Manage API key

API key resolution order: --api-key flag → CMDOP_API_KEY env → saved config → interactive prompt.

Python API

Export Description
Skill Main class — registers commands, runs CLI
Arg Argument descriptor
SkillConfig Typed skill manifest (Pydantic model)
SkillCache Disk cache — see @docs/cache.md
CacheEntry Pydantic model for a cached value with metadata
TestClient Test harness
resolve_project_meta Resolve name/version/description from pyproject.toml
generate_manifest Generate skill/config.py content
publish_skill Programmatic publish
json_output / wrap_result / format_error Output helpers
scaffold.ScaffoldConfig / scaffold.scaffold_skill Programmatic scaffolding

Developer Docs

Deep-dive references in @docs/:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cmdop_skill-2026.3.17.tar.gz (52.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cmdop_skill-2026.3.17-py3-none-any.whl (73.5 kB view details)

Uploaded Python 3

File details

Details for the file cmdop_skill-2026.3.17.tar.gz.

File metadata

  • Download URL: cmdop_skill-2026.3.17.tar.gz
  • Upload date:
  • Size: 52.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for cmdop_skill-2026.3.17.tar.gz
Algorithm Hash digest
SHA256 60ca04cbb4b6c3b5b5d428353d58466149712f06874cfd86f9923187c58b1e4b
MD5 b222edb7ebb96ed14fa677d1f1a68db9
BLAKE2b-256 42cf5234fa1d611f3b35cce41f1e7eda71133cfa679453df025d26daa4483968

See more details on using hashes here.

File details

Details for the file cmdop_skill-2026.3.17-py3-none-any.whl.

File metadata

File hashes

Hashes for cmdop_skill-2026.3.17-py3-none-any.whl
Algorithm Hash digest
SHA256 6cd8c43e150bb9a4375a3595f1e94319c294743a07d21405fa5652f91f9597f9
MD5 1488635be4958600f6a3af647f4a4d8f
BLAKE2b-256 1a923488d22f65754e2001cd9e045dac50458dadce98432854b6c36d3a82f600

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page