skills/dojocodinglabs/plan-approval/SKILL.md
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.
npx skillsauth add aiskillstore/marketplace plan-approvalInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Enable user control over AI actions by requiring explicit approval for complex or risky changes, preventing mistakes and ensuring alignment with user intent.
Automatically activates when you mention:
Without plan approval:
With plan approval:
Never execute without approval for:
Good plans include:
Require clear user response:
Track approved/rejected plans:
✅ Database changes:
✅ Breaking changes:
✅ Architecture changes:
✅ Risky operations:
⚠️ Complex features (> 5 files affected) ⚠️ Refactoring (multiple components) ⚠️ Performance optimization (cache strategies)
❌ Simple changes:
Rule of Thumb: If user might say "wait, not like that!", require approval.
# [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
# [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
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
"
Valid approvals:
Modifications:
Rejections:
If approved:
.claude/memory/plans/approved/If modified:
If rejected:
.claude/memory/plans/rejected/ with reason## 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
.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_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": []
}
{
"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"
}
}
}
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]
{
"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"
}
]
}
Acceptable deviations:
Require new approval:
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
"
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)
memory-management stores long-term preferences. plan-approval handles one-time decisions.
Example:
context-persistence tracks implementation progress. plan-approval handles pre-implementation planning.
Workflow:
User: "Add Stripe subscription billing to the app"
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: "approve"
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]
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)
Plan-approval workflow enables:
Key steps:
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.
development
Apple Human Interface Guidelines for content display components. Use this skill when the user asks about charts component, collection view, image view, web view, color well, image well, activity view, lockup, data visualization, content display, displaying images, rendering web content, color pickers, or presenting collections of items in Apple apps. Also use when the user says how should I display charts, what's the best way to show images, should I use a web view, how do I build a grid of items, what component shows media, or how do I present a share sheet. Cross-references: hig-foundations for color/typography/accessibility, hig-patterns for data visualization patterns, hig-components-layout for structural containers, hig-platforms for platform-specific component behavior.
tools
Automate HelpDesk tasks via Rube MCP (Composio): list tickets, manage views, use canned responses, and configure custom fields. Always search tools first for current schemas.
testing
Expert Haskell engineer specializing in advanced type systems, pure functional design, and high-reliability software. Use PROACTIVELY for type-level programming, concurrency, and architecture guidance.
tools
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.