Arm AI Optimization Challenge 2026 · Track 2 — Cloud AI

The agent proposes.
The silicon decides.

Every other submission runs a model on Arm. Armsmith makes everyone else’s repo fast on Arm — and refuses to lie about the numbers.

LLM planner → proposes  ·  REPRODUCE GATE (median-of-N · MAD noise band · output-hash equality) → the only thing allowed to claim

219
tests passing · fully offline
13
aarch64 rules · 10 cite Arm Learning Paths
4/6
fixes proven on seed · 2 refused
0
fabricated numbers
armsmith — reproduce gate · scenario_ragserve replay · synthetic
$ armsmith diagnose --replay fixtures/replays/scenario_ragserve
  fingerprint  lscpu → dotprod / i8mm / SVE / SVE2 / BF16 / SME routing
  scan         13-rule aarch64 pack → findings on ragserve
  plan         6 candidate fixes queued — the planner proposes; it cannot claim
  gate         median-of-N · MAD noise band (k=3) · output-hash equality
  KEEP × 4     Δ outside noise band · outputs hash-equal
  DROP × 1     inside noise band — refused, reported
  DROP × 1     output-hash mismatch — refused, reported
  report       signed ed25519 · canonical-JSON sha256 · raw samples embedded

$ armsmith verify fixtures/replays/scenario_ragserve/report.json
  VERIFY OK — every statistic recomputed from the embedded raw samples
Real gate behavior, provable offline. Replay data is synthetic and labeled at every layer — the live Graviton multiplier stays [PENDING] until real hardware measures it.

§01 · the problem

The Graviton lore nobody has.

Arm64 cloud — Graviton, Ampere, Axion — is reported, per cloud vendors’ published price-performance benchmarks, to run AI inference 20–40% cheaper per unit of throughput — market context, not a number Armsmith measures. Capturing it takes performance-engineering lore almost nobody carries around:

A solo founder’s AWS bill doubles overnight when her RAG service outgrows its instance. The Graviton migration guide is 40 pages of compiler flags she doesn’t understand — and her next invoice lands in 9 days. — the seed scenario Armsmith is forged against
amd64 image pins → QEMU emulation -mcpu / -march flags BLAS backend choice silent float64 coercion GGUF quant ↔ ISA repack paths threads × workers vs vCPUs

Teams either never migrate — or migrate and silently leave 2–3× on the table. Arm’s own Learning Paths teach a human to fix this by hand. Nothing automates the loop. Armsmith does — without ever being allowed to grade its own homework.

§02 · the trust inversion

Any agent can propose fixes.
Almost none can prove them.

Armsmith inverts the trust. The LLM planner proposes; only the reproduce gate can claim. A fix that can’t clear the noise band — or changes the output — is deleted by the tool itself and reported as refused. Never hidden.

the 20-second trust proof
$ armsmith verify fixtures/replays/scenario_ragserve/report.json
  VERIFY OK

$ vi report.json   # change ONE digit in any "samples" array
$ armsmith verify fixtures/replays/scenario_ragserve/report.json
  VERIFY FAILED
Raw samples ship embedded beside every claimed statistic — so anyone can re-run the arithmetic instead of trusting a screenshot.

Reproduce gate · armsmith.gate

Median-of-N runs, a scaled-MAD noise band k·√(smad_a²+smad_b²) with k=3, and output-hash equality. In-band deltas are reported as no change — never as wins.

Tamper-evident reports · armsmith.report

Canonical-JSON sha256 content addressing plus an ed25519 signature. armsmith verify recomputes every statistic and gate verdict from the embedded samples — tamper one digit, it goes red.

ISA witness · armsmith.witness

A before/after objdump count of SDOT / UDOT / SMMLA / USMMLA — e.g. dotprod 0 → 4 — deterministic proof the Arm kernel path is actually emitted.

“Wall-clock can be argued with; emitted instructions cannot.”

§03 · the loop

Diagnose → gate → signed report → PR.

One command walks a repo from “slow on aarch64” to a pull request in which every surviving fix carries its own evidence — and every refused fix carries its reason.

Diagram of the Armsmith loop: findings move from a repo through the reproduce gate; proven fixes reach the pull request, and unproven fixes are dropped, with reasons shown.
findings → reproduce gate → proven fixes reach the PR · unproven fixes are dropped, with reasons
  1. Host fingerprint lscpu → ISA routing

    dotprod / i8mm / SVE / SVE2 / BF16 / SME detection decides which fixes are even eligible.

  2. 13-rule scan static + recorded probes

    AST, Dockerfile and CI analysis plus recorded runtime probes surface aarch64 anti-patterns R1–R13.

  3. Planner orders fixes proposes — cannot claim

    Deterministic fallback planner today; the Claude tool-use loop is an honest TODO(S1).

  4. REPRODUCE GATE the only voice that counts

    Keep only what lands outside the noise band and keeps outputs hash-equal. Everything else: dropped, with a machine-readable reason.

  5. Signed report → PR ed25519 + sha256 · dry-run

    An evidence table per surviving fix — metric · before · after · Δ · noise band — plus the drop log. PR rendering is dry-run today; posting lands at S1.

the surface armsmith scan armsmith diagnose armsmith witness armsmith verify armsmith pr armsmith ci armsmith rules export

§04 · the receipts

Refusal is a feature.

On the ragserve seed, six candidate fixes entered the gate. This counter is the whole brand — and the last cell is the point:

6
proposed

candidate fixes queued by the planner on the seed repo.

4
proven

outside the noise band, outputs hash-equal — allowed into the PR.

2
refused

1 inside the noise band · 1 output-hash mismatch. Deleted by the tool, reported in full.

0
faked

every statistic re-derivable from raw samples via armsmith verify.

What we refuse to claim (yet)

  • Live Graviton throughput multiplier — not yet measured. It ships when real hardware measures it, and not one second before.[PENDING]
  • All replay data is synthetic — labeled "synthetic": true at every layer; every loader refuses unlabeled measurement data.by design
  • Live perf/PMU capture · llama-bench · PR posting · the Claude planner loop — deferred, marked in code, exit non-zero instead of faking output.TODO(S1)

Anything that isn’t on the receipts doesn’t get claimed. That discipline is the product.

§05 · the artifacts

Built to be taken.

Every piece works standalone of the CLI — migration knowledge for the whole x86 → Arm community, not just this repo.

migration templates

13 x86 → Arm migration templates

armsmith rules export --format md renders one card per rule — anti-pattern · fix · citation — reusable on any repo. Add a 14th rule by dropping one YAML descriptor into the pack; zero core changes.

R1amd64 pin → QEMU R2no -mcpu/-march R3reference BLAS R4silent float64 R5GGUF quant ↔ ISA R6threads × workers R7ORT defaults R8pip sdist fallback R9memcpy storm R10no KleidiAI build R11THP / allocator R12amd64-only CI R13serving overhead

cites an Arm Learning Path — 10 of 13; the rest cite the canonical upstream doc.

public schema

Signed-report JSON schema

report.schema.json — JSON Schema draft 2020-12, CI-validated. Build your own viewer or CI gate against it without trusting our rendering.

importable modules

The methodology, as a library

from armsmith.benchstats import compare — plus gate, report and witness. Median-of-N / MAD / noise-band statistics with no CLI required.

drop-in ci gate

arm64 CI action

A composite GitHub Action (action.yml) runs the same reproduce gate on free native-arm64 hosted runners (ubuntu-24.04-arm) as an exit-code perf-regression twin.

§06 · run the proof

Two minutes. Zero Arm hardware. Zero trust required.

Every command below runs on any x86 laptop — no Arm box, no network beyond pip. All exit 0. The tamper step goes red on purpose.

judge quickstart — zero hardware (~2 min)
git clone https://github.com/edycutjong/armsmith && cd armsmith
python -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]'

python -m pytest -q                                             # 219 passing, fully offline
armsmith scan fixtures/replays/scenario_ragserve               # static R1/R4/R12 — zero hardware
armsmith diagnose --replay fixtures/replays/scenario_ragserve  # full gate: 4 kept, 2 dropped
armsmith witness fixtures/witness/objdump_before.txt fixtures/witness/objdump_after.txt  # ISA proof: 0 → 4 dotprod
armsmith verify fixtures/replays/scenario_ragserve/report.json # → VERIFY OK
armsmith ci --replay fixtures/replays/scenario_ragserve        # → CI GATE PASSED
python scripts/verify_offline.py                               # → ALL CHECKS PASSED — honest & offline

Then try to cheat: the 20-second trust proof

Open report.json, change one digit in any samples array, re-run armsmith verify. The arithmetic is independently re-derivable — editing a number without re-running the measurement is detectable.

tamper test
$ vi fixtures/replays/scenario_ragserve/report.json  # one digit
$ armsmith verify fixtures/replays/scenario_ragserve/report.json
  VERIFY FAILED

On native Arm64 — Graviton c7g/c8g, Ampere, Axion, or a GitHub ubuntu-24.04-arm runner — the same commands run identically, and armsmith doctor --offline shows the host’s dotprod / i8mm / SVE routing. CI already runs the full suite on a native-arm64 + x86 matrix. Live capture (--target ssh://…) is the S1 path; Armsmith never fabricates a hardware number.

§07 · faq

Honest answers.

The same standard as the tool: if it isn’t provable, it isn’t claimed.

Q1Do I need Arm hardware to validate any of this?

No. The judge quickstart runs on any x86 laptop in about two minutes, fully offline beyond pip: 219 tests, the static scan, the full replay reproduce gate, the ISA witness, verify, and the CI twin — all exit 0 with no Arm box and no network.

Q2Are the performance numbers real hardware measurements?

No — and the tool is built so that can’t be fudged. Every number in the repo today comes from replay bundles labeled "synthetic": true at every layer; loaders refuse unlabeled measurement data. The live Graviton multiplier is [PENDING] until a real capture lands. What is real today: the gate math, the drop behavior, the signatures, and the 0 → 4 dotprod ISA witness — all deterministic and re-runnable.

Q3What happens to a fix that can’t be proven?

The tool deletes it and says so. On the ragserve seed, 6 candidate fixes entered the reproduce gate; 4 survived, 1 was refused for landing inside the noise band and 1 for an output-hash mismatch. Refusals ship in the report and the PR body — never hidden.

Q4Can’t I just edit the report to a nicer number?

Try it — that’s the 20-second demo. report.json embeds the raw samples beside every statistic; armsmith verify recomputes every stat and gate verdict from those samples. Change one digit and it prints VERIFY FAILED.

Q5What can I reuse without adopting the CLI?

Four artifacts: the 13 x86 → Arm migration templates (10 citing Arm Learning Paths), the public signed-report JSON schema (draft 2020-12, CI-validated), the importable benchstats / gate / report / witness modules, and a drop-in composite GitHub Action that runs the gate on free native-arm64 runners. A 14th rule is one YAML descriptor — no core changes.

Q6License, track, and what’s with the two names?

MIT, end to end. Built for the Arm AI Optimization Challenge on Devpost — Track 2, Cloud AI — where it’s submitted under the product name Armsmith. The tool, the CLI and this site are Armsmith: the agent that forges your repo for Arm.

§08 · your move

Try to fake a number.

Clone the repo, tamper with the report, and watch VERIFY FAILED catch you in one second. Then read the 13 migration templates and make your own repo fast on Arm.

MIT licensedTrack 2 · Cloud AIArm AI Optimization Challenge ↗