> Canonical page: https://posttrainllm.com/

a one-machine research lab · MIT

# Build a specialist. Prove it on one Mac.

Turn a stock open model into a routed specialist on one Mac — then measure every win and regression. Distill, fine-tune, evaluate, package for MLX, and inspect the result.

[Run the factory](https://posttrainllm.com/docs/quickstart/)[Inspect specialist proof →](https://posttrainllm.com/artifacts)

[Native Mac app Verified and ready →](https://posttrainllm.com/download)

historical learning run · huge-base-v1 · 200k steps · loss 4.16

- 100 % file ops · 12/12 · stock 9/12
- 55.6 % breadth · 25/45 · stock 30/45
- 0 unexpected side effects · stock 8
- 2.42 × depth wall speed · 360.50s → 148.91s

choose an entry point

## One lab, four ways in.

Build locally, work in the browser, inspect the evidence, or follow a structured learning path. Each route leads to something runnable or source-linked — not a feature claim without an artifact.

[01 Native factory Train · evaluate · package · report on Apple Silicon →](https://posttrainllm.com/docs/quickstart/)[02 Web Lab Browser training, inference, WebGPU tests, and dashboards →](https://posttrainllm.com/playground)[03 Evidence 76 attempts · 17 public artifacts · frozen gates →](https://posttrainllm.com/experiments)[04 Learning journey 9 paths · 18 recipes · 13 things to build →](https://posttrainllm.com/learn)

the thesis

## Not trying to win the frontier. Trying to reach frontier capability at a fraction of the compute — and to understand the whole machine while doing it.

 Win on the Mac. Be best-in-class at what one Apple Silicon machine can actually do — train, post-train, evaluate, serve, inspect — with no cluster and no cloud dependency.

 Learn the whole space. From y = mx + b to a self-improving factory. Techniques are reproduced locally or integrated from the best available tools, anchored to evidence, and mapped to the files where they live.

 Show the scars. Failed runs are first-class. Every attempt is logged with the decision it forced. A number without its regression is marketing, not a result.

 Build everything buildable here. If it fits on this Mac, it gets built — and packaged so that when compute arrives, the lab scales from a running start.

## The loop the runtime closes.

Each surface emits the input the next one needs. Every run ends in a schema-valid folder — config, dataset, eval, decision, report — that factory-run validates.

- 01 target file operations
- 02 data interleaved + depth anchor
- 03 post-train teacher-free ReST
- 04 eval depth 12/12 · breadth 25/45
- 05 package fused bf16 · HF/MLX
- 06 decide routed-ship

fresh paired proof · evaluated 2026-09-03 · qwen3-4b-rest-fused moved file operations from 9/12 to 12/12, removed eight side effects, and ran that slice 2.42× faster. breadth fell from 30/45 to 25/45, so the decision is retain behind the file-ops route , not promote as the general successor.

## Specialists, honest by design.

A specialist beats a generalist on its target and routes away when it shouldn't answer. Every result ships with the regression it costs.

 research routed-ship · weights 4B · MLX

### Qwen3-4B, ReST fused

Fresh requalification moved file-operations depth from 9/12 to 12/12 , removed eight side effects, and ran the slice 2.42× faster. Breadth fell to 25/45 versus stock's 30/45, so it remains an explicit routed specialist.

**file-ops gate**
 9/12 → 12/12

**breadth gate**
 30/45 → 25/45

This is a depth, safety, and speed win—not a general-capability win. The frozen breadth regression forces routed-only use.

[Artifact, evidence, and limits →](https://posttrainllm.com/artifacts/qwen3-4b-rest-fused)

 report-only candidate 0.6B · routed

### Qwen3-0.6B, routed SQL

Two adapters behind a router. Two reference-anchored DPO retries cured a policy collapse and pushed execution to 0.920 — but output hygiene is a base-model prior a small adapter can't strip. Decision: retry-data .

**synthetic exec**
 0.860 → 0.920

**clean-SQL**
 0.000

[Full artifact + blockers →](https://posttrainllm.com/artifacts/qwen06-sql-routed-v1)

[Every artifact, with evidence and blockers →](https://posttrainllm.com/artifacts)

## Current specialist evidence.

These figures belong to qwen3-4b-rest-fused . The breadth set passed its frontier-ceiling calibration. Fresh paired traces support speed and memory reporting; the route stays narrow because the candidate lost five net breadth cases.

 100% file ops hard gate · n=12

 55.6% breadth frontier-qualified · n=45

 −11.1 points versus stock breadth · reject general

 HF + MLX package fused bf16 weights

 2.42× depth wall speed 360.50s → 148.91s

[Read the scorecard, evidence, and limits →](https://posttrainllm.com/artifacts/qwen3-4b-rest-fused)

## The whole stack — audited against the code.

Not a landing-page inventory. The capabilities below map to real subcommands and repository test or evaluation evidence.

 train

Pretrain, SFT, DPO / SimPO / KTO / ORPO, distillation, ES. Full PEFT — LoRA, LoRA+, DoRA, VeRA, LoftQ, AdaLoRA, PISSA. WSD schedules, spike recovery, z-loss.

 eval

BFCL, τ-bench, lm-eval (MLX adapter), HumanEval + sandbox, SQL execution, router, MILU, MTEB. Frozen baselines, slice metrics, non-zero-exit gates.

 serve

OpenAI- and Ollama-compatible on one socket. Agent loop, tool dispatch, FSM-constrained JSON, persistent KV cache, speculative decoding, optional cloud escalation.

 package

Export to MLX, safetensors, CoreML. Quantize (GGUF / AWQ / GPTQ / HQQ), prune, merge, bake-LoRA with DoRA magnitudes. Specialist model cards.

 inspect

SAE features, ROME, MEMIT, tuned / logit lens, activation patching, linear probes, attention heatmaps. Know where the model decides.

 browser

The same model trains in a browser tab via hand-written WebGPU kernels — Memory64, FlashAttention-2, blocked matmul. A from-scratch learning track, honest negative results included.

## The lab keeps a paper trail.

Most attempts are not clean wins. That is the useful shape of the evidence: caveated mechanism proofs and non-positive boundary results stay visible, with the decision they forced and the files where the evidence lives.

[all 76 attempts resolved The result distribution, without spin. 5 worked cleanly 37 worked with caveat 34 failed, regressed, rejected, inconclusive, or superseded →](https://posttrainllm.com/experiments)

“Worked with caveat” means the mechanism was demonstrated inside a stated boundary; it is not a positive product result. The 34non-positive or mixed attempts are retained as boundary maps, not hidden as unsuccessful demos.

[learning log Ground-up, in 10 modules From y = mx + b to a self-improving factory. Each curriculum subsystem maps to an anchor in the coverage map so the learning path stays inspectable. Open the curriculum →](https://posttrainllm.com/learn)[attempt ledger What we tried Worked · failed · regressed · retried — each with a decision.](https://posttrainllm.com/experiments)[devlog How it was built Kernels, bugs, and the surprises worth more than the code.](https://posttrainllm.com/devlog)[recipes Method → recipe Not "try DPO" — a named failure mode, data, gate, and stop rule.](https://posttrainllm.com/recipes)[interpretability Where it decides Lens, patching, SAE, ROME, MEMIT.](https://posttrainllm.com/docs/techniques/interpretability/)

## Honest scope.

- A single-developer project, shipping in public, MIT.
- Mac-first — M-series, unified memory, MLX-Swift.
- Models and runs are deliberately bounded to the available hardware.
- One research-only routed ship, with missing evidence disclosed.
- A factory for specialists , not a general assistant.
- An OpenAI-compatible runtime any client already speaks.
- Not a product-default proof. The ReST package still needs a fresh, Pace-specific gate before any runtime promotion.
- Not multi-GPU or distributed. One device, one Mac.
- Not a cloud product. Nothing leaves the laptop unless you ask.

 run it — one Mac, from source

```
# build the native factory
git clone https://github.com/PostTrainLLM/posttrainllm.git
cd posttrainllm/native-mac
xcrun swift build -c release
BIN=.build/release/posttrainllm

# inspect the current factory surface
$BIN --help
$BIN factory-run validate ../runs/
```

[Full quickstart →](https://posttrainllm.com/docs/quickstart/)

## See the training loop. On a tiny model.

The browser playground is a bounded learning demo, not the specialist factory. Train a tiny GPT there, or use the native quickstart for a real Mac-local factory run.

[Run the factory](https://posttrainllm.com/docs/quickstart/)[Open the tiny demo →](https://posttrainllm.com/playground)

FIELD GUIDES / MAC-LOCAL PRACTICE

## Build the specialist, then prove it.

Evidence-first guides and articles connect the public factory to concrete Apple Silicon workflows.

[How to train your own LLM →](https://posttrainllm.com/how-to-train-your-own-llm)[Fine-tune an LLM on Mac →](https://posttrainllm.com/fine-tune-llm-on-mac)[MLX LoRA and QLoRA →](https://posttrainllm.com/mlx-lora-fine-tuning)[Evaluate a local LLM →](https://posttrainllm.com/evaluate-local-llm)[Build a trajectory dataset →](https://posttrainllm.com/agent-trajectory-dataset)[Build a routed specialist →](https://posttrainllm.com/build-small-language-model-specialist)[Long-form articles →](https://posttrainllm.com/articles)
