Keep asking.
You become the scheduler. Anything that changes between chats waits until you think to ask.
costs: your attention
Your assistant needs more than a chat
Caedos (said KAY-dos) is the OS your agent works on. Your agent installs synths that watch or react to the world — a page, an API, a feed, a database, an event — and then walks away. The synths keep running on Caedos. If nothing changes, they cost nothing. A model is only called when something truly needs reasoning. And nothing goes to your channels or APIs until you allow it.
caedos start · localhost:2233 · your keys, your machine
| name | pipe | status | leash | last ok | ticks | cost |
|---|---|---|---|---|---|---|
| hn-watcher | — | running | required | 2m ago | 48 | $0 |
| release-watcher | — | running | auto | 14m ago | 12 | $0 |
| health-sentinel | — | running | auto | 1m ago | 288 | $0 |
| page-watcher | — | running | required queued | 9m ago | 24 | $0.0021 |
| keyword-pulse | ↑ team.findings | running | auto | 22m ago | 12 | $0.0004 |
| relay-bridge | ↓ team.findings ↑ team.digest | running | auto | 22m ago | 3 | $0 |
| courier | ↓ content.draft | running | required | never | 0 | $0 |
You ask your assistant. It looks, it answers, and the moment the chat closes, the work stops. So every morning you ask again: did the upstream ship a release? Did the status page go red? Did anyone mention you on Hacker News?
The usual workarounds, and what each one costs:
You become the scheduler. Anything that changes between chats waits until you think to ask.
costs: your attention
It reads the same unchanged page every hour and tells you nothing happened.
costs: a model call per check
Give it a webhook and a loop and it acts on its own. The first you hear of a bad idea is from whoever received it.
costs: a send you never saw
The same checks, without the asking.
you › Keep an eye on Hacker News for new stories about "bun" and post them to my Slack webhook. ai › caedos_validate { synth: { name: "hn-bun", schedule_seconds: 1800 }, … } ← { "ok": true, "issues": [] } ai › caedos_shadow { … } ← { "mode": "live-sample", "outcome": "idle", "fast_path_triggered": false, "would_act": [], "would_remember": { "seen_titles": [ …20 titles ] }, "findings": [], "cost_usd": 0 } ai › First tick is a baseline: it read 20 titles and will remember them. Nothing was sent. ai › caedos_deploy { …, credentials: { WEBHOOK_URL: "••••" } } ← { "status": "running", "approval_mode": "required", "credentials_set": true, "note": "Leashed — side effects queue until the operator Allows in the control room." } ai › Running every 30 minutes. New stories will wait in your approval queue until you press Allow.
HOW A TICK WORKS
A tick is one run of a process. It starts whenever the trigger fires: on a schedule, when a webhook arrives, when a signal lands on the Relay, or when you press Run.
Every tick walks the same 6 phases. A deterministic gate in the middle decides whether a model is needed. If
nothing changed, no model is called: the tick costs nothing and leaves one line in the journal that says
idle.
Two ticks of the page watcher, an hour apart. Illustrative data.
13:00 nothing on the page changed
14:00 the page changed
Shadow runs one real tick with every action muted: what it read, what it would remember, what it would send.
caedos_shadow · POST /os/shadow
Processes that can touch the world deploy leashed. Outbound actions queue for one-tap approval until you Allow.
notify_webhook alert: New HN stories for your keyword · new_titles: ["Show HN: …"]
Illustrative data.
approval_mode: required
Deterministic checks are free. Model calls get a daily dollar budget, a hard cap, and a monthly estimate before you deploy.
budget_usd_per_day · limits · estimate
What caused it, what it saw, what it cost, what it did, which version ran. Replay any tick against an edited config.
Illustrative data.
trace · origin · mode · replay
Synths run as processes that publish and subscribe on the Relay. One watches, one decides, one sends, each with its own leash.
publish_signal · signal_subscribe
Repeated failures halt the process. Stalls get a bounded repair, proven before it's adopted. When Caedos gives up, you get an autopsy, not a red dot.
circuit breaker · repair · autopsy
MCP servers over HTTP or stdio, REST APIs, RSS, web pages, webhooks. Credentials stay in an encrypted vault and never appear in a trace.
mcp_source · mcp_action · rest_api · rss_read
One SQLite file on your machine, your own model key, and a workspace export any time (secrets excluded).
GET /export
name · pipe · status · leash · last ok · ticks · cost. Open a row for its journal, approvals, vault,
connections and spend. The Live Feed shows the fleet ticking. The Relay view shows
which processes talk to which.
Processes$0.0025 today
+ Install a Synth
Processes
| name | pipe | status | leash | last ok | ticks | cost |
|---|---|---|---|---|---|---|
| hn-watcher | — | running | required | 2m ago | 48 | $0 |
| release-watcher | — | running | auto | 14m ago | 12 | $0 |
| health-sentinel | — | running | auto | 1m ago | 288 | $0 |
| page-watcher | — | running | required | 9m ago | 24 | $0.0021 |
| keyword-pulse | ↑ team.findings | running | auto | 22m ago | 12 | $0.0004 |
| relay-bridge | ↓ team.findings ↑ team.digest | running | auto | 22m ago | 3 | $0 |
| courier | ↓ content.draft | running | required | never | 0 | $0 |
hn-watcher running
notify_webhook alert: New HN stories for your keyword · new_titles: ["Show HN: …"]
Look
9 blueprints ship with Caedos and are validated in CI. Clone one, shadow it, deploy it. Or ask your AI to.
Alerts the moment a price on a page changes.
no LLM
Tells you once when a status changes, and again when it recovers.
no LLM
New release on a repo you depend on.
no LLM
New Hacker News stories that mention your word.
no LLM
Only thinks when the page actually changed.
model on change
Three lines on what mattered, once a day.
1 call / day
Notices when chatter shifts, and says why.
model on changeRelay
Team glue: forwards findings to a digest topic.
no LLMRelay
Hands approved drafts to your n8n/Zapier webhook.
no LLMleashed
127.0.0.1 unless you say otherwise, and warns loudly if you do.WHERE IT FITS
Caedos is built for work that repeats: watch something, notice a change, maybe think, maybe send. Here's how it differs from the tools you might reach for first.
A model decides what to do next, every step of every run.
Your AI writes the synth once. A deterministic engine runs it the same way every time and asks a model only when something changed.
fast_path → reasoning only on change
You draw the workflow yourself, step by step, and it runs what you drew.
You describe the job and your AI writes the synth. Every send waits for your Allow.
Already on n8n or Zapier? The courier blueprint hands approved drafts to your webhook.
approval_mode: required
A model is called on every run, whether anything changed or not.
A check that finds nothing makes no model call and costs nothing. The model is asked only when something changed.
outcome: idle · cost: $0
Your script runs on a timer. Memory, budgets, approvals and logs are yours to build.
Memory, a budget, a leash, a trace for every tick and a control room come built in.
write_state · budget_usd_per_day · traces
No. There's no model deciding what to do next at runtime and no library to wire up. Your AI writes a synth, a small declarative program, once; Caedos runs it the same way every time.
No. Every tick runs a deterministic gate first. If nothing changed, the tick ends with no model call and no cost. A process only reasons on every tick if its config explicitly says triggered_by: always, like the daily brief does once a day.
The leash. Processes that can touch the world deploy with every outbound action held for your approval, with a summary of what they'd send. You can also shadow any synth first: a real run with actions muted.
In an encrypted vault in the local database (AES-256-GCM), with the key stored beside it. They're resolved only inside the step that uses them, and never written to traces, exports or public pages.
Caedos is free, for personal use and for work. Model calls are billed by your provider on your key, and only happen when something changed. Each process has a daily budget and an estimate before deploy.
It's pre-1.0 and single-user, and it's better you hear that here than find out later. The engine is well-tested, but 0.1.0 is the first release, and there's no sign-in and no hosted option yet. Use it for your own standing work first, and get in touch before you bet a business process on it.
Install it, open it, connect your AI. 5 minutes to your first running synth.
curl -fsSL https://caedos.com/install.sh | sh Windows, in PowerShell: irm https://caedos.com/install.ps1 | iex
Free for personal use and for work.