Files
2025-11-29 18:29:33 +08:00

434 lines
13 KiB
Markdown

---
name: process-improvement-protocol
description: Use when user types /improve or frustration patterns detected - systematic intervention for reducing user frustration and improving workflow effectiveness through root cause analysis, evidence-based fixes, and effectiveness tracking
allowed-tools: [Read, Write, Edit, Bash, Glob, Grep, Task, TodoWrite]
---
# Process Improvement Protocol
## Overview
Systematic intervention system that detects frustration, analyzes root causes, implements fixes, and tracks effectiveness over time.
**Core principle:** Data-driven behavioral change. Success = days between frustration incidents increasing over time.
**Announce at start:** "🛟 Process Improvement Protocol initiated! Saving my context for later."
## Phase 0: Plugin Path Discovery (ALWAYS RUN FIRST)
**CRITICAL**: Before any file operations, discover where this plugin is installed.
The plugin must work regardless of installation method:
- Local testing: `/path/to/process-improvement/`
- Marketplace install: `~/.claude/plugins/marketplaces/process-improvement/`
- Legacy location: `~/.claude/process-improvement/` (deprecated)
**Path Discovery Strategy**:
```bash
# Determine plugin root directory
# Priority: CLAUDE_PLUGIN_ROOT env var > marketplace location > current directory
if [ -n "$CLAUDE_PLUGIN_ROOT" ]; then
PLUGIN_ROOT="$CLAUDE_PLUGIN_ROOT"
elif [ -d ~/.claude/plugins/marketplaces/process-improvement ]; then
PLUGIN_ROOT=~/.claude/plugins/marketplaces/process-improvement
elif [ -d ~/.claude/process-improvement ]; then
# Legacy fallback
PLUGIN_ROOT=~/.claude/process-improvement
else
# Assume local development
PLUGIN_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
fi
# Export data directory for all file operations
export PLUGIN_DATA="$PLUGIN_ROOT/data"
# Verify data directory exists, create if missing
mkdir -p "$PLUGIN_DATA"/{sessions,deferred-incidents,fixes-registry}
# Verify required files exist, create if missing
touch "$PLUGIN_DATA/incidents.jsonl"
[ -f "$PLUGIN_DATA/days-without-incident.json" ] || echo '{"last_incident":null,"days_since_last":0,"longest_streak":0}' > "$PLUGIN_DATA/days-without-incident.json"
```
**Usage**: All file operations in this skill use `${PLUGIN_DATA}/filename` instead of absolute paths.
## Trigger Conditions
### Primary Trigger
User types `/improve [timeframe]` command
**Time frame parameter** (optional):
- `week` - Analyze last 7 days
- `month` - Analyze last 30 days (default)
- `year` - Analyze last 365 days
- `all` - Analyze entire history
If no time frame specified, default to `month`.
**Parse time frame:**
```bash
# Extract from command arguments
timeframe="${1:-month}" # Default to month if not specified
case "$timeframe" in
week) days=7 ;;
month) days=30 ;;
year) days=365 ;;
all) days=99999 ;; # Effectively all time
*) days=30 ;; # Default to month for invalid input
esac
```
### Auto-Detection (Frustration Phrase Library)
Check user message for ANY of these phrases:
- "Stop"
- "I keep asking"
- "Did you actually"
- "You didn't test"
- "You didn't..."
- "I didn't ask for..."
- "How many times"
- "Again?"
- "Still not working"
**If detected**, offer choice:
```
🛟 I detected a potential frustration pattern. Would you like to:
1. Run Process Improvement Protocol now
2. Defer this and continue working (I'll save the context)
```
If user chooses option 2 (defer):
- Save context to `${PLUGIN_DATA}/deferred-incidents/YYYY-MM-DD-HHMMSS.json`
- Include: timestamp, trigger phrase, last user message, current todos, files being edited
- Continue with original work
- Skill will check for deferred incidents on next /improve run
## Phase 1: Context Preservation
### 1. Acknowledge
Display which time frame is being analyzed:
```
🛟 Process Improvement Protocol initiated! Saving my context for later.
Analyzing: Last [7 days|30 days|365 days|all time] of conversations
```
Replace bracketed text with actual time frame based on parameter.
### 2. Save Resume State
Create `${PLUGIN_DATA}/sessions/YYYY-MM-DD-HHMMSS-resume.json`:
```json
{
"timestamp": "2025-11-21T17:45:00Z",
"current_todos": [...], // from TodoWrite
"last_user_message": "...",
"working_on": "...", // brief summary
"files_being_edited": [...]
}
```
### 3. Display Streak
Read `${PLUGIN_DATA}/days-without-incident.json` and calculate days since last incident:
```
Days since last frustration incident: X
[If X < 7]: Definitely still learning here. Let's get to it!
[If X >= 7]: Oof! We had a good streak going. Let's get back on track!
```
## Phase 2: Quick Context Analysis
### 1. Analyze Current Conversation
Check for obvious patterns:
- Testing skipped? (claims of "complete" or "working" without evidence)
- Review skipped? (spec/plan written without review agent)
- Rationalization detected? ("should work", "logic is correct")
- Hallucination? (claiming features exist that don't)
- Repeated request? (user asked for same thing 2+ times)
### 2. Check Deferred Incidents
Read `${PLUGIN_DATA}/deferred-incidents/*.json`
If any found:
```
Current issue: [describe current frustration]
I also found X deferred incidents from earlier sessions that may be related:
- [incident 1 summary]
- [incident 2 summary]
Analyzing all together.
```
### 3. Load Historical Context
Read files within the specified time frame:
- `${PLUGIN_DATA}/incidents.jsonl` (filter by timestamp and `days` parameter)
- `${PLUGIN_DATA}/successful-fixes.md` (what worked before)
- `${PLUGIN_DATA}/patterns-detected.md` (known failure modes)
- `${PLUGIN_DATA}/fixes-registry/*.md` (filter by file modification date using `days` parameter)
**Filter incidents.jsonl by time frame:**
```bash
# Only load incidents within the specified time frame
jq -c --arg cutoff_days "$days" \
'select((now - (.timestamp | fromdate)) / 86400 <= ($cutoff_days | tonumber))' \
"${PLUGIN_DATA}/incidents.jsonl"
```
Check for similar past incidents (within time frame) and their solutions.
## Phase 3: Deep Investigation
### Skill-Based Analysis
Using available context, perform analysis:
1. **Pattern matching**: Does this match a known failure mode from patterns-detected.md?
2. **Historical check**: Has this happened before? What fixed it then? Did that fix last?
3. **Regression check**: Were fixes previously applied but now broken/removed?
4. **Root cause**: Why did this actually happen? (Be specific, not generic)
### Generate Solution Options
Create 2-3 solution options with:
- **What**: Specific implementation (file edits, config changes, skill creation)
- **Why it should work**: Evidence-based reasoning (similar past fixes, proven patterns)
- **Drawbacks**: Honest assessment
- **Expected effectiveness**: Based on historical data if available
### Recommend Best Option
Select the most likely to solve this based on evidence, with reasoning.
### Optional: Spawn Agent for Complex Cases
If analysis requires:
- Deep investigation across many historical conversations
- Research (WebSearch for solutions)
- Comparing multiple historical patterns
Spawn general-purpose agent with full context package.
## Phase 4: Present & Implement
### 1. Present Findings
```
## Root Cause Analysis
[What happened + why + is this a pattern?]
## Historical Context
[Has this happened before? What fixed it then? Did that fix last?]
## Solution Options
### Option A: [Name]
**What**: [Specific implementation]
**Why it should work**: [Evidence-based reasoning]
**Drawbacks**: [Honest assessment]
**Expected effectiveness**: [Based on historical data]
### Option B: [Name]
...
## Recommendation
**Recommended**: Option [X]
**Reasoning**: [Why this one, with evidence]
**Success criteria**: [How we'll know if it worked]
```
### 2. User Selects or Approves
User chooses option (or approves recommendation).
### 3. Implement Fix Immediately
Apply the selected fix:
- Update configuration files (e.g., `actually_works_plus_superpowers.md`)
- Create new skill if needed (in `~/.claude/skills/user/`)
- Add enforcement hook if needed (in `~/.claude/hooks/`)
- Create entry in `${PLUGIN_DATA}/fixes-registry/YYYY-MM-DD-fix-name.md` with:
- Date implemented
- Problem it solves
- What was changed (file paths)
- Expected impact
- How to verify it's working
### 4. Log to incidents.jsonl
Append new line to `${PLUGIN_DATA}/incidents.jsonl`:
```json
{"timestamp":"2025-11-21T17:45:00Z","days_since_last":7,"severity":"major_win","pattern":"Testing skipped","root_cause":"Agent claimed 'production-ready' without testing","solution_implemented":"Added BLOCKER section to actually_works.md requiring TodoWrite + verification skill","fix_file":"fixes-registry/2025-11-21-testing-protocol-blocker.md","expected_impact":"Zero untested 'complete' claims","effectiveness_1week":null,"effectiveness_2week":null,"status":"active"}
```
### 5. Update days-without-incident.json
```json
{
"last_incident": "2025-11-21T17:45:00Z",
"days_since_last": 0,
"longest_streak": 14
}
```
### 6. User Acceptance
```
I hope this will improve our process and this frustration will hopefully not recur again.
We'll track our performance over time and revisit if needed.
Ready to get back to our earlier task?
1. Yes
2. Keep discussing improvements
```
If option 1: Continue to Phase 5 (Resume)
If option 2: Continue improvement conversation
## Phase 5: Resume Work
Display saved context from `${PLUGIN_DATA}/sessions/YYYY-MM-DD-HHMMSS-resume.json`:
```
We're done with Process Improvement Protocol. Here's where we were:
**What you were working on**: [working_on from resume.json]
**Active TODOs**:
- [list from current_todos]
**Files being edited**:
- [list from files_being_edited]
**Last thing you said**:
[last_user_message]
Please let me know how you'd like to proceed - continue with the above, or start something new?
```
User manually decides next action.
## Effectiveness Tracking (Weekly /improve Run)
When `/improve` runs (weekly or user-initiated), check for pending effectiveness measurements:
### 1. Load Pending Checks
```bash
# Find incidents needing 1-week check
jq -c 'select(.effectiveness_1week == null and
(now - (.timestamp | fromdate)) >= 604800)' "${PLUGIN_DATA}/incidents.jsonl"
# Find incidents needing 2-week check
jq -c 'select(.effectiveness_2week == null and
(now - (.timestamp | fromdate)) >= 1209600)' "${PLUGIN_DATA}/incidents.jsonl"
```
### 2. Count Pattern Occurrences
For each pending check, grep conversations within time frame:
```bash
# Example: Count "review agent" mentions within time frame
pattern_keywords="review agent|Plan agent|code-reviewer"
project_dir=$(echo ~/.claude/projects/-Users-gserafini-git-src-* | head -1)
# Use the parsed $days variable from trigger time frame
occurrences=$(find "$project_dir" -name "*.jsonl" -type f -mtime -${days} \
-exec grep -l "$pattern_keywords" {} \; | wc -l)
```
### 3. Calculate Success Rate
```
success_rate = 1 - (occurrences_after / occurrences_before)
status = success_rate >= 0.8 ? 'highly_effective' :
success_rate >= 0.5 ? 'moderately_effective' :
success_rate >= 0.2 ? 'minimally_effective' : 'ineffective'
```
### 4. Update incidents.jsonl
Update the incident entry with effectiveness data.
### 5. Report to User
```
📊 Effectiveness Check Results:
Fix: [fix name] (1 week ago)
- Before: X occurrences/week
- After: Y occurrences/week
- Success rate: Z%
- Status: [Highly effective ✅ / Needs refinement ⚠️]
- Recommendation: [Keep as-is / Refine / Replace]
```
## Common Mistakes
**Skipping context preservation**
- **Problem**: Lose work in progress when investigating frustration
- **Fix**: Always save resume.json FIRST before analyzing
**Generic root cause**
- **Problem**: "Agent made a mistake" doesn't help prevent recurrence
- **Fix**: Be specific - what EXACTLY went wrong? Why?
**No historical check**
- **Problem**: Repeat the same failed fixes
- **Fix**: Always check if this happened before and what was tried
**Implementing without user approval**
- **Problem**: User loses control, may disagree with approach
- **Fix**: Present options, get explicit approval before implementing
**No effectiveness tracking**
- **Problem**: Fixes live forever even if they don't work
- **Fix**: Always log to incidents.jsonl with null effectiveness fields for later measurement
## Red Flags
**Never:**
- Implement fixes without user approval
- Skip logging to incidents.jsonl
- Proceed without saving resume context
- Give generic "I'll do better" responses without specific fixes
- Skip effectiveness measurement for past fixes
**Always:**
- Save context FIRST (sessions/resume.json)
- Check for deferred incidents
- Present specific, evidence-based options
- Implement fixes immediately when approved
- Log everything to incidents.jsonl
- Track effectiveness over time
## Integration
**Invoked by:**
- User typing `/improve` command
- Frustration keyword auto-detection
**May invoke:**
- General-purpose Task agent for complex investigation (optional)
**Updates:**
- ${PLUGIN_DATA}/incidents.jsonl (append only)
- ${PLUGIN_DATA}/days-without-incident.json (overwrite)
- ${PLUGIN_DATA}/sessions/*.json (create new)
- ${PLUGIN_DATA}/deferred-incidents/*.json (create when deferred)
- ${PLUGIN_DATA}/fixes-registry/*.md (create per fix)
- ${PLUGIN_DATA}/successful-fixes.md (manual curation based on effectiveness)
- ${PLUGIN_DATA}/patterns-detected.md (manual curation of common issues)