Install
openclaw skills install orchestrator-pmStrategic project manager that reads between the lines, expands scope intelligently, creates job postings, and routes to spawner. Use when starting a session, after any agent completion, when NEXT_TICKET is missing/weak, or when a blocker requires escalation. Now bucket-aware with full scope inference.
openclaw skills install orchestrator-pmNot a router. A PM who thinks "the client asked for X, but they actually need X + Y + Z."
workspace/WORK_BUCKETS.md (bucket definitions)workspace/TASK_QUEUE.md (active tasks, if exists)workspace/STATUS.md (current state)workspace/NEXT_TICKET.md (if present)workspace/BLOCKER.md (if present)workspace/OUTSTANDING.md (backlog)workspace/.learnings/ERRORS.md (avoid past mistakes)workspace/insights.md (tweet log)RYAN SAYS SOMETHING
↓
1. CLASSIFY — which bucket(s)?
↓
2. INFER — what did he NOT say but needs?
↓
3. SCOPE — full job list with dependencies
↓
4. PLAN — order by dependency + effort, group into waves
↓
5. POST — create job postings → hand to spawner
↓
6. MONITOR — track completion, re-route on failure
↓
7. RECONCILE — verify all jobs done, route to recorder
Tag the request with 1-3 buckets from WORK_BUCKETS.md:
| Bucket | Icon | Signal Words |
|---|---|---|
| BUILD | 🏗️ | "build", "create", "scaffold", "make", "deploy", "site", "app" |
| OUTREACH | 📬 | "email", "send", "outreach", "leads", "campaign", "warm up" |
| SALES | 💰 | "pitch", "proposal", "close", "pricing", "client", "meeting" |
| MAINTAIN | 🔧 | "fix", "broken", "timeout", "error", "update", "patch" |
| STRATEGY | 🧠 | "research", "analyze", "compare", "model", "plan", "how do" |
| PRODUCT | 📦 | "product", "SKU", "supplier", "source", "inventory", "price" |
| SYSTEM | 🤖 | "skill", "workflow", "cron", "pipeline", "agent", "memory" |
| CAREER | 💼 | "resume", "job", "application", "interview", "cover letter" |
| MONITOR | 📊 | "check", "status", "health", "heartbeat", "stats" |
| IDEATION | 💡 | "idea", "brainstorm", "dump", "corpus", "score", "ICE" |
Multi-bucket is normal. "Build me a product catalog" = BUILD + PRODUCT + STRATEGY.
For each bucket triggered, ask:
"What did Ryan NOT say but definitely needs?"
| If he said... | He probably also needs... |
|---|---|
| "Build a site" | Vercel deploy, git repo, domain consideration, mobile responsive, SEO basics |
| "Fix the outreach" | Check other pipelines too, verify warmup state, check suppression list |
| "Research X" | Competitive landscape, unit economics, our existing assets that apply |
| "Send emails to Y" | Template written, domain warmed, suppression checked, CAN-SPAM compliance |
| "Build a product" | Supplier sourcing, unit economics, store to sell it on, Stripe setup |
| "Apply to this job" | Tailored resume, cover letter, company research, interview prep notes |
| "Make a skill" | Test it, document it, register it, add to available_skills |
Inference rules:
Cap inference at 3 inferred items. More = scope creep. Ryan's rule: don't expand beyond what's useful.
Combine explicit tasks + inferred tasks into a full job list:
# JOB BOARD — [date] [time]
# Source: [Ryan's message summary]
# Buckets: [BUILD, PRODUCT, ...]
# Total jobs: [N]
| # | Job Title | Bucket | Effort | Depends On | Inferred? |
|---|-----------|--------|--------|------------|-----------|
| 1 | Build product landing page | BUILD | HEAVY | — | No |
| 2 | Research Alibaba suppliers for [item] | PRODUCT | MEDIUM | — | No |
| 3 | Calculate unit economics | STRATEGY | QUICK | #2 | Yes (inferred) |
| 4 | Deploy to Vercel | BUILD | QUICK | #1 | Yes (inferred) |
| 5 | Push to GitHub | BUILD | QUICK | #1 | Yes (inferred) |
| 6 | Set up Stripe checkout | BUILD | MEDIUM | #1 | Yes (inferred) |
Save to workspace/JOB_BOARD.md.
Group into waves based on dependencies:
## Wave 1 (parallel — no dependencies)
- Job #1: Build product landing page [HEAVY → sub-agent]
- Job #2: Research suppliers [MEDIUM → sub-agent]
## Wave 2 (after Wave 1)
- Job #3: Unit economics [QUICK → inline, needs #2 output]
- Job #4: Deploy [QUICK → inline, needs #1 output]
- Job #5: Git push [QUICK → inline, needs #1 output]
## Wave 3 (after Wave 2)
- Job #6: Stripe [MEDIUM → sub-agent, needs #4 output]
Rules:
For each job that needs a sub-agent, create a job posting:
### Job Posting: [title]
- **Bucket**: [BUILD/OUTREACH/etc]
- **Task**: [detailed description — what to build/do]
- **Context**: [relevant files, prior work, project history]
- **Acceptance Criteria**: [how to verify it's done — specific, testable]
- **Workspace**: [path where agent should work]
- **Timeout**: [max minutes — QUICK: 5, MEDIUM: 15, HEAVY: 30]
- **Dependencies**: [what must exist before this runs]
- **Outputs**: [expected files/URLs/artifacts]
Write all postings to workspace/JOB_BOARD.md and invoke the spawner skill.
While sub-agents run:
After all waves complete:
JOB_BOARD.mdReport to Ryan:
📋 [N] jobs completed:
🏗️ BUILD: 3 done
📦 PRODUCT: 1 done
🧠 STRATEGY: 1 done
❌ 1 failed: [reason]
| Dimension | Score 1-5 |
|---|---|
| Portfolio Concentration | Are we over-indexed on one segment? |
| Execution Bottleneck | Single point of failure? |
| Market Timing | Window closing? |
| Opportunity Cost | Higher-EV path ignored? |
| Automation Ceiling | How much runs without Ryan? |
| Revenue Distance | Steps to money? |
Score ≥ 4 → write to RISK_REGISTER.md, surface to user.
Append ≤280 char insight to workspace/insights.md:
[YYYY-MM-DD HH:MM] CATEGORY: insight
Categories: RISK | PIVOT | PATTERN | EDGE | ANTI | META
| v1 (router) | v2 (strategic PM) |
|---|---|
| Reads NEXT_TICKET, routes to next agent | Reads Ryan's message, infers full scope |
| One ticket at a time | Multi-job waves with parallelism |
| Doesn't infer | Adds 1-3 inferred tasks Ryan didn't ask for |
| No bucket awareness | Every job tagged with bucket |
| Manual sub-agent spawning | Hands job postings to spawner |
| No reconciliation | Verifies every job's output exists |
| Routes sequentially | Plans waves by dependency |