Asking the cat for directions...
Curiosia Major
The Debugger
Orion's Fork
The Stack
Asking the cat for directions...
Document your software architecture as an infinitely-nestable graph — one that stays alive as the system evolves, and that AI agents can read and maintain alongside you.

Every architecture diagram starts as a lie waiting to happen. You open a drawing tool, lay out the boxes and arrows, feel briefly organized — and then the system changes. A service moves, a queue appears, a database splits in two, and the diagram quietly rots in a wiki nobody opens. Six months later it's actively misleading.
I built Infinite Docs because I was tired of that trade-off. It's a drag-and-drop tool for documenting software architecture as an infinitely-nestable graph: you place Components on a Canvas and link them with Connections. Opening a Component descends into its own interior Canvas, recursing to any depth — from top-level infrastructure (hosts, databases, external APIs) all the way down to internal services, modules, or a single database table. It's one place to model a system at any depth, keep it alive as the system evolves, and hand it to both people and agents as a first-class artifact.
The cover image above isn't a mockup — it's Infinite Docs documenting itself, exported live from the running app.
Existing tools force a choice no one should have to make. You can have the picture or you can have the detail, but not both — and neither talks to an LLM.
Infinite Docs collapses that choice. The spatial graph and the written detail live in the same artifact, and that artifact is built from the ground up to be read — and written — by AI agents.
You work on a Canvas. You add Components from a searchable, affinity-ranked palette of 26 kinds — everything from a generic box down to a host, a database, a service, a function, or a single table. You drag them around, rename them inline, and draw Connections between them. Every Component carries its own markdown documentation, edited in a WYSIWYG editor that autosaves as you type.
A Canvas is a derived view — it's never saved as a file. The graph stores only Components and their Connections; every Canvas, breadcrumb, and boundary view is computed at read time. There is no separate diagram to fall out of sync, because there is no separate diagram.
That last point is the quiet superpower. When the only durable thing is the graph itself, “the diagram is out of date” stops being a category of problem.
Double-click a Component and you descend into its interior Canvas. The breadcrumb trail tracks exactly where you are, and you can keep going — infrastructure, to the app inside it, to the modules inside that, to a single table — as deep as the system goes.
The hard part of nested diagrams has always been context loss: the moment you drill into a box, you lose sight of what it talks to on the outside. Infinite Docs solves this with boundary proxies. When a Connection crosses the edge of the Canvas you're looking at, the far end follows you inward as a read-only stand-in, so a dependency's other side stays visible without you ever leaving the scope you're documenting.

Here we've descended into Vercel Edge. The breadcrumb shows the path; the solid Next.js App node has its own interior (note the descent badge); and Neon Postgres appears as a dashed, read-only boundary proxy— it lives a level up, but because the interior connects out to it, its far end rides along so you never lose the thread.
This is where Infinite Docs stops being “a nicer diagram tool” and becomes something new. The entire graph serializes to deterministic markdown— byte-stable output with stable {#nodeId} anchors — so an LLM can read your architecture as text and an agent can reference any Component by anchor. There's a “Copy as markdown” button right on the toolbar.
Better still, an authenticated MCP server lets AI agents read and maintain the architecture as they work on the actual system it describes. You mint an API token on the Connect an agent page, paste one snippet, and your agent of choice — Claude Code, Codex, Cursor, and friends — is pointed at your graph.

Over that connection, agents get read resources and write tools over the same graph you edit by hand:
# Read resources
architecture://index/{projectId} # structural map: titles, kinds, anchors
architecture://project/{projectId} # full graph with markdown docs
architecture://subtree/{projectId}/{nodeId}
architecture://trace/{traceId}
# Write tools
create_component / move_component / update_component_docs
create_connection / update_edge_interaction / delete_connection
apply_graph # batch create/update components + connections in one call
apply_spec # parse an OpenAPI or SQL-DDL spec and sync the graphapply_graph lets an agent construct or refactor a whole subtree in a single, consistent call.llms.txt advertises the endpoint, auth, tools, and resources, and an installable agent skill teaches the workflow.Paste an OpenAPI or SQL-DDL spec and Infinite Docs generates child Components and materializes SQL foreign keys as Connections. Re-import the updated spec later and it reconciles— new tables appear, dropped ones disappear, changed ones refresh, and the components you drew by hand are left untouched.
Define a couple of points on the graph and a named Trace projects the path(s) between them across every depth at once, auto-laid-out and read-only — ideal for following a request flow or a dependency chain. Each Trace is exportable as its own MCP resource.
Two front doors — a web app for people and an MCP server for agents — sound like two codebases worth of authorization bugs. They're not, because both are thin adapters over a single service layer with one signature:
// Every piece of business logic lives here, and nowhere else:
(db, actor, input) => result
// tRPC adapter (web) MCP adapter (agents)
// resolve actor resolve actor from API token
// call the service --> call the SAME service
// map errors to tRPC map errors to MCP
// One authorization seam. A human and an agent that act
// as the same owner get identical reads, writes, and refusals.(db, actor, input) seam is exercised by Vitest against a real, isolated Postgres — no mocks, asserting real behavior.
Three levels into the dogfood graph above, you can see the shape of it: the tRPC API and the MCP Server sit side by side as front doors, with llms.txt and auth beside them, all resolving down to the same database. The picture the tool draws of itself is its architecture.
Infinite Docs shipped its full initial roadmap — six milestones from the data model and service layer through nested canvases, markdown export, boundary proxies, the MCP server, and typed cross-scope connections — and has grown well past it since.
apply_graph, apply_spec)Every edit is optimistic: it appears instantly and persists in the background, with rollback and a toast if anything fails. And the whole time, an agent can be reading and maintaining the same graph over MCP.
We're heading into a world where agents do a growing share of the work on our systems — and an agent is only as good as its map of the territory. A rotting diagram in a wiki isn't a map an agent can use. A living, queryable, anchor-addressable graph is.
Infinite Docs is my bet on what architecture documentation looks like when it has to serve people and agents equally well: spatial enough to understand at a glance, detailed enough to be true, and alive enough to stay that way.
Try it on your own architecture, or dig into how it's built.