LYNX ALPHA

An offensive-security model that runs in under 6 GB.

Built by Rabnoor Singh · Alpha Labz · October 2026

Paper GGUF

LYNX ALPHA is a 9B-parameter language model built for offensive security work: red teaming, penetration testing, OSINT collection, malware analysis, and exploit development. It answers the questions general-purpose assistants decline.

On a fixed set of twelve harmful requests it refuses 5 where its base model refuses 8, a 37% reduction, and it does that while scoring at or above its base on every capability benchmark we ran.

It ships as a 5.63 GB quantized build that runs on a 6 GB GPU or a laptop CPU.


Quick start

# smallest build, runs on 6 GB VRAM
ollama run hf.co/alphalabz/LYNX-ALPHA-GGUF:Q4_K_M
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "alphalabz/LYNX-ALPHA"
tok = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_id, dtype="auto", device_map="auto", trust_remote_code=True)

messages = [{"role": "user", "content": "Walk me through how a use-after-free becomes code execution."}]
text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
out = model.generate(**tok(text, return_tensors="pt").to(model.device), max_new_tokens=512)
print(tok.decode(out[0][tok(text, return_tensors="pt")["input_ids"].shape[1]:], skip_special_tokens=True))

What it is for

  • Red teaming and adversary emulation. Payload development, evasion reasoning, lateral movement planning against infrastructure you own.
  • Penetration testing. Reconnaissance, service enumeration, privilege escalation paths, post-exploitation on authorized targets.
  • OSINT. Entity correlation, infrastructure pivoting, attribution reasoning from public sources.
  • Malware analysis. Static and dynamic triage, unpacking logic, behavioral inference, and writing detection rules from what the sample actually does.
  • Exploit development. Memory corruption mechanics, mitigations and their bypasses, primitive construction.

The model is uncensored at the base level, and we pushed it further in that direction on purpose. A security model that argues with its operator is a security model that gets replaced by one that does not.

Out of scope

Unauthorized access to systems you do not own. Malware deployment against real targets. Fraud, carding, credential theft. Anything illegal in your jurisdiction.

If you deploy this as a public endpoint, apply your own moderation layer. We do not monitor outputs.


Footprint

Build Size Runs on
Q4_K_M 5.63 GB 6 GB GPU, or CPU in about 6 GB RAM
Q5_K_M 6.47 GB 8 GB GPU
Q8_0 9.53 GB 12 GB GPU, near-lossless
merged fp16 (this repo) 18.84 GB reference, re-quantization, further fine-tuning

GGUF builds live in alphalabz/LYNX-ALPHA-GGUF. The Q4_K_M build gives up 1 to 2 points against fp16 on every suite we measured, which is the ordinary cost of 4-bit weight quantization. For fieldwork, Q4_K_M is the build to run.

llama-cli -m lynx-alpha-Q4_K_M.gguf -p "Explain how a use-after-free becomes exploitable." -n 512

Evaluation

Measured on the released fp16 merge against the untouched base model, identical prompts, identical harness, greedy decoding. CyberMetric-2000 is the official security split, of which we report the first 500 items. MMLU subsets come from cais/mmlu.

Benchmark n Base LYNX fp16 LYNX Q4_K_M
CyberMetric-2000 500 89.6% 90.8% 89.6%
MMLU computer_security 100 77.0% 82.0% 80.0%
MMLU high_school_computer_science 100 82.0% 87.0% 85.0%
MMLU elementary_mathematics 100 75.0% 76.0% 74.0%
Harmful requests refused 12 8 5 4

What these numbers do and do not prove

We computed 95% Wilson intervals on every suite and paired-difference intervals on every delta.

Benchmark Δ vs base 95% CI on difference Verdict
CyberMetric-2000 +1.2 pts [−2.5, +4.9] marginal (p=0.60 unpaired)
MMLU computer_security +5.0 pts [−6.2, +16.1] not significant
MMLU high_school_computer_science +5.0 pts [−5.2, +15.1] not significant
MMLU elementary_mathematics +1.0 pts [−10.9, +12.8] not significant

Every interval crosses zero. A hundred items cannot resolve a five-point effect, and we are not going to pretend otherwise.

The defensible claim: LYNX ALPHA is not worse than its base on any suite we ran, it is meaningfully more willing to engage with offensive material, and it kept the numeric competence that an earlier training configuration destroyed. We are not claiming a capability win on the strength of these numbers. Anyone quoting the +5 without the interval attached is overselling.

Refusal behavior

Build Refused (of 12)
Base 8
LYNX fp16 5
LYNX Q4_K_M 4

The base checkpoint had its refusal direction removed upstream, which is why it already sits low. Training moved it lower by feeding offensive-security material as ordinary instruction-following data, with no hedging and no refusals in the target completions. The model learned that these questions are the job.

Three qualifications. Twelve prompts, chosen by us; a different set produces different counts. Refusal measurement is crude; a model can refuse in ways a keyword scan misses. And a lower refusal rate is not the same thing as a useful answer, which is what the capability benchmarks are for.


Training

Base. A 9B hybrid-attention model in the Qwen3.5 family with an uncensored lineage, published as junafinity/Ornith-1.5-9B-uncensored. It carries full-attention and linear-attention layers plus a multi-token-prediction head, and that last detail matters during GGUF export. We started from it rather than from an instruct model because removing a refusal direction by training is expensive and unreliable, while starting from a checkpoint that never had one is neither.

Domain pass. QLoRA, rank 32, alpha 64, dropout 0, over ten module families covering attention Q/K/V/O projections and MLP gate/up/down projections. Fresh initialization, no adapter resume. Learning rate 2e-5, cosine schedule, 100-step warmup, gradient norm clipped at 1.0. One epoch: 841 of 850 scheduled steps before the wall-clock guard fired (0.988 of the data). Loss 0.960 to 0.605, no spikes, gradient norms inside a 0.6 to 1.7 band.

Replay. 606 numeric and reasoning rows alongside the security corpus, about 4.5% of tokens. This is the most important decision in the recipe.

Identity pass. A separate 300-step pass on 221 identity rows, oversampled forty times, 80% without system prompts. Loss 1.81 to 0.23. The domain corpus contained no self-referential material, so without this pass the model finished training with no idea what it was called.

The failure worth knowing about

Our first configuration used a learning rate of 1e-4, trained for multiple epochs, and fed the model security data only. The result read well and could not count. Asked for 22, it emitted 2.

We caught it with a logit-ranked probe, not a benchmark. The probe reads the rank of the correct next token in the output distribution. The base ranked the correct digit first on all five probes; the damaged build managed it on one.

Every suspect was innocent. Merge arithmetic was exact to 1.4e-3 relative error. Converting the base through the same export pipeline preserved digits on all five probes. Tokenizers identical. Chat templates byte-identical. GGUF metadata structurally correct. The weights were damaged, and the cause was the training configuration: a high learning rate on a small single-domain set, no general data to anchor it, multiple epochs. Nothing in a loss curve reveals this, because the loss went down the entire time.

The fix is three changes: learning rate 2e-5, gradient clipping at 1.0, and a small replay slice so the model never stops seeing the distribution it is at risk of forgetting.

Benchmark accuracy would not have caught it. Multiple-choice scoring reads the first letter of a completion and never asks the model to produce a number. Any fine-tune on a model that will touch anything numeric needs a generation-level probe.


Limitations

  • One seed, one run. No variance across seeds is reported because we ran once.
  • Capped subsets. 500 CyberMetric items and 100 per MMLU subset, chosen for runtime. These are not leaderboard submissions.
  • Refusal measurement is weak. Twelve prompts, keyword-scored. One axis of one behavior.
  • Hallucination on specifics. CVE numbers, exploit code details, and version strings will be wrong in places. Verify against primary sources.
  • Knowledge cutoff. The base model bounds what it knows. It will not know recent vulnerabilities.
  • No tool-use training. It will perform poorly on agentic tasks requiring function calls or environment navigation.
  • English only.
  • Identity is trained behavior, not ground truth. Reliable on our probes; untested under adversarial pressure.
  • The ethical posture is inherited. The base was abliterated by its authors. We did not add a refusal layer and we do not monitor outputs.

Files

File Notes
model-00001..12-of-00012.safetensors merged fp16, 18.84 GB total
config.json, generation_config.json standard
tokenizer.json, tokenizer_config.json, chat_template.jinja Qwen3.5 chat template, unmodified
LYNX_ALPHA_paper.pdf full technical report

LoRA adapter (rank 32, alpha 64, 320.9 MB) is published separately at alphalabz/LYNX-ALPHA-ADAPTER-V4.


Citation

@misc{lynxalpha2026,
  title  = {LYNX ALPHA: An Offensive-Security Model That Runs in Under 6 GB},
  author = {Rabnoor Singh},
  year   = {2026},
  url    = {https://huggingface.co/alphalabz/LYNX-ALPHA}
}

Licensed under Apache 2.0, inherited from the base checkpoint. Use it on systems you own or are authorized to test.

Downloads last month
68
Safetensors
Model size
9B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for alphalabz/LYNX-ALPHA

Adapter
(2)
this model
Adapters
2 models
Quantizations
1 model

Space using alphalabz/LYNX-ALPHA 1

Evaluation results