The product
gm
A command that invents the code you asked for, writes the tests that would catch it lying, runs them, and keeps going until they pass.
$ gm "a URL-safe base64 encoder and decoder with round-trip tests" round 1: hallucinating... round 1: 3 files (package.json, src/base64url.ts, test/base64url.test.ts) round 1: verifying with node --test test/base64url.test.ts round 1: failed (exit 1) in 0.1s round 2: hallucinating... round 2: verifying with node --test test/base64url.test.ts round 2: passed in 0.2s PASS /path/to/out (2 rounds, node --test test/base64url.test.ts)
Exit code 0 on PASS and 1 on FAIL. It drops into a script or a CI step without anything having to read its mind. There is no daemon, no editor plugin and nothing to sign into.
The loop
-
Invent it whole
The model emits a complete file set in one object: every path it references is a path it wrote. Stubs, TODOs, patches and fragments are rejected before anything touches the disk.
-
Prove it by running
The model also names the command that would falsify its own work, and that command actually executes. Nothing is called finished because it looked finished.
-
Feed the failure back
The command, its exit code and its output become the next round's context. Rounds continue until the suite is green or the budget runs out. A run that never goes green says so plainly.
What a run leaves behind
Every round is written to .geniusmoment/run.json inside the output
directory: the spec, each round's files, the verification command, its exit code and
its output. A green result is reproducible without the tool, and a red one is
diagnosable without guessing which round did what.
Options
| Flag | Default | What it controls |
|---|---|---|
--out <dir> | ./gm-<timestamp> | Where the code lands. |
--rounds <n> | 4 | Hallucinate/verify cycles before giving up. |
--endpoint <url> | $GM_ENDPOINT | The inference endpoint to generate against. |
--model <id> | $GM_MODEL | Which model serves the request. |
--timeout <sec> | 300 | Hard ceiling on a single verification. |
--gen-timeout <s> | 600 | Hard ceiling on a single generation. |
--force | off | Allow a non-empty output directory. |
--quiet | off | Print only the verdict. |
Generated paths are treated as hostile
Every path in a file set is model output, so it is checked rather than trusted.
Absolute paths are refused. Anything resolving outside the workspace is refused.
Between rounds, only the files the previous round wrote are removed. Whatever you put
in the directory yourself is never touched. A non-empty output directory is
refused outright unless you pass --force.
Verification runs under a hard timeout with a bounded output buffer, and the commands it will run are constrained: no network and no install step, so a suite has to pass on a bare machine with only its runtime present. A verification that needs to reach the internet to succeed has not proven anything about the code.
Runtimes
Node and its built-in test runner are the default today, and the one a request falls back to when it does not name a language. Python, Go and shell are the next runtimes in the training set. The rule that governs all of them is the same: if this machine cannot execute the verification, we do not generate training targets for it.
What it will not do
gm does not answer questions about the past, and it never will. It is pointed at code that does not exist yet, never at facts, dates, events, citations or what happened. See the boundary.
Early access
Tell us the spec you would hand it first and which runtime you live in. That is what decides the order we open it up.
Get early access