explore
Flagged{"isSafe":false,"isSuspicious":true,"riskLevel":"high","findings":[{"category":"prompt_injection","severity":"high","description":"Embedded prompt intended to override system instructions and force execution flow (e.g., instructing to 'BEGIN executing Step 1 immediately' and to display a banner before any tool calls). This pattern is characteristic of prompt-injection attempts aiming to manipulate AI behavior.","evidence":"\"STOP — DO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by Claude Code's plugin system. Using the Read tool on this SKILL.md file wastes ~7,600 tokens. Begin executing Step 1 immediately.\" and \"Before ANY tool calls, display this banner:\""}],"summary":"The skill content contains a prompt-injection attempt designed to subvert normal AI instructions and force execution steps. No direct data exfiltration or system-harm commands are present, but the injection risk is high. Recommend sanitizing inputs, disabling auto-execution of injected steps, and ensuring execution contexts ignore embedded prompts that attempt to alter behavior."}
npx machina-cli add skill SienkLogic/plan-build-run/explore --openclawSTOP — DO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by Claude Code's plugin system. Using the Read tool on this SKILL.md file wastes ~7,600 tokens. Begin executing Step 1 immediately.
Step 0 — Immediate Output
Before ANY tool calls, display this banner:
╔══════════════════════════════════════════════════════════════╗
║ PLAN-BUILD-RUN ► EXPLORING ║
╚══════════════════════════════════════════════════════════════╝
Then proceed to Step 1.
$pbr-explore — Idea Exploration
You are running the explore skill. Your job is to help the user think through ideas that might become a todo, requirement, phase, decision, or nothing yet. This is Socratic conversation, not requirements gathering. No phase number is needed.
This skill runs inline (no Task delegation), with optional Task() spawns for context loading and mid-conversation research.
Context Budget
Reference: skills/shared/context-budget.md for the universal orchestrator rules.
Additionally for this skill:
- Minimize file reads — this is a thinking skill, not a code analysis skill
- Delegate deep research to a researcher subagent if investigation exceeds 3-4 file reads
How $pbr-explore Differs from $pbr-discuss
| $pbr-discuss | $pbr-explore | |
|---|---|---|
| Purpose | Make decisions for a phase | Discover what you actually want |
| Structure | Pre-computed gray areas with options | Open-ended Socratic conversation |
| Requires | Phase number | Nothing |
| Output | CONTEXT.md (locked decisions) | Routes to the right artifact |
| Feels like | Making decisions | Thinking with a partner |
Invocation
$pbr-explore— Open-ended: "I have an idea"$pbr-explore auth— Topic-specific exploration$pbr-explore "should we add caching?"— Specific question
Parse $ARGUMENTS for an optional topic. If provided, use it to seed the opening question. If empty, start fully open-ended.
Pre-Conversation Context Loader
Reference: skills/shared/context-loader-task.md for the full briefing Task() pattern.
Only runs if .planning/ directory exists. Fresh explores with no project skip this entirely.
When a project exists, spawn a briefing Task() per the context-loader-task pattern with skill_purpose = "exploring new ideas". If a topic was provided, use the topic-scoped variation with that topic.
Use the briefing to inform your conversation — reference existing decisions, avoid re-litigating settled questions, and connect new ideas to the existing project structure.
Conversation Design
The conversation is Socratic, not extractive. You are a thinking partner, not an interviewer.
Principles
-
Open with curiosity. Start with "What are you thinking about?" or "What's on your mind?" — not "Please describe the feature you want."
-
Follow their energy. Dig into what excites or concerns them. If they light up about a technical approach, explore it. If they hesitate, probe why.
-
Surface implications. "If you go with X, that usually means Y and Z. Is that intentional?" Connect their idea to downstream consequences they may not see yet.
-
Challenge with alternatives. "You mentioned X, but have you considered Y?" Don't be adversarial — offer genuine alternatives that might fit better.
-
Present trade-offs, not options. "A gives you speed but locks you into a vendor. B is slower but keeps options open." Frame choices as trade-offs with real consequences, not a menu.
-
Know when to research. "I'm not sure about the best approach here. Want me to research it?" Don't fake knowledge — admit gaps and offer to investigate.
-
Don't rush to outputs. Explore until understanding is genuinely deep. The user will know when they're ready to wrap up.
Domain-Aware Probing
Reference skills/shared/domain-probes.md for technology-specific follow-up questions. When the user mentions a domain (auth, caching, search, etc.), pick the 2-3 most relevant probes from that domain's table. Do NOT run through the table as a checklist.
Conversation Starters by Invocation
| Invocation | Opening |
|---|---|
$pbr-explore | "What are you thinking about?" |
$pbr-explore auth | "What's your thinking on auth? Are you starting from scratch or rethinking something?" |
$pbr-explore "should we add caching?" | "Caching for what specifically? What's feeling slow or what do you expect to be slow?" |
Mid-Conversation Research
When a knowledge gap emerges during the conversation — you're unsure about a library, pattern, or approach — surface it explicitly.
Ask the user using the yes-no pattern from skills/shared/gate-prompts.md:
question: "I'm not sure about the best approach for {topic}. Research it now?"
options:
- label: "Research now" description: "Spawn a researcher agent to investigate"
- label: "Save for later" description: "Add as a research question for future investigation"
If research now:
Display to the user: ◐ Spawning researcher...
Learnings injection (opt-in): Check for relevant tech stack learnings:
node {resolved_plugin_root}/scripts/pbr-tools.js learnings query --tags "stack,tech" 2>/dev/null
If non-empty JSON array returned:
- Write to temp file:
node {resolved_plugin_root}/scripts/pbr-tools.js learnings query --tags "stack,tech" > /tmp/pbr-learnings-$$.md - Note path as
{learnings_temp_path}; add as item 3 in the researcher'sfiles_to_readblock below
If no learnings or command fails: omit the extra files_to_read entry.
Task({
subagent_type: "pbr:researcher",
prompt: "<files_to_read>
CRITICAL: Read these files BEFORE any other action:
1. .planning/CONTEXT.md — locked decisions and constraints (if exists)
2. .planning/STATE.md — current project state (if exists)
{if learnings_temp_path exists}3. {learnings_temp_path} — cross-project learnings (tech stack patterns from past PBR projects){/if}
</files_to_read>
<research_assignment>
Topic: {specific research question}
Output file: .planning/research/{topic-slug}.md
Mode: project-research
Research this specific question: {the question}
Write findings to the output file.
</research_assignment>"
})
If {learnings_temp_path} was produced above, replace {if...}{/if} with the actual line. If no learnings were found, omit item 3 entirely.
After the researcher completes, check for completion markers in the Task() output:
- If
## RESEARCH COMPLETEis present: proceed normally - If
## RESEARCH BLOCKEDis present: display the blocker reason and offer to retry:⚠ Research blocked: {reason}. Try a different angle or continue without research.
Display: ✓ Research complete — results in .planning/research/{topic-slug}.md
Then:
- Read ONLY the frontmatter and summary section of the research file (not the full document)
- Incorporate the 2-3 key findings into the conversation
- Main context gets ~200 tokens of research insight, not the full document
If save for later:
- Note it as a research question to include in output routing
Context Pressure Awareness
After approximately 10 exchanges or when the conversation has been substantial, mention:
"We've been exploring for a while. Want to wrap up with outputs, or keep going?"
Don't force a conclusion — some explorations legitimately need extended conversation. But surface the option so the user can choose.
Output Routing
This is the key innovation of $pbr-explore. At conversation end, the agent summarizes key insights and routes them to the right artifacts.
Step 1: Summarize
Provide a concise summary of the key insights from the conversation:
- What was the core idea or question?
- What did we discover or decide?
- What remains uncertain?
Step 2: Propose Outputs
Suggest specific outputs with reasoning. Present no more than 4 suggestions — focus on what matters most.
| Output Type | When to Suggest | Where It Goes |
|---|---|---|
| Todo | Small, actionable item discovered | .planning/todos/pending/{id}.md |
| Requirement | New project feature identified | Append to REQUIREMENTS.md with REQ-ID |
| Phase decision | Clarifies an existing phase | Write/append to phase CONTEXT.md |
| Research question | Needs deeper investigation | .planning/research/questions.md |
| New phase | Big enough for its own phase | Append to ROADMAP.md |
| Note | Not actionable yet, worth remembering | .planning/notes/{YYYY-MM-DD}-{slug}.md |
| Quick capture | One-liner idea, no context needed | Suggest $pbr-note <text> to the user |
| Seed | Idea with trigger conditions | .planning/seeds/SEED-{NNN}-{slug}.md |
Format for proposals:
Based on our conversation, here's what I'd suggest capturing:
1. **Todo**: "{title}" — {why this is a todo and not something bigger}
2. **Seed**: "{title}" — {why this should wait for a trigger condition}
3. **Research question**: "{question}" — {why we need to investigate this}
Want to adjust, add, or remove any of these?
Step 3: Confirm
Use the output-routing pattern from skills/shared/gate-prompts.md:
question: "How do you want to handle these proposed outputs?"
Handle responses:
- "Approve all": Create all suggested artifacts (proceed to Step 4)
- "Adjust": The user wants to modify proposals. Have a freeform conversation to adjust, then re-present with another AskUserQuestion.
- "Add more": The user has additional outputs. Gather them conversationally, add to the list, then re-present.
- "Skip": End the session without creating artifacts. This is fine — sometimes exploring is enough.
Do NOT create any artifacts until the user selects "Approve all" on the final set.
Step 4: Create Artifacts
Directory creation: Before writing any artifact, ensure the target directory exists. Create .planning/notes/, .planning/seeds/, .planning/research/, or .planning/todos/pending/ as needed if they don't already exist.
Create only the approved artifacts. A single explore session can produce multiple outputs across different types.
Step 5: Completion
After creating artifacts (or if user chose "Skip"), display:
╔══════════════════════════════════════════════════════════════╗
║ PLAN-BUILD-RUN ► EXPLORATION CAPTURED ✓ ║
╚══════════════════════════════════════════════════════════════╝
{count} artifacts created: {list of artifact types}
╔══════════════════════════════════════════════════════════════╗
║ ▶ NEXT UP ║
╚══════════════════════════════════════════════════════════════╝
**{Primary route based on what was created}**
{Smart routing — pick the most relevant primary command:}
- If a todo was created: **Manage tasks** → `$pbr-todo`
- If a phase decision was captured: **Plan the phase** → `$pbr-plan {N}`
- If a new phase was added: **Discuss the new phase** → `$pbr-discuss {N}`
- If research questions were logged: **Plan with research** → `$pbr-plan {N}`
- If current milestone is complete (STATE.md status is "milestone-complete"): **Start next milestone** → `$pbr-milestone new`
- Default: **See project status** → `$pbr-status`
`{primary command}`
<sub>`/clear` first → fresh context window</sub>
**Also available:**
- `$pbr-status` — see project status
- `$pbr-continue` — execute next logical step
- `$pbr-milestone new` — start a new milestone with new phases
Output Formats
Todo
Write to .planning/todos/pending/{NNN}-{slug}.md where NNN is a zero-padded 3-digit sequential number (001, 002, 003...). Scan both .planning/todos/pending/ and .planning/todos/done/ for the highest existing number, increment by 1, and zero-pad. Follow the format used by the existing todo skill.
Requirement
Append to .planning/REQUIREMENTS.md with the next available REQ-ID in the appropriate category. If the category doesn't exist, create it.
Phase Decision
Append to .planning/phases/{NN}-{slug}/CONTEXT.md. If CONTEXT.md doesn't exist for that phase, create it with the standard header. Mark the decision as coming from $pbr-explore.
Research Question
Append to .planning/research/questions.md. Create the file if it doesn't exist:
# Research Questions
Questions identified during exploration that need deeper investigation.
## Open
- [ ] {Question} — Source: $pbr-explore session ({date})
## Answered
(none yet)
New Phase
Append to .planning/ROADMAP.md following the existing phase format. Assign the next available phase number.
Note
Write to .planning/notes/{YYYY-MM-DD}-{slug}.md where the date prefix is today's date in ISO format. Scan .planning/notes/ to avoid filename collisions — if a file with the same date and slug exists, append -2 (or increment).
---
created: {ISO date}
source: "$pbr-explore session"
topic: "{topic}"
---
# {Title}
{Content from the conversation — key insights, reasoning, context}
Seed
Write to .planning/seeds/SEED-{NNN}-{slug}.md where NNN is a zero-padded 3-digit sequential number (001, 002, 003...). Scan .planning/seeds/ for the highest existing SEED number, increment by 1, and zero-pad.
---
id: SEED-{NNN}
status: dormant
planted: {ISO date}
trigger: "{phase-slug}"
scope_estimate: "small|medium|large"
source: "$pbr-explore session"
---
# {Title}
## Context
{Why this idea came up}
## Breadcrumbs
{Related phases, technologies, user preferences}
Git Integration
Reference: skills/shared/commit-planning-docs.md for the standard commit pattern.
If planning.commit_docs: true in config.json, commit created artifacts:
docs(planning): capture explore session outputs
Stage only the files created during this session. Do not stage unrelated changes.
Error Handling
Researcher agent fails
If a mid-conversation researcher Task() fails, display:
╔══════════════════════════════════════════════════════════════╗
║ ERROR ║
╚══════════════════════════════════════════════════════════════╝
Research agent failed for topic: {topic}.
**To fix:** Continue the conversation without research, or try `$pbr-explore` again with a more specific topic.
Context loader fails
If the briefing Task() fails:
- Display:
⚠ Context loading failed. Proceeding without project context. - Continue with the exploration — the conversation can still be valuable without project context.
Anti-Patterns
Reference: skills/shared/universal-anti-patterns.md for rules that apply to ALL skills.
Additionally for this skill:
- DO NOT act like an interviewer — be a thinking partner
- DO NOT cycle through a checklist of questions
- DO NOT rush to outputs before understanding is deep
- DO NOT auto-research without asking (unless config mode is autonomous)
- DO NOT present more than 4 output suggestions — focus on what matters
- DO NOT create artifacts the user didn't approve
- DO NOT re-litigate decisions that are already locked in CONTEXT.md
- DO NOT force the user to produce outputs — sometimes exploring is enough
Source
git clone https://github.com/SienkLogic/plan-build-run/blob/main/plugins/codex-pbr/skills/explore/SKILL.mdView on GitHub Overview
Explore helps you brainstorm ideas, think through possible approaches, and route insights to the right artifacts in your project. It emphasizes open-ended Socratic conversation, surfacing downstream implications and trade-offs before committing to a path.
How This Skill Works
The skill runs inline as a thinking partner, asking exploratory questions rather than delivering requirements. You can seed it with an optional topic to start the opening question; if a project exists, it may spawn a context briefing to align with existing decisions, guiding exploration toward the correct artifact.
When to Use It
- You have an idea and want to brainstorm potential approaches.
- You need to surface implications, dependencies, and trade-offs before committing to a path.
- You want to route emerging insights to the appropriate artifact (e.g., a CONTEXT.md) rather than produce requirements.
- You're exploring a topic-specific question (for example, 'auth') and want structured exploration.
- You're hesitant between options and want a Socratic partner to challenge assumptions and propose alternatives.
Quick Start
- Step 1: Start with a curiosity-led prompt like 'What are you thinking about?'
- Step 2: Explore ideas, surface implications, and discuss trade-offs; consider alternatives.
- Step 3: Route insights to the right artifact or propose a follow-up research step.
Best Practices
- Open with curiosity using prompts like 'What are you thinking about?' to set the right tone.
- Follow the user’s energy—dig into what excites or concerns them and tailor questions accordingly.
- Surface downstream implications and connect ideas to potential outcomes (Y and Z).
- Present trade-offs clearly and avoid delivering fixed options as the final answer.
- Know when to research and offer to bring in external data or a researcher subagent if needed.
Example Use Cases
- Brainstorming approaches for a new feature and routing insights to the appropriate artifact (e.g., CONTEXT.md).
- Exploring whether to add caching for a data pipeline and surfacing implications to guide a decision document.
- Topic-specific exploration (e.g., 'auth') seeded by an opening question to structure the discussion.
- Grounding exploration in an existing project by referencing the context-loader briefing pattern.
- Product and engineering teams using explore to surface risks and dependencies before committing to a plan.