✒️⚡ Spark Workshop · Facilitator & Attendee Guide
3-Hour Build · Workshop Edition

Give Your Org a Spark

A working multi-agent system for your organization in one sitting. You will leave with agents, state files, memory, and a first session that reads your real data.

Duration3 hours
FormatIn-person facilitated
Cohort5–15 builders
PrereqLaptop · GitHub · Claude Code
You leave withA running Spark
~/my-org — claude-code
Preview

Pre-Workshop Setup

15-minute window before the workshop starts. Do this while attendees arrive and grab coffee.

⚑ Facilitator note

Walk the room during this 15-min window. Your one job before Hour 1 starts: every attendee has Claude Code open, a terminal open, and the template repo cloned. If one person is behind at the start of Hour 1, they spend the whole workshop catching up. Solve setup first.

Hour 1

Design Your Agents

The roles your org needs but can't afford.

Warm-Up · Who Does Your Work?

0:00 → 0:10 · 10 min
◆ Attendee prompt

On a sheet or a blank markdown file, list every role your organization needs but can't afford. Not titles — functions. Who writes the grants? Who designs the lesson? Who checks the cultural accuracy? Who follows up with partners? Who tracks decisions?

Target: 5–10 roles. 3 minutes.

⚑ Facilitator note

Group-share after 3 min. Write the roles on a whiteboard or a shared screen. Call out the patterns: nearly every nonprofit lists Grant Writer, Content/Comms, Research/Archivist, Reviewer, Operations. The pattern is the point — those are their agents.

Skill · Agent Design

0:10 → 0:30 · 20 min

Walk through the four things every agent needs. Keep this tight — the build session is where it lands, not here.

PropertyWhat it meansExample
ScopeWhat this agent handles (and does not)Grant strategy, funder analysis, pricing — not commercial opportunity alignment
Intent signalsKeywords that route to this agentgrant, funding, LOI, investor, SAFE, deadline
VoiceHow this agent communicatesBlunt. Numbers-aware. Reads rejection letters for fun.
CalibrationConservative (false negatives preferred), Aggressive (false positives preferred), BalancedAggressive — include long-shot funders; better to surface a bad fit than miss a good one
⚑ Facilitator note

Show a real agent spec on screen — open agents/example-grant-writer.md from the template. Point out: it's ~100 lines. It's plain English. It's markdown in a git repo. It is not magic. That demystification is the lever.

Key line to say out loud: "Agents are personas, not separate programs. Same AI, different hats." This is the idea most people get stuck on.

Build · Your Agent Roster

0:30 → 0:55 · 25 min
◆ Attendee prompt

Pick 3 agents from your warm-up list. For each, fill out the template below as a new file in agents/your-agent-name.md. Name them something that feels alive — The Scout, The Librarian, The Editor. Naming matters. The agent feels real when it has a name.

agents/your-agent-name.md
## Agent: [Name]

**Scope:** [what this agent handles]

**Intent signals:** [keywords that route to this agent]

**Voice:** [how this agent communicates — 1–2 sentences]

**Calibration:** conservative | balanced | aggressive
- Reason: [why this calibration for this role]

**Files to read:** [state files this agent depends on]

**Files to write:** [state files this agent updates]

**Handoff block:** [when this agent finishes, who reviews next?]
⚑ Facilitator note

Walk the room. Two things to watch for:

  • Scope bleed. If someone's "Content Agent" is also writing grants, split it. Agents with narrow scope perform better.
  • Named too generically. "Marketing Agent" is dead on arrival. "The Dispatch" has a voice. Push people to name their agents the way they'd name a character.
agents/the-scout.md — vs code
Example

Check-In · Group Share

0:55 → 1:00 · 5 min

2–3 volunteers share their agent rosters. Group gives feedback on naming, scope, and calibration. Keep the energy high — this is the first time attendees hear their own ideas mirrored back.

Hour 2

Build Your State Layer

The state files ARE the institution.

Intro · The State IS the Institution

1:00 → 1:05 · 5 min

One sentence to say: "If your AI forgets everything between sessions, it's not a colleague — it's a stranger you brief every morning. The state layer is what turns it into a colleague."

Show the file tree. Every agent reads the same files. Every agent writes to them. No database, no vendor lock-in. Just markdown in a git repo.

Skill · State File Anatomy

1:05 → 1:20 · 15 min

Walk through the 4 files every Spark needs. Keep each to 2 minutes — they'll populate them next.

FileWhat it holdsWho writes to it
state/org-state.mdThe map. Current priorities, active projects, upcoming deadlines. 80 lines max — if it's longer, archive.Every agent at session close
state/portfolio.mdEvery project — status, owner, health, links. The "what exists" doc.Collective Manager agent
state/last-session.md15 lines that give next session a running start. What shipped, what's blocked, what's next.Whichever agent closed the last session
state/decision-journal.mdEvery non-trivial decision with reasoning, alternatives, confidence, reversibility.Any agent making a decision
⚑ Facilitator note

Show one real decision-journal.md entry on screen. People light up when they see it's just plain English with a confidence score. The bar for authoring one is low. The benefit is compounding — six months from now when someone asks "why did we choose this?", the answer is searchable.

Build · Your State Files

1:20 → 1:50 · 30 min
◆ Attendee prompt

Create the four files below. Populate them with your real data — not placeholders. The portfolio is the hardest. Most people have never written all their projects in one place. Do it now. 20 minutes on portfolio.md, 10 minutes on the rest.

state/org-state.md
---
version: 1
last_modified: YYYY-MM-DD
---

# [Org Name] — State

## Top 3 Priorities This Week
1. [priority + why + by when]
2. [priority + why + by when]
3. [priority + why + by when]

## Active Projects (live status only)
- [Project A] — [1-line status] — owner: [name]
- [Project B] — [1-line status] — owner: [name]

## Upcoming Deadlines (next 30 days)
- YYYY-MM-DD · [what's due] · [who owes what]

## Open Decisions
- [decision being considered + confidence level]

## Stale Flags
- [files not updated in 7+ days]
state/portfolio.md
# Portfolio

| Project | Status | Owner | Next Milestone | Link |
|---------|--------|-------|----------------|------|
| [Name]  | active / paused / shipped / parked | [who] | [what + when] | [URL] |
| [Name]  | ... | ... | ... | ... |

## Status Definitions
- **active** — work this week
- **paused** — will resume; reason logged
- **shipped** — released and in maintenance
- **parked** — may revive; keep minimal upkeep only
state/last-session.md
# Last Session — YYYY-MM-DD

## Shipped
- [one line per thing]

## Blocked
- [thing + what's blocking + who unblocks]

## Next Session
- [one priority + why]
state/decision-journal.md
# Decision Journal

## YYYY-MM-DD · [Decision in one line]
- **Chose:** [option]
- **Alternatives:** [options considered + why rejected]
- **Reasoning:** [why this one]
- **Confidence:** N/5
- **Reversible:** yes / no / partially
- **Owner:** [who]
- **Status:** active / superseded / retired
⚑ Facilitator note

Walk the room every 10 minutes. Most people stall on the portfolio — they realize they have 12 things active and hadn't admitted it. That stall is productive. Don't rescue them. Let them write it all down. That's the workshop doing its job.

my-org/ ├── CLAUDE.md ├── agents/ │ ├── the-scout.md · grant + deadline │ ├── the-dispatch.md · content + comms │ └── the-editor.md · review + QA ├── state/ │ ├── org-state.md · 47 lines live │ ├── portfolio.md · 12 projects │ ├── last-session.md · YYYY-MM-DD │ └── decision-journal.md ├── memory/ │ ├── MEMORY.md · 3 seeds │ ├── user_communication_style.md │ └── feedback_no_corporate_speak.md └── .git/ · every session committed

Build · Your Memory Layer

1:50 → 2:00 · 10 min
◆ Attendee prompt

Create memory/MEMORY.md with 3 seed memories. One of each type:

  • User preference — something about how you want to be communicated with
  • Project context — a fact about something in flight (a deadline, a key stakeholder, a constraint)
  • Feedback — something you've corrected before and don't want to re-correct
memory/MEMORY.md
# Memory Index

## User
- [user_communication_style.md] — one-line hook

## Project
- [project_[name].md] — one-line hook

## Feedback
- [feedback_[topic].md] — one-line hook

Each entry in the index points to a standalone file with the full memory. Keep the index short — it loads every session.

Hour 3

Connect and Operate

The AI reads your data — and the lights come on.

Skill · Gmail MCP Integration

2:00 → 2:15 · 15 min

Live demo. Connect Gmail MCP to Claude Code. Show: search email, read a thread, create a draft. The rule every attendee needs to hear out loud:

Drafts only. Never sends. Tone is personal. Relationships are human. Sent emails can't be unsent. The AI drafts better than you'd write from cold — because it has your state context. But the human sends.

◆ Attendee prompt

Connect your own Gmail if you're ready. If the OAuth flow is flaky, skip — you can do it after the workshop. Connection isn't the point. Seeing the draft come out is.

Skill · The Session Protocol

2:15 → 2:25 · 10 min

Walk through how every session should start and end. The protocol is the discipline — without it, the system drifts.

Session START
1. Read state/org-state.md
2. Read state/last-session.md
3. Scan memory/MEMORY.md
4. Check for contradictions
   (portfolio vs validation-log, etc.)
5. Flag deadlines ≤7 days
6. Flag state files stale >7 days
7. Brief the human: what's loaded,
   what's flagged, what's first.
Session CLOSE
1. Update state files that changed
2. Log any decisions made
3. Draft morning email (review & send)
4. Write next session's first prompt
   into last-session.md
5. Commit + push
6. Done. Close the terminal.
⚑ Facilitator note

The hardest sell here isn't technical — it's the every session part. Participants nod during the workshop and then skip it on Monday. Call it out: "The protocol is why this works. Skip the close checklist once and you'll be debugging stale state a week later."

Build · Your First Spark Session

2:25 → 2:50 · 25 min

This is the moment. When the AI reads the attendee's own data and responds with intelligence about their organization, it clicks. Nothing you can say in Hour 1 or 2 replaces this.

◆ Attendee prompt — do these in order
  1. Open Claude Code. Point it at the directory with your CLAUDE.md + state files.
  2. Start a session. Ask: "What's the status of my projects?"
  3. Watch the AI read your portfolio.md and respond in the voice of your first agent.
  4. Follow up: "Draft an email to [real person] about [real project]. Warm but direct."
  5. Read the draft. Do not send. Note what's right and what's wrong.
  6. Tell the AI what's wrong and ask for v2. Watch it incorporate the correction.
⚑ Facilitator note

Walk the room. You're watching for the face. The moment someone's AI responds to their real org data, their face changes. Catch it. Name it. Ask them: "What just surprised you?" That answer is the testimonial.

If someone's session isn't working — 9/10 times the CLAUDE.md isn't pointing to the state files, or the state files are empty. Check those two.

~/my-org — claude-code
The moment

Reality Check · The Stack You Don't Own

2:50 → 3:00 · 10 min

Before we close, the truth about what you just built. Every connector you wired into this system — Gmail, Drive, your newsletter platform — is a permission someone else can revoke. The math is brutal:

14 connectors × 95% reliability = 49% daily success rate. Five connectors gets you to 77%. Three to 86%. Compounding failure is the actual ceiling on agentic AI for non-power users — the population that is most of the population.

Three responses, in order of difficulty:

◆ The three responses
  1. Reduce. Pick ≤3 load-bearing connectors per workflow. Treat the rest as opportunistic. For Spark that's usually Gmail + your file store + your newsletter platform.
  2. Localize. OS keychain over cloud OAuth wherever possible. Your machine, your credentials, your control over rotation.
  3. Sovereign. Pick tools your org actually owns. Listmonk over Mailchimp. Matrix over Slack. CryptPad over Google Docs. Each substitution removes a permission a third party can revoke.
⚑ Facilitator note — the political read

This module is uncomfortable on purpose. Don't soften it. Don't apologize for it. The truth here is what builds trust the other AI workshops can't buy.

If a connector is currently broken in your own setup — show it. Pull up the error. Say "this happens to me. it happens to every team. it's not your fault when it happens to you."

Close with the political beat: "Every connector is a permission someone else can revoke. Your member list, your archive, your inbox — none of it is yours if Google decides tomorrow it's not. Agentic AI is only as autonomous as the stack underneath it. Other AI workshops are selling the magic. We're selling the discipline."

Bridge to RI: "If running this stack alone feels heavy — that's correct. RI runs a managed ops tier. Talk to us after."

Reflection & Close

3:00 → 3:10 · 10 min
⚑ Facilitator note — testimonial capture

The last 10 minutes are the highest-leverage 10 minutes in the workshop. Ask these three questions out loud, in order. Give people 30 seconds to think before answering. Write the answers down or have everyone drop them in a shared Google Form.

  1. What's the one thing you'll use on Monday?
  2. What almost didn't work for you today?
  3. Can we quote you? (yes / yes with attribution / no)

Q1 gives you outcomes. Q2 gives you the next workshop iteration. Q3 gives you the testimonial wall.

Close the workshop with one line:

"You just built the skeleton. The muscle grows every session you use it. Go run your first real session tonight."

If Not Claude Code

Spark is a pattern — specialized agents + shared markdown state + persistent memory + session protocol. The pattern is more important than the tool. Here's how to get 60–95% of it with something else, and what you give up.

Close to 1:1 Partial — some features missing DIY — you build the scaffolding

Cline

Close
Open-source Claude Code alternative · VS Code extension

Works with Anthropic, OpenAI, Gemini, local models via Ollama, or anything OpenAI-compatible. Reads/writes files, runs terminal commands, supports MCP servers. Essentially Claude Code without the desktop app wrapper.

Tradeoff: You manage the API key and pay per-token directly. No built-in subscription simplicity. MCP config is manual.

Aider

Close
Terminal-first AI coding assistant · git-native

Runs in your terminal. Auto-commits every change with a readable message. Supports Claude, GPT-4, Gemini, local models. The git-native discipline Spark needs is baked in by default.

Tradeoff: Coding-focused — you build the agent-routing layer yourself via prompt templates. No MCP today (but you can pipe shell tools).

ChatGPT Projects + Custom GPTs

Partial
OpenAI Plus · browser-based

Projects give you persistent context per-folder. Custom GPTs let you define agent personas. File upload for state. Works without any local setup.

Tradeoff: No local file writes — you can't have the AI modify your actual state files. Memory is OpenAI-hosted, not a git repo you own. No MCP. No true session continuity beyond their memory.

Cursor / Windsurf

Partial
AI-first IDE · subscription

Excellent for file reading and editing. Agent mode can run commands. Supports Claude, GPT, Gemini. Great for developers who want the IDE experience and are already coding.

Tradeoff: Optimized for coding, not organizational ops. No persistent memory across sessions by default — you rebuild context each time. MCP support is newer, less mature.

Gemini CLI

Partial
Google's terminal AI · free tier available

Ships with a generous free tier. Reads files, runs commands, has a built-in tool system. If your org lives in Google Workspace, the Google Docs / Drive / Calendar integration pulls through naturally.

Tradeoff: Less mature ecosystem for MCP and multi-agent patterns. You hand-roll the agent routing layer. Best if you're Google-native and budget-constrained.

LangGraph / CrewAI / AutoGen

DIY
Python frameworks · self-hosted

Maximum flexibility. Define agents as code, route between them with graphs, run locally or on your infra. Every major pattern (handoffs, memory, tool use) is configurable.

Tradeoff: Python engineer required. You build the file-system integration, the session protocol, the memory layer, the UI. For a 3-person technical team: worth it. For a solo nonprofit leader: too heavy.

The capability matrix

Capability Claude
Code
Cline Aider ChatGPT
Projects
Cursor Gemini
CLI
LangGraph
/Crew
Reads local files
Writes local files
Runs terminal commands
MCP servers
Persistent memory (cross-session)
Git-native commits
Multi-agent routing
Free or low-cost tier
Runs without coding

full support · partial / setup required · not supported

Which one for whom?

If you are…Start with…Why
A solo nonprofit leader, non-technicalClaude CodeLowest setup, MCP ecosystem handles Gmail + Calendar out of the box. $20/mo covers it.
A solo founder with API-level budget concernsCline + Gemini APIFree tier API + open-source client. Same capabilities, 80% of the polish, $0–$5/mo.
A developer already living in the terminalAiderGit-native by default. The session discipline Spark preaches is automatic here.
A team of 2–3 engineersLangGraph or CrewAIYou have the skill to build. You'll want the control. The ceiling is higher than any managed tool.
Someone allergic to terminalsChatGPT Projects + Custom GPTsBrowser-only. You lose file-system ops, but the agent-persona + persistent-context pattern still works for planning, drafting, research.

The architecture is the point, not the tool. Markdown state files live in any repo. Agent specs are plain text. The session protocol is a checklist. You can build a Spark on any stack that reads and writes files. Claude Code is the fastest path in 2026 — not the only path.

Facilitator Notes

Context, contingencies, and the stuff that only matters on the day.

Room setup

Common questions (and the short answer)

QuestionShort answer
"Can I use GPT / Gemini instead of Claude?"Yes. The pattern works with any LLM that has tool use. Claude Code is recommended because MCP integrations are built-in.
"Does this work for a team, not just a solo founder?"Yes. Each member gets their own Spark; state files are shared via git. Federated agents, shared institutional memory.
"What if I'm not technical?"The workshop requires basic comfort with a text editor and terminal. No coding.
"Is this the same as using ChatGPT?"No. ChatGPT forgets between conversations. Spark has persistent state, memory across sessions, multiple agent personas, and tool integrations. Stranger vs. COO.
"How much does it cost to run?"~$20/month for Claude Pro. MCP integrations (Gmail, Calendar, Drive) are free via OAuth. Git repo is free.

Timing drift — how to recover

What every attendee leaves with

  1. A working CLAUDE.md with their org's instructions
  2. 3–5 agent definitions tailored to their organization
  3. State files populated with their real data
  4. A memory layer with initial entries
  5. A session protocol template
  6. (Optional) Gmail MCP connected
  7. The workshop template repo for reference
  8. Confidence that the rest is buildable in a weekend