From jig
Creates well-written tickets for your team's tracker (Linear, GitHub, Jira) by interviewing the user and routing to the appropriate pack.
How this skill is triggered — by the user, by Claude, or both
Slash command
/jig:ticketThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**PURPOSE**: Create well-written tickets that clearly describe a problem or need — not the solution — for an audience that includes engineering, customer success, and leadership.
PURPOSE: Create well-written tickets that clearly describe a problem or need — not the solution — for an audience that includes engineering, customer success, and leadership.
CONFIGURATION: Reads jig.config.md for ticket-system (linear, github, jira), ticket-prefix, and branching.format.
| Ticket | Pull Request | |
|---|---|---|
| What it is | The problem / the need | The solution |
| Audience | Engineering, CS, leadership, PMs | Engineers and reviewers |
| Frame it as | "We need X because Y" | "Here's what changed and why" |
| Acceptance criteria | What done looks like | What was verified |
A ticket describes what needs to happen, not how it was done. Even for retroactive tickets (created after the work), frame the description around the problem that existed, not the code that was written.
Read jig.config.md for:
ticket-system — which tracker to use (linear, github, jira)ticket-prefix — the prefix for ticket identifiers (ENG, PROJ, etc.)branching.format — how to name the branch after ticket creation## Estimates — the team's estimate scale and unit (e.g., [0, 1, 2, 4, 16, 32] in hours)## {Tracker} section (e.g., ## Linear) — tracker-specific IDs like team ID and label mappingsThen load the tracker-specific pack from packs/{ticket-system}/ for tool calls and field mapping. The pack tells you how to call the tools; the config provides which IDs to use. If no pack exists for the configured system, fall back to asking the user to create the ticket manually and provide the URL.
Check if there's relevant session context. Use it to pre-fill the interview — don't ask for things you already know.
git rev-parse --abbrev-ref HEAD # current branch
git log main..HEAD --oneline # commits if work is in progress
Ask only what you don't already know. Keep it conversational — one question at a time if needed, but batch the obvious ones.
Always ask:
## Estimates from jig.config.md for the team's scale and unit. Offer a suggestion based on scope. If no estimates section exists, skip this field.Offer to fill in:
Retroactive tickets: When work is already done in the session, use that context to write the ticket, but frame it as the problem that existed, not the code that was written.
Plain language. Broad audience. Problem-first.
## Overview
{1-2 sentences. What is the need or problem? Who does it affect?}
## Background
{Why does this matter? What breaks or is missing without it? Skip if self-evident.}
## Acceptance Criteria
- {Concrete, testable statement of what "done" looks like}
- {Another criterion}
- {Another criterion}
Voice & tone:
Route to the configured ticket system. Each tracker pack provides the specific tool calls and field mapping.
Linear (via packs/linear/):
mcp__linear-server__save_issue)gitBranchName for branch creationGitHub Issues (via packs/github-issues/):
gh issue create --title "..." --body "..." --label "..."Jira (via packs/jira/):
After creating the ticket, set up the branch:
branching.format from jig.config.mdgitBranchName), use it directly{username}/{prefix}-{number}-{kebab-title}# On main — create and switch:
git checkout -b {branch-name}
# On a feature branch without ticket reference — rename:
git branch -m {current-branch} {branch-name}
Run the appropriate command automatically — don't just suggest it.
Report back:
ENG-1234)/jig:kickoff?"| Field | Rule |
|---|---|
| Title | Clear noun phrase. "Export button crash on empty list" not "Fix export" |
| Description | Problem-first. Plain language. Acceptance criteria at the bottom. |
| Issue type | Always set. Feature = new, Improvement = better, Bug = broken, Task = chore |
| Assignee | Optional. Ask who; leave unassigned if no answer. |
| Estimate | If tracker supports it. Suggest based on scope. |
| Mistake | Fix |
|---|---|
| Describing the solution in the ticket | Describe the problem. The PR describes the solution. |
| Engineering jargon in overview | Write it so CS could read it without explanation |
| Skipping acceptance criteria | Always include — they're how you know the work is done |
| Creating ticket without setting up branch | Always offer branch creation after ticket is filed |
| Forgetting issue type | Always required — it's the primary classification |
Called by:
kickoff during the DISCOVER stage (when no ticket exists)/jig:ticketRelated:
kickoff — the full pipeline that may invoke this during discoverypr-create — references the ticket in the PR bodycommit — references the ticket in commit messagesnpx claudepluginhub duronext/jig --plugin jigInteractively writes structured tickets (story, bug, epic, initiative, subtask, issue) with type-specific fields and quality checks. Outputs clean Markdown ready for any tracker.
Creates issues in the configured ticketing tool with a template, gathering context for actionable bug reports.
Creates structured tickets for bugs, features, improvements, or spikes from user input. Supports splitting into epics and children, manual grouping of existing tickets, and delivery to Supabase pipeline.