.github/skills/tsh-jira-task-formatting/SKILL.md
Transform extracted epics and user stories into Jira-ready format following a benchmark template. Handles field mapping, formatting for Jira markdown compatibility, two-gate user review, and guidance for Jira issue creation via Atlassian tools.
npx skillsauth add thesoftwarehouse/copilot-collections tsh-jira-task-formattingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill helps you transform an extracted task list (epics and user stories) into a Jira-ready format that can be directly pushed to Jira. It applies a consistent benchmark template to every task, validates completeness, and manages a two-gate review process before any issues are created.
Use the checklist below and track your progress:
Formatting progress:
- [ ] Step 1: Load the benchmark template and extracted tasks
- [ ] Step 2: Format each epic for Jira
- [ ] Step 3: Format each story for Jira
- [ ] Step 4: Validate completeness against benchmark
- [ ] Step 5: Flag uncertain fields and ask user
- [ ] Step 6: Formatting Review — User reviews formatted markdown
- [ ] Step 7: Save the Jira-ready tasks document
- [ ] Step 8: Push Approval — User approves Jira push
- [ ] Step 9: Create issues in Jira
Step 1: Load the benchmark template and extracted tasks
Load two inputs:
./jira-task.example.md) which defines the expected structure and fields for Jira epics and storiesextracted-tasks.md) produced by the tsh-task-extracting skillReview the benchmark template to understand:
Step 2: Format each epic for Jira
For each epic in the extracted tasks document, create a Jira-ready epic entry with:
Protected Status Guard: If an epic has a protected status (Done, Cancelled, PO APPROVE), preserve its content exactly as imported. Do not reformat, reword, or modify any fields. Mark it with
🔒in the output and skip all formatting steps below for this epic.
Step 3: Format each story for Jira
For each user story, create a Jira-ready story entry with:
Protected Status Guard: If a story has a protected status (Done, Cancelled, PO APPROVE), preserve its content exactly as imported. Do not reformat, reword, or modify any fields. Mark it with
🔒in the output and skip all formatting steps below for this story.
Step 4: Validate completeness against benchmark
Protected Status Guard: Skip completeness validation for tasks with a protected status (Done, Cancelled, PO APPROVE) — their content is preserved as-is and is not subject to benchmark compliance.
Cross-check every formatted task against the benchmark template:
Create a summary table showing completeness status for each task.
Step 5: Flag uncertain fields and ask user
Protected Status Guard: Do not flag or ask the user about fields on tasks with a protected status (Done, Cancelled, PO APPROVE). These tasks are read-only and their fields cannot be changed.
For any task where:
Use askQuestions to get user input. Ask exactly one question per askQuestions call, each scoped to a single epic or story. The question must identify which task has the uncertain field and what field is missing (e.g., "[Epic 2: Payment Processing > Story 2.1: User can checkout] The priority for this story could not be determined from the workshop materials. Should it be High (core MVP) or Medium (post-MVP)?"). Do not proceed to the review gate until all flags are resolved.
Step 6: Formatting Review — User reviews formatted markdown
Present the formatted output to the user for review. If changes were made during formatting (e.g., rewording, priority adjustments), present each changed task individually using one askQuestions call per task, identifying the specific epic/story and the change made. Ask: "Is this change acceptable?"
After all individual changes are reviewed, ask one workflow-level question: "All formatting is complete. Are you happy with these tasks? Any final changes before I proceed to save and push?"
The user must explicitly approve before proceeding. If changes are requested, update and re-present the affected tasks individually.
Step 7: Save the Jira-ready tasks document
Generate the final output following the ./jira-task.example.md template format.
Include the Jira Key field for every epic and story. For newly formatted tasks (not yet pushed to Jira), set the Jira Key to — as a placeholder. For tasks imported from Jira or previously pushed, preserve their existing Jira key.
Save the file to specifications/<workshop-name>/jira-tasks.md.
Step 8: Push Approval — User approves Jira push
Before creating any issues in Jira, confirm with the user:
This is the final gate — after this, issues will be created in Jira.
Step 9: Create or update issues in Jira
Before pushing, present a sync summary to the user:
—) — list titles and countPROJ-123, and status is NOT protected) — list titles, keys, and countUsing the Atlassian tools, process issues based on their Jira Key:
For tasks without a Jira Key (create):
jira-tasks.md with the returned Jira issue key — do not wait until all issues are createdjira-tasks.md with its Jira keyFor tasks with an existing Jira Key (update):
After all issues are processed, report the final state back to the user — showing all Jira keys in jira-tasks.md and confirming which were created, updated, and skipped (with their statuses).
If any issue creation or update fails, inform the user immediately and ask how to proceed.
When the user requests a change to a specific task outside of the main formatting workflow (e.g., "add acceptance criteria to Story 2.3" or "change the priority of Epic 1"):
jira-tasks.md first — apply the requested change to the fileaskQuestions call)—), inform the user that the task has not been pushed yet and offer to create itjira-tasks.md until the next batch pushWhen formatting descriptions and acceptance criteria for Jira:
h2., h3. for headings (not ##, ###)*bold* for bold text (not **bold**)_italic_ for italic text (not *italic*)* item for bullet lists (with space after asterisk)# item for numbered lists{noformat} or {code} blocks for preformatted text(/) criterion for checklist items (Jira checkbox format)Note: The markdown file saved locally uses standard markdown. The Jira-specific formatting is applied only when creating the actual issues.
This is an alternative entry point for the skill. Instead of formatting extracted tasks, the agent fetches existing Jira issues and converts them into the jira-tasks.md format with Jira keys pre-populated. This enables iterating on existing Jira backlogs using the agent's skills.
Import progress:
- [ ] Step I-1: Identify import target
- [ ] Step I-2: Fetch issues from Jira
- [ ] Step I-3: Map Jira fields to benchmark template
- [ ] Step I-4: Generate jira-tasks.md
- [ ] Step I-5: Present imported tasks for user review
- [ ] Step I-6: Save to specifications directory
Step I-1: Identify import target
Ask the user to specify what to import. Accept any of these:
PROJ) — imports all epics and their linked storiesPROJ-10, PROJ-15) — imports those epics and their child storiesUse one askQuestions call to determine the import scope if the user hasn't specified it.
Step I-2: Fetch issues from Jira
Using the Atlassian MCP tools:
Step I-3: Map Jira fields to benchmark template
Convert each fetched issue into the benchmark template format:
| Jira Field | Template Field | Notes |
|---|---|---|
| Summary | Title (Summary) | Direct mapping |
| Description | Description sections | Parse into structured sections (Overview/Value/Metrics for epics; Context/User Story/Requirements/Technical Notes for stories). If the Jira description does not follow a structured format, restructure it to match the template as closely as possible. |
| Priority | Priority | Direct mapping (Highest/High/Medium/Low) |
| Labels | Labels | Direct mapping |
| Issue Key | Jira Key | Populate directly (e.g., PROJ-123) |
| Parent link | Parent epic reference | Map to parent epic title |
| Story Points | Story Points / Sizing Guidance | If estimated, include; otherwise mark as TBD |
| Status | Status | Direct mapping of the Jira workflow status (e.g., To Do, In Progress, Done). Used to enforce the Protected Status Policy. |
If an imported description cannot be cleanly restructured into the benchmark format, flag it for user review using one askQuestions call per flagged task.
Protected Status Handling on Import: After mapping all fields, check each imported task's Status. If the status is Done, Cancelled, or PO APPROVE, mark the task as read-only by adding a
🔒indicator next to its title. These tasks are imported for visibility but must never be modified locally or pushed back to Jira. Preserve their content exactly as fetched.
Step I-4: Generate jira-tasks.md
Create the jira-tasks.md file with all imported tasks in the benchmark template format. Every task must have its Jira Key field populated with the actual Jira issue key.
Step I-5: Present imported tasks for user review
Present each imported task to the user for review using one askQuestions call per task. Highlight any descriptions that were restructured or fields that could not be mapped cleanly. Ask: "Does this imported task look correct?"
Step I-6: Save to specifications directory
Save the final file to specifications/<project-or-topic>/jira-tasks.md.
After import, the user can modify the local file. For each change, the agent asks whether to push it to Jira immediately (using the Per-Change Modification Flow above). The user can also batch-push all local changes later using the standard push flow (Step 8 → Step 9).
tsh-task-extracting - provides the extracted tasks used as input for formattingdevelopment
Custom hook and composable patterns — naming, composition, stable return shapes, lifecycle cleanup, and testing strategies. Use when writing reusable logic units (React hooks, Vue composables), refactoring logic into hooks, debugging hook behavior, or reviewing hook implementations.
testing
UI verification criteria, structure checklists, severity definitions, and tolerance rules for comparing implementations against Figma designs. Use for verifying UI matches design, understanding what to check, and determining acceptable differences.
development
Clean raw workshop or meeting transcripts from small talk, filler words, and off-topic tangents. Extract and structure business-relevant content into a standardized format with discussion topics, key decisions, action items, and open questions.
development
Discover and establish technical context before implementing any feature. Prioritize project instructions, existing codebase patterns, and external documentation in that order. Use for any task requiring understanding of project conventions, coding standards, architecture patterns, and established practices before writing code.