jira-ticket

v1.0.0

Create Jira tickets with web-researched content. Use when asked to create, file, or open a Jira issue/ticket/story/bug/task, especially when the ticket conte...

0· 142·0 current·0 all-time
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description match the declared requirements: curl and jq are used for HTTP calls and JSON parsing, and the three environment variables (JIRA_BASE_URL, JIRA_EMAIL, JIRA_API_TOKEN) are exactly what is needed to call the Jira Cloud REST API.
Instruction Scope
SKILL.md stays on task: it parses user input, optionally runs web searches and fetches pages for research, builds an ADF description, validates project/fields, and posts to Jira. It does not instruct reading local files or unrelated environment variables, nor does it direct data to unexpected endpoints beyond web research and Jira.
Install Mechanism
Instruction-only skill with no install spec and no code files; nothing is written to disk and no external packages are pulled in. This is the lowest-risk install model.
Credentials
Requested secrets are limited and appropriate for the task (Jira base URL, account email, API token). No unrelated credentials, config paths, or broad system secrets are requested.
Persistence & Privilege
always:false and normal autonomous invocation settings. The skill does not request permanent system-wide presence or modifications to other skills or agent settings.
Assessment
This skill appears coherent and requests only the expected Jira credentials. Before installing: (1) Provide a dedicated Jira API token scoped to a minimally privileged account (service account) rather than your personal admin token; (2) keep JIRA_API_TOKEN secret and rotate it if leaked; (3) avoid including sensitive secrets or private data in the ticket text or in web-search queries, since the skill fetches external pages during research and will post the composed content to your Jira instance; and (4) if you run the skill in a sandbox, enable the stated Jira network preset and review network policies so the skill can only reach the required Atlassian hosts.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

🎫 Clawdis
Binscurl, jq
EnvJIRA_API_TOKEN, JIRA_EMAIL, JIRA_BASE_URL
latestvk972neezy3awxb2gmfgtb3nrp1839q70
142downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

Jira Ticket Creator with Web Research

Create Jira tickets whose content is enriched by web search. Follow these phases in order.

Setup

Three environment variables are required:

All Jira API calls use Basic auth via curl -u and force HTTP/1.1:

curl --http1.1 -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" -H "Content-Type: application/json" "$JIRA_BASE_URL/rest/api/3/..."

Phase 1 — Parse Arguments

Parse the user's request to extract:

FieldRequiredDescription
projectyesJira project key (e.g. ENG, OPS)
issuetypenoTask, Bug, Story, Epic (default: Task)
summaryyesShort title for the ticket
search_querynoTopic to web-search for enriching the description
prioritynoHighest, High, Medium, Low, Lowest (default: Medium)
assigneenoAtlassian account email or ID
labelsnoComma-separated labels
componentsnoComma-separated component names

If the user does not provide a project key, ask for it before proceeding.


Phase 2 — Web Research (if applicable)

If the user asked for research, or if the ticket would benefit from context (e.g. a bug report referencing an external API, a story about integrating a third-party service):

  1. Use the web_search tool to search for the relevant topic.
  2. Use the xurl tool or curl to fetch key pages for details.
  3. Extract the most relevant information: error descriptions, API docs, best practices, version notes, or solution approaches.

Compile findings into a structured summary:

### Research Summary
- **Source**: [URL]
- **Key findings**: ...
- **Relevant details**: ...

If no research is needed, skip to Phase 3.


Phase 3 — Compose Ticket Content

Build the ticket description in Atlassian Document Format (ADF). Combine:

  • The user's original request/context
  • Research findings from Phase 2 (if any)
  • Acceptance criteria (when creating Stories)
  • Steps to reproduce (when creating Bugs)

Keep the description concise and actionable.

ADF Structure

Jira API v3 uses ADF for the description field. Minimal example:

{
  "type": "doc",
  "version": 1,
  "content": [
    {
      "type": "paragraph",
      "content": [{ "type": "text", "text": "Description text here." }]
    }
  ]
}

For richer formatting (headings, bullet lists, links):

{
  "type": "doc",
  "version": 1,
  "content": [
    {
      "type": "heading",
      "attrs": { "level": 3 },
      "content": [{ "type": "text", "text": "Summary" }]
    },
    {
      "type": "bulletList",
      "content": [
        {
          "type": "listItem",
          "content": [
            {
              "type": "paragraph",
              "content": [{ "type": "text", "text": "Item one" }]
            }
          ]
        }
      ]
    },
    {
      "type": "paragraph",
      "content": [
        { "type": "text", "text": "Source: " },
        {
          "type": "text",
          "text": "link text",
          "marks": [{ "type": "link", "attrs": { "href": "https://example.com" } }]
        }
      ]
    }
  ]
}

Phase 4 — Validate Project and Fields

Before creating the ticket, verify the project exists and discover available fields:

# Verify project
curl --http1.1 -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" -H "Content-Type: application/json" \
  "$JIRA_BASE_URL/rest/api/3/project/$PROJECT_KEY" | jq '{key, name, id}'

# List available issue types for the project
curl --http1.1 -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" -H "Content-Type: application/json" \
  "$JIRA_BASE_URL/rest/api/3/project/$PROJECT_KEY/statuses" | jq '.[].name'

If the project or issue type is invalid, report the error and ask the user to correct it.


Phase 5 — Create the Ticket

curl --http1.1 -s -X POST \
  -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
  -H "Content-Type: application/json" \
  "$JIRA_BASE_URL/rest/api/3/issue" \
  -d '{
    "fields": {
      "project": { "key": "PROJECT_KEY" },
      "summary": "Ticket summary here",
      "issuetype": { "name": "Task" },
      "priority": { "name": "Medium" },
      "description": { ADF_OBJECT },
      "labels": ["label1", "label2"]
    }
  }'

Extract the response:

# Parse response for issue key and URL
ISSUE_KEY=$(echo "$RESPONSE" | jq -r '.key')
ISSUE_URL="$JIRA_BASE_URL/browse/$ISSUE_KEY"

If the API returns an error, display the error message and suggest corrections.


Phase 6 — Report

Present the result to the user:

  • Issue key: e.g. ENG-1234
  • URL: direct link to the ticket
  • Summary: the title that was set
  • Research included: yes/no, with sources listed

Notes

  • The Jira REST API v3 requires ADF for descriptions — plain text or markdown will be rejected.
  • Rate limits: Jira Cloud allows ~100 requests per minute per user.
  • The jira.yaml network policy preset in NemoClaw already allows *.atlassian.net, auth.atlassian.com, and api.atlassian.com on port 443.
  • To use this skill inside NemoClaw's sandbox, enable the Jira preset in your sandbox policy.

Examples

# Create a simple task
/jira-ticket ENG "Update API rate limiting docs"

# Create a bug with web research
/jira-ticket ENG --type Bug --search "Node.js fetch timeout ECONNRESET" "Fix intermittent ECONNRESET in payment service"

# Create a story with priority and labels
/jira-ticket PLATFORM --type Story --priority High --labels "q2,backend" "Add OAuth2 PKCE flow for mobile clients"

Comments

Loading comments...