cd /news/ai-agents/a-self-hostable-ai-workstation-with-… · home topics ai-agents article
[ARTICLE · art-134845] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

A self-hostable AI workstation with a coding agent and answer-checking (Flywheel 1.0.1)

A developer released Flywheel 1.0.1, a self-hostable AI workstation and coding harness that runs locally via a pip-installed Python package and connects to hosted or local models without requiring a model download. The tool includes a permission-gated coding agent called relay, a check-output command that verifies answers against source contracts with confirmed/disagreed/unconfirmed exit codes, and sealed hash-chained tool-call receipts. It also ships domain packs for finance, medicine, and law, and can emit verification checks as Lean 4 files whose kernel-settled results are separated from named axioms.

by read4 min views1 publishedSep 19, 2026

Flywheel is a self-hostable AI workstation and coding harness. You run it on your own machine, point it at any model you hold a key for or a local one, and keep a record of every run. This post walks the parts a developer touches first: install, the coding agent, check-output, and the receipt path.

pip install flywheel-verify
flywheel up

flywheel up starts the local API gateway on http://127.0.0.1:8799 and serves a browser shell there. The installed runtime uses only the Python standard library. The PyPI distribution name is flywheel-verify; the command it installs is flywheel.

No model download is required. Point the router at a hosted provider you hold a key for, or run local through ollama over HTTP, or fetch the published 14B and 32B weights. The roster reports that a credential is present, never its value.

flywheel auth login <provider>

That runs a stepwise sign-in, stores the token in your OS credential store, and the router picks it up.

Fifteen lanes are declared in the roster; ten bundle natively from hash-pinned source. List their configured state, or probe each lane's live MCP connection:

flywheel lanes
flywheel lanes --probe    # live MCP handshake per lane

Lanes cover research intake (gather), a workspace map and symbol graph (index), memory with source checks (mneme), multi-agent routing (forum), claim recheck (crucible), writing quality and AI-tell detection (articulate), and more. Each runs on its own and composes with the others through JSON.

relay is a permission-gated coding agent that works over your own folders on a local or hosted model:

flywheel relay

Stage four of a run is the capability check. It reads a shell command the way a shell reads it and names what the command is able to do, and that name settles the decision: allow, refuse with a reason returned to the model, or escalate to a person. A blocked request is not a fatal error. The reason goes back to the model, which can pick a different route, and the ledger keeps the request, the refusal, and the reason.

One honest gap the repo does not paper over: the map of executable names is curated by hand, so a command it has never seen is admitted and written down as unknown rather than silently trusted.

An assistant that rechecks its own arithmetic gets the same wrong number twice. So Flywheel checks a value against the source that decides it and reports three outcomes:

flywheel check-output --contract task.contract.json --answer answer.json --allow-commands

Exit 0 means confirmed, exit 1 means the value disagrees, exit 3 means nothing could confirm it. An unchecked value never reads as a confirmed one. The report also says whether the answer may ship: RELEASE, RELEASE_WITH_CAVEAT, or HOLD with the fields that blocked it. Inside a lane, a held answer does not accept.

Finance, medicine, and law each ship a pack of field templates for the values that go wrong the same way: a dose banded by a formulary rather than computed, a deadline counted in calendar days where the rule counts court days, an amount carried to two decimals in a currency that has none. A pack ships field shapes and arithmetic, no domain data; the authorities stay yours to supply.

flywheel packs medicine

Add --lean Answer.lean --verify-lean and the check is emitted as a Lean 4 file that the kernel runs. What the kernel settles becomes a theorem, what an outside authority decided becomes a named axiom, and one #print axioms line prints everything the result rests on.

Routed runs keep a ledger of tool names, arguments, and outputs. With sealed tool-call receipts enabled, each receipt also records the capability, the outcome, argument and output hashes, and the prior receipt's hash. Sealed receipts form an ordered hash chain, so if one receipt is invalid, later entries in that chain become unverifiable.

The end-to-end gate runs oracle to group to receipt to re-witness with no model and no candidate code executed, and exits 0 only on a MATCH:

flywheel gate

An independent witness re-runs the recorded check offline and reports MATCH, DRIFT, or UNVERIFIABLE. No learned model sits on the accept path. That is the whole point of the receipt: a run you can hand to someone who was not there, and they reach the same verdict.

On the shipped benchmark, continued pretraining on the workspace corpus did not improve general code completion: -3.05 points over 164 tasks, p = 0.40. The retired arms benchmark read +0.100 with 95% CI [-0.236, +0.420], an interval that includes zero. No capability uplift is claimed. A receipt shows the check reproduces. Whether the answer is right about the world is a separate question.

── more in #ai-agents 4 stories · sorted by recency
── more on @flywheel 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/a-self-hostable-ai-w…] indexed:0 read:4min 2026-09-19 ·