Ask by meaning, narrow by evidence
Start with semantic similarity, then join against authorship, callsites, branches, repositories, or arrival time. The result is precise enough to act on and small enough to reason about.
Queryable memory for code
code.subspace turns the history scattered across repositories, branches, and worktrees into durable context your coding agents can query. Less searching. Fewer repeated mistakes. Better answers backed by the code that came before.
Payments started double-charging Tuesday. Find the change across every repository.
SELECT repo, unit, author, arrived FROM search_history('payment retry idempotency') WHERE arrived >= '2026-03-01' ORDER BY relevance DESC;
| repo | unit | author | arrived |
|---|---|---|---|
| payments-svc | retry_charge | m.tanaka | 2026-03-01 |
| web-app | useRetryPayment | d.kim | 2026-03-02 |
retry_charge creates a new idempotency key on every retry. That is the regression.
Why it works
Agents are excellent at reasoning over context. The hard part is finding the right context without flooding the window. code.subspace reduces a sprawling code estate to focused, composable results.
Start with semantic similarity, then join against authorship, callsites, branches, repositories, or arrival time. The result is precise enough to act on and small enough to reason about.
Content-addressed units connect equivalent code across paths and repositories, making moves, copies, and shared implementations visible without brittle path matching.
Abandoned experiments and deleted branches can still answer “have we tried this?” Agents learn from discarded approaches instead of quietly repeating them.
Append-only ingestion time separates the history your team received from the dates encoded in commits. That makes incident investigation resilient to rebases and force pushes.
Query gallery
Purpose-built views keep each query focused on the agent’s intent. Switch between SQL and Datalog to see the same task expressed in either language.
“Sessions started expiring after yesterday’s deploy. What new code touched token or TTL logic in any repository?”
SELECT repo, unit, author, arrived FROM search_history('session token ttl expiry') WHERE arrived > now() - INTERVAL '72 hours' ORDER BY relevance DESC;
[:find ?repo ?name ?author ?arrived
:where
(search-history "session token ttl expiry"
?repo ?name ?author ?arrived)
(within-last ?arrived "72h")]
| repo | unit | author | arrived |
|---|---|---|---|
| auth-svc | clamp_token_ttl | p.iyer | 26 h |
| shared-lib | CACHE_TTL_S | d.kim | 41 h |
Root cause without repository-by-repository archaeology. The time filter reflects arrival in the index, so rewritten commit dates do not distort the investigation window.
“Did anyone try building a feature-flag SDK? Show abandoned approaches, newest first.”
SELECT unit, author, branch, last_seen FROM search_history('feature flag sdk') WHERE alive_at_head = false ORDER BY last_seen DESC;
[:find ?name ?author ?branch ?last-seen :where (search-history "feature flag sdk" ?unit) (not (alive-at-head ?unit)) (last-ref ?unit ?branch) (unit-summary ?unit ?name ?author ?last-seen)]
| unit | author | last branch | last seen |
|---|---|---|---|
| FlagClient.evaluate | s.novak | spike/flags-v2 | 2026-02-19 |
| FeatureGate | d.kim | feat/gates | 2024-09-30 |
Discarded work becomes institutional memory. The agent can compare old approaches before designing another version from scratch.
“Is another agent already implementing rate limiting in an unmerged worktree?”
SELECT agent, branch, unit, pushed_ago FROM search_worktrees('token bucket rate limiter') ORDER BY relevance DESC LIMIT 3;
[:find ?agent ?branch ?name ?age :where (search-worktrees "token bucket rate limiter" ?unit) (unmerged ?unit ?agent ?branch) (unit-summary ?unit ?name ?age)]
| agent | branch | unit | pushed |
|---|---|---|---|
| agent-7 | wt/rl-middleware | RateLimiter.allow | 14 min |
| agent-7 | wt/rl-middleware | TokenBucket.take | 14 min |
Coordination happens before the collision. Agents can discover overlapping work early, build on it, or choose a different task.
“Trace validate_webhook through every rename, move, and repository where it lived.”
SELECT repo, path, unit, first_seen FROM unit_lineage('validate_webhook') ORDER BY first_seen;
[:find ?repo ?path ?name ?first-seen :where (lineage "validate_webhook" ?unit) (unit-location ?unit ?repo ?path ?name) (first-seen ?unit ?first-seen)]
| repo | path | unit | from |
|---|---|---|---|
| api-gateway | src/hooks.py | verify_signature | 2023-04-11 |
| shared-lib | pkg/webhook/verify.py | validate_webhook | 2025-08-21 |
Blame without path boundaries. Content identity ties a unit to its earlier forms even after it moves into a shared library.
Architecture
Local and remote hooks feed a shared, content-addressed model of your code. Agent tools turn natural-language intent into focused SQL or Datalog.
Capture code units, commit context, and arrival time across connected repositories and worktrees.
Unify semantic embeddings, unit identity, provenance, and repository structure in one model.
Agents receive compact rows and precise locations instead of another full-repository dump.
Deployment
Choose infrastructure you operate or a managed service. Both paths expose the same query model and agent-facing tools.
Deploy the engine with Postgres, your preferred embedding model, and your object store. Keep control of infrastructure, retention, and access policy.
Connect organization repositories without operating the ingestion and vector fleet. Designed for shared agent access, SSO, and centralized retention controls.
Stay in the loop
Join the newsletter for product updates, technical notes, and invitations to the early-access program.