1. Three layers
Each layer extends the one below it, so anything a Function can do an App can do, and anything an App can do an Agent can do.2. Four builders
Configuration lives in fluent, immutable builders. Every method returns a new object, so one base config can be branched safely.cycls.Image
.pip() .apt() .copy() .run() .rebuild()cycls.Web
.auth() .title() .brand() .analytics() .workspaces()cycls.LLM
.model() .system() .tools() .allowed_tools() .price()cycls.Volume
.read_only() .sub_path()3. Three verbs
The same three words work in Python and on the command line.f.remote() is the development loop. cycls.remote("name") calls what was
deployed, from any machine that has your API key. Read
Local and remote builds for what happens in each case.
4. Code travels as a pickle
Your function is serialized with cloudpickle, including closures and captured variables, then executed inside a container built from yourImage. Two rules
follow, and both are enforced for you:
- The container’s Python matches your host’s major and minor version.
- The container’s cloudpickle matches your host’s exact version.
State lives on volumes
Containers are stateless. Anything that must survive a redeploy goes on a volume, which is named storage attached at a mount path./workspace, so the decorator
requires a volume there:
Images are content addressed
Cycls hashes the image declaration, including the contents of copied files, into a deterministic Docker tag. Identical inputs reuse the cached build everywhere. Change one package and only that layer rebuilds.Next steps
Agents
The managed loop, the context object and the event stream.
Functions
Run, remote, map, deploy and schedule.