Tares is the open-source platform for always-on AI agents.
Chat agents wait for a prompt. Tares agents wait for an event: every event from your systems lands on one timeline per thing, a trigger wakes an agent the moment it matters, and the finding it writes back is there for the next reader.
What teams build with it.
An AI SRE
An alert fires; the agent reads the service's whole timeline and writes the diagnosis before anyone opens a dashboard.
A context repo that stays current
Commits land; when a change matters to the team, the agent opens a pull request against the shared context repository.
A triage agent for anything that runs
Failed jobs, sandbox runs, voice calls: each gets a timeline, a trigger on failure, and a finding that says what broke.
A better read path for the agents you have
Claude Code, Cursor, or your own loop asks one question and gets the correlated history of an entity instead of ten tool calls.
What is in Tares.
Everything here is a page in the console, editable there.
Connect anything that emits events.
Prometheus, logs, alert webhooks, GitHub, Postgres, Vercel, OpenTelemetry, or any webhook. Every event is keyed to the thing it is about, from a connector card or a pasted snippet of YAML. connectors
One timeline per entity, with triggers watching it.
Sources that share a key merge into one time-ordered timeline per service, repo or customer; the agent view shows the exact text an agent receives. Triggers watch the live view and fire on a condition, once, with a cooldown. triggers
api-server · service · last 90s · 3 sources + findings
T-63s prometheus checkout_p99_ms 640 -> 1180
T-58s logs POST /charge 500 "upstream retry limit" x214
T-41s alerts HighCheckoutLatency firing severity=page
T-9s finding by incident-first-look:
Uncapped retries from the 01:50 deploy (PR #482).
Cap at 3 or roll back.This exact text is what an agent receives from one read call.
Agents that run inside Tares.
The agent runs inside Tares, reads the whole timeline, and writes its finding back onto it, tied to evidence lines. Pick a model per agent, opt it into tools from any external MCP server, and deliver findings to Slack or a signed webhook. tares agents
Everything is available over MCP.
Everything the console can do is an MCP tool. Claude Code, Cursor or your own loop reads the same timelines, creates sources and views, and subscribes to triggers so it is woken instead of polling. Reads need no model key. connecting agents
From event to finding.
One real incident on one service's timeline, minute by minute.
- 02:03
An event lands
logs POST /charge 500 "upstream retry limit" x214
- 02:11
Your alerting decides
Prometheus keeps owning the thresholds. Tares only reacts to what fired.
alerts HighCheckoutLatency firing severity=page
- 02:11
The trigger fires, once
It saw the alert event land on the view it watches. A cooldown holds it there.
trigger alert-lands → wakes incident-first-look
- 02:11
The agent reads the whole story
One read: the last 90 seconds of metrics, logs, deploys and alerts for this service. Not the alert alone.
read(api-server) → 47 events · 4 sources
- 02:14
The finding lands
Written back onto the timeline next to the evidence, and delivered to #incidents.
Uncapped retries from the 01:50 deploy (PR #482). Error rate and p99 follow the rollout window exactly. Next: cap retries at 3, or roll back.
- later
The next reader starts ahead
The finding is an event too. The next investigation, human or agent, opens with the last one's conclusion.
Run it in two commands.
The quickstart takes it from here. Rather not host it? Use the cloud.
Your first always-on agent, running tonight.
Common questions.
- Does my data leave my machine?
- No. One local DuckDB file. The only outbound traffic is what the agents you configure send to their model provider.
- Do I need an Anthropic key?
- Only for the built-in agents and Ask. MCP reads need none.
- Is it read-only?
- By default. Registering external MCP servers moves that boundary per agent, deliberately.
- Does it replace Prometheus, Grafana, Datadog, or my alerting?
- No. It ingests what they emit, correlates it, and reacts to what fired. Everything you run stays where it is.