← garnet-lang.org written at main beeb5e7b garnet-evidence 29378a36 MIT omarchy quattro 4.0.0.alpha version file capture 2026-09-02 fresh temp HOME · garnet 0.8.1 at fbd64bc5 one real seam · two locked doors

Garnet lang×Omarchy

One real seam.
The rest is locked, and says so.

Omarchy fans one agent-skill folder across its coding-agent harnesses with a symlink. garnet-evidence, the Garnet lang evidence-packet skill, installs by that same idiom and runs the checker, the capability diff, the deterministic build and the seal on every changed .garnet file. That is the union as it exists at this commit. Everything else on this page is a door with its opening condition printed on it.

An independent project by Island Development Crew. Not affiliated with, sponsored by, or endorsed by Omarchy, 37signals, or DHH. No third-party brand art appears on this page.

The spark, named and not quoted

One episode, two projects, one question

The episode behind the idea of a union is Lex Fridman Podcast #501 – DHH: Future of Programming, AI, Agentic Engineering, Vibe Coding & Linux. Nothing from it is quoted on this page. What is quoted is Omarchy's own source tree and its own sites, and garnet-evidence running.

Omarchy's front page calls it "The malleable OS for the age of agents." Garnet lang's front door says: English is how you tell an agent what to do, and Garnet lang is how anyone else can trust what it did. The turn between those two sentences is this whole page. Once the computer is malleable by agents, the hard part stops being writing the change and becomes accepting it.

The seam ledger

Where the two meet, row by row

real runs at this commit; the capture below shows it  ·  locked designed, not shipped; the opening condition is printed on the row  ·  no door not planned

real · shipped

The skill seam

Omarchy Quattro links its skill folder into four agent skill directories with ln -sfn. Verbatim, migrations/1786098807.sh:

mkdir -p ~/.agents/skills ~/.claude/skills ~/.codex/skills ~/.pi/agent/skills
ln -sfn "$OMARCHY_PATH/default/agents/skills/omarchy" ~/.agents/skills/omarchy
ln -sfn "$OMARCHY_PATH/default/agents/skills/omarchy" ~/.claude/skills/omarchy
ln -sfn "$OMARCHY_PATH/default/agents/skills/omarchy" ~/.codex/skills/omarchy
ln -sfn "$OMARCHY_PATH/default/agents/skills/omarchy" ~/.pi/agent/skills/omarchy

migrations/1786539345.sh loops the same four directories for its crash-diagnosis skill:

  for skills_dir in ~/.agents/skills ~/.claude/skills ~/.codex/skills ~/.pi/agent/skills; do
    mkdir -p "$skills_dir"
    ln -sfn "$skills_source/diagnose-crash" "$skills_dir/diagnose-crash"
  done

A later migration in the same tree, 1786719479.sh, adds a fifth directory, ~/.gemini/config/skills, for the Antigravity agent. install.sh links the four; the fifth is not in it.

source: Omarchy Quattro source tree (version file 4.0.0.alpha; MIT, © David Heinemeier Hansson), read 2026-09-02 and byte-identical to the quattro branch at fetch time

garnet-evidence is a standalone repository whose root is the skill folder. Its install.sh does the same mkdir -p and ln -sfn into the same four directories, refuses to overwrite a real directory, and checks that SKILL.md is reachable through every link. Its tests/smoke.sh builds a throwaway repository that widens one file to @caps(fs), runs the packet script with and without a garnet binary, and asserts that a fresh clone at another path recomputes the same packet.sha256.

A packet holds garnet check at HEAD and at base, garnet diff-caps --machine against base, garnet build --deterministic and garnet seal, each with its exit code and a status of green, red, unverified or n/a. Red is evidence, not a failed packet: it names the capability a reviewer must accept on purpose or the author must narrow. A rung whose tool is absent is unverified, never green.

StateBoth scripts ran for this page in a fresh temporary HOME, on macOS, not on an Omarchy install. The capture is below, unedited.

source: install.sh, tests/smoke.sh and README.md at garnet-evidence 29378a36

locked · designed

Sealed plugin manifests

Today Omarchy validates a plugin's manifest and repository layout. omarchy plugin validate is documented on the marketplace's develop page and ships as bin/omarchy-plugin-validate in the Quattro tree, where omarchy-plugin-add and omarchy-plugin-update both call it. The marketplace's publish page says, in its own words, "The marketplace validates listings, not plugin security."

Today Garnet lang's garnet seal takes one .garnet file. Its usage line, verbatim from garnet 0.8.1:

usage: garnet seal <file.garnet> [--out <path>] [--authored-by <provenance>] [--attest <key>=<value>]... [--provenance-chain]

There is no plugin flag. The design is a compiler-derived authority manifest beside Omarchy's manifest.json, sealed and diffable, so a store could check what a plugin may reach without trusting the author's description of it. It is a design.

sources: plugins.omarchy.org/develop.html and /publish.html (curl, 2026-09-02) · bin/omarchy-plugin-validate in the Quattro tree · garnet seal --help from garnet 0.8.1 at fbd64bc5

Opens whengarnet seal accepts a plugin manifest. Until then no command on this page produces one, and no sample output is shown, because a sample would be fiction.

What exists on the Garnet side today and would be reused, not invented: garnet caps emits a capability manifest for a .garnet file; garnet diff-caps reports declared authority that widened between two files; garnet seal wraps a build manifest and a capability manifest in an in-toto Statement, unsigned unless cosign is installed. The last two run in the capture below; garnet caps is not a packet rung.

source: garnet help and the packet rungs from garnet 0.8.1 at fbd64bc5

locked · designed

Capability-bounded triage

Today Omarchy Quattro watches for process crashes and hands them to the default agent with a skill. Verbatim, the first line of migrations/1786539345.sh:

echo "Announce process crashes and offer an AI diagnosis"

The skill, default/agents/skills/diagnose-crash/SKILL.md, is a Markdown file. Its front matter carries only a name and a description: no capability or permission declaration. Its body does direct reads, in prose. Line 43 is the heading "Read the whole core, not just frame 0"; lines 88–89 say "Diagnosis reads; it does not fix, tidy, or reconfigure." Nothing declares or bounds what it may read; a paragraph asks, and no checker holds the agent to it.

Today Garnet lang declares and checks authority for .garnet code: @caps on a function, garnet check rejecting an undeclared call into the registered capability surface, garnet diff-caps reporting widened authority. None of that reaches a Markdown skill, and no Garnet-bounded triage skill exists.

sources: migrations/1786539345.sh and default/agents/skills/diagnose-crash/SKILL.md in the Quattro tree · the front door's capture for check and diff-caps

Opens whena Garnet-bounded triage skill declares what the agent may read, and a checker rather than a paragraph holds it to that.

This is not a critique of the feature. A crash handed to an agent with a skill is a good idea; the evidence layer is what the idea will want once someone other than the machine's owner has to accept what the agent did with a core dump.

no door · not planned

A Garnet-infused ISO

Not planned. Omarchy's front page links an ISO; Garnet lang does not ship one, and no such item is in its plan. This row is the whole statement, and there is no door for it below.

The capture

The seam, running

$ git clone -q https://github.com/Island-Dev-Crew/garnet-evidence garnet-evidence-2 && cd garnet-evidence-2
$ git rev-parse HEAD
29378a3678cdcb509e89bb75dfea8c453772ddca
$ HOME=$(mktemp -d) bash install.sh
linked   /var/folders/…/tmp.qjMWQWN3qC/.agents/skills/garnet-evidence -> /private/tmp/…/garnet-evidence-2
linked   /var/folders/…/tmp.qjMWQWN3qC/.claude/skills/garnet-evidence -> /private/tmp/…/garnet-evidence-2
linked   /var/folders/…/tmp.qjMWQWN3qC/.codex/skills/garnet-evidence -> /private/tmp/…/garnet-evidence-2
linked   /var/folders/…/tmp.qjMWQWN3qC/.pi/agent/skills/garnet-evidence -> /private/tmp/…/garnet-evidence-2
install: SKILL.md reachable through all 4 links

$ GARNET_BIN=/private/tmp/…/target/release/garnet bash tests/smoke.sh
ok    smoke-a: garnet rungs captured as unverified, packet stamped
ok    smoke-a: fresh-clone recompute reproduced packet.sha256 4788669c846145b188f5a4863d60bbabe3bebec813d86a940236be06b60395f3
ok    smoke-b: check green, diff-caps red (fs gained), build + seal captured
ok    smoke-b: GE_STRICT=1 exits non-zero on the red diff-caps rung
ok    smoke-b: existing packet directory refused
ok    smoke-b: fresh-clone recompute reproduced packet.sha256 98c090ee44d2538c2dfe83c51da596f2ab04c45acda39631f66991d62cb2e0fe
smoke: A=pass packet.sha256=4788669c846145b188f5a4863d60bbabe3bebec813d86a940236be06b60395f3  B=pass packet.sha256=98c090ee44d2538c2dfe83c51da596f2ab04c45acda39631f66991d62cb2e0fe
$ GARNET_BIN=/private/tmp/…/target/release/garnet GE_RUNGS="worktree garnet-version garnet-check garnet-diff-caps garnet-build garnet-seal whitespace" bash …/garnet-evidence-2/scripts/garnet-evidence-packet.sh smoke-b main
garnet-evidence: garnet rungs use GARNET_BIN=/private/tmp/…/target/release/garnet
garnet-evidence: packet evidence/smoke-b  head=5eea11e8303b5171d49905d1c8b42bc48d15b20f  base=main (40541db5ec97b0eb28fc8ff048fc625cd3e5683b)
  green  worktree (exit 0) -> out/worktree.txt
  green  garnet-version (exit 0) -> out/garnet-version.txt
  green  garnet-check.src_extra (exit 0) -> out/garnet-check.src_extra.txt
  n/a  garnet-check-base.src_extra (src/extra.garnet is absent at base)
  green  garnet-diff-caps.src_extra (exit 0) -> out/garnet-diff-caps.src_extra.txt
  green  garnet-build.src_extra (exit 0) -> out/garnet-build.src_extra.txt
  green  garnet-seal.src_extra (exit 0) -> out/garnet-seal.src_extra.txt
  green  garnet-check.src_tool (exit 0) -> out/garnet-check.src_tool.txt
  green  garnet-check-base.src_tool (exit 0) -> out/garnet-check-base.src_tool.txt
  red  garnet-diff-caps.src_tool (exit 1) -> out/garnet-diff-caps.src_tool.txt
  green  garnet-build.src_tool (exit 0) -> out/garnet-build.src_tool.txt
  green  garnet-seal.src_tool (exit 0) -> out/garnet-seal.src_tool.txt
  green  whitespace (exit 0) -> out/whitespace.txt
garnet-evidence: evidence/smoke-b packet.sha256=98c090ee44d2538c2dfe83c51da596f2ab04c45acda39631f66991d62cb2e0fe green=11 red=1 unverified=0 n/a=1

$ cat evidence/smoke-b/out/garnet-check.src_tool.txt
$ garnet check --format json <work>/head/src_tool.garnet
{"diagnostics":[],"summary":{"errors":0,"warnings":0,"infos":0,"ok":true}}
EXIT=0
STATUS=ran

$ cat evidence/smoke-b/out/garnet-diff-caps.src_tool.txt
$ garnet diff-caps --machine <work>/base/src_tool.garnet <work>/head/src_tool.garnet
{"schema":"garnet.diff-caps.machine/1","verdict":"authority-expanded","authority_expanded":true,"capability_band":"2/5","exit_code":1,"aggregate_gained":["fs"],…"scope":"declared-surface-only; does not prove absence of undeclared authority; bound annotations are not part of this surface"}
EXIT=1
STATUS=ran

$ grep '"schema"' evidence/smoke-b/out/garnet-build.src_tool.manifest.json
  "schema": "garnet-manifest-v1"

$ cat evidence/smoke-b/out/garnet-seal.src_tool.txt
$ garnet seal <work>/head/src_tool.garnet --out <work>/head/src_tool.seal.json
garnet seal: predicate written to <work>/head/src_tool.seal.json
garnet seal: cosign not installed — in-toto predicate emitted UNSIGNED (wrap-don't-rebuild: install cosign to attest; Garnet does not sign supply-chain itself)
EXIT=0
STATUS=ran

$ grep totals evidence/smoke-b/ladder.md
- totals: green=11 red=1 unverified=0 n/a=1
$ cat evidence/smoke-b/packet.sha256
98c090ee44d2538c2dfe83c51da596f2ab04c45acda39631f66991d62cb2e0fe

Capture condition. 2026-09-02 (23:42 CDT · 04:42 UTC on 2026-09-03) · fresh clone of garnet-evidence at 29378a36 · HOME set to a fresh mktemp -d directory for install.sh · GARNET_BIN = garnet 0.8.1 built from main fbd64bc5 · macOS arm64, not an Omarchy install · cosign not installed · only long lines are elided with … · the packet.sha256 the smoke reports is the one the second run reproduces, because the smoke pins the throwaway commits' dates.

The exhibit, in their words

Three sentences, fetched 2026-09-02 CDT

Fetched with curl on 2026-09-02 CDT; one sentence per site, unedited, with the address it came from.

omarchy.org
"The malleable OS for the age of agents."
plugins.omarchy.org/publish.html
"The marketplace validates listings, not plugin security."
learn.omacom.io · The Omarchy 3 Manual · AI
"But you should treat this skill as experimental."

Every extension ecosystem has a sentence like the middle one, and Omarchy's is admirably plain. The bet on this page is that the sentence gets shorter by evidence rather than by policy: an authority manifest a store can diff, instead of a review it has to trust. That is the second row of the ledger, and it is locked.

Doors

What is open, and what says so

two doors are locked on purpose · a Garnet-infused ISO is not planned and gets no door