Stay in your flow.
Parsing, validation, generated help and shell completion. Turn a directory of tools into one command with the dispatcher.
$ ops plan --env stagingExplore the dispatcher THE CLI IS JUST THE BEGINNING
Define your CLI once.
Use it from terminals, desktop forms,
HTTP, and AI agents.
Your language. Your scripts. One consistent contract.
clyops makes the tools you write accessible wherever work happens.
$EDITOR scripts/plan.py#!/usr/bin/env python3
import json
from clyops import Cli
cli = Cli(name="plan")
cli.set_description("Build a deployment plan. Change nothing.")
cli.opt("SERVICE", "service", "s", "api", "Service", rule="choice:api,worker")
cli.opt("ENV", "env", "e", "staging", "Environment", rule="choice:staging,production")
cli.opt("REPLICAS", "replicas", "r", "2", "Replica count", rule="int:1-10")
cli.set_effects("read-only")
cli.set_stdout("Deployment plan", "application/json")
args = cli.run()
print(json.dumps({"service": args.SERVICE, "env": args.ENV, "replicas": args.REPLICAS}))
Register options, validation and effects beside your code.
Real tool output. Agent dialogue illustrated. Schema and HTTP views abbreviated. Read or run the demo →
01 / ONE SOURCE OF TRUTH
Register an option once. Its type, default, validation and description travel with the tool. Help text, generated forms and agent inputs all start with the same contract.
--help-json-schemaoptions · types · validation
effects · secrets · stdin / stdout02 / MEET YOUR TOOLS WHERE YOU WORK
Parsing, validation, generated help and shell completion. Turn a directory of tools into one command with the dispatcher.
$ ops plan --env stagingExplore the dispatcher The desktop runner builds forms from the schema, streams output and handles secrets, templates and declared effects.
Meet the desktop runnerServe a tool directory with JSON input, OpenAPI, streamed I/O and optional jobs. Keep the execution logic in your tool.
POST /tools/planBuild an HTTP API MCP exposes each tool with typed inputs and effect annotations. Validate arguments before the tool runs.
plan({ env: "staging" })Connect an MCP client 03 / START SMALL
Pick your language. Register a few options.
Let the same interface do more of the work.
Shared specification. Shared conformance suite.
Every language is checked against the same behavior contract.
Read the specification