# 0010 · CoDNA does not call an LLM

**Status:** Accepted · 2026-09-22

## Context

CoDNA's pitch involves AI: uploads become a wiki, related documents get suggested, knowledge gets
distilled. The question is where the model runs — inside CoDNA, or in the client connected to it.

## Decision

CoDNA calls no LLM. It exposes knowledge over MCP and agents do the reasoning. Ingestion converts
files to markdown and parks them in `raw`; turning raw into wiki is an agent's job, driven by a
person.

Embeddings are the one optional exception — off by default, degrading to keyword, tag overlap, and
co-citation ([search.md](https://codna.me/docs/search.md)).

The seam for server-side workers exists as an outbox consumer ([0009](https://codna.me/docs/adr/0009-transactional-outbox.md)),
unbuilt.

## Consequences

- CoDNA runs with **no provider API key**. Nothing to configure, no inference cost, no rate limits,
  no vendor.
- Every MCP-capable client works on day one, and CoDNA never has an opinion about which model is best
  — an opinion that ages badly in public.
- No prompt engineering in the codebase, and no prompts to maintain against model updates.
- Quality tracks whatever model the user already pays for, and improves without a release.
- **Nothing happens without an agent attached.** A 10,000-document import sits in `raw` until
  somebody asks for something.
- Capabilities that genuinely need server-side inference — scheduled re-distillation, bulk backfill —
  are deferred rather than available.

## Alternatives rejected

**Server-side LLM pipeline.** Automatic ingestion with no client attached. Rejected for the first
milestones because it requires a provider abstraction, key management, a job queue, cost controls,
and a model opinion — substantial surface before the core knowledge model has been validated at all.

**Embedded local model.** No external dependency and full privacy. Rejected because it contradicts
the single-binary deployment in [0003](https://codna.me/docs/adr/0003-go-single-binary.md): a model file is hundreds of
megabytes and wants a GPU to be useful.
