Candies and boxes
A candy installs one concern. A box is a container image composed from a list of
them. One declarative recipe, in one charly.yml.
Safety in OpenCharly lives at the boundary of a candybox — a rootless container, an isolated VM, an encrypted volume — never in a shrunken toolset. A walled room you can hand over completely beats an empty sandbox you keep narrowing. Inside the box, you and your agents get the entire toolset; the walls are what make that safe.
That single idea is why everything else looks the way it does.
Candies and boxes
A candy installs one concern. A box is a container image composed from a list of
them. One declarative recipe, in one charly.yml.
One recipe, many molds
The same recipe pours into an interactive shell, a managed pod, a Kubernetes cluster, a bootable VM, an Android device, or your own workstation.
Built for two tasters
The same charly surface serves you at the keyboard and your agents driving the line.
The binary is also an MCP server, so an agent reaches every verb over the same RPC.
The spec is the test
Every candy ships a runnable acceptance plan. What “working” means is written down and executed, not asserted — and you can read it on every candy’s page here.
charly is a production line with four stages, driven from one config and one mental model.
| You want to… | You get | Stage |
|---|---|---|
| compose a reproducible box from a candy list | a candy: with base:, charly box build |
Build |
| run one or more containers as a managed pod | kind: pod, charly bundle add, charly start |
Run |
| apply the same candies to a host, VM, cluster or phone | charly bundle add + a substrate kind |
Deploy |
| prove a config actually works, end to end | a disposable check bed, charly check run |
Evaluate |
charly onto your machine.cdp:? Look it up.