Point Claude Code at any headless AI workload — a cron job, a skill, a bare prompt — and migrate it to a local LLM with a derived, per-workload quality eval.
The bar is not frontier parity. It's good enough, and works — proven, not assumed.
Receipts. Two production report pipelines (~15 LLM seats) migrated end-to-end on a 27B local model and cut over with no frontier fallback — what broke and what held is in docs/receipts/DOGFOOD-REPORT.md; the recipe is docs/CUTOVER.md.
| Stage | Skill | Output |
|---|---|---|
| 1. Explore the workflow | /localshift:explore |
WORKLOAD.md — goal, dataflow, tools, context footprint |
| 2. Design the eval | /localshift:design-eval |
EVAL.md — quality dimensions, measurement apparatus, good-enough bar, feasibility verdict |
| 3. Build the framework | /localshift:build |
task.yaml + checks.yaml + judge.md |
| 4. Replicate locally | /localshift:replicate |
Local runs + traces + artifacts via the claude-free runner |
| 5. Evaluate 1v1 | /localshift:evaluate |
EVAL-REPORT.md — blind local-vs-frontier judging → migrate / conditional / keep-frontier |
| 6. Cut over | /localshift:shift <fast|slow> |
CUTOVER-<mode>.md — the no-fallback cutover plan: fast (whole pipeline at once, optimize after) or slow (seat-by-seat, verdict-gated). Recipe: docs/CUTOVER.md |
| Receipts (anytime) | /localshift:savings |
Aggregates runs/ledger.jsonl into a receipts table — calls/day moved off frontier, token volume, honest API-equivalent dollars (cost floor at posted rates) |
Claude Code does the exploring, eval design, and judging (interactive). The migrated job runs claude-free in cron via bin/localshift on the LocalHarness runtime — any OpenAI-compatible local endpoint (vLLM, Ollama, llama.cpp). LocalHarness is the load-bearing dependency, not just the executor: the eval frameworks Claude designs are built around LocalHarness's measurement apparatus — its tool surface, JSONL event traces, token accounting, and budget enforcement are what every check, bar, and feasibility verdict is grounded in.
Honest verdicts are the product: workloads that don't fit local hardware (context window, memory, missing tools) or miss the quality bar get keep-frontier, with receipts.
New here? Walk the whole journey on one example workload: docs/JOURNEY.md.
- Routers keep frontier in the loop by design; LocalShift ends in a no-fallback cutover — the frontier calls are deleted, not proxied.
- The bars are derived from your own workload's traces and artifacts, not transferable benchmarks — a routing threshold tuned on someone else's distribution says nothing about your cron job.
- keep-frontier is a first-class verdict with receipts, not a silent fallback path.
/plugin marketplace add ahwurm/localshift
/plugin install localshift@localshift
Dev: claude --plugin-dir /path/to/localshift
Runner prerequisites: Python 3.12+ and uv; run uv sync
inside the plugin dir. Local runs need an OpenAI-compatible endpoint — see
docs/LOCAL-ENDPOINTS.md.
LocalShift pins its LocalHarness runtime by
commit; to move the pin, use bin/bump_localharness.sh and read
docs/UPDATING.md — upstream is pre-1.0 and the doc carries the
honest break history (every bump so far changed something).
v0.1 — launching alongside LocalHarness. Part of the Local__ family. MIT.
Working today: the claude-free runner (validate / run / check / ledger / budgets /
sandbox, honest exit codes, append-only run ledger with endpoint-sourced model identity,
bounded endpoint-readiness wait for cron cold starts, single retry
on the instant-completion transient class), the deterministic check engine (structure/forbid/
diff/size-band rules, per-file glob coverage), substance gates that structure checks can't
replace (content-count gate; a chart value gate — every plotted numeric must exist in the
source data — validated against a real judged fabrication), a quarantined web-researcher
subagent (self-hosted SearXNG, search+fetch only, parent never sees raw pages), blind 1v1
staging, full-pipeline chain runners with per-seat receipts, and the six pipeline skills
(including shift — the fast/slow cutover).
Dogfood receipts: two real production report pipelines (≈15 LLM seats — research sweep, thesis-lens reasoning, QA, per-ticker market research, chart generation, writer, review gate) taken end-to-end on a 27B local model: backtested against captured frontier answer keys, judged per seat, then cut over with no frontier fallback. Every seat's verdict, the failures included, is in the workload EVAL-REPORTs — keep-frontier and conditional verdicts are receipts, not embarrassments. Run records are honest by construction: stale artifacts, budget-killed turns, and lost token counts are recorded as exactly that, never as green.