Source profileQuality 90/100Review permissions

microsoft/hve-core/.github/skills/project-planning/jira/SKILL.md

jira

Jira issue workflows for search, issue updates, transitions, comments, field discovery, and interactive credential setup via the Jira REST API. Use when you need to configure Jira access, search with JQL, inspect an issue, create or update work items, move an issue between statuses, post comments, or discover required fields for issue creation.

Source repository stars
1,359
Declared platforms
0
Static risk flags
3
Last source update
2026-08-25
Source checked
2026-08-25

Decision brief

What it does: where it fits

Jira issue workflows for search, issue updates, transitions, comments, field discovery, and interactive credential setup via the Jira REST API.

Best for

  • Use when you need to configure Jira access, search with JQL, inspect an issue, create or update work items, move an issue between statuses, post comments, or discover required fields for issue creation.

Not for

  • Tasks that require unconfirmed production actions or broad system permissions.
  • Environments where the pinned source and install steps cannot be inspected.

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/microsoft/hve-core --skill ".github/skills/project-planning/jira"
Safe inspection promptEditorial

Inspect the Agent Skill "jira" from https://github.com/microsoft/hve-core/blob/7cc6dc42caf7f842e1f7aa9f3d41cb4581538f33/.github/skills/project-planning/jira/SKILL.md at commit 7cc6dc42caf7f842e1f7aa9f3d41cb4581538f33. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

Workflow

What the source asks the agent to do

  1. 01

    Scoped Cloud Token Setup

    Scoped mode uses the same Basic authentication variables as unscoped mode and adds a Cloud ID. It is not the OAuth 3LO flow, so the oauth/token/accessible-resources endpoint is not a discovery or introspection step for these credentials.

    Create a scoped API token for your Atlassian account and select its scopesChoose scopes for the commands you intend to run. read:jira-work coversObtain the Cloud ID for your site from a trusted Atlassian administrator or
  2. 02

    Credential Setup

    Run this workflow when credentials are missing, incomplete, or failing. It is verification-first and non-destructive: it audits the current state, guides acquisition, writes only non-secret values, and validates connectivity after the user supplies the credential themselves.

    Never ask for, accept, or echo a token or PAT in chat. Display this warning whenever instructing the user to add one:Never write a credential value. Non-secret values (base URL, email) may be written; the token line is a placeholder the user replaces in their editor.Never write credentials to a tracked file. /.jira.env lives in the user's home directory, outside any repository, so it cannot be accidentally committed. Do not write to .vscode/mcp.json or any repository file.
  3. 03

    Quick Start

    Search for your current Jira issues and return a compact table:

    Search for your current Jira issues and return a compact table:Inspect one issue with a compact field list:Create an issue from JSON piped through stdin:
  4. 04

    Prerequisites

    Set the required environment variables before running the script.

    If JIRAPAT is set, the script uses bearer authentication for Jira Server or Data Center.Otherwise, the script expects JIRAUSEREMAIL and JIRAAPITOKEN for Jira Cloud.Scoped Cloud mode routes only to https://api.atlassian.com/ex/jira/{cloudId};
  5. 05

    Authentication Variables

    Authentication is selected automatically:

    If JIRAPAT is set, the script uses bearer authentication for Jira Server or Data Center.Otherwise, the script expects JIRAUSEREMAIL and JIRAAPITOKEN for Jira Cloud.Scoped Cloud mode routes only to https://api.atlassian.com/ex/jira/{cloudId};

Permission review

Static risk signals and limitations

Network access

medium · line 69

The documentation includes network, browsing, or remote request actions.

export JIRA_BASE_URL="https://company.atlassian.net"

Runs scripts

medium · line 74

The documentation asks the agent to run terminal commands or scripts.

python scripts/jira.py --fields key search "ORDER BY created DESC" --max-results 1

Writes files

medium · line 122

The documentation asks the agent to create, modify, or delete local files.

Edit the credentials file directly in the editor instead.

Writes files

medium · line 126

The documentation asks the agent to create, modify, or delete local files.

Never write credentials to a tracked file. `~/.jira.env` lives in the user's home directory, outside any repository, so it cannot be accidentally committed. Do not write to `.vscode/mcp.json` or any repository file.

Runs scripts

medium · line 129

The documentation asks the agent to run terminal commands or scripts.

Never run a command that prints an environment value. `printenv | grep -i JIRA` and any other filtered dump are prohibited: `grep` selects which lines print, it does not mask them, so a live token reaches standard output and enters the tran

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score90/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars1,359SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
microsoft/hve-core
Skill path
.github/skills/project-planning/jira/SKILL.md
Commit
7cc6dc42caf7f842e1f7aa9f3d41cb4581538f33
License
MIT
Collected
2026-08-25
Default branch
main
View the original SKILL.md

Jira Skill

Overview

This skill provides a Python CLI for common Jira REST API workflows:

  • Search with JQL
  • Get issue details
  • Create and update issues with JSON payloads
  • Transition issues by name or ID
  • Add comments and list existing comments
  • Discover issue types and required fields for creation

The skill supports Jira Cloud with email plus API token authentication and Jira Server or Data Center with a personal access token.

Use --fields on read commands by default to keep output concise. The script supports dot-notation such as fields.status.name and prints tab-separated output for lists.

Prerequisites

Set the required environment variables before running the script.

PlatformRuntime
Cross-platformPython 3.11+

Authentication Variables

VariableWhen requiredPurpose
JIRA_BASE_URLAlwaysJira base URL, for example https://company.atlassian.net
JIRA_USER_EMAILJira CloudAccount email used for basic authentication
JIRA_API_TOKENJira CloudAPI token paired with the Jira Cloud email
JIRA_PATJira Server or Data CenterPersonal access token used for bearer authentication
JIRA_CLOUD_TOKEN_MODEJira Cloud optionalunscoped (default) or scoped
JIRA_CLOUD_IDScoped Jira Cloud tokenAtlassian Cloud resource identifier

Authentication is selected automatically:

  • If JIRA_PAT is set, the script uses bearer authentication for Jira Server or Data Center.
  • Otherwise, the script expects JIRA_USER_EMAIL and JIRA_API_TOKEN for Jira Cloud.
  • Scoped Cloud mode routes only to https://api.atlassian.com/ex/jira/{cloudId}; mixed Cloud and Data Center credentials fail closed.

Scoped Cloud Token Setup

Scoped mode uses the same Basic authentication variables as unscoped mode and adds a Cloud ID. It is not the OAuth 3LO flow, so the oauth/token/accessible-resources endpoint is not a discovery or introspection step for these credentials.

  1. Create a scoped API token for your Atlassian account and select its scopes during creation. See Manage API tokens for your Atlassian account.
  2. Choose scopes for the commands you intend to run. read:jira-work covers search, get, comments, and fields. Add write:jira-work for create, update, transition, and comment. Granular scopes are listed in Jira scopes for OAuth 2.0 and Forge apps. Jira project permissions still apply independently of token scopes.
  3. Obtain the Cloud ID for your site from a trusted Atlassian administrator or your site's account record. The Cloud ID is not a secret, but it determines the request destination.
  4. Confirm that the Cloud ID belongs to the same site as JIRA_BASE_URL. The CLI cannot verify this association: in scoped mode it routes to the Atlassian resource API and does not use JIRA_BASE_URL as a destination. Treat the association as operator-maintained configuration.
  5. Set the variables, then confirm access with a read-only command:
export JIRA_BASE_URL="https://company.atlassian.net"
export JIRA_USER_EMAIL="[email protected]"
export JIRA_API_TOKEN="$(cat ~/.secrets/jira-token)"
export JIRA_CLOUD_TOKEN_MODE="scoped"
export JIRA_CLOUD_ID="your-cloud-id"
python scripts/jira.py --fields key search "ORDER BY created DESC" --max-results 1

A successful read proves the token and route work together. It does not prove that the Cloud ID corresponds to JIRA_BASE_URL, so verify that separately in step 4.

Operational Variables

VariableWhen requiredPurpose
JIRA_AUDIT_LOGOptionalPath to a JSON Lines audit log. When set, every request is audited (see Audit Logging).
JIRA_AUDIT_ACTOROptionalOverrides the recorded actor identity (for example, a CI service principal).
JIRA_DEBUGOptionalSet to 1 to print a redacted traceback on failure. Never disables redaction.
JIRA_ALLOW_INSECUREOptionalSet to 1 to permit explicit loopback HTTP development endpoints only.
JIRA_CONFIRM_WRITESOptionalSet to 1 to satisfy the write confirmation gate without --confirm or --yes.

Audit Logging

When JIRA_AUDIT_LOG is set, the script writes a structured JSON Lines audit trail for every API request. Auditing is fail-closed and write-ahead:

  • An attempt record is written before the request is sent. If the audit log cannot be written, the operation is aborted and nothing is sent to Jira.
  • An outcome record (success or error, with HTTP status on failure) is written after the request completes.

Each record includes a UTC timestamp, the actor (from JIRA_AUDIT_ACTOR, otherwise JIRA_USER_EMAIL or jira-pat), the operation, HTTP method, normalized origin, auth mode, and event. Resource paths, Cloud IDs, credentials, authorization headers, and query strings are excluded. Place this operationally sensitive file at an access-controlled path and retain it only as long as operations require. Audit failures after the request emit a warning without altering the result.

Credential Rotation

Atlassian Cloud API tokens have a selected lifetime of 1 to 365 days. Prefer a scoped token and set JIRA_CLOUD_TOKEN_MODE=scoped with JIRA_CLOUD_ID. Atlassian 3LO is not used because its token exchange requires a client secret. For Jira Data Center, create a bounded PAT through the Jira UI and rotate it out of band. The CLI does not issue PATs because the response would contain a new secret without a transactional, non-model-visible sink.

Credential Setup

Run this workflow when credentials are missing, incomplete, or failing. It is verification-first and non-destructive: it audits the current state, guides acquisition, writes only non-secret values, and validates connectivity after the user supplies the credential themselves.

Safety boundary

These rules are not adjustable by autonomy mode or user request.

  • Never ask for, accept, or echo a token or PAT in chat. Display this warning whenever instructing the user to add one:

    ⚠️ NEVER paste your API token or PAT into this chat.
       Tokens entered here are sent through the AI model and are not secure.
       Edit the credentials file directly in the editor instead.
    
  • Never write a credential value. Non-secret values (base URL, email) may be written; the token line is a placeholder the user replaces in their editor.

  • Never write credentials to a tracked file. ~/.jira.env lives in the user's home directory, outside any repository, so it cannot be accidentally committed. Do not write to .vscode/mcp.json or any repository file.

  • Never modify a shell profile without explicit user confirmation.

  • Never display a token value or any part of one, including a prefix. A credential variable is reported only as set or missing.

  • Never run a command that prints an environment value. printenv | grep -i JIRA and any other filtered dump are prohibited: grep selects which lines print, it does not mask them, so a live token reaches standard output and enters the transcript. Use the set-or-missing probe in the Protocol below instead. Never include raw credential values, full request headers, or verbose or trace HTTP output in a response, even while troubleshooting.

  • Send nothing over the network until the user explicitly confirms connectivity testing.

Terminal session isolation

The agent's terminal and the user's terminal are separate sessions, so an export in one is invisible to the other. The environment file is the mechanism that bridges them:

  1. Create ~/.jira.env with non-secret values filled in and placeholder lines for credentials.
  2. Resolve and display the absolute path so the user knows exactly which file to edit.
  3. Open it with code ~/.jira.env.
  4. The user replaces the placeholders and saves.
  5. Source it (set -a && source ~/.jira.env && set +a) before running any command.

Protocol

  1. Audit. Probe the known variable names and classify each as set or missing, without printing any value:

     for v in JIRA_BASE_URL JIRA_USER_EMAIL JIRA_API_TOKEN JIRA_PAT JIRA_CLOUD_TOKEN_MODE JIRA_CLOUD_ID JIRA_AUDIT_LOG JIRA_AUDIT_ACTOR; do
      if printenv "$v" >/dev/null 2>&1; then echo "$v: set"; else echo "$v: missing"; fi
    done
    

    printenv exits zero only when the variable exists, and its output is discarded, so the classification never reveals a value. Use no modifying command during the audit. Check for an existing ~/.jira.env.

  2. Detect the platform. JIRA_PAT set indicates Server or Data Center. JIRA_USER_EMAIL with JIRA_API_TOKEN indicates Cloud. When mixed or ambiguous, ask which platform the user has rather than guessing, because the wrong choice produces an authentication failure that looks like a bad credential.

  3. Validate what exists. Confirm JIRA_BASE_URL starts with https:// and flag a malformed value. Identify which required variables are missing for the detected platform.

  4. Guide acquisition. Direct the user to their Atlassian account token page for Cloud, or their instance personal-access-token settings for Server or Data Center. Give the steps; never request the result.

  5. Write the file. Create or update ~/.jira.env with non-secret values and credential placeholders, including a do-not-commit warning comment.

  6. Validate connectivity. After the user confirms the credential is saved, source the file and run one read-only call. A 401 or 403 means the credential is wrong, expired, or revoked; a connection error means the base URL is wrong.

  7. Summarize. Report what changed, what remains, and the set-or-missing state of each variable.

Completion

Setup is complete when every required variable for the detected platform is set, the base URL is well-formed, and one read-only call succeeds. Anything short of that is reported as incomplete with the specific remaining step, never as a qualified success.

Quick Start

Search for your current Jira issues and return a compact table:

python scripts/jira.py --fields key,fields.summary,fields.status.name search 'assignee = currentUser() ORDER BY updated DESC'

Inspect one issue with a compact field list:

python scripts/jira.py --fields key,fields.summary,fields.status.name,fields.assignee.displayName get PROJ-123

Create an issue from JSON piped through stdin:

cat <<'EOF' | python scripts/jira.py create
{
  "fields": {
    "project": { "key": "PROJ" },
    "summary": "Fix login timeout on mobile",
    "issuetype": { "name": "Bug" }
  }
}
EOF

Parameters Reference

Command or optionSyntaxDefaultDescription
searchpython scripts/jira.py search '<jql>' [max_results]max_results = 50Search for issues with JQL
getpython scripts/jira.py get <ISSUE-KEY>NoneGet one issue
createpython scripts/jira.py create '<json>'Reads stdin if omittedCreate an issue from JSON
updatepython scripts/jira.py update <ISSUE-KEY> '<json>'Reads stdin if omittedUpdate an issue from JSON
transitionpython scripts/jira.py transition <ISSUE-KEY> '<name-or-id>'NoneMove an issue to another workflow state
commentpython scripts/jira.py comment <ISSUE-KEY> '<body>'Reads stdin if omittedAdd a comment to an issue
commentspython scripts/jira.py comments <ISSUE-KEY> [ISSUE-KEY ...]NoneList comments across one or more issues
fieldspython scripts/jira.py fields <PROJECT-KEY> [issue-type-id]NoneDiscover issue types or required create fields
--fields--fields key,fields.summary,...NoneExtract selected fields from search, get, and comments output

Script Reference

Search for Issues

Use bounded JQL for Jira Cloud queries. Include a project, assignee, sprint, or another filter instead of a bare ORDER BY query. See JQL Reference for the query patterns this skill expects.

python scripts/jira.py --fields key,fields.summary,fields.status.name search 'project = PROJ AND status = "In Progress"'
python scripts/jira.py --fields key,fields.summary search 'assignee = currentUser() ORDER BY updated DESC' 10

Get One Issue

python scripts/jira.py --fields key,fields.summary,fields.priority.name,fields.status.name get PROJ-123

Create an Issue

Discover valid issue types first:

python scripts/jira.py fields PROJ

Inspect required fields for one issue type:

python scripts/jira.py fields PROJ 10045

Create the issue:

python scripts/jira.py create '{
  "fields": {
    "project": { "key": "PROJ" },
    "summary": "Document rollout checklist",
    "issuetype": { "name": "Task" },
    "labels": ["docs", "release"]
  }
}'

Update an Issue

python scripts/jira.py update PROJ-123 '{
  "fields": {
    "summary": "Updated summary",
    "priority": { "name": "High" },
    "labels": ["backend", "urgent"]
  }
}'

Transition an Issue

Use a transition display name or a numeric transition ID:

python scripts/jira.py transition PROJ-123 'In Progress'
python scripts/jira.py transition PROJ-123 31

If a transition name is not found, the script returns the available transition names in the error output.

Comment on an Issue

python scripts/jira.py comment PROJ-123 'PR #42 addresses this issue.'
printf 'Deployed to staging.\n' | python scripts/jira.py comment PROJ-123

List Comments

python scripts/jira.py --fields _issue,author.displayName,created,body comments PROJ-123 PROJ-456

Troubleshooting

SymptomLikely causeResolution
JIRA_BASE_URL is not setBase URL is missingExport JIRA_BASE_URL in the current shell
Authentication errorWrong token or missing auth variablesVerify JIRA_PAT for Jira Server or Data Center, or verify JIRA_USER_EMAIL and JIRA_API_TOKEN for Jira Cloud
Invalid issue keyIssue key format is malformedUse keys in the form PROJ-123
Transition not foundThe requested workflow transition is unavailableRe-run the command with the transition name returned in the error output
JSON payload errorInvalid JSON was passed to create or updateValidate the payload and retry with well-formed JSON
Network connection errorJira instance URL is unreachableVerify the base URL and local network access

Frequently asked questions

What to verify before installation and use

What does the jira source document cover?

Jira issue workflows for search, issue updates, transitions, comments, field discovery, and interactive credential setup via the Jira REST API.

How do I install jira?

The source record exposes this install command: npx skills add https://github.com/microsoft/hve-core --skill ".github/skills/project-planning/jira". Inspect the command and pinned source before running it.

Which permission-related actions were detected?

Static rules flagged network, exec-script, write-files in the source; the page lists the matching lines and excerpts.

Alternatives

Compare before choosing