/tooling

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:

hale-check
// 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.

$ claude mcp add hale -- hale mcp

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:

AGENTS.md CLAUDE.md .cursorrules