一键导入
decompose-epic
Analyze a Linear epic description and create sub-tickets as Linear children
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Analyze a Linear epic description and create sub-tickets as Linear children
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Dispatch a background worker with role-templated prompt and auto-populated collision fences
Comprehensive system health monitoring — checks agent performance, database, Kafka topics, pattern discovery, and service status across the ONEX platform
Orchestrate a Claude Code agent team to autonomously work a Linear epic across multiple repos
Run DoD evidence checks against a ticket contract and generate a verification receipt
Autonomous per-ticket pipeline that chains ticket-work, local-review, PR creation, CI watching, PR review loop, integration verification gate, and auto-merge into a single unattended workflow with Slack notifications and policy guardrails
Full autonomous audit-debug-fix loop for all dashboard pages — Playwright recon, parallel systematic-debug, fix, PR, Linear ticket, re-audit, iterate until clean. Supports local and cloud targets with optional post-fix redeployment.
| name | decompose-epic |
| description | Analyze a Linear epic description and create sub-tickets as Linear children |
When invoked, dispatch to a polymorphic-agent:
Agent(
subagent_type="onex:polymorphic-agent",
description="Decompose epic <epic_id>",
prompt="Run the decompose-epic skill for <epic_id>. <full context>"
)
CRITICAL: subagent_type MUST be "onex:polymorphic-agent" (with the onex: prefix).
Analyze a Linear epic's description, goals, and context to generate a set of actionable
sub-tickets. Creates each sub-ticket as a Linear child of the epic, assigns repo hints
from the repo manifest, and returns ModelSkillResult with created ticket details.
Announce at start: "I'm using the decompose-epic skill to create sub-tickets for {epic_id}."
Implements: OMN-2522
--repos): reads epic description, infers repo breakdown from repo_manifest.yaml, creates sub-tickets with one per identified work area matched to its owning repo--repos omniclaude,omnibase_core,...): repos are pre-determined; creates one focused sub-ticket per repo, scoped to that repo's concerns/decompose-epic OMN-2000
/decompose-epic OMN-2000 --dry-run
mcp__linear-server__get_issue({epic_id}, includeRelations=true)plugins/onex/skills/epic-team/repo_manifest.yaml for keyword-to-repo mapping--dry-run: print plan, exit with status: dry_runmcp__linear-server__create_issue:
parentId: epic's Linear IDteam: same team as epiclabels: ["omniclaude"] (or appropriate repo label)mcp__linear-server__create_issue(
title="{ticket_title}",
team="{epic_team}",
parentId="{epic_linear_id}",
description="""
## Summary
{what_this_ticket_implements}
## Requirements
{functional_requirements}
## Definition of Done
- [ ] Implementation complete
- [ ] Tests passing
- [ ] PR merged
## Repo Hint
{repo_name}: {rationale}
""",
labels=["{repo_label}"]
)
Loaded from plugins/onex/skills/epic-team/repo_manifest.yaml:
repos:
- name: omniclaude
path: ~/Code/omniclaude
keywords: [hooks, skills, agents, claude, plugin]
- name: omnibase_core
path: ~/Code/omnibase_core
keywords: [nodes, contracts, runtime, onex]
Output contract: ModelSkillResult from omnibase_core.models.skill
Note: This contract reference is behavioral guidance for the LLM executing this skill. Runtime validation not yet implemented.
Write to: ~/.claude/skill-results/{context_id}/decompose-epic.json
| Field | Value |
|---|---|
skill_name | "decompose-epic" |
status | One of the canonical string values: "success", "dry_run", "error" (see mapping below) |
extra_status | Domain-specific status string (see mapping below) |
run_id | Correlation ID |
extra | {"epic_id": str, "created_tickets": list[{"id": str, "title": str, "repo_hint": str}], "count": int} |
Note on
context_id: Prior schema versions includedcontext_idas a top-level field. This field is not part ofModelSkillResult— it belongs to the file path convention (~/.claude/skill-results/{context_id}/decompose-epic.json). Consumers should derive context from the file path, not fromcontext_idin the result body.
Status mapping:
| Current status | Canonical status (string value) | extra_status |
|---|---|---|
created | "success" (EnumSkillResultStatus.SUCCESS) | "created" |
dry_run | "dry_run" (EnumSkillResultStatus.DRY_RUN) | null |
error | "error" (EnumSkillResultStatus.ERROR) | null |
Behaviorally significant extra_status values:
"created" → ticket-pipeline (cross-repo split path) proceeds to invoke epic-team with parent epic ID; the extra["created_tickets"] list contains the sub-ticket IDs passed to epic-teamnull (dry_run) → ticket-pipeline does not advance; decomposition plan is logged for human review onlyPromotion rule for extra fields: If a field appears in 3+ producer skills, open a ticket to evaluate promotion to a first-class field. If any orchestrator consumer (epic-team, ticket-pipeline) branches on extra["x"], that field MUST be promoted. Note: ticket-pipeline already branches on extra["created_tickets"] — evaluate promotion.
Example result:
{
"skill_name": "decompose-epic",
"status": "success",
"extra_status": "created",
"run_id": "pipeline-1709856000-OMN-2000",
"extra": {
"epic_id": "OMN-2000",
"created_tickets": [
{"id": "OMN-2001", "title": "Implement X", "repo_hint": "omniclaude"},
{"id": "OMN-2002", "title": "Add node Y", "repo_hint": "omnibase_core"}
],
"count": 2
}
}
Status values: success (extra_status: "created") | dry_run | error
epic-team skill (invokes decompose-epic when epic has 0 child tickets)ticket-pipeline skill (planned: invokes decompose-epic on cross-repo auto-split)plugins/onex/skills/epic-team/repo_manifest.yaml — repo keyword mapping