agentlanguages.dev
verification camp · also orchestration

Jacquard.

Effect rows on every arrow, checked and enforced as a runtime authority manifest. Content-addressed definitions, so a semantic diff and a reviewer's approval name exact canonical code. Handlers swap the world a program runs in, up to an exact probability model.

authorJosh Winters (FriendMachine)
implementationOCaml
targetNative binaries via generated C; OCaml interpreter
licenceApache-2.0
first seenJuly 2026
maturityworking compiler
markdownjacquard.md

The thesis.

Jacquard’s README states the bet directly: when most code is written by machines, the people reviewing it need the language to answer what a change can touch and how sure anyone can be about what it does. The project’s answer puts three things in the language rather than in comments or logs: the effects a function may perform, finite discrete uncertainty, and a program identity that survives renaming and reformatting.

A reviewer reads the signature to learn what a change can touch; the checker guarantees the signature is complete.

The effect row does double duty. A signature such as (Text) ->{Net, Console} Int tells a reviewer what the function may reach, and the inferred row of a runnable expression becomes the authority the runtime will ask for. Nothing outside the world is installed unless its grant appears on the command line, and code built at runtime with eval needs its own eval grant.

What it looks like.

multi effect Telemetry where {
  inventory-health : () -> Health
  payments-health : () -> Health
  error-spike? : () -> Bool
}

release-assessment : () ->{Telemetry} Assessment

-- Deterministic interpretation: production snapshot, fixture, or replay.
with-snapshot(inventory, payments, spike, body) =
  handle body() {
    | return value -> value
    | inventory-health() resume continue -> continue(inventory)
    | payments-health() resume continue -> continue(payments)
    | error-spike?() resume continue -> continue(spike)
  }

-- Probabilistic interpretation: uncertain telemetry becomes Dist choices.
with-risk-model(body) =
  handle body() {
    | return value -> value
    | inventory-health() resume continue ->
        continue(`op:sample`(health-dist(0.85, 0.10, 0.05)))
    ...
  }

Abridged from demos/case-studies/release-risk/model.jac at 2d4afab. The release policy is written once against Telemetry; one handler answers from a fixed snapshot, the other turns each reading into a weighted choice, so exact enumeration reports the probability of each release decision.

Distinctive moves.

Maturity.

Tagged releases publish Linux x86-64 and macOS binaries, an installer and a release evidence pack. Its README calls Jacquard a research prototype rather than a production language and points to docs/release/0.3/LIMITS.md for the boundary. Core ships no real network adapter; its networking examples run against deterministic stubs, scripted responses, recorded traces or probability models, and a host integration can implement the same effects instead. Exhaustive checking and exact enumeration are bounded by explicit budgets: a uniform distribution enumerates at most 10,000 values, and larger models fall back to seeded sampling or likelihood weighting, with results labelled accordingly. The 0.3 release decision records 1,194 Alcotest/QCheck cases and 78 transcript tests at the jacquard-core-0.3.0 tag. Commits carry a single human author, who describes development as largely model-assisted; recent pull requests record Codex and Claude reviews of each change.

Agent tooling.

The project site, jacquardlang.org, serves an llms.txt index, a copy of SKILL.md and the error catalogue, along with a review tour that records each command’s output from the released binary. docs/SKILL.md states that it covers installing Jacquard and writing, checking, running, testing and compiling .jac programs without a repository checkout. AGENTS.md orients agents working on the implementation. Every diagnostic carries a stable code, a cause and a next step, catalogued in docs/errors.md, and the CLI emits them as JSON with --diagnostic-format json-v1. There is no MCP server and no model-call effect. External systems sit behind an experimental, versioned host protocol: the companion jbwinters/jacquard-host repository publishes Python, TypeScript and Go SDKs, plus a protocol-level Rust adapter, that call checked Jacquard functions and implement their declared effects as ordinary services.

design DNA
  • BorunaorchestrationShared audit instinct, different unit. Boruna gates effects at the VM level inside DAG workflows and bundles hash-chained evidence per run; Jacquard puts the gate in the type of every function and ships Audit and Approval as ordinary effects with canonical hash-chain carriers, so governance runs through the same handler mechanism as the rest of the program.
  • AILANGverificationClose on authority, apart on what a handler can do. Both type effects with row polymorphism and grant capabilities per run at the CLI (AILANG's --caps, Jacquard's --allow). Jacquard's handlers can also resume a continuation many times, which turns exact enumeration of a discrete model and exhaustive testing into library code.
  • TacitsyntacticSame identity move, different source of truth. Both content-address definitions so that names and formatting stop mattering; Tacit makes the AST authoritative and hashes its canonical text with BLAKE3, while Jacquard keeps an ordinary surface syntax and hashes the canonical resolved kernel (SHA-256), erasing comments, spans and local names.
  • SEMAPRAXverificationBoth make a change's identity and authority reviewable, from opposite ends. SEMAPRAX gives each public declaration a persistent ID that survives edits and binds semantic patches to exact source revisions, so stale ones fail closed; Jacquard identifies a definition by the hash of its canonical structure, so any real edit, including one to a callee, yields a new identity that an earlier approval no longer matches.
§ history

Timeline.

Jul 2026
First commit (3 July) and Jacquard Core 0.1 release candidates (11–12 July), with the public .jac surface syntax over the .jqd kernel notation.
Aug 2026
Jacquard Core 0.2.0 (15 August) adds structured concurrency, canonical Audit chains, proposal-bound Approval and checksum-verified binaries for Linux and macOS.
Oct 2026
Jacquard Core 0.3.0 (7 October) adds computation fuel, opaque types and observation policies; Linux and macOS binaries ship with an installer.