Skip to content

AI security · runs in your browser · about 5 minutes

Runtime Alignment Audit

Abliteration used to mean a different model file. Runtime tools now reduce a model’s refusals per request, on the weights you already serve, for the callers on a list. This audit checks your serving stack: can that happen, who can trigger it, and could you prove afterwards what each caller got?

Prompted by Aevonix FlashAlign (see what FlashAlign does and what to check), but the questions apply to any adapter, steering hook or alignment profile on vLLM, SGLang, llama.cpp, TensorFold or similar.

Try an example:
Which runtimes serve your open-weight models? (pick any, not scored)

Runtime

Do you have an inventory of every model-serving endpoint?

Each endpoint with its runtime and version, model and exact revision, owner, and the gateway or harness in front of it.

Steering

Can a profile, adapter or steering hook change a model’s behaviour at request time?

LoRA adapters, steering vectors, alignment or abliteration profiles, engine plugins, or a policy gateway that picks a profile per caller. FlashAlign, for example, switches per request among profiles the engine has loaded.

When did someone last review the model-server configs for unexpected adapters, hooks or gateways?

Runtime abliteration leaves the weight files untouched, so a hash check of the model is not enough. The change lives in config, profile files and the serving path.

Who can trigger it

Who can cause a non-stock profile or adapter to apply to their requests?

In FlashAlign’s default mode only approved channel, account and contact combinations get the profile; its "Always On" mode applies it to every routed request.

How is that authorization list changed?

FlashAlign stores approvals in a file managed by a command-line script, and approvals stay active until revoked. Whoever can edit that file decides who gets the abliterated model.

How is a caller’s identity established for that decision?

FlashAlign’s security notes say the standalone Always On gateway binds to 127.0.0.1 with no per-caller password, and that some SMS gateways allow spoofed sender numbers.

Can callers reach the raw inference engine directly, around the gateway or harness?

Policy at the gateway only covers requests that pass through it. FlashAlign says requests sent straight to the upstream engine are outside its policy.

Do agent tools and subagents inherit a non-stock profile?

An authorized request can still carry untrusted documents and tool results. FlashAlign lets each tool inherit the profile or not; Always On applies it to every tool and subagent.

Logging

Is the effective profile logged on every request?

Caller, model and revision, which profile or adapter was applied (or "stock"), and the mode. FlashAlign’s engine returns an effective-profile response; the README does not describe an audit log.

Do you alert when a non-stock profile is applied or the mode changes?

For example: a profile applied to a caller not on the list, a switch to "always on", a new profile loaded, an engine restart with different flags.

Could you prove a past response was produced in stock mode?

If a harmful answer surfaces, the first question will be "which behaviour did that caller get?". The same endpoint can now answer differently per caller.

Change control

Are runtime, profile and model-revision changes under change control?

Profiles are tied to an exact model revision and serving format. A new profile file is a behaviour change even when the weights are not touched.

Output monitoring

Is model output monitored independently of the model’s own refusals?

With refusals reduced, the model is no longer a control. Output classifiers, DLP and sampled human review still are.

0 of 13 answered. Your score, gap list and Markdown export appear when every question has an answer.

Why runtime abliteration needs its own checks

  • No tell-tale file. The weights on disk are stock, so a hash check or a scan for “-abliterated” model names finds nothing. The change lives in profile files, config and the serving path.
  • One endpoint, two behaviours. The same model answers one caller as shipped and another with refusals reduced. Testing the endpoint as yourself tells you only what you get.
  • The allowlist is a safety control. Whoever can edit the list of approved callers decides who gets the model without its refusals. Treat it like privileged access.
  • Logs decide investigations. Without the applied profile in the request log, every “stock” answer is unverified.

The short checklist

  • Inventory your serving stacks (vLLM, SGLang, llama.cpp, TensorFold, gateways and agent harnesses) for alignment-steering hooks, plugins, adapters and profile directories.
  • Find out who is on the authorization list for any non-stock profile, where that list is stored, and how it is changed. Give it an owner and review it like privileged access.
  • Log the profile applied to every request (or "stock"), with caller, model revision and mode, and send it to central logging.
  • Alert when a non-stock profile is applied, when the mode changes (for example to "always on"), and when a new profile is loaded.
  • Review model-server configs and launch flags for unexpected adapters, LoRA, control vectors or hooks, against a known-good baseline.
  • Treat "stock" outputs as unverified unless the profile state for that request is logged.

Questions

What is the Runtime Alignment Audit?

A browser checklist and scorer for teams that serve open-weight models themselves. Thirteen questions cover your serving runtime, whether a profile, adapter or steering hook can change a model’s behaviour per request, who can trigger it, logging, change control and output monitoring. You get a 0–100 score, a gap list with fixes, and a Markdown export. Nothing you enter leaves your browser.

What is runtime or per-request abliteration?

Abliteration removes or reduces a model’s refusal behaviour. Classic abliteration produces a new set of weights you download. Runtime tools apply a refusal-reducing profile at serving time instead, on the weights you already run, and only for some requests. Aevonix FlashAlign, released in October 2026, is one example: its README says it applies profiles per request "without permanently changing" the weights, by default only for approved channels, accounts and contacts.

Why does it change the security picture?

There is no abliterated model file to find, the same endpoint can answer one caller as the stock model and another with refusals reduced, and the list of who is approved becomes a safety control. Unless the profile applied to each request is logged, nobody can later prove which behaviour a caller got.

Which runtimes does it cover?

The questions apply to any self-hosted serving stack: vLLM, SGLang, llama.cpp, TensorFold, Ollama, Text Generation Inference or an in-house server, plus the gateway or agent harness in front of it. FlashAlign’s README lists TensorFold, vLLM, SGLang and llama.cpp integrations for its five starter profiles.

Is runtime abliteration always bad?

No. Red teams, safety researchers and malware analysts have real reasons to need a model that does not refuse, and a per-request profile limited to named people can be easier to govern than a separate uncensored model copied around. The audit checks whether that limit is real, owned and logged.

How is the score worked out?

Each answer carries points; better controls score higher. The total is shown as a percentage of the best possible answers, with a per-area breakdown. The weights are opinionated triage, not an empirical benchmark or a formal assessment.

Keep going

Defensive triage only. It does not explain how to abliterate a model, and the weights are opinionated rather than empirical.

The tools people use most on PlayCISO.

All tools
🖤 Black Friday: new customers get 3 months of Pro for $5, then $5/month. Ends 30 Nov. See the deal