ashlar-cli
The standard verbs of an app's command-line tool (<tool>, the name given to Cli::new), so every app is scriptable the same way:
<tool> commands [--json] [--query Q] list commands
<tool> describe <id> one command in full (parameter schema)
<tool> exec <id> [json|-] run one command
<tool> run <file.jsonl|-> [--keep-going] run {"command","params"} lines
<tool> mcp [--isolate] [--per-command] MCP server on stdio
<tool> serve control protocol on stdio (worker for `mcp --isolate`)
<tool> version [--json]
--connect PORT (on commands, describe, exec, run, mcp) drives the running app through
its control port instead of a fresh headless session. Replies are one line,
{"ok":true,"result":…} / {"ok":false,"error":"…"}; exit codes 0 ok, 1 failed, 2 usage.
Argument parsing is a tiny built-in parser (Args: flags, --opt v/--opt=v, positionals, --),
also handed to app verbs. Tests: tests/cli.rs.