
Spike
FreeValidate ideas quickly before full implementation.
Free · Opens the source repo
What Spike does
Spike is a skill designed for developers and designers who want to explore and validate ideas before committing to a full build. It enables users to conduct quick experiments, known as spikes, to assess the feasibility of concepts, compare different approaches, and identify potential unknowns that might not be resolved through research alone. The core methodology involves breaking down an idea into smaller, manageable questions, conducting research, building prototypes, and ultimately drawing conclusions based on the findings. This iterative process allows for a thorough examination of an idea's viability without the overhead of a complete project.
The skill operates on a structured loop: decompose, research, build, and verdict. Users start by decomposing their idea into 2-5 independent feasibility questions, each represented as a spike. These questions are framed using the Given/When/Then format, which helps clarify the expected outcomes and associated risks. After defining the spikes, users research the best approaches and tools before proceeding to build quick prototypes that can be tested and iterated upon. The emphasis is on creating something tangible that the user can interact with, ensuring that the spikes provide meaningful insights.
Spike is particularly beneficial in scenarios where users are unsure about the feasibility of an idea or need to validate multiple approaches before moving forward. It is a lightweight tool that can be used independently or alongside the GSD system for users who prefer a more integrated workflow. However, it is not intended for production-level work or situations where the answers can be found through documentation or existing knowledge. By focusing on rapid experimentation and learning, Spike helps users make informed decisions about their projects without excessive commitment or resources.
When to use it
Use this skill when you want to prototype an idea quickly or validate a concept before committing to a full build.
When not to use it
Avoid using Spike for production work or when the answers are readily available through documentation or prior knowledge.
What you can build with it
Exploring New Technology
A developer wants to test the feasibility of using WebSockets for real-time data streaming before integrating it into a larger application.
Comparing Libraries
A designer needs to evaluate two different PDF parsing libraries to determine which one best suits their project requirements.
Validating a Concept
A product manager wants to quickly prototype a new feature idea to assess its viability before presenting it to stakeholders.
How to install Spike
View source1. Install with the skills CLI
npx skills add nousresearch/hermes-agent/spike --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by nousresearchSpike
Use this skill when the user wants to feel out an idea before committing to a real build — validating feasibility, comparing approaches, or surfacing unknowns that no amount of research will answer. Spikes are disposable by design. Throw them away once they've paid their debt.
Load this when the user says things like "let me try this", "I want to see if X works", "spike this out", "before I commit to Y", "quick prototype of Z", "is this even possible?", or "compare A vs B".
When NOT to use this
- The answer is knowable from docs or reading code — just do research, don't build
- The work is production path — use the
planskill instead - The idea is already validated — jump straight to implementation
If the user has the full GSD system installed
If gsd-spike shows up as a sibling skill (installed via npx get-shit-done-cc --hermes), prefer gsd-spike when the user wants the full GSD workflow: persistent .planning/spikes/ state, MANIFEST tracking across sessions, Given/When/Then verdict format, and commit patterns that integrate with the rest of GSD. This skill is the lightweight standalone version for users who don't have (or don't want) the full system.
Core method
Regardless of scale, every spike follows this loop:
decompose → research → build → verdict
↑__________________________________________↓
iterate on findings
1. Decompose
Break the user's idea into 2-5 independent feasibility questions. Each question is one spike. Present them as a table with Given/When/Then framing:
| # | Spike | Validates (Given/When/Then) | Risk |
|---|---|---|---|
| 001 | websocket-streaming | Given a WS connection, when LLM streams tokens, then client receives chunks < 100ms | High |
| 002a | pdf-parse-pdfjs | Given a multi-page PDF, when parsed with pdfjs, then structured text is extractable | Medium |
| 002b | pdf-parse-camelot | Given a multi-page PDF, when parsed with camelot, then structured text is extractable | Medium |
Spike types:
- standard — one approach answering one question
- comparison — same question, different approaches (shared number, letter suffix
a/b/c)
Good spike questions: specific feasibility with observable output. Bad spike questions: too broad, no observable output, or just "read the docs about X".
Order by risk. The spike most likely to kill the idea runs first. No point prototyping the easy parts if the hard part doesn't work.
Skip decomposition only if the user already knows exactly what they want to spike and says so. Then take their idea as a single spike.
2. Align (for multi-spike ideas)
Present the spike table. Ask: "Build all in this order, or adjust?" Let the user drop, reorder, or re-frame before you write any code.
3. Research (per spike, before building)
Spikes are not research-free — you research enough to pick the right approach, then you build. Per spike:
-
Brief it. 2-3 sentences: what this spike is, why it matters, key risk.
-
Surface competing approaches if there's real choice:
Approach Tool/Library Pros Cons Status ... ... ... ... maintained / abandoned / beta -
Pick one. State why. If 2+ are credible, build quick variants within the spike.
-
Skip research for pure logic with no external dependencies.
Use Hermes tools for the research step:
web_search("python websocket streaming libraries 2025")— find candidatesweb_extract(urls=["https://websockets.readthedocs.io/..."])— read the actual docs (returns markdown)terminal("pip show websockets | grep Version")— check what's installed in the project's venv
For libraries without docs pages, clone and read their README.md / examples/ via read_file. Context7 MCP (if the user has it configured) is also a good source — mcp_*_resolve-library-id then mcp_*_query-docs.
4. Build
One directory per spike. Keep it standalone.
spikes/
├── 001-websocket-streaming/
│ ├── README.md
│ └── main.py
├── 002a-pdf-parse-pdfjs/
│ ├── README.md
│ └── parse.js
└── 002b-pdf-parse-camelot/
├── README.md
└── parse.py
Bias toward something the user can interact with. Spikes fail when the only output is a log line that says "it works." The user wants to feel the spike working. Default choices, in order of preference:
- A runnable CLI that takes input and prints observable output
- A minimal HTML page that demonstrates the behavior
- A small web server with one endpoint
- A unit test that exercises the question with recognizable assertions
Depth over speed. Never declare "it works" after one happy-path run. Test edge cases. Follow surprising findings. The verdict is only trustworthy when the investigation was honest.
Avoid unless the spike specifically requires it: complex package management, build tools/bundlers, Docker, env files, config systems. Hardcode everything — it's a spike.
Building one spike — a typical tool sequence:
terminal("mkdir -p spikes/001-websocket-streaming")
write_file("spikes/001-websocket-streaming/README.md", "# 001: websocket-streaming\n\n...")
write_file("spikes/001-websocket-streaming/main.py", "...")
terminal("cd spikes/001-websocket-streaming && python3 main.py")
# Observe output, iterate.
Parallel comparison spikes (002a / 002b) — delegate. When two approaches can run in parallel and both need real engineering (not 10-line prototypes), fan out with delegate_task:
delegate_task(tasks=[
{"goal": "Build 002a-pdf-parse-pdfjs: ...", "toolsets": ["terminal", "file", "web"]},
{"goal": "Build 002b-pdf-parse-camelot: ...", "toolsets": ["terminal", "file", "web"]},
])
Each subagent returns its own verdict; you write the head-to-head.
5. Verdict
Each spike's README.md closes with:
## Verdict: VALIDATED | PARTIAL | INVALIDATED
### What worked
- ...
### What didn't
- ...
### Surprises
- ...
### Recommendation for the real build
- ...
VALIDATED = the core question was answered yes, with evidence. PARTIAL = it works under constraints X, Y, Z — document them. INVALIDATED = doesn't work, for this reason. This is a successful spike.
Comparison spikes
When two approaches answer the same question (002a / 002b), build them back to back, then do a head-to-head comparison at the end:
## Head-to-head: pdfjs vs camelot
| Dimension | pdfjs (002a) | camelot (002b) |
|-----------|--------------|----------------|
| Extraction quality | 9/10 structured | 7/10 table-only |
| Setup complexity | npm install, 1 line | pip + ghostscript |
| Perf on 100-page PDF | 3s | 18s |
| Handles rotated text | no | yes |
**Winner:** pdfjs for our use case. Camelot if we need table-first extraction later.
Frontier mode (picking what to spike next)
If spikes already exist and the user says "what should I spike next?", walk the existing directories and look for:
- Integration risks — two validated spikes that touch the same resource but were tested independently
- Data handoffs — spike A's output was assumed compatible with spike B's input; never proven
- Gaps in the vision — capabilities assumed but unproven
- Alternative approaches — different angles for PARTIAL or INVALIDATED spikes
Propose 2-4 candidates as Given/When/Then. Let the user pick.
Output
- Create
spikes/(or.planning/spikes/if the user is using GSD conventions) in the repo root - One dir per spike:
NNN-descriptive-name/ README.mdper spike captures question, approach, results, verdict- Keep the code throwaway — a spike that takes 2 days to "clean up for production" was a bad spike
Attribution
Adapted from the GSD (Get Shit Done) project's /gsd-spike workflow — MIT © 2025 Lex Christopherson (gsd-build/get-shit-done). The full GSD system offers persistent spike state, MANIFEST tracking, and integration with a broader spec-driven development pipeline; install with npx get-shit-done-cc --hermes --global.
Frequently asked questions about Spike
Similar skills
Rhino 3D Scripting
Streamline your Rhinoceros 3D scripting tasks.
MVVM Toolkit
Streamline ViewModel development with source generators.
FreeCAD Scripts
Generate Python scripts for FreeCAD automation and modeling.
Azure Architecture Builder
Design and deploy Azure infrastructure using natural language.
Command Development
Streamline your command creation for Claude Code.
Create Cowork Plugin
Easily build and package plugins through guided sessions.
