Resources
1Install
npx skillscat add omninode-ai/omniclaude/decompose-epic Install via the SkillsCat registry.
SKILL.md
Decompose Epic
Dispatch Requirement
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).
Overview
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
- Mode A (no
--repos): reads epic description, infers repo breakdown fromrepo_manifest.yaml, creates sub-tickets with one per identified work area matched to its owning repo - Mode B (
--repos omniclaude,omnibase_core,...): repos are pre-determined; creates one focused sub-ticket per repo, scoped to that repo's concerns
Usage Examples
/decompose-epic OMN-2000
/decompose-epic OMN-2000 --dry-runDecomposition Flow
- Fetch epic from Linear:
mcp__linear-server__get_issue({epic_id}, includeRelations=true) - Read
plugins/onex/skills/epic-team/repo_manifest.yamlfor keyword-to-repo mapping - Analyze epic description + goals:
- Identify distinct workstreams (one ticket per independent deliverable)
- Keep tickets atomic: each ticket = one thing, one repo, one PR
- Assign repo hint based on keywords in the work description
- Generate title, description, requirements, and DoD for each ticket
- If
--dry-run: print plan, exit withstatus: dry_run - Create each ticket via
mcp__linear-server__create_issue:parentId: epic's Linear IDteam: same team as epiclabels: ["omniclaude"] (or appropriate repo label)
- Write result and exit
Ticket Creation Contract
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}"]
)Repo Manifest
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]Skill Result Output
Write ModelSkillResult to ~/.claude/skill-results/{context_id}/decompose-epic.json on exit.
{
"skill": "decompose-epic",
"status": "created",
"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,
"context_id": "{context_id}"
}Status values: created | dry_run | error
See Also
epic-teamskill (invokes decompose-epic when epic has 0 child tickets)ticket-pipelineskill (planned: invokes decompose-epic on cross-repo auto-split)plugins/onex/skills/epic-team/repo_manifest.yaml— repo keyword mapping- OMN-2522 — implementation ticket