Automations | Claritty docs

Automations

An automation is a job that runs without you: it reads from your tools, decides what to do, and writes back. You get one by doing the task once while Claritty watches, or by describing it. Nothing it writes goes out until you have seen it.

The path from a task to a live automation

record or describequestionsbuilddry runyou approvelive

Every automation goes through this once. The two ends are the interesting parts. The start is how Claritty learns the task, and the dry run is the gate that keeps a first run from mailing forty people.

Two ways to start

Record it

Install the Chrome extension and do the task once, in the real tools, at normal speed. Claritty records the pages you opened, the fields you read, and the actions you took, then works backwards to the rule you were following. Recording is the better option when the task lives in a web app whose data you cannot easily describe, like an internal admin page or a billing console.

The recorder is data-blind. It reads a field’s label, not what is in it, and the extension masks input values in the browser. Text it has to scrape to make sense of the page, the page title, a row’s heading, and anything you narrate yourself, can carry real records, so that is redacted when the capture is received and before any of it reaches a model. The redaction is destructive: nothing downstream needs the original.

Describe it

Type what you do in plain words. This works when the task is mostly about services Claritty already connects, for example “every weekday at 9, find invoices more than 30 days overdue in QuickBooks and email each vendor a reminder”.

Either way Claritty asks a short set of clarifying questions before it builds anything. They are the questions whose answers change the automation: which account, how far back to look, what counts as done. Answer them in your own words.

Nothing writes until you approve it

The first time an automation runs it runs dry. It does all the reading and all the deciding, and then stops and holds every write it wanted to make. You see the actual email, the actual Slack message, the actual row, and you approve, reject, or ask for changes in a sentence.

  1. 1
    Approve, and the held writes go out as they are.
  2. 2
    Reject, and nothing is sent. The run is closed.
  3. 3
    Request changes, and you say what was wrong in your own words. The automation is revised and dry-run again.
Any automation that writes has asking turned on, and Claritty turns it back on by itself if an automation gains a write later. You can switch it off for one you trust, and then it commits on its own.

Approvals can also come to Slack, so the person who signs off does not need to be the person who built it. The approval message names the tool in plain words, so a reviewer sees “Publish a LinkedIn post” rather than linkedin.create_post.

What sets it off

An automation has three ways to start, and all three are set up from its page.

TriggerUse it whenWhat you get
ScheduleThe task happens on a cadence.Once, daily, weekly, monthly or on an interval, in your timezone.
WebhookAnother system should start it.A URL to POST to, and signed requests if you turn them on.
MCPYou want to run it from an AI client or an agent.A key scoped to automations:read and automations:run. Approving is a separate scope, automations:approve, and is never granted by default.
An automation with no trigger never runs, and this used to be silent. Its page now says so. If the schedule row is empty and no webhook or MCP key exists, nothing is going to start it.

Doing something to every row

A step can fan out over a list from an earlier step. This is how “find the overdue invoices and email each vendor” becomes one automation instead of one per vendor.

intelligence.yaml
steps:
  - id: n1
    tool: vision.read
    mode: read
    input: { url: "https://billing.example/invoices?status=overdue" }

  - id: n2
    tool: gmail.send
    mode: write
    forEach: "${steps.n1.output.items}"
    as: invoice
    maxIterations: 50
    input:
      to: "${invoice.vendorEmail}"
      subject: "Overdue invoice"

forEach must be a reference to a list, written ${steps.n1.output.items}. A bare word is rejected when the manifest loads rather than quietly looping once.

maxIterations defaults to 50 and caps at 1000. A list longer than the cap is truncated, and the run reports the truncation. Read that line: a shortened loop otherwise looks like a run that finished.

Runs, receipts and cost

Every run keeps a record of what it read, what it decided, and what it wrote, with the model cost for that run. Per-run cost is usually well under a cent, so it is shown to four decimal places rather than rounded to $0.00.

The hours-saved figure on the automations page counts successful runs only. A run that failed did not save anyone any time, and counting it would make the number worth less than nothing.

What stops one going live

You seeWhat it means
Missing accountsThe automation needs a service you have not connected. It will not be scheduled until you connect it, rather than being scheduled and failing every morning.
Nothing starts this automationIt has no schedule, no webhook and no MCP key. Add one from its page.
A run stuck on unknownClaritty waits up to 55 seconds for a result while a run may take up to 5 minutes. Unknown means it stopped watching, not that the run failed. The page reconciles when the run reports in.

Changing one that already exists

Open the automation and say what should be different. Claritty rebuilds it and dry-runs the new version, so a change goes through the same gate as the first build. Deactivating an automation stops its scheduled work and keeps its history. Deleting removes it and its recording.