GitHub Action · MIT · traces the model, never runs your training

Dependabot for models.

An agent that lives in your repository. It is event-driven (pull requests, comments, a weekly clock), it uses tools (the tracer, the verifier, the plan, git, the training runner), it acts on its own (opens fix pull requests, submits jobs when asked), it verifies its own work with a deterministic gate before pushing anything, and it remembers outcomes in a ledger the next change is checked against. Dependabot did this for dependencies. Nobody does it for models.

Install in two files See a shared plan See it on a real PR Paste a model, get the plan

Plan and block are shipped. Fix pull requests and /neurarch train are in progress. Neither artifact below is a mock. Both are copied from a real run and link to it.

One command, one card
zsh
$ neurarch-trace torchvision.models:resnet18 --input 1,3,224,224 --plan --share
Plan: resnet18   68 layers · 11.7M params · fingerprint 9ea7d4ae
  shape     [3,224,224] -> [1000]
  will run  yes (0 blockers, 0 warnings)
  fits      T4 16GB yes · A100 40GB yes · H100 80GB yes
  train     ~$0.11 / 6m on A10G (24GB)   (10 epochs, batch 32, 50k samples assumed)
Share: https://www.neurarch.com/p/r7rq5c4jt2
Every pull request that touches a model
neurarch bot commented on model-ci-example#2

Neurarch plan

models/small_cnn.py:SmallCNN will run

SmallCNN: 21 layers, 1.1M params, will run, fits a T4, about $0.05 to train, vs SmallCNN: params +978.9K

Layers / params21 / 1.1M (+978.9K, +693%)
Shape[3,32,32] -> [10]
Will it runyes, 0 warnings
GPU fitT4 yes · A100 40GB yes · H100 80GB yes (memory +0.02 GB)
Est. training~$0.05 / 3m on A10G (24GB) (+<$0.01)
Blast radius7 downstream layers from 8 touched
~ features.3.0.outChannels 64 -> 256 ~ features.4.0.inChannels 64 -> 256 ~ features.6.0.outChannels 128 -> 192 ~ classifier.2.inFeatures 128 -> 192
Neurarch plan passed · one comment, updated in place on every push
Install

Install in two files.

One workflow, one config that names the models and their input shapes. The bot traces a forward pass in CI, so it works on models built at runtime: from_pretrained, timm factories, architectures across a dozen files.

.github/workflows/neurarch-bot.yml
name: neurarch-bot
on: [pull_request]
permissions:
  contents: read
  pull-requests: write
jobs:
  plan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: neurarch-ai/neurarch-bot@v0
.neurarch.yml
models:
  - path: models/gpt.py:GPT
    input: 1,128:long
  - path: models/resnet.py:ResNet18
    input: 1,3,224,224
policy:                      # optional, coming with phase 3
  max_params: 200M
  must_fit: A100-40GB
  forbid_types: [softmax]

No account needed. An API key (Settings → Developer API) lifts the anonymous rate limit and, later, turns on the ledger. Try the same plan locally first: pip install neurarch-trace.

On every pull request

What it does, and what it does not do yet.

shipped

plan

Traces base and head, posts one comment: layers, params and the delta, GPU fit, estimated cost and the delta, blast radius, the exact lines that changed structurally. Updated in place on every push, never duplicated.

shipped

block

A graph that will not forward-pass turns the check red. Deterministic: the same graph gets the same answer every run, which is what a gate in front of a GPU queue needs.

in progress

fix pull request

On a blocker the bot opens a branch with the patch, re-traces, re-plans, and pushes only if the new plan is legal. Exact fixes need no model call; proposed fixes are verified in your CI before anything is pushed.

in progress

/neurarch train

Comment on the PR and the bot submits the job, watches it, posts the curve and the metrics, and writes the outcome to your ledger so the next change is checked against what actually happened.

Privacy

What leaves your repository.

The graphLayer types, shapes, parameter counts and connections, as a JSON graph. That is what a plan is computed from and all the bot sends.
NeverWeights, data, training scripts, environment variables. The bot runs the forward pass in your CI runner; the server never runs your code.
Only on requestA public link exists only when you pass --share or set share: true. Shared plans are stored at an unguessable URL and say so on the page.

The full contract is in docs/DATA_POLICY.md; the site privacy page is here.

Why not just ask Claude

Three things a model call cannot be.

Deterministic at the gateA frontier model gives a different answer on a different day. The bot's gate is a graph check with a published error rate: across 264 graphs, every design it blocked crashed in PyTorch forward and every design it passed ran clean.
Lives in your CIIt runs where the code already goes, on every pull request, with no one opening a new tool. A model in a chat window is a suggestion; a red check is a control.
Remembers what trainedThe ledger pairs a structure with what it cost and how it scored, in your organisation. The next change is checked against your history, which no model has.
The honest part: at picking which of two legal designs will train better, a frontier model reading the code beats our static score. We measured it on our own held-out designs and publish the number in CALIBRATION.md. The bot does not rank two legal designs. It tells you what each one costs, whether it runs, and what happened last time.