# Plan Do Check Act

> PDCA workflow automation with session binding and progress recovery. Requires Python 3.6 and Git (optional).

- Skill: `lord1egypt/plan-do-check-act` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lord1egypt/plan-do-check-act`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lord1egypt/plan-do-check-act/raw
- Safety review: pending (external: skill-scanner PASS, skillspector CAUTION)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: Lord1Egypt (https://skillmd.com/u/lord1egypt)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/lord1egypt/plan-do-check-act

---


# Plan-Do-Check-Act Skill

This skill implements the PDCA (Plan-Do-Check-Act) workflow to ensure tasks are systematically planned and executed.

## Requirements

- **Python 3.6+** - Required for all scripts
- **Git** - **Optional** - Only used for progress tracking. PDCA works perfectly without Git - it will use file modification times instead.

## Setup Guide (First Time)

After installing, run the setup wizard:

```bash
# Run interactive setup
python3 scripts/setup.py
```

The wizard will:
1. Check Python and Git dependencies
2. Create workspace directory (default: `~/pdca-workspace`)
3. Create a test plan
4. Optionally initialize Git for progress tracking
5. Show next steps

### Manual Setup

If you prefer manual setup:

```bash
# 1. Create workspace directory
mkdir -p ~/pdca-workspace

# 2. Create a test plan
cd ~/pdca-workspace
manage_plan.py create "My First Plan" "Task 1" "Task 2" "Task 3"

# 3. Verify it works
manage_plan.py check plan.md

# 4. (Optional) Set up git for progress tracking
git init
```

## Security Notes

- **Workspace Scope:** Only operates on `plan*.md` files in the configured workspace directory
- **Destructive Operations:** `cleanup` command deletes archived files older than specified days (default 7)
- **User Confirmation:** Archive operation prompts for confirmation if plan is not completed
- **Dry Run:** Use `cleanup --dry-run` to preview before deleting
- **Autonomous Invocation:** Should require user confirmation before cleanup/archive operations

---

## Core Process

### 1. Plan
When receiving a user task, create `plan.md`:
- Break down the task into executable subtasks
- Record the session ID
- Mark priorities and dependencies

### 2. Do
Execute tasks according to plan.md:
- Check off each completed task `[x]`
- Mark in-progress tasks as `[>]`
- Record issues during execution

### 3. Check
After all tasks are completed:
- Check for any missed items
- Verify output meets expectations
- Identify areas for improvement

### 4. Act
Based on check results:
- Fix identified issues
- Update plan.md with learnings
- Archive or iterate

---

## plan.md Template

```markdown
# Task Plan: [Task Name]

**Session:** discord:1488795270769676318
**Created:** YYYY-MM-DD HH:MM
**Status:** IN_PROGRESS | COMPLETED | PAUSED

## Current Task

> Task 3 - Implement Login API (in progress)

## Checklist

- [x] Task 1 - Database Design
- [x] Task 2 - User Model Creation
- [>] Task 3 - Implement Login API (in progress)
- [ ] Task 4 - Implement Registration API
- [ ] Task 5 - Unit Testing

## Notes

Records during execution...

## Check Results

Fill in after completion...
```

---

## Trigger Scenarios

### Core Logic: Step Analysis

After receiving a task, quickly analyze **how many steps are needed**:

**1-2 steps** → Execute directly, no plan
- "Rename a file"
- "Delete that test file"

**3-5 steps** → Optional plan (ask user)
- "Help me build a login feature"

**5+ steps** → Auto trigger PDCA
- "Build a complete user system with registration and login"
- "Refactor this project from React to Vue"

### Step Analysis Dimensions

| Dimension | 1 step | 2-3 steps | 5+ steps |
|-----------|--------|-----------|----------|
| **File Changes** | Single file | 2-3 files | Multiple modules/dirs |
| **Dependencies** | None | Simple | Multi-layer/sequential |
| **Tech Stack** | Single tech | 2 techs | Full-stack/multi-service |
| **Testing** | No testing | Simple validation | Full test suite |
| **Deploy/Config** | No deploy | Local run | Deploy + config + docs |

### Keyword Triggers

Trigger regardless of step count when user explicitly requests:
- "break down", "decompose", "plan", "checklist"
- "plan", "checklist", "todo", "track"

---

## Session Binding

### plan.md Records Session ID

```markdown
**Session:** discord:1488795270769676318
```

### Categorized Display After Wake

```
Uncompleted plans for current session:
1. plan.md - User System Development (2/5)

Uncompleted plans for other sessions:
2. plan-blog.md - Blog Setup (1/3) ← telegram:123456
```

---

## Interruption Recovery

### Two Interruption Scenarios

| Scenario | Handling |
|----------|----------|
| **Unexpected** (network down, crash) | Check file modifications within 10 minutes |
| **Manual Pause** ("pause for now") | Use `PAUSED` status explicitly |

### Progress Inference (Active Check)

1. **Check git status** - Uncommitted changes
2. **Check file modification time** - Files within 10 minutes
3. **Compare task description** - Keyword matching
4. **Identify task type** - Code/Test/Deploy/Docs/General
5. **Ask user confirmation** - Final confirmation

### Recovery Flow

```
Wake → on-start → Read plan.md → Check files within 10 min
                                    ↓
                    "login_api.py modified 3 min ago, continue?"
```

---

## Consumption Mechanism

### Status Flow

```
CREATED → IN_PROGRESS → PAUSED ↔ RESUMED → COMPLETED → ARCHIVED
```

### Execution Rules

- Consume one task at a time
- Check off immediately upon completion `[x]`
- Skip and record if blocked

### Concurrency Control

- Only one active plan at a time
- When new task arrives: if incomplete plan exists → ask "Finish previous or create new?"

---

## Destruction Mechanism

### Archive Strategy

| Status | Retention | Action |
|--------|-----------|--------|
| **COMPLETED** | 7 days | Move to `archive/plan-YYYY-MM-DD-taskname.md` |
| **PAUSED** | 30 days | Ask user to continue or delete |
| **STALE** (no update >14 days) | Immediate | Mark as `ABANDONED`, wait for confirmation |

### Cleanup Commands

```bash
# Archive completed
manage_plan.py archive

# Cleanup expired files (>7 days)
manage_plan.py cleanup --days 7

# List all plans
manage_plan.py list
```

---

## Usage

### Agent Workflow

### Trigger Conditions

**Automatically trigger PDCA when user:**
- Asks about incomplete tasks: "What's not done?", "What's pending?", "Any unfinished tasks?"
- Asks about progress: "How's it going?", "Progress check", "What's the status?"
- Asks about the plan: "What's the plan?", "Show me the plan"
- Submits a complex task (5+ steps)
- Explicitly requests: "break down", "create a plan", "make a checklist"

### Plan Phase
1. Analyze steps with `analyze_steps.py`
2. If 5+ steps → create plan.md
3. **Output plan content to user**

### Do Phase
1. Execute tasks one by one
2. After each task → update plan.md
3. **Report progress to user**

**Example:**
```
「✓ Task 1 complete (Database Design)
→ Starting Task 2 (User Model Creation)」
```

### Check Phase
1. When user asks "What's not done?" → run `manage_plan.py on-start`
2. Output incomplete plans with progress
3. **Example response:**
```
「You have 1 incomplete plan:

**User System Development** (2/5 complete)
✓ Database Design
✓ User Model Creation
○ Implement Login API (in progress)
○ Implement Registration API
○ Unit Testing

Next task: Implement Login API」
```

### Act Phase
1. Fix identified issues
2. Archive completed plans

### Create Plan

```bash
# Simple create
manage_plan.py create "User System" "Database Design" "User Model" "Login API"

# With session
manage_plan.py create "User System" "Task 1" "Task 2" \
  --session "discord:1488795270769676318"

# Specify output file
manage_plan.py create "Blog Setup" "Buy Domain" "Deploy" \
  --output plan-blog.md
```

### Update Status

```bash
# Complete tasks 1 and 2
manage_plan.py update plan.md --completed 0,1

# Mark current task (in progress)
manage_plan.py update plan.md --current 2
```

### Pause/Resume

```bash
# Pause
manage_plan.py pause plan.md --reason "Waiting for API response"

# Resume
manage_plan.py resume plan.md
```

### Session Start Check

```bash
# Check incomplete plans
manage_plan.py on-start . "discord:1488795270769676318"
```

### Progress Check

```bash
# Check current progress
manage_plan.py check plan.md

# Detailed progress check (with git and files)
python3 scripts/check_progress.py . plan.md
```

---

## Scripts

| Script | Function |
|--------|----------|
| `manage_plan.py` | Main management script (create/update/pause/resume/archive) |
| `check_progress.py` | Progress check (git + file modification + keyword matching) |
| `analyze_steps.py` | Step analysis (decide whether to plan) |
| `check_deps.py` | Dependency check |

---

## Configuration

Default workspace: `~/.openclaw/workspace/`
Plan files: `plan.md` or `plan-*.md`
Archive directory: `archive/`

**Security:**
- Only operates on `plan*.md` files in the workspace
- Does not modify non-plan files
- Archive/cleanup only affects `archive/` directory
- Use `--dry-run` to preview cleanup before deleting

