- a6c584d: Fixed stale skills warnings to only appear when synced skill files were still installed on disk, and updated
skills listto reflect actual install state instead of stale metadata.
- 1e58e47: Breaking: Renamed the global full-envelope flag from
--verboseto--full-output, allowing--verboseto be used as a normal command option.
- abfa8c7: Fixed Root CLIs created with
Cli.createandaliasesnot registering those aliases as command aliases when mounted viacli.command().
- 250e65f: Added command-level
aliasesoption for subcommands (e.g.aliases: ['extensions', 'ext']on anextensioncommand). - 26d7bf8: Fixed root fetch/command fallback bypassing "Did you mean?" suggestions when the input is a typo of a known command.
- 572c172: Replaced
@readme/openapi-parserwith a vendoreddereferenceimplementation, removing a heavy dependency tree.
- bfc3337: Replaced
@modelcontextprotocol/sdkwith@modelcontextprotocol/server(v2), reducing dependency count by 74 packages.
- d091bf7: Fixed stale
skills addCTA commands to use the invoked CLI name when running installed binaries directly, instead of falling back tonpx.
- ede37be: Fixed help output for boolean options so flags no longer showed
<boolean>placeholders or redundant(default: false)text, including aliased flags. - 96dfee4: Exported shell completion environment variables in bash and zsh hooks.
- 5c76b51: Fixed
skills addto list synced skills in alphabetical order.
- a65c865: Used command description as fallback in skill frontmatter for root commands and single-command groups.
- dad62c9: Fixed
skills listnot including root command skill.
- de70444: Added
enginesfield requiring Node.js >=22. - 3462433: Fixed
z.bigint(),z.coerce.bigint(),z.date(), andz.coerce.date()schemas failing during skill sync by representing them as{ type: "string" }in JSON Schema output.
- abd80e7: Fixed missing value errors for flags in
Fetch.parseArgv, short secret leaking inredact(), silentjsonlfallthrough inFormatter.format, invalid--format/--token-limit/--token-offsetvalues, lost descriptions when coercing OpenAPI param schemas, and hardcodedprocess.envinHelp.tsfor Deno compatibility. - 7dd398b: Added
skills listsubcommand that shows all skills a CLI defines with install status.
- 71a787a: Fixed root commands defined on
Cli.create()not being included in skill generation (--llms,skills add,.well-known/skills/).
- 0e0549f: Added
displayNameto the rootCli.create(..., { run })context type.
- b8370ac: Added
displayNameto the run and middleware context. Resolves the actual binary name fromprocess.argv[1]so user-facing messages reflect the alias used to invoke the CLI.
- 7833e33: Updated command suggestion ranking to use tiered scoring (prefix → contains → fuzzy) so match type outranks raw edit distance.
- d1404b8: Fixed optional properties being typed as required in typegen output.
- 8ee1af4: Fixed skill display names to use canonical slug from SKILL.md frontmatter instead of reconstructing from CLI name and subcommand.
- 69a48ce: Tweaked "Did you mean" output.
- 2f8194b: Added "Did you mean?" suggestions for mistyped commands using Levenshtein distance. Includes builtin commands (
mcp,skills,completions) in suggestion candidates. Suggestion CTA preserves original args/flags. Moved skills staleness warning from stderr into the CTA system.
- 9b2ab98: Updated help output
- 8952a65: Fixed built-in commands (
skills,mcp) showing root command errors when invoked without subcommand. Bareskills/mcpand--helpnow show their own help with available subcommands. Added built-in commands to shell completions. Fixed skill name sanitization for CLI names containing dots. - 05d89f3: Fixed
resolvePackageRootfailing withENOENTwhen running from a Bun compiled binary. - 64295d2: Added unified command execution across CLI, HTTP, and MCP transports.
- 83aa331: Tweaked help and CTA outputs.
- 8adbfbc: Tweaked help output
- d2ef65b: Added enum and union-of-literal values in help text instead of generic
<value>placeholder.
- 1f5a2df: Added support for count options via
.meta({ count: true })onz.number().default(0)schemas. Count flags behave like booleans (no value consumed), but increment on each occurrence, supporting both repeated flags (--verbose --verbose) and stacked aliases (-vvv).
- 9add1a0: Breaking: Renamed
--llmsto--llms-full. Added a new--llmsflag that outputs a compact command index (table of command signatures + descriptions) instead of the full manifest. This reduced token usage by ~95% for agents that already know the CLI and just need a quick reminder of available commands.
- a2610bc: Added
requires_binand fallback descriptions to generated skill frontmatter. - dd7a1af: Fixed
--no-globalresolvingcwdto the CLI's installation directory instead ofprocess.cwd().
- 9454412: Added
--token-count,--token-limit, and--token-offsetglobal options for token-aware output pagination. Uses LLM tokenization estimation (~96% accuracy viatokenx). In--verbosemode, truncated output includesmeta.nextOffsetfor programmatic pagination.
- 6ab9a33: Added
--filter-outputglobal option to filter output by key paths with support for dot notation and array slicing. - 2dc1b00: Added
--schemaglobal option to every command that returns its JSON Schema (args, env, options, output). - c60e6b8: Exposed
formatandformatExpliciton run and middleware context. - 0e52ec0: Added
cli.fetchto expose CLI as a standard Fetch API handler - f5b0133: Added optional exitCode to c.error() and IncurError, allowing CLI authors to control the process exit code. Defaults to 1 when omitted (backward compatible).
- 00b0b2d: Added Fetch API integration — mount any HTTP server as a CLI command.
- Fetch gateway:
.command('api', { fetch: app.fetch })translates argv into HTTP requests using curl-style flags (-X,-d,-H,--key valuequery params) - Streaming: NDJSON responses (
application/x-ndjson) are streamed incrementally - OpenAPI support:
.command('api', { fetch, openapi: spec })generates typed subcommands with args, options, and descriptions from an OpenAPI 3.x spec - Works with any framework exposing a Web Fetch API handler (Hono, Elysia, etc.)
- Fetch gateway:
- b73feaf: Added
aliasesoption toCli.createfor registering alternative binary names. Shell completions and help output include all aliases.
- e3aa038: Added dynamic shell completions for bash, zsh, fish, and nushell. CLIs get a built-in
completions <shell>command that outputs a hook script. The hook calls back into the binary at every tab press, so completions stay in sync with commands automatically. Supports subcommands,--options, short aliases, enum values, and space suppression for command groups. - 06580f0: Added short-alias stacking (e.g.
-abcparsed as-a -b -c). The last flag in a stack can consume a value; all preceding flags must be boolean.
- 5122c9b: Fixed help formatter using
process.envinstead of env source override for "set:" display
- 3f7ca73: Added leading
#to CTA command descriptions for easier copy-paste. - 3f7ca73: Moved environment variables section to bottom of help output.
- 3f7ca73: Fixed invalid subcommand in a group falling through to root handler instead of returning
COMMAND_NOT_FOUND. Added CTA with copyable help command toCOMMAND_NOT_FOUNDerrors. - 50282a8: Added redacted current value indicator for environment variables in help output.
- 79fbabd: Fixed streaming handler ignoring CLI-level and command-level default
format. Previously,handleStreamingused onlyformatExplicitto decide between incremental and buffered mode, causing CLI defaults like{ format: 'json' }to be ignored in favor of hardcoded'toon'.
- aa32795: Added
versionto the command run context (c.version).
- a61c474: Added help output in human mode for root command with args when no args provided
- 77f5c98: Added deprecated option support via Zod's
.meta({ deprecated: true }). Deprecated flags show[deprecated]in help output,**Deprecated.**in skill docs,deprecated: truein JSON Schema, and emit stderr warnings in TTY mode.
- e7564a0: Added
c.error()to middleware context for structured error short-circuiting. Middleware can now returnc.error({ code, message })instead of throwing, producing a proper error envelope with optional CTAs.
- 1a671e9: Added
nameto run and middleware context (c.name) — returns the CLI name passed toCli.create().
- eec5906: Added
c.envto middleware context. CLI-levelenvschema defined onCli.create()is now parsed before middleware runs and available as typedc.envin both.use()and per-commandmiddleware: [...]handlers. This enables initializing shared dependencies (API clients, auth tokens) in middleware using validated environment variables instead of readingprocess.envdirectly.
- 2c60110: - Added middleware support via
cli.use().- Added typed dependency injection via
vars: declare a Zod schema oncreate()(and optionally set defaults), set values withc.set()in middleware, read them viac.varin handlers.
- Added typed dependency injection via
- ba07f0b: Added per-command middleware via
middlewareproperty on command definitions. Addedmiddleware()helper for creating strictly typed middleware handlers withmiddleware<typeof cli.vars>(...). Addedcli.varsproperty to expose the vars schema for use withtypeof.
- 6642c48: Added
agentboolean to theruncontext.truewhen stdout is not a TTY (piped/agent consumer),falsewhen running in a terminal. Use it to tailor command behavior for agents vs humans. - 6642c48: Added
outputPolicyoption to commands, groups, and root CLIs. SetoutputPolicy: 'agent-only'to suppress data output in human/TTY mode while still returning structured data to agents. Defaults to'all'. Inherited from parent groups — children can override.
- b334523: Added automatic cleanup of stale skills when commands are removed or depth changes. Fixed broken symlinks not being removed on Node v24.
- 9bb41e3: Fixed
--depth=Nequals syntax not being parsed inskills add. Fixeddepth=0producing a root SKILL.md without a subdirectory wrapper.
- 0e42bc0: Added native skill installation.
- dfd804c: Added ability for a root command to have both a
runhandler and subcommands. Subcommands take precedence — unmatched tokens fall back to the root handler.--helpshows both root command usage and the subcommand list.
- 370d039: Fixed commands returning
undefinedbeing serialized as the literal string"undefined"in output. Void commands now produce no output in human and machine modes. MCP tool calls with undefined results now return valid JSON (null) instead of broken output.
- 09e4d76: Initial release.
- 9c7f8aa: Updated SKILL.md
- 3d38f2d: Added usage info at end of description frontmatter in skills.
- 1318c14: Initial release