Asi jira-issues
Create, update, and manage Jira issues from natural language. Use when the user wants to log bugs, create tickets, update issue status, or manage their Jira backlog.
git clone https://github.com/plurigrid/asi
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/jira-issues" ~/.claude/skills/plurigrid-asi-jira-issues-2a4cb4 && rm -rf "$T"
skills/jira-issues/SKILL.mdJira Issue Management
Create and manage Jira issues using the Jira REST API or MCP.
Setup
Option 1: Jira MCP Server
Install the Jira MCP server for seamless integration:
npx @anthropic/create-mcp-server jira
Option 2: Direct API
Set environment variables:
export JIRA_BASE_URL="https://yourcompany.atlassian.net" export JIRA_EMAIL="your-email@company.com" export JIRA_API_TOKEN="your-api-token"
Get your API token: https://id.atlassian.com/manage-profile/security/api-tokens
Creating Issues
Basic Issue
import requests from requests.auth import HTTPBasicAuth import os def create_issue(project_key, summary, description, issue_type="Task"): url = f"{os.environ['JIRA_BASE_URL']}/rest/api/3/issue" auth = HTTPBasicAuth( os.environ['JIRA_EMAIL'], os.environ['JIRA_API_TOKEN'] ) payload = { "fields": { "project": {"key": project_key}, "summary": summary, "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{"type": "text", "text": description}] }] }, "issuetype": {"name": issue_type} } } response = requests.post(url, json=payload, auth=auth) return response.json() # Example issue = create_issue("PROJ", "Fix login bug", "Users can't login with SSO", "Bug") print(f"Created: {issue['key']}")
With Labels and Priority
def create_detailed_issue(project_key, summary, description, issue_type="Task", priority="Medium", labels=None, assignee=None): payload = { "fields": { "project": {"key": project_key}, "summary": summary, "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{"type": "text", "text": description}] }] }, "issuetype": {"name": issue_type}, "priority": {"name": priority}, } } if labels: payload["fields"]["labels"] = labels if assignee: payload["fields"]["assignee"] = {"accountId": assignee} # ... make request
Common Issue Types
| Type | Use For |
|---|---|
| Bug | Something broken |
| Task | Work item |
| Story | User-facing feature |
| Epic | Large initiative |
| Sub-task | Part of larger task |
Updating Issues
Change Status
def transition_issue(issue_key, transition_name): # Get available transitions url = f"{JIRA_BASE_URL}/rest/api/3/issue/{issue_key}/transitions" transitions = requests.get(url, auth=auth).json() # Find matching transition transition_id = None for t in transitions['transitions']: if t['name'].lower() == transition_name.lower(): transition_id = t['id'] break # Execute transition requests.post(url, json={"transition": {"id": transition_id}}, auth=auth)
Add Comment
def add_comment(issue_key, comment_text): url = f"{JIRA_BASE_URL}/rest/api/3/issue/{issue_key}/comment" payload = { "body": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{"type": "text", "text": comment_text}] }] } } requests.post(url, json=payload, auth=auth)
Searching Issues
JQL Queries
def search_issues(jql): url = f"{JIRA_BASE_URL}/rest/api/3/search" params = {"jql": jql, "maxResults": 50} response = requests.get(url, params=params, auth=auth) return response.json()['issues'] # Examples my_bugs = search_issues("project = PROJ AND type = Bug AND assignee = currentUser()") open_items = search_issues("project = PROJ AND status != Done") recent = search_issues("project = PROJ AND created >= -7d")
Quick Commands
When user says... create this:
| Command | Action |
|---|---|
| "log bug about X" | Bug issue with description |
| "create task for X" | Task issue |
| "what's on my plate" | JQL: assignee = currentUser() AND status != Done |
| "move X to done" | Transition issue to Done |
| "add comment to X" | Add comment to issue |
Best Practices
- Summary: Keep under 80 chars, start with verb (Fix, Add, Update)
- Description: Include steps to reproduce for bugs
- Labels: Use for categorization (frontend, backend, urgent)
- Links: Reference related issues when relevant
Scientific Skill Interleaving
This skill connects to the K-Dense-AI/claude-scientific-skills ecosystem:
Graph Theory
- networkx [○] via bicomodule
- Universal graph hub
Bibliography References
: 734 citations in bib.duckdbgeneral
SDF Interleaving
This skill connects to Software Design for Flexibility (Hanson & Sussman, 2021):
Primary Chapter: 5. Evaluation
Concepts: eval, apply, interpreter, environment
GF(3) Balanced Triad
jira-issues (○) + SDF.Ch5 (−) + [balancer] (+) = 0
Skill Trit: 0 (ERGODIC - coordination)
Secondary Chapters
- Ch4: Pattern Matching
- Ch2: Domain-Specific Languages
Connection Pattern
Evaluation interprets expressions. This skill processes or generates evaluable forms.
Cat# Integration
This skill maps to Cat# = Comod(P) as a bicomodule in the equipment structure:
Trit: 0 (ERGODIC) Home: Prof Poly Op: ⊗ Kan Role: Adj Color: #26D826
GF(3) Naturality
The skill participates in triads satisfying:
(-1) + (0) + (+1) ≡ 0 (mod 3)
This ensures compositional coherence in the Cat# equipment structure.