/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 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: slimFull packllms-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.mdCLAUDE.md.cursorrules