Release notes
Notable changes to Tares, newest first. The project follows Semantic
Versioning ; earlier 0.0.x history is in the git log.
Entries below 1.0.0 name the commands and variables as they were at that release, when the project was called NavFlow. They are history, not current usage. See Upgrading from 0.x for the full mapping.
1.28.0: 2026-09-08
Added
- Model access through an LLM gateway. Tares agents
and Ask can talk to any server that speaks the Anthropic Messages format: LiteLLM, Portkey, a
proxy in front of Bedrock or Vertex. From the environment with
ANTHROPIC_BASE_URLandANTHROPIC_AUTH_TOKEN, the names Claude Code uses, or from Settings → Model access, stored on the instance and winning over the environment, so a hosted cell with a mandated proxy is configured by its owner. The gateway token is sent as a bearer header and never returned. The Settings tab is now called Model access and leads with where model calls go. Thanks to KurochkaR for the environment half.
1.27.0: 2026-09-08
Added
- HTTP API (poll), the
http_pollconnector. Polls any JSON endpoint on a schedule and stores one event per item, for the APIs no other connector covers: a weather service, a status page, a SaaS export, your own API. GET or POST with a body, extra headers, one credential header stored as a secret, a payload key into the reply, the webhook connector’s mapping and a deduplication key. Nested values are reachable by dotted name in labels, the fields profile, view filters and trigger fields. A poll under 10 seconds is refused; a 429 or 5xx backs the source off, up to an hour, honouring Retry-After. Discover fetches once and proposes the rest. - The source form for it reads in order: method, URL, credentials yes or no, additional headers as key-value rows, body for POST. The mapping appears only after Discover, as decisions already made with the sample value beside each, under a panel showing what Tares fetched.
- The builder proposes
http_pollfor a goal that reads a public or third-party API, instead of a webhook plus a script; “tell me when a city gets storm winds, from a public weather API” now builds in one sitting.
Changed
- Source form: test and save results sit above the buttons, not at the top of the page, and a required field the click found empty turns red and scrolls into view. A URL field is checked on save (http or https, a host) on Prometheus, Prometheus alerts and Loki as well.
1.26.0: 2026-09-07
Added
- The builder in two columns. The conversation on the left with the answer box pinned under it, and a “To do” column on the right holding every card the assistant proposed. A decided card folds to one line; the pointer the chat leaves for each card opens it. A one-line head carries the steps, the project name and the goal.
- Overview shows the Projects panel with Create new also on an instance with no project yet.
Changed
- The builder no longer invents a trigger for the agent: the daemon refuses an agent proposal whose trigger does not exist, Continue on the views and triggers step waits until a trigger exists, the step names sources that have no events yet, and the agent card never prefills an unknown trigger.
- Front door: the starter sentences keep a fixed order instead of reordering while you type, the picked one is marked, and the call to action reads Build it.
- The assistant shows a readable line for a non-JSON error reply, such as a proxy’s 502 page.
Fixed
- Behind an nginx ingress, a builder step sent about five seconds after the previous one could fail with 502 “upstream prematurely closed connection”: the proxy reused a pooled connection the daemon was closing at that moment. The daemon now keeps idle connections open longer than the proxy’s pool.
1.25.0: 2026-09-04
Added
- Build with Tares, the guided project builder. Describe what you need; the
assistant proposes sources from the installed connectors, then views and triggers, then an
agent, one step at a time, asking before it guesses. Each proposal is the object’s own form,
prefilled, with the fields only you can fill marked. Nothing is created until you click, every
Apply goes through the normal API, and the result is an ordinary project. A goal that matches
a template is proposed as that template.
POST /api/agent/chattakesmode: "build"andstep. - A new front door. An instance with no project of its own opens on one question, “What do
you want to build?”, with starter sentences from the templates, a paste-your-last-incident
door and the demo as a one-click offer. The same screen is Projects → Create new; the template
gallery is behind Use a guided template.
GET /api/projects/templates/{key}serves one template. - Project page: source rows fold open to the ingest endpoint or the polled target, with Configure. Framed empty states for runs, firings and events.
Changed
- Deleting takes dependents along. A source or view delete lists what depends on it and
offers to delete those too (
cascade=true;GET /api/catalog/dependentslists them). A project delete lists its objects with picks; unpicked ones stay (DELETE /api/projects/{id}?delete=kind:name,...).
1.24.0: 2026-09-04
Added
- Runs on an agent’s page and a project’s Agents tab filter to successful or failed runs, and
Show more pages past the first fifty (
statusandoffseton the runs endpoint).
Fixed
- Edit on a project from a template without its own wizard opened the create form and said the template did not exist. The form loads the template by key, prefills the project’s parameters (secrets blank, blank keeps the stored value) and saves in place.
Changed
- The root span of a traced run carries
tares.instanceandtares.agentas attributes.
1.23.0: 2026-09-03
Added
- Agent tracing. Every Tares agent run and every Ask turn can be exported as an OpenTelemetry
trace: a root span, one span per model call and one per tool call, in the conventions GenAI
observability backends read. Rius is a preset; any OTLP/HTTP endpoint works with the
otlpprovider. Settings → Observability holds the switch;TARES_TRACING_*sets the same from the environment. Off unless switched on.
1.22.0: 2026-09-03
Added
- Pause a project with its sources. Pause asks whether to pause the sources too; Resume
brings back exactly what Pause stopped.
{"sources": true}on the pause endpoint. - The GitHub source form picks a stored token from a dropdown and the repo from the list that token can see; a new token can be saved from the same form.
Changed
- The challenger project’s sessions open in place, with the summary, that session’s memory proposals and the exchange under the row. The project page shows the status badge beside the name.
1.21.0: 2026-09-02
Added
- The
rius_rcaproject template: the Tares half of the Rius RCA integration, created by the Rius control plane over the API and hidden from the gallery.
Fixed
- Unknown
/apiand/ingestpaths answer with a JSON 404 instead of the console’s HTML. - PUT on a view or agent no longer requires the name in the body; a rename is still refused.
GET /api/sources/discoverexplains that discover is POST-only.
1.20.0: 2026-09-01
Changed
- The side nav has two groups. Projects at the top with Overview and Ask; everything a project is made of in one Catalog group in pipeline order.
- The demo’s logs source drops routine 2xx access lines in hosted mode.
Fixed
- Deleting a template project with purge also deletes its triggers’ firings.
1.19.0: 2026-09-01
Changed
- Every project renders on one page: Setup (sources, views and triggers editable in place, subscribers), Events, Firings, Agents, and Sessions where a template reports them. Template actions, Repair and the change history moved with it.
- Templates describe their page extras as data (panels and cards); a new template needs no console work.
1.18.0: 2026-09-01
Added
- The project page manages subscribers: a Subscribers box lists everyone subscribed to the project’s triggers, with what each received, and adds or removes them there.
- The project Firings tab shows who each firing was delivered to.
/projectsis the list of projects; the ways to start one moved to/projects/new.
Fixed
- Deleting a trigger also removes its subscriptions.
1.17.0: 2026-09-01
Changed
- Deliveries is now Firings. A firing is the event, a delivery is what happens to it per
recipient;
/deliveriesredirects. External subscribers moved to the agents page. - The Sources, Views, Triggers and Firings pages became lists with filters; the firing page is one facts box with the payload beneath.
Fixed
- A delivery whose Tares agent is still running showed as failed; running, delivered and failed are distinct.
1.16.0: 2026-08-31
Added
- Hand-assembled projects got their own page with four tabs: Setup, Events, Firings, Agents.
Changed
- Trigger page: the watched view and the project badge moved into the first box.
1.15.1: 2026-08-31
Changed
- Rerun is offered on every finished agent run, not only failed ones.
1.15.0: 2026-08-31
Added
- A per-agent budget.
budget_usdon a Tares agent caps its lifetime spend; once reached, runs are capped before any model call and the run says where to raise or clear it. - On a hosted demo stack the AI SRE demo’s agent is born with a $2 budget.
1.14.0: 2026-08-31
Changed
- Use cases are now projects; recipes are templates. A project is a named set of sources,
views, triggers, agents and MCP servers with one page; the shipped recipes are Tares templates.
The API moves to
/api/projectsand/api/projects/templates, catalog YAML usesprojects:withtemplate:, and the seed variable isTARES_SEED_PROJECT. The old routes, YAML keys and variable keep working for two releases. claude_codeevents label the repository the session ran in asrepo(wasproject); saved sources, views and stored data follow on upgrade.
Added
- Projects from existing objects. Assemble a project from the sources, views, triggers, agents and MCP servers you already have; nothing is created, and removing an object from the project leaves it in place.
- Rerun an agent run. A run that failed, ran out of rounds, was capped or came back empty has a Rerun button: same trigger, same entity, same firing data, against the agent’s current definition. Runs also open with the agent’s previous finding for the entity, a head start instead of rediscovering it.
- The challenger session thread lists every finding of a review in full.
1.13.0: 2026-08-27
Added
- Challenger workflow in the console. The use case page lists every challenger session with the plan and per-commit review outcomes, the Claude/Codex exchange as one thread, a Summarize button per session, and the summarizer’s memory proposals with Accept / Reject. Decisions are kept on the memory source, so they hold in every browser.
- The first session marked as a challenger session creates the
challenger_workflowuse case by itself;/tares:challengerin Claude Code is the whole setup.
Fixed
- Plugin fixes for marketplace installs,
git -c ... commit, and Codex 0.150’s sandbox flags; only[P1]findings block on a plan critique. - Use case actions that start an agent run (
summarize) failed undertares upand left a run stuck at running. - Challenge outcomes read “no findings” / “N findings (M blocking)” instead of PASS/FAIL, which elsewhere in the console means a broken run.
1.12.0: 2026-08-27
Added
- Challenger workflow. A second model challenges Claude Code’s plan and every commit,
locally, while Tares keeps the record: a per-session view, a trigger on session end and a
summarizer agent that writes a session summary with memory proposals. The
claude_codeconnector gains theflowlabel and challenge events with verdict, sha, round and finding counts. - Claude Code plugin 0.2.0.
/tares:challengerturns a session into a challenger session; the plugin runs Codex on plan exit and after each commit (blocking on P1/P2 findings, with a fix loop and/tares:challenger-waive), ships every review to Tares, and hands accepted memory to Claude at session start.
1.11.0: 2026-08-26
Added
- Install skill for coding agents:
npx skills add glassflow/tares --skill tares. From one prompt, an agent installs Tares, starts it, adds a first source, connects itself over MCP and shows one read. tares status: a readiness checklist for a running instance that ends with the one next step;--jsonfor scripts.tares upprints the same “Next:” line under the console URL.
Changed
- An agent run without a key, and the banners on the Agents pages, say what to do: set
ANTHROPIC_API_KEYbeforetares up, or add a key under Settings.
1.10.0: 2026-08-25
Changed
- A key stored in the console now takes precedence over
ANTHROPIC_API_KEY(it was the other way around). If you relied on the env var overriding a stored key, clear the stored key.
Added
- Grafana Loki connector. Polls a LogQL stream selector; one event per log line with the stream’s labels and the same derived fields as docker_logs. Works against any reachable Loki, including Grafana Cloud.
- The AI SRE demo works against a hosted demo stack when the
TARES_DEMO_*URLs are set; with them unset the local docker compose flow is unchanged. - The spend meter records which key paid:
GET /api/usage/modelreports aby_key_sourcesplit, so an operator-provided key’s spend is separable from your own. TARES_SEED_USECASE: seed a named use case once on first boot, so an instance starts with a working setup instead of an empty catalog.
1.9.0: 2026-08-24
Added
- Model usage and cost per agent run. Every run records its model, token usage and a USD cost priced at write time; Ask turns are metered the same way. Runs from before this release show no cost (unknown, never guessed).
GET /api/usage/model: the instance’s Anthropic spend as all-time totals plus a per-day tail, split by surface.- The Tares agents page is an operational surface: stat cards, tabs, and runs as a table with model, rounds, tokens and cost, expandable to the finding.
1.8.2: 2026-08-19
Fixed
- A trigger no longer misses a key whose source ingested right after another; a skipped evaluation is re-run once the debounce interval ends.
- Shared code context: the
every_committrigger’s detection window is 5 minutes, matching the 60-second source poll.
1.8.1: 2026-08-19
Added
- AI SRE demo as a use case. Use cases > AI SRE demo (tagged demo) creates the same three
sources,
service_timelineview,incidenttrigger andincident-first-lookagent the demo catalog seeds, with one click; an already imported demo catalog is adopted, not duplicated. The setup page asks Docker what is running and fills the Prometheus and api-server URLs and the log container from it, shows the docker commands with copy buttons when the stack is not up, and takes an Anthropic key inline. The use case page has Cause an incident (error spike, latency, dependency outage) and Clear the fault buttons. Recipes can declare tags, setup steps, actions, a guide link and a detect hook.
Fixed
- Auto-discover (Docker) works again when a Prometheus container is running; it proposes a reachable starter metrics source and says how many metrics wait to be picked on the source page.
1.8.0: 2026-08-18
Added
- Use cases. A new console section and framework: a use case is a ready-made setup that creates
ordinary Tares objects and owns them (badge on their pages, editable and deletable there; an edit
marks the object customized, a hand delete shows as missing with Repair). Create, update by
re-plan, pause and resume, delete, repair;
/api/usecases;usecases:in catalog YAML. See Use cases. - Shared code context use case: one commits source per repository, a view with one timeline per repository, a trigger on new commits, GitHub’s hosted MCP server registered with the stored credential, and an agent that keeps a context repository current as pull requests; existing pages updated in place or one page per repository; optional first look on start. See the guide.
- GitHub credential stored once under Settings > GitHub;
credential: <name>ongithubsources,credential:github/<name>on MCP servers; rotation in one place. - MCP servers take extra headers (for example
X-MCP-Toolsetson GitHub’s hosted server). - Per-agent round cap
max_rounds(default 6, 12 with external MCP servers) and anexhaustedrun status with a partial note. - GitHub commits carry their changed files in the payload (capped;
files: falseto skip). - Settings has tabs: Access and API keys, Anthropic, GitHub, Slack.
1.0.0-1.0.1: 2026-08-05
Changed
- NavFlow is now Tares. This release is breaking, with no compatibility layer. The package and
command are
tares, the daemon istaresd, the MCP proxy istares-mcp, and--navflowdis--taresd. EveryNAVFLOW_*environment variable is nowTARES_*, and the old names are not read. The image isghcr.io/glassflow/tares, the repository is glassflow/tares , and the Claude Code plugin istares@tares. - The database file is
tares.duckdb, previouslynavflow.duckdb, inside a data home that moved from~/.navflowto~/.tares.
Two guards instead of a fallback. Both renames above would otherwise fail quietly, coming up
healthy and empty while the real data sat untouched beside the new file. So the daemon refuses to
start if any NAVFLOW_* variable is still set, or if a pre-1.0 database sits next to a missing
tares.duckdb, and prints the rename or the mv you need. Full instructions:
Upgrading from 0.x.
0.2.0: 2026-07-26
Added
- Tares agents: a prompt attached to a trigger. When the trigger
fires, Tares reads the correlated timeline and writes a finding back onto the entity’s
timeline (a built-in
findingssource). Configured in the console (Agents) or the catalog (agents:); enabled ⟺ subscribed to its trigger; read-only (it concludes, it doesn’t act). The demo ships one that diagnoses the injected incident out of the box. navflow up --auth: one switch for authentication. Bare--authgenerates and persists a root token and prints a…/?token=…login URL each launch;--auth=<token>uses your own. Open by default (navflow up).- Per-source API keys: creating a push source on a secured instance mints an
ingest-scoped API key for it (shown once). The Security page groups Access, API keys, and the Anthropic key.
Changed
- Ingest is gated by auth like every route. Producers authenticate with scoped
ingestAPI keys (Authorization: Bearer <key>), not a shared token.
Removed
NAVFLOW_INGEST_TOKENandNAVFLOW_READONLY: folded into the one auth switch + scoped API keys.GITHUB_TOKENandNAVFLOW_VERCEL_VERIFYenv vars: GitHub tokens come from the source’stokenconfig; Vercel drain verification echoes Vercel’s own probe header.NAVFLOW_ANTHROPIC_KEY: useANTHROPIC_API_KEY(or the console-stored key).
0.1.36: 2026-07-23
Added
alertmanagerconnector: a push receiver for Alertmanager. Point awebhook_configs.urlat the source’s ingest endpoint; each routed alert becomes an event (keyed by a label, firing / resolved). The source page shows a copy-pastealertmanager.ymlreceiver block.
0.1.35: 2026-07-23
Added
prometheus_alertsconnector: polls Prometheus’s own/api/v1/alertsand emits one event per active alert (keyed by a label), plus aresolvedevent when it clears. Discover lists the configured rules with an optional severity filter.referenceconnector: documents (json / csv / md / txt) attached to an entity by their labels, always surfaced when correlating on that entity regardless of the read window.
Removed
alertsandstaticconnectors: superseded byprometheus_alerts/alertmanagerandreferencerespectively.
0.1.34: 2026-07-22
Changed
- Prometheus: pick the metrics, no PromQL. Discover now lists the
server’s metrics and labels; you pick what to ingest (by name or by label) and Tares writes the
query. The metric value is stored as a number-typed
valuelabel, so triggers can aggregate it. Added bearer / basic auth.
0.1.32-0.1.33, 2026-07-22
Changed
- Postgres: the connection URL (
dsn) is a required per-source config field, stored as a secret; the driver ships in the base package (no[postgres]extra); you can select which columns to pull. Droppedkey_column(the key is aprimarylabel) andcursor_type(inferred from the value).
0.1.4: 2026-07-03
Removed
changelogandconfigconnectors: dummy, demo-only connectors that had outlived their use. Also drops the demo api-server’s unused/admin/changelogand/admin/configendpoints and renames its fault switch/admin/inject→/demo/inject.
0.1.3: 2026-07-03
Added
include_payloadonread/query: opt-in flag that returns the full lossless stored record asrawon each row, alongside the summarytext. Exposed over HTTP and the MCPread/querytools; covers all connectors.
Fixed
- Claude Code plugin install: publish a root
marketplace.json(/plugin marketplace add glassflow/navflow) and fixplugin.jsonload errors on Claude Code 2.1 (duplicate hooks ref, missingingest_tokendefault,navflow_urlrequired flag hiding its default). - Double-ingest for
claude_code: the first pushed event flips a poll-mode source to push mode, so a source fed by the plugin no longer also tails files and ingests every event twice.
0.1.2: 2026-07-02
Added
navflow --version.
0.1.1: 2026-07-02
First public (soft-launch) release.
Added
read(selector, window)primitive: a correlated, time-ordered read across all sources matching a strict-AND conjunction oflabel=valueconstraints, with no view required. Exposed over HTTP (POST /read) and MCP (thereadtool). Views become an optional narrowing lens; triggers still attach to a view.- Console redesign: a selector-first Explore (pick an entity, add filters, read across every source, with a human/agent view toggle), a ⌘K Ask command palette, a three-act navigation, and separate Views / Triggers pages.
- Agents → Reads: a client filter (defaults to
mcp) over the read activity log.
Changed
- Package and CLI distribution renamed from
navflow-mvptonavflow.