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.4.7.1.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.4.7.1-py3-none-any.whl (73.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for cmdop_skill-2026.4.7.1.tar.gz
Algorithm Hash digest
SHA256 de99ece330cd9db62faa317178271da2a477352b78b45e00bfb99e63c1dc7451
MD5 b8c615c7a965beea89a2aa4bafd7b1c5
BLAKE2b-256 46168f3aa816f52690aee755c1022ce4565ab9e8f34b2ccff629b8635062d61f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cmdop_skill-2026.4.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c8dfb2bccc36e140395ae17ff4d34a5bdc7240eea8bae28352c61d2e07b58042
MD5 128d7de69ab0c3601e9f177cf2614217
BLAKE2b-256 215e6cc238eb4841d6a721a0a9ef6622da55e6b974ca7921df6ab933e784834c

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