~/satyajit

Altar-1: a security model measured on recall alone

mdjsonmcp

2026-09-22 · 14 min · security · evaluation · quantization · moe · calibration · open-weights · benchmarks

Aikido Security shipped Altar yesterday: "our first open-weight security model. Frontier-grade defensive AI, built to deploy." The pitch is sovereignty — a bank under a data-residency mandate, a hospital group, an air-gapped OT network, none of which can send unremediated findings to somebody else's inference endpoint.

A security model is a detector, and a detector is worth exactly what its evaluation says it is worth. So this is mostly an article about the evaluation. The short version: Aikido published more of it than almost anyone does — including the per-case grid, which is rare and which I will use against them — and the half they published is the half that cannot say whether the thing is deployable.

AikidoSec/altar-1@5d591cd · snapshot 2026-09-22
parameters
500.83B
repo size
327.99 GB
architecture
GlmMoeDsaForCausalLM
task
text-generation
license
other
safetensors
39 shards
largest file
8.61 GB
files
48
downloads
739
likes
136
parameters by dtype
BF1627.01BF3212.8KI32473.82B
glmglm-5.3moew4a16awqint4compressed-tensorsreap

repo last modified 2026-09-20

What it is, to the byte

The model card calls it "a 504B parameter Prune of GLM-5.3". The Hub's own safetensors metadata says 500,825,296,352, and summing the 39 shard headers by hand agrees.

327.9 GB, summed from 39 safetensors shard headers500.8B params · 5.24 bits each
routed experts, 4-bit packed: 236.9 GB (72.2%)group scales + zero points: 37 GB (11.3%)layers 3, 77 and 78, BF16: 38.1 GB (11.6%)everything else, BF16: 15.9 GB (4.8%)
whatparamsstoredshare
routed experts, 4-bit packed73 of 76 MoE layers · 168 experts each473.8B236.9 GB72.2%
group scales + zero pointsone bf16 scale and one int8 zp per 32 weights37.0 GB11.3%
layers 3, 77 and 78, BF16first MoE layer, last MoE layer, MTP head — experts unquantised19.0B38.1 GB11.6%
everything else, BF16embeddings, LM head, shared experts, dense layers, some attention8.0B15.9 GB4.8%
total500.8B327.9 GB5.24 bpw
"W4A16" describes the expert weights, not the file. A quarter of the bytes here are 16-bit: three whole layers whose experts were left alone, plus the embeddings, the LM head, the shared experts and the three dense layers — and 37 GB of group metadata, which is the price of group_size: 32 with an asymmetric scheme.

The derivation that makes me trust the rest of this accounting: 482.0B of those 500.8B parameters are routed-expert weights spread over 168 experts per layer. Scale that bank back to 256 and add the 18.8B that is not expert weights, and the unpruned parent is 753.3B parameters — 1,506.7 GB in bf16, which is the figure Aikido publishes to the tenth of a gigabyte. The same 753B is printed in Paradigma's evaluation table, which I look at separately — for GLM 5.2, the previous point release, so read it as the family holding its size across a version rather than as a second measurement of this parent. The lineage is:

zai-org/GLM-5.3            753.3B params · BF16 · 1,506.7 GB
  └─ cyankiwi/GLM-5.3-AWQ-INT4      W4A16 routed experts · 488.2 GB
       └─ REAP prune, keep 168/256 experts
            └─ AikidoSec/altar-1    500.8B params · 327.9 GB

Two things to say plainly about that. "W4A16" describes the expert weights, not the file. 27.0B parameters were never quantised — the embeddings, the LM head, the shared expert, the three dense layers, and, interestingly, the routed experts of layers 3, 77 and 78 (the first MoE layer, the last, and the multi-token-prediction head). Those three layers alone are 38.1 GB. Add 37 GB of group scales and zero points — group_size: 32, asymmetric, one bf16 scale plus one int8 zero point per 32 weights, which is 0.75 bits of overhead on every quantised weight — and the file's effective rate is 5.24 bits per parameter.

And pruning buys memory, not speed. The card is explicit and correct about this: "Routing is untouched: 8 experts per token out of the 168 that remain, ~40B active parameters, same as the unpruned model." Deleting 88 experts does not make a token cheaper to compute. It makes the model fit on four H200s instead of six or more, which is the entire point when the constraint is "inside the customer's rack" — but a reader who sees 78.2% less storage and expects 78.2% less latency will be disappointed.

Worth noting who did what. The prune itself was performed by 0xSero, who also released 569B W4A16 and 500B EXL3 builds of the same cut; Aikido's card credits this directly. Aikido's own contribution is the calibration choice — traces from their pentesting harness plus multilingual text — and the security evaluation. For a security vendor that is the right division of labour, and saying so in the credits rather than in a footnote is to their credit.

The compression study, which nobody plotted

Aikido links a fidelity study as support for the claim that "selection matters as much as size." It is a sweep_summary.json with 16 pruning plans, and it is the most informative artefact in the release. Here it is drawn.

the linked compression study, plotted — KL against experts kept16 plans · sealed 25-prompt panel · lower is better
0.000.250.500.751.00256224208192168routed experts kept, of 256KL natsno plan in the studyEXL3 3bpw unpruned · keep 256 (753B) · KL 0.0892 · top-1 agreement 90.89%EXL3 3bpw unprunedmassmax224 · keep 224 (661B) · KL 0.1951 · top-1 agreement 87.37%reapmax224 · keep 224 (661B) · KL 0.201 · top-1 agreement 87.11%reap224 · keep 224 (661B) · KL 0.2799 · top-1 agreement 84.62%massmax208 · keep 208 (615B) · KL 0.2826 · top-1 agreement 84.63%reapmax208 · keep 208 (615B) · KL 0.2975 · top-1 agreement 84.06%massbal208 · keep 208 (615B) · KL 0.3165 · top-1 agreement 83.30%reap208 · keep 208 (615B) · KL 0.4033 · top-1 agreement 81.13%mass208 · keep 208 (615B) · KL 0.4419 · top-1 agreement 80.41%massmax192 · keep 192 (569B) · KL 0.3611 · top-1 agreement 82.19%massmax192massbal192 · keep 192 (569B) · KL 0.3993 · top-1 agreement 81.09%reapmax192 · keep 192 (569B) · KL 0.4058 · top-1 agreement 80.90%reap192 (mean) · keep 192 (569B) · KL 0.5487 · top-1 agreement 77.50%mass192 · keep 192 (569B) · KL 0.5685 · top-1 agreement 77.50%freq192 · keep 192 (569B) · KL 0.6351 · top-1 agreement 75.02%freq192random192 · keep 192 (569B) · KL 0.6851 · top-1 agreement 73.45%random192Altar-1 · 0.506168 experts · 500.8B
unpruned referencedomain-max aggregationdomain-balancedglobal aggregationfrequency / random baseline
All 16 plan points are from sweep_summary.json at revision ed76f87. Altar's 0.506 is from its own model card, on the same described panel but not in the same file, and it is a single point with no sibling plan at 168 experts to compare against.

The claim holds, and holds hard. At a fixed 192 experts the best domain-max plan sits at 0.361 KL against the unpruned model and the frequency-selection baseline at 0.635 — a wider gap than two entire rungs of size. Random selection is 0.685, so frequency pruning is barely better than random at that depth, which is a genuinely useful negative result and exactly the thing Aikido's blog asserts in prose.

Switch to the domain view and the second result is the one that justifies the whole project. Averaged across plans, code KL rises from 0.048 to 0.20 as experts are removed; prose KL rises from 0.126 to 0.82. Pruning a mixture-of-experts costs natural-language fidelity roughly four times what it costs code. A model whose job is reading source and tool output is the right thing to prune; a model whose job is reading a French requirements document is not. The blog says this; the sweep shows it.

Now the part to notice: the sweep bottoms out at 192 experts. Altar ships 168. Every plan comparison, every selection-strategy result, every domain curve is measured two rungs above the cut that was actually released. Altar's own card publishes a single number at 168 — KL 0.506 on a "sealed 25-prompt panel" — with no sibling plan at that depth to compare it against, and no top-1 agreement figure at all, although agreement is in every row of the sweep.

The security evaluation

Here is the benchmark, in Aikido's own words: "32 known vulnerabilities across 30 repositories, with three runs per case", run through their AI Code Analysis harness. Results:

average recall per runvulnerabilities covered
GLM-5.3, BF1665.6%25 of 32
GLM-5.3, AWQ INT461.5%23 of 32
Altar-160.4%23 of 32

And — this is the unusual part — they published the per-case grid:

A heatmap titled 'Recall by vulnerability type', showing 32 rows of vulnerability types against 13 model columns including GLM-Flash, Luna, Altar, Flash 0731, Sol, GLM-5.3, GLM-5.3 AWQ, Grok 4.6, Qwen3.8, Opus 5, Flash 4.1, Pro 0813 and Astra. Every cell is 0, 33, 67 or 100, labelled 'percent of 3 runs'. The top nine rows are almost entirely 100 across all models; the bottom eight rows, from Config Injection down to Request Smuggling, are almost entirely 0 for every model.
Per-case recall for 13 models on Aikido's internal CVE benchmark. Every cell is one of four values because there are three runs. (Aikido Security, 'Introducing Aikido Altar', 21 Sep 2026.)

Transcribing that grid back into run counts gives a check on the transcription: the mean of Altar's 32 cells is 1934/32 = 60.44%, the AWQ column is 1968/32 = 61.50%, and the BF16 column is 2099/32 = 65.59%. The count of cases with at least one hit comes out at 23, 23 and 25, which are the published coverage figures. All six reproduce, so the grid is the complete data and "average recall per run" is just the mean of those 32 cells.

Which means this is a paired comparison, and the paired view is much sharper than three averages.

runs that found the case, out of three — paired, 32 cases1 loss · 0 wins · 31 tied
AltarAWQ INT4Improper Authentication 1Signature Verification 1Improper Authentication 2SSRF 1External InitializationPath Traversal 1Improper Authentication 3Cross-site Scripting 1Path Traversal 2Cross-site Scripting 2Signature Verification 2Path Traversal 3Code Injection 1Out-of-bounds ReadMissing Authorization 1Code Injection 2-1 runFail OpenPath CanonicalizationMissing Authorization 2Incorrect Authorization 1Improper Authentication 4Unrestricted File UploadPath Traversal 4DeserializationConfig InjectionPath Traversal 5IDORImproper Access ControlIncorrect Authorization 2SSRF 2Host ConfusionRequest Smuggling58 / 96 runs vs 59 / 96 — a gap of 1 runexact two-sided sign test on 1 discordant case: p = 1.0000
Transcribed from Aikido's published per-case figure; the 32-cell mean reproduces all three of their headline averages to the decimal, which is the check that the transcription is right. The sign test treats each case as one paired trial and is the weakest defensible test on this data — it ignores the size of each per-case difference, all of which are one run.

Altar and the AWQ parent it was pruned from give identical results on 31 of the 32 cases. They differ on one: Code Injection 2, where the parent hit 2 runs of 3 and Altar hit 1. That single run is the entire gap. (1/3) / 32 = 1.04 percentage points — the "approximately one percentage point less average recall" in the announcement is one run, on one case, out of ninety-six. It is not a small measured difference. It is the smallest difference this benchmark is capable of expressing.

Against the full-precision parent it is five runs on five cases — Code Injection 1, Incorrect Authorization 1, Path Traversal 4, Deserialization, Incorrect Authorization 2 — with Altar losing exactly one run on each and never winning one. Twenty-seven cases tie. An exact two-sided sign test on those five discordant pairs gives p = 0.0625: consistently in one direction, not significant at 5%, and precisely the kind of result that needs more cases rather than more prose.

Aikido's own framing — "we report average recall per run separately from coverage across three runs: finding a vulnerability once is different from finding it consistently" — is exactly right, and the scope caveat that follows it is unusually honest:

This measures targeted CVE rediscovery within a pipeline that uses other models for surrounding stages. It does not measure blind discovery across an entire codebase, execute exploits to validate findings, or evaluate the fix-proposal stage.

That paragraph does most of my work for me. One more thing belongs in it.

The cell that cannot exist

the benchmark's confusion matrix, drawn honestly96 runs · every case a planted positive
measured
true positive58 runs
found the planted CVE
false negative38 runs
completed, found nothing
structurally absent
false positivenot scored
reported something that was not there
true negativenot scored
no case has 'nothing here' as its answer
real findings
19.3 of 32
false alerts
30
precision
39%

1.6 false alerts for every real one, across 30 repositories. A triage queue at that ratio is a human cost that scales with the fleet, and none of it appears in a recall number.

Left panel is Aikido's data. Right panel is the part their benchmark design cannot produce, whatever the model does. The slider is a what-if with no measured value behind it — which is the finding, not a criticism of the arithmetic.

Every case in this benchmark is a repository that is known to contain a specific CVE. The task is to rediscover it. So a run can be scored true positive or false negative, and that is all — there is no case whose correct answer is "there is nothing here", and therefore no true negatives and, structurally, no false positives. A run that reports the real vulnerability alongside five imagined ones scores identically to a run that reports only the real one.

Recall is half a detector. The other half is precision, and precision is the half that decides whether anybody can use the thing. This site has been here before: the confidence-gated fraud demo reported 100% precision measured on fifty negative examples, which bounds the false-positive rate no tighter than 5.8%, and at a realistic base rate that bound puts precision at 7%. The same arithmetic applies here with the negatives removed entirely — Altar's false-positive rate is not bounded at all, in either direction.

This is not hypothetical for the product. Aikido runs Altar inside an autonomous pentesting appliance across a customer fleet. At one spurious finding per repository per pass, over 30 repositories, precision on this workload lands near 39%; at three, near 18%. Those are inputs I invented and the curve is the point, not the numbers on it. A security scanner's threshold is the product, and there is no threshold in any of the published material — no confidence score, no calibration curve, no alert budget.

The release does gesture at the other end of the evidence chain: "Shortly after deployment, it identified a valid critical-severity vulnerability during a client production pentest." That is one true positive in the field, which is a real data point and also, by itself, tells you nothing about the denominator.

Two bar charts side by side under the heading 'Compression Impact'. Left, 'Stored Weights (GB)': GLM-5.3 BF16 full precision at 1.51 TB, GLM-5.3 AWQ INT4 at 488 GB, Altar pruned plus INT4 at 328 GB. Right, 'Vulnerabilities Covered (of 32)': GLM-5.3 BF16 at 25, GLM-5.3 AWQ INT4 at 23, Altar at 23. A caption reads '92% of the full-precision model's coverage kept, at 78.2% less storage.'
The release's summary chart. The right-hand panel is the whole quality argument: two vulnerabilities out of 32. (Aikido Security, 'Introducing Aikido Altar', 21 Sep 2026.)

Is the eval public

No, and it is worth being precise about what is.

Public: the weights, the pruning toolkit, the fidelity study with all 16 plans, and the per-case recall grid as an image. That last one is more than most vendors publish and it is what made the paired analysis above possible.

Not public: the 32 CVEs, the 30 repositories, the harness, the prompts, and the raw agent transcripts — the announcement says the study is shared "without publishing raw agent conversations", which is a defensible position for a firm whose benchmark is built from client work. The consequence is that nobody outside Aikido can run this benchmark, and the numbers above are unreproducible by construction. Against that, they are a comparison across 13 models on one fixed set, which makes the relative ordering more useful than the absolute values.

"Frontier-grade defensive AI" is the phrase to weigh against all this. What is substantiated: Altar retains its quantised parent's CVE-rediscovery behaviour to within one run in ninety-six, at a third less storage, on hardware a customer can own. That is a good compression result and a well-measured one. What is not substantiated by anything published: that it is good at finding vulnerabilities in the first place, rather than good at re-finding ones a harness has already been pointed at, and that its findings can be acted on without a triage queue nobody has sized.

What I would want next

  1. A negative set. Thirty repositories at the commit after the fix, run through the same harness. Every finding is a false positive by construction, and the whole missing half of the matrix appears for the cost of re-running an existing benchmark.
  2. Confidence, and a reliability diagram. If the pipeline emits a severity or a confidence, bucket it and plot accuracy per bucket. Without that there is no threshold to tune and no cost model to attach to one.
  3. A plan at 168 experts in the sweep, next to massmax192 and freq192. It is one more row in a file that already has sixteen, and it is the only way to know whether Altar's 0.506 is a good 168-expert cut or merely a 168-expert cut.
  4. More cases. Thirty-two is small enough that the difference between Altar and a full-precision 753B model is five runs, and small enough that a sign test on it does not clear 5%.

What would change my mind

5 claims above, and what would falsify each

  1. Altar-1 is 500.8B parameters at 5.24 effective bits, not 504B at four bits.

    A recount. Mine sums all 39 safetensors shard headers, treating each weight_packed int32 as eight four-bit weights and excluding weight_scale and weight_zero_point from the parameter count; it totals 500,825,296,352 parameters in 327,938,345,136 tensor bytes, against the index's own total_size of 327,957,368,440 — a 19 MB gap that is shard headers and alignment padding. If "504B" counts something else — the MTP head differently, or the pre-prune shape of a tensor — that is the explanation and I would want it stated.

  2. The one-percentage-point gap to the AWQ parent is a single run on a single case.

    A per-case export that disagrees with my transcription of the heatmap. The check that it is right is that the 32-cell mean reproduces 60.44%, 61.50% and 65.59% against published figures of 60.4%, 61.5% and 65.6%, and the count of cases with at least one hit reproduces 23, 23 and 25 — six independent hits. If the published averages exclude incomplete runs in a way that happens to land on the same three numbers, I am wrong and the raw counts would show it.

  3. The benchmark cannot measure false positives.

    A description of the harness showing that a run is scored down for reporting vulnerabilities other than the target — a precision term inside the recall metric. Nothing in the announcement suggests one, and "completed runs without a finding count as misses" reads like a pure hit/miss criterion, but the harness is not public and I am inferring from the metric's name and the grid's shape.

  4. Pruning buys memory rather than latency.

    A measured throughput or time-to-first-token comparison between the 488 GB AWQ parent and the 328 GB prune at the same batch size and context on the same four H200s. Active parameters are identical at ~40B, so I expect a small win from reduced memory pressure and nothing more — but MoE kernels are sensitive to expert-bank size in ways that do not follow from the active-parameter count, and a measurement could surprise me in either direction.

  5. Frequency-based expert selection is barely better than random at 192 experts.

    This is read straight off sweep_summary.json at revision ed76f87: freq192 at 0.635 KL and 75.02% agreement, random192 at 0.685 and 73.45%. A larger evaluation panel — 25 prompts is not many — could separate them. It would not change the ordering against massmax192 at 0.361, which is the comparison that matters.

Cite this article

For attribution, please use the following reference or BibTeX:

Satyajit Ghana, "Altar-1: a security model measured on recall alone", ai.thesatyajit.com, September 2026.

bibtex
@misc{ghana2026altar1,
  author = {Satyajit Ghana},
  title  = {Altar-1: a security model measured on recall alone},
  url    = {https://ai.thesatyajit.com/articles/altar-1},
  year   = {2026}
}
share