Anything is a step
An action is an executable in any language. It reads its values as environment variables, prints JSON, and its exit code says how it went: done, not yet, or broken.
Chain scripts, CLI tools, containers, APIs, message queues, any programming language, AI agents and models: anything that runs becomes a step in your workflows. You write the chain in a small JSON file, by hand or with AI; itero (Latin: “I repeat”) runs it when something happens or on a schedule, with waiting, retries, guards, undo and a record of every run.
Something to keep an eye on: a site, a local server, a backup. Every
minute itero asks it; when it does not answer, you get a notification
saying why. An action, actions/check-site:
#!/bin/shcurl -fs --max-time 10 -o /dev/null "$url" || { echo "$url is down" >&2; exit 1; }and a workflow, workflows/beacon.json:
{ "on": [{ "schedule": "* * * * *" }], "steps": [{ "#check-site": { "url": "http://localhost:3000" } }], "error": [{ "#notify": { "title": "beacon", "text": "$why" } }] }With {} in an itero.config.json beside them, itero daemon runs it. The
beacon example
goes further: many sites and the disk’s free space, told only when
something changes.
A model is one more program to chain, used only where judgment is needed:
{ "on": [{ "event": "mail.received" }], "steps": [ { "#ai": { "ask": "Summarize this mail in one line, and rate it: important, normal or spam." } }, { "#notify": { "on": [{ "$rating": "important" }], "title": "$from", "text": "$summary" } } ]}A mail arrives; #ai, a few lines of shell around curl, asks a model to
read and rate it, and prints {"summary": "...", "rating": "important"}
into the run’s state. The rating decides the rest: you hear only about
the important mails, and the spam and the ads pass quietly.
Anything is a step
An action is an executable in any language. It reads its values as environment variables, prints JSON, and its exit code says how it went: done, not yet, or broken.
Plain files in git
Nothing lost, everything iterated: workflows and actions are plain files you keep in git, share as folders and improve. A run keeps the version it started with.
Runs on its own
Messages, schedules and watched files start runs. A step can wait for a message that comes later; a lost step runs again; a broken one is undone.
A record of everything
Every message and answer is in a SQLite journal, every step in a JSON
log. itero runs tells a run’s story, step by step.