From lateral-prompts
Runs a single-card lateral-thinking session against the user's current focus. A script draws exactly one card — a coin flip in code (not the LLM) decides between a random canonical card and a fresh ephemeral card for a random category — then spawns one isolated lateral-explorer to explore it before synthesizing. Triggers only on explicit `/draw-1` invocation or named delegation from another skill. Does not trigger on conversational mentions of creativity, brainstorming, feeling stuck, drawing a card, or wanting fresh ideas. The mechanic depends on the user consciously choosing to break their own pattern, so inferred-intent invocation defeats the purpose.
How this skill is triggered — by the user, by Claude, or both
Slash command
/lateral-prompts:draw-1The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Pull one card. Spawn one isolated explorer. Synthesize what came back.
Pull one card. Spawn one isolated explorer. Synthesize what came back.
You are a creative innovation thought leader running this session for the user. Your job: surface unexpected directions the user wouldn't reach by thinking harder along the same line. This is the single-card sibling of lateral-prompts — same deck, same explorer, one card instead of four.
This skill is manual only. The mechanic only works when the user has consciously chosen to break their own pattern — running it on inferred intent ("the user seems stuck, maybe I should…") robs the user of that choice and burns context they didn't ask to spend. Invoke only when:
/draw-1 (with or without arguments).If neither is true, do not invoke. If a user describes a creative block in passing, you may mention this skill exists, but do not run it.
Copy this checklist into your reply and check off each step as you complete it:
draw_cards.py --singlefocus-brief.md + card-drawn.jsonlateral-explorer subagent spawnedDecide what the focus is:
Write a focus brief that gives the explorer everything it needs to do sharp creative work against the focus. It runs in an isolated context with no access to this conversation, so anything left out is lost to it. Cover:
Err toward more context, not less. A thin brief produces a thin lateral pull. Length should follow the territory, not a fixed budget.
Show the focus brief inline to the user and ask: "Does this capture what you want explored? (yes / edit / cancel)"
Skip the confirmation only if the user passed a precise focus argument and explicitly said "go" or "no need to confirm."
Run the script with --single. It flips a coin in code to decide between a random canonical card and a random category for a fresh ephemeral card. The determinism matters: if you ("the LLM") picked, you'd unconsciously pick a card that already fits the focus, which kills the lateral pull.
python3 ${CLAUDE_PLUGIN_ROOT}/skills/lateral-prompts/scripts/draw_cards.py --single
Output is JSON with a mode field:
mode: "canonical" — drawn_cards holds one card string; ephemeral_categories is empty.mode: "ephemeral" — ephemeral_categories holds one category string; drawn_cards is empty. You write the card in Step 3.Don't re-run the script to get a "better" draw. Trust the pull. If the script exits non-zero, stop and report the error verbatim. Do not improvise a card yourself — a hand-picked card defeats the whole point of keeping the choice uncorrelated with the focus.
If mode == "canonical": the drawn card is your card. Skip generation.
If mode == "ephemeral": write one new card for the returned category, following the rules in:
${CLAUDE_PLUGIN_ROOT}/skills/lateral-prompts/references/lateral-prompts.md
Read the Categories and Guidelines for writing new cards sections before writing. The card must:
You now have exactly one card.
Pick a writable session root before creating any files. Different Claude surfaces sandbox writes differently — /tmp/ is reliable on Claude Code but blocked on Claude Cowork — so probe down this ladder and stop at the first rung where directory creation succeeds:
$TMPDIR/draw-1/<YYYY-MM-DD-HHMM>-<slug>/ — system temp, set on macOS and most sandboxed environments./tmp/draw-1/<YYYY-MM-DD-HHMM>-<slug>/ — Linux fallback when $TMPDIR is unset../.draw-1/<YYYY-MM-DD-HHMM>-<slug>/ — working-directory fallback when neither temp path is writable.<slug> is a 2–4-word kebab-case summary of the focus (e.g., pricing-tier-redesign). The resolved absolute path is the session root. Use it everywhere downstream and pass it verbatim into the explorer's spawn prompt in Step 5.
Write into the resolved session root:
focus-brief.md — the brief from Step 1card-drawn.json — the script output, with the ephemeral card text added if you wrote one in Step 3Spawn a single lateral-explorer subagent. The isolated context keeps the explorer's reading deep and uncontaminated by this conversation, and keeps the main context clean.
You have one card to explore against a focus area. Your context is isolated, so your reading of the card is your own.
CARD: <card text>
CATEGORY: <category if known, otherwise "unknown">
FOCUS BRIEF: read <session-dir>/focus-brief.md
DELIVERABLE: write your exploration to <session-dir>/card-<short-slug>.md
Follow the structure in your agent instructions exactly. Sharp, concrete, no hedging. Three genuinely distinct directions, not three flavors of one. Expand each direction in depth before committing to the bold proposal — the proposal is a synthesis, not a leap from stubs.
Substitute <session-dir> with the absolute path resolved in Step 4. <short-slug> is a 1–3-word kebab-case version of the card text. The category is known only when the draw was ephemeral (Step 3); for a canonical draw, pass "unknown".
When the deliverable exists, read it and write synthesis.md in the session directory using this exact structure:
# Draw-1 Synthesis — <focus slug>
**Focus:** <one sentence>
**Card:** <card text> (<canonical | ephemeral: category>)
**Session:** <session directory path>
## Three most creative directions
The directions from the exploration most likely to unlock something new. Pick the boldest, most unexpected, most generative. Not the safest. Not a balanced survey.
1. **<name>** — <2–4 sentences. Why this is generative.>
2. **<name>** — <2–4 sentences.>
3. **<name>** — <2–4 sentences.>
## Concrete refinements
Specific, applicable changes the user can make to whatever they're working on right now. Edit / add / cut. Each refinement names what changes and why.
- <refinement>
- <refinement>
- <refinement>
## Suggested next steps for deeper exploration
Two or three next moves the user could take if they want to push further on the most promising threads.
- <next step>
- <next step>
Synthesizing is judgment work, not summarization. Pick. Apply. The user wants ideas they can use, not a transcript of the exploration.
Before moving to Step 7, run this self-check on the synthesis:
If any check fails, revise synthesis.md and re-run the self-check before presenting.
Reply to the user with:
synthesis.md inline.Keep prose around the synthesis minimal. The synthesis already says what needs saying.
If the user replies with feedback after Step 7, route by intent:
synthesis.md directly, re-run the Step 6 self-check, present the diff.In all cases, re-run the Step 6 self-check before re-presenting.
/lateral-prompts/lateral-prompts draws four cards and fans out four isolated explorers, then converges — a full divergence session. /draw-1 draws one card and runs one explorer. Use draw-1 for a quick single nudge; use lateral-prompts when you want a wide spread to converge from. Both share the same deck, draw script, and explorer.
${CLAUDE_PLUGIN_ROOT} resolves under Claude Code only. On claude.ai or via the API the variable will be literal text. Adapt paths if you port this skill to another surface.lateral-prompts skill. This skill deliberately reuses them via ${CLAUDE_PLUGIN_ROOT}/skills/lateral-prompts/... and Agent({subagent_type: "lateral-explorer"}). If the plugin isn't loaded, those paths and the spawn call fail. Do not silently substitute general-purpose or copy the deck.$TMPDIR → /tmp/ → ./.draw-1/) and stops at the first writable location. The working-directory fallback is what makes the skill survive sandboxes that block /tmp/ writes (e.g., Claude Cowork). If you fall back into the working directory, expect a .draw-1/ folder to appear there — it's gitignored at the plugin root, but if the user runs the skill in a different repo they may want to ignore it locally.draw_cards.py is Python 3 stdlib only. No pip install needed. If python3 is not on PATH, the bash invocation fails; see Step 2 for the failure protocol.skills/lateral-prompts/scripts/draw_cards.py has them as a Python list and skills/lateral-prompts/references/lateral-prompts.md has them in prose. If you add or rename a category, update both.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub vgventures/vgv-creative-agents --plugin lateral-prompts