Jacquard for coding agents
Models have seen almost no Jacquard. The language is kept small enough that an agent can work from one file, SKILL.md (about 43 KB), which covers installing Jacquard and writing, checking, running, testing and compiling programs.
Load the skill
SKILL.md carries skill frontmatter. In Claude Code, save it as a project skill:
mkdir -p .claude/skills/jacquard
curl -fsSL https://jacquardlang.org/SKILL.md -o .claude/skills/jacquard/SKILL.md
For Codex and other agents that read AGENTS.md, save the file
in the project and point to it:
curl -fsSL https://jacquardlang.org/SKILL.md -o JACQUARD.md
echo 'Before writing Jacquard (.jac), read JACQUARD.md.' >> AGENTS.md
This copy matches the 0.3.0 release. A copy for another release
is at docs/SKILL.md under that release's tag in the
repository.
The loop
SKILL.md recommends this workflow. In short:
-
Write public code in
.jacand runjac fmt --write. -
Run
jac check FILE.jac --print-sigsand review every inferred effect. The rows are the first thing a human reviewer reads. -
Before running, check the intended grants with
jac check FILE.jac --manifest console,net, and keep them no broader than the task needs. -
Put behaviour in Warp
CaseandProptests. Fix seeds for sampled runs; prefer exact enumeration and--exhaustivefor small finite models. - Treat diagnostics as the contract. Do not add grants, relax manifests or update expected transcripts to make an error go away.
Diagnostics are instructions
Every diagnostic has a stable code, a cause and a next step:
$ jac run greet.jac
error[E0814]: The program requires an effect that was not granted
Cause: This program requires console [world/low] — talk to the process terminal, which is not granted (performed via `greet`).
Next step: grant it with --allow console, or handle the effect in the program
[exit status 3] --diagnostic-format json-v1 emits the same information as JSON,
and errors.md lists every code.
Things models get wrong
-
Missing grants are expected refusals, not configuration bugs. Fix them
with
--allowonly when the effect belongs in the program. -
There are no modules or imports, records, null, guards, or-patterns,
custom operators or typeclasses. Arithmetic is ordinary function calls
such as
mul(acc, n). - Probability is finite and discrete. There are no continuous distributions.
-
jac testrejects bare top-level expressions in test files (E1001). -
--allow fsand--allow netgrant a whole effect. Use a host sandbox when you need narrower authority.
Files for agents on this site
- /llms.txt: a short index of this site.
- /SKILL.md: the standalone guide.
- /errors.md: the diagnostic catalogue.
- /docs-source.txt: the repository tag these copies come from.