Agent memory that tells you when it couldn't check
An on-call agent that answers "no prior incidents" might be telling you the archive is empty. It might also be telling you the embedding call timed out, and most memory stores return both as the same empty list. I built Throughline in August for the CockroachDB x AWS hackathon on agentic memory. It didn't place. My guess at why is at the end. What it does Throughline is an incident-response agent…
Throughline is an incident-response agent designed with a memory layer that can be audited. Memories in Throughline are typed, and their lifespan is determined by the type. The primary memory entity, db-7, has a 14-day half-life. Restarting the pods did not resolve an issue encountered, and that value persists for a year. Most systems discard that second type of memory, and it is the most cost-effective information to convey during an incident.
Every recall returns a receipt detailing the retrieval path taken, the number of candidates examined, what was excluded, and a coverage verdict of COVERED, PARTIAL, or UNKNOWN. If the search cannot run, the verdict is UNKNOWN, and a guard at the boundary ensures it is reported as an error instead of "nothing found." The ranking is computed in code, and the model writes the answer around the results without producing the order.
During the development of Throughline, several challenges were encountered. For example, without cloud keys, recall uses a small local embedder that matches words, not meaning. Asking a question in French about a memory written in English may result in the system claiming it searched the entire workspace and found no relevant information.
This is accurate since the words do not match. However, this receipt proves the search was conducted, even if it does not prove the search was intelligent. Matching meaning is the responsibility of the hosted embedder, such as Titan on Bedrock.
The system was tested on CockroachDB's free Basic tier, and vector indexing worked on 2026-08-03 using version 26.2.1. The cluster setting read true, and CREATE VECTOR INDEX completed successfully. However, the first index created on the embedding column alone was ineffective. The issue was that the planner would skip the index entirely, as the planner only accelerated filters on prefix columns.
The fix was to create an index on (workspace_id, is_live, embedding), where is_live is a computed column that cannot drift from the eviction timestamp derived from it. The capability probe now examines the query plan instead of relying on the existence of the index. Additionally, a client for CockroachDB's managed MCP server was developed to serve as a second channel that must agree with the direct one.
This probe paid off, as every failure encountered resulted in an HTTP 200 response with the error detailed in the JSON-RPC body and no result. A client written in the usual manner, with rows ?? [], would convert an outage into "that row doesn't exist," the exact failure Throughline aims to prevent. Furthermore, select_query automatically adds LIMIT 25 when no limit is specified.
One significant issue encountered was the presence of two vector spaces in one column. The demo rows were initially seeded with the local embedder while recall utilized Titan. Cosine similarity across two embedders yields noise and does not throw an error. This issue has now been resolved by ensuring that only one embedder is used and providing an explanation for any discrepancies.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.