A local, privacy-first, multi-agent coding orchestrator — powered by Ollama and the SKILL.md open standard.
You ask → Planner selects skills + breaks down task → Coder implements
→ Tester runs tests → Critic approves or rejects → loop → files land on disk
→ you review in VS Code → you commit
No auto-commits. No cloud. No subscriptions. No npm dependencies.
This tool works. Whether it works well enough for your daily workflow depends almost entirely on the local model you can run.
What it does well:
- Greenfield feature additions ("add a --dry-run flag")
- Scaffolding new components or modules
- Writing tests for existing code
- Answering questions about your codebase (REPL chat mode)
- Any task where generating new content is more valuable than surgical precision
What it struggles with:
- Small, precise edits ("remove this typo", "rename this variable") — LLMs regenerate entire files from scratch, which is slow and risky for tiny changes. Use your editor for those.
- Large codebases — context window limits mean agents may not see all relevant files
- Tasks requiring deep cross-file reasoning across 10+ files simultaneously
The model problem:
On consumer hardware (RTX 4070, 64GB RAM), a generative task takes 4–6 minutes end-to-end with qwen2.5-coder:7b. That's often slower than just writing the code yourself. This is a model capability and speed problem, not an architecture problem — and it's improving fast. When faster local models arrive, or when you point storm at an API, the loop becomes genuinely competitive.
Compared to the alternatives:
Claude Code, Aider, and Plandex are more mature and better tested. They also support SKILL.md natively — that's not a differentiator. Storm's only real differentiator is that you own the orchestration code. You can read every line of the loop, change the prompts, swap a model per role, or add a new agent. With the alternatives you're a user. With Storm you're the author.
pnpm add -g @inglorious/stormOr with npm:
npm install -g @inglorious/storm- Node.js 18+
- Ollama running locally or on a network machine
ollama pull qwen2.5:7b
ollama pull qwen2.5-coder:7bFor better results at the cost of speed, use 14b models:
ollama pull qwen2.5-coder:14bprintf "FROM qwen2.5-coder:7b\nPARAMETER num_ctx 32768" > Modelfile
ollama create qwen2.5-coder:7b -f Modelfile# Windows PowerShell
$env:OLLAMA_HOST = "0.0.0.0"
ollama serveThen set OLLAMA_HOST on the machine running storm:
export OLLAMA_HOST=http://192.168.x.x:11434# Run the full swarm on a task
storm "add input validation to the registration form"
# Preview what would change without writing any files
storm "dry-run: add input validation to the registration form"
# Start the interactive REPL
storm --repl
# Specify project path explicitly
storm "add input validation" --project /path/to/myprojectstorm --repl
> what does tools/files.js do? ← direct chat, streamed, fast
> run: add a --verbose flag ← triggers full swarm loop
> dry-run: refactor the auth module ← swarm without writing files
> exit
Plain messages chat directly with the model using your codebase as context — no agents, no overhead, just fast answers. run: and dry-run: trigger the full pipeline.
Storm supports the SKILL.md open standard. If your project has skills installed, the agents automatically discover and use them to produce framework-aware code.
The Planner reads the SKILL.md index, picks only the files relevant to your task, and injects them into the Coder and Tester prompts. This means if you're working on an @inglorious/web project, the coder will write render(entity, api) — not React.
# Install Inglorious Forge skills (covers @inglorious/store, web, charts, engine, etc.)
npx skills add https://github.com/ingloriouscoderz/forge-skills --skill forge-skillsAny skill set compatible with the SKILL.md standard works automatically.
All settings via environment variables:
| Variable | Default | Description |
|---|---|---|
OLLAMA_HOST |
http://localhost:11434 |
Ollama server URL |
MODEL_PLANNER |
qwen2.5:7b |
Planning and skill selection |
MODEL_CODER |
qwen2.5-coder:7b |
Code implementation |
MODEL_TESTER |
qwen2.5-coder:7b |
Test generation |
MODEL_CRITIC |
qwen2.5:7b |
Code review |
TEST_COMMAND |
npx vitest run --reporter=verbose |
Test runner |
MAX_ITERATIONS |
3 |
Max coder→critic loops before giving up |
MAX_FILE_CHARS |
8000 |
Max chars per file in prompts |
OLLAMA_TIMEOUT |
300000 |
Timeout per agent call (ms) |
OLLAMA_CODER_TIMEOUT |
600000 |
Timeout for the coder specifically (ms) |
Per-project tip — create a .stormrc.sh and source it before running:
export OLLAMA_HOST=http://192.168.x.x:11434
export TEST_COMMAND="npm test"
export MAX_ITERATIONS=2┌─────────────────────────────────────────────┐
│ You │
│ "add a filterable table component" │
└───────────────────┬─────────────────────────┘
│
▼
┌─────────────┐
│ PLANNER │ reads SKILL.md index → selects relevant skills
│ │ reads codebase → produces step-by-step plan
│ │ identifies which files need to change
└──────┬──────┘
│ plan + skills + relevant files
▼
┌─────────────┐ ◄───────────────────────┐
│ CODER │ receives focused context │ critique
│ │ implements the plan │
│ │ writes files to disk │
└──────┬──────┘ │
│ changes │
▼ │
┌─────────────┐ │
│ TESTER │ writes missing tests │
│ │ runs the test suite │
└──────┬──────┘ │
│ test results │
▼ │
┌─────────────┐ REJECTED ───────────────┘
│ CRITIC │ compares against baseline
└──────┬──────┘ only rejects new failures
│ APPROVED
▼
┌─────────────┐
│ YOU │ diff in VS Code, commit when happy
└─────────────┘
inglorious-storm/
├── storm.js # entry point, CLI, REPL
├── config.js # all settings
├── package.json
├── agents/
│ ├── planner.js # skill selection + implementation plan
│ ├── coder.js # file implementation (skill-aware)
│ ├── tester.js # test generation and execution (skill-aware)
│ └── critic.js # approval with baseline comparison
└── tools/
├── ollama.js # Ollama client (single-turn, multi-turn, streaming)
├── skills.js # SKILL.md discovery and loading
├── files.js # project file read/write/focus
├── shell.js # test runner
└── timer.js # step timing
- Cloud model support (
MODEL_CODER=claude-sonnet-4-6via Anthropic API) - Git diff preview before applying changes
- Watch mode for continuous task processing
- Per-agent model configuration in a config file
Built by Inglorious Coderz. MIT license.