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

Uploaded Python 3

File details

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

File metadata

  • Download URL: cmdop_skill-2026.4.7.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.tar.gz
Algorithm Hash digest
SHA256 0e83ee371eb0375cda16057dd5e3d99792ef1edb8bbd0fc8bfe92a63e56165e5
MD5 476936ffd0649ee02dddb3d6b0b0b093
BLAKE2b-256 a109c003d146ce002007bad9928866353fdc4f55ff69090b4fbb4f496f869ba2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cmdop_skill-2026.4.7-py3-none-any.whl
  • Upload date:
  • Size: 73.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.18

File hashes

Hashes for cmdop_skill-2026.4.7-py3-none-any.whl
Algorithm Hash digest
SHA256 bea0e12097577f76d65f689424416e10028ec19b5d030133fcf22a2939a4bb59
MD5 83826a91b20c1f1c2a1861c49b0794d7
BLAKE2b-256 b027ed49efb9a92ce79d3209d78c8d363889672fffe8427efce5063f739051df

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