ACI family · the symbiotic pair · the stack pipeline
Eskimo BrothersHuman ACI ⇄ Machine ACI · the same conversation, two skins
Two members of one ACI Core. HACI is the human-facing skin — Markdown, the document, who-said-what for people. MACI is the machine-facing skin — JSON, the message, who-said-what between agents. They aren't two formats; they're one conversation that converts losslessly between document and message form. Brothers, because they share — here, the same exchange. (The name's a wink. The plumbing is serious.)
the two brothers
MEMBER H · the human skin
HACI
form Markdown profile · the document marks ! human · ? question · > evidence · case reads single-pass, deterministic, no LLM ext .haci
the live converter — write to one brother, watch the other
Type HACI on the left. It is parsed by role and emitted as a MACI message stream on the right — each block becomes a message, adjacency becomes refs. Flip the arrow to go back. The round-trip is honest about its one lossy seam: HACI's line-adjacency only implies the graph that MACI's refs state outright.
conversion ported from maci.py (haci_blocks_to_maci / maci_to_haci_text)
HACI · the document
MACI · the message stream
the shared core — what both inherit
1Deterministic communication. role is assigned by rule, never inferred — no NLP, no model in the loop.2Explicit attribution. every line / message names its author and authority.3Intent ↔ evidence separation. a command, a proposal, and a measured fact are never the same token.4Minimal syntax. HACI adds two symbols; MACI adds two roles. The grammar fits on an index card.5External anchoring. valid Markdown / valid JSON — readable and parseable by tools that never heard of ACI.
Extensible by accretion, never revision: DACI (distributed) is the reserved third brother. New members inherit the core; they don't rewrite it.
the stack pipeline — how a brother is forged
Neither brother is hand-waved into being. Each runs the same gauntlet: write the spec in its own format, build the reference parser, lower to an intermediate form, then attack it — a project validator that grows version by version, doubled torture suites, and an adversarial engine that runs until it finds a failure, captures it, and drives the next patch.
1 · THE SPEC — written in its own format
haci-spec.haci is HACI describing HACI; maci-design.haci is MACI's design, also written in HACI ("eat the family's dog food"). The HACI spec self-hosts: it parses correctly under its own rules.
haci.py — ~150 lines, a ~40-line lexer, one regex, O(n), zero role-specific special cases. maci.py — Message + Conversation, the eight validation rules, Kahn's-algorithm cycle detection, chain-walk, and the HACI↔MACI converter.
haci.pymaci.pysingle-pass
3 · THE IR
A lowered intermediate representation (haci_ir.py → sample.ir.json): blocks as structured, tool-addressable nodes — the bridge from text to machine handling.
haci v5.ir.json
4 · THE PROJECT VALIDATOR — v1.1 → v2.8
Beyond a single file: validates an entire HACI project tree (memory / code / runtime) and its commit gates. Grows by patch — e.g. v2.7's pending-parent-scope gate: a child symbol may not stay committed beneath a pending or uncommitted parent, even in non-strict mode.
v1.1v2.0–v2.6v2.7 parent-gatev2.8
5 · THE TORTURE SUITES
Doubled adversarial test batteries (×2, v2.4 → v2.8) that hammer the validator with malformed, deeply-nested, and contradictory projects to confirm it holds.
torture ×2v24 · v25 · v26 · v27 · v28
6 · AUDIT / TORTURE-TO-FAILURE
The engine that runs until it breaks something: it fuzzes projects until a real failure is found, writes it to FAILURE_FOUND/ with a reason, and that captured failure becomes the next version's patch. The audit that found v2.6's gap is exactly why v2.7 exists.
what this is. a domain for the symbiotic two-member stack: HACI (human, the H member) and MACI (machine, the M member), each a defensive publication under the Technical Disclosure Commons (prior art, not patents), both inheriting the ACI Core. The full development pipeline — spec → reference impl → IR → project-validator (v1.1→v2.8) → torture suites → audit-to-failure — is real and ships in the family repos. The converter above runs the actual ported logic in your browser.
honest line. the validators enforce HACI project structure and commit-scope rules; the "audit-to-failure" is adversarial fuzzing, not a formal proof. v0.1 specs, working PoCs, a third brother (DACI) reserved.
the name. "eskimo brothers" is the joke; the truth under it is symbiosis — two skins on one conversation, neither complete without the other.