Skip to content

Instantly share code, notes, and snippets.

@compwron
Created April 10, 2026 23:16
Show Gist options
  • Select an option

  • Save compwron/5bb76cc45b04460264e2625558e52a07 to your computer and use it in GitHub Desktop.

Select an option

Save compwron/5bb76cc45b04460264e2625558e52a07 to your computer and use it in GitHub Desktop.
create-jira-issue Claude Code skill
name create-jira-issue
description Create a Jira issue in the WF project using the Jira REST API. Use when you need to create Initiative, Epic, Story, Bug, Chore, Spike, or Task issues with required custom fields for Balanced Team, Work Type, and Focus Area. Supports optional parent key for nesting under epics.

Create Jira Issue

Create a Jira issue in the WF project using the Jira REST API with credentials from ~/.netrc.

Usage

/create-jira-issue

Then provide issue details when prompted, or create directly if all details are provided in the request.

What It Does

  1. Gathers Issue Details - Collects summary, issue type, balanced team, work type, focus area, and optional description
  2. Resolves Parent - If a parent issue key is provided, fetches its Balanced Team, Focus Area, and Work Type to use as defaults
  3. Maps Issue Types - Converts human-readable types (Story, Bug, etc.) to Jira API IDs
  4. Creates Issue - Uses Jira REST API with curl and netrc authentication
  5. Returns Issue Link - Provides the created issue key and URL

Examples

Interactive Creation

/create-jira-issue

Direct Creation (when all details provided)

Create a Jira issue in WF project with title "Fix login bug", type Bug, team "Cat Crew", and description "Users cannot log in after password reset"

Story Under an Epic

Create a Jira story "Add retry logic to fax sender" under WF-40000, team Cat Crew, description "Retries on transient failures"

Issue Types

Type ID Description
Chore 10021 Maintenance tasks
Initiative 10045 Sits above Epic, represents goals of a collection of Epics
Epic 10000 Large initiatives, collections of related bugs, stories, and tasks
Story 10019 New features or enhancements expressed as user goals
Bug 10020 Defects or errors
Spike 10044 Research/exploration to understand a problem space with a delivered artifact
Task 10001 Small, distinct pieces of work
Sub-task 10002 Part of a larger task

Required Fields

All issues require:

  • Summary — Issue title
  • Balanced Team — Which team owns this (default: Cat Crew / 10423)
  • Work Type — Type of work (default: Product Health / Maintenance / 10744)
  • Focus Area — Business domain area (default: Company Foundations / 10609)
  • Issue Type — See table above (default: Chore / 10021)

Parent / Epic Linking (Optional)

When creating a Story, Bug, Task, etc. under an Epic, provide the parent key:

  • Parent Key - e.g. WF-12345

When a parent is specified:

  1. Fetch the parent issue: GET /rest/api/3/issue/{key}?fields=customfield_10129,customfield_10286,customfield_10219
  2. Use its Balanced Team, Work Type, and Focus Area as defaults (user-provided values override)
  3. Set the parent field in the create payload: "parent": {"key": "WF-12345"}

Balanced Teams (customfield_10129)

Team Option ID Typical Focus Area
Cat Crew 10423 Company Foundations
Needs Triage 10435 Company Foundations
Demand Ordering 10676 New Orders
Clinical Intelligence 10424 Clinical Qualification
DestroyTheFax 10420 AI Fax Intake
DevOps 10428 Company Foundations
Expanse 10425 Multi-Actor Ordering
Jedi 10500 Order Management & Notifications
PayPals 10422 Payor & Patient Interactions
Foundations 10709 Company Foundations
Nexus 10581 Company Foundations
EligibilityBenefits 10841 Supplier E&B
Labs 10940 Company Foundations
Triaged to Guild 10483 Company Foundations
Speedshop 11043 Company Foundations

Work Types (customfield_10286)

Work Type Option ID
Product Health / Maintenance 10744
Strategy 10742
Customer Request 10743

Focus Areas (customfield_10219)

Focus Area Option ID
Company Foundations 10609
New Orders 10601
AI Fax Intake 10602
SSR App 10604
Multi-Actor Ordering 10606
Patient 10607
Lead Generation Engine 10610
Quantity 10745
Facility Onboarding & Activation 10746
Supplier E&B 10775
Authorization Management 10776
Clinical Qualification 10777
Order Management & Notifications 10778
Payor & Patient Interactions 10780
Payor Network Routing 10782
Member Dashboard 10783
Grow doc & Signature requests 10784
Grow Brightree integrated orders 10827

Note: Option IDs were last verified 2026-04-08. If a new team or focus area is added in Jira, fetch a sample issue to discover its ID:

curl -s --netrc 'https://parachutehealth.atlassian.net/rest/api/3/search/jql' \
  -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' \
  -d '{"jql": "project=WF AND \"Balanced Team\"=\"NewTeamName\" ORDER BY created DESC", "maxResults": 1, "fields": ["customfield_10129","customfield_10286","customfield_10219"]}'

Requirements

  • Jira API credentials in ~/.netrc file
  • curl command available
  • jq for JSON parsing (required to extract the issue key from the response)

Authentication

This skill uses the Jira API token stored in ~/.netrc:

machine parachutehealth.atlassian.net
login your-email@parachutehealth.com
password YOUR_API_TOKEN

Descriptions (Atlassian Document Format)

API v3 requires descriptions in ADF. Plain-text shorthand for a single paragraph:

"description": {"version":1,"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"YOUR TEXT HERE"}]}]}

For multiple paragraphs, add multiple paragraph objects to content. For links:

{"type":"text","text":"link text","marks":[{"type":"link","attrs":{"href":"https://..."}}]}

Technical Details

  • Create endpoint: POST https://parachutehealth.atlassian.net/rest/api/3/issue
  • Single-issue endpoint: GET /rest/api/3/issue/{key} (still works — used for parent resolution)
  • Search endpoint: POST /rest/api/3/search/jql (the old GET /rest/api/3/search has been removed)
  • Authentication: curl --fail-with-body --netrc (reads ~/.netrc; --fail-with-body ensures non-zero exit on HTTP errors while preserving the response for diagnostics)
  • Custom field IDs: customfield_10129 (Balanced Team), customfield_10286 (Work Type), customfield_10219 (Focus Area)
  • Custom field payload format: "customfield_XXXXX": {"id": "OPTION_ID"} — look up IDs in the tables above

Error Handling

Always use --fail-with-body so curl returns a non-zero exit code on HTTP errors while still capturing the response body for diagnostics.

When the API returns an error:

  • 401 Unauthorized — credentials in ~/.netrc are missing or invalid. Ask the user to verify their API token.
  • 400 Bad Request — usually a malformed payload or invalid field value. Surface the errorMessages and errors fields from the response body to the user.
  • 404 Not Found — the parent issue key doesn't exist. Confirm the key with the user.
  • 422 / field-level errors — an option ID may be stale (team renamed, focus area added). Surface the error, then fetch a sample issue to discover the correct ID (see the lookup curl in the Note under Focus Areas).

Always show the raw error response to the user so they can diagnose unexpected failures.

Full Curl Example

Creates a Spike owned by Clinical Intelligence:

curl -s --fail-with-body --netrc 'https://parachutehealth.atlassian.net/rest/api/3/issue' \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -d '{
    "fields": {
      "project": {"key": "WF"},
      "issuetype": {"id": "10044"},
      "summary": "Investigate flaky qualification specs",
      "description": {"version":1,"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Several qualification specs fail intermittently in CI. Investigate root cause and fix."}]}]},
      "customfield_10129": {"id": "10424"},
      "customfield_10286": {"id": "10744"},
      "customfield_10219": {"id": "10777"}
    }
  }'

To nest under a parent epic, add "parent": {"key": "WF-12345"} inside fields.

Sample Output

✓ Created: WF-38980
  URL: https://parachutehealth.atlassian.net/browse/WF-38980
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment