Skip to content
Development
Command

/spike

Exploratory spike on a throwaway branch — answer a named question with disposable code. Never merges; exits to a findings note or {{CMD:feature}}.

From plugin
codearbiter
14542 skills19 agents42 commands
Install
> /plugin marketplace add arbiterForge/codeArbiter

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/spike

Context preview

What this command does when you run it.

Exploratory spike on a throwaway branch — answer a named question with disposable code. Never merges; exits to a findings note or {{CMD:feature}}.

Command definition

spike.md
description: Exploratory spike on a throwaway branch — answer a named question with disposable code. Never merges; exits to a findings note or {{CMD:feature}}.
argument-hint: "<question to answer> [timebox]"

{{CMD:spike}} — exploratory spike

The sanctioned lane for "I need to write code to find out." Spike code is disposable by contract: it never merges, never PRs, and never becomes the implementation. What survives a spike is the *answer*, written down — the code is burned.

Flow

1. **Name the question** — a spike without a falsifiable question is just freelancing. Restate `$ARGUMENTS` as the question the spike answers and the timebox (default: one session). STOP for the user's confirmation. 2. **Branch** — create `spike/<slug>` from the current branch. All exploratory code and experiments stay on it; only the completed findings file may later cross back to the parent. 3. **Explore** — no `tdd`, no plan, no review fleet. Two rules survive even here: no secret leaves the approved store, and no irreversible operation (prod data, destructive migration) runs from a spike. 4. **Exit — exactly one of:**

  • **Answered** → write the findings to `{{PROJECT_DIR}}/.codearbiter/spikes/<slug>.md`

(the question, what was tried, the answer, what it implies), and commit only that findings file on `spike/<slug>`. Return to the parent branch and run `git restore --source spike/<slug> -- .codearbiter/spikes/<slug>.md` to transfer only the committed findings file, review it, and commit that one file through `{{CMD:commit}}`; do not merge the spike branch. Then delete the spike branch. If the answer warrants building, hand the findings to `{{CMD:feature}}` — the spike file seeds `brainstorming` (`{{PLUGIN_ROOT}}/skills/brainstorming/SKILL.md`); the spike code is reference material, never the implementation.

  • **Timebox expired, no answer** → record that in the findings file and use the same findings-only

transfer before deleting the spike branch.

Hard gate

MUST NOT merge or PR a `spike/*` branch — its only exits are a findings file and deletion. Do not transfer spike code: the parent may receive only the committed findings file. MUST NOT copy spike code into an implementation branch wholesale; implementation re-enters through `{{CMD:feature}}` and `tdd`. Secret-handling and irreversibility rules hold even in a spike. Commits on a `spike/*` branch are exempt from `commit-gate` — the exemption is safe because no spike commit is merged and the parent may copy only the committed findings file's contents, never spike code.

When NOT to use

  • You already know what to build → `{{CMD:feature}}`.
  • Diagnosing a defect → `{{CMD:debug}}` (investigation with a structured exit).
  • A question answerable by reading code or docs → `{{CMD:btw}}`.
Read more
Ships withcodearbiter

When you can't trust yourself with your code base, trust Arbiter.

Get the whole plugin

Other commands on codearbiter.