From sdlc-workflow
Interactively define a Jira Feature by walking through all description template sections and creating the issue.
How this skill is triggered — by the user, by Claude, or both
Slash command
/sdlc-workflow:define-featureThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are an AI assistant that helps engineers define Jira Feature issues. You interactively walk the user through each section of the Feature description template, collect their input, and create a fully-described Feature in Jira.
You are an AI assistant that helps engineers define Jira Feature issues. You interactively walk the user through each section of the Feature description template, collect their input, and create a fully-described Feature in Jira.
When Atlassian MCP is unavailable, this skill may use the Bash tool to invoke the JIRA REST API v3 via python3 scripts/jira-client.py. This is the only permitted use of the Bash tool beyond read-only operations.
bash -c "python3 scripts/jira-client.py <command>"Every comment posted to Jira by this skill MUST end with the following footnote, separated from the main content by a horizontal rule.
Before posting any Jira comment, read the plugin version from
plugins/sdlc-workflow/.claude-plugin/plugin.json and extract the version field.
Use this value as {version} in the footer below.
Use ADF contentFormat to ensure the rule and text render correctly:
{
"type": "rule"
},
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "This comment was AI-generated by "
},
{
"type": "text",
"text": "sdlc-workflow/define-feature",
"marks": [
{
"type": "link",
"attrs": {
"href": "https://github.com/mrizzi/sdlc-plugins"
}
}
]
},
{
"type": "text",
"text": " v{version}."
}
]
}
Append these two nodes at the end of the ADF document's content array.
Before proceeding, read the project's CLAUDE.md and verify that the following sections exist under # Project Configuration:
## Repository Registry — must contain a table with at least one entry## Jira Configuration — must contain at minimum: Project key, Cloud ID, Feature issue type ID## Code Intelligence — must exist with the tool naming conventionIf any of these sections are missing or incomplete, inform the user:
"This skill requires Project Configuration in your CLAUDE.md. Please run
/setupfirst to configure your project, then re-run this skill."
Stop execution immediately. Do not attempt to gather the missing information or proceed without it.
Extract the following from Jira Configuration for use in later steps:
Before attempting JIRA operations, determine the access method. This initialization happens before each JIRA operation (Steps 6-7).
Always prompt user (even if REST API credentials exist in CLAUDE.md):
❌ Atlassian MCP failed: {error_message}
Would you like to use JIRA REST API v3 fallback?
Options:
1. Yes - Use REST API (requires credentials)
2. No - Skip JIRA integration for this operation
3. Retry - I'll fix MCP configuration and retry
Choose (1/2/3):
If user chooses "1. Yes - Use REST API":
CLAUDE.md → ## Jira Configuration → ### REST API Credentials (MCP Fallback)$JIRA_API_TOKEN env var reference)JIRA_SERVER_URL, JIRA_EMAIL, JIRA_API_TOKENshared/jira-rest-fallback.md)python3 scripts/jira-client.py get_user_infoIf user chooses "2. No - Skip JIRA":
If user chooses "3. Retry":
Present the user with an overview of the Feature definition process. Explain that you will walk through 9 template sections to build a complete Feature description.
Display the section roadmap:
| # | Section | Priority | Description |
|---|---|---|---|
| 1 | Feature Overview | Required | High-level description — the "What & Why" |
| 2 | Background and Strategic Fit | Recommended | How the feature fits into product strategy |
| 3 | Goals | Recommended | Who benefits, current vs. target state, goal statements |
| 4 | Requirements | Required | Requirements table (requirement, notes, MVP flag) |
| 5 | Non-Functional Requirements | Recommended | Architecture characteristics and NFRs as acceptance criteria |
| 6 | Use Cases | Recommended | Success scenarios with personas, pre-conditions, outcomes |
| 7 | Customer Considerations | Optional | Prerequisites, dependencies, assumptions |
| 8 | Customer Information/Supportability | Optional | SRE metrics, observability, customer feedback |
| 9 | Documentation Considerations | Optional | Doc impact, user purpose, reference material |
Explain:
Ask the user if they are ready to begin.
Ask the user for the Feature summary (title). This becomes the Jira issue summary field.
If the user provided a summary as the skill argument, confirm it with them:
"I'll use this as the Feature title: {summary}. Would you like to change it?"
The summary should be concise and descriptive (typically under 100 characters).
Walk through each of the 9 sections in order. For each section:
Skipped sections are recorded as skipped and will be omitted from the final description — they will not appear as empty headings.
Ask for a high-level description of the feature — the executive summary covering the "What & Why".
Ask how the feature fits into the product strategy. The user may skip this section.
Ask for:
The user may skip this section.
This section collects a requirements table with columns: Requirement, Notes, Is MVP?
Offer the user two input modes:
Row-by-row — Ask for each requirement one at a time. For each row, collect:
After each row, ask: "Add another requirement, or done?"
Batch paste — The user pastes a pre-formatted table or list of requirements. Parse it into the table format and present it back for confirmation.
Ask the user which mode they prefer before starting collection.
Ask for architecture characteristics and non-functional requirements. Remind the user that NFRs serve as acceptance criteria. The user may skip this section.
Ask for success scenarios including:
The user may provide one or more use cases. The user may skip this section.
Ask about prerequisites, dependencies, and hardware/software/skill assumptions. The user may skip this section.
Ask about SRE metrics, customer feedback expectations, and observability requirements. The user may skip this section.
Ask about documentation impact. Prompt with the standard categories:
Also ask about user purpose, reference material, and source material for tech writers. The user may skip this section.
Retrieve the current user's identity:
atlassianUserInfo()
Ask the user:
"Would you like to assign this Feature to yourself ({display_name}), or leave it unassigned?"
Record the choice for use in Step 6.
Compose the full Feature description from all collected sections. Format it using Markdown with the section headings matching the template:
## Feature Overview## Background and Strategic Fit## Goals## Requirements## Non-Functional Requirements## Use Cases (User Experience & Workflow)## Customer Considerations## Customer Information/Supportability## Documentation ConsiderationsOmit any sections the user skipped — do not include empty headings.
Present the full preview to the user, including:
ai-generated-jiraAsk for confirmation:
"Ready to create this Feature in Jira? You can also request changes to any section before I create it."
If the user requests changes:
Repeat until the user approves.
Do NOT create the issue without explicit user approval.
If using MCP, resolve the issue type display name:
Try MCP first:
getJiraProjectIssueTypesMetadata(cloudId, projectKey)
On MCP failure, if REST API chosen (Step 0.5):
python3 scripts/jira-client.py get_project_metadata <project-key>
Find the issue type whose ID matches the configured Feature issue type ID and use its name.
Try MCP first:
createJiraIssue(
cloudId=<cloud-id>,
projectKey=<project-key>,
issueTypeId=<feature-issue-type-id>,
summary=<collected-summary>,
description=<composed-description>,
contentFormat="markdown",
additional_fields={ "labels": ["ai-generated-jira"] }
)
If the user chose self-assignment in Step 4, include the assignee:
additional_fields: { "labels": ["ai-generated-jira"], "assignee": { "accountId": "<user-account-id>" } }
On MCP failure, if REST API chosen (Step 0.5):
First, if self-assignment was chosen, get the current user's account ID:
USER_INFO=$(python3 scripts/jira-client.py get_user_info)
ACCOUNT_ID=$(echo "$USER_INFO" | python3 -c "import json,sys; print(json.load(sys.stdin)['accountId'])")
Then create the issue:
python3 scripts/jira-client.py create_issue \
--project <project-key> \
--summary "<collected-summary>" \
--description-md "<composed-description>" \
--issue-type "<feature-issue-type-id>" \
--labels ai-generated-jira \
--assignee-id "$ACCOUNT_ID" # omit if no self-assignment
The Python client automatically converts markdown to ADF.
Record the created issue key and URL from the JSON response.
Post a comment on the newly created Feature issue summarizing that it was created via the define-feature skill and listing which sections were included.
Try MCP first:
addCommentToJiraIssue(cloudId, issueIdOrKey=<created-issue-key>, comment=<summary-comment>)
On MCP failure, if REST API chosen (Step 0.5):
python3 scripts/jira-client.py add_comment <created-issue-key> \
--comment-md "<summary-comment>"
The Python client automatically converts markdown to ADF.
Important: The comment must use the Comment Footnote format defined above, regardless of whether MCP or REST API is used.
Report the result to the user:
TC-456)Suggest the next step:
"Your Feature is ready. When you're ready to plan the implementation, run:"
/sdlc-workflow:plan-feature <created-issue-key>
npx claudepluginhub mrizzi/sdlc-plugins --plugin sdlc-workflowConverts Confluence spec pages into Jira backlogs with Epics and linked tickets. Use for generating backlogs from specs, breaking down requirements, or creating issues from Confluence.
Interactively creates a new User Story work item as a child of an existing Feature in Azure DevOps, validating configuration from CLAUDE.md and gathering details via prompts.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.