Spec-driven fine-tuning for small open models.

One file describes your model. The agent edits it, you approve, and it trains on your GPU.

Install
$ curl -fsSL https://tunedtensor.com/install.sh | sh

Linux or macOS. No account needed for local commands.

tt
your laptop

tt v0.21.0 Tuned Tensor

spec ticket-router · Qwen3.5-2B · 180 examples

agent tunedtensor/managed · workflow model base

MACHINE ─────────────────────────────────────
GPU   RTX 4090       █░░░░░░░░░  12%  2.1/24 GiB
CPU   16× Ryzen 9    █░░░░░░░░░   8%  load 0.62
RAM   system memory  ███░░░░░░░  31%  19.8/64 GiB
Tune  ✓ LoRA Qwen3.5-2B ready

▀▄ tt › Ask TT anything. Known commands run directly.
› ▊

How it works

The agent edits the spec. The spec drives the pipeline.

You

ask for a change

tt agent

drafts a diff

tunedtensor.json

you approve

Train

LoRA on your GPU

Evaluate

base vs tuned

The report shows which cases regressed. That's your next edit.
An edit, approved
local
› Answer with one label. Add examples of refund requests.
▀▄ tt › I read tunedtensor.json and drafted this edit.
@@ constraints @@
- "Keep answers short."
+ "Answer with one lowercase label: billing, bug, account, other."
@@ examples @@
+ {"input":"I was charged twice, please refund","output":"billing"}
+ {"input":"Cancel and refund my annual plan","output":"billing"}
? Save this spec edit? y yes · n no · esc decide later
✓ Spec edit saved.
tunedtensor.json

{

"base_model": "Qwen/Qwen3.5-2B",which model
"system_prompt": "Route support tickets.",instructions
"constraints": [ … ],rules it must follow
"examples": [ 180 items ],training data + eval cases
"hyperparameters": { "lora_rank": 16 },how it trains
"evaluation": { "scoring": … },how it's judged
"runtime": { "gpu": … }local GPU or AWS

}

Why a spec

One file instead of six.

Already use a coding agent? It can drive tt too, through skill.md.

General coding agent

train.pytrain_v2.pyconfig.yamldata_final.jsonleval.pynotes.md
Edits land in whatever file the agent touches.

tt

tunedtensor.json
trainevaluateserve
Every change is an approved diff to one file.

Train, evaluate, serve

See whether it got better.

Base and tuned models, scored on the same cases.

Train, compare, serve
local
› doctor
✓ GPU, uv, and spec look ready
› pipeline run --spec tunedtensor.json
spec tunedtensor.json · sha256 3f9c1d…
pass rate  61.5% → 89.0%  (+27.5 pts)

› runs report 8f3a
base and tuned scores · case results · evaluation gates
› models verify local-8f3a
✓ adapter checksum matches the run record
› models serve local-8f3a
OpenAI-compatible  http://127.0.0.1:8000/v1
Email triage pass rate
+27.5 pts
Base
61.5%
Tuned
89.0%

Qwen 3.5 2B, 8,000 public training examples, 200 held-out test cases. Results depend on your task and data.

Read this spec

Before you start

Best for focused tasks.

Good for

JSON extractionClassificationTriageRoutingTool selectionPolicy adherence

Base models

  • Qwen/Qwen3.5-2Bdefault
  • nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16DGX Spark
  • meta-models/Muse-Glimmer-30BDGX Spark, text only

You need

  • Linux + NVIDIA GPU, local or on AWS
  • uv
  • Examples that look like real inputs

Write your first spec.

Run tt in an empty folder and describe the model you want. Use tt auth login for the managed agent model, or bring your own OpenRouter key.