This orchestrator does two jobs. Routing: fork context, classify a PM inquiry with
scripts/pm_goal_router.py, run exactly one of the 8 sub-skills, return a digest.
Looping: turn a delivery goal into a bounded agentic loop — pull live Jira data via the
bundled Atlassian MCP, bridge it into the domain's deterministic analytics tools, verify
every step with machine-run gates, and refuse to close until everything is verified or a
human waives it. The bundled .mcp.json wires the Atlassian Remote MCP
(https://mcp.atlassian.com/v1/sse, OAuth handled by Claude Code).
| Symptom | Sub-skill |
|---|---|
| "Project/portfolio health, risk EMV, capacity" | senior-pm |
| "Sprint velocity, retro follow-through, ceremony health, when-will-it-be-done" | scrum-master |
| "JQL, Jira workflows, boards, automation" | jira-expert |
| "Confluence spaces, page trees, content audits" | confluence-expert |
| "Users, groups, permissions, SSO" | atlassian-admin |
| "Reusable Jira/Confluence templates" | atlassian-templates |
| "Meeting transcripts, talk time, action items" | meeting-analyzer |
| "Status updates, 3P updates, stakeholder comms" | team-communications |
Run the router — do not eyeball the table when a script can decide:
python3 scripts/pm_goal_router.py --text "<the goal>" --output json
Exit 0 → route_to names the sub-skill: load its SKILL.md and follow its workflow.
Exit 2 → ask ONE clarifying question naming the listed candidates, with a recommended
answer. Exit 3 → no signal: ask the user to restate the goal with the deliverable named.
Never guess silently; never silently chain a second sub-skill — digest first, confirm, then
chain.
For goals (not questions) — "get sprint 14 to a verified close", "produce a portfolio health report from live Jira", "make our flow metrics visible weekly" — run the loop-library contract (Observe → Choose → Act → Verify → Record → Repeat-or-stop):
mcp__atlassian__searchJiraIssuesUsingJql (get
cloudId via getAccessibleAtlassianResources first), save the result JSON, then
bridge it:
python3 scripts/jira_snapshot_bridge.py --input snapshot.json --to flow # WIP, throughput, cycle time p50/85/95, work-item age, SLE, aging alerts
python3 scripts/jira_snapshot_bridge.py --input snapshot.json --to sprint > s.json # scrum-master schema
python3 ../scrum-master/scripts/velocity_analyzer.py s.json # velocity + volatility + forecast
Add --forecast N for a seeded Monte Carlo "when will N items be done" answer
(refuses on < 10 completed items — thin history forecasts are lies).pm_goal_router.py; one task at a time.python3 scripts/delivery_loop_gate.py --plan plan.json --mode plan # exit 2 = blocked
python3 scripts/delivery_loop_gate.py --plan plan.json --mode close # exit 4 = close refused
Plus each sub-skill's own gates (scrum-master's ≥ 3-sprints rule, atlassian-admin's
VERIFY steps). Never adjudicate your own verification.python3 engineering/agent-harness/skills/agent-harness/scripts/goal_compiler.py \
--goal "<goal>" --manifest engineering/agent-harness/skills/agent-harness/assets/harnesses/project-management.json \
--out .agent-harness/plan.json
python3 engineering/agent-harness/skills/agent-harness/scripts/loop_controller.py init|next|record|verify|close ...
Terminal states: success, clean no-op, blocked, approval-required, exhausted,
stagnated. An exhausted budget is an escalation — never a success report.delivery_loop_gate.py enforces this (G1/G2).transitionJiraIssue to Done without verify evidence; destructive/irreversible
actions (deletes, permission changes, org-wide admin) are approval-required terminal
states, not loop steps.One per turn, recommended answer, canon citation. Never run a sub-skill or start a loop until the lane-defining decision is locked:
project-management/references/atlassian-mcp-tools.md (project/sprint/board/space
creation, admin config) are done in the web UI — never invent tool names.--sample so the shape is visible first.engineering/agent-harness; this orchestrator is
the PM-domain adapter (data bridge + governance gate + lane router).product-team.| Mode | Artifact |
|---|---|
| Route | Sub-skill's own artifact + ≤ 200-word digest with one canon-cited challenge |
| Flow report | flow_metrics.json (bridge output) with SLE conformance + aging alerts |
| Delivery loop | .agent-harness/plan.json + state.json + gate verdicts + close handoff |
project-management/references/atlassian-mcp-tools.md
engineering/agent-harness · Loop vocabulary: loop-library