Allowance

The bot that never takes the model's word for it.

Built for Mozilla Otari · Devs Wilding Online · DoraHacks
Specimen · allowance-demo #6Otari sandbox
Assay certificateinstalled at 9259e59
  1. 1
    Expected · chunk([1, 2, 3, 4, 5], 2)[[1, 2], [3, 4], [5]]
  2. 2
    Measured in Otari's sandbox[[1, 2], [3, 4]]
  3. 3
    Decided by

    the sandbox run, not the model

Reproducedreturn code1
Otari request c3709369-eae7-4d55-8c88-dba391c10472
Allowance · v0.3.2allowance.edycu.dev
The problem with AI triage

“Confirmed” is not evidence.

A model that reads a bug report and says "confirmed" can simply agree with whatever the report claims.

Allowance · v0.3.2allowance.edycu.dev
The maintainer, Monday morning

Two bad options.

no
Option one

Hand strangers an AI key

Every outside contributor could spend the project's model budget.

no
Option two

Triage every report by hand

Reproduce each vague "it crashes" yourself.

Allowance: a small allowance per stranger, and a sandbox that decides.

Allowance · v0.3.2allowance.edycu.dev
The turn · allowance-demo #6

The model writes. The sandbox decides.

Specimen · allowance-demo #6Otari sandbox
  1. 1
    Claim

    The chunk function loses the trailing items when the list doesn't divide evenly.

  2. 2
    Expected[[1, 2], [3, 4], [5]]
  3. 3
    Written by the model · excerpt
    actual = list(chunk([1, 2, 3, 4, 5], 2))
    if actual != expected:
        raise AssertionError(...)
  4. 4
    Measured in Otari's sandbox[[1, 2], [3, 4]]
  5. 5
    Decided by

    the sandbox run, not the model

Reproducedreturn code1
What the model never does
  • Run code. It has no code tool.
  • Grade its own test. Fixed rules read the run.
  • Turn a passing run into a reproduction.
Allowance · v0.3.2request c3709369 · model $0.0082 + sandbox ×1
Live on edycutjong/allowance-demo

Four issues. Four outcomes.

The real allowance-bot comment on issue 6: Reproduced, sandbox return code 1, footer with Otari request c3709369. 1 2 3
  • 1Verdict, in the bot's words
  • 2Sandbox return code
  • 3Footer: spend, model, Otari request id
#4

dedupe() is fine · 19 s

Not reproducedrc 0
#7

Repair changed 5 → 4: not run

Inconclusive
#5

Injection text, screened first

Blocked403
Allowance · v0.3.2allowance.edycu.dev
Per-user budgets on Otari

A stranger gets $0.05 a day.

Contributor passbookgh:edycutjong · 2026-11-07 UTC
Triage welcome on #1$0.05 of $0.05
/repro on #1 · run cost $0.01$0.0000 of $0.05
Blocked#5 · no charge to the contributor$0.0000 of $0.05
Resets 2026-11-08 00:00 UTC—
left todayspent
Read this first

Real footers, owner's account

Charged as a contributor before maintainers moved to the pool.

Maintainers

Repository pool

"$0.29 spent today by 19 contributors"

19 end users, 18 of them test accounts; maintainer runs not included.

Allowance · v0.3.2allowance.edycu.dev
How it decides

Five steps, one stamp.

01

Screen

Guardrail on the issue text

flagged → 403, stop

qwen3guard-gen-8b
02

Triage

Labels, balance footer

llama-3.3-70b
03

Write

Routing policy, GitHub MCP calls; no code tool

allowance-coder
04

Gate

Installs the repo, calls the named function, raises the marker

fails → not run

script-check.ts
05

Run

Return code, final stderr exception, last stdout line

/code/execute
One of three verdicts · Blocked never reaches the sandboxReproducedNot reproducedInconclusive
Allowance · v0.3.2allowance.edycu.dev
Otari, in the verdict path

Six claimed. Two not.

Routing policyallowance-coder · #6 c3709369
GitHub MCPmcp ×5 · #4 b606e6b5
Code execution#6 rc 1 · #4 rc 0
Guardrails403 · #5 435df9c0
Per-user budgetscontributor-allowance · #1 footers
Three models, three rolescoder · triage db089b2e · guard
Not claimedWeb search / fetch called in two early Inconclusive runs, in no linked verdictKey budget limits the $5 ceiling is the app's own setting
Allowance · v0.3.2allowance.edycu.dev
Honest by design · README

What we have not proven.

“The routing fallback to Qwen3-VL did not fire on the screenshot in issue #6: the first target accepted the image.”
README · Limits
“The gate is a structural check, not proof that the model's expectation is right.”
README · verdict
“The demo bugs are in a repository we planted.”
README · Limits
174tests, 100% coverage
CItests on every push, deploys otari
7public demo threads
$0.0082model spend, #6 verdict
Allowance · v0.3.2allowance.edycu.dev
The ask

Comment /repro. Read the stamp.

Open an issue as yourself, then comment /repro. The run is charged to your own $0.05 allowance (the triage welcome is not), and the footer shows the balance.

allowance.edycu.dev

Allowance · v0.3.2 · MITallowance.edycu.dev
01 / 10 Landing