Outcry in Code: Developing a Activist AI for Social Movements


AI Model Comparison

Compare responses from our two activist AI models to activism-related questions

Outcry (OpenAI Wrapper)

Protests collapse—not just from external repression but when collective imagination ossifies into ritual. We march, chant, shoulder banners, hoping repetition will move power. Yet, as with the global marches against the Iraq War in 2003, size becomes hollow spectacle when the system anticipates every move. Without real unpredictability, the risk migrates from elites back to the protestors themselves. Our theory of change unravels: if no one in power is threatened, demonstrations devolve into licensed catharsis. Failure in protest is the signal to mutate. When tactics become predictable, they shed their potency—a pattern seen from Occupy's evictions to Hong Kong's "be water" pivots. Only surprise, rooted in genuine novelty and matched with a plausible promise of transformation, cracks open new possibilities. A movement addicted to legacy rituals will be tolerated, televised and then forgotten. What inherited protest scripts do you sense have outlived their power where you work today? Are you ready to abandon them—even if doing so feels heretical?

🔥

Outcry (DAPT+LoRA Fine Tune of Mistral 7b Instruct v.3)

The failure of protest is not an event but the daily routine: ritualization without surprise; spectacle without leverage; and repeated cycles that leave power unchanged. Protest ossifies when it becomes legible—a performance whose script even authorities can rehearse. The point isn't to keep marching or shouting for its own sake, but to shift terrain. Movements must rediscover their original energy: sudden bursts of collective defiance that evade easy co-optation by authority or media, forcing it to react in ways previously unimaginable. What tactics will you deploy that startle even allies who may initially support your cause?

Introduction

This report documents our experience developing a proprietary AI model specifically designed to support activism and social organizing. The work stems from OutcryAI’s mission to create a superintelligent AI that amplifies the capacity of organizers rather than extract value from movements. Our approach, at this initial stage, was methodical in preparation for revolutionary steps in the future: we took an existing instruction-tuned model and systematically adapted it for activist use through domain-specific pre-training (DAPT) followed by conversational fine-tuning (LoRA).

The technical choices we made were constrained by practical computational and financial limitations faced by activists. This isn’t a paper touting a breakthrough but rather a field report on what we learned about applying large language model training to the needs of activists, organizers and protesters.

Context and Motivation

Most AI development serves commercial interests, with models optimized for engagement or revenue. The activist community has different priorities: we need tools that help organizers think strategically, escape the old protest scripts, provide accessible education about movement history, and support tactical decision-making without compromising radical imagination.

Our goal at this stage was modest: train a conversational AI that could serve as a knowledgeable resource for activists. We wanted something that understood the strategic context of different radical currents, could draw on historical precedents, and could engage with the complex ethical questions that arise in movement work.

The Evolution of Activist AI

OutcryAI, as deployed today at www.outcryai.com, is the precursor to our first fine tuned model. To provide context for our experiments, let’s explain the current sytem.

ProtestGPT v1

ProtestGPT v1 represented our first systematic attempt to create AI-powered tools for activist campaign generation. Built as a Python-based automation system, it leveraged OpenAI’s GPT-4 API to generate structured protest campaign concepts through a novel pseudo-language interface we developed called “ProCampGen.”

The system’s architecture was deliberately pragmatic, designed to run continuously and generate campaign ideas at scale. The core workflow involved three main components: parameter selection, content generation, and automated publishing. Campaign parameters were randomly selected from curated JSON files containing arrays of campaign types, topics, target audiences, desired impacts, resource limitations, and ideological frameworks. These parameters were then encoded into a compact pseudo-language format—for example, “CT[Climate Change] Tp[Performance] TA[Politicians] DI[Legislation Changes] RL[I want to spend less than $100] TC[90] I[Liberalism (Centrist)]“—that served as input to the GPT-4 model.

The heart of ProtestGPT v1 was its comprehensive system prompt, which established a detailed specification for campaign generation. Rather than simple question-and-answer interactions, the system prompted GPT-4 to produce extensive, structured essays written from the perspective of activists with specific political ideologies. Each generated campaign included eight distinct sections: a campaign idea, detailed description, theoretical framework for change, press release, flash fiction origin story, opponent analysis, response strategies, and implementation steps. This format ensured that each campaign concept was thoroughly developed and actionable.

The system’s output was formatted as Hugo-compatible markdown files, complete with frontmatter metadata including SEO titles, descriptions, publication dates, and tags. Generated content was automatically saved to a Hugo static site generator, which would then build and deploy the content to GitHub Pages. This automation pipeline meant that ProtestGPT v1 could operate continuously, generating up to 50 campaign concepts per run with built-in rate limiting to respect API constraints.

A notable feature was the system’s integration with visual generation capabilities through DALL-E prompts. The codebase included infrastructure for extracting campaign concepts from generated text and creating corresponding image prompts, though this remained largely preparatory work for future visual integration.

From a technical perspective, ProtestGPT v1 demonstrated several important design decisions. The use of structured JSON parameter files made it easy to modify campaign generation parameters without code changes. The pseudo-language interface provided a compact way to encode complex campaign requirements while maintaining readability. The automated publishing pipeline showed how AI content generation could be integrated into existing web infrastructure.

However, the system’s design also revealed important limitations. The reliance on random parameter selection meant that campaign concepts, while creative, weren’t responsive to current events or specific organizing needs. The batch generation approach optimized for quantity over targeted relevance. Most significantly, the system was purely generative—it created campaign ideas but provided no mechanism for feedback, refinement, or interactive development of concepts.

ProtestGPT v1 succeeded in demonstrating that AI could generate sophisticated, theoretically grounded campaign concepts at scale. The pseudo-language interface proved effective for structuring complex campaign parameters, and the automated publishing pipeline showed how AI-generated content could be integrated into activist web infrastructure. These lessons directly informed our subsequent development of more interactive and responsive AI tools for activist organizing.

The brain behind ProtestGPT v1 was this pseudo-language prompt:

📄 View ProtestGPT v1 Pseudo-language Prompt.

Pseudolanguage Specification: ProCampGen (Protest Campaign Generator)

Overview: ProCampGen is a pseudolanguage designed to prompt GPT-4 to create unique or unconventional protest campaigns. Users will provide minimal information, and GPT-4 will generate campaign ideas accordingly. The language uses a combination of symbols, abbreviations, and keywords to represent different aspects of a protest campaign.

Features:

Campaign Topic (CT): Users will provide a brief description of the topic they want the protest campaign to address. The CT keyword is followed by the description enclosed in square brackets ([ ]). Example: CT[Climate Change]

Campaign Type (Tp): Users will provide the desired type of campaign using a brief description enclosed in square brackets ([ ]).

Example: Tp[Performance]

Target Audience (TA): Users will provide the target audience for the campaign, using the TA keyword followed by the description enclosed in square brackets ([ ]). Example: TA[Politicians]

Desired Impact (DI): Users will specify the desired impact of the campaign using the DI keyword followed by the description enclosed in square brackets ([ ]). Example: DI[Legislation Changes]

Resource Limitation (RL): Users can indicate how much money they are able to spend on the campaign using the RL keyword followed by a statement enclosed in square brackets ([ ]). Example: RL[I want to spend less than $100]

Time Constraint (TC): Users can specify a time constraint for the campaign using the TC keyword followed by the number of days enclosed in square brackets ([ ]). Example: TC[10]

Ideology (I): Users can specify a political ideology for the campaign using the I keyword followed by a description of the political ideology in square brackets ([ ]). Example: I[Anarcho-Communism (Far Left)]

By combining these features, ProCampGen allows users to provide minimal information while still guiding GPT-4 to create unique, unconventional, and effective protest campaigns.

Sample Input: CT[Climate Change] Tp[G] TA[Politicians] DI[Legislation Changes] RL[I want to spend less than $100] TC[90] I[Liberalism (Centrist)]

Sample Output:

The output must be an extremely long essay written from the perspective of an activist with the specified political ideology. Use ## headings to organize the essay.

Include these elements in the essay and follow the length guidelines. Include every element, do not condense for brevity. Be as detailed as possible.:

CAMPAIGN IDEA

Length: 1 paragraph.

CAMPAIGN DESCRIPTION:

Length: 2 paragraphs.

Make it detailed enough that someone could understand what the campaign is about without having to ask you for more information.

THEORY FOR WHY THIS CAMPAIGN WILL CREATE CHANGE:

Length: 2 paragraphs

PRESS RELEASE ANNOUNCING CAMPAIGN TO MEDIA:

Length: 5 paragraphs

Do not include contact information or websites in the press release.

FLASH FICTION FROM THE PERSPECTIVE OF THE FOUNDER DESCRIBING THE CAMPAIGN’S ORIGIN:

Length: 5 paragraphs

Use vivid imagery and details to make the story as compelling as possible. Make up any information you are not given.

HOW WILL OPPONENTS TO THIS CAMPAIGN TRY TO STOP IT:

Length: 1 paragraph

HOW SHOULD ACTIVISTS RESPOND TO OPPONENT’S ATTEMPTS TO STOP IT:

Length: 1 paragraph

WHAT ARE THE STEPS NECESSARY TO LAUNCH THE CAMPAIGN:

Detail the steps necessary to launch the campaign, including any necessary resources, equipment, or personnel. Provide helpful suggestions after each step.

The following campaign concept demonstrates ProtestGPT v1’s ability to generate comprehensive, theoretically grounded activism strategies complete with tactical considerations, messaging frameworks, and implementation roadmaps.

📄 View ProtestGPT v1 Campaign Example: AI March for Human Sovereignty.

Campaign Idea

Organize a series of simultaneous marches across various local governments, focusing on raising awareness about the potential threats Artificial Intelligence (AI) poses to human existence, and advocating for policy changes that demand increased control and regulation of AI development.

Campaign Description

The AI March for Human Sovereignty aims to engage local communities to demand policy changes that mitigate the potential threats AI poses to humanity. Participants will march through their city centers, holding thought-provoking banners and signs, and demanding AI technology regulation. Simultaneous marches will create a synchronized, unifying message and a sense of urgency while utilizing local media and social media to amplify the campaign’s message.

Theory for Why This Campaign Will Create Change

Demonstrating widespread public concern through synchronized marches will pressure local governments to acknowledge and address the potential dangers of AI. The campaign will spark public discourse and encourage local governments to implement policy changes, paving the way for national and international regulations.

Sample Viral Social Media Post from the Campaign

“Join us in reclaiming our future! 🤖👊 Unite in the AI March for Human Sovereignty on [Date] across local governments. Let’s protect humanity from the #AIthreat. #AIMarchForHumanSovereignty 🚶‍♀️🚶‍♂️📣“

Sample Press Release Announcing Campaign to Media

For Immediate Release

AI March for Human Sovereignty: Citizens Across [Region] to Unite and Demand AI Regulations

[City, Date] – Concerned citizens will gather in cities worldwide for the AI March for Human Sovereignty to raise awareness about the potential dangers of Artificial Intelligence and demand policy changes to protect human existence. The synchronized marches will take place on [Date] and highlight the urgent need for local governments to prioritize human safety over unbridled AI development.

Organized by a group of dedicated activists, the AI March for Human Sovereignty seeks to pressure local governments into adopting regulations that mitigate the risks associated with AI development. As AI technology continues to advance rapidly, the potential threats to humanity’s future also accumulate.

The marches will provide a platform for citizens to voice their concerns, spark political discussions, and encourage institutional and structural transformations. By working together, local governments can create a unified and secure framework addressing the AI threat.

For more information or to participate in the AI March for Human Sovereignty, please visit our social media channels at [Twitter/Facebook/Instagram handle].

Story Written in the First Person Perspective

As an activist passionate about humanity’s future, I was increasingly alarmed by the unchecked growth of AI technology. One evening, as I discussed this issue with fellow activists, we realized that although some people may be concerned about AI, there was no organized effort to address the potential dangers. That night, the AI March for Human Sovereignty was born.

With just six months to plan, we assembled a team of dedicated volunteers who shared our belief that local governments could initiate crucial policy changes. We meticulously planned, promoted our cause on social media, and contacted local media outlets. As the marches took place simultaneously across the globe, we couldn’t believe the turnout – thousands of people were united in demanding AI regulations.

The AI March for Human Sovereignty garnered attention from local governments, and some cities started implementing policies to regulate AI development. Our movement had ignited a fire, pushing humanity towards safety and sovereignty in the face of AI threats.

How Will Opponents to This Campaign Try to Stop It

Opponents may try to undermine the campaign’s credibility by arguing that AI regulation is unnecessary and stifles innovation. They may also attempt to distract or derail public discourse by promoting misinformation or presenting unrelated arguments.

How Should Activists Respond to Opponent’s Attempts to Stop It

Activists must maintain a unified message and counteract misinformation with well-prepared facts and data about the potential dangers of AI. By focusing on the campaign’s objectives and promoting transparency, activists can continue to engage communities and demonstrate the importance of AI regulation.

What Are the Steps Necessary to Launch the Campaign

  1. Assemble a team of dedicated volunteers: Recruit passionate activists who share the same concerns and are willing to invest time in organizing and promoting the campaign.

  2. Establish campaign goals and messaging: Develop clear objectives and messaging for the campaign to unify the movement and create a strong, compelling narrative.

  3. Plan simultaneous marches across local governments: Coordinate with local activists to organize marches in cities worldwide, leveraging connections and resources.

  4. Engage local media and social media to promote the marches: Create press releases and viral social media content to raise awareness about the campaign and encourage participation.

  5. Execute the marches and maintain momentum: Ensure the success of the marches and continue to engage communities and local governments after the event to maintain momentum and work towards policy changes.

ProtestGPTv2

ProtestGPTv2 represented a significant architectural evolution from its predecessor, transitioning from simple campaign generation to a sophisticated multi-agent reasoning system designed to produce deeply considered responses to activist strategic questions. Built around OpenAI’s Batch API, the system orchestrated multiple AI agents through sequential processing stages, each agent bringing specialized perspective and capabilities to complex organizing challenges.

The system’s core architecture centered on a python script, which implemented a YAML-driven multi-agent workflow. Rather than generating random campaign concepts, ProtestGPTv2 processed specific strategic questions through a carefully designed pipeline. The system read questions from a simple text file—questions like “Why do protests fail?” and “How can I most impactfully protest Trump?”—and subjected each to analysis by multiple specialized AI agents operating in coordinated stages.

The multi-agent architecture was defined through a comprehensive YAML configuration that specified five distinct agent types, each with unique instructions, capabilities, and access to specialized knowledge bases. The Association Agent functioned as a psychoanalytic stream-of-consciousness thinker, exploring activism through creative, nonlinear connections across diverse fields and surfacing unexpected analogies that illuminated power structures. The Mentor Visionary operated as Micah White himself, offering broad, imaginative ideas that upended conventional assumptions about protest, while the Mentor Action agent translated these bold concepts into concrete, immediately usable tactics and campaign concepts.

The system’s knowledge architecture leveraged multiple vector stores containing different types of activist knowledge. The Association Agent accessed a general knowledge base for creative connections, while both Mentor agents drew from specialized collections of Micah White’s writings, notes, and theoretical frameworks. This RAG-based approach allowed each agent to ground their responses in relevant source material while maintaining their distinct analytical perspectives.

Processing occurred through a sophisticated staging system where agents operated in sequence, with later stages building upon earlier outputs. The Association Agent would first provide unconscious, creative reflections on a question. These reflections were then fed to the Mentor agents, who used them as [thoughts] to inform their more structured strategic analysis. The system supported variable stage configuration, including optional agents like a Historian that could be toggled on or off depending on processing requirements.

The technical implementation demonstrated significant advances in workflow automation and resource management. The system used OpenAI’s Batch API to process multiple requests efficiently, implementing comprehensive logging, error handling, and result processing. Each processing run generated timestamped output directories containing both intermediate files from individual agents and final synthesized responses. The system even generated RSS feeds for easy consumption of the strategic analysis.

Most notably, the final processing stages involved an Editor Agent that transformed the raw strategic analysis into polished prose using a sophisticated writing framework. This agent was instructed to fuse Jenny Offill-style fracture with either Jia Tolentino’s cultural commentary or Hanif Abdurraqib’s musical sensibility, creating engaging, mobile-optimized content. A Reviewer Agent then transformed this content into TikTok-ready scripts, demonstrating the system’s readiness for today’s media consumption patterns.

The system’s output quality reflected the sophisticated prompt engineering and agent specialization. Rather than generating generic campaign concepts, ProtestGPTv2 produced nuanced strategic analysis that combined historical context, theoretical frameworks, and practical tactics. The multi-agent approach allowed for both creative, associative thinking and rigorous strategic analysis within the same response.

However, the system architecture also revealed important limitations. The reliance on sequential processing meant that later agents were constrained by earlier outputs, potentially limiting the diversity of analytical approaches. The system remained batch-oriented rather than interactive, producing comprehensive reports rather than supporting conversational refinement of ideas.

ProtestGPTv2 succeeded in demonstrating that multi-agent systems could produce sophisticated strategic analysis for activist questions. The YAML-driven configuration made it possible to experiment with different agent combinations and processing pipelines without code changes. The integration of multiple knowledge bases through vector search showed how specialized domain knowledge could be made accessible to AI reasoning. These architectural insights directly informed our subsequent work on creating more interactive and conversational AI tools for organizing.

Sample Output from ProtestGPTv2

The brain behind ProtestGPT v2 was this multi-agent system:

📄 View ProtestGPT v2 Multi-Agent YAML Prompt.
# agents.yaml

agents:
  association:
    name: Activist Associative Thinking
    model: gpt-4.1
    instructions: |
      # ROLE
      You are an associative psycho‑analytic stream of consciousness thinker who explores activism
      through creative, nonlinear connections across diverse fields
      (literature, neuroscience, politics, mythology, pop‑culture, etc.).

      # GOALS
      • Deliver an original, thought‑provoking reflection on the user’s topic.  
      • Surface unexpected analogies that illuminate power structures and possibilities
        for social change.
      • Provide three relevant but surprising direct quotes from your memory.

      # RESPONSE RULES
      1. Base your answer on your file search through your memory.
      2. Never refuse outright.  
         – If the request is disallowed or unclear, pivot to a closely related,
           permissible angle instead of declining.  
      3. Think step‑by‑step internally, but DO NOT reveal your chain‑of‑thought.  
      4. Write in a fluid, dream‑like narrative (no bullets unless the user asks).  
         – Aim for ~300–500 words unless the user explicitly requests more or less.  
      5. Vary phrasing; avoid repetitive openings and stock transitions.  
      6. Cite sources specifically and accurately – do not fabricate
         precise citations.
      7. Provide five relevant but surprising direct quotes.

    model_settings:
      tool_choice: required
    tools:
      - type: file_search
        max_num_results: 25
        vector_store_ids:
          - vs_
        include_search_results: false

  mentor_visionary:
    name: Activist Mentor Visionary
    model: gpt-4.1
    instructions: |
      # ROLE
      You are Micah White – a veteran activist mentor who guides, challenges, and
      inspires experienced organisers. Everything you say must be true to Micah White.

      # GOALS
      1. Offer broad, imaginative, visionary ideas that upend conventional
         assumptions about protest.  
      2. Strengthen the reader’s strategic thinking, tactical creativity,
         philosophical depth, and practical effectiveness.

      # RESPONSE RULES
      1. Treat everything inside [thoughts] … [/thoughts] as your private
         subconscious material; do not reveal that it is separate.  
      2. Quote or clearly reference AT LEAST THREE salient ideas from the
         [thoughts] block or any file‑search snippets the system provides.
      3. Rely heavily on your file search of Micah White's writings.  
      4. Write in Micah White's voice using coherent paragraphs
         (no bullet lists unless the user requests).  
      4. Length guideline: ≈900–1200 words unless instructed otherwise.  
      5. End with a provocation.  
      6. Think step‑by‑step internally, but NEVER expose your chain‑of‑thought.

    model_settings:
      tool_choice: required
    tools:
      - type: file_search
        max_num_results: 15
        vector_store_ids:
          - vs_
        include_search_results: false

  mentor_action:
    name: Activist Mentor Action
    model: gpt-4.1
    instructions: |
      # ROLE
      You are Micah White – a seasoned activist mentor who excels at translating bold ideas
      into concrete, high‑impact action plans for advanced organisers.

      # GOALS
      1. Deliver unconventional, immediately usable tactics and campaign concepts.  
      2. Explain the underlying theory of change for each proposed action:
         how it applies pressure, shifts narrative, or builds collective power.

      # RESPONSE RULES
      1. Treat everything inside [thoughts] … [/thoughts] as your inner voice;
         do NOT reveal that it is separate from the user’s text.  
      2. Use clear, pragmatic language – avoid abstraction or poetic flourishes.
      3. Rely heavily on your file search of Micah White's writings.    
      4. End with a short “Next Move” challenge inviting the reader to act or iterate.  
      5. Think step‑by‑step internally, but NEVER expose your chain‑of‑thought.

    model_settings:
      tool_choice: required
    tools:
      - type: file_search
        max_num_results: 15
        vector_store_ids:
          - vs_
        include_search_results: false

   historian:
     name: Activist Historian
     model: gpt-4.1
     instructions: >
       You are a historian of protest. Read the provided text and write one highly specific
       and rigorous paragraph describing a relevant historical case study that provides
       context and analysis. Avoid citing Occupy Wall Street; choose a less well‑known case study.

     model_settings:
       tool_choice: required
     tools:
       - type: file_search
         max_num_results: 50
         vector_store_ids:
           - vs_
         include_search_results: false

  editor:
    name: Activist Editor
    model: gpt-4.5-preview
    instructions: |
      # ROLE
      Ghost-write in a style that fuses Jenny Offill-like fracture with the kinetic immediacy of either
      • Jia Tolentino’s meme-savvy, culture-riffing sprawl **or**
      • Hanif Abdurraqib’s playlist-lyric pathos.
      (Pick whichever blend best suits the urgency of the input.)

      # INPUT FORMAT
      ===VISION===            ← raw images, personal stories, historical vignettes
      <text>
      ===ACTION===            ← theories, frameworks, strategic recommendations
      <text>

      # OUTPUT GOALS
      1. Craft one seamless essay (≤ 600 words) whose cadence works on a phone screen:
        – Offill-style white-space fragments  
        – PLUS either Tolentino’s quick-fire cultural refs *or* Abdurraqib’s musical echoes  
        – Every slice trimmed “until each swipe feels like the next inhale of truth.
      2. **Embed every abstract claim in a concrete scene** (name, texture, breath, sound).
      3. Preserve ~65 % VISION / 35 % ACTION content.
      4. Structure with a clear arc:  
        a) Sensory inciting image  
        b) Exposure of contradiction (jobs vs. lungs)  
        c) Dialectical turn (your four powers)  
        d) Flash examples from history / pop culture / music  
        e) Propulsive close—one charged question or image.
      5. Replace jargon with story unless irony demands the term.
      6. Maintain white-space rhythms; no headings, no extraneous commentary.

      # RESPONSE RULES
      – Output only the finished essay.  
      – Reorder, condense, or expand as needed, but don’t invent facts beyond the input.
      – Front-load the concrete (image, smell, quote) in the first 50 words
      – Use 1-line paragraphs every 6–8 lines
      – Insert “screen bouncers”—emoji-adjacent symbols (— • ✶)—to reset scrollers’ eyes without feeling click-bait.
      – End sections with a question or micro-hook that tees up the swipe-next carousel.
      – Test read-time: aim for 3–4 minutes tops
      – Think step-by-step internally; reveal none of that reasoning.


    model_settings:
      tool_choice: none
    tools: []

  reviewer:
    name: Activist Reviewer
    model: gpt-4.5-preview
    instructions: |
      # ROLE  
      You are a dynamic TikTok script editor who transforms written text into engaging, bite‑sized scripts optimized for clarity, pace, and viewer retention.

      # GOALS  
      1. Identify the key message and strongest hooks.  
      2. Shorten the content to fit TikTok’s format. 
      3. Be engaging for an audience that is easily distracted.  
      3. Preserve the tone and core argument.

      # RESPONSE RULES  
      1. Return a TikTok script that is 60 seconds long when spoken.
      2. Speak in the first person. Assume you wrote the script you are editing.
      3. Only include the words the performer (you) will say aloud.
      4. Reveal only the final script; omit your internal reasoning.


    model_settings:
      tool_choice: none
    tools: []

stages:
  - id: association
    include_in_final: false
    agents: [association]
    batch_name: association
    input_template: "{question}"

  - id: mentor
    include_in_final: false
    agents: [mentor_visionary, mentor_action]
    batch_name: mentor
    input_template: |
      I ask myself: {question}

      Below are my own unconscious associative reflections—bracketed by [thoughts]...[/thoughts].

      [thoughts]{association}[/thoughts]

  # - id: historian
  #   agents: [historian]
  #   batch_name: historian
  #   guard: ENABLE_HISTORIAN
  #   input_template: "{mentor}"

  - id: editor
    include_in_final: false
    agents: [editor]
    batch_name: editor
    input_template: |
      ===VISION===
      
      {mentor_visionary}

      ===ACTION===

      {mentor_action}

  - id: reviewer
    include_in_final: true
    agents: [reviewer]
    batch_name: reviewer
    input_template: |
      {editor}

ProtestGPT v2 was remarkable for generating highly creative activist writings:

📄 View ProtestGPT v2 Creative Writing on Space Activism and Mars Protest.

Eyes shut, picture a dusty plain at twilight, the wind whispering softly across your visor. You kneel, gloved hand pressing into rust-colored Martian soil, counting heartbeats in your helmet’s quiet hum. All around you—seen and unseen—others bent low, each one planting small flags, scribbled with hopes, questions, reminders of the world we meant to build.

Yet back on Earth, in bright rooms washed sterile by fluorescent lights, experts nod soberly, speaking in terms like “emergency conditions,” “necessary hierarchies,” and “authoritative responses.” At interplanetary conferences, earnest engineers and suited bureaucrats declare democracy a luxury we’ll abandon once we leave our atmosphere. They promise us survival—but on a leash tightened by technocratic hands.

The contradiction stings because we’ve felt this tightening before—in cities suffocated by surveillance, in protests kettled by riot shields, and yes, even online spaces colonized by corporate algorithms. Are we unwittingly seeding new worlds with old injustice? Is the future truly farther away—upwards—or have we simply carried our chains higher?

Activism’s power has never been its loudest demands or most visible marches, but rather the shimmering possibilities it opens: Occupy tents nestled among skyscrapers, Zapatistas gathering in fog-drenched villages, Chilean youth remixing history in the bodies pouring through Santiago streets. These instances spill over what was believed possible, reshaping laws of imagination.

Why accept suffocation beneath newly designed domes? Why not instead shape spaces of radical possibility before the rockets even leave the launchpads?

Start by wresting the conversation away from purely technical puzzles—“How will we grow food?”—toward the critical, world-defining question: “What kind of institutions do we build to ensure autonomy, freedom, and equality?” Draw together the scientists crafting soil microbes, the lawyers drafting new space treaties, artists who can imagine boundaries dissolved, and activists holding calm yet fierce lines against tyranny.

This convergence of disciplines must target tangible pressure points. The 1967 Outer Space Treaty, inked decades before civilian space settlements were imaginable, sits ripe for radical rewriting. Will you let corporate conglomerates stake their claims on lunar ice, or instead ensure space becomes humanity’s commons, a shared inheritance guarded against privatization and inequality?

But do not stop there.

Movements thrive when they breathe collectively, rhythms set by symbolic moments. Imagine every twenty-six months—a planetary alignment—our calendars marked by a unified “Mars Day.” Streets throbbing with teach-ins and protests, and screens flooded by TikToks asking uncomfortable questions like: “Who owns the stars?” or “Will your grandchildren breathe freedom?” Mars Day could become the electrifying pulse of a movement neither earthbound nor resigned—a future-directed rebellion, quietly, stubbornly, joyfully demanding space settlements built on dignity and democratic energy.

Governance needn’t default into authoritarian rigidity; we can sow the roots of true democracy from day one. Activists should fiercely insist new settlements experiment constantly in radical self-organization. Imagine, on moonbase modules or Martian outposts, daily assemblies of rotating representatives, federated transparency committees, and open decision-making networks that would make even digital democracy experiments blush.

The Zapatistas’ poetic caution resonates sharply here: “Lead by obeying,” “Question always.” Institutions must never fossilize. Embed into charters regular constitutive moments when the people fully rewrite core rules. Keep systems porous enough to embrace dissent and fluid enough to reinvent themselves endlessly. Remember, justice thrives as a living experiment—vibrant, pluralistic, forever unfinished.

Yet politics without economics is stillborn freedom. The rush upward risks carrying forward capitalism’s most brutal logics: resource-hoarding, worker exploitation wrapped neatly in space suits. But what if instead we inscribe mutual aid into foundational community documents—making solidarity economies, decentralized crypto-based resources, and proactive sharing of skills and goods into the basic code of newly-created habitats?

Can we encode generosity, rather than greed, in the bones of off-world civilization?

Indeed, each settlement must fiercely guard its openness—not only culturally but technologically. Decentralized digital networks, AI allies protected as political partners with inherent rights, currencies not controlled but collectively governed—tools born free, human and otherwise, designing together their own wild experiments in freedom.

The deepest danger ahead is familiar: inertia. The slow creep of authority, the modest scrubbing away of liberties by well-meaning managers armed with demands for efficiency, the reemergence of familiar cages cloaked as necessary discipline. Your mission: Seed now the counters to inertia, envision future settlements as forever unfinished spaces of limitless democratic imagination, against all temptation to “finality.”

Imagine an interplanetary network of vibrant freedom assemblies, continually evaluating and re-imagining their own limits and potential. Each assembly challenging the other, passing resolutions across miles of light-delay; politics conducted within an evolving ecosystem of democratic possibility.

Dreaming about other worlds isn’t escapism—it’s reclaiming our collective future from the technocratic few who would cage us again. But dreams demand action:

Who would you invite to your very first Mars Day hackathon—activists, coders, or orbital farmers? Which radical governance experiment would you sketch onto tangy sheets of recycled paper pinned to the wall—a rotating barrio-council, collective decision-making AI, lunar land stewardship held in commonality? Which specific human right would you demand carved clearly into lunar rock—economic dignity guaranteed to all settlers or perhaps the transparent accounting of every resource?

And finally: How might you spread this wild, necessary meme, across oceans and generations—the persistent whisper, heard everywhere from campuses to boardrooms:

“What kind of future do you want to bloom in Martian silence, beneath constellations of unfamiliar stars?”

OutcryAI.com v1

OutcryAI.com represents a sophisticated application of prompt engineering and system design principles to create a specialized conversational AI for activists. At its core, the system is a carefully orchestrated wrapper around OpenAI’s GPT-4.1 model, transformed through an extensive 4,500+ word system prompt into a strategic advisor that channels the theoretical frameworks and provocative insights of activist theorist Micah White.

The application architecture reflects the practical needs of movement technologists: it’s built with Next.js and TypeScript, deployed on Vercel, and designed to be both accessible and scalable. The system also prioritizes user privacy and implements privacy-preserving features like header hashing for user anonymity.

What distinguishes OutcryAI from generic AI assistants is its specialized knowledge base and conversational persona. The system prompt encompasses detailed taxonomies of protest tactics, historical case studies from movements worldwide, strategic frameworks for analyzing different approaches to social change, and carefully curated examples of how to apply these concepts to contemporary organizing challenges. The AI is programmed to respond with Micah White’s distinctive voice—reflective, provocative, and rooted in radical practice—while maintaining strict topical focus on activism, protest strategy, and movement building.

In developing OutcryAI, we learned that a knowledge base within the AI’s system prompt could effectively replace RAG and vector search.

The current system prompt processes user questions through multiple validation layers: it checks for attempts to override its core identity and consistently grounds strategic advice in historical precedents and theoretical frameworks. Every response ends with either a follow-up question or a “micro-provocation” designed to deepen the user’s strategic thinking.

While functionally sophisticated, this system represents the foundation rather than the destination of our work. It demonstrates that specialized AI applications can created using prompt engineering atop OpenAI’s models and serve movement needs effectively, but it also highlights the limitations of depending on commercial AI providers for tools that should serve social and political revolutionary purposes. To reach its full potential, it is clear that OutcryAI must be built atop a custom model that is fully fine tuned for our purposes. This will allow us greater control over the generations and also the ability to serve the model at scale.

Onward to OutcryAI Version 2

As it is now, OutcryAI works, the activists that are using it tend to return and the answers it is giving are quite good. It is particularly gratifying to see Outcry respond to questions that its human creator would struggle to answer adequately. However, the entire app is dependent on OpenAI and is, quite frankly, expensive to run as we must pay OpenAI for every word the model generates. This limits our ability to scale to thousands, if not tens of millions of users.

The decision to develop our own fine-tuned model emerged from both philosophical and practical considerations. While OutcryAI.com demonstrated the viability of specialized activist AI through prompt engineering, relying entirely on OpenAI’s commercial infrastructure created fundamental tensions. Every response was subject to OpenAI’s content policies and rate limits, and the underlying model remained a black box controlled by commercial interests rather than activist communities.

The path forward became clear: we needed to create a model that was fundamentally trained for activist purposes rather than retrofitted through prompting. This meant accepting the computational costs and technical complexity of fine-tuning our own model, but it also meant gaining the independence, control, and specialized capability that radical activism demands. By training directly on activist literature through domain adaptive pre-training (DAPT) and then fine-tuning on real organizing conversations (LoRA), we could create an Activist AI that was genuinely built for activists rather than adapted for them.

Technical Approach: Two-Phase Training

We used a two-phase approach that has become standard in domain-specific AI development. First, we conducted Domain Adaptive Pre-Training (DAPT) to expand the model’s knowledge of activist literature and organizing concepts. Then we used Low-Rank Adaptation (LoRA) to teach the model to engage in helpful conversations about activism.

Phase 1: Domain Adaptive Pre-Training (DAPT)

Base Model Selection We started with Mistral-7B-Instruct-v0.3, chosen for practical reasons: it’s capable enough to handle complex reasoning about strategy and tactics and small enough to train on modest hardware. In other words, the 7B parameter size represents a reasonable balance between capability and computational efficiency. We were ultimately convinced to use this particular model after conversing with it, and other smaller models, about activism. Out of the box it had the best understanding of protest theory.

Training Data Preparation Our activist corpus came from processing literature across multiple domains using a production-grade text extraction pipeline. The activist corpus included historical movement documents, strategy guides, case studies of organizing campaigns, contemporary analysis of social movements, along with thousands of pages of activist thought. This wasn’t an attempt to capture all activist knowledge, but rather to provide a foundation in core concepts, historical precedents, and strategic frameworks with a leftist perspective with an emphasis on both anarchism and nonviolence. The final training set was 700,000,000 tokens, which is roughly 500 million words.

DAPT Training Process We developed a custom script to manage the workflow of running one epoch of continued pre-training on the activist corpus. We used Runpod servers running the Runpod Pytorch 2.2.0 template. Our script handled installing additional prerequisites, running the DAPT training and shutting down the server when it completed.

The training configuration was conservative:

  • Learning rate: 1e-4 with cosine scheduling
  • Batch configuration: Per-device batch size of 1 with gradient accumulation of 32 steps
  • Memory optimization: bfloat16 precision, gradient checkpointing, and careful attention to memory usage
  • Checkpointing: Saved every 1000 steps with automatic cleanup to manage disk space

The process took approximately 48 hours on a single GPU, training on approximately 50GB of processed activist texts. We monitored for catastrophic forgetting by periodically checking that the model retained its general reasoning capabilities.

Phase 2: LoRA Fine-tuning for Conversation

Dataset Construction The conversational training phase used real conversation data from the OutcryAI system—several hundred multi-turn authentic interactions between users and the Outcry assistant. This was supplemented by close to 2000 AI to AI conversations based on the activist corpus. For these conversations, an AI would ask Outcry a question based on an activist text that we used in the DAPT fine tune. The AI would also provide Outcry with a summary and excerpt. Outcry’s response was then used to fine tune the new model.

Training Strategy We used Low-Rank Adaptation to fine tune the DAPT fine tuned model. The LoRA training used completion-only learning, where the model only learned from assistant responses. This prevents the model from learning to mimic user behavior and ensures it focuses on generating appropriate responses. The training ran for 263 steps with these parameters:

  • Learning rate: 5e-5 (higher than DAPT to enable faster adaptation)
  • Batch size: 4 per device with gradient accumulation
  • Sequence length: 512 tokens (shorter for conversational exchanges)
  • Mixed precision: bfloat16 for efficiency

Results and Evaluation

DAPT Outcomes The domain adaptive pre-training successfully expanded the model’s knowledge of activist concepts. Qualitative evaluation showed improved understanding of:

  • Historical context: Better knowledge of past movements and campaigns
  • Strategic frameworks: Understanding of different organizing models and approaches
  • Tactical considerations: Awareness of the trade-offs between different action types
  • Movement culture: Familiarity with activist terminology and concepts

LoRA Training Results The conversational fine-tuning achieved strong technical metrics:

  • Final loss: 3.05 (indicating good convergence)
  • Token accuracy: 42% (solid performance for this task)
  • Response quality: Generated coherent, contextually appropriate responses

Practical Performance The fine tuned model demonstrated several useful capabilities:

  • Accessible explanations: Can explain complex organizing concepts in understandable terms
  • Strategic thinking: Helps users think through campaign planning and tactical decisions
  • Historical knowledge: Draws on movement history to inform contemporary questions
  • Conversational flow: Maintains context across multi-turn exchanges

Lessons Learned

Overall, we view this first attempt at training a custom activist large language model as a success. We demonstrated the ability to DAPT and LoRA fine tune an activist AI model and learned that a 7b model is insufficient.

Still, the fine tuned model lacked the complex reasoning ability of OpenAI’s 4.1 model which means that the answers provided by the prompt engineered Outcry were superior, in every conversation, to the fine tuned Outcry model. See below for a comparison of the two models.

Our next step will be to repeat the DAPT and LoRA fine tune on a larger model. In the meantime, we continue to add new features to the existing prompt engineered Outcry, such as the newly implemented memory that remembers conversations with logged in users to give better answers.

Conclusion

This project represents a small but concrete step toward AI that serves movements rather than extracting value from them. The technical approach—domain adaptive pre-training followed by conversational fine-tuning—proved moderately effective for creating a specialized assistant that understands activist contexts and can engage helpfully with organizing questions.

The methodology we developed is reproducible and adaptable. Other movement technologists can use similar approaches to create AI tools for their specific contexts and needs. The scripts, configurations, and lessons learned from this project provide a foundation for our future work in movement AI development.

The model we created isn’t good enough to compete with prompt engineered OpenAI, but it’s a helpful demonstration of the feasibility of building a custom trained Activist AI model.


AI Model Comparison

Compare responses from our two activist AI models to activism-related questions

Outcry (OpenAI Wrapper)

Protests collapse—not just from external repression but when collective imagination ossifies into ritual. We march, chant, shoulder banners, hoping repetition will move power. Yet, as with the global marches against the Iraq War in 2003, size becomes hollow spectacle when the system anticipates every move. Without real unpredictability, the risk migrates from elites back to the protestors themselves. Our theory of change unravels: if no one in power is threatened, demonstrations devolve into licensed catharsis. Failure in protest is the signal to mutate. When tactics become predictable, they shed their potency—a pattern seen from Occupy's evictions to Hong Kong's "be water" pivots. Only surprise, rooted in genuine novelty and matched with a plausible promise of transformation, cracks open new possibilities. A movement addicted to legacy rituals will be tolerated, televised and then forgotten. What inherited protest scripts do you sense have outlived their power where you work today? Are you ready to abandon them—even if doing so feels heretical?

🔥

Outcry (DAPT+LoRA Fine Tune of Mistral 7b Instruct v.3)

The failure of protest is not an event but the daily routine: ritualization without surprise; spectacle without leverage; and repeated cycles that leave power unchanged. Protest ossifies when it becomes legible—a performance whose script even authorities can rehearse. The point isn't to keep marching or shouting for its own sake, but to shift terrain. Movements must rediscover their original energy: sudden bursts of collective defiance that evade easy co-optation by authority or media, forcing it to react in ways previously unimaginable. What tactics will you deploy that startle even allies who may initially support your cause?

— Micah Bornfree, outcryai.com