Plan-Apply-Unify Loop — Structured AI-assisted development for Claude Code. Quality over speed-for-speed's-sake.
# Add to your Claude Code skills
git clone https://github.com/ChristopherKahler/paulLast scanned: 5/4/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-04T06:42:10.815Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}Plan-Apply-Unify Loop — Structured AI-assisted development for Claude Code.
npx paul-framework
Works on Mac, Windows, and Linux.
"Quality over speed-for-speed's-sake. In-session context over subagent sprawl."
Why PAUL · Getting Started · The Loop · Commands · How It Works
I build with Claude Code every day. It's incredibly powerful — when you give it the right context.
The problem? Context rot. As your session fills up, quality degrades. Subagents spawn with fresh context but return ~70% quality work that needs cleanup. Plans get created but never closed. State drifts. You end up debugging AI output instead of shipping features.
PAUL fixes this with three principles:
Loop integrity — Every plan closes with UNIFY. No orphan plans. UNIFY reconciles what was planned vs what happened, updates state, logs decisions. This is the heartbeat.
In-session context — Subagents are expensive and produce lower quality for implementation work. PAUL keeps development in-session with properly managed context. Subagents are reserved for discovery and research — their job IS to gather context.
No comments yet. Be the first to share your thoughts!
Acceptance-driven development — Acceptance criteria are first-class citizens, not afterthoughts. Define done before starting. Every task references its AC. BDD format: Given [precondition] / When [action] / Then [outcome].
The complexity is in the system, not your workflow. Behind the scenes: structured state management, XML task formatting, loop enforcement. What you see: a few commands that keep you on track.
Builders who use AI to ship — software, campaigns, workflows, automations, anything that benefits from structured execution.
PAUL isn't just for code. It manages marketing campaigns, funnel builds, email sequences, and automation workflows with the same rigor it brings to software development.
You describe what you want, Claude Code builds it, and PAUL ensures:
No sprint ceremonies. No story points. No enterprise theater. Just a system that keeps AI-assisted development reliable.
npx paul-framework
The installer prompts you to choose:
Verify with /paul:help inside Claude Code.
# 1. Initialize PAUL in your project
# Walks through type-adapted requirements (app, campaign, workflow)
# Produces a populated PROJECT.md — not empty placeholders
/paul:init
# 2. Create a plan for your work
# Auto-detects scope: quick-fix, standard, or complex
# Validates coherence against project context before approval
/paul:plan
# 3. Execute the approved plan
# Each task goes through Execute/Qualify loop
# Escalation statuses: DONE, DONE_WITH_CONCERNS, NEEDS_CONTEXT, BLOCKED
/paul:apply
# 4. Close the loop (required!)
/paul:unify
# 5. Check progress anytime
/paul:progress
npx paul-framework@latest
npx paul-framework --global # Install to ~/.claude/
npx paul-framework --local # Install to ./.claude/
Every unit of work follows this cycle:
┌─────────────────────────────────────┐
│ PLAN ──▶ APPLY ──▶ UNIFY │
│ │
│ Define Execute Reconcile │
│ work tasks & close │
└─────────────────────────────────────┘
Create an executable plan with scope-adaptive ceremony:
All plans include:
Execute the approved plan with built-in quality enforcement:
Close the loop (required!):
Never skip UNIFY. Every plan needs closure. This is what separates structured development from chaos.
PAUL provides 26 commands organized by purpose. Run /paul:help for the complete reference.
| Command | What it does |
|---------|--------------|
| /paul:init | Initialize PAUL with type-adapted requirements walkthrough |
| /paul:plan [phase] | Create an executable plan (auto-routes quick-fix/standard/complex) |
| /paul:apply [path] | Execute an approved plan |
| /paul:unify [path] | Reconcile and close the loop |
| /paul:help | Show command reference |
| /paul:status | Show loop position (deprecated — use progress) |
| Command | What it does |
|---------|--------------|
| /paul:pause [reason] | Create handoff for session break |
| /paul:resume [path] | Restore context and continue |
| /paul:progress [context] | Smart status + ONE next action |
| /paul:handoff [context] | Generate comprehensive handoff |
| Command | What it does |
|---------|--------------|
| /paul:add-phase <desc> | Append phase to roadmap |
| /paul:remove-phase <N> | Remove future phase |
| Command | What it does |
|---------|--------------|
| /paul:milestone <name> | Create new milestone |
| /paul:complete-milestone | Archive and tag milestone |
| /paul:discuss-milestone | Articulate vision before starting |
| Command | What it does |
|---------|--------------|
| /paul:discuss <phase> | Capture decisions before planning |
| /paul:assumptions <phase> | See Claude's intended approach |
| /paul:discover <topic> | Explore options before planning |
| /paul:consider-issues | Triage deferred issues |
| Command | What it does |
|---------|--------------|
| /paul:research <topic> | Deploy research agents |
| /paul:research-phase <N> | Research unknowns for a phase |
| Command | What it does |
|---------|--------------|
| /paul:flows | Configure skill requirements |
| /paul:config | View/modify PAUL settings |
| /paul:map-codebase | Generate codebase overview |
| Command | What it does |
|---------|--------------|
| /paul:verify | Guide manual acceptance testing |
| /paul:plan-fix | Plan fixes for UAT issues |
.paul/
├── PROJECT.md # Project context and requirements
├── ROADMAP.md # Phase breakdown and milestones
├── STATE.md # Loop position and session state
├── config.md # Optional integrations
├── SPECIAL-FLOWS.md # Optional skill requirements
└── phases/
├── 01-foundation/
│ ├── 01-01-PLAN.md
│ └── 01-01-SUMMARY.md
└── 02-features/
├── 02-01-PLAN.md
└── 02-01-SUMMARY.md
STATE.md tracks:
When you resume work, /paul:resume reads STATE.md and suggests exactly ONE next action. No decision fatigue.
---
phase: 01-foundation
plan: 01
type: execute
autonomous: true
---
<objective>
Goal, Purpose, Output
</objective>
<context>
@-references to relevant files
</context>
<acceptance_criteria>
## AC-1: Feature Works
Given [precondition]
When [action]
Then [outcome]
</acceptance_criteria>
<tasks>
<task type="auto">
<name>Create login endpoint</name>
<files>src/api/auth/login.ts</files>
<action>Implementation details...</action>
<verify>curl command returns 200</verify>
<done>AC-1 satisfied</done>
</task>
</tasks>
<boundaries>
## DO NOT CHANGE
- database/migrations/*
- src/lib/auth.ts
</boundaries>
Every task has: files, action, verify, done. If you can't specify all four, the task is too vague.
PAUL has a companion: CARL (Context Augmentation & R