jpskill.com
💬 コミュニケーション コミュニティ

plan-approval

Claude Code Waypoint Pluginで、AIが行う複雑な変更計画をユーザーが承認することで、ミスを防ぎ、変更履歴を記録し、承認・否認された計画から学習することで、AIアクションをより適切にコントロールするSkill。

📜 元の英語説明(参考)

Plan-approval workflow patterns for user control over AI actions in Claude Code Waypoint Plugin. Use when planning complex changes, need user approval before execution, want to prevent mistakes, or need to document proposed changes. Covers plan creation, approval checkpoints, plan deviation tracking, revision management, and learning from approved/rejected plans.

🇯🇵 日本人クリエイター向け解説

一言でいうと

Claude Code Waypoint Pluginで、AIが行う複雑な変更計画をユーザーが承認することで、ミスを防ぎ、変更履歴を記録し、承認・否認された計画から学習することで、AIアクションをより適切にコントロールするSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o plan-approval.zip https://jpskill.com/download/18833.zip && unzip -o plan-approval.zip && rm plan-approval.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/18833.zip -OutFile "$d\plan-approval.zip"; Expand-Archive "$d\plan-approval.zip" -DestinationPath $d -Force; ri "$d\plan-approval.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して plan-approval.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → plan-approval フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] plan-approval

計画承認スキル

目的

複雑な変更やリスクの高い変更に対して明示的な承認を求めることで、AI のアクションに対するユーザーの制御を可能にし、間違いを防ぎ、ユーザーの意図との整合性を確保します。

このスキルを使用するタイミング

以下の内容に言及すると、自動的にアクティブになります。

  • 計画の作成またはレビュー
  • 承認または確認が必要
  • 提案された変更またはアプローチ
  • 実行前に計画を確認したい
  • 複雑な操作またはリスクの高い操作
  • ユーザーの承認が必要

問題点: ユーザー制御がない

計画承認がない場合:

  • ❌ AI が直接実装に進む
  • ❌ アプローチをレビューする機会がない
  • ❌ 間違いの取り消しに費用がかかる
  • ❌ ユーザーが意思決定プロセスから取り残される
  • ❌ 却下から学習できない

計画承認がある場合:

  • ✅ ユーザーは実行前にレビューする
  • ✅ アプローチを修正または却下できる
  • ✅ コストのかかる間違いを防ぐ
  • ✅ ユーザーが制御を維持する
  • ✅ AI がフィードバックから学習する

核となる原則

1. ユーザーが常に制御する

以下の場合は、承認なしに決して実行しないでください:

  • データベーススキーマの変更
  • 破壊的な API の変更
  • 依存関係の更新
  • アーキテクチャのリファクタリング
  • ファイルの削除
  • デプロイアクション

2. 計画は詳細である

良い計画には以下が含まれます:

  • 何が行われるか(特定のファイル/変更)
  • なぜこのアプローチなのか(根拠)
  • どのような代替案が検討されたか
  • どのようなリスクが存在するか
  • どのような影響があるか
  • どのくらいの時間がかかるか

3. 承認は明示的である

明確なユーザー応答を要求します:

  • ✅ 「承認」、「はい」、「続行」、「問題ない」
  • ❌ 沈黙、曖昧な応答、「たぶん」
  • ⚠️ 「修正: [変更内容]」は計画の改訂をトリガーします

4. フィードバックからの学習

承認済み/却下済みの計画を追跡します:

  • 承認されたアプローチを保存する(このようなことをもっと行う)
  • 却下されたアプローチを保存する(今後は避ける)
  • 時間の経過とともにユーザーの好みを学習する

承認を要求するタイミング

常に承認を要求する

データベースの変更:

  • スキーマ移行
  • RLS ポリシーの変更
  • データ移行
  • インデックスの追加

破壊的な変更:

  • API シグネチャの変更
  • 関数シグネチャの変更
  • コンポーネントプロパティの変更

アーキテクチャの変更:

  • 新しい依存関係
  • フレームワークの変更
  • 状態管理アプローチ
  • ルーティング構造

リスクの高い操作:

  • ファイルの削除
  • 一括更新
  • 本番環境へのデプロイ

オプションの承認

⚠️ 複雑な機能(影響を受けるファイルが 5 つ以上) ⚠️ リファクタリング(複数のコンポーネント) ⚠️ パフォーマンス最適化(キャッシュ戦略)

承認不要

簡単な変更:

  • バグ修正(10 行未満)
  • ドキュメントの更新
  • コードのフォーマット
  • マイナーな UI の調整

経験則: ユーザーが「待って、それは違う!」と言う可能性がある場合は、承認を要求してください。


計画の構造

最小限の計画テンプレート

# [機能/変更名]

## 概要
[1~2文の概要]

## 変更内容
- ファイル 1: [変更内容]
- ファイル 2: [変更内容]
- データベース: [移行があれば]
- 依存関係: [新しいパッケージがあれば]

## なぜこのアプローチなのか
[選択したアプローチの根拠]

## リスク
- リスク 1: [説明 + 軽減策]
- リスク 2: [説明 + 軽減策]

## 見積もり時間
[実装にかかる時間]

---
**続行するには承認してください**、または修正を返信してください

包括的な計画テンプレート

# [機能/変更名]

## 概要
[変更とその目的の2〜3文の概要]

## 要件
- [ ] 要件 1
- [ ] 要件 2
- [ ] 要件 3

## 提案されたアプローチ

### アーキテクチャ
[高レベルのアーキテクチャの説明]

### 実装手順
1. **ステップ 1**: [説明]
   - ファイル: [リスト]
   - 変更点: [簡単な説明]
   - リスク: [あれば]

2. **ステップ 2**: [説明]
   - ファイル: [リスト]
   - 変更点: [簡単な説明]
   - リスク: [あれば]

[すべてのステップについて続行...]

### 作成するファイル (3)
1. `path/to/file1.ts` - [目的]
2. `path/to/file2.ts` - [目的]
3. `path/to/file3.ts` - [目的]

### 変更するファイル (2)
1. `path/to/existing1.ts` - [変更内容]
2. `path/to/existing2.ts` - [変更内容]

### データベースの変更
**移行**: `supabase/migrations/xxx_add_feature.sql`
- テーブルの追加: `feature_table`
- カラムの追加: `users.feature_flag`
- RLS ポリシーの追加: `feature_access_policy`

### 依存関係
**新規**:
- package-name@^1.0.0 (目的: [理由])

**更新**:
- existing-package: 1.0.0 → 2.0.0 (理由: [理由])

## 検討された代替案

### 代替案 1: [名前]
**アプローチ**: [説明]
**長所**: [利点]
**短所**: [欠点]
**採用しなかった理由**: [理由]

### 代替案 2: [名前]
**アプローチ**: [説明]
**長所**: [利点]
**短所**: [欠点]
**採用しなかった理由**: [理由]

## リスクと軽減策

| リスク | 可能性 | 影響 | 軽減策 |
|------|-----------|--------|------------|
| [リスク 1] | 中 | 高 | [防止/対処方法] |
| [リスク 2] | 低 | 中 | [防止/対処方法] |

## 破壊的変更

⚠️ **API の変更**:
- `oldFunction()` → `newFunction()` シグネチャが変更されました
- 移行パス: [更新方法]

⚠️ **データベースの変更**:
- テーブル `old_name` が `new_name` に名前変更されました
- 移行スクリプト: [パス]

## テスト戦略
- [ ] [コンポーネント] の単体テスト
- [ ] [フロー] の統合テスト
- [ ] 手動テスト: [シナリオ]

## ロールバック計画
これが失敗した場合:
1. [元に戻す手順]
2. [復元する手順]
3. [必要に応じてデータ復旧]

## 見積もり時間
- 実装: [X 時間]
- テスト: [Y 時間]
- **合計**: [Z 時間]

---

## 承認

**以下で返信してください**:
- `approve` - この計画で続行する
- `reject` - キャンセルし、続行しない
- `modify: [あなたの変更内容]` - まず計画を調整する

承認ワークフロー

ステップ 1: 計画の生成

ユーザー: 「Stripe 決済連携を追加して」

Claude:
「まず Stripe 連携の計画を作成します。

[テンプレートを使用して詳細な計画を生成]

上記の計画を確認してください。返信してください:
- 続行する場合は 'approve'
- キャンセルする場合は 'reject'
- 調整する場合は 'modify: [変更内容]'
」

ステップ 2: 明示的な承認を待つ

有効な承認:

  • "approve"
  • "yes, proceed"
  • "looks good"
  • "go ahead"
  • "lgtm" (looks good to me)

修正:

  • "modify: use Stripe Checkout instead of Elements"
  • "change: store payment methods in Supabase"
  • "add: webhook handling"

却下:

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Plan-Approval Skill

Purpose

Enable user control over AI actions by requiring explicit approval for complex or risky changes, preventing mistakes and ensuring alignment with user intent.

When to Use This Skill

Automatically activates when you mention:

  • Creating or reviewing plans
  • Approval or confirmation needed
  • Proposed changes or approach
  • Want to see plan before execution
  • Complex or risky operations
  • Need user sign-off

The Problem: No User Control

Without plan approval:

  • ❌ AI jumps straight to implementation
  • ❌ No chance to review approach
  • ❌ Mistakes expensive to undo
  • ❌ User left out of decision process
  • ❌ No learning from rejections

With plan approval:

  • ✅ User reviews before execution
  • ✅ Can modify or reject approach
  • ✅ Prevents costly mistakes
  • ✅ User maintains control
  • ✅ AI learns from feedback

Core Principles

1. User is Always in Control

Never execute without approval for:

  • Database schema changes
  • Breaking API changes
  • Dependency updates
  • Architecture refactors
  • File deletions
  • Deployment actions

2. Plans are Detailed

Good plans include:

  • What will be done (specific files/changes)
  • Why this approach (rationale)
  • What alternatives were considered
  • What risks exist
  • What the impact is
  • How long it will take

3. Approval is Explicit

Require clear user response:

  • ✅ "approve", "yes", "proceed", "looks good"
  • ❌ Silence, vague response, "maybe"
  • ⚠️ "modify: [changes]" triggers plan revision

4. Learning from Feedback

Track approved/rejected plans:

  • Store approved approaches (do more like this)
  • Store rejected approaches (avoid in future)
  • Learn user preferences over time

When to Require Approval

Always Require Approval

Database changes:

  • Schema migrations
  • RLS policy changes
  • Data migrations
  • Index additions

Breaking changes:

  • API signature changes
  • Function signature changes
  • Component prop changes

Architecture changes:

  • New dependencies
  • Framework changes
  • State management approach
  • Routing structure

Risky operations:

  • File deletions
  • Bulk updates
  • Production deployments

Optional Approval

⚠️ Complex features (> 5 files affected) ⚠️ Refactoring (multiple components) ⚠️ Performance optimization (cache strategies)

No Approval Needed

Simple changes:

  • Bug fixes (< 10 lines)
  • Documentation updates
  • Code formatting
  • Minor UI tweaks

Rule of Thumb: If user might say "wait, not like that!", require approval.


Plan Structure

Minimal Plan Template

# [Feature/Change Name]

## Summary
[1-2 sentence overview]

## What Will Change
- File 1: [what changes]
- File 2: [what changes]
- Database: [migrations if any]
- Dependencies: [new packages if any]

## Why This Approach
[Rationale for chosen approach]

## Risks
- Risk 1: [description + mitigation]
- Risk 2: [description + mitigation]

## Estimated Time
[How long to implement]

---
**Approve to proceed**, or reply with modifications

Comprehensive Plan Template

# [Feature/Change Name]

## Summary
[2-3 sentence overview of the change and its purpose]

## Requirements
- [ ] Requirement 1
- [ ] Requirement 2
- [ ] Requirement 3

## Proposed Approach

### Architecture
[High-level architecture description]

### Implementation Steps
1. **Step 1**: [Description]
   - Files: [list]
   - Changes: [brief description]
   - Risk: [if any]

2. **Step 2**: [Description]
   - Files: [list]
   - Changes: [brief description]
   - Risk: [if any]

[Continue for all steps...]

### Files to Create (3)
1. `path/to/file1.ts` - [Purpose]
2. `path/to/file2.ts` - [Purpose]
3. `path/to/file3.ts` - [Purpose]

### Files to Modify (2)
1. `path/to/existing1.ts` - [What will change]
2. `path/to/existing2.ts` - [What will change]

### Database Changes
**Migration**: `supabase/migrations/xxx_add_feature.sql`
- Add table: `feature_table`
- Add column: `users.feature_flag`
- Add RLS policy: `feature_access_policy`

### Dependencies
**New**:
- package-name@^1.0.0 (Purpose: [why])

**Updates**:
- existing-package: 1.0.0 → 2.0.0 (Reason: [why])

## Alternatives Considered

### Alternative 1: [Name]
**Approach**: [Description]
**Pros**: [Benefits]
**Cons**: [Drawbacks]
**Why not chosen**: [Reason]

### Alternative 2: [Name]
**Approach**: [Description]
**Pros**: [Benefits]
**Cons**: [Drawbacks]
**Why not chosen**: [Reason]

## Risks & Mitigations

| Risk | Likelihood | Impact | Mitigation |
|------|-----------|--------|------------|
| [Risk 1] | Medium | High | [How to prevent/handle] |
| [Risk 2] | Low | Medium | [How to prevent/handle] |

## Breaking Changes

⚠️ **API Changes**:
- `oldFunction()` → `newFunction()` signature changed
- Migration path: [How to update]

⚠️ **Database Changes**:
- Table `old_name` renamed to `new_name`
- Migration script: [Path]

## Testing Strategy
- [ ] Unit tests for [components]
- [ ] Integration tests for [flows]
- [ ] Manual testing: [scenarios]

## Rollback Plan
If this fails:
1. [Step to revert]
2. [Step to restore]
3. [Data recovery if needed]

## Estimated Time
- Implementation: [X hours]
- Testing: [Y hours]
- **Total**: [Z hours]

---

## Approval

**Reply with**:
- `approve` - Proceed with this plan
- `reject` - Cancel, don't proceed
- `modify: [your changes]` - Adjust plan first

Approval Workflow

Step 1: Generate Plan

User: "Add Stripe payment integration"

Claude:
"I'll create a plan for Stripe integration first.

[Generates detailed plan using template]

Review the plan above. Reply:
- 'approve' to proceed
- 'reject' to cancel
- 'modify: [changes]' to adjust
"

Step 2: Wait for Explicit Approval

Valid approvals:

  • "approve"
  • "yes, proceed"
  • "looks good"
  • "go ahead"
  • "lgtm" (looks good to me)

Modifications:

  • "modify: use Stripe Checkout instead of Elements"
  • "change: store payment methods in Supabase"
  • "add: webhook handling"

Rejections:

  • "reject"
  • "no"
  • "cancel"
  • "let's do something different"

Step 3: Execute or Revise

If approved:

  1. Save plan to .claude/memory/plans/approved/
  2. Execute implementation
  3. Track progress in dev docs
  4. Mark complete when done

If modified:

  1. Update plan with user's changes
  2. Re-present revised plan
  3. Wait for approval again

If rejected:

  1. Save to .claude/memory/plans/rejected/ with reason
  2. Learn from rejection
  3. Don't proceed

Step 4: Track Execution

## Plan Execution Status

**Plan ID**: stripe-integration-2025-01-15
**Status**: In Progress
**Approved**: 2025-01-15 10:00
**Started**: 2025-01-15 10:05

**Progress**:
- [x] Step 1: Install Stripe SDK
- [x] Step 2: Create Stripe client
- [ ] Step 3: Implement checkout flow (IN PROGRESS)
- [ ] Step 4: Add webhook handler
- [ ] Step 5: Test payment flow

**Current**: Implementing checkout flow in app/api/checkout/route.ts
**Next**: Add webhook handler for payment events

Plan Storage

Directory Structure

.claude/memory/plans/
├── proposed/                    # Plans awaiting approval
│   └── stripe-integration-2025-01-15.json
├── approved/                   # Approved plans
│   └── stripe-integration-2025-01-15.json
├── rejected/                   # Rejected plans (learn from these)
│   └── alternative-approach-2025-01-14.json
└── completed/                  # Completed implementations
    └── stripe-integration-2025-01-15.json

Plan File Schema

{
  "plan_id": "stripe-integration-2025-01-15",
  "created": "2025-01-15T10:00:00Z",
  "status": "approved" | "proposed" | "rejected" | "in_progress" | "completed",
  "summary": "Add Stripe payment integration for subscriptions",
  "approved_at": "2025-01-15T10:05:00Z",
  "started_at": "2025-01-15T10:10:00Z",
  "completed_at": null,
  "user_modifications": [
    "Use Stripe Checkout instead of Elements",
    "Store payment methods in Supabase"
  ],
  "files_to_create": [
    "lib/stripe/client.ts",
    "app/api/checkout/route.ts"
  ],
  "files_to_modify": [
    "package.json",
    "lib/supabase/schema.sql"
  ],
  "risks": [
    "Webhook reliability",
    "Payment state synchronization"
  ],
  "estimated_hours": 4,
  "actual_hours": null,
  "outcome": null,
  "lessons_learned": []
}

Learning from Plans

Track Approval Patterns

{
  "approval_patterns": {
    "stripe_payments": {
      "preferred_approach": "Stripe Checkout (not Elements)",
      "storage": "Supabase tables",
      "reason": "User approved this twice, rejected Elements once",
      "confidence": "high"
    },
    "database_changes": {
      "requires_approval": true,
      "wants_rollback_plan": true,
      "prefers_separate_migration_file": true,
      "confidence": "high"
    }
  }
}

Apply Learnings

Future similar requests:

User: "Add subscription billing"

Claude:
"Based on previous approvals, I'll plan to use:
- Stripe Checkout (you preferred this over Elements)
- Supabase tables for subscription state
- Separate webhook handler

[Presents plan following learned preferences]

Track Rejections

{
  "rejections": [
    {
      "plan_id": "complex-state-management-2025-01-10",
      "reason": "Too complex, prefer simpler approach",
      "rejected_approach": "Redux Toolkit",
      "preferred_instead": "React Context",
      "lesson": "User prefers simpler solutions when possible"
    }
  ]
}

Plan Deviations

When Implementation Differs from Plan

Acceptable deviations:

  • Minor implementation details
  • Better solution discovered
  • Library API changed

Require new approval:

  • Different architecture approach
  • More files affected than planned
  • Additional dependencies
  • Higher risk than estimated

Handling Deviations

User: "Continue with Stripe integration"

Claude:
"⚠️ PLAN DEVIATION DETECTED

**Original plan**: Use Stripe Elements
**Current need**: Stripe Checkout is better for our use case

**Reason**: Elements requires more frontend work, Checkout is simpler

**Impact**:
- Different files affected
- Simpler implementation
- Less custom UI needed

**Do you approve this deviation?**
- 'yes' - Proceed with Checkout
- 'no' - Stick to original plan
- 'revise' - Create new plan
"

Commands

Provide these commands:

# Create plan
/create-plan [feature-name]       # Generate plan for approval

# Review plans
/show-plans                       # Show all plans
/show-plan [plan-id]              # Show specific plan

# Approve/reject
/approve [plan-id]                # Approve a plan
/reject [plan-id]                 # Reject a plan

# Track progress
/plan-status [plan-id]            # Show execution progress

# History
/approved-plans                   # Show approved plans
/rejected-plans                   # Show rejected (learn from these)

Integration with Other Skills

With memory-management

memory-management stores long-term preferences. plan-approval handles one-time decisions.

Example:

  • Memory: "User always prefers TypeScript" (permanent)
  • Plan: "Use Stripe Checkout for payments" (this feature)

With context-persistence

context-persistence tracks implementation progress. plan-approval handles pre-implementation planning.

Workflow:

  1. Plan approval: Generate and approve plan
  2. Context persistence: Track implementation in dev docs
  3. Memory: Store outcome and learnings

Best Practices

DO ✅

  1. Present clear, detailed plans
  2. Wait for explicit approval
  3. Track plan execution progress
  4. Learn from approvals and rejections
  5. Notify user of deviations
  6. Store plans for future reference
  7. Include rollback strategy for risky changes

DON'T ❌

  1. Don't skip approval for complex changes
  2. Don't assume silence means approval
  3. Don't deviate significantly without asking
  4. Don't forget to track approved plans
  5. Don't make plans too vague
  6. Don't proceed if user is uncertain

Example: Complete Plan-Approval Flow

User Request

User: "Add Stripe subscription billing to the app"

Plan Generation

Claude: "I'll create a detailed plan for Stripe subscriptions.

# Stripe Subscription Billing Plan

## Summary
Add Stripe subscription billing with monthly/yearly plans, customer portal, and webhook handling.

## What Will Change

### Files to Create (5)
1. `lib/stripe/client.ts` - Stripe client initialization
2. `lib/stripe/subscriptions.ts` - Subscription management
3. `app/api/stripe/webhook/route.ts` - Webhook handler
4. `app/api/checkout/route.ts` - Checkout session creation
5. `app/pricing/page.tsx` - Pricing page

### Files to Modify (3)
1. `package.json` - Add stripe package
2. `.env.example` - Add Stripe keys
3. `lib/supabase/schema.sql` - Add subscriptions table

### Database Changes
**Migration**: `supabase/migrations/20250115_subscriptions.sql`
- Table: `subscriptions` (user_id, stripe_subscription_id, status, plan_id)
- Table: `subscription_plans` (name, price, interval)
- RLS policies for subscription access

## Why This Approach
- Stripe Checkout: Hosted, PCI-compliant, less frontend work
- Webhooks: Reliable payment event handling
- Supabase storage: Sync subscription state with user data

## Alternatives Considered
- **Stripe Elements**: More control but more work. Rejected: Overkill for MVP
- **Manual billing**: Can't scale. Rejected: Need automation

## Risks
- ⚠️ Webhook reliability: Mitigate with retry logic + monitoring
- ⚠️ State sync: Mitigate with idempotent webhook handlers

## Estimated Time
- Implementation: 3 hours
- Testing: 1 hour
- **Total**: 4 hours

---

**Do you approve this plan?**
Reply: 'approve', 'modify: [changes]', or 'reject'

User Approval

User: "approve"

Execution

Claude: "✅ Plan approved. Starting implementation.

Saving plan to: .claude/memory/plans/approved/stripe-subscriptions-2025-01-15.json

Creating dev docs: /create-plan stripe-subscriptions

Starting with Step 1: Install Stripe SDK..."

[Proceeds with implementation while tracking progress]

Completion

Claude: "✅ Stripe subscription billing complete!

**Completed**:
- ✅ All 5 files created
- ✅ Database migration applied
- ✅ Webhooks tested with Stripe CLI
- ✅ Checkout flow working

**Time**: 3.5 hours (30 min under estimate)

Marking plan as completed.
Storing lessons learned:
- Stripe Checkout works well for subscriptions
- Webhook testing critical (caught 2 bugs)

Summary

Plan-approval workflow enables:

  1. ✅ User control over AI actions
  2. ✅ Prevention of costly mistakes
  3. �� Clear communication of approach
  4. ✅ Learning from user feedback
  5. ✅ Transparent decision making

Key steps:

  1. Generate detailed plan
  2. Wait for explicit approval
  3. Execute or revise based on feedback
  4. Track progress
  5. Learn from outcome

Storage: .claude/memory/plans/ with status tracking

Commands: /create-plan, /approve, /reject, /show-plans

Rule: Always require approval for complex, risky, or breaking changes!

Use this skill to ensure Claude Code never acts without your explicit permission for important changes.