One binary, the whole loop.
Everything ships in hale: build, run, test, format,
document, benchmark, verify — plus a language server and an MCP server.
The same fast, structured diagnostics reach every author: an editor, a
CI job, a coding assistant.
The compiler as the oracle
hale check answers in ~10 ms with structured,
location-precise diagnostics — fast enough to run on every keystroke,
legible enough to act on without archaeology:
// you write:
locus Reader {
bus { publish Frame; }
}
// hale check:
// error: publish references unknown topic 'Frame'
// (no 'topic Frame' declaration in this file) Unknown fields, unknown topics, and methods that return a managed entity are all hard errors — whole bug classes stopped at build time.
Editor integration
hale lsp speaks the Language Server Protocol: diagnostics
as you type, hover, go-to-definition, and completion in any
LSP-speaking editor. hale fmt keeps a canonical style;
hale doc renders API reference from ///
comments (--json for machine consumption).
MCP server
hale mcp (built into the binary) exposes the toolchain over
the Model Context Protocol — hale_check /
hale_build / hale_run / hale_fmt /
hale_fetch and hale_docs_search — for any MCP
host, including shell-less ones.
Machine-readable docs
The documentation ships in forms built for programmatic consumption: llms.txt (index) and llms-full.txt (the full spec corpus), plus bundled context packs — essentials, spec, and real-world gotchas in one file. The slim pack (~14k tokens) fits comfortably in a context window.
Context pack — slim Full pack llms-full.txt
Project rules files
Ready-made rules files distilled from the style guide — the two-channel discipline, the pattern catalog, the gotchas — in the formats coding tools pick up automatically: