Jam
Parallel exploration framework powered by diverse perspectives. Instead of one mind generating options and picking a winner, Jam dispatches independent agents with different worldviews to both propose approaches and evaluate implementations, then synthesizes the best of everything into the final result.
The jam was all of us together.
When to Use
- Architectural decisions with genuine trade-offs
- User shows indecision ("not sure", "either works", "you pick")
- Explicitly requested ("jam", "diverse approaches", "explore options")
When NOT to Use
- Trivial changes (rename, config tweak, small bugfix)
- User already has a specific approach in mind
- Single clear path with no meaningful alternatives
The Flow
- Build/Create request
- Quick context (1-2 questions)
- Identify architectural slots
- Generate diverse perspective panel
- Dispatch panel agents to propose slot fills
- Synthesize into 3-5 distinct variants
- Present variants, user approves
- Implement all variants in parallel (worktrees)
- Generate review panel for this domain
- Review panel evaluates ALL variants
- Pick winner based on panel findings
- Synthesize: fold best insights from ALL variants into winner
- Ship the improved winner
Phase 1: Context & Slots
Gather just enough context to understand the problem space. Ask 1-2 questions max.
Identify architectural slots — decisions where multiple approaches are genuinely viable:
| Type |
Examples |
Worth exploring? |
| Architectural |
Storage engine, framework, auth method, API style, rendering strategy |
Yes |
| Trivial |
File location, naming conventions, config format |
No |
Only architectural decisions become slots. Cap at 2-3 slots to avoid combinatorial explosion.
Phase 2: Diverse Perspective Panel (Slot Generation)
This is what makes Jam different from plain brainstorming.
How to Build the Panel
Analyze the domain and generate 3-6 personas with genuinely different worldviews about the problem. These are NOT pre-defined templates — they emerge from the specific problem being solved.
Rules for good panels:
- Each persona must have a different optimization function (what they value most)
- Personas should span beyond just developer archetypes — include end-users, operators, business stakeholders, domain experts as appropriate
- Each persona needs a name, a 1-2 sentence worldview, and what they'd optimize for
- The panel should produce genuine disagreement, not polite variations of the same idea
Example — building a bookmark CLI tool:
- Marina, the sysadmin: Values composability and Unix philosophy. Optimizes for piping, scripting, and working with existing tools.
- Dev, the junior developer: Values getting started fast. Optimizes for clear docs, simple mental model, forgiving errors.
- Priya, the data hoarder: Has 50,000 bookmarks across 15 years. Optimizes for search speed, deduplication, and import/export.
- Carlos, the ops engineer: Will deploy this to 200 machines. Optimizes for single-binary distribution, no runtime dependencies, zero config.
Example — writing a blog post about a developer tool:
- Sam, the skeptical HN commenter: Has seen 100 tools like this. Optimizes for "why should I care" and "what's actually different."
- Jordan, the target user: Actively has the problem this tool solves. Optimizes for "does this solve MY problem" and "how fast can I try it."
- Alex, the technical writer: Values clarity and structure. Optimizes for scanability, accurate claims, and working examples.
- Riley, the busy engineering manager: Skims everything. Optimizes for "can I forward this to my team with a one-line summary."
Two examples, deliberately: jam is not a code-only workflow. The panel for a piece of writing is as domain-specific as the panel for a CLI.
Dispatch Pattern
Present the panel to the user for approval. They can add, remove, or adjust personas.
Then dispatch ALL panel agents in a single message using background agents:
Agent(persona-1, run_in_background: true, prompt="You are [NAME]... propose how to approach [SLOTS]...")
Agent(persona-2, run_in_background: true, prompt="You are [NAME]... propose how to approach [SLOTS]...")
...all in one message block...
Each agent receives:
- Their persona (name, worldview, optimization function)
- The problem description and architectural slots
- Instruction to propose their preferred approach for each slot with reasoning
- No visibility into other agents' proposals — independence is critical
See agent prompt template for the full prompt structure.
Synthesizing Proposals into Variants
After all panel agents return, synthesize their proposals into 3-5 distinct variants:
- Group proposals by fundamental approach (agents with similar worldviews may converge)
- Each variant should represent a genuinely different philosophy, not just a parameter tweak
- Name variants by their core philosophy (e.g., "minimal-unix", "data-first", "ops-friendly") not by index
- Present variants to the user with a summary of which personas drove each one
- Max 5-6 variants. If there are more, identify the primary axis and group.
Phase 3: Parallel Implementation
For each approved variant:
Setup
- Create a git worktree per variant:
git worktree add .worktrees/variant-<slug> -b jam/<feature>/variant-<slug>
- Ensure
.worktrees/ is in .gitignore
Dispatch
Dispatch ALL implementation agents in a single message for true parallelism:
Agent(variant-1, run_in_background: true, isolation: "worktree", prompt="Implement variant-1...")
Agent(variant-2, run_in_background: true, isolation: "worktree", prompt="Implement variant-2...")
...all in one message block...
Each agent receives:
- The variant's philosophy and approach
- The relevant persona proposals that drove this variant
- Full implementation instructions
- Instruction to write tests first (TDD)
- Instruction to report: summary, test counts, files changed, issues encountered
Directory Structure
docs/plans/<feature>/
context.md # Problem description and slots
panel/
personas.md # The perspective panel used
proposals/ # Raw proposals from each persona
variants/
variant-<slug>/
approach.md # Variant philosophy and design
result.md # Final comparison and winner
.worktrees/
variant-<slug>/ # Implementation worktrees
Phase 4: Review Panel Evaluation
Do NOT evaluate from a single perspective. Generate a new review panel appropriate for the domain.
Generate the Review Panel
Just like Phase 2, the review panel is domain-specific and dynamically generated. Analyze what matters for THIS project and create reviewers accordingly.
Rules:
- Reviewers should cover different evaluation angles (not just code quality)
- Mix code reviewers with user-perspective reviewers where appropriate
- If a running dev server exists, some reviewers should interact with the actual product via browser
- Each reviewer gets access rules (can they read code? only use the product? both?)
- Balance measurable and subjective criteria. Panels naturally skew toward things that are easy to score (correctness, compliance, performance) and away from things that require taste (aesthetics, emotional impact, delight). If the output has a subjective dimension that matters, make sure someone on the panel is optimizing for it — not just checking boxes.
Example review panel for a CLI tool:
- Code quality reviewer: Reads source code. Checks architecture, error handling, test coverage.
- First-time user: Uses the tool cold with only the README. Reports confusion and friction.
- Power user: Tries advanced workflows, piping, scripting, edge cases.
- The migrator: Tries to import/export data, checks data portability.
Example review panel for a blog post:
- The target reader: Reads cold. Reports what they understood and what they'd do next.
- The editor: Checks structure, flow, clarity, claims accuracy.
- The skeptic: Looks for weak arguments, unsupported claims, missing counterpoints.
Present & Approve
Present the review panel to the user before dispatching — same as Phase 2. User can add, remove, or adjust reviewers. Do NOT skip this step.
Dispatch Pattern
Dispatch all reviewers against each variant. If reviewers need browser access, run them sequentially per variant. Code-only reviewers can run in parallel.
Each reviewer reports:
- Findings ranked by severity
- What this variant does well (critical for synthesis later)
- What this variant does poorly
- Comparison notes if they've reviewed multiple variants
Consolidate & Pick Winner
Compile findings into a cross-variant comparison. See scorecard template.
Elimination rules:
- Fails tests → eliminated
- Critical issues from reviewers → eliminated
- All fail → report to user, ask how to proceed
Phase 5: Synthesis
This is the phase that makes Jam more than a competition.
The losing variants are not waste — they are learning. The review panels identified what EACH variant did well. Now fold the best insights into the winner.
What to Synthesize
Go through every "strength" flagged by reviewers for losing variants:
- Directly portable improvements: A losing variant had better error messages, a cleaner API for one endpoint, a smarter caching approach. Port it.
- Design insights: A losing variant's approach to one sub-problem was better even though its overall approach lost. Extract the pattern and apply it.
- Reviewer feedback applicable to winner: A reviewer flagged something missing in ALL variants. Fix it in the winner.
What NOT to Synthesize
- Don't frankenstein the winner into a mess. Each incorporation must be justified.
- Don't import the losing variant's core architecture — it lost for a reason.
- Don't add complexity that contradicts the winner's philosophy.
- If incorporating something would require major refactoring, note it as a future option rather than forcing it in.
Synthesis Process
- List all strengths from losing variants (from Phase 4 findings)
- For each, assess: Can this improve the winner without contradicting its philosophy?
- Present the synthesis plan to the user for approval
- Implement the approved improvements in the winner's branch
- Run tests again to verify nothing broke
Write result.md using the result template.
Phase 6: Cleanup & Finish
- Verify the synthesized winner passes all tests
- Cleanup loser worktrees:
git worktree remove .worktrees/variant-<slug>
git branch -D jam/<feature>/variant-<slug>
- Finish the winner branch: merge, PR, or keep as-is (user's choice)
Critical Rules
- Dispatch ALL parallel agents in a SINGLE message — multiple Agent tools, one message block
- Perspective panels are always domain-specific — never use hardcoded persona templates
- Panel agents must be independent — no agent sees another's output
- Present panels to user before dispatching — user can adjust
- Synthesis is ACTIVE, not a backlog — improvements get implemented, not just documented
- Max 5-6 variants — more than that is diminishing returns
- Always write result.md — document what was tried, what was learned, what was incorporated
Common Mistakes
| Mistake |
Why it's wrong |
Fix |
| One mind imagining multiple perspectives |
Perspectives cluster, biases leak through, agent converges to its own preference |
Dispatch independent agents who can't see each other |
| Pre-defined persona templates |
Generic personas miss domain-specific insights |
Generate personas from the problem domain |
| Developer-only perspectives |
Misses end-user, ops, business, and domain expert viewpoints |
Span beyond developer archetypes |
| Single-perspective evaluation |
One evaluator can't escape its own biases |
Review panel with independent reviewers |
| Discarding loser insights |
Competition produced learning, not just a winner |
Active synthesis phase |
| Documenting insights "for later" |
"Later" never comes — insights rot in backlogs |
Incorporate improvements NOW in the synthesis phase |
| Over-synthesizing |
Frankensteining the winner into a mess |
Each incorporation must be justified and approved |
| Skipping user approval |
User should see panels and synthesis plan before execution |
Present and get approval at every gate |
| All-measurable review panels |
Panels skew toward checkable criteria (correctness, compliance) and miss subjective qualities (taste, feel, delight) |
Ensure the panel covers both measurable and subjective dimensions |
Red Flags — STOP and Adjust
If you catch yourself doing any of these, you're bypassing Jam's value:
- Generating all variant approaches yourself instead of dispatching panel agents
- Evaluating from a single perspective instead of dispatching review agents
- Picking a winner and moving on without synthesis
- Noting loser insights "for the backlog" instead of actively incorporating them
- Using the same panel template for every project
- Dispatching agents in separate messages (must be single message for parallelism)
- Skipping user approval of panels or synthesis plan
1---2name: jam3description: Structured multi-approach exploration using parallel perspective panels to generate, implement, and evaluate distinct variants, then synthesizes the best insights from all into the winner. Use when multiple approaches are genuinely viable and the choice is unclear, the user is indecisive or explicitly wants diverse perspectives, or the user says "jam on", "let's jam", or "jam session".4---56# Jam78Parallel exploration framework powered by diverse perspectives. Instead of one mind generating options and picking a winner, Jam dispatches independent agents with different worldviews to both **propose approaches** and **evaluate implementations**, then **synthesizes the best of everything** into the final result.910**The jam was all of us together.**1112## When to Use1314- Architectural decisions with genuine trade-offs15- User shows indecision ("not sure", "either works", "you pick")16- Explicitly requested ("jam", "diverse approaches", "explore options")1718## When NOT to Use1920- Trivial changes (rename, config tweak, small bugfix)21- User already has a specific approach in mind22- Single clear path with no meaningful alternatives2324## The Flow25261. Build/Create request272. Quick context (1-2 questions)283. Identify architectural slots294. Generate diverse perspective panel305. Dispatch panel agents to propose slot fills316. Synthesize into 3-5 distinct variants327. Present variants, user approves338. Implement all variants in parallel (worktrees)349. Generate review panel for this domain3510. Review panel evaluates ALL variants3611. Pick winner based on panel findings3712. Synthesize: fold best insights from ALL variants into winner3813. Ship the improved winner3940## Phase 1: Context & Slots4142Gather just enough context to understand the problem space. Ask 1-2 questions max.4344Identify **architectural slots** — decisions where multiple approaches are genuinely viable:4546| Type | Examples | Worth exploring? |47|------|----------|------------------|48| **Architectural** | Storage engine, framework, auth method, API style, rendering strategy | Yes |49| **Trivial** | File location, naming conventions, config format | No |5051Only architectural decisions become slots. Cap at 2-3 slots to avoid combinatorial explosion.5253## Phase 2: Diverse Perspective Panel (Slot Generation)5455**This is what makes Jam different from plain brainstorming.**5657### How to Build the Panel5859Analyze the domain and generate 3-6 personas with **genuinely different worldviews** about the problem. These are NOT pre-defined templates — they emerge from the specific problem being solved.6061**Rules for good panels:**62- Each persona must have a **different optimization function** (what they value most)63- Personas should span beyond just developer archetypes — include end-users, operators, business stakeholders, domain experts as appropriate64- Each persona needs a name, a 1-2 sentence worldview, and what they'd optimize for65- The panel should produce **genuine disagreement**, not polite variations of the same idea6667**Example — building a bookmark CLI tool:**68- **Marina, the sysadmin**: Values composability and Unix philosophy. Optimizes for piping, scripting, and working with existing tools.69- **Dev, the junior developer**: Values getting started fast. Optimizes for clear docs, simple mental model, forgiving errors.70- **Priya, the data hoarder**: Has 50,000 bookmarks across 15 years. Optimizes for search speed, deduplication, and import/export.71- **Carlos, the ops engineer**: Will deploy this to 200 machines. Optimizes for single-binary distribution, no runtime dependencies, zero config.7273**Example — writing a blog post about a developer tool:**74- **Sam, the skeptical HN commenter**: Has seen 100 tools like this. Optimizes for "why should I care" and "what's actually different."75- **Jordan, the target user**: Actively has the problem this tool solves. Optimizes for "does this solve MY problem" and "how fast can I try it."76- **Alex, the technical writer**: Values clarity and structure. Optimizes for scanability, accurate claims, and working examples.77- **Riley, the busy engineering manager**: Skims everything. Optimizes for "can I forward this to my team with a one-line summary."7879Two examples, deliberately: jam is not a code-only workflow. The panel for a piece of writing is as domain-specific as the panel for a CLI.8081### Dispatch Pattern8283Present the panel to the user for approval. They can add, remove, or adjust personas.8485Then dispatch ALL panel agents in a **single message** using background agents:8687```88Agent(persona-1, run_in_background: true, prompt="You are [NAME]... propose how to approach [SLOTS]...")89Agent(persona-2, run_in_background: true, prompt="You are [NAME]... propose how to approach [SLOTS]...")90...all in one message block...91```9293Each agent receives:94- Their persona (name, worldview, optimization function)95- The problem description and architectural slots96- Instruction to propose their preferred approach for each slot with reasoning97- **No visibility into other agents' proposals** — independence is critical9899See [agent prompt template](references/agent-prompt-template.md) for the full prompt structure.100101### Synthesizing Proposals into Variants102103After all panel agents return, synthesize their proposals into 3-5 **distinct variants**:1041051. Group proposals by fundamental approach (agents with similar worldviews may converge)1062. Each variant should represent a genuinely different philosophy, not just a parameter tweak1073. Name variants by their core philosophy (e.g., "minimal-unix", "data-first", "ops-friendly") not by index1084. Present variants to the user with a summary of which personas drove each one1095. **Max 5-6 variants.** If there are more, identify the primary axis and group.110111## Phase 3: Parallel Implementation112113For each approved variant:114115### Setup1161171. Create a git worktree per variant:118 ```bash119 git worktree add .worktrees/variant-<slug> -b jam/<feature>/variant-<slug>120 ```1212. Ensure `.worktrees/` is in `.gitignore`122123### Dispatch124125Dispatch ALL implementation agents in a **single message** for true parallelism:126127```128Agent(variant-1, run_in_background: true, isolation: "worktree", prompt="Implement variant-1...")129Agent(variant-2, run_in_background: true, isolation: "worktree", prompt="Implement variant-2...")130...all in one message block...131```132133Each agent receives:134- The variant's philosophy and approach135- The relevant persona proposals that drove this variant136- Full implementation instructions137- Instruction to write tests first (TDD)138- Instruction to report: summary, test counts, files changed, issues encountered139140### Directory Structure141142```143docs/plans/<feature>/144 context.md # Problem description and slots145 panel/146 personas.md # The perspective panel used147 proposals/ # Raw proposals from each persona148 variants/149 variant-<slug>/150 approach.md # Variant philosophy and design151 result.md # Final comparison and winner152153.worktrees/154 variant-<slug>/ # Implementation worktrees155```156157## Phase 4: Review Panel Evaluation158159**Do NOT evaluate from a single perspective.** Generate a new review panel appropriate for the domain.160161### Generate the Review Panel162163Just like Phase 2, the review panel is **domain-specific and dynamically generated**. Analyze what matters for THIS project and create reviewers accordingly.164165**Rules:**166- Reviewers should cover different evaluation angles (not just code quality)167- Mix code reviewers with user-perspective reviewers where appropriate168- If a running dev server exists, some reviewers should interact with the actual product via browser169- Each reviewer gets access rules (can they read code? only use the product? both?)170- **Balance measurable and subjective criteria.** Panels naturally skew toward things that are easy to score (correctness, compliance, performance) and away from things that require taste (aesthetics, emotional impact, delight). If the output has a subjective dimension that matters, make sure someone on the panel is optimizing for it — not just checking boxes.171172**Example review panel for a CLI tool:**173- **Code quality reviewer**: Reads source code. Checks architecture, error handling, test coverage.174- **First-time user**: Uses the tool cold with only the README. Reports confusion and friction.175- **Power user**: Tries advanced workflows, piping, scripting, edge cases.176- **The migrator**: Tries to import/export data, checks data portability.177178**Example review panel for a blog post:**179- **The target reader**: Reads cold. Reports what they understood and what they'd do next.180- **The editor**: Checks structure, flow, clarity, claims accuracy.181- **The skeptic**: Looks for weak arguments, unsupported claims, missing counterpoints.182183### Present & Approve184185**Present the review panel to the user before dispatching** — same as Phase 2. User can add, remove, or adjust reviewers. Do NOT skip this step.186187### Dispatch Pattern188189Dispatch all reviewers against **each variant**. If reviewers need browser access, run them sequentially per variant. Code-only reviewers can run in parallel.190191Each reviewer reports:192- Findings ranked by severity193- What this variant does **well** (critical for synthesis later)194- What this variant does **poorly**195- Comparison notes if they've reviewed multiple variants196197### Consolidate & Pick Winner198199Compile findings into a cross-variant comparison. See [scorecard template](references/scorecard.md).200201**Elimination rules:**202- Fails tests → eliminated203- Critical issues from reviewers → eliminated204- All fail → report to user, ask how to proceed205206## Phase 5: Synthesis207208**This is the phase that makes Jam more than a competition.**209210The losing variants are not waste — they are learning. The review panels identified what EACH variant did well. Now fold the best insights into the winner.211212### What to Synthesize213214Go through every "strength" flagged by reviewers for losing variants:2152161. **Directly portable improvements**: A losing variant had better error messages, a cleaner API for one endpoint, a smarter caching approach. Port it.2172. **Design insights**: A losing variant's approach to one sub-problem was better even though its overall approach lost. Extract the pattern and apply it.2183. **Reviewer feedback applicable to winner**: A reviewer flagged something missing in ALL variants. Fix it in the winner.219220### What NOT to Synthesize221222- Don't frankenstein the winner into a mess. Each incorporation must be justified.223- Don't import the losing variant's core architecture — it lost for a reason.224- Don't add complexity that contradicts the winner's philosophy.225- If incorporating something would require major refactoring, note it as a future option rather than forcing it in.226227### Synthesis Process2282291. List all strengths from losing variants (from Phase 4 findings)2302. For each, assess: Can this improve the winner without contradicting its philosophy?2313. Present the synthesis plan to the user for approval2324. Implement the approved improvements in the winner's branch2335. Run tests again to verify nothing broke234235Write `result.md` using the [result template](references/result-template.md).236237## Phase 6: Cleanup & Finish2382391. **Verify** the synthesized winner passes all tests2402. **Cleanup loser worktrees:**241 ```bash242 git worktree remove .worktrees/variant-<slug>243 git branch -D jam/<feature>/variant-<slug>244 ```2453. **Finish the winner branch**: merge, PR, or keep as-is (user's choice)246247## Critical Rules2482491. **Dispatch ALL parallel agents in a SINGLE message** — multiple Agent tools, one message block2502. **Perspective panels are always domain-specific** — never use hardcoded persona templates2513. **Panel agents must be independent** — no agent sees another's output2524. **Present panels to user before dispatching** — user can adjust2535. **Synthesis is ACTIVE, not a backlog** — improvements get implemented, not just documented2546. **Max 5-6 variants** — more than that is diminishing returns2557. **Always write result.md** — document what was tried, what was learned, what was incorporated256257## Common Mistakes258259| Mistake | Why it's wrong | Fix |260|---------|---------------|-----|261| One mind imagining multiple perspectives | Perspectives cluster, biases leak through, agent converges to its own preference | Dispatch independent agents who can't see each other |262| Pre-defined persona templates | Generic personas miss domain-specific insights | Generate personas from the problem domain |263| Developer-only perspectives | Misses end-user, ops, business, and domain expert viewpoints | Span beyond developer archetypes |264| Single-perspective evaluation | One evaluator can't escape its own biases | Review panel with independent reviewers |265| Discarding loser insights | Competition produced learning, not just a winner | Active synthesis phase |266| Documenting insights "for later" | "Later" never comes — insights rot in backlogs | Incorporate improvements NOW in the synthesis phase |267| Over-synthesizing | Frankensteining the winner into a mess | Each incorporation must be justified and approved |268| Skipping user approval | User should see panels and synthesis plan before execution | Present and get approval at every gate |269| All-measurable review panels | Panels skew toward checkable criteria (correctness, compliance) and miss subjective qualities (taste, feel, delight) | Ensure the panel covers both measurable and subjective dimensions |270271## Red Flags — STOP and Adjust272273If you catch yourself doing any of these, you're bypassing Jam's value:274275- Generating all variant approaches yourself instead of dispatching panel agents276- Evaluating from a single perspective instead of dispatching review agents277- Picking a winner and moving on without synthesis278- Noting loser insights "for the backlog" instead of actively incorporating them279- Using the same panel template for every project280- Dispatching agents in separate messages (must be single message for parallelism)281- Skipping user approval of panels or synthesis plan