From zero to a fine-tuned model in under an hour.
Liquid Harness is a terminal agent that turns a plain-English description of your task into a small, fast, task-specific Liquid Foundation Model. You describe the problem; the agent interviews you, writes the specification, generates and curates training data, fine-tunes, evaluates, and iterates until the model beats baseline. No ML experience required.
Important
uv tool install lqh # or: pip install lqh
lqhLarge general-purpose models are expensive, slow, and overkill for most production tasks. A 350Mβ1.2B model fine-tuned on your task is cheaper, faster, runs on-device, and often more accurate β but getting there normally requires an ML team: data pipelines, judges, training loops, eval harnesses.
Liquid Harness collapses all of that into a conversation:
- π¬ Describe your task β the agent asks clarifying questions and writes a spec.
- β Let it work β it generates synthetic data, scores every sample against a rubric, filters, runs baselines, fine-tunes, and evaluates.
- π¦ Get a checkpoint β a model that measurably beats the baseline on your task, ready to deploy.
A few things people fine-tune with lqh:
| Use case | You tell the agent⦠|
|---|---|
| π§ Support-reply rewriter | "Rewrite draft replies into our brand voice: warm, concise, never over-promising." |
| π§Ύ Structured extraction | "Turn free-form purchase emails into strict JSON with vendor, amount, and date." |
| π¦ Classifier / router | "Label incoming tickets as billing, bug, or feature request β with high recall on billing." |
| πΌοΈ Vision Q&A | "Here's a folder of product photos β I need a model that answers questions about defects." |
| π± On-device assistant | "A tiny model that summarizes meeting notes offline on a phone." |
Point it at a folder of raw, unlabelled images and it can build a vision fine-tune too β the data pipeline synthesizes the question-answer pairs for you.
# One-time: install uv (skip if you already have it)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install lqh
mkdir my-task && cd my-task
lqhuv tool install puts the lqh command on your PATH in its own isolated environment β no virtualenv to create or activate, and uv downloads a compatible Python automatically if your system one is too old. Upgrade later with uv tool upgrade lqh. On Windows, install uv with winget install astral-sh.uv.
If you already manage your own Python environments, pipx install lqh or pip install lqh work just as well.
Inside the TUI:
> /login # authenticate with lqh.ai (one-time)
> I want a model that rewrites support replies into our brand voice.
That's it. The agent takes it from there β it interviews you about requirements, writes SPEC.md, and offers to run the pipeline stage by stage. You can interject, inspect data samples, or change direction at any point.
Tip
Run /hf_login (or set HF_TOKEN) to enable private HuggingFace dataset access and publishing.
One command runs all nine stages. Each is a real artifact you can inspect, stop at, or hand off.
spec β rubric β data gen β filter β baseline β SFT β DPO β eval β checkpoint
$ lqh --auto ./my-task
[stage: rubric] writing scorer from spec
[stage: data_gen_draft] 5 samples generated, all valid
[stage: filter_validation] 1,427 / 2,000 kept
[stage: sft_initial] score 6.8/10 (baseline 4.1)
[stage: dpo] iter 3/5, score 7.4/10
[final: success] DPO checkpoint beats baseline by +3.3
You chat, the agent works. It captures requirements through dialogue, manages the specs, and drives every downstream stage end-to-end.
No DSL, no boilerplate, no ML jargon. Just describe what you want β the agent turns it into structured specs you can refine over time.
The agent authors a per-task data generation pipeline, generates samples concurrently on LQH Cloud, and scores each one with an LLM judge against your rubric. The dataset that hits training is already curated.
Bring a folder of raw images β no labels needed. The agent synthesizes an image-question-answer dataset and fine-tunes the LFM2.5-VL vision models on it.
Eval and data generation run on LQH Cloud. Training runs locally on your own GPUs, or hands off to a remote machine over SSH β including SLURM clusters β with dataset sync handled for you.
Point lqh at a directory with a spec and walk away. It either delivers a checkpoint that beats baseline or returns an explicit failure with the reason β never a hang, never a prompt.
Push and pull datasets from the Hub, publish checkpoints, and convert to GGUF for deployment.
Guide the agent, visualize progress, and inspect dataset samples β all from one terminal session with a slash-command palette and a live status bar.
Any directory is a project β fully git-compatible, so you can version, branch, and collaborate on specs, datasets, and runs like any other code. cd to switch projects.
Fine-tunes the LFM2.5 family β pick a size for your task, from tiny on-device to MoE:
| Size | Best for |
|---|---|
| 230M / 350M | Very simple tasks, extreme on-device constraints |
| 1.2B β | Recommended starting point for most tasks |
| 2.6B / 8B-A1B (MoE) | More complex tasks |
| 24B-A2B | Only when the task clearly calls for it |
| LFM2.5-VL 450M / 1.6B | Vision (image + text) tasks |
Base, instruct, and thinking variants are available; the agent recommends the right starting size and variant for your task and steps up if fine-tuning struggles.
| Command | What it does |
|---|---|
/login |
Log in to lqh.ai |
/hf_login |
Store a HuggingFace token for cloud jobs |
/spec |
Start specification capture |
/datagen |
Start data generation |
/validate |
Start data validation |
/train |
Start training (requires torch) |
/eval |
Start evaluation |
/prompt |
Start prompt optimization |
/resume |
Resume a previous conversation |
/clear |
Start a fresh conversation |
/reconnect |
Retry a failed network/API operation |
/feedback |
Send feedback (with the current conversation) to the lqh team |
/help Β· /quit |
Show commands Β· exit |
For CI, batch jobs, or when you just want a result:
lqh --auto ./my-task # runs the full pipeline against ./my-task/SPEC.md
lqh --spec "use the smallest base model" # sticky run-time directive (works in both modes)Auto mode requires an existing SPEC.md (write one interactively first, or by hand). It runs rubric β data gen β filter β baseline β SFT β DPO β report without ever prompting, and always terminates with an explicit success or failure.
lqh works with third-party harnesses such as Claude Code, Codex, and other agents. If you already live in one of them, you don't need lqh's chat interface β your agent drives the whole fine-tuning workflow for you, and you keep your familiar tools, context, and way of working.
Just tell your agent:
run `lqh hello`
That's it. Your agent learns how to drive lqh, checks where your project stands, and picks up from there β starting with the spec interview if the project is empty. To make this permanent, add one line to your project's CLAUDE.md / AGENTS.md:
Before working with lqh, run
lqh helloand follow its contracts.
cd into any directory and run lqh β the agent reads what's there to understand current state. No init command, no project marker file.
my-task/
βββ SPEC.md # the heart of the project: what you want the model to do
βββ other_specs/ # additional specs for edge cases or sub-requirements
βββ data_gen/ # generated pipeline scripts
βββ evals/ # eval definitions and results, versioned (v1/, v2/, ...)
βββ datasets/ # generated and curated datasets as parquet (v1/, v2/, ...)
βββ runs/ # training runs with checkpoints, logs, and configs
βββ .lqh/ # conversation logs and permissions (add to .gitignore)
Everything is plain files β specs are markdown, pipelines are Python, datasets are parquet. Edit SPEC.md directly any time; the agent picks up your changes on the next turn.
- Python 3.11+ (
uv tool installfetches one automatically if needed) - A Liquid Harness account (request access)
- Optional:
torch+transformersfor local fine-tuning - Optional:
HF_TOKENfor HuggingFace dataset sync
Things we're actively building. Open an issue if you want to weigh in.
- QAT with evals β quantization-aware training (train against quantization noise so the deployed quantized model matches its full-precision score), paired with local evaluation on the quantized artifact (llama.cpp) so we measure exactly what ships. GGUF export already works.
- Async runner β run
lqhasynchronously on LQH Cloud and connect from the web app or mobile, so long jobs keep going after you close the terminal. - Audio models (LFM2-Audio) β fine-tuning and data support for our LFM2-Audio series of audio language models.
Use the /feedback command in the TUI to send feedback directly to the team.
Please read CONTRIBUTING.md before opening a pull request. Random PRs will be rejected β open an issue first and agree on the approach with a maintainer; security hot fixes are the one exception. See the contribution policy for details.
Made with care by Liquid AI.