≥ means at least: Hermes has one request without token counters. Its saving is measured against the recorded requests alone.
YOUR CODEX ACCOUNT. A BETTER FACTORY.
More from Astra.
Put Codex inside BANTAM FACTORY. Across two paired runs, the same Astra finished sooner with fewer tokens. Every delivered tool passed all five acceptance checks.
Job planner · Astra, medium effort · two paired runs. Prefix-cache tokens are included in input.
Build an app. Fix a stubborn bug. Automate the boring part. BANTAM FACTORY gives your model the tools, context, and checks to finish the job—on your own hardware, or with your Codex account.
git clone https://github.com/BANTAM-ADMIN/bantam-factory.git
cd bantam-factory
npm ci
docker pull alpine:3
npm link
bantamfactory setup
Then open any project, run bantamfactory, and ask for what you want.
Linux / WSL2 · Node.js 20+ · Git · Docker Setup connects your local model or signed-in Codex CLI.
Open a folder and ask, the way you'd ask Claude Code or Codex: build me this, fix that, write the script that does the boring part. BANTAM FACTORY builds a factory around your model and hammers out the work to your spec, fast.
Astra inside BANTAM FACTORY. Moonstack in 5m 57s, with 13 passing tests. 78% less input and 12% less time than the saved native Astra build.
A test result is the factory's instruction, not its report card. When the suite fails, the failing test and its reason go straight back to the worker as the next thing to fix. Reading and reasoning do not count as verification; running does.
Building for the web? Astra can check desktop and phone layouts in one preview action. Each screen size gets its own result, so a working desktop can't hide a broken phone.
Stream framer, a repair job. The starter dropped the last line of a stream that arrived one byte at a time. The failure named the test, the worker made two edits, and the suite passed.
Stations that push back.
Between the model and your files sit stations. They compare an edit against the file before it lands, list every other place a changed symbol is used, and notice when the worker has edited eight times without running anything. Then they say so, in the same feed the model reads.
Each message here was printed during a recorded run. None of them are decoration: a station that refuses an edit refuses it, and a station that runs the tests for the worker reports the result.
Reviewed before it's called done.
A supervisor reads the delivered work against the job and proposes a case it might get wrong. The worker has to run it. A console message is not enough to close the case: the factory keeps an executable assertion as regression cover, then runs your check once more on the final files.
Here the supervisor questioned fractional byte limits. The implementation already rejected them, and the proof stayed in the workspace as a contract check.
Put it in the ring.
A fight card is one job, one starting point, independent checks, and a recorded clock. Same task, same local model, different harness. Bring your own competitor and run the card yourself; the terminal prints a local page with every action and every file each contender delivered.
Context packet: BANTAM FACTORY finished in 58.1 seconds. Hermes, running the same Qwen 27B, took 512.2 seconds. Open the card.
A workshop with walls.
You choose the project the factory can edit. Its file tools refuse paths that escape that workspace, including through symlinks. Shell commands run in Docker by default, with networking off and the container's system files read-only.
Need something from the internet? The interactive session asks you first. Here an edit outside the project is refused, and a declined network request stays blocked. The factory can work on the files inside the project you gave it.
Your hardware. Or your Codex account.
Run a local model through llama.cpp, or point the factory at a signed-in Codex CLI. Setup checks Node, Docker, and the model server, and offers a guided model download for supported NVIDIA GPUs. Vision and MTP acceleration depend on your model and server. Compatible companions are optional; nothing is bundled.
Shell commands from the model run in a Docker sandbox with the network off. An interactive session asks before it turns the network on.
The factory improves the factory.
Every job leaves a record of friction: rejected edits, invalid outputs, runs that overran their turn budget. The self-improvement cycle reads that record, picks a weakness, builds a candidate change in a separate copy, and tests it against the protected baseline before anything is promoted.
You start the cycle. It is experimental, and nothing changes the running code on its own. How a cycle works.
SAME MODEL. SAME JOB. DIFFERENT HARNESS.
Give Codex a factory.
Put Astra, Sol or Terra to work with the Codex account you already have. The factory keeps the next step focused and checks the result. Here’s the same work in both harnesses.
Astra
2 paired runs
46%
less input1.2× faster
BANTAM FACTORY80,952
Native CLI150,656
Astra: recorded totals across 2 paired runs
Recorded totals
Factory
CLI
Output tokens
4,826
5,911
Prefix cache tokens
38,272
128,512
Wall clock
176.2 s
215.8 s
Jobs completed
2/2
2/2
Sol
2 paired runs
44%
less input1.8× faster
BANTAM FACTORY154,939
Native CLI277,718
Sol: recorded totals across 2 paired runs
Recorded totals
Factory
CLI
Output tokens
6,534
12,621
Prefix cache tokens
103,168
241,152
Wall clock
245.7 s
445.0 s
Jobs completed
2/2
2/2
Terra
1 paired run
73%
less input2.3× faster
BANTAM FACTORY50,313
Native CLI188,100
Terra: recorded totals across 1 paired runs
Recorded totals
Factory
CLI
Output tokens
1,931
5,548
Prefix cache tokens
35,072
168,192
Wall clock
52.8 s
123.4 s
Jobs completed
1/1
1/1
Context Packet · medium effort · identical starting files and independent checks. Repeats are summed. Prefix cache tokens are included in input tokens.
Astra found a blind spot in the decoder’s tests. Sol’s revised suite caught a planted bug that the other three suites missed. Open the complete work and compare both models’ tokens.
Same job. Same model. See what the factory changes.
11 recorded jobs. The same work order, starting files, and independent checks for each contender. Local contenders use the same Qwen 27B weights; Codex uses GPT-6 Astra through its own CLI. Open any result for the complete record.
Recorded outcomes and wall time by work order and harness
Times are wall clock. “Output only” means the files passed the checks, but the attempt did not complete within the recorded limit. Missing attempts are marked “Not run yet.”
Local rig: NVIDIA RTX 4090 · 24 GB. Recorded BANTAM FACTORY generation speeds: 82.6–105.2 tokens/second; other local harnesses: 60.6–77.8. These ranges use complete saved generation timings. Each card includes the hardware, timing coverage, and model settings.
A few things worth knowing so the first run goes the way you expect.
Linux or WSL2. Node.js 20 or newer, Git, and Docker. The sandbox is the official alpine image. Native Windows is unsupported and macOS is untested.
A model. Either a llama.cpp server with a capable model (the recorded cards use a 27B model at 4-bit, which wants a 24 GB GPU) or an installed, signed-in Codex CLI. Setup walks through both.
Checks are optional, and worth it. Add --verify "npm test" and the factory runs your tests after its edits and repairs from the failures.
Run records stay private. Saved runs can contain your code and prompts. Fight cards have a separate, reviewed public export.
Self-improvement is opt-in. It is experimental, runs only when you start it, and never applies a change that has not passed its checks.
THE LAB IS OPEN
Talk to the lab.
Questions, ideas, or business inquiries? We’d like to hear from you.