jira-init
Initialize Jira project config for the current repository, generating config.md in <JIRA_FOLDER>
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Initialize Jira project config for the current repository, generating config.md in <JIRA_FOLDER>
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Read HANDOFF.md and continue from where we left off
Use when ending a session, completing a milestone, or stopping mid-task and context must be preserved for the next agent
Use when organizing raw content into slide-ready format, or when the user says "prepare slides", "structure this for a presentation", "brief for pptx".
Use when the user shares a URL or article and asks to extract key learnings, summarize topics, or generate a digest formatted for Google Chat, Slack, Discord, Telegram, or similar messaging tools. Accepts an optional format parameter.
Use when working with Kubernetes clusters, manifests, and related tasks.
Use when writing a CV, bio, LinkedIn post, or talk abstract for Silvio; when calibrating technical recommendations to Silvio's experience ("do I have experience with X?"); or when an introduction or speaker section is needed. Loads timeline, stack, credentials, and preferences on demand via the pointer table.
| name | jira-init |
| description | Initialize Jira project config for the current repository, generating config.md in <JIRA_FOLDER> |
Use the jira-workflow skill for MCP operations.
All user-facing messages must use the language specified in the user's CLAUDE.md (e.g. Always respond in pt-BR). If no language is specified there, fall back to the system default.
<JIRA_FOLDER> is the folder where config.md and task files will be stored. It can be version-controlled (e.g. /jira) or local (e.g. .jira/). The default value is .jira/.
Initializes the Jira configuration for the current project, generating <JIRA_FOLDER>/config.md
with required fields discovered via MCP. Should be run once per project.
Check whether <JIRA_FOLDER>/config.md already exists.
Ask: "Do you have a config.md from another project you want to reuse as a starting point?"
Accept either:
~/other-project-folder/jira_folder_into_other_project/config.md)<JIRA_FOLDER>/config.md inside it. Try both ~/other-project-folder/<JIRA_FOLDER>/config.md and ~/other-project-folder/.jira/config.md — if both exist, ask which one to use)If found, show its contents and ask: "Is this the right project? Reuse as-is or adapt it?"
<JIRA_FOLDER>/config.md in the current repo and skip to step 9 (storage).If the user declines or provides nothing, continue normally. Do not instruct the user to press Enter — always ask them to reply or confirm to continue.
If the Atlassian MCP server is not active, run:
claude mcp add --transport http atlassian https://mcp.atlassian.com/v1/mcp
Then read .claude/settings.local.json and check whether the read-only Atlassian permissions are already present. If not, suggest adding the block below and ask before making any change:
{
"permissions": {
"allow": [
"mcp__atlassian__atlassianUserInfo",
"mcp__atlassian__getJiraIssue",
"mcp__atlassian__getAccessibleAtlassianResources",
"mcp__atlassian__searchJiraIssuesUsingJql",
"mcp__atlassian__search",
"mcp__atlassian__getTransitionsForJiraIssue",
"mcp__atlassian__getConfluencePage",
"mcp__atlassian__getConfluenceSpaces",
"mcp__atlassian__getPagesInConfluenceSpace",
"mcp__atlassian__getConfluencePageDescendants",
"mcp__atlassian__getConfluencePageFooterComments",
"mcp__atlassian__getConfluencePageInlineComments",
"mcp__atlassian__getConfluenceCommentChildren",
"mcp__atlassian__getVisibleJiraProjects",
"mcp__atlassian__getJiraProjectIssueTypesMetadata",
"mcp__atlassian__getJiraIssueTypeMetaWithFields",
"mcp__atlassian__getIssueLinkTypes",
"mcp__atlassian__getJiraIssueRemoteIssueLinks",
"mcp__atlassian__lookupJiraAccountId",
"mcp__atlassian__fetch",
"mcp__atlassian__searchConfluenceUsingCql"
]
}
}
These are read-only operations. Write permissions (
createJiraIssue,editJiraIssue,transitionJiraIssue,addCommentToJiraIssue) are intentionally excluded so that Claude prompts for confirmation before any mutating action.
In parallel:
getAccessibleAtlassianResources → get cloudId and site base URLatlassianUserInfo → get the logged-in user's display nameCall getVisibleJiraProjects. If the response is saved to a file (tool output too large), run:
python3 scripts/parse_projects.py <path-to-tool-output-file>
This prints KEY | Name | projectTypeKey per project. Show the list and ask the user to choose.
Ask: "Do you have an existing Jira issue key from this project to use as a reference for field values? (e.g. PROJ-123 or full URL like https://account.atlassian.net/browse/PROJ-123)"
If provided:
getJiraIssueTypeMetaWithFields for the Story issue type to discover all custom field IDs.
If the response is saved to a file, run:
python3 scripts/parse_fields.py <path-to-tool-output-file>
The output now includes schema.type and operations. Collect:
customfield_XXXXX IDs that appear here → these are the writable fields (they exist on the create screen).schema_type and whether ops includes set.getJiraIssue with fields set to the discovered custom field IDs plus ["labels", "priority", "issuetype", "parent"].customfield_* values and labels → use as candidate values for additional_fields.
Cross-reference rule: Only include a field in additional_fields if it appears in both:
ops containing set, ANDlabels is a standard Jira field — if the reference issue has a non-empty labels array, include it in additional_fields with its exact value. Do NOT treat it as optional or context-dependent.allowedValues: use {"id": "<id>"} from the matching allowed value.autoCompleteUrl but no allowedValues (e.g. Team, user pickers): they ARE user-settable — derive the write format from the GET value. For object types, use {"id": "<id>"} (drop name/avatar/other metadata). Do NOT treat these as auto-populated just because they have no fixed list.allowedValues nor autoCompleteUrl and an opaque system schema (e.g. devsummarycf, vulnerabilitycf, lexo-rank): these are system-managed — exclude them.Why discover fields first:
customfield_*is not a valid wildcard in the Jira API — only fields explicitly listed infieldsare returned. Custom fields can have IDs above 11000 (e.g.customfield_11550) and are invisible if you hardcode a low range like 10000–10036.
Why cross-reference with create screen: a field present in GET but absent from
getJiraIssueTypeMetaWithFieldsis not settable during issue creation — including it causes a 400 error. The authoritative signal is presence in the create screen withops: [set], not the field's schema type. Fields withautoCompleteUrl(e.g. Team) are user-settable even though they have no fixedallowedValues.
If not provided, continue to step 7.
For Story and Task issue types: getJiraIssueTypeMetaWithFields.
If the response is saved to a file, run:
python3 scripts/parse_fields.py <path-to-tool-output-file>
This prints REQUIRED/optional | fieldId | name | allowed values.
For each non-obvious custom field that has allowedValues (and is not issuetype, project, reporter, summary):
ask "Should <name> (<fieldId>) be set on every issue? If so, which value?"
Ask: "Are there required labels for the board to filter correctly?"
.gitignoreAsk whether the user wants to version-control Jira files in this repository.
Yes (version-controlled):
/jira as the folder but allow the user to specify another path — use whatever they confirm.No (local):
.jira/ as the Jira folder but allow the user to specify another path — use whatever they confirm..gitignore:
grep -xF '.jira/' .gitignore — if it matches exactly → skip..jira/ to .gitignore and ask before making any change.After the decision:
config.md under ## Paths (see format below). config.md itself always lives at .jira/config.md regardless of where task files are stored.JIRA_FOLDER=<resolved_path> into the project's CLAUDE.local.md (if local/unversioned) or CLAUDE.md (if version-controlled). Ask before writing. This allows future sessions to locate the Jira folder without needing to search for it.<JIRA_FOLDER>/config.mdCreate the directory <JIRA_FOLDER>/ if it doesn't exist, then write config.md.
Use the format below. Include the cloudId discovered in step 4 and the issue types table from the
project metadata. Add a note about epic linking if detectable from the reference issue or field metadata
(parent field accepted → use parent; otherwise use customfield_10014).
Read .claude/settings.local.json (create it if absent). Check whether a PreToolUse hook for Write already calls validate-task-file.py. If not, merge the following into the file — ask before writing (resolve <JIRA_FOLDER> from previous steps):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "python3 ~/.claude/skills/jira-workflow/scripts/validate-task-file.py <JIRA_FOLDER>"
}
]
}
]
}
}
This hook blocks any Write to
*/<JIRA_FOLDER>/*.mdwhose content does not match the required task file format, providing an immediate error message and instructing Claude to usecreate-task-file.pyinstead.
<JIRA_FOLDER>/config.md# Jira Project Config
**Project:** <PROJECT_KEY>
**Site:** <https://account.atlassian.net>
**cloudId:** <uuid>
**Owner:** <user display name>
## Paths
- **Jira folder:** `<JIRA_FOLDER>`
## Issue creation — required fields
When creating any issue via `mcp__atlassian__createJiraIssue`, include in `additional_fields`:
```json
{
"labels": ["<LABEL>"],
"<customfield_xxxxx>": <value>
}
<customfield_xxxxx>— : <why it's set, e.g. "board filters by this field">
Use contentFormat: "markdown" for description and comment fields.
| Name | ID | Hierarchy |
|---|---|---|
| Epic | ... | 1 |
| Story | ... | 0 |
| Task | ... | 0 |
parent field (or customfield_10014 if parent is not accepted)customfield_10020customfield_10034Re-run
/jira-initto update this file if project structure changes.