Skip to main content
Armsmith — the agent that forges your repo for Arm

Armsmith

The agent that forges your repo for Arm.

PyPI Python License: MIT CI aarch64 native measured on Neoverse-N2

Armsmith profiles an AI repo on Arm, diagnoses why it is slow on aarch64 with a 13-rule anti-pattern pack, drafts fixes, and renders a PR in which every fix has passed a reproduce-benchmark gate — median-of-N, MAD noise bands, output-hash equality.

The LLM plans; the silicon decides. Deltas inside the noise band are reported as no change, never as wins, and fixes that fail are reported rather than quietly dropped.

Install

uvx armsmith scan .        # zero-install, one command
pipx install armsmith      # or keep it on your PATH
pip install armsmith

Use it

Scan any repo for aarch64 anti-patterns — static rules, no hardware, no network:

armsmith scan .

Record a bundle from your own machine, then diagnose your own repo. The probe rules read observations from a bundle; record captures what your host can honestly report and copies in any real instrument output you already have:

armsmith record . --out ./bundle --python .venv/bin/python
armsmith diagnose --replay ./bundle

The manifest it writes declares "synthetic": false, because none of it is invented. Anything the host cannot observe is omitted, not guessed — the rules that needed it report skipped with the probe named. env and proc_maps are never captured at all: a bundle is a published artifact, and those carry CI tokens and host paths.

Gate your own change. Give it your before and after command and it runs the same statistics — ABAB interleaving, median-of-N, a scaled-MAD noise band, output-hash equality, a signed report. A delta inside the band is reported as no change, never as a win:

armsmith bench-cmd --rule R3 \
  --baseline-cmd "python serve_bench.py --config before.yaml" \
  --candidate-cmd "python serve_bench.py --config after.yaml"

It refuses to run off aarch64, and it carries no ISA witness — it is a stopwatch, and says so.

Take the measurement yourself, on any aarch64 box (a free GitHub ubuntu-24.04-arm runner is enough). It refuses to run anywhere else rather than produce an Arm number off Arm hardware:

armsmith bench-live --require-witness
armsmith verify report-live.json

The number, and why you don't have to trust it

On a GitHub-hosted ubuntu-24.04-arm runner (Neoverse-N2, gcc 13.3.0), Armsmith compiles one int8 dot-product source twice — differing only in the -march flag that rule R2 exists to flag — disassembles both, and measures them:

-O3 -march=armv8-a -O3 -march=armv8.2-a+dotprod
SDOT in the hot symbol 0 1
median kernel time 0.059975 s 0.008123 s
Δ — −86.5% — a 7.4× speedup
noise band (k=3) — ±0.000144 s
output hash — identical
gate verdict — keep

Read the first row before the timings: ARMv8.0 has no dot-product instruction, so the baseline cannot contain one. The stopwatch says 7.4×; the disassembly says why.

Every report is ed25519-signed and carries its own raw samples, so armsmith verify recomputes every statistic and every gate verdict independently — change one digit and it prints VERIFY FAILED.

What it looks for

13 aarch64 anti-patterns, 10 of them citing the Arm Learning Path that teaches the fix by hand: amd64-pinned images running under QEMU · builds with no -mcpu/-march · NumPy on reference BLAS · silent float64 coercion · GGUF quant mismatched to the ISA repack path · threads × workers over vCPU count · ONNX Runtime session defaults · pip sdist fallback · preprocess memcpy storms · llama.cpp built without KleidiAI · THP/allocator untuned · CI publishing amd64-only images · serving overhead dominating kernel time.

armsmith rules export renders them as x86→Arm migration cards, 11 with a paste-able before→after diff.

Honest scope

  • armsmith pr is dry-run today. It renders exactly what would ship and makes no network call.
  • The measured −86.5% is one int8 microkernel on one runner. It proves the gate works on real silicon; it is never scaled into a claim about your workload. The honest number for your model is the one you measure on your own hardware.
  • Live perf/PMU capture, llama-bench, the Claude planner loop and real PR posting are marked TODO(S1) in code and exit non-zero rather than fabricate output.

Links

MIT licensed.

Metadata

Release files for armsmith 1.3.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for armsmith 1.3.3
File Size Uploaded
armsmith-1.3.3.tar.gz 170.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for armsmith 1.3.3
File Interpreter ABI Platform
armsmith-1.3.3-py3-none-any.whl Python 3 none any Details

Total release size: 287.0 kB

Release files / armsmith-1.3.3.tar.gz

Download URL armsmith-1.3.3.tar.gz
Size 170.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e39fe3ac6888a9fe049d8b3abd31d19dcf9bd238fe8b5b1400a4e8939c86b944
BLAKE2b-256 checksum
How to use checksums
82071e19df37f47b085f8eb60e32195168948bed15681368b908ac44c48eba20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / armsmith-1.3.3-py3-none-any.whl

Download URL armsmith-1.3.3-py3-none-any.whl
Size 116.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2d720459bf656846aebe5986afbc9b45501ad19a04d69215a1e1ba247385d690
BLAKE2b-256 checksum
How to use checksums
a35894fc5a5c0f2f8743b347fc72cadec1bb0e82de333d461f694f8459f9c618
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.3.3 This release

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page