Skip to content
Back to skills

Spike

ASecurity

Time-boxed throwaway experiment to validate ONE risky hypothesis before committing to the full pipeline — write a scratch experiment, run it, record works / doesn't / caveats, and explicitly do NOT integrate it into production code. TRIGGER when the user wants a quick feasibility check ("just check if X works", "spike on Y", "is this even possible", "proof of concept", "validate this assumption"). Do NOT trigger when: the approach is already known and the user wants to build it → /implement; ...

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 5, 2026
ai-agentsbashgitapiperformance

Works with

  • api

Security analysis

A100/100

Scanned September 24, 2026

npx -y skills add mik2win/foureyes --skill spike --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Spike?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Spike
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mik2win-spike/badge)](https://www.skillsdirectory.com/skills/mik2win-spike)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: spike
disable-model-invocation: true
description: >-
  Time-boxed throwaway experiment to validate ONE risky hypothesis before
  committing to the full pipeline — write a scratch experiment, run it, record
  works / doesn't / caveats, and explicitly do NOT integrate it into production
  code. TRIGGER when the user wants a quick feasibility check ("just check if X
  works", "spike on Y", "is this even possible", "proof of concept", "validate
  this assumption"). Do NOT trigger when: the approach is already known and the
  user wants to build it → /implement; requirements are unclear → /analyst;
  a full design/impact analysis is wanted → /prepare; the question is how it
  should look or behave, or you want to compare several design options → /prototype.
allowed-tools: Read, Grep, Glob, Bash, Write, Edit, AskUserQuestion
effort: medium
---

# Spike: $ARGUMENTS

A spike is a **time-boxed, throwaway** experiment that answers one risky question
cheaply — "can X do Y?" — without the full `analyst → prepare → implement` pipeline.
The experiment is **scratch code you will delete**; its only product is a finding.

This skill carries ONLY invariant workflow logic. Run/test commands and where source
lives are read at runtime from `.claude/PROJECT.md`. The experiment lives **outside**
the project's source tree and is **never** integrated into production.

---

## Phase 0 — Load profile

1. Read `.claude/PROJECT.md`. If it is missing, or still contains TEMPLATE /
   placeholder markers, fall back to the root `CLAUDE.md` (always in context) when it
   carries the commands/architecture/libraries below — proceed on it, noting you're
   running without a kit profile. Only if *neither* has those facts, **STOP** and tell
   the user: "Profile not configured — run `/bootstrap` to generate `.claude/PROJECT.md`,
   then re-run `/spike`."
2. If `$ARGUMENTS` is empty, ask what hypothesis to validate.

From PROJECT.md, resolve and keep handy:
- **Commands** — `run`, `test` / `test:targeted` (to execute the experiment).
- **Architecture** — where source lives, so you can scaffold the scratch experiment
  **outside** it (never under the app's source paths).
- **Key libraries** — so the scratch uses the project's real dependencies.
- **Plans location** — where the Spike Report is saved (so the finding survives the session).

If `CONTEXT.md` exists, skim it so the hypothesis is framed in the project's vocabulary.

Before framing a brand-new hypothesis, skim the **Plans location** for a prior spike report on
the same question — it may already be settled (`WORKS` / `DOESN'T`). Don't re-spike a decided
call without new evidence; if one exists, surface it instead of repeating the experiment.

---

## Phase 1 — Frame the hypothesis (and the time-box)

Pin the experiment down before writing anything:

- **Hypothesis** — one falsifiable statement: "X can do Y under condition Z."
- **Why it's risky** — what unknown this de-risks (a new library, an API limit, a
  performance ceiling, an integration shape).
- **Pass / fail signal** — the *observable* result that settles it, decided **up front**.
- **Time-box** — the rough budget ("~15 min, then stop and report"). A spike is small;
  if it's growing into a feature, stop and route to `/prepare`.
- **Hard cases** — name the two or three uses that fit *worst* and build at least one; write the
  assumed volumes and concurrency as agreed numbers. A few hard cases are no veto, an unnamed one is.

**When the hypothesis carries concurrency** — retries, webhooks, background jobs, two processes on one
row — list the timelines and the resources they share *before* writing code, then walk the ladder in
order: fewer timelines · shorter timelines · no shared resource · a safe sharing primitive · explicit
coordination. Stop at the first rung that answers the question, and say in the report which rung the
experiment stood on — a mechanism proved on one timeline proved nothing about the shape you will ship.

If the hypothesis is unclear or hides several questions, ask **one** focused question
via `AskUserQuestion` (the `/grill` one-at-a-time discipline) and narrow to a single testable claim.

---

## Phase 2 — Build the scratch experiment

Write the **smallest** experiment that produces the pass/fail signal:

- Put it in a **clearly throwaway location outside the source tree** — a scratch dir
  (e.g. `spike/` or `.spike/`) at the repo root, or the system temp dir. **Never**
  under the Architecture source paths from PROJECT.md.
- Use the project's **real key libraries** (from PROJECT.md) so the result is honest.
- Hardcode, stub, and shortcut freely — this is throwaway. No tests, no abstractions,
  no error handling beyond what the signal needs.

---

## Phase 3 — Run & observe

1. Execute via the **run/test command from PROJECT.md → Commands** (or a direct
   one-off invocation of the scratch file).
2. Capture the actual output / error / measurement — the raw evidence.
3. If the signal is ambiguous, tighten the experiment and re-run — do not guess.

---

## Phase 4 — Record findings

State the outcome plainly against the Phase 1 signal:

- **Verdict** — `WORKS` / `DOESN'T` / `PARTIAL`.
- **Evidence** — the command run + the observed output/measurement.
- **Caveats** — what the spike did NOT prove, conditions assumed, scale not tested.
- **Confidence** — how much weight the result can bear.

**Persist the report (so the finding isn't lost).** `Write` the Spike Report (the Output Format
below) to the **Plans location** from `PROJECT.md`, e.g. `<plans>/<YYYY-MM-DD>-<slug>-spike.md`. The
*scratch code* is thrown away (Phase 5); the *report* is the durable product and survives the
session. Whether it's committed or kept local follows `PROJECT.md` → Artifact git policy.

---

## Phase 5 — Decide, route & clean up

1. **Route** based on the verdict:
   - WORKS / PARTIAL → `/prepare` (design it for real) or `/implement` if scope is
     already trivial; `/analyst` first if requirements are still fuzzy.
   - DOESN'T → report the dead end and the next hypothesis to try.
2. **Fold the verdict back into the plan (when this spike validated an existing plan/epic).**
   Per the Artifact-Continuity Contract (`rules/_generic/planning-artifacts.md`), the report
   alone is stranded — the implementing session reads the plan, not the report. So: write the
   verdict into the affected plan (an assumption-to-validate becomes resolved fact, or the plan
   is revised if it DOESN'T), **cross-link** the report from the plan header, add it to the
   overview's "Reviews & decisions — READ FIRST" index, and **sweep** sibling plans the verdict
   touches. A standalone spike with no plan skips this.
3. **Clean up the scratch.** Delete the experiment, or — if the user wants to keep it
   for reference — move it to the scratch dir and clearly mark it throwaway/gitignored.
   **Never** integrate scratch code into production; the real version is written fresh
   through the pipeline.

---

## Output Format

```
## Spike Report

**Hypothesis**: <falsifiable claim>
**Time-box**: <budget> — <kept / overran>
**Setup**: <what the scratch experiment did, where it lived>
**Verdict**: WORKS | DOESN'T | PARTIAL
**Evidence**: <command + observed output/measurement>
**Hard case**: <which one was built and what it cost — or why none was>
**Caveats**: <what it did NOT prove>
**Recommendation**: <route: /prepare | /implement | /analyst | abandon> — <why>
**Report saved**: <plans path — the durable finding>
**Cleanup**: <scratch code deleted | moved to scratch and marked throwaway>
```

## Hard rules

- **Throwaway only.** Scratch code is never integrated into production — the real
  implementation is built fresh through `analyst → prepare → implement`.
- **Outside the source tree.** The experiment lives in a scratch/temp location, never
  under the Architecture source paths from PROJECT.md.
- **Time-boxed.** If the spike outgrows its budget or needs production changes to
  validate, STOP and route to `/prepare` — that's a planning task, not a spike.
- **One hard case built.** A spike that exercised only the convenient path measured convenience.
- **Facts from PROJECT.md.** Run/test commands and source layout come from the profile.

## Cross-reference

- **Sibling:** `/prototype` — when the question isn't a single yes/no risk but *how it should
  look or behave*; it explores a design space with several options. Spike answers ONE binary
  question; prototype compares many.
- **Before:** `/discover` (prior-art) may surface the risk this spike validates.
- **After:** `/prepare` (design for real) or `/implement` (if trivial).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.