Skip to main content
StarForge — a control plane for LLM post-training: environments, train, evaluate, playground, deploy, with reflow closing the loop StarForge — a control plane for LLM post-training: environments, train, evaluate, playground, deploy, with reflow closing the loop StarForge is the control plane for everything around a post-training job. It governs who may run what, on which approved runtime and data, on which GPUs, under which quota — and carries the result back: metrics, logs, evaluations, artifacts, a model version, a deployment, and the production traffic that becomes the next version’s training data. It is deliberately neutral about two things. Which framework trains the model — NeMo-RL, verl, TRL, OpenRLHF, or your own — and which backend runs it: Docker, a bare-metal agent, KubeRay or Slurm. One JobSpec expresses the intent; the platform carries it to any of them. What it does not do is own what runs inside the job. That belongs to the training framework and to your code.
Four commands from an empty directory to a GRPO run on a GPU cluster, with the loss curve streaming into a web console. Your laptop never holds a cluster credential.

Quickstart

Install, log in, submit, and watch the first data point land on the chart.

Core concepts

Experiment, run, recipe, profile, executor — the nouns everything else uses.

What it does

StarForge is a control plane for the whole post-training lifecycle. It parses, validates, stores, schedules and distributes work — and deliberately does not own what runs inside a job. Training frameworks own that.

Pick your path

I want to train a model

Quickstart, then submitting, sweeps and pipelines.

I want to extend the platform

Nine extension points: recipes, benchmarks, environments, rubrics, plugins.

I have to run this thing

Four executors, 233 settings, auth, storage, upgrades.

A run, end to end

1

Scaffold

sf init creates a project. sf new copies a method template into experiments/<name>/ and pins the exact recipe and framework version in recipe.lock.json.
2

Validate

sf validate checks types, ranges and batch-size divisibility against the method declaration — on your machine, in seconds, before anything is queued.
3

Submit

sf submit packages the working tree, refuses to include anything that looks like a secret, and hands the job to the server. Admission checks quota, the recipe handshake, and the image allowlist, then queues it.
4

Observe

The job reports lifecycle marks, metrics, samples, logs and artifacts back through ingest. The console charts them live.
5

Decide

Score it with sf bench, compare it against previous runs, chat with it in the Playground, export it to HuggingFace format, or register it as a model version and deploy it.

What runs where

The control plane never executes third-party code, and a trainer never receives the raw contents of a protected dataset. Both are structural, not policy: see extension points.

Two repositories

Submissions need a clean git tree, or --allow-dirty. It is the cheapest way to make a result traceable to an exact commit six months later, when it matters and nobody remembers.