Jazyk /ˈjazɪk/
Compiler for natural language
Loose prose: requirements, product use cases, design pages. The compiler does not constrain the English you write.
A deterministic harness finds what changed; bounded LLM turns bring the graph in line with it, one document at a time, behind validation gates.
Entities, EARS requirements, derived relationships, and diagnostics. Persistent, edited in place, never regenerated.
- CLI to compile, watch, and query
- MCP so agents read the same graph through the same tools
- IDE via the Language Server Protocol
- Code generation — one unit per entity
- Test generation — one test per requirement
- Model benchmark — grades whether a model can drive compilation
The thesis
Open-ended prompts to a model are unreliable; small, well-defined ones are not. Jazyk decomposes loose documentation into many small, well-defined units — entities and the requirements attached to them — so everything downstream operates in the reliable regime.
The graph, not the prose, is the build artifact. It persists across builds: nodes are created once and edited in place, ids never change, and human triage on a finding survives every rebuild. Downstream tools bind to entity ids and stay bound.
A turn, as it runs
Compilation is model-driven but harness-governed. The model reads a document's changed sections, searches the graph before creating anything, and stages mutations that commit only if every validation gate passes. From a real trace:
[reconcile-doc docs/customer.md] turn start (3 dirty, 0 stale)
→ read_section {"ref":"docs/customer.md#/customer/account-rules"}
→ search {"query":"Customer"}
← [{"id":"ent:customer","name":"Customer"}]
→ upsert_requirement {"ears":"Each Customer shall have a unique Email
address, because the Email is the login identifier.", ...}
← {"created":true,"id":"req:customer-1"}
→ set_coverage {"section":"docs/customer.md#/customer","state":"covered"}
✓ done (6 staged, 6 rounds)
Changes stay small
A rebuild with nothing changed makes zero LLM calls. Editing one sentence dirties one document: one turn reconciles it, review turns re-judge the touched entities, and the graph diff is additive. Contradictions across documents surface as sticky diagnostics with the compiler's reasoning attached.
diag:contradiction-2 error [req:payment-2, req:orders-3]
orders.md requires payment within 14 days; payment.md says 30.