AI InfrastructureIn progress

Ariadne

An agent reads a repository and knows what the code does and where it lives. What it cannot know is which approaches were rejected and why, which limits are real, and where someone already got burned. Ariadne stores that part: decisions, notes and session summaries, each with its origin attached, searched by meaning instead of by keyword, and handed to whichever agent opens the next session. The point is to stop paying for the same context twice. Agents connect over an MCP server, authenticate with a token, and see only the spaces that token belongs to. Isolation has two locks: the service layer filters, and row-level security refuses anyway, so one space stays unreadable to another even if the filter disappears from the code. Search is hybrid, pgvector for meaning plus Postgres full-text for the exact word, and that combination is the part that actually changed answer quality. Backend is Hono on Node 22 with Drizzle over Postgres 17, embeddings run on Gemini with the user's own key, and the desktop app is a static Next.js export inside a Tauri window. v0.1.0 is out with a Windows installer.

Jul 2026

Case study

The problem I couldn't settle by intuition

While designing the search I ran into a question guessing wouldn't answer: whether the second arm, the one matching on names, helps at all. I built a golden set, measured three variants, and the aggregate number turned out to be the average of two opposite swings. I wrote up what I measured and what I cut.

Read the case study

Tech stack

TypeScriptMCPpgvectorTauriNode.jsHonoDrizzle ORMPostgreSQLNext.jsGemini

Key features

  • MCP server over streamable HTTP, works with Claude Code and Codex
  • Decisions, notes and session summaries, each with its origin attached
  • Hybrid search: pgvector for meaning, Postgres full-text for exact names
  • Space isolation locked twice: service-layer filtering and row-level security
  • Token auth, with every token scoped to its own spaces
  • Shared team spaces, invite codes, one MCP token per person
  • Task list next to the archive, so unfinished work stays visible
  • Desktop app: static Next.js export in a Tauri window, PL and EN
  • Embeddings and assistant on Gemini, using the user's own key
  • v0.1.0 released with a Windows installer

Challenges

  • Making one space unreadable to another even if the code forgets to filter
  • Returning the right entry when the question is worded nothing like the note
  • Designing a write path an agent uses mid-session, not after it ends
  • Shipping a hosted backend and a desktop app from one codebase

Solutions

  • Two locks on isolation: service-layer filtering plus row-level security in Postgres
  • Hybrid retrieval, so file paths and package names still match letter by letter
  • Tool descriptions that tell the agent when to write, not only how
  • Static Next.js export inside Tauri, no separate desktop UI to maintain
All projects