MIRTEL

How Mirtel works

Most tools tell you what your code did. Mirtel starts from what should have happened, then checks. That's how she catches the run that never started: there's no error to see, just a gap where a report should be.

The contract

Every agent has a contract, written by you, in your words:

From the schedule, Mirtel works out every run you should expect. She doesn't store a list of misses. She works the whole ledger out again from the contract and the reports every time you look. So if you change a contract, say by raising the minimum items, she re-judges the past with the new rules.

An agent with no schedule is fine too. Its reports are listed as they arrive, and it can never be Missed.

The six verdicts

Each expected run gets one of these:

VerdictWhat it means
DoneThe agent reported done, with at least the minimum items if you set one.
EmptyThe agent reported empty, or reported done with fewer items than the minimum. It ran, but brought nothing home.
FailedThe agent reported failed. It should say why.
Needs youThe agent reported needs_you. It's stuck on a decision only you can make.
MissedNo report arrived by the scheduled time plus the grace period.
DueNot yet. The run is coming up, or it's still inside its grace period.

Mirtel only counts items. She shows your success sentence next to each run, but she doesn't read the output and grade it.

Early, late and retried runs

Reports can say when the run started, up to 24 hours back, so an agent can report a little after the fact. They can't rewrite older history.

Your list, and alerts

The dashboard keeps a Needs your attention list: every Missed, Failed, Empty or Needs-you run from the last 7 days that you haven't marked as seen, plus any agents waiting for your approval. Marking one as seen takes it off the list. It stays in the ledger.

If you set a webhook (the MIRTEL_WEBHOOK_URL setting), Mirtel sends each new problem to it once. That works with Slack incoming webhooks, n8n, Zapier and the like. She checks every minute, because a missed run doesn't send anything to react to. A webhook is the only alert channel for now.

Mirtel's four promises

PromiseHow she keeps it
One key per agentEvery agent has its own key, and the key is also the agent's link, /r/ followed by the key. Revoking one agent touches nothing else. Rotating gives the agent a new link and the old one stops working.
You approve every agentAn agent can only sign itself up with a one-time token you made, which expires after 15 minutes by default. Until you approve it, its reports are refused.
Watches, never touchesMirtel never calls your agents and stores no platform passwords. The only thing she sends out is the optional alert webhook.
Your workspace onlyWhich workspace a request belongs to always comes from its key, never from anything the caller says.

Mirtel also keeps only a fingerprint (a hash) of each key, never the key itself. That's why she can show you a link only once.

Running your own Mirtel

Mirtel needs a server that stays running, with a disk it can write to. Put it behind HTTPS, because the link carries the key. Set MIRTEL_PUBLIC_URL to your public address (for example https://mirtel.example.com) so every link points at the right host. Without it, Mirtel guesses from each request, and behind some proxies that guess comes out as plain http:// or the wrong host name.

What she doesn't do yet

Some things you may have seen on the front page aren't built yet: AI grading of what agents produce, AI summaries, email or WhatsApp reports, accounts and teams. Schedules are days and times only, with no cron expressions or "every 2 hours". Until those exist, the docs don't pretend they do.