Step 1 โ Resolve project context
Before scanning any sources, determine:
- Jira project key โ ask if not provided, or infer from context (e.g. recent conversation, project name)
- Cloud ID โ use the Atlassian Cloud ID from your project context (e.g.
yourorg.atlassian.net). If not set, ask the user. - Ticket language โ ask if unclear; default to English
If no project key is provided and context is ambiguous, ask:
"Which Jira project should I create tickets in? (e.g. ACME, PROJ, WEB...)"
Step 2 โ Gather context
A) Source provided (link, note, channel, ticket)
Use the provided source directly.
B) No source provided
Automatically scan in parallel:
- Slack โ search channels related to the project (last 48h). Look for mentions of new features, issues, decisions, tasks.
- Fireflies โ fetch meeting transcripts from the last 7 days. Extract action items and topics that need tickets.
After gathering: provide a short summary of found topics and ask which ones should be logged as tickets.
C) Existing Jira ticket provided
Fetch the ticket and propose breaking it into smaller sub-tasks or filling in missing fields.
Step 3 โ Determine ticket type and structure
Select type based on context:
| Situation | Ticket type |
|---|---|
| New feature / functionality | Story |
| Technical task, configuration, refactor | Task |
| Reported bug | Bug |
| Large functional area (โฅ3 stories) | Epic + child Stories |
| Part of a larger task | Sub-task (linked to Story/Task) |
If the input describes a large feature:
- Create an Epic with a short description (no AC)
- Break it into Stories โ each with a full description and AC
- Propose the structure before generating the draft
If unsure about the type โ ask.
Step 4 โ Fetch Epic list from Jira
Before generating the draft, fetch current epics from the resolved project:
JQL: project = <KEY> AND issuetype = Epic AND statusCategory != Done ORDER BY created DESC
Display the epic list (key + title) and ask which one to link the new tickets to. If none fits โ propose creating a new epic or leaving the field empty.
Step 5 โ Generate ticket drafts
Scope signal โ 1 ticket or multiple?
Before drafting, check:
- If the input describes one user-facing capability โ 1 Story
- If it describes one internal change (refactor, config, migration) โ 1 Task
- If it describes multiple independent user capabilities โ Epic + Stories
- If any single piece would take more than one sprint to complete โ break it down
- If someone says "and also..." more than twice in describing one thing โ likely needs splitting
When splitting: propose the breakdown before drafting tickets, and get confirmation on the structure.
Format for each ticket (display in chat):
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
[STORY / TASK / BUG] <KEY>-XXX (draft)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Title: <Concise, action-oriented title>
Type: Story | Task | Bug | Epic | Sub-task
Epic: <Epic title or "โ none โ">
Parent: <Parent ticket key, if sub-task>
As a <user role>, I want <action> so that <value>.
[For Task / Bug โ a short paragraph describing the problem/task instead of user story format]
[Context: 1โ2 sentences explaining background a new reader would need. Assume the reader
hasn't been in any recent meetings about this.]
---
## Acceptance Criteria
- <condition 1>
- <condition 2>
- <condition 3>
---
## Notes / Open Questions
- โ ๏ธ [Needs clarification: <question>] โ only if info is missing
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Notes / Open Questions section is only included when there are actual open questions or โ ๏ธ flags.
Description quality rules
User story format (Stories):
- Role must be specific: "logged-in user", "admin", "warehouse manager" โ not just "user"
- Action must be concrete: "filter products by category" โ not "use the filtering feature"
- Value must explain why it matters, not restate the action: "so that I can find relevant items without scrolling" โ not "so that filtering works"
Task/Bug format:
- 2โ4 sentences. Describe the problem or task clearly enough that a developer who missed all meetings can understand what to do.
- For bugs: include (1) what the current behaviour is, (2) what the expected behaviour is, (3) steps to reproduce if known.
- Don't pad. If it takes one sentence, one sentence is fine.
Context field:
- Always include 1โ2 sentences of background that wouldn't be obvious from the title alone.
- Assume zero context: the assignee may not have been in the meeting where this was discussed.
Acceptance Criteria rules
How many: aim for 3โ6 AC per Story. Fewer suggests the scope isn't fully thought through; more suggests the ticket should be split.
What "testable" actually means: a QA engineer or the PM should be able to verify each criterion without asking a question. If verifying it requires a judgement call, rewrite it.
| โ Not testable | โ Testable |
|---|---|
| The UI looks good | All elements follow the design file at [link] |
| Fast loading | Page loads within 2 seconds on a 4G connection |
| Proper error handling | An error message is shown when the form is submitted with an empty required field |
| Works on mobile | Layout matches the mobile breakpoint in Figma on screens โค 375px |
Format: flat bullet list. No sub-points. Each criterion is one line.
- Start with the actor: "User can...", "System shows...", "Admin receives..."
- Use present tense: "User sees X" not "User will see X"
- Epics have no AC โ only a 2โ3 sentence scope description
If context is insufficient to write meaningful AC โ ask before generating, do not guess.
Step 6 โ Ask for approval
After displaying the draft, ask:
"Does this draft look good? I can make edits before creating tickets in Jira. Should I assign to the active sprint or leave in the backlog?"
- Default: backlog (no sprint assignment)
- If asked about a sprint: fetch the active sprint and ask for confirmation
Step 7 โ Create tickets in Jira
After approval, create tickets via Jira API (Atlassian MCP):
Creation order:
- Epic (if new)
- Stories / Tasks
- Sub-tasks (after parents are created)
- Bugs with a relation to the linked Story/Task (if indicated)
Fields to set:
summaryโ titleissuetypeโ typedescriptionโ use ADF format (contentFormat: "adf") with this exact structure:- Paragraph โ user story / task description + context (no heading)
rulenode โ horizontal dividerheadinglevel 2 โ "Acceptance criteria"bulletListโ AC items- (if open questions exist)
rulenode โ horizontal divider - (if open questions exist)
headinglevel 2 โ "Notes / Open Questions" - (if open questions exist)
bulletListโ open questions / โ ๏ธ flags
parent/customfield_10014โ epic link (if applicable)projectโ{ key: "<KEY>" }
ADF structure reference:
{
"type": "doc",
"version": 1,
"content": [
{ "type": "paragraph", "content": [{ "type": "text", "text": "As a <role>, I want <action> so that <value>.\n\nContext: ..." }] },
{ "type": "rule" },
{ "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "Acceptance criteria" }] },
{ "type": "bulletList", "content": [
{ "type": "listItem", "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "<criterion>" }] }] }
]},
{ "type": "rule" },
{ "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "Notes / Open Questions" }] },
{ "type": "bulletList", "content": [
{ "type": "listItem", "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "โ ๏ธ ..." }] }] }
]}
]
}
Omit the Notes section (and its preceding rule) if there are no open questions.
After creation: display links to all created tickets.
General rules
- Always ask when information is missing, or unsure about scope, type, assignee, or priority โ do not guess and do not leave fields empty without flagging it
- Never create tickets without approval of the draft
- Do not log day-to-day UX micro-decisions or obvious clarifications โ only items with real scope of work
- Proactively suggest splitting into sub-tasks if a task is too large for a single ticket
- Flag โ ๏ธ in the Notes section when a ticket requires additional input from the client or another team