The durable agent for paid media.

Human-near-the-loop workflow for performance marketing.

noro · acme live
  1. you Why did Meta CPA jump this week?
  2. pi agent("acme/on-call") durable · checkpointed
  3. tool pull("meta", account="acme", range="last_7d") 1,284 rows
  4. tool compute_facts() 38 facts f7 cpa = spend ÷ conversions $61.03f9 cpa_change = f7 vs f8 +38%
  5. jev classify(f1…f38) 29 signal · 6 noise · 3 luck
  6. llm draft(fact_ids_only) “CPA up {{f9}} to {{f7}} on PR-03 and PR-07.”
  7. noro verify(rules=100) 8 traced · 1 flag
  8. panel review() notes applied
Ready for your review Acme · Meta

CPA up 38%f9 to $61f7 on PR-03 and PR-07.

Frequency rose to 4.1f12 from 2.3f11, so the audience is likely saturated. Proposed: swap creative next week.

8 numbers traced · 1 flag for you
waiting for your review @earendil-works/pi-durable · typesafe/jev-1.13 · openrouter

01Proactive

Triggered by events, not prompts.

Ad accounts don’t wait for you to ask. JEV reads every event from your accounts for pennies. When something moves, it wakes a durable agent on Pi Durable. The agent works the problem the way you would, then waits for you.

  1. 01 Detect
  2. 02 Investigate
  3. 03 Root cause
  4. 04 Draft
  5. 05 Verify every number
  6. 06 Panel review
  7. 07 Your review
  8. 08 Send

What wakes it

  • CPA jumps
  • Spend spikes
  • Tracking breaks
  • Budget pacing drifts
  • Monday’s weekly report
  • Month-end report

The most valuable agent is the one that doesn’t need you to start it.

02Durable

Close the laptop. It keeps going.

  • Survives anything

    Close the laptop, kill the process, restart the machine. The agent comes back from its last checkpoint.

  • Reports run in phases

    Weekly and monthly reports are durable tasks. If one phase fails, only that phase reruns.

  • Sends once

    Approve a report and it goes out one time. A retry never sends it twice.

  • Shared state

    Every agent on your accounts reads the same state, so every report uses the same numbers.

03Durable network

Device, workspace, agent. One durable network.

Agents run on devices you own, detached from any screen. Each ad account is a workspace with one shared state, so every agent in it uses the same numbers. Connect from any client, alone or with your team.

Clients
  • Browser
  • Phone
  • Slack
  • Terminal
  • API
pi durable network 4 running2 waiting for you5 listening
  1. Device Mac mini office
    • Workspace acme shared state
      • on-call waiting for you
      • weekly report running
      • ask listening
    • Workspace northfork shared state
      • on-call listening
      • month-end running
  2. Device Cloud sandbox isolated
    • Workspace ridgeplume shared state
      • on-call running
      • weekly report listening
    • Workspace kilnworth shared state
      • on-call listening
      • ask waiting for you
  3. Device Laptop yours
    • Workspace gantryline shared state
      • on-call listening
      • QBR running
  1. 1

    Device

    A machine you own or a cloud sandbox. Agents run here with no screen attached.

  2. 2

    Workspace

    One ad account with one shared state. Every agent in it reads the same facts.

  3. 3

    Agent

    One job: on-call, the weekly report, month-end, or your question.

Open-source stack

  • Pi Durable @earendil-works/pi-durable Durable agent runtime: checkpoints, tasks, shared state
  • JEV typesafe/jev-1.13 Classifier: reads every event, labels signal, noise and luck
  • Your chat model via OpenRouter Writes the report with fact IDs only
  • noro rules engine rules/ Traces every number and runs the rules

04Human near the loop

Near the loop, not stuck in it.

Stop babysitting reports. Every report is verified and reviewed before it reaches you, and you approve what ships.

  • Number verifier

    Code computes every figure and traces it to your data. The model never does arithmetic.

  • 100 rules

    Slop, shaky claims and chart junk get caught before you see the report.

  • Review panel

    Every report faces a panel built from a career in paid media.

05Before & after

What lands in your review. Same data, less slop.

The rule: what happened, what it means, what to do.

slop cut from the report watchout flagged for you

Original 128 words

Overall, this week’s Meta Ads performance presented a mixed picture with both positive developments and areas that may warrant further attention. filler Total spend increased to $48,213, a 12% increase compared to the previous week’s $43,047.

The cost per acquisition (CPA) was $61.03, compared to $44.15 in the prior period, on 790 conversions versus 975. This could potentially indicate that campaign efficiency may have been impacted by a variety of factors. hedge

Frequency on prospecting ad sets PR-03 and PR-07 reached 4.1, up from 2.3, which may suggest the audience could be getting saturated. hedge Retargeting was a clear bright spot, with CPA falling to $22 on 4 conversions. thin data

It may be worth considering a creative refresh on these ad sets next week. hedge Moving forward, we will continue monitoring performance closely. punt

noro 39 words · −70%
What happened
Spend up 12% to $48.2k. CPA up 38% to $61. Conversions down 19% to 790.
What it means
Frequency on PR-03 and PR-07 rose to 4.1 from 2.3, so the audience is likely saturated.
What to do
Swap creative on PR-03 and PR-07 next week.

Flagged for you Retargeting’s $22 CPA rests on 4 conversions. thin data

Checked: 8 numbers traced
  • 12%in the original
  • $48.2k$48,213 in the original
  • 38%change, $61.03 vs $44.15
  • $61$61.03 in the original
  • 19%change, 790 vs 975
  • 790in the original
  • 4.1in the original
  • 2.3in the original

One KPI: how many agents are doing useful work for you right now, without you.

06Install

Own your agent. Don’t rent it.

Open source and self-hosted on your own OpenRouter key. Nothing leaves your machine except model calls.

  1. git clone https://github.com/noro-to/noro && cd noro
  2. npm install
  3. export OPENROUTER_API_KEY=sk-or-...
  4. noro this path/to/export.csv

Live connections