Skip to content
Back to skills

Plan

ASecurity

Guided feature planning with iterative user input. Gathers requirements, validates assumptions against the codebase, proposes a solution, and optionally scaffolds or implements it. TRIGGER when: user wants to plan, design, architect, or think through a feature before coding. Keywords: "plan", "make a plan", "design", "architect", "think through", "figure out how to", "how should we", "what's the best way to". DO NOT TRIGGER when: user is asking a simple question, wants a direct code change, o...

  • 192 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added May 26, 2026
developmentpythonrustgobashdebuggingapiperformancedocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add propeller-heads/tycho-indexer --skill plan --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Plan?

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

Security grade badge for Plan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/propeller-heads-plan/badge)](https://www.skillsdirectory.com/skills/propeller-heads-plan)

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
---
allowed-tools: AskUserQuestion, Read, Glob, Grep, LSP, Agent, Write, Edit, Bash(mkdir *), Bash(cargo check *), Bash(maturin *), Bash(pytest *)
description: |
  Guided feature planning with iterative user input. Gathers requirements, validates assumptions against the codebase, proposes a solution, and optionally scaffolds or implements it.
  TRIGGER when: user wants to plan, design, architect, or think through a feature before coding. Keywords: "plan", "make a plan", "design", "architect", "think through", "figure out how to", "how should we", "what's the best way to".
  DO NOT TRIGGER when: user is asking a simple question, wants a direct code change, or is debugging an existing issue without needing a design phase.
user-invocable: true
arguments:
  - name: goal
    description: "Optional high-level goal to skip the first prompt. If not provided, the skill will ask."
    default: ""
---

# Feature Planning

Interactive planning workflow that gathers requirements, validates assumptions, and proposes a solution before any code
is written.

## Phase 1: Gather Requirements

Collect the plan proposal from the user. If the `goal` argument was provided, use it and skip the first question.

Ask the user the following questions **one at a time** using `AskUserQuestion`. After each answer, acknowledge it
briefly before asking the next question. **Stop and wait for the user's reply after each question.** Do not ask
multiple questions in one message.

1. **High-level goal** — "What is the high-level goal of this feature or change?"
2. **Essential requirements** — "What are the essential requirements? (things that must be true for this to be done)"
3. **Considerations** (optional) — "Anything specific to consider? (existing patterns, performance constraints,
   compatibility, etc. — say 'skip' if none)"
4. **Things to avoid** (optional) — "Anything to explicitly avoid? (approaches, dependencies, patterns, etc. — say '
   skip' if none)"

For questions 3-4, accept "skip" or "none" as valid answers and move on.

After collecting all answers, summarize the proposal back to the user in a compact format:

```
**Goal:** ...
**Must have:** ...
**Consider:** ...
**Avoid:** ...
```

Ask the user to confirm the proposal is correct before proceeding.

## Phase 2: Research and Assumptions

Read the codebase documentation to understand the problem space:

1. Read `.claude/CODEBASE.md` and any linked docs relevant to the goal.
2. Use LSP (`documentSymbol`, `goToDefinition`, `findReferences`, `workspaceSymbol`) for Rust/TS code exploration.
   Fall back to Glob/Grep/Read for docs, config files, and when LSP is unavailable.
3. Identify the modules, traits, and types involved.

Then list your **assumptions** — things you believe to be true based on your research that affect the solution design.
Present these to the user as a numbered list and ask them to confirm, correct, or add to them using `AskUserQuestion`
with options like "Confirmed", "Need corrections" (user types details), "Add more assumptions".

Example format:
> Based on my research, here are my assumptions:
> 1. This change affects `tycho-indexer/src/services/rpc.rs` and `tycho-common/src/dto.rs`
> 2. The `ExtractionGateway` trait doesn't need to change
> 3. ...
>
> Are these correct? Anything to add or fix?

Do not proceed until the user confirms.

## Phase 3: Propose Solution

With confirmed assumptions, propose a high-level solution. The proposal must include:

- **Approach** — 2-3 sentence summary of the solution
- **Files to modify** — list each file with a one-line description of the change
- **New files** (if any) — list each with purpose
- **Key design decisions** — any non-obvious choices and why

Present the proposal and ask the user to choose using `AskUserQuestion` (this is the one structured choice point):

1. **Accept and implement** — proceed to full implementation
2. **Accept and scaffold (auto-accept changes)** — create the structure with placeholder logic (Phase 4a)
3. **Reject** — user explains what's wrong, loop back to Phase 3

If rejected, incorporate the user's feedback, revise the proposal, and present again. If any different input is given,
process it and loop back to step 3.

## Phase 4a: Scaffold (if chosen)

Spawn a subagent using the Agent tool to perform the scaffolding. Pass it the full plan context (goal, requirements,
assumptions, proposed solution, and file list) so it has everything it needs.

**Subagent prompt must include these instructions:**

> You are scaffolding a feature. Create only structural changes — no business logic.
>
> Required changes:
> - New files with module declarations and imports
> - Empty or stub function/method signatures with `todo!()` bodies
> - New struct/enum definitions with fields
> - Trait implementations with `todo!()` bodies
> - Required `mod` declarations and `use` statements
> - Imports and calls to new scaffolded code, the user wants to see how it is connected to the existing codebase.
> - All structs and fields should be documented briefly so the user knows their intended purpose
> - Unit tests calling the public API of the new code with actual assertions based on user requirements. These tests
    should be market with #[ignore].
>
> Rules:
> - No business logic — use `todo!()` for function bodies
> - Add a brief comment above each `todo!()` describing what it should do
> - Make sure the scaffolded code is "connected", that it is called in controllers or factories.
> - After all changes, run `cargo check --workspace --all-features` to verify the code compiles
> - If `cargo check` fails, read the errors, fix them, and run `cargo check` again
> - Repeat until `cargo check` passes
> - Report back: files created/modified, and the final `cargo check` result

After the subagent completes, report the results to the user and tell them the scaffold is ready for review. Do NOT
proceed to implementation automatically.

## Phase 4b: Implement (if chosen)

1. Save the full plan to `.claude/plans/<name>.md` where `<name>` is a kebab-case slug derived from the goal.
   Include all gathered context: goal, requirements, assumptions, proposed solution, and files list.

2. Load the relevant knowledge documents for the implementation:
    - Rust: `.claude/knowledge/rust.md`
    - Python (tycho-client-py): `.claude/knowledge/python.md`

3. Implement the solution file by file. After completing all changes, run a quick validation:
    - `cargo check --workspace` for Rust changes
    - `maturin develop` + `pytest` for Python binding changes

4. Report what was implemented and any remaining work.

---

## Planning guidelines

- **No speculative features** — Don't add features, flags, or configuration unless actively needed.
- **No premature abstraction** — Don't create utilities until you've written the same code three times.
- **Clarity over cleverness** — Prefer explicit, readable code over dense one-liners.
- **Justify new dependencies** — Each dependency is attack surface and maintenance burden.
- **Finish the job** — Handle edge cases you can see. Clean up what you touched. Flag broken adjacent code. But don't
  invent new scope.

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.