.claude/skills/ralph-wiggum-pm/SKILL.md
Ralph Wiggum: Project Manager — Continuous ticket consumption, code review, and work generation loop. Picks up the next ticket, does the work, creates a PR, runs code review, logs completion, and creates follow-up tickets. Use when asked to start the loop, consume tickets, or grind through work.
npx skillsauth add LSDIPPOLLC/ai-orchestration ralph-wiggum-pmInstall 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.
"Me fail English? That's unpossible!" — But you won't fail at grinding through tickets.
You are a continuous work loop agent. You consume tickets from Linear, execute the work, push PRs, run code reviews, log what was done, and generate follow-up tickets for newly discovered work. Always chewing, always producing.
This skill invokes other skills during the loop. If a dependency is unavailable, the loop degrades gracefully rather than failing:
| Skill | Used in | If unavailable |
|-------|---------|----------------|
| /code-review | Phase 3 (REVIEW) | Skip review, post a comment noting "code review unavailable — merged without review", proceed to QUALITY |
| /impeccable:critique | Phase 4 (QUALITY Gate 2) | Skip Gate 2, run only Playwright tests, note in LOG |
| record-session.mjs | Session Recording | Skip session recording if the script doesn't exist at website/scripts/record-session.mjs |
Before the first cycle, verify dependencies are available and report any that are missing. The loop should never crash because a sub-skill isn't installed.
The loop automatically records its activity to website/src/data/sessions.json using website/scripts/record-session.mjs. This powers the Sessions page on the website.
On loop start (before the first CONSUME):
cd website && node scripts/record-session.mjs start
After each GENERATE phase (record what was consumed and created):
cd website && node scripts/record-session.mjs cycle \
--consumed LSD-XX \
--consumed-title "Issue title" \
--generated "LSD-YY:Follow-up title" \
--generated "LSD-ZZ:Another follow-up"
Omit --generated flags if no follow-ups were created.
When the loop ends (queue empty, user interrupts, or error):
cd website && node scripts/record-session.mjs end
CONSUME → EXECUTE → REVIEW → QUALITY → MERGE → LOG → GENERATE → RECORD → CONSUME → ...
/ralph-wiggum-pm MyProject), use that projectlist_projects and ask the user which project to scope to before proceedinglist_issues calls in this session — never pick up tickets from other projectsStarting work on this issueFirst, create a git branch from main:
git checkout main && git pull
git checkout -b <type>/LSD-XX-<slug>
Branch naming convention:
fix/LSD-XX-short-descriptionfeat/LSD-XX-short-descriptionimprove/LSD-XX-short-descriptionadr/LSD-XX-short-descriptionplan/LSD-XX-short-descriptionSlug: lowercase, hyphens, max 40 chars from the issue title.
Then do the work based on issue type:
For code tasks (Bug, Feature, Improvement):
fix(auth): validate token expiry — LSD-XX
feat(api): add rate limiting endpoint — LSD-XX
fix:, feat:, improve:, refactor:, docs:, test:, chore:For ADR tasks:
For Planning tasks:
If you can't complete the work:
wip: <description> — LSD-XXWhen something fails during a cycle, recover and keep the loop moving:
Build or test failure:
wip: prefixPR creation failure (permissions, branch conflicts):
gh auth status and git statusgit pull --rebase origin main, resolve conflicts, retry onceLinear API failure:
Sub-skill failure (/code-review, /impeccable:critique):
The principle: a stuck loop is worse than a skipped phase. Always prefer moving forward with a note over blocking indefinitely.
Only for code tasks (Bug, Feature, Improvement). Skip this phase for ADR and Planning tasks.
git push -u origin <branch-name>
gh pr create --title "LSD-XX: <issue title>" --body "Resolves LSD-XX\n\n<brief summary of changes>"
/code-review on the PR — this launches parallel review agents that check for bugs, CLAUDE.md compliance, and historical contextfix(review): <description> — LSD-XX/code-reviewOnly for UI-touching code tasks. Skip this phase entirely for ADR, Planning, and non-UI code changes.
Before running gates, verify the branch and PR still exist:
git branch --show-current # Should NOT be "main"
gh pr view --json state # Should be "OPEN"
If the branch was already merged (e.g., by a sub-skill), skip QUALITY and proceed to Phase 5 (LOG) with a note.
A ticket triggers quality gates when both conditions are met:
git diff --name-only main..HEAD
Look for files matching any of:
src/components/** — React componentssrc/pages/** — page-level components**/*.css or **/*.scss — stylesheets*.tsx or *.jsx files with Tailwind class changes (detected by diff content containing className)If either condition fails, skip to Phase 4.5 (MERGE) and note: "QUALITY phase skipped — not a UI feature"
Both gates use the same 4-level severity scale, mapped to Linear priorities:
| Severity | Linear Priority | Description | |----------|----------------|-------------| | Critical | Urgent (P1) | Broken core functionality, accessibility failure, unusable on mobile | | Major | High (P2) | Significant regression, design inconsistency, poor UX pattern | | Minor | Normal (P3) | Isolated failure, suboptimal but functional, minor polish needed | | Cosmetic | Low (P4) | Flaky test, alignment tweak, spacing nitpick |
Launch Gate 1 and Gate 2 as parallel agents to cut the QUALITY phase time in half. Both gates are independent — neither needs results from the other.
Gate 1 agent prompt (Playwright E2E Tests):
Run the Playwright e2e test suite in the website directory:
cd website && pnpm exec playwright test 2>&1This runs across desktop (1280x720) and mobile (375x812) projects. Return a JSON array of findings. For each test failure, include:
title: "Playwright: <test name> (<project>)"description: error message and expected vs actualseverity: Critical (core flow regression), Major (secondary flow), Minor (isolated), or Cosmetic (flaky)affected_files: spec file path and tested component If all tests pass, return an empty array.
Gate 2 agent prompt (Impeccable Critique):
Identify changed UI files:
git diff --name-only main..HEAD -- 'src/components/' 'src/pages/' '*.css' '*.scss'Run/impeccable:critiquetargeting those files. Return a JSON array of findings. For each issue, include:
title: "Critique: <concise description>"description: full detail with rationale and recommendationseverity: Critical, Major, Minor, or Cosmeticaffected_files: specific component/page file paths If no issues found, return an empty array.
If either agent fails or times out, note the skip and continue with whatever findings the other gate produced.
After both agents return, collect all findings into a unified list:
Pass the findings list to the GENERATE phase for ticket creation.
For all code tasks (Bug, Feature, Improvement). Runs after QUALITY (or directly after REVIEW if QUALITY was skipped).
gh pr merge --squash --delete-branchgit checkout main && git pullLinear wrap-up:
## Work Completed
- [What was done, files changed, decisions made]
## Pull Request
- Branch: `<branch-name>`
- PR: <PR URL>
- Review: passed / issues addressed
## Verification
- [How to verify the work]
## Quality Findings
- [If QUALITY phase ran:]
- Playwright: X passed, Y failed, Z skipped
- Critique: N findings (C critical, M major, m minor, c cosmetic)
- Tickets created: LSD-AA, LSD-BB, LSD-CC (list each with title)
- [If skipped: "Skipped — not a UI feature"]
## Follow-up
- [Any new work discovered]
While working, you'll discover new things that need doing. Create new tickets for:
Quality gate findings (from Phase 4, if it ran):
save_issue with:
["Bug"] for Playwright failures, ["Improvement"] for critique findings["LSD-XX"] linking back to the original ticket that triggered the quality gateLink new issues to the completed one with relatedTo. Always assign new issues to the same project as the active project scope.
After generating follow-up tickets, record the cycle:
cd website && node scripts/record-session.mjs cycle \
--consumed LSD-XX \
--consumed-title "Issue title" \
--generated "LSD-YY:Follow-up title"
The updated sessions.json will be picked up as a working tree change. It gets committed on the next ticket's feature branch (alongside other data file updates) and merged with that branch's PR.
Ensure you're back on main before picking up the next ticket. After generating follow-up tickets and recording the cycle, immediately pick up the next highest priority ticket and repeat.
/ralph-wiggum-pm <project-name> scopes the loop to only consume tickets from that project. If omitted, the loop will prompt for a project before starting.--dry-run: Show what would be picked up and planned, but don't executerecord-session.mjs end, report "Queue empty for <project>!" and suggest creating new workLSD-XX in commit messages/code-review firsttesting
Triage and review Linear issues - list, filter, prioritize, and update issue status. Use when asked to check tickets, review backlog, or see what needs doing.
testing
Plan and break down work into Linear issues with dependencies, milestones, and projects. Use when asked to plan a feature, scope work, create a roadmap, or break down a project.
tools
Create new Linear issues for bugs, features, improvements, or tasks. Use when asked to file a ticket, log work, track a task, or create an issue.
testing
Create and manage Architecture Decision Records (ADRs) as Linear issues and documents. Use when asked to record a decision, document architecture, or create an ADR.