Est. 2026 — Wellington, NZ

AREEL

A small workshop for open source software. Each one exists to demonstrate an idea — something nobody has built yet, or something that adds to work that already exists.

The meaning of areel +
areel /əˈriːl/

There is no clever acronym. AREEL is a record — twelve tracks by ariiol — and this domain is named after it.

I love this album. It is the kind of record that gives something back on every listen, and the name stayed with me long enough that I wanted it over the door. The flat grey, the single magenta sweep and the checkerboard on this page are all lifted from its cover.

All of that credit belongs to ariiol. The name is the best thing on this page and it was never mine — so if you have read this far, give the record the half hour it deserves. It is the better work.

Press play.

Side A AREEL · ariiol · 2026
01 / Works

What's shipped

HydrogenH₁

Self-hosted LLM proxy. The trick is Micro Agents — multi-stage pipelines any client calls as one model.

Live TypeScript MIT Self-hosted

The core — Micro Agents

One model name in.
Many model calls out.

A Micro Agent embeds a workflow inside a single model call. The client asks for one name and gets one answer back. Every stage in between is invisible to it, so nothing on the client side changes.

A stage can transcribe an image into text, and a model that cannot see answers anyway. That is only the obvious one — what the stages do is up to you. The limit is your imagination.

Inside one call

Client sends one model name + an image
one call in
Stage 1 — read a vision model transcribes it
text replaces the picture, inline
Stage 2 — answer a text-only model replies
one answer out
Client gets one ordinary response
In practice
01

Re-evaluate before response

Several models think it through together.

One model drafts, a second argues with it, and the draft comes back sharper. More than one mind on every answer — the client only ever sees the final one.

draft · strong model critique · another strong model critique says “APPROVED” → return draft → end else fall through ↓ revise · strong model → end

Costs one extra call. The second model can be shown your tools without being able to call them.

02

Pay by difficulty

A weak model picks the expensive one.

Stage 1 runs your cheapest model and does nothing but grade the request. Its verdict picks the path — hard work goes to the strong model, the rest falls through to the cheap one.

triage · cheap model output contains “HARD” → strong model → end else fall through ↓ answer · cheap model → end

Grading costs one cheap call. Branch on a regex instead and a router stage spends nothing at all.

FishBall鱼丸

Search agent for Android. The trick is refusing to guess — every claim traceable to a graded publisher, or no claim at all.

Live Kotlin MIT Android

The core — sourcing you can check

Every answer names
where it came from.

Each result is graded by who published it — a regulator, an edited institution, a named individual, or an anonymous post — before a word is written. The grade sits under the answer and changes its wording, so a claim resting on one forum thread never sounds like one resting on a health ministry.

When nothing above the bottom rung turns up, it says so rather than answering. An unsourced answer looks exactly like a good one minus a citation nobody notices is missing.

Inside one question

Thinking…
  • Searched — 9 results back
  • Read the drug regulator’s leaflet
  • Graded every publisher
  • Searching the other way now
  • Checking each quote against its page

Yes — the most common side effects are in the gut, and the drug regulator’s own leaflet lists nausea and heartburn first.

In practice
01

Quotes are cut, not written

The model points. The verifier cuts.

When a source's exact words appear, the model never types them. It selects a span, and that span is sliced out of the retrieved page and checked character by character before anyone sees it. No path through the code lets an invented quote reach the screen.

select · model names a span verify · sliced from the fetched page matches → quote shown → end else rejected ↓ retry · model told why → end

Costs nothing extra when the model quotes honestly, which is most of the time.

02

It argues with itself

A second search tries to prove the first wrong.

On anything that matters the app searches against what it just found. If the two sides disagree it shows both and says so. Silent agreement with the first page read is how a confident wrong answer gets made.

support · what the question asked disconfirm · the opposite claim they agree → answer plainly → end else fall through ↓ show both · name the disagreement → end

Costs one extra search round. It is why a health question takes twenty to forty seconds.

02 / Pending

More is on the bench

Other units are mid-build. They land here when they are good enough to hand to somebody else.

More projects
coming up

Agent runtimes, developer tooling, and a few things that do not have a category yet. Nothing gets a slot on this page until it installs cleanly, documents itself, and survives someone else's machine.