Try Springfield in 30 seconds:
# Make sure you're in a git repository
cd your-project
# Activate Springfield with any task
echo "springfield help me add a factorial function to math.js" | claude
# Springfield auto-activates! Lisa begins research...
What just happened?
For complex tasks:
echo "springfield help me refactor the authentication system to support OAuth2" | claude
# Complex task triggers debate between Frink and Skinner!
# Then Ralph implements with better requirements
Next steps:
"I'm learnding!" - Ralph Wiggum
Autonomous workflow orchestration for Claude Code, where cartoon characters do your coding. It's like having the whole town of Springfield working on your project!
Springfield is a Claude Code plugin that breaks down complex tasks into phases, each handled by a different Simpsons character:
From GitHub:
claude
/plugin marketplace add bradleygolden/springfield
/plugin install springfield@springfield
Just tell Springfield what to do:
"springfield help me add user authentication to the API"
Springfield runs all phases automatically. Or run them individually:
/springfield:lisa "authentication" # Research
/springfield:mayor-quimby # Decide complexity
/springfield:frink # Plan
/springfield:skinner # Review plan (COMPLEX tasks only)
/springfield:martin # Create PRD/documentation
/springfield:ralph # Implement
/springfield:comic-book-guy # Review
/springfield:lisa "task" --dry-run # Create session without executing
/springfield:lisa --session=SESSION_ID # Resume specific session
/springfield:lisa --research-file=research.md # Use existing research
/springfield:frink --plan-file=prompt.md # Use existing plan
/springfield:frink --force # Skip Skinner review
/springfield:ralph --session=SESSION_ID # Resume Ralph implementation
Springfield creates a .springfield/ directory with session folders for each task (format: MM-DD-YYYY-task-name/). Inside you'll find:
state.json - Structured session state with schema versioningresearch.md - Lisa's findingsdecision.txt - SIMPLE or COMPLEXplan-v1.md - Frink's initial plan (COMPLEX tasks)review.md - Skinner's plan feedback (COMPLEX tasks)prompt.md - Final implementation plan with subtasksscratchpad.md - Ralph's progress notes (updated every iteration)completion.md - "Task complete!" signalqa-report.md - Comic Book Guy's verdictSpringfield uses structured state tracking via state.json:
{
"schema_version": "1.0",
"session_id": "11-05-2025-task-name",
"status": "in_progress",
"current_phase": "ralph",
"iteration_count": 42,
"phases": {
"lisa": { "status": "complete", "start_time": "...", "end_time": "..." },
"ralph": { "status": "in_progress", "iteration": 42 }
},
"subtasks": [
{ "id": 1, "description": "...", "status": "COMPLETE", "failures": 0 }
],
"transitions": [...],
"kickbacks": [...],
"kickback_counts": { "lisa": 0, "frink": 0, "ralph": 1 }
}
Use jq to query session state: jq '.status' .springfield/*/state.json
Ralph works iteratively until the task is complete:
Ralph will continue iterating indefinitely until completion.md appears. You can stop at any time with Ctrl+C and resume later.
Comic Book Guy routes issues back to appropriate characters:
Kickback limits: Max 2 kickbacks per character. After 2, Comic Book Guy escalates the issue.
For complex tasks, Professor Frink runs a debate loop where two AI perspectives argue until they reach consensus on the best approach. If task is COMPLEX, Skinner reviews Frink's plan before Ralph implements.
%%{init: {'theme':'dark','themeVariables': {'darkMode':'true','edgeLabelBackground':'#1e1e1e','labelColor':'#ffffff'}}}%%
graph TD
Start([User Task]) --> Lisa[π Lisa: Research]
Lisa --> |research.md| Quimby{π© Mayor Quimby: Decide}
Quimby --> |SIMPLE| FrinkSimple[π¬ Frink: Simple Plan]
Quimby --> |COMPLEX| FrinkComplex[π¬ Frink: Debate Loop]
FrinkComplex --> |Proposer vs Counter| Consensus{Agents Agree?}
Consensus --> |No| FrinkComplex
Consensus --> |Yes| Skinner[π« Skinner: Review]
Skinner --> |Approved| FrinkRevised[π¬ Frink: Revised Plan]
Skinner --> |Needs Work| FrinkComplex
FrinkRevised --> |prompt.md| Martin[π Martin: PRD]
FrinkSimple --> |prompt.md| MartinSimple[π Martin: doc.md]
Martin --> |prd.md| Ralph[ποΈ Ralph: Implement Loop]
MartinSimple --> |doc.md| Ralph
Ralph --> |completion.md| ComicBook[π¬ Comic Book Guy: QA]
ComicBook --> QAResult{Quality Check}
QAResult --> |Issues Found| Kickback{What's Wrong?}
QAResult --> |Approved| Done([β
Task Complete])
Kickback --> |Research Gap| Lisa
Kickback --> |Design Issue| FrinkSimple
Kickback --> |Implementation Bug| Ralph
style Lisa fill:#FFE4B5,stroke:#333,color:#000
style Quimby fill:#D8BFD8,stroke:#333,color:#000
style FrinkSimple fill:#B0E0E6,stroke:#333,color:#000
style FrinkComplex fill:#B0E0E6,stroke:#333,color:#000
style FrinkRevised fill:#B0E0E6,stroke:#333,color:#000
style Skinner fill:#F0E68C,stroke:#333,color:#000
style Martin fill:#E6E6FA,stroke:#333,color:#000
style MartinSimple fill:#E6E6FA,stroke:#333,color:#000
style Ralph fill:#FFB6C1,stroke:#333,color:#000
style ComicBook fill:#98FB98,stroke:#333,color:#000
style Done fill:#90EE90,stroke:#333,color:#000
linkStyle default stroke:#fff,stroke-width:2px
Before Ralph implements anything, Martin Prince creates prospective documentation that guides the implementation. This ensures Ralph has clear requirements and acceptance criteria to follow.
What Martin creates:
COMPLEX tasks: Full PRD (Product Requirements Document) in /docs/planning/{type}/{id}/prd.md
SIMPLE tasks: Lightweight doc.md with task overview
How it helps Ralph:
Ralph reads Martin's documentation during implementation and follows the requirements step-by-step. Comic Book Guy later validates Ralph's work against Martin's PRD to ensure all acceptance criteria are met.
Example workflow:
This planning-before-implementation approach improves code quality and reduces rework!
npx and repomirror)brew install jq (macOS) or apt-get install jq (Linux)Springfield validates jq availability at session start. Without jq, state.json features are unavailable.
Task: "springfield help me add a factorial function to math.js"
What happens:
Lisa researches (10 seconds):
Mayor Quimby decides (5 seconds):
Ralph implements (30 seconds):
Comic Book Guy validates (15 seconds):
Session files created:
.springfield/[session-name]/
βββ state.json (tracks progress)
βββ research.md (Lisa's findings)
βββ implementation.md (Ralph's work)
βββ validation.md (Comic Book Guy's review)
Task: "springfield help me refactor the authentication system to support OAuth2"
What happens:
Lisa researches (30 seconds):
Mayor Quimby decides (5 seconds):
Frink plans (60 seconds):
Skinner reviews (45 seconds):
Frink revises (60 seconds):
Skinner approves (30 seconds):
Ralph implements (5 minutes):
Comic Book Guy validates (30 seconds):
Session files created:
.springfield/[session-name]/
βββ state.json
βββ research.md (Lisa)
βββ plan-v1.md (Frink's initial plan)
βββ review.md (Skinner's critique)
βββ plan-v2.md (Frink's revision)
βββ review-v2.md (Skinner's approval)
βββ prompt.md (Final implementation prompt)
βββ implementation-attempt-1.md (Ralph's work)
βββ validation.md (Comic Book Guy)
Scenario: Ralph's implementation failed validation
What happens:
You see the failure:
# Comic Book Guy rejected Ralph's work
cat .springfield/my-session/state.json
# Shows: "status": "failed", "reason": "Missing error handling"
Springfield automatically retries:
If max attempts reached:
.springfield/my-session/echo "resume session my-session" | claudeNo manual intervention needed - Springfield's loop handles retries automatically!
Symptoms:
Causes:
Solutions:
# Verify you're in a git repo
git status
# Check hooks configuration
cat hooks/hooks.json | jq .
# Ensure "springfield" appears in your prompt
echo "Use springfield to add feature X" | claude
Symptoms:
Solutions:
Check feedback in session directory:
cat .springfield/[session]/validation.md
# See what Comic Book Guy is rejecting
Review Ralph's attempts:
ls .springfield/[session]/implementation-attempt-*.md
# Compare attempts to see if Ralph is learning
Manual intervention:
# Edit the prompt with more specific guidance
nano .springfield/[session]/prompt.md
# Ralph will use updated prompt on next attempt
Force exit if needed:
Symptoms:
Solutions:
# macOS
brew install jq
# Linux (Debian/Ubuntu)
sudo apt-get install jq
# Linux (RHEL/CentOS)
sudo yum install jq
# Verify installation
jq --version
Symptoms:
Solutions:
Verify hooks are enabled:
# Check hooks/hooks.json exists
ls -la hooks/hooks.json
# Verify springfield skill is registered
cat hooks/hooks.json | jq '.skills'
Check Claude Code settings:
Try explicit activation:
# Use the springfield skill directly
/springfield "Your task description here"
Symptoms:
This is acceptable - Characters maintain personality in prompts and outputs, but technical content should be clear. If technical accuracy is present, voice variations are acceptable.
If you encounter issues not covered here:
Check session files:
cat .springfield/[session]/state.json | jq .
# Review the workflow state
Review logs:
.springfield/[session]/ for all generated filesReport issues:
Ask for help:
Key terms used in Springfield:
.springfield/MM-DD-YYYY-task-name/completion.md file created by Ralph when implementation is finishedSpringfield uses --dangerously-skip-permissions, so it's best suited for:
Avoid using Springfield directly on:
Think of it like Ralph at the nuclear power plant - fun for experimentation, risky for critical systems!
Timing depends on task complexity:
Ralph iterates until the task is complete (creates completion.md). You can stop the workflow at any time with Ctrl+C.
Yes! Springfield sessions persist in .springfield/ directories:
# Stop with Ctrl+C at any time
# Resume the session
/springfield:ralph --session=MM-DD-YYYY-task-name
# Or check current state
cat .springfield/MM-DD-YYYY-task-name/state.json | jq .
The state.json file tracks exactly where the workflow stopped.
Springfield has built-in quality control:
Check these common issues:
Not in a git repository: Springfield requires git
git status # Should not error
Hook not configured: Verify the Springfield hook
cat hooks/hooks.json | jq '.hooks[] | select(.name == "springfield")'
Keyword missing: Include "springfield" in your prompt
echo "Use springfield to add a feature" | claude
Plugin not installed: Reinstall if needed
/plugin install springfield@springfield
Individual commands (/springfield:lisa, /springfield:ralph, etc.):
Orchestrator (mention "springfield" in task):
Most users should use the orchestrator for end-to-end workflows!
Yes! Springfield is language-agnostic:
Springfield has been tested with:
Sessions accumulate in .springfield/ but are gitignored:
# View all sessions
ls -la .springfield/
# Remove old sessions (BE CAREFUL!)
rm -rf .springfield/10-15-2024-old-task
# Or keep only recent sessions
find .springfield/ -type d -mtime +30 -exec rm -rf {} \;
Tip: Keep successful sessions as documentation of what Springfield accomplished!
Signs Ralph is stuck:
Solutions:
Check the prompt - May be ambiguous:
cat .springfield/SESSION/prompt.md
Adjust the plan - Edit prompt.md to be more specific
Start fresh - Sometimes a new session with clearer requirements works better
Use at your own risk! This plugin uses --dangerously-skip-permissions and executes commands autonomously. Run it in a sandboxed environment or on projects you don't mind experimenting with. Think of it like letting Ralph learn unsupervised - entertaining, but maybe not in production.
Based on the Ralph pattern - eventual consistency through iterative refinement. Ralph might not be the smartest, but he gets there eventually through small, persistent steps.
See skills/springfield/REFERENCE.md for the full philosophy.
This project uses character names from The Simpsonsβ’ for thematic purposes only. The Simpsonsβ’ is a trademark of 20th Television and Disney. This project is not affiliated with, endorsed by, or connected to The Simpsons, Disney, or 20th Television.
The code works about as well as Springfield's nuclear power plant - it'll get the job done, but don't be surprised if there's the occasional meltdown.
MIT
Bradley Golden
"Hi, Super Nintendo Chalmers!"
25 commits
Shell
100.0%
Try Springfield in 30 seconds:
# Make sure you're in a git repository
cd your-project
# Activate Springfield with any task
echo "springfield help me add a factorial function to math.js" | claude
# Springfield auto-activates! Lisa begins research...
What just happened?
For complex tasks:
echo "springfield help me refactor the authentication system to support OAuth2" | claude
# Complex task triggers debate between Frink and Skinner!
# Then Ralph implements with better requirements
Next steps:
"I'm learnding!" - Ralph Wiggum
Autonomous workflow orchestration for Claude Code, where cartoon characters do your coding. It's like having the whole town of Springfield working on your project!
Springfield is a Claude Code plugin that breaks down complex tasks into phases, each handled by a different Simpsons character:
From GitHub:
claude
/plugin marketplace add bradleygolden/springfield
/plugin install springfield@springfield
Just tell Springfield what to do:
"springfield help me add user authentication to the API"
Springfield runs all phases automatically. Or run them individually:
/springfield:lisa "authentication" # Research
/springfield:mayor-quimby # Decide complexity
/springfield:frink # Plan
/springfield:skinner # Review plan (COMPLEX tasks only)
/springfield:martin # Create PRD/documentation
/springfield:ralph # Implement
/springfield:comic-book-guy # Review
/springfield:lisa "task" --dry-run # Create session without executing
/springfield:lisa --session=SESSION_ID # Resume specific session
/springfield:lisa --research-file=research.md # Use existing research
/springfield:frink --plan-file=prompt.md # Use existing plan
/springfield:frink --force # Skip Skinner review
/springfield:ralph --session=SESSION_ID # Resume Ralph implementation
Springfield creates a .springfield/ directory with session folders for each task (format: MM-DD-YYYY-task-name/). Inside you'll find:
state.json - Structured session state with schema versioningresearch.md - Lisa's findingsdecision.txt - SIMPLE or COMPLEXplan-v1.md - Frink's initial plan (COMPLEX tasks)review.md - Skinner's plan feedback (COMPLEX tasks)prompt.md - Final implementation plan with subtasksscratchpad.md - Ralph's progress notes (updated every iteration)completion.md - "Task complete!" signalqa-report.md - Comic Book Guy's verdictSpringfield uses structured state tracking via state.json:
{
"schema_version": "1.0",
"session_id": "11-05-2025-task-name",
"status": "in_progress",
"current_phase": "ralph",
"iteration_count": 42,
"phases": {
"lisa": { "status": "complete", "start_time": "...", "end_time": "..." },
"ralph": { "status": "in_progress", "iteration": 42 }
},
"subtasks": [
{ "id": 1, "description": "...", "status": "COMPLETE", "failures": 0 }
],
"transitions": [...],
"kickbacks": [...],
"kickback_counts": { "lisa": 0, "frink": 0, "ralph": 1 }
}
Use jq to query session state: jq '.status' .springfield/*/state.json
Ralph works iteratively until the task is complete:
Ralph will continue iterating indefinitely until completion.md appears. You can stop at any time with Ctrl+C and resume later.
Comic Book Guy routes issues back to appropriate characters:
Kickback limits: Max 2 kickbacks per character. After 2, Comic Book Guy escalates the issue.
For complex tasks, Professor Frink runs a debate loop where two AI perspectives argue until they reach consensus on the best approach. If task is COMPLEX, Skinner reviews Frink's plan before Ralph implements.
%%{init: {'theme':'dark','themeVariables': {'darkMode':'true','edgeLabelBackground':'#1e1e1e','labelColor':'#ffffff'}}}%%
graph TD
Start([User Task]) --> Lisa[π Lisa: Research]
Lisa --> |research.md| Quimby{π© Mayor Quimby: Decide}
Quimby --> |SIMPLE| FrinkSimple[π¬ Frink: Simple Plan]
Quimby --> |COMPLEX| FrinkComplex[π¬ Frink: Debate Loop]
FrinkComplex --> |Proposer vs Counter| Consensus{Agents Agree?}
Consensus --> |No| FrinkComplex
Consensus --> |Yes| Skinner[π« Skinner: Review]
Skinner --> |Approved| FrinkRevised[π¬ Frink: Revised Plan]
Skinner --> |Needs Work| FrinkComplex
FrinkRevised --> |prompt.md| Martin[π Martin: PRD]
FrinkSimple --> |prompt.md| MartinSimple[π Martin: doc.md]
Martin --> |prd.md| Ralph[ποΈ Ralph: Implement Loop]
MartinSimple --> |doc.md| Ralph
Ralph --> |completion.md| ComicBook[π¬ Comic Book Guy: QA]
ComicBook --> QAResult{Quality Check}
QAResult --> |Issues Found| Kickback{What's Wrong?}
QAResult --> |Approved| Done([β
Task Complete])
Kickback --> |Research Gap| Lisa
Kickback --> |Design Issue| FrinkSimple
Kickback --> |Implementation Bug| Ralph
style Lisa fill:#FFE4B5,stroke:#333,color:#000
style Quimby fill:#D8BFD8,stroke:#333,color:#000
style FrinkSimple fill:#B0E0E6,stroke:#333,color:#000
style FrinkComplex fill:#B0E0E6,stroke:#333,color:#000
style FrinkRevised fill:#B0E0E6,stroke:#333,color:#000
style Skinner fill:#F0E68C,stroke:#333,color:#000
style Martin fill:#E6E6FA,stroke:#333,color:#000
style MartinSimple fill:#E6E6FA,stroke:#333,color:#000
style Ralph fill:#FFB6C1,stroke:#333,color:#000
style ComicBook fill:#98FB98,stroke:#333,color:#000
style Done fill:#90EE90,stroke:#333,color:#000
linkStyle default stroke:#fff,stroke-width:2px
Before Ralph implements anything, Martin Prince creates prospective documentation that guides the implementation. This ensures Ralph has clear requirements and acceptance criteria to follow.
What Martin creates:
COMPLEX tasks: Full PRD (Product Requirements Document) in /docs/planning/{type}/{id}/prd.md
SIMPLE tasks: Lightweight doc.md with task overview
How it helps Ralph:
Ralph reads Martin's documentation during implementation and follows the requirements step-by-step. Comic Book Guy later validates Ralph's work against Martin's PRD to ensure all acceptance criteria are met.
Example workflow:
This planning-before-implementation approach improves code quality and reduces rework!
npx and repomirror)brew install jq (macOS) or apt-get install jq (Linux)Springfield validates jq availability at session start. Without jq, state.json features are unavailable.
Task: "springfield help me add a factorial function to math.js"
What happens:
Lisa researches (10 seconds):
Mayor Quimby decides (5 seconds):
Ralph implements (30 seconds):
Comic Book Guy validates (15 seconds):
Session files created:
.springfield/[session-name]/
βββ state.json (tracks progress)
βββ research.md (Lisa's findings)
βββ implementation.md (Ralph's work)
βββ validation.md (Comic Book Guy's review)
Task: "springfield help me refactor the authentication system to support OAuth2"
What happens:
Lisa researches (30 seconds):
Mayor Quimby decides (5 seconds):
Frink plans (60 seconds):
Skinner reviews (45 seconds):
Frink revises (60 seconds):
Skinner approves (30 seconds):
Ralph implements (5 minutes):
Comic Book Guy validates (30 seconds):
Session files created:
.springfield/[session-name]/
βββ state.json
βββ research.md (Lisa)
βββ plan-v1.md (Frink's initial plan)
βββ review.md (Skinner's critique)
βββ plan-v2.md (Frink's revision)
βββ review-v2.md (Skinner's approval)
βββ prompt.md (Final implementation prompt)
βββ implementation-attempt-1.md (Ralph's work)
βββ validation.md (Comic Book Guy)
Scenario: Ralph's implementation failed validation
What happens:
You see the failure:
# Comic Book Guy rejected Ralph's work
cat .springfield/my-session/state.json
# Shows: "status": "failed", "reason": "Missing error handling"
Springfield automatically retries:
If max attempts reached:
.springfield/my-session/echo "resume session my-session" | claudeNo manual intervention needed - Springfield's loop handles retries automatically!
Symptoms:
Causes:
Solutions:
# Verify you're in a git repo
git status
# Check hooks configuration
cat hooks/hooks.json | jq .
# Ensure "springfield" appears in your prompt
echo "Use springfield to add feature X" | claude
Symptoms:
Solutions:
Check feedback in session directory:
cat .springfield/[session]/validation.md
# See what Comic Book Guy is rejecting
Review Ralph's attempts:
ls .springfield/[session]/implementation-attempt-*.md
# Compare attempts to see if Ralph is learning
Manual intervention:
# Edit the prompt with more specific guidance
nano .springfield/[session]/prompt.md
# Ralph will use updated prompt on next attempt
Force exit if needed:
Symptoms:
Solutions:
# macOS
brew install jq
# Linux (Debian/Ubuntu)
sudo apt-get install jq
# Linux (RHEL/CentOS)
sudo yum install jq
# Verify installation
jq --version
Symptoms:
Solutions:
Verify hooks are enabled:
# Check hooks/hooks.json exists
ls -la hooks/hooks.json
# Verify springfield skill is registered
cat hooks/hooks.json | jq '.skills'
Check Claude Code settings:
Try explicit activation:
# Use the springfield skill directly
/springfield "Your task description here"
Symptoms:
This is acceptable - Characters maintain personality in prompts and outputs, but technical content should be clear. If technical accuracy is present, voice variations are acceptable.
If you encounter issues not covered here:
Check session files:
cat .springfield/[session]/state.json | jq .
# Review the workflow state
Review logs:
.springfield/[session]/ for all generated filesReport issues:
Ask for help:
Key terms used in Springfield:
.springfield/MM-DD-YYYY-task-name/completion.md file created by Ralph when implementation is finishedSpringfield uses --dangerously-skip-permissions, so it's best suited for:
Avoid using Springfield directly on:
Think of it like Ralph at the nuclear power plant - fun for experimentation, risky for critical systems!
Timing depends on task complexity:
Ralph iterates until the task is complete (creates completion.md). You can stop the workflow at any time with Ctrl+C.
Yes! Springfield sessions persist in .springfield/ directories:
# Stop with Ctrl+C at any time
# Resume the session
/springfield:ralph --session=MM-DD-YYYY-task-name
# Or check current state
cat .springfield/MM-DD-YYYY-task-name/state.json | jq .
The state.json file tracks exactly where the workflow stopped.
Springfield has built-in quality control:
Check these common issues:
Not in a git repository: Springfield requires git
git status # Should not error
Hook not configured: Verify the Springfield hook
cat hooks/hooks.json | jq '.hooks[] | select(.name == "springfield")'
Keyword missing: Include "springfield" in your prompt
echo "Use springfield to add a feature" | claude
Plugin not installed: Reinstall if needed
/plugin install springfield@springfield
Individual commands (/springfield:lisa, /springfield:ralph, etc.):
Orchestrator (mention "springfield" in task):
Most users should use the orchestrator for end-to-end workflows!
Yes! Springfield is language-agnostic:
Springfield has been tested with:
Sessions accumulate in .springfield/ but are gitignored:
# View all sessions
ls -la .springfield/
# Remove old sessions (BE CAREFUL!)
rm -rf .springfield/10-15-2024-old-task
# Or keep only recent sessions
find .springfield/ -type d -mtime +30 -exec rm -rf {} \;
Tip: Keep successful sessions as documentation of what Springfield accomplished!
Signs Ralph is stuck:
Solutions:
Check the prompt - May be ambiguous:
cat .springfield/SESSION/prompt.md
Adjust the plan - Edit prompt.md to be more specific
Start fresh - Sometimes a new session with clearer requirements works better
Use at your own risk! This plugin uses --dangerously-skip-permissions and executes commands autonomously. Run it in a sandboxed environment or on projects you don't mind experimenting with. Think of it like letting Ralph learn unsupervised - entertaining, but maybe not in production.
Based on the Ralph pattern - eventual consistency through iterative refinement. Ralph might not be the smartest, but he gets there eventually through small, persistent steps.
See skills/springfield/REFERENCE.md for the full philosophy.
This project uses character names from The Simpsonsβ’ for thematic purposes only. The Simpsonsβ’ is a trademark of 20th Television and Disney. This project is not affiliated with, endorsed by, or connected to The Simpsons, Disney, or 20th Television.
The code works about as well as Springfield's nuclear power plant - it'll get the job done, but don't be surprised if there's the occasional meltdown.
MIT
Bradley Golden
"Hi, Super Nintendo Chalmers!"
25 commits
Shell
100.0%