slice icon Context Slice

Plan Template

Plans use a specific format that combines structured frontmatter with readable content. This format enables the "Run Now" action button in Sauna.

Full Template

---
_action:
  label: "Run Now"
  prompt: "Execute this plan step by step. For each todo, complete the step described, then mentally mark it complete before moving to the next. Stop if you encounter a blocker and report it."
  isComplete: false
name: [Plan Title]
overview: [One-line summary of what this plan accomplishes]
todos:
  - id: step-1
    content: [First step description]
    status: pending
  - id: step-2
    content: [Second step description]
    status: pending
  - id: step-3
    content: [Third step description]
    status: pending
---

# Plan: [Title]

## Goal

[What success looks like in 1-2 sentences. Be specific and measurable.]

## Scope

**In scope:**
- [What's included]
- [Specific deliverables]

**Out of scope:**
- [What's explicitly excluded]
- [Future work deferred]

**Needs user action:**
- [Prerequisites the user must handle]
- [Decisions the user must make]

## Steps

### Step 1: [Step Title]

[Detailed description of what this step accomplishes and how to do it.]

**Success criteria:** [How to know this step is done]

### Step 2: [Step Title]

[Detailed description...]

**Success criteria:** [...]

### Step 3: [Step Title]

[Detailed description...]

**Success criteria:** [...]

## Success Criteria

The plan is complete when:
- [ ] [First criterion]
- [ ] [Second criterion]
- [ ] [Final deliverable exists]

## Notes

[Any additional context, assumptions, or warnings]

Frontmatter Fields

_action Block

The _action frontmatter creates the "Run Now" button in Sauna:

Field Purpose
label Button text shown to user
prompt Instructions for the agent when executing
isComplete Always false until execution finishes

Plan Metadata

Field Purpose
name Short title for the plan
overview One-line summary
todos Array of actionable steps

Todo Structure

Each todo has:

Field Purpose Values
id Unique identifier step-1, step-2, etc.
content What to do Clear, actionable description
status Current state pending, in_progress, completed, cancelled

Writing Good Steps

Actionable

Each step should be something the agent can actually do.

❌ Bad: "Improve the codebase"
✅ Good: "Add error handling to the fetchData function"

Verifiable

Each step should have clear success criteria.

❌ Bad: "Make it better"
✅ Good: "Reduce load time to under 2 seconds"

Independent (where possible)

Steps should minimize dependencies on each other.

❌ Bad: "Continue from step 2" (unclear what that means)
✅ Good: "Using the data from the previous step's output, generate the report"

Appropriately Sized

Not too big, not too small.

❌ Too big: "Build the entire feature"
❌ Too small: "Open the file"
✅ Right size: "Implement the authentication flow with login and logout"

Example Plan

---
_action:
  label: "Run Now"
  prompt: "Execute this plan step by step. For each todo, complete the step described, then mentally mark it complete before moving to the next."
  isComplete: false
name: Email Cleanup Plan
overview: Archive old newsletters and unsubscribe from inactive lists
todos:
  - id: step-1
    content: Search for newsletters older than 30 days
    status: pending
  - id: step-2
    content: Archive newsletters in bulk
    status: pending
  - id: step-3
    content: Identify inactive subscription sources
    status: pending
  - id: step-4
    content: Generate unsubscribe list for user review
    status: pending
---

# Plan: Email Cleanup

## Goal

Clean up inbox by archiving old newsletters and identifying subscriptions to cancel, reducing inbox clutter by 50%.

## Scope

**In scope:**
- Newsletter emails older than 30 days
- Identifying inactive subscription sources
- Bulk archive operation

**Out of scope:**
- Personal emails
- Work-related newsletters
- Automatic unsubscription (requires user action)

**Needs user action:**
- Review and confirm the unsubscribe list
- Manually unsubscribe from selected sources

## Steps

### Step 1: Search for Old Newsletters

Search Gmail for newsletter-type emails older than 30 days using labels and common newsletter patterns.

**Success criteria:** List of emails with counts by sender

### Step 2: Archive Newsletters

Bulk archive the identified newsletters.

**Success criteria:** Emails moved out of inbox

### Step 3: Identify Inactive Sources

Analyze newsletter sources to find ones with low open rates or no engagement.

**Success criteria:** Ranked list of subscription sources by engagement

### Step 4: Generate Unsubscribe List

Create a list of recommended unsubscriptions for user review.

**Success criteria:** Markdown file with sources and unsubscribe links

## Success Criteria

- [ ] Old newsletters archived
- [ ] Unsubscribe recommendations generated
- [ ] User has actionable list to reduce future clutter