옵션

writing-plans

obra/superpowers obra/superpowers

사양서나 요구사항을 바탕으로, 작업 세분화, 파일 구조, 테스트 주도 개발 지침을 포함한 상세하고 단계별 구현 계획을 수립합니다.

...모든 것을 확장하십시오
7
업데이트 된 시간 2026년 9월 3일

글쓰기 계획

개요

엔지니어가 우리 코드베이스에 대한 배경 지식이 전혀 없고 취향도 의심스럽다고 가정하고 포괄적인 구현 계획을 작성하세요. 그들이 알아야 할 모든 것을 문서화하십시오: 각 작업마다 수정해야 할 파일, 코드, 확인해야 할 테스트 및 문서, 테스트 방법 등. 전체 계획을 소화가 쉬운 단위로 나누어 제공하세요. DRY. YAGNI. TDD. 빈번한 커밋.

그들이 숙련된 개발자이긴 하지만, 우리 툴셋이나 문제 도메인에 대해서는 거의 아무것도 모른다고 가정하십시오. 또한 그들이 훌륭한 테스트 설계에 대해 잘 알지 못한다고 가정하십시오.

시작 시 다음과 같이 알리세요: " writing-plans 스킬을 사용하여 구현 계획을 수립하고 있습니다."

배경: 격리된 워크트리에서 작업하는 경우, 실행 시점에 ‘superpowers:using-git-worktrees’ 스킬을 통해 워크트리가 생성되었어야 합니다.

계획서는 다음 위치에 저장합니다: docs/superpowers/plans/YYYY-MM-DD-.md

  • (계획 위치에 대한 사용자 기본 설정이 이 기본값보다 우선합니다)

범위 확인

사양서가 여러 개의 독립적인 하위 시스템을 다루는 경우, 브레인스토밍 단계에서 하위 프로젝트 사양서로 분할되었어야 합니다. 그렇지 않은 경우, 이를 하위 시스템별로 각각 하나의 계획으로 분리할 것을 제안하십시오. 각 계획은 그 자체로 작동하고 테스트 가능한 소프트웨어를 산출해야 합니다.

파일 구조

작업들을 정의하기 전에, 어떤 파일이 생성되거나 수정될지, 그리고 각 파일이 어떤 역할을 담당할지 미리 계획해야 합니다. 이 단계에서 분해에 대한 결정이 확정됩니다.

  • 경계가 명확하고 인터페이스가 잘 정의된 단위로 설계하십시오. 각 파일은 하나의 명확한 역할을 가져야 합니다.
  • 한 번에 전체 맥락을 파악할 수 있는 코드에 대해서는 더 잘 추론할 수 있으며, 파일이 특정 기능에 집중될수록 수정 작업의 신뢰성도 높아집니다. 너무 많은 기능을 수행하는 대형 파일보다는 작고 특정 기능에 집중된 파일을 선호하십시오.
  • 함께 변경되는 파일들은 함께 위치해야 합니다. 기술적 계층이 아니라 책임에 따라 분할하십시오.
  • 기존 코드베이스에서는 확립된 패턴을 따르십시오. 코드베이스에서 큰 파일을 사용하고 있다면 일방적으로 구조를 재구성하지 마십시오. 하지만 수정 중인 파일이 관리하기 어려울 정도로 커졌다면, 분할을 계획에 포함시키는 것이 합리적입니다.

이러한 구조는 작업 분할의 기준이 됩니다. 각 작업은 독립적으로도 타당한 의미를 갖는, 자체적으로 완결된 변경 사항을 산출해야 합니다.

작업의 적절한 규모 설정

작업은 자체 테스트 주기를 거치며, 새로운 검토자의 승인을 받을 가치가 있는 가장 작은 단위입니다. 작업 경계를 설정할 때는: 설정, 구성, 스캐폴딩 및 문서화 단계를 해당 결과물에 필요한 작업에 통합하고, 검토자가 인접한 작업은 승인하면서도 한 작업만 의미 있게 거부할 수 있는 경우에만 분할하십시오. 각 작업은 독립적으로 테스트 가능한 결과물로 마무리되어야 합니다.

한 입 크기의 작업 세분화

각 단계는 하나의 동작(2~5분)으로 구성됩니다:

  • "실패하는 테스트 작성" - 단계
  • "실행하여 실패하는지 확인" - 단계
  • "테스트가 통과되도록 최소한의 코드를 구현하기" - 단계
  • "테스트를 실행하여 통과하는지 확인" - 단계
  • "커밋" - 단계

계획 문서 헤더

모든 계획은 반드시 다음 헤더로 시작해야 합니다:

# [기능 이름] 구현 계획

> **주도적인 작업자용:** 필수 하위 기술: 이 계획을 작업별로 구현하려면 superpowers:subagent-driven-development (권장) 또는 superpowers:executing-plans를 사용하십시오. 단계는 추적을 위해 체크박스(`- [ ]`) 구문을 사용합니다.

**목표:** [이 계획이 무엇을 구축하는지 설명하는 한 문장]

**아키텍처:** [접근 방식에 대한 2~3문장]

**기술 스택:** [주요 기술/라이브러리]

## 전체적인 제약 조건

[사양서의 프로젝트 전반에 적용되는 요구 사항 — 최소 버전, 종속성 제한,
명명 및 문구 규칙, 플랫폼 요구 사항 — 각 항목당 한 줄씩, 정확한
값은 사양서에서 그대로 인용합니다. 모든 작업의 요구 사항에는 암묵적으로
이 섹션이 포함됩니다.]

---

작업 구조

### 작업 N: [컴포넌트 이름]

**파일:**
- 생성: `파일의 정확한 경로.py`
- 수정: `기존 파일의 정확한 경로/to/existing.py:123-145`
- 테스트: `테스트 디렉토리/정확한 경로/to/test.py`

**인터페이스:**
- 소비: [이 태스크가 이전 태스크에서 사용하는 것 — 정확한 시그니처]
- 산출물: [후속 태스크가 의존하는 요소 — 정확한 함수 이름, 매개변수
  및 반환 유형. 태스크 구현자는 자신의 태스크만 볼 수 있으므로, 이
  블록을 통해 인접한 태스크가 사용하는 이름과 유형을 파악합니다.]

- [ ] **1단계: 실패하는 테스트 작성**

```python
def test_specific_behavior():
    result = function(input)
    assert result == expected
```

- [ ] **2단계: 테스트를 실행하여 실패하는지 확인**

실행: `pytest tests/path/test.py::test_name -v`
예상 결과: "function not defined" 오류와 함께 FAIL

- [ ] **3단계: 최소한의 구현 작성**

```python
def function(input):
    return expected
```

- [ ] **4단계: 테스트를 실행하여 통과되는지 확인**

실행: `pytest tests/path/test.py::test_name -v`
예상 결과: PASS

- [ ] **5단계: 커밋**

```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: 특정 기능 추가"
```

자리 표시자 없음

모든 단계에는 엔지니어가 실제로 필요한 내용이 포함되어야 합니다. 다음은 계획 수립 시 피해야 할 사항입니다. 절대로 다음과 같이 작성하지 마십시오:

  • "TBD", "TODO", "나중에 구현", "세부 사항 채우기"
  • "적절한 오류 처리 추가" / "유효성 검사 추가" / "경계 사례 처리"
  • "위에 대한 테스트 작성" (실제 테스트 코드 없음)
  • "작업 N과 유사" (코드를 반복함 — 엔지니어가 작업 순서를 따르지 않고 읽을 수 있음)
  • 어떻게 해야 하는지 방법을 제시하지 않고 무엇을 해야 하는지만 설명하는 단계 (코드 단계에는 코드 블록이 필수입니다)
  • 어떤 작업에도 정의되지 않은 유형, 함수 또는 메서드에 대한 참조

기억할 점

  • 항상 정확한 파일 경로를 명시하십시오
  • 모든 단계에서 코드를 완성하세요 — 단계에서 코드를 변경하는 경우 해당 코드를 표시하세요
  • 예상 출력이 포함된 정확한 명령어
  • DRY, YAGNI, TDD, 잦은 커밋

자기 검토

전체 계획을 작성한 후, 새로운 시각으로 사양서를 살펴보고 계획이 사양서에 부합하는지 확인하십시오. 이는 하위 에이전트를 파견하는 것이 아니라, 본인이 직접 수행하는 체크리스트입니다.

1. 사양 커버리지: 사양의 각 섹션/요구 사항을 훑어보세요. 이를 구현하는 작업을 지목할 수 있나요? 누락된 부분이 있다면 나열하세요.

2. 플레이스홀더 점검: 계획서에서 위험 신호(위 “플레이스홀더 금지” 섹션에 언급된 패턴)를 찾아보세요. 이를 수정하세요.

3. 유형 일관성: 후반부 작업에서 사용한 유형, 메서드 시그니처, 속성 이름이 앞부분 작업에서 정의한 것과 일치합니까? 작업 3에서는 clearLayers() 라는 함수인데 작업 7에서는 clearFullLayers() 라고 되어 있다면 이는 버그입니다.

문제를 발견하면 바로 수정하십시오. 다시 검토할 필요는 없습니다. 수정하고 다음 단계로 넘어가면 됩니다. 해당되는 태스크가 없는 사양 요구 사항을 발견하면, 해당 태스크를 추가하십시오.

실행 인계

계획을 저장한 후, 실행 옵션을 제시하세요:

"계획이 완료되어 docs/superpowers/plans/.md에 저장되었습니다. 두 가지 실행 옵션이 있습니다:

1. 서브에이전트 주도 방식 (권장) - 작업마다 새로운 서브에이전트를 배정하고, 작업 사이에 검토하며, 신속하게 반복합니다.

2. 인라인 실행 — executing-plans를 사용하여 이 세션에서 작업을 실행하며, 체크포인트를 활용한 일괄 실행

어떤 방식을 선택하시겠습니까?"

서브에이전트 주도 방식을 선택한 경우:

  • 필수 하위 스킬: superpowers:subagent-driven-development 사용
  • 작업당 새로운 서브에이전트 + 2단계 검토

'인라인 실행'을 선택한 경우:

  • 필수 하위 스킬: 초능력 사용:계획-실행
  • 검토를 위한 체크포인트가 포함된 일괄 실행
GitHub에서 보기
---
name: writing-plans
description: Creates detailed, step-by-step implementation plans from specs or requirements, with task decomposition, file structure, and test-driven development instructions.
---

# Writing Plans

## Overview

Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.

Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.

**Announce at start:** "I'm using the writing-plans skill to create the implementation plan."

**Context:** If working in an isolated worktree, it should have been created via the `superpowers:using-git-worktrees` skill at execution time.

**Save plans to:** `docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md`
- (User preferences for plan location override this default)

## Scope Check

If the spec covers multiple independent subsystems, it should have been broken into sub-project specs during brainstorming. If it wasn't, suggest breaking this into separate plans — one per subsystem. Each plan should produce working, testable software on its own.

## File Structure

Before defining tasks, map out which files will be created or modified and what each one is responsible for. This is where decomposition decisions get locked in.

- Design units with clear boundaries and well-defined interfaces. Each file should have one clear responsibility.
- You reason best about code you can hold in context at once, and your edits are more reliable when files are focused. Prefer smaller, focused files over large ones that do too much.
- Files that change together should live together. Split by responsibility, not by technical layer.
- In existing codebases, follow established patterns. If the codebase uses large files, don't unilaterally restructure - but if a file you're modifying has grown unwieldy, including a split in the plan is reasonable.

This structure informs the task decomposition. Each task should produce self-contained changes that make sense independently.

## Task Right-Sizing

A task is the smallest unit that carries its own test cycle and is worth a
fresh reviewer's gate. When drawing task boundaries: fold setup,
configuration, scaffolding, and documentation steps into the task whose
deliverable needs them; split only where a reviewer could meaningfully
reject one task while approving its neighbor. Each task ends with an
independently testable deliverable.

## Bite-Sized Task Granularity

**Each step is one action (2-5 minutes):**
- "Write the failing test" - step
- "Run it to make sure it fails" - step
- "Implement the minimal code to make the test pass" - step
- "Run the tests and make sure they pass" - step
- "Commit" - step

## Plan Document Header

**Every plan MUST start with this header:**

```markdown
# [Feature Name] Implementation Plan

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** [One sentence describing what this builds]

**Architecture:** [2-3 sentences about approach]

**Tech Stack:** [Key technologies/libraries]

## Global Constraints

[The spec's project-wide requirements — version floors, dependency limits,
naming and copy rules, platform requirements — one line each, with exact
values copied verbatim from the spec. Every task's requirements implicitly
include this section.]

---
```

## Task Structure

````markdown
### Task N: [Component Name]

**Files:**
- Create: `exact/path/to/file.py`
- Modify: `exact/path/to/existing.py:123-145`
- Test: `tests/exact/path/to/test.py`

**Interfaces:**
- Consumes: [what this task uses from earlier tasks — exact signatures]
- Produces: [what later tasks rely on — exact function names, parameter
  and return types. A task's implementer sees only their own task; this
  block is how they learn the names and types neighboring tasks use.]

- [ ] **Step 1: Write the failing test**

```python
def test_specific_behavior():
    result = function(input)
    assert result == expected
```

- [ ] **Step 2: Run test to verify it fails**

Run: `pytest tests/path/test.py::test_name -v`
Expected: FAIL with "function not defined"

- [ ] **Step 3: Write minimal implementation**

```python
def function(input):
    return expected
```

- [ ] **Step 4: Run test to verify it passes**

Run: `pytest tests/path/test.py::test_name -v`
Expected: PASS

- [ ] **Step 5: Commit**

```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: add specific feature"
```
````

## No Placeholders

Every step must contain the actual content an engineer needs. These are **plan failures** — never write them:
- "TBD", "TODO", "implement later", "fill in details"
- "Add appropriate error handling" / "add validation" / "handle edge cases"
- "Write tests for the above" (without actual test code)
- "Similar to Task N" (repeat the code — the engineer may be reading tasks out of order)
- Steps that describe what to do without showing how (code blocks required for code steps)
- References to types, functions, or methods not defined in any task

## Remember
- Exact file paths always
- Complete code in every step — if a step changes code, show the code
- Exact commands with expected output
- DRY, YAGNI, TDD, frequent commits

## Self-Review

After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself — not a subagent dispatch.

**1. Spec coverage:** Skim each section/requirement in the spec. Can you point to a task that implements it? List any gaps.

**2. Placeholder scan:** Search your plan for red flags — any of the patterns from the "No Placeholders" section above. Fix them.

**3. Type consistency:** Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called `clearLayers()` in Task 3 but `clearFullLayers()` in Task 7 is a bug.

If you find issues, fix them inline. No need to re-review — just fix and move on. If you find a spec requirement with no task, add the task.

## Execution Handoff

After saving the plan, offer execution choice:

**"Plan complete and saved to `docs/superpowers/plans/<filename>.md`. Two execution options:**

**1. Subagent-Driven (recommended)** - I dispatch a fresh subagent per task, review between tasks, fast iteration

**2. Inline Execution** - Execute tasks in this session using executing-plans, batch execution with checkpoints

**Which approach?"**

**If Subagent-Driven chosen:**
- **REQUIRED SUB-SKILL:** Use superpowers:subagent-driven-development
- Fresh subagent per task + two-stage review

**If Inline Execution chosen:**
- **REQUIRED SUB-SKILL:** Use superpowers:executing-plans
- Batch execution with checkpoints for review

모든 파일

0개 파일

writing-plans 설치

스킬 파일을 다운로드하여 .claude/skills/ 디렉터리에 압축을 풀어주세요.

ZIP 다운로드

저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.

git clone https://github.com/obra/superpowers/tree/main/skills/writing-plans # Copy SKILL.md to your .claude/skills/ directory

복사 복사
빠른 설정: 스킬 폴더를 .claude/skills/로 복사하세요. Claude가 해당 스킬을 자동으로 감지하여 사용할 것입니다.
저장소 obra/superpowers

관련 스킬

notion-automation
업데이트 된 시간 2026년 6월 29일
airtable-automation
업데이트 된 시간 2026년 6월 29일
seo-programmatic
업데이트 된 시간 2026년 6월 29일
revops
업데이트 된 시간 2026년 6월 29일
OR