ashr · the agent

Your 100x AI Engineer.

You give it the job in plain words, and it handles the data, fine-tuning, RL, evals, quantization and serving. It runs in your terminal on your machine. It runs jobs on your GPUs and uses your ChatGPT plan or Anthropic key.

Install

ashr is in early access. We email you a private install link, then it's three commands in Terminal.

Email me an install link
Terminal
# install (the link from your email) $ curl -fsSL https://ashr.io/i/<your-link> | sh # sign in with your ChatGPT plan, or an Anthropic API key $ ashr login codex # in your repo: start ashr, then type /init to set it up $ cd ~/code/your-repo $ ashr

Example tasks

Write the job the way you'd brief an ML engineer: the data, the target and the constraints. Any modality. ashr runs independent pieces in parallel with subagents.

Language: replace an API model with your own

~/acme-support
> We send about 40k support conversations a day to GPT-6 Astra. The logs are in s3://acme-logs/support/. Distill them into Qwen3.8-27B until it matches Astra on evals/support/, serve it on our H100s behind an OpenAI-compatible endpoint, and give me cost per 1k conversations against the API.
$aws s3 ls s3://acme-logs/support/ --recursive --summarize
1,214 files, 38.2 GB, 6.1M conversations
evalGPT-6 Astra on evals/support/: 0.874 baseline
datasubagent dedupe, drop PII, keep resolved threads
servesubagent vLLM for Qwen3.8-27B on h100-1..4
working

Agents: train on your agent's own traces

~/coding-agent
> Our coding agent's sessions are in traces/ with pass/fail labels. Run SFT and then GRPO on Qwen3.8-27B to raise the pass rate on the 300 held-out tasks in evals/heldout/. Stop any run that will cost more than $2k.
$wc -l traces/*.jsonl
18,402 sessions, 61% pass
evalbase Qwen3.8-27B on evals/heldout/: 112 of 300
sftsubagent passing sessions only, 2 epochs, cap $600
planGRPO on the SFT checkpoint, cap $2,000 per run
working

Robotics: fine-tune a manipulation policy

~/ur5-picking
> Fine-tune our VLA policy on the 600 teleop demos in data/teleop/ (LeRobot format) for bin picking on the UR5. Beat the current 62% success rate in the sim eval in sim/bin_pick/, then export it to run at 30 Hz on the Jetson Orin.
$python -m lerobot.scripts.info data/teleop
600 episodes, 30 fps, wrist + overhead cameras
evalcurrent policy in sim/bin_pick/: 62.0% over 200 trials
trainsubagent fine-tune from checkpoint, action chunks of 50
exportsubagent TensorRT build for Jetson Orin, target 30 Hz
working

Biology: predict binding from assay data

~/binding
> Fine-tune ESM-2 650M on the 40k binding measurements in data/binding.csv. Split by sequence cluster so nothing leaks, beat the Spearman of our XGBoost baseline, then rank the 2M candidates in library.fasta and send me the top 500.
$python -c "import pandas as pd; print(pd.read_csv('data/binding.csv').shape)"
(40118, 4) sequence, target, kd_nm, assay_date
splitMMseqs2 clusters at 30% identity, 80/10/10
evalXGBoost baseline on held-out clusters: Spearman 0.41
trainsubagent ESM-2 650M with a regression head, LoRA
working

Speech: cut errors on your own vocabulary

~/call-asr
> Fine-tune Whisper large-v3 on the 800 hours of labeled call audio in s3://acme-calls/. Cut the word error rate on drug names and account numbers in half on evals/asr/ without making general WER worse.
$aws s3 ls s3://acme-calls/ --recursive --summarize
312,480 segments, 800.4 hours
evallarge-v3 on evals/asr/: WER 9.8%, entity WER 31.5%
datasubagent mine segments with drug names and account numbers
trainsubagent 3 learning rates in parallel, one per GPU
working

Vision: extract fields from documents

~/invoices
> Fine-tune Qwen3.5-VL-8B to extract line items from the scanned invoices in data/invoices/ (labels in labels.jsonl). Reach 98% field accuracy on the held-out split, and it has to run on one L4.
$ls data/invoices | wc -l && wc -l labels.jsonl
12,480 scans, 12,480 labels
evalzero-shot Qwen3.5-VL-8B: 81.3% field accuracy
checkL4 has 24 GB: plan for int8 weights at serve time
trainsubagent LoRA at 1,024px, hold out 10% by vendor
working

Serving: cut latency and cost

~/inference
> Our 70B endpoint has a p95 latency of 2.1s. Get p95 under 800ms on the same hardware, losing less than 1 point on evals/prod-sample/. Try FP8, a speculative-decoding draft model and vLLM tuning, and tell me what each one gets us.
loadreplay 2,000 prod requests: p95 2.14s
evalcurrent model on evals/prod-sample/: 0.712
fp8subagent quantize weights and KV cache, re-score
draftsubagent train a 1B draft model on prod traffic
vllmsubagent sweep batch size and chunked prefill
working

Training infra: fix a slow run

~/llm-8b
> Our 8B run on gpu-box is stuck at 41% MFU. Get it past 55% without changing the loss curve, then watch it overnight and roll back to the last checkpoint if the loss spikes.
profilessh gpu-box nsys profile torchrun train.py --steps 1
38% of step time in NCCL all-gather, attention unfused
fsdpsubagent overlap all-gather with backward
flashsubagent swap in FlashAttention 3, bf16
compilesubagent torch.compile the decoder block
working

Results

0.626
vs 0.433 for Claude Code, same model

Post-training on Frontier ML

Qwen3-4B-Base into a chat model for math, science and code. 12 hours, $50 of GPU.*

* Frontier ML, 12 hours and $50 of GPU per task, both agents on Claude Opus 5.5. Single runs graded with Frontier ML's verifier, not submitted to Frontier ML.

Book a call

30 minutes. Bring a training task and we'll scope it with you. Or email founders@ashr.io.

Pick a time

Get ashr

Enter your work email and we'll get in touch to help you set it up.

By continuing you agree to our Terms and Privacy Policy.