Quickstart Guides
Get started in Python, TypeScript, Rust, Spring Boot, or via MCP for Claude / Cursor / Windsurf. Deploy the full stack with Docker in under 5 minutes.
Get started
Stop runaway agent spend and risky actions before they execute.
Self-hosted, no prompt storage. Apache 2.0.
Cost runaway
Same agent. Same bug.
Without Cycles: ~$10 in 12s — the pace behind $4,200 incidents.
With Cycles: $1 cap, before the next action ran.
reserve → deny → no downstream call
Run the runaway demo →Blast radius
Same workflow. Different boundary.
Without Cycles: All four actions execute — including the customer email.
With Cycles: Internal actions proceed; the email is blocked before it sends.
decide → DENY → no email send
Run the action-authority demo →14,799+ package installs·75,708 repo clones
Your agent spent $4,200 while you slept.
It hit an ambiguous error, retried with expanding context, and looped 240 times. Provider caps fired the next morning — blocking every agent on the account.
Cap it at $15 per run. →200 emails. $1.40 in tokens. $50K in damage.
A prompt regression turned welcome emails into collections notices. The agent stayed within its token budget the entire time. No spending limit would have caught it.
Gate actions, not just spend. →One customer's runaway just blocked your other 500.
Customer #47 triggered a research loop. Their session burned through the shared API budget. The provider cap fired and blocked every tenant on the platform.
Isolate every customer. →Auditor asks: prove the agent was under control.
Dashboards show what happened after the fact. They don't show the pre-execution decision, scope, denial, commit, and authority trail.
Show enforcement evidence. →Budget, risk, and action authority across your AI stack.
@cycles reserves budget before the action runs. No remaining cycles — no action.
from runcycles import cycles
@cycles(estimate=5000, action_kind="llm.completion", action_name="openai:gpt-4o")
def ask(prompt: str) -> str:
return openai.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}]
).choices[0].message.contentRun the local demo
~5 min
docker compose up. No API keys. See $10→$1 budget enforcement in 30 seconds.
Start →Wrap one LLM call
~10 min
One @cycles decorator (Python) or withCycles wrapper (TS) on a single function.
Start →Wrap one tool call
~30 min
Cap what agents can do (email, deploy, mutation), not just what they spend.
Start →Shadow mode
1+ day
Enforce in dry-run against real traffic. Calibrate budgets without blocking.
Start →Hard enforcement
Production
Flip one workflow to live enforcement. Expand from there.
Start →Most teams reach out for one of four reasons — they all land in the same inbox, and a founder reads every one.
Running a real agent workload and evaluating Cycles? Apply to become a design partner →
Found a bug or have a concrete technical issue? Open a GitHub issue instead — it’s faster for everyone.