CYCLS_API_KEY, and Docker if you want to run locally.
1. The smallest app
api.py
2. Add sign-in
api.auth is a FastAPI dependency. A request without a valid token gets 401.
Any OIDC provider works with cycls.JWT(jwks_url=...). See
Authentication.
3. Add per-user storage
Storage needs a volume at/workspace.
api.workspace resolves the authenticated user’s own scope, so no route needs to
filter by user id. Two users calling GET /notes see different data.
4. Bundle a front end
Put the HTML beside the Python file and copy it into the image.Authorization: Bearer <token>.
5. Search with an inverted index
cycls.DB has no query language, so build the index you need. Prefix scans are
the primitive.
6. Run untrusted commands
cycls.Sandbox wraps bubblewrap with a read-only root, a cleared environment,
and no network unless you enable it.
7. Deploy
App or agent
An agent is an app, so you can add routes to an agent with
@my_agent.server.api_route(...) instead of deploying two services.
Next
Batch jobs
Fan work across instances with map.