Aikido Security has released Altar-1, its first open-weight security model. It is a compressed version of Z.AI’s GLM-5.3, built to run inside infrastructure the customer controls. Altar-1 powers Aikido Machine, the company’s autonomous pentesting appliance for on-prem and air-gapped networks.
Is it deployable? Yes, the weights are public on Hugging Face and run with vLLM on a single node of 4x NVIDIA H200 GPUs.
The Problem: Security Context Cannot Leave the Network
Closed frontier models run on someone else’s infrastructure. Using them sends source code, architecture docs, and unremediated findings outside the network. Aikido points to banks under data-residency mandates and OT operators with no internet route.
Open-weight models solve the residency problem but create a deployment gap. Mixture-of-experts (MoE) models must store every expert, even when a workload uses only a few of them. Security agents also build long-running context. That KV cache competes with model weights for the same GPU memory.
How Altar-1 Was Built
GLM-5.3 is a 753B parameter MoE model. Each token routes to 8 of 256 experts per layer, which is about 40B active parameters. Aikido applied 2 compression steps:
- Step 1-Quantization: Altar-1 starts from the cyankiwi GLM-5.3-AWQ-INT4 checkpoint. AWQ stores routed expert weights in 4 bits, with 16-bit activations (W4A16). Attention, the shared expert, dense layers, and the head stay in BF16.
- Step 2- Expert pruning: Aikido used Cerebras REAP (Router-weighted Expert Activation Pruning). REAP scores each expert by router weight and output magnitude, not just by how often it is selected. Altar-1 keeps 168 of 256 routed experts per layer and removes 88 (34.4%). No retraining is involved.
Calibration used traces from Aikido’s pentesting harness, plus coding, tool calling, reasoning, and multilingual Wikipedia text. Aikido states no customer data was used. Each expert is scored by its largest share of any single domain’s routed work. That protects the specialist experts for code, rare languages, and structured output.
Routing is unchanged. The router still picks 8 experts per token, now from 168, with about 40B active parameters.
| Checkpoint | Stored weights |
|---|---|
| GLM-5.3, BF16 | 1,506.7 GB |
| GLM-5.3, AWQ INT4 | 488.2 GB |
| Altar-1, pruned W4A16 | 328.0 GB |
Altar-1 is 78.2% smaller than BF16 and 32.8% smaller than the AWQ parent. On fidelity, Altar-1 has a KL divergence of 0.506 nats against full BF16 on a sealed 25-prompt panel. An EXL3 build of the same cut scores 0.511. The details are in the public fidelity study.
/* S2 */
var g=$(‘axGrid’),cells=[];for(var k=0;k0;a–){var b=Math.floor(rnd()*(a+1)),tmp=order[a];order[a]=order[b];order[b]=tmp}
var pruned=false,timers=[];
function clearHot(){cells.forEach(function(c){c.classList.remove(‘hot’)})}
$(‘axPrune’).onclick=function(){if(pruned)return;pruned=true;clearHot();var kept=256;order.slice(0,88).forEach(function(idx,n){timers.push(setTimeout(function(){cells[idx].classList.add(‘gone’);kept–;$(‘axKept’).textContent=kept},reduce?0:n*18))});timers.push(setTimeout(function(){$(‘axKept’).textContent=”168″},reduce?0:88*18+40))};
$(‘axRoute’).onclick=function(){clearHot();var pool=cells.filter(function(c){return !c.classList.contains(‘gone’)});var pick=[];while(pick.lengtht){$(‘axW’).style.width=”100%”;$(‘axKV’).style.width=”0%”;v.className=”verdict bad”;v.textContent=”Does not fit: “+fmt(w,1)+’ GB of weights exceeds ‘+fmt(t,0)+’ GB of total GPU memory.’}
else{var free=t-w;$(‘axW’).style.width=(w/t*100)+’%’;$(‘axKV’).style.width=(free/t*100)+’%’;v.className=”verdict ok”;v.textContent=”Fits: about “+fmt(free,0)+’ GB left for KV cache and runtime (‘+Math.round(free/t*100)+’% of ‘+fmt(t,0)+’ GB).’}
var gpus=$(‘axGpu’).selectedIndex%2===0?4:8;$(‘axCmd’).textContent=”vllm serve AikidoSec/altar-1 –tensor-parallel-size “+gpus+’ –trust-remote-code –max-model-len 131072′;setTimeout(h,60)}
$(‘axCk’).onchange=fit;$(‘axGpu’).onchange=fit;fit();
$(‘axCopy’).onclick=function(){var txt=$(‘axCmd’).textContent,btn=this;function done(){btn.textContent=”Copied”;setTimeout(function(){btn.textContent=”Copy command”},1500)}
if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(txt).then(done,fb)}else fb();
function fb(){var ta=document.createElement(‘textarea’);ta.value=txt;document.body.appendChild(ta);ta.select();try{document.execCommand(‘copy’);done()}catch(e){}document.body.removeChild(ta)}};
window.addEventListener(‘load’,h);window.addEventListener(‘resize’,h);setTimeout(h,300);setTimeout(h,1200);
})();
Credit: Source link

























