From Dev10x
Scope a multi-ticket project with milestones, blocking relationships, and tracker integration. Accepts a parent ticket URL/ID or free-text description and creates the full project structure in Linear, JIRA, or GitHub Issues. TRIGGER when: scoping a multi-ticket project with milestones and blocking relationships. DO NOT TRIGGER when: scoping a single ticket (use Dev10x:ticket-scope), or creating individual tickets (use Dev10x:ticket-create).
npx claudepluginhub dev10x-guru/dev10x-claude --plugin Dev10xThis skill is limited to using the following tools:
This skill orchestrates multi-ticket project creation with milestones
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
This skill orchestrates multi-ticket project creation with milestones and blocking relationships. It takes a parent ticket or free-text description and produces a complete project structure in the tracker.
Use when:
Do NOT use for:
Dev10x:ticket-scope)Dev10x:adr)Dev10x:ticket-create)This skill follows references/task-orchestration.md patterns
(Tier: Standard).
Auto-advance: Complete each phase and immediately start the next. Never pause between phases to ask "should I continue?".
REQUIRED: Create tasks before ANY work. Execute these
TaskCreate calls at startup:
TaskCreate(subject="Gather & understand input", activeForm="Gathering context")TaskCreate(subject="Scope project structure", activeForm="Scoping project")TaskCreate(subject="Create tracker structure", activeForm="Creating structure")TaskCreate(subject="Verify & report results", activeForm="Verifying entities")Set sequential dependencies: scope blocked by gather, create blocked by scope, verify blocked by create.
| Input | Type | Behavior |
|---|---|---|
PAY-662 or JIRA-123 | Ticket ID | Call detect_tracker MCP tool, fetch as parent |
https://linear.app/.../issue/XXX-N/... | Linear URL | Extract ID, fetch as parent |
https://*.atlassian.net/browse/XX-N | JIRA URL | Extract ID, fetch as parent |
https://github.com/.../issues/N | GitHub URL | Extract repo + number, fetch as parent |
| Free text description | New project | Create parent ticket first |
Determine whether the user provided a ticket reference or free text.
If ticket reference: Fetch ticket details (title, description, comments, labels, related tickets) via Linear MCP or GitHub CLI.
If free text: Store as project description for Phase 2.
Call mcp__plugin_Dev10x_cli__detect_tracker(ticket_id="$TICKET_ID")
to determine the project's tracker backend.
REQUIRED: Call AskUserQuestion (do NOT use plain text, call spec: ask-tracker-selection.md) when
tracker cannot be detected automatically (e.g., free-text input
with no branch context). Options:
gh CLIIf the project involves code changes, explore the codebase for relevant patterns, existing components, and architectural context.
Generate the following sections:
Tickets are intentionally high-level. Further refinement via
Dev10x:ticket-scope is expected for individual tickets.
REQUIRED: Call AskUserQuestion (do NOT use plain text, call spec: ask-scope-approval.md).
This blocks execution until the user responds. Options:
If "Revise": incorporate feedback and re-present. If "More research": return to Phase 1.4 with user guidance.
REQUIRED: Delegate Phases 3 and 4 to a single background haiku agent. Raw tracker API responses consume ~26k tokens for a 6-issue project — the agent absorbs them and returns only a compact summary.
Dispatch after Phase 2 approval:
Compose the agent prompt with:
Dispatch:
Agent(
subagent_type="general-purpose",
model="haiku",
description="Create {tracker} structure for {project}",
prompt="<composed from approved scope + Phase 3-4 instructions>",
run_in_background=true
)
Agent return format (include verbatim in the prompt):
Return ONLY a compact summary (max 200 words):
- Parent ticket: ID + URL
- Project entity: ID + URL (or "skipped")
- Per milestone: name → ID
- Per ticket: ID → URL → milestone
- Blocking chain: confirmed/failed pairs
- Failures: entity + reason + remediation
Do NOT return full API response bodies or descriptions.
Phases 3 and 4 below describe what the agent executes — include the relevant instructions in the agent's prompt.
| Operation | Linear | JIRA | GitHub Issues |
|---|---|---|---|
| Create project | save_project (optional) | Epic via Dev10x:jira | N/A (use milestones) |
| Create milestone | save_milestone | Sprint/Fix Version via Dev10x:jira | gh api repos/{owner}/{repo}/milestones --method POST |
| Create label | (via save_issue) | (via Dev10x:jira) | gh label create |
| Create ticket | save_issue + milestone + project | via Dev10x:jira | gh issue create --milestone --label --body-file |
| Set blocking | save_issue blockedBy/blocks | Link via Dev10x:jira | Cross-reference in issue body (no native blocking) |
If free text: Invoke Skill(skill="Dev10x:ticket-create") to
create the parent ticket using the executive summary as description.
If ticket reference: Use the fetched ticket as parent.
REQUIRED: Call AskUserQuestion (do NOT use plain text, call spec: ask-project-entity.md).
This blocks execution until the user responds. Options:
After creating or selecting a project, resolve its UUID
immediately via list_projects(team: "TEAM_UUID") and store
it for all subsequent calls. Never pass a project name or slug
to save_issue — name matching is exact and fails silently.
See Dev10x:linear § Project Assignment for the full pattern.
Create milestones sequentially (tickets reference them by ID). Check for existing milestones by name before creating to avoid duplicates.
Create all tickets with milestone and project assignments. Use the project UUID resolved in 3.3 — never pass a display name. Batch creation is possible since all milestones exist at this point. Check for existing tickets by title before creating.
GitHub Issues batch pattern (10+ issues):
When creating many issues, use a sidecar metadata pattern to keep issue bodies clean and reduce permission friction:
BATCH_DIR=$(/tmp/Dev10x/bin/mktmp.sh -d gh-issues batch)
$BATCH_DIR/NNN-slug.md — clean body content only$BATCH_DIR/NNN-slug.vars — metadata:
TITLE="Ticket title here"
MILESTONE="Milestone Name"
LABELS="enhancement,area/payments"
for vars in $BATCH_DIR/*.vars; do
source "$vars"
body="${vars%.vars}.md"
gh issue create --repo "$REPO" --title "$TITLE" \
--body-file "$body" --milestone "$MILESTONE" --label "$LABELS"
done
This pattern was discovered in a session creating 36 issues — a single
loop approval replaced 36 individual gh issue create approvals.
Anti-patterns to avoid (permission friction):
gh commands:
gh issue edit --body "$(gh issue view ... | sed ...)" — the $() breaks
allow-rule prefix matching. Instead, write the body to a temp file first
via Write tool, then gh issue edit --body-file /tmp/file.md.gh commands with env var assignments:
REPO="owner/repo" gh issue create ... — the env prefix shifts the command
prefix. Use --repo owner/repo inline instead.Set blocking/blocked-by relationships between tickets per the approved blocking chain. Execute in parallel since all tickets exist.
Link all tickets to the project entity (if created in 3.3). Execute in parallel.
Re-fetch all created entities to verify:
get_issue(id) and confirm projectId matches the
expected UUID. Report any mismatches as failures in 4.3.Present a summary with:
Report any failures with:
| Scenario | Behavior |
|---|---|
| API failure | Retry once, then report with failed entity details |
| Partial creation | Report what succeeded, do not roll back |
| Duplicate detected | Skip creation, use existing entity, log warning |
| Relationship failure | Log and continue with remaining relationships |
| Trigger | Skill | Direction |
|---|---|---|
| Free-text needs parent ticket | Dev10x:ticket-create | Delegates to |
| Parent needs Job Story | Dev10x:jtbd | Delegates to (optional) |
| User refines a child ticket | Dev10x:ticket-scope | User invokes manually |
| User starts work on a ticket | Dev10x:work-on | User invokes manually |
Child tickets are NOT auto-scoped via Dev10x:ticket-scope.
High-level fidelity is intentional.