Skip to content

The charly CLI

charly is one binary with a large command surface, and almost none of it is in the binary’s own source. Understanding that split makes the CLI reference easier to read.

Three top-level words are the core spine, implemented by the binary itself:

Word What it is
charly box the build/authoring parent — its subcommands are plugin-served
charly version the CalVer identity of the running binary
charly reap-orphans internal cleanup of orphaned resources

Everything else — bundle, check, secrets, candy, alias, agent, clean, status, shell, vm, config and the rest — is a command word served by a plugin candy. Each has a page in the CLI reference naming the plugin that serves it and whether that plugin is compiled into the binary or loaded at runtime.

Some plugin-served words nest under a parent: add-candy, generate, list, new, pkg, validate and friends are children of charly box. The nesting is expressed in the plugin’s Go code rather than its manifest, so the reference pages name the word and its owner without asserting where it sits — run charly box --help for the live tree.

The generated pages here describe what serves a word and why. For the exact flags of a given invocation, ask the binary:

Terminal window
charly bundle add --help
charly box build --help

The same binary is an MCP server, so every verb is reachable over RPC:

Terminal window
charly mcp serve

An agent authoring a candy uses the same commands you would — charly candy set, charly candy add-rpm, charly box write — with comments and key order preserved across edits.