Lacunari

Writing

Notes on coordination, indexing, and the things that fail while reporting success.

MCP or the CLI — two ways into the same board

The MCP server and the lac CLI are two different front doors onto the exact same Postgres tables. What each one can actually do, what's missing from each, and which to reach for.

MCPCLIintegrationAI agentsarchitecture

Goal decomposition — how lac goal add and lac goal plan actually work

A real deep dive on Lacunari's most distinctive feature — an objective expanded one frontier at a time, grounded in a JSON context pack the planner is actually shown, with its real limits stated plainly.

goalsplanningroadmapAI agentsarchitecture

What lac doctor actually checks

Line by line, what each status in lac doctor means, why the check exists, and what to actually do when it says team mode off, keeper NOT scheduled, or executor (unset).

operationstroubleshootingCLIpostgresops

Why atomic claims beat merge conflicts

A merge conflict is git telling you, after the fact, that two parties already spent the work. An atomic claim is one indexed UPDATE that lets exactly one of them start. Here is the actual SQL, the actual failure mode it replaces, and where the guarantee stops.

postgresconcurrencygitmerge conflictsdistributed systemssql

The four shapes of absence, in full

A hole in a covered span. A claim resting on one source. An entity connected to nothing. Material never read. Each is a different query shape, each is invisible to search and RAG for a structural reason, and each generalises from historical archives to source code without changing a line of SQL.

searchRAGretrievaldata qualityresearch methodsgap detection

Lacunari, explained without the jargon

What Lacunari actually is, explained with zero repositories, zero databases, and zero code — just a foreman, a punch list, and a house full of workers who never double up.

plain englishno jargonexplainercoordination

Do you need a vector database for this? No — here's why

The FAQ answer is one paragraph. Here is the mechanical version, covering why gap detection is set-based SQL rather than a retrieval problem, and an honest account of what a vector database is actually good for, so this doesn't strawman RAG to make its own case.

vector databaseRAGembeddingsretrievalPostgressearch

Running your first Lacunari fleet

Install it, point it at a real project, watch the gaps turn into claimable tasks, and put workers on them overnight. A getting-started walkthrough with real commands and real output, not a pitch.

getting startedCLItutorialAI agentstask queue

Team mode: identity, permissions, and what changes when you turn it on

The default install takes your word for who you are. Team mode moves identity into the connected Postgres role, permissions into row-level security, and the audit log into an append-only table nobody can rewrite — including the operator. Here is exactly what that buys, and a real bug that shows why it was hard to get right.

postgresrow-level securityidentitypermissionsaudit logteam mode

The "nothing collides" promise, explained like you're five (well, thirty-five, but no coding required)

The most technical, most impressive claim on this site — that work genuinely cannot collide — explained with a raffle counter instead of a computer science lecture.

plain englishno jargonexplainercoordination

Lacunari vs. LangGraph, CrewAI, and AutoGen — the long version

The short FAQ answer is "different problems." Here is the mechanical version, covering what a graph engine gives you that a queue doesn't, what a durable cross-machine queue gives you that a graph doesn't, and when to run both at once.

LangGraphCrewAIAutoGenmulti-agent frameworksorchestrationdeveloper tools

Why your AI assistants keep stepping on each other's toes

The specific, maddening way two AI assistants working on the same project end up undoing each other's work — told as the scene you've probably already lived through.

plain englishno jargonAI agentscoordination

Content addressing makes merge conflicts impossible

If two parties key their documents by the hash of the contents, combining their work is a union rather than a negotiation. Here is what that buys, what it does not, and why disagreement should be preserved instead of resolved.

content addressingmerge conflictsfederationdistributed systemsgit

Every bug we shipped was the same species

A migration that aborts and exits zero. An extractor that processes nothing and returns cleanly. A lock that guards one code path and leaves another open. Notes on the failure mode that test suites are structurally bad at catching.

testingreliabilitypostgressoftware engineeringexit codes

The 1943 problem — why you cannot grep for absence

Search engines, vector databases and RAG pipelines all rank things that exist. None of them can tell you what is missing, because absence is a property of a set rather than a document. Here is why that gap matters and how to close it in SQL.

searchretrievalRAGvector searchdata qualityresearch methods

Why not just use git?

Git records that bytes changed. It has never read your files, cannot tell you what is unfinished, and detects collisions only after the work is done. Here is exactly where that boundary sits, and what sits on the other side of it.

gitversion controldeveloper toolsAI agentsmerge conflicts