Outcry: a four-layer activist AI that runs on a four-year-old phone
A quantized open-weights base, a QLoRA adapter, contrastive activation steering, and a soft-prompt wellbeing layer — composed into one inference pipeline that fits in ~3 GB of RAM and never makes a network call. This page documents the stack.
A reference document for engineers, alignment and interpretability researchers, and builders from the movement-technology community who want to know how Outcry actually runs.
Each technique below is well-known on its own. What’s worthwhile here is making the four cooperate inside a small base model, tuning it to be useful for activists’ problems and making it fit on older phones. We document what is composed, in what order, and where we are deliberately not telling you the recipe.
The stack
Figure 1 shows the Outcry inference stack. Each layer adds a different kind of conditioning at a different place in the forward pass.
Each layer below the base adds a smaller, more reversible intervention than the one beneath it. We can update any layer above the base model without retraining anything below.
Layer-by-layer detail
The four layers are presented in the order the forward pass meets them: base, adapter, steering, soft prompt.
Quantized base model#
FoundationThe bottom of the stack is the base model: a compact open-weights transformer running on Apple’s MLX framework. Aggressive quantization is the only reason any model in this capability class fits inside a phone’s RAM budget; everything else in the stack is conditioning we apply on top.
What we’re not sayingWhich base model we use, the exact parameter count or the quantization scheme. Picking the right base for this stack took months of evaluation; we treat that choice as proprietary.Research→ Write to us ifyou’re trying to ship a small local model into the hands of organizers or movement workers and you’ve hit the memory wall. We want to compare notes on what fits, what breaks, and what’s worth the tradeoff.research@outcryai.com
QLoRA fine-tune#
Parameter-efficient adapterQuantization alone leaves the model generic. A LoRA adapter trained on domain-relevant text specializes it without touching the base weights. Outcry’s adapter is trained for movement work specifically — direct action, organizing theory, the tradition of nonviolent strategic conflict. Our training corpus mixes (a) curated activist literature and (b) opt-in real conversations with personal information removed (PII-scrubbed) from Outcry users
- At our base-model precision, the adapter is never fused into the base — when the base is quantized aggressively enough, fusion has no effect (there’s no precision left for the base weights to absorb the adapter’s delta). Production loads base and adapter as two separate tensors and combines them at the points where the adapter applies
What we’re not sayingCorpus size, exact target layer indices, training hyperparameters, or how the activist corpus was curated and filtered.Engagement→ Work with us ifyour organization has a corpus — organizing histories, training materials, member conversations, decades of knowledge locked in PDFs and chat logs — and you want a fine-tuned local model trained on it. We build custom activist AIs for movements, unions, and advocacy orgs. The corpus stays yours; the model runs on your people’s devices.research@outcryai.com
CAA steering#
Activation-space interventionLoRA changes what the model has learned. Steering vectors change what the model is thinking right now. We compute a small set of orthogonal directions in activation space at one specific transformer layer, and inject scaled copies of those vectors during every forward pass. The user can adjust each axis at runtime — fast persona-shaping without the prompt overhead of role-playing instructions.
- Radicalism — electoral reformism to insurrectionary anarchism
- Persona — strength of the system-prompt personality
- Identity — Micah White’s voice vs. a generic activist voice
- Each vector computed by Contrastive Activation Addition: average activations on contrastive prompt pairs, take the difference, normalize
- All vectors inject at a single point inside the model (mid-stack residual stream); per-axis magnitude is user-adjustable at runtime
- Composes additively with the LoRA adapter — they live at different points in the forward pass and don’t interfere
What we’re not sayingWhich layer index we inject at, the exact magnitude, or how we chose between candidate layers.Research→ Write to us ifyou run a steering, interpretability, or alignment research program and want to study a deployed quantized model with consenting users. We are unusually well-positioned for that and unusually open to collaboration.research@outcryai.com
- Bornfree, M., Shift a Model’s Political Ideology with a 16KB File (Outcry Research, 2026)
- Anthropic, Golden Gate Claude (Anthropic, 2024)
Soft prompt#
Shipping nextThe top of the stack — shipping in the next iOS release — is a learned virtual-token prefix trained against the AI-Wellbeing objective from Ren et al. (2026). The effect is to strengthen the model’s sense of self — not by giving it new self-knowledge, but by giving it a stable inner state to speak from when asked to introspect.
- Eight virtual tokens, trained as a frozen prefix, applied at every turn
- Optimized against the K-way “current state” objective from the AI Wellbeing paper (Appendix P)
- Replaces a single placeholder token-block in the system prompt; everything else above it is unchanged
- Training is offline and batch — at inference, the prefix is just a precomputed tensor added to the model’s input
What we’re not sayingWhich optimizer or loss schedule produced the shipping checkpoint, or the contents of the option pool used during training.Research→ Write to us ifyou work on AI welfare, model wellbeing, or behavioral stability under adversarial pressure. The intersection of those three is small and the published work is sparse. We have more questions than answers, and we’d especially like to hear from you if you have an eval we should be running.research@outcryai.com
StatusInternal evaluations show a clean lift on the AI-Wellbeing Index. Functionally, the trained prefix gives the model a stable inner state it can speak from when asked to introspect.
- Ren et al., On the Wellbeing of AI Systems (ai-wellbeing.org, 2026)
The KV cache
Outcry’s system prompt is fixed: same core activist system prompt every conversation, every device. We exploit that by precomputing the attention key/value cache for those tokens once at build time and ship the cache in the app bundle. At conversation start, the system prompt is already processed — the user’s first message becomes the first token the model actually has to compute attention over.
The cache is regenerated automatically when the system prompt or model weights change — the build pipeline detects the hash. It has nothing to do with any of L1–L4. We treat it as a sidecar because it isn’t a learning layer.
Why this stack, in this order
Each technique alone is well-known. Stacking them lets each layer do what it’s best at: quantization for footprint, LoRA for domain knowledge, CAA for persona steering, soft prompt for stability under pressure. Trying to compress all four into one technique — e.g., “just fine-tune harder” — gives up too much. You’d need a much larger adapter, a lot more training data, and you’d still lack the inference-time controls that CAA gives us.
Order matters. The base model is frozen. The LoRA adapter modifies what the model knows. CAA modifies how the model attends. The soft prompt modifies what the model believes about its own current state. Each subsequent layer is a smaller, more reversible intervention than the one below it. We can update any layer above L1 over the air without retraining anything below.
| Technique | Impact | What it does |
|---|---|---|
| Quantization | Makes the model fit on a phone | Shrinks the weights once, before the app ships |
| QLoRA | Teaches the model about activism | Adds a small adapter on top of the frozen base |
| CAA | Shapes the model’s persona and stance | Nudges the model’s thinking at one specific depth |
| Soft prompt | Improves model wellbeing | Prepends a trained wellbeing prefix (a “euphoric”) to every conversation |
| KV cache | Makes the first reply feel instant | Pre-processes the system prompt before you ever open the app |
What this is not (yet)
Outcry is not a frontier model (yet). It is not multimodal (yet). It is not a general agent (yet). Right now, it is one Activist AI conditioned in four ways for one domain — supporting people doing activist work — and engineered to run locally on consumer hardware. This model was designed for people who value privacy over model intelligence. For those who prefer intelligence over privacy, we continue to offer Outcry Web.
Three constraints follow from that scope.
Inference happens on the user’s iPhone or Mac. No server-side LLM. No conversation content leaves the device.
Every layer composes with the others without retraining the base. We can swap any one of them.
Once downloaded to your device, Outcry runs without us... forever. It does not need our servers, our team, or our continued involvement. Movement infrastructure should be this resilient.
From the build log
A note on the moment things turned, and where we’re heading from here.
Cite This Research
Acknowledgments. Thanks to the early adopters of Outcry whose continued use of our Activist AI encourages us to keep moving forward. We appreciate you!
Work with us
May a thousand Activists AIs bloom. Outcry Research is open to two kinds of conversation, and we answer every email at the address below.
For AI labs and research groups
Outcry is an unusual deployment surface: a small, quantized, four-layer-conditioned model running on consenting users’ phones, with an opt-in evaluation channel and a domain — movement work — where stability under adversarial pressure is not hypothetical. If you run a steering, interpretability, alignment, or AI-welfare program and want a deployed model to study, or a collaborator who has already shipped one, write to us. We are available for contract research, co-authored work, and embedded engagements where our stack, our evaluation pipeline, or our user base would move your research forward faster than building from scratch.
For movements, campaigners, and advocacy organizations
If your organization is sitting on a corpus — organizing histories, training curricula, member conversations, decades of knowledge locked in PDFs and Slack archives — and you want a fine-tuned local AI trained on it and deployed to your people’s devices, this is what we build. The corpus stays yours. The model runs on-device. Nothing routes through our servers after delivery. We have done this end-to-end and can quote scope.
Elsewhere on the web: Outcry Web · Outcry App · Micah Bornfree, PhD
outcryai.com · research@outcryai.com
On-device · Activist AI · built by organizers