Parse a plan file and batch-create Linear tickets — one per `## Task N:` section.
Scanned 9/1/2026
Install to Claude Code
npx -y skills add Julian0444/omnicursor --skill onex-plan-to-tickets --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Onex Plan To Tickets?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/julian0444-onex-plan-to-tickets)More formats (shields.io, HTML) on the badges page.
---
name: "onex-plan-to-tickets"
description: >-
Parse a plan file and batch-create Linear tickets — one per `## Task N:` section.
disable-model-invocation: true
---
# onex-plan-to-tickets
Parse a plan file and batch-create Linear tickets — one per `## Task N:` section.
Called automatically by execute_plan, or invoked directly.
**Announce at start:** "I'm using the onex-plan-to-tickets skill."
## Usage
```
/plan-to-tickets docs/plans/my-plan.md [--dry-run] [--skip-existing]
```
## Flow
### 1. Parse task sections
Read the plan file. Find all `## Task N:` headings (H2 level). Each heading = one ticket.
Example:
```
## Task 1: Write failing test for webhook handler
## Task 2: Implement webhook handler
## Task 3: Add integration test
```
→ 3 tickets will be created.
### 2. Get Linear team
Call `tracker.list_teams`. If multiple teams exist, ask the user which to use.
Cache the team ID for all subsequent calls.
### 3. Create epic
Call `tracker.create_issue` with:
- `title`: plan filename without date prefix and `.md` suffix (e.g., "Execute Plan Pipeline")
- `teamId`: from step 2
- `description`: first paragraph of the plan (Goal + Architecture lines)
Record the epic's ticket ID (e.g., `OMN-100`).
### 4. Create one ticket per task
For each `## Task N:` section:
- `title`: the task heading text (e.g., "Write failing test for webhook handler")
- `teamId`: from step 2
- `parentId`: epic ID from step 3
- `description`: full task body (Files, Steps, Acceptance criteria)
- `blockedBy`: parse "Depends on Task N" or "after Task N" notes → list of earlier ticket IDs
With `--skip-existing`: search for an existing ticket with the same title under the same epic first.
If found, skip creation and use its ID.
### 5. Return ticket mapping
Output:
```
Epic: OMN-100
Task 1 → OMN-101
Task 2 → OMN-102 (blocked by OMN-101)
Task 3 → OMN-103 (blocked by OMN-101, OMN-102)
```
Return this mapping to the caller (execute_plan uses it for ordered implementation).
Downstream, `onex-execute-plan` invokes the Omnimarket MCP tool `run_ticket_pipeline` with **`ticket_id`** set to each Linear identifier from this mapping (e.g. `"OMN-101"`).
## Dry Run
With `--dry-run`: parse the plan and print what would be created, but make no MCP calls.
```
[dry-run] Would create parent epic: "Execute Plan Pipeline"
[dry-run] Would create 3 tickets:
Task 1: Write failing test for webhook handler
Task 2: Implement webhook handler (blocked by Task 1)
Task 3: Add integration test (blocked by Task 1, Task 2)
```
## Error Handling
- If `tracker.list_teams` fails: stop and report "Linear MCP not available. See QUICKSTART.md Linear MCP Setup section."
- If a ticket creation fails: report the failure and continue with remaining tasks. Record failed tasks in the final summary.

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!