Repository navigation
Releases: wankdanker/clyops
Release list
clyops 0.4.0
Web runner and shared schema
- Static SvelteKit web runner served by clyops-api at
/ui/, with typed forms,
explicit inheritance/overrides, JSON editing, non-secret templates, stdin and
uploads, jobs/cancellation, destructive confirmation and authenticated downloads. - Browser-compatible clyops-schema package shared by REST/MCP conversion, the web
runner and desktop JSON editor. Desktop scalar/array controls use shared numeric
ranges and choice lists. Browser integration checks exercise real tool execution. - Web runner stdout and stderr render ANSI colors and styles, with a plain-text
toggle and original-byte downloads. - The API CLI exits with an actionable error on occupied ports instead of
incorrectly announcing that it is serving; successful startup lists the full UI URL.
Documentation and project website
- Documentation builds use the configured GitHub Pages URL's base path,
supporting custom domains at the root without broken assets or navigation. - Project homepage with static terminal playback across Python, Bash, TypeScript
and Rust, demonstrating generated help, validation, schema, MCP and HTTP.
Includes playback controls, reduced-motion support and a runnable walkthrough;
demo output is captured and verified during the documentation build. - Per-language Markdown guides, runnable examples and complete generated API
references in an Eleventy documentation site. CI checks public documentation,
installed-consumer typing, examples and links; Pages deployment preserves
immutable documentation snapshots for future releases. - Expanded editor documentation, typed Python value mappings, and packaged Ruby
RBS signatures. Java builds and releases include source and Javadoc JARs.
Downloads
| clyops runner | Linux: .deb, .rpm or .AppImage (x64 amd64/x86_64, arm64 arm64/aarch64) · macOS: _universal.dmg · Windows: _x64-setup.exe or _x64_en-US.msi |
| clyops-dispatch | clyops-dispatch-<version>-<platform>.tar.gz (Linux x64/arm64, macOS universal) or -windows-x64.zip |
| C | libclyops-<version>-<platform>.tar.gz (static library + header) or -src.tar.gz |
| Bash | clyops.sh |
| JavaScript / TypeScript | clyops-<version>.tgz (pnpm add ./clyops-<version>.tgz) |
| Python | clyops-<version>-py3-none-any.whl or the sdist |
| Rust | clyops-<version>.crate |
| Ruby | clyops-<version>.gem (gem install ./clyops-<version>.gem) |
| Java | clyops-<version>.jar |
| Go | go get github.com/wankdanker/clyops/packages/go@v<version> |
SHA256SUMS lists a checksum for every file.
The runner installers are not signed with a paid certificate yet. On macOS, right-click the app
and choose Open the first time (or run xattr -dr com.apple.quarantine "/Applications/clyops-runner.app").
On Windows, choose More info → Run anyway in the SmartScreen prompt.
clyops 0.3.0
Safer tool discovery and execution
- Source detection in clyops-dispatch, clyops-tools and the desktop runner now
recognizes supported clyops import/source statements and an explicit
# clyops-tool/// clyops-toolmarker in the first ten lines. Comments,
quoted documentation and incidental mentions no longer cause arbitrary
executables to be probed. Wrappers with other loaders can use the marker to
opt in. (#7) - stdin failures reject the Node execution promise and clean up the tool
instead of crashing the host process. (#9) - Timeouts and cancellation terminate tool process trees, escalate when
graceful termination fails, and clean up stdin/stdout streams. Timeout limits
also apply when a tool stops reading a large stdin payload. (#12)
Arguments, flags and desktop forms
- Generated command lines put positionals first by default, supporting
wrappers that read their input from$1. Dash-prefixed positionals follow
the options and--; other values no longer get an unnecessary terminator.
toArgvcallers can choose either order, jobs exposepositionals_order,
and API/MCP servers expose--positionals-order. (#8) - Flag inputs are rendered before validation, so job templates can supply
booleans. Accepted values aretrue/false,yes/no,1/0and
on/off(case insensitive); invalid values produce an input error instead
of silently disabling the flag. (#10) - Desktop forms emit
--no-flagfor unchecked flags, overriding enabled
environment/config defaults. Template restoration preserves false and zero
values, and generated commands correctly quote shell values. (#11)
Node packages and development
-
pnpm workspaces for all Node packages and the desktop frontend, pinned to
pnpm 10.34.6 with one root lockfile. Development, CI, release packing and
publishing use pnpm; version bumps update workspace dependency pins in the
lockfile. The runner has its own build/test commands and CI coverage. -
Single-file CommonJS bundles of the Node packages, committed and published:
clyops.cjs,
clyops-tools.cjsandclyops-jobs.cjs(which includes clyops-tools). Link or copy one file and
require()it on Node 20+, with no build step ornode_modules, the wayclyops.shis used.
require('clyops-tools')andrequire('clyops-jobs')now load them (both were ESM-only). CI
checks they match the sources, andclyops.cjsruns the conformance suite (cjs-bundle). -
Reload tests check schema reuse and invalidation without relying on macOS
filesystem event timing; dispatcher code passes the newer Clippy byte-slice
lint used by CI.
Downloads
| clyops runner | Linux: .deb, .rpm or .AppImage (x64 amd64/x86_64, arm64 arm64/aarch64) · macOS: _universal.dmg · Windows: _x64-setup.exe or _x64_en-US.msi |
| clyops-dispatch | clyops-dispatch-<version>-<platform>.tar.gz (Linux x64/arm64, macOS universal) or -windows-x64.zip |
| C | libclyops-<version>-<platform>.tar.gz (static library + header) or -src.tar.gz |
| Bash | clyops.sh |
| JavaScript / TypeScript | clyops-<version>.tgz (pnpm add ./clyops-<version>.tgz) |
| Python | clyops-<version>-py3-none-any.whl or the sdist |
| Rust | clyops-<version>.crate |
| Ruby | clyops-<version>.gem (gem install ./clyops-<version>.gem) |
| Java | clyops-<version>.jar |
| Go | go get github.com/wankdanker/clyops/packages/go@v<version> |
SHA256SUMS lists a checksum for every file.
The runner installers are not signed with a paid certificate yet. On macOS, right-click the app
and choose Open the first time (or run xattr -dr com.apple.quarantine "/Applications/clyops-runner.app").
On Windows, choose More info → Run anyway in the SmartScreen prompt.
clyops 0.2.0
Commands, relationships, secrets, effects and I/O
New in the spec and all nine implementations, each checked by the conformance suite (now 136
cases, with a second demo program, tasks, for commands):
- Commands (spec §1.7): nested subcommands in one program
(mytool db migrate --to 3), each with its own options, arguments, help, schema and completion,
sharing the program's options and config file. Shell completion follows the command words,
directly and through clyops-dispatch. (#5) - Option relationships (§1.6):
exclusive,
requiresandoneOf, checked after config and environment, annotated in help and listed in
the schema'sconstraints. (#4) - Secret options (§1.5): the
secret/secret:RULErule
masks a value in help (config: ***) and invaluesJson(), and marks it"secret": truein
the schema. (#3) - Effects (§1.3):
read-only,idempotent,destructiveand
network, in the schema'seffects. (#1) - stdin and stdout: declared with a description and a MIME type, shown in help as
Input:/Output:and in the schema. (#6)
The schema stays clyops: 1; the new fields (effects, constraints, stdin, stdout,
commands, and secret on options) are additive.
Serving tools safely and with streams
- clyops-tools: a program's commands become tools of their own; tool filters (allow/deny
globs, read-only) also read from the root.clyopsfile; secrets are passed in the environment
and shown as***; path inputs can be confined to directories;run/starttake stdin, keep
binary stdout or stream it, and cap output; an audit log writer. - clyops-api: a non-JSON body streams to the tool's stdin with the input in the query string;
multipart takes args, stdin and file uploads for path inputs; declared binary stdout streams back
as the response with the exit status in HTTP trailers; async jobs spool input and serve binary
output at/jobs/<id>/stdout; named keys with per-key scopes (--keys),--allow/--deny,
--read-only,--paths-within,--max-body,--max-outputand--audit; effects in OpenAPI
asx-clyops-effects. (#2, #6) - clyops-mcp: effects become MCP tool annotations; a
stdinargument for tools that read
stdin; image, audio and blob results for binary stdout; the same security options as the API.
(#1, #2, #6) - clyops-jobs: functions take
stdinandstdoutfile templates (stdout counts as an
artifact); commands in logs show secrets as***;JobQueueonDrop. - clyops runner: a form per command, password fields for secrets (never saved in templates),
effect badges and a confirmation for destructive tools, relationship warnings, and stdin and
"save output to" fields. - clyops-dispatch accepts the
allow/denykeys in.clyopsfiles.
New languages
Three more implementations with the same one-line registration, each passing the full
conformance suite (now run against nine implementations) and the real-shell completion tests:
- Go (
packages/go): standard library only, Go 1.21+. Released as the Go module
github.com/wankdanker/clyops/packages/go, taggedpackages/go/vX.Y.Zwith each release. - Ruby (
packages/ruby, gemclyops): standard library only, Ruby 3.1+. - Java (
packages/java, Mavenio.github.wankdanker:clyops): no dependencies, Java 17+.
Running tools from Node, over HTTP and for AI agents
- clyops-tools (npm): discover a directory of tools, load their schemas, map JSON input onto
a command line (spec §13), give the JSON Schema of that
input, and run them. - clyops-jobs (npm): a job engine for clyops tools: config-bound functions with templated
options, artifacts, job records and an in-memory queue. - clyops-api (npm): serve a directory of tools as an HTTP API, with an endpoint per tool,
request validation and an OpenAPI document from each tool's schema, and async jobs. - clyops-mcp (npm): a directory of tools as MCP tools for AI agents, over stdio
(clyops-mcp --root DIR) or streamable HTTP; clyops-api also serves it at/mcp. - Hot reload: clyops-api and clyops-mcp follow the tools directory as tools are added, changed
or removed;--no-watchturns it off.
Other changes
- The JavaScript packages form one npm workspace at the repository root, and all need Node 20+
(Node 18 is end-of-life). tools/version.pyuses clyops for its own command line and also keeps the Rust package's
Cargo.lockin step.
Downloads
| clyops runner | Linux: .deb, .rpm or .AppImage (x64 amd64/x86_64, arm64 arm64/aarch64) · macOS: _universal.dmg · Windows: _x64-setup.exe or _x64_en-US.msi |
| clyops-dispatch | clyops-dispatch-<version>-<platform>.tar.gz (Linux x64/arm64, macOS universal) or -windows-x64.zip |
| C | libclyops-<version>-<platform>.tar.gz (static library + header) or -src.tar.gz |
| Bash | clyops.sh |
| JavaScript / TypeScript | clyops-<version>.tgz (npm install ./clyops-<version>.tgz) |
| Python | clyops-<version>-py3-none-any.whl or the sdist |
| Rust | clyops-<version>.crate |
| Ruby | clyops-<version>.gem (gem install ./clyops-<version>.gem) |
| Java | clyops-<version>.jar |
| Go | go get github.com/wankdanker/clyops/packages/go@v<version> |
SHA256SUMS lists a checksum for every file.
The runner installers are not signed with a paid certificate yet. On macOS, right-click the app
and choose Open the first time (or run xattr -dr com.apple.quarantine "/Applications/clyops-runner.app").
On Windows, choose More info → Run anyway in the SmartScreen prompt.
clyops 0.1.0
First release.
Libraries
One-line-per-option CLI parsing with the same behavior in Bash, JavaScript, TypeScript, Python,
Rust and C, defined by spec/SPEC.md and checked by a shared conformance suite
of 103 cases:
- Parsing of long, short, clustered,
--no-and repeatable options, optional and variadic
positionals, and--. - Precedence: command line > config file (
prefix:key=value,@include) > environment > default. - 22 validation rules with typed values, and path resolution relative to wherever a value came from.
- Generated
--help,--help-json-schema(formal schema in spec/schema.json)
and--bash-completiondata. --completion bash|zsh|fishprints a completion script for the program, tested in real shells.- Logging helpers
info,warn,error,successanddie.
clyops-dispatch
A native binary that turns a directory of tools into one command: executables become
subcommands, folders become nested groups, with help listing each level's commands and their
descriptions, and bash/zsh/fish completion through every level into each command's own options.
Defined by a small shebang file, or by a shell alias such as
alias mytool='clyops-dispatch --root ~/mytool/scripts --name mytool'.
clyops runner
A desktop app that lists the clyops tools in a directory, builds a form for each from its schema,
runs them and streams their output.
Downloads
| clyops runner | Linux: .deb, .rpm or .AppImage (x64 amd64/x86_64, arm64 arm64/aarch64) · macOS: _universal.dmg · Windows: _x64-setup.exe or _x64_en-US.msi |
| clyops-dispatch | clyops-dispatch-<version>-<platform>.tar.gz (Linux x64/arm64, macOS universal) or -windows-x64.zip |
| C | libclyops-<version>-<platform>.tar.gz (static library + header) or -src.tar.gz |
| Bash | clyops.sh |
| JavaScript / TypeScript | clyops-<version>.tgz (npm install ./clyops-<version>.tgz) |
| Python | clyops-<version>-py3-none-any.whl or the sdist |
| Rust | clyops-<version>.crate |
SHA256SUMS lists a checksum for every file.
The runner installers are not signed with a paid certificate yet. On macOS, right-click the app
and choose Open the first time (or run xattr -dr com.apple.quarantine "/Applications/clyops-runner.app").
On Windows, choose More info → Run anyway in the SmartScreen prompt.