From oj
Executes a backlog item end-to-end through a 5-phase lifecycle (Discover, Triage, Execute, Deliver, Learn). Automatically selects the highest-priority unblocked item from issue tracker or BACKLOG.md.
How this skill is triggered — by the user, by Claude, or both
Slash command
/oj:run-taskThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Execute one backlog item end-to-end through the OpenJunto 5-phase task lifecycle: Discover, Triage, Execute, Deliver, Learn. The manager coordinates expert agents per the delegation boundary; this command does not relax that constraint.
Execute one backlog item end-to-end through the OpenJunto 5-phase task lifecycle: Discover, Triage, Execute, Deliver, Learn. The manager coordinates expert agents per the delegation boundary; this command does not relax that constraint.
Cross-reference:
.claude/CLAUDE.mdfor triage criteria, execution models, and quality gates. Cross-reference:${CLAUDE_PLUGIN_ROOT}/reference/workflow-stages.mdand${CLAUDE_PLUGIN_ROOT}/reference/stakeholder-guide.mdfor stage-specific protocols.
Run oj-helper issue-tracker-check in bash. Parse the result:
exit code != 0 -> BACKLOG.md mode
exit code == 0, project == null -> BACKLOG.md mode
exit code == 0, project == "KEY" -> issue tracker mode with KEY
Decision tree:
issue-tracker-check fails (non-zero exit) → BACKLOG.md modeissue-tracker-check succeeds and "project" is null (e.g., {"ok":true,"project":null}) → BACKLOG.md modeissue-tracker-check succeeds and "project" is non-null (e.g., {"ok":true,"project":"example-org/example-repo"}) → issue tracker mode with that project keyRead .claude/CLAUDE.md to understand project constraints, conventions, and stakeholder defaults.
oj-helper issue-tracker-list --project PROJECT_KEY to fetch open items as JSON. Parse to extract key, summary, status, priority..claude/BACKLOG.md and parse the markdown structure to extract item IDs, titles, priority, and status.Select the highest-priority unblocked item. If the backlog is empty, prompt the user for input — do not fabricate work.
Perform two-dimensional triage.
Score against the 4-criterion checklist:
Scoring: 0-1 = Simple, 2-3 = Moderate, 4 = Complex.
Mandatory escalation to Complex (overrides score):
Mandatory pair (all tiers): Product + Tech.
Domain signals:
| Signal | Add Stakeholder |
|---|---|
| Security / compliance | Security |
| Data modeling / pipelines | Data |
| Cross-system integration | Architecture |
| Infrastructure / CI-CD | Operations |
| Statistics / experimentation | Analytics |
| ML systems / model serving | ML |
| Test strategy / quality | Quality |
| SLOs / reliability | Reliability |
| Requirements / process | Business |
Stakeholder escalation guard:
Present the triage result to the user via AskUserQuestion. Offer three options with the recommended tier marked:
If the user overrides the recommendation, use their selection.
issue tracker mode only: Run oj-helper issue-tracker-transition KEY --status "In Progress". If the transition fails, log the failure and continue — issue tracker errors are non-blocking.
Before spawning any agents, declare the engagement plan:
${CLAUDE_PLUGIN_ROOT}/agents/index.md and ${CLAUDE_PLUGIN_ROOT}/reference/stakeholder-guide.mdTeamCreate — coordinator + stakeholder agentsManager applies each stakeholder lens using compact profiles. For each stakeholder, produce:
PERSPECTIVE: [Stakeholder] ([profile].md)
LENS: [What this stakeholder examines]
ASSESSMENT: [1-2 sentence finding]
CONCERN: [Primary concern, or "None — [reason]"]
After all perspectives, synthesize into a unified action. If code changes are required, delegate implementation to the appropriate expert via the Task tool — the manager does not edit code directly.
All three phases are mandatory.
Set
modelon every Task spawn per CONDUCTOR.md § Model Selection. Function rules (terse): Phase-1 analysts →sonnet(haikufor bounded/docs-only lenses); Phase-2 Moderate lead →sonnet(escalate toopusfor high-risk implementations or unresolved TENSION); Phase-3 adversarial reviewer → alwaysopusregardless of the reviewer role's default. Per-role default fallback table is in CONDUCTOR.md § Model Selection — do not duplicate it here.
After tier classification confirms Complex, run oj-helper agent-teams-check and parse .available from the JSON stdout. The probe always exits 0 (Axiom 8 — capability report, not a precondition gate); branch on the JSON value, not the exit code.
When .available == true — TeamCreate path:
TeamCreate with coordinator + stakeholder agentsshutdown_request to each teammate → TeamDeleteWhen .available == false — Convene→Consult fallback (Axiom 8):
TeamCreate is unavailable in this branch.SendMessage / Inform is unavailable.TeamDelete or shutdown_request — those tools are unavailable in this branch.Runtime backstop (the probe is a hint, not a guarantee): agent-teams-check only inspects the env var; an environment where the var is set but TeamCreate is actually disabled at runtime (enterprise policy, future flag retirement) will steer this skill onto the team branch incorrectly. If the team branch is taken and the first TeamCreate call — or any agent-teams-gated tool (TeamCreate, TeamDelete, SendMessage, shutdown_request) — raises "Unknown tool" / "tool unavailable" at runtime, do NOT abort the task. Fall through to the deputy-coordinator parallel-Task-tool fan-out above (handback-only synthesis, no Inform). The runtime signal is authoritative over the probe; the User Checkpoint promised at triage MUST still fire before Phase 4.
Set
modelon every Task spawn per CONDUCTOR.md § Model Selection. Function rules (terse): Complex-tier lead implementer →opus; adversarial reviewer slot → alwaysopusregardless of the reviewer role's default; deputy coordinator →sonnet(escalate toopusif it carries the synthesis weight); stakeholder analysts →sonnet(haikufor bounded/docs-only lenses); specialists on a domain trigger →sonnet, escalate toopuswhen their domain is the decisive risk (Security on auth/crypto, SRE on SLO-impacting change, Data Architect on destructive migration). Per-role default fallback table is in CONDUCTOR.md § Model Selection.
Validate with tests. Prefer a balanced pyramid (unit > integration > e2e). Run existing tests to confirm no regressions before committing.
Create atomic commits with clear, focused messages.
No "Co-Authored-By" lines or AI attribution. Omit Claude ads from commit messages.
Verification gate: After committing, run git status. If uncommitted changes remain (modified tracked files or untracked files created during this run-task invocation), stage and commit them with a descriptive message. Perform only one verification pass.
oj-helper issue-tracker-transition KEY --status "Done". If it fails, note the ticket key and desired status for manual resolution and continue.oj-helper issue-tracker-comment KEY --body "Completed: [summary]"oj-helper issue-tracker-create --summary "..." --description "...".claude/BACKLOG.mdRun a brief retrospective on what worked and what to improve. For Complex tier items, write a full retrospective to .claude/archive/retros/ using the retrospective.md template.
Run oj-helper feedback-path in bash:
---
date: YYYY-MM-DD
item: KEY-NNN or BACK-XXX
tier: Simple|Moderate|Complex
---
### What Worked
- [bullet points]
### What to Improve
- [bullet points]
### OpenJunto System Suggestions
- [specific suggestions for improving OpenJunto itself]
Fill in the actual date, the ticket key (issue tracker mode) or backlog ID (BACKLOG.md mode), the tier, and the retrospective content. Each run-task invocation produces exactly one new file.
Store design documents, ADRs, or analysis artifacts produced during this run-task invocation in .claude/artifacts/.
Tell the user the run-task is complete, summarize what was done, and suggest /clear before the next run-task invocation if context has grown large.
.claude/BACKLOG.md), and expert deliverables come from sub-agentsCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub openjunto/oj-claude --plugin oj