Agent skill

Jira Issue To PR

by OpenHands in OpenHands/extensions

This skill should be used when the user asks to "set up a Jira automation to create pull requests", "poll Jira for create-pr issues", "automatically create GitHub PRs from Jira tickets", "deploy a…

MITAuto-check passedDevelopment

Install Jira Issue To PR

skills CLI
$ npx skills add OpenHands/extensions --skill jira-issue-to-pr -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install OpenHands/extensions jira-issue-to-pr --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/OpenHands/extensions.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/jira-issue-to-pr .claude/skills/jira-issue-to-pr && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
jira-issue-to-pr
GitHub stars
158
Token cost
~4.1k tokens
SKILL.md length
1,834 words
Files
8 (incl. scripts, references)
Skills in repo
78
Repo updated
First seen
Licence
MIT

At a glance

This skill should be used when the user asks to "set up a Jira automation to create pull requests", "poll Jira for create-pr issues", "automatically create GitHub PRs from Jira tickets", "deploy a…

  • Works in 6 steps: Collect parameters → Create config.json → Package the tarball → …
  • Asks to set up a Jira automation to create pull requests
  • SKILL.md covers How It Works, Prerequisites, Deploying the Automation and Event-Based Alternative, plus 5 more sections
  • Runs Python scripts from its folder; calls curl, python3 and openssl; reaches acme.atlassian.net; needs JIRA_ADMIN_TOKEN and OPENHANDS_API_KEY

What it does

Jira Issue To PR is an agent skill from OpenHands/extensions. This skill should be used when the user asks to "set up a Jira automation to create pull requests", "poll Jira for create-pr issues", "automatically create GitHub PRs from Jira tickets", "deploy a Jira issue-to-PR automation", "create a Jira to GitHub PR workflow", or mentions automating GitHub PR creation from a Jira label. Deploys a cron-based OpenHands automation that watches a Jira Cloud project for issues labeled with a configurable label (default: "create-pr") and spawns an agent conversation to create a…

Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including scripts and reference files (for example `.plugin/plugin.json`, `README.md` and `references/setup.md`).

It sits in Development, covering Pull requests and Scheduled and recurring tasks. It works with Jira and GitHub. The repository describes itself as: Public registry for OpenHands extensions. The licence is MIT.

When your agent uses it

  • Asks to set up a Jira automation to create pull requests
  • Poll Jira for create-pr issues
  • Automatically create GitHub PRs from Jira tickets
  • Deploy a Jira issue-to-PR automation

Example prompts

  • “set up a Jira automation to create pull requests”
  • “poll Jira for create-pr issues”
  • “automatically create GitHub PRs from Jira tickets”
  • “/jira-issue-to-pr”

Requirements

  • Python 3
  • A credential in OPENHANDS_API_KEY
  • A credential in OPENHANDS_AUTOMATION_API_KEY

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Collect parameters
  2. Create config.json
  3. Package the tarball
  4. Upload the tarball
  5. Create the automation
  6. Verify with a test dispatch

What it can do on your machine

Read from SKILL.md and the folder at commit d008b81. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 2 files in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • curl
    • python3
    • openssl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • acme.atlassian.net

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • JIRA_ADMIN_TOKEN
    • OPENHANDS_API_KEY
    • JIRA_CLOUD_KEY
    • AUTOMATION_KV_TOKEN
    • OPENHANDS_AUTOMATION_API_KEY
    • WEBHOOK_SECRET

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Jira Issue To PR loads about 4.1k tokens when it runs, and up to ~5.8k if it reads all its reference files. Until then it costs about 174 tokens; SKILL.md has 1,834 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~174
When it runs · the whole SKILL.md, loaded when a task matches
~4.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~5.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from OpenHands/extensions at commit d008b81, republished under its MIT licence (© OpenHands). 1,834 words, ~4,126 tokens.

Download SKILL.mdSave it as .claude/skills/jira-issue-to-pr/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
jira-issue-to-pr
description
This skill should be used when the user asks to "set up a Jira automation to create pull requests", "poll Jira for create-pr issues", "automatically create GitHub PRs from Jira tickets", "deploy a Jira issue-to-PR automation", "create a Jira to GitHub PR workflow", or mentions automating GitHub PR creation from a Jira label. Deploys a cron-based OpenHands automation that watches a Jira Cloud project for issues labeled with a configurable label (default: "create-pr") and spawns an agent conversation to create a GitHub pull request for each new issue found. The target GitHub repository is read from the body of the Jira ticket - no repo parameter is required at deploy time.

Jira → GitHub PR Automation

Deploys a cron automation that polls a Jira Cloud instance for open issues carrying a configurable label and, for each new issue, starts an OpenHands agent conversation that clones the GitHub repository specified in the ticket body, creates a branch, implements or placeholders the requested change, and opens a pull request. Once the conversation starts, it also posts a comment on the Jira ticket: "I'm on it: <conversation URL>".

How It Works

  1. Poll - every N minutes, POST /rest/api/3/search/jql on the Jira Cloud instance to find open issues with the configured label.
  2. Deduplicate - on the very first run the script records a first_run_at baseline timestamp in the KV store; any issue whose updated timestamp predates that baseline is skipped (no backfill blast on first deploy). Using updated rather than created means an old issue that has its label added after the automation is deployed will still be picked up. Subsequent runs filter by both first_run_at and a KV-backed set of already-processed issue keys. A max_new_per_run cap (default 5) limits conversations started per cron firing as additional defense-in-depth.
  3. Dispatch - for each new issue, start an independent agent conversation with a PR-creation prompt: POST /api/conversations on the agent server when running locally, or POST /api/v1/app-conversations on OpenHands Cloud. The prompt instructs the agent to extract the target GitHub repository (owner/repo) from the ticket body.
  4. Comment - immediately after the conversation is created, post a Jira comment on the issue: I'm on it: <conversation URL>.
  5. Persist - record the processed issue key so re-runs never duplicate work.

The polling run is lightweight (stdlib only, no SDK install); LLM costs are incurred only when new issues are actually found.

Prerequisites

Before deploying, ensure the following are in place:

RequirementDetails
Jira API tokenStored as an OpenHands secret (see Jira API token setup)
GitHub accessLocal: a GitHub token stored as an OpenHands secret with repo + workflow scope so the spawned conversation can push branches and open PRs. OpenHands Cloud: the spawned conversation uses the user's connected GitHub integration (native integration recommended, or the GitHub MCP server)
KV store (OpenHands Cloud only)The automation service must have its KV store enabled (kvStore in GET /api/automation/v1/capabilities); each cloud run starts in a fresh sandbox, so processed issues are remembered there
Jira labelThe label to watch for (default: create-pr) must exist in the Jira project
GitHub repoThe target repository must exist and the GitHub token must have write access

Deploying the Automation

Determine the API host and auth

Set OPENHANDS_HOST and AUTH_HEADER for the curl commands below:

  • OpenHands Cloud - a <HOST> value is present in the system prompt:
    bash
    OPENHANDS_HOST="<HOST value>"
    AUTH_HEADER="Authorization: Bearer $OPENHANDS_API_KEY"
  • Local Agent Canvas - no <HOST> value:
    bash
    OPENHANDS_HOST="http://localhost:8000"
    AUTH_HEADER="X-Session-API-Key: $OPENHANDS_AUTOMATION_API_KEY"
Step 1 - Collect parameters

Gather the following from the user before proceeding:

ParameterExampleNotes
jira_base_urlhttps://acme.atlassian.netNo trailing slash
jira_emailalice@acme.comAtlassian account email for Basic auth
jira_token_secretJIRA_CLOUD_KEYName of the OpenHands secret holding the API token
jira_labelcreate-prLabel to watch for (optional, defaults to create-pr)
max_new_per_run5Max conversations dispatched per cron firing (optional, defaults to 5)
cron_schedule*/5 * * * *Polling frequency in cron syntax

Note: The GitHub repository is not configured here. Each Jira ticket body must include a reference to the target GitHub repo in owner/repo format (e.g. acme-org/backend). The spawned agent extracts it from the ticket text.

Step 2 - Create config.json

Create config.json next to scripts/main.py when packaging:

json
{
  "jira_base_url":     "https://acme.atlassian.net",
  "jira_email":        "alice@acme.com",
  "jira_token_secret": "JIRA_CLOUD_KEY",
  "jira_label":        "create-pr",
  "max_new_per_run":   5
}
Step 3 - Package the tarball

Copy scripts/main.py from this skill and package it with the config.json:

bash
WORK=$(mktemp -d)
cp <skill-dir>/scripts/main.py "$WORK/main.py"
# write config.json into $WORK/config.json (see Step 2)
tar -czf /tmp/jira-issue-to-pr.tar.gz -C "$WORK" .
python3 -m py_compile "$WORK/main.py"   # validate syntax before uploading
Step 4 - Upload the tarball
bash
TARBALL_PATH=$(curl -s -X POST \
  "${OPENHANDS_HOST}/api/automation/v1/uploads?name=jira-issue-to-pr" \
  -H "$AUTH_HEADER" \
  -H "Content-Type: application/gzip" \
  --data-binary @/tmp/jira-issue-to-pr.tar.gz \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['tarball_path'])")
Step 5 - Create the automation
bash
curl -s -X POST "${OPENHANDS_HOST}/api/automation/v1" \
  -H "$AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d "{
    \"name\": \"Jira issue-to-PR Poller\",
    \"trigger\": {
      \"type\":     \"cron\",
      \"schedule\": \"*/5 * * * *\",
      \"timezone\": \"UTC\"
    },
    \"tarball_path\": \"$TARBALL_PATH\",
    \"entrypoint\":   \"python3 main.py\",
    \"timeout\":      540
  }" | python3 -m json.tool

Save the returned id - use it for updates and monitoring.

Step 6 - Verify with a test dispatch
bash
curl -s -X POST \
  "${OPENHANDS_HOST}/api/automation/v1/<AUTOMATION_ID>/dispatch" \
  -H "$AUTH_HEADER" | python3 -m json.tool

# After ~30 seconds, check the run status:
curl -s "${OPENHANDS_HOST}/api/automation/v1/<AUTOMATION_ID>/runs?limit=1" \
  -H "$AUTH_HEADER" \
  | python3 -c "import sys,json; r=json.load(sys.stdin)['runs'][0]; print(r['status'], r.get('error_detail'))"

Event-Based Alternative

Where Jira can reach the deployment over the internet (OpenHands Cloud and Enterprise), Jira can push label events instead of being polled. That is a different automation from the poller above: a prompt automation triggered by a Jira webhook, created with the openhands-automation skill (see its "Custom Webhook Example: Jira Cloud"). scripts/main.py is not used, so its KV-backed deduplication and its "I'm on it" comment do not apply; the prompt has to ask for whatever of that is wanted.

Set up the webhook

The webhook is a pair: a custom webhook source in OpenHands and an admin webhook in Jira, sharing a signing secret. scripts/setup_webhook.py creates both, so the user does not have to open Jira or copy a URL and secret by hand. It needs the API token of an account with the Administer Jira permission, stored as an OpenHands secret.

  1. Collect the Jira site URL, the account email, the name of the secret holding that account's API token, and the label. A token used only for this step (for example JIRA_ADMIN_TOKEN) can be deleted from the user's secrets afterwards.

  2. Dry run, then ask. Registering a webhook changes the user's Jira site, so show what will be created and wait for the user to confirm:

    bash
    OPENHANDS_API_KEY="$OPENHANDS_API_KEY" python3 <skill-dir>/scripts/setup_webhook.py apply --dry-run \
      --jira-base-url "https://acme.atlassian.net" --jira-email "alice@acme.com" \
      --jira-token-env JIRA_ADMIN_TOKEN --openhands-host "$OPENHANDS_HOST" --label create-pr

    The command has to name the secret (--jira-token-env JIRA_ADMIN_TOKEN): naming it is what makes its value available to the command.

  3. Apply - the same command without --dry-run. It registers the OpenHands webhook (source jira, webhookEvent, X-Hub-Signature), creates the Jira webhook for Issue created and Issue updated limited to labels = "create-pr", and sends one signed test request. "signed_delivery_check": "ok" in its output means the pair works. Running it again updates the Jira webhook in place and keeps the secret, so a failure half way cannot break a working pair. Add --rotate-secret when the two sides have drifted apart, for instance after the deployment was reinstalled.

    The secret is generated inside the script and is never printed. Do not ask the user for it, and do not try to read or echo it.

  4. If it exits with code 3, the account is not a Jira administrator. Fall back to Manual webhook setup.

To stop Jira sending events, for example when the automation is deleted, run the same command with delete in place of apply.

Create the event-triggered automation

Create the automation with this trigger:

json
{
  "type": "event",
  "source": "jira",
  "on": ["jira:issue_created", "jira:issue_updated"],
  "filter": "contains(issue.fields.labels, 'create-pr') && (webhookEvent == 'jira:issue_created' || length(changelog.items[?field == 'labels'] || `[]`) > `0`)"
}

Jira sends labels as plain strings, so the filter reads issue.fields.labels, not issue.fields.labels[].name. The changelog check limits updates to those that change the labels; without it every later edit of a labelled issue starts another run. It still fires when another label is added to or removed from an issue that carries the label, so have the prompt skip an issue that already has a pull request.

To verify, add the label to an issue and check the automation's runs.

Show full SKILL.md (758 more words)Show less
Manual webhook setup

Use this when the Jira account is not an administrator: the user, or their Jira administrator, does both steps by hand.

  1. Register the webhook with "source": "jira", "event_key_expr": "webhookEvent" and "signature_header": "X-Hub-Signature" (see the openhands-automation skill for the request). The defaults (type, X-Signature-256) do not fit Jira: deliveries are refused with 401, or accepted and never matched.
  2. Configure Jira - a Jira admin creates the webhook under Jira settings → System → WebHooks with the returned webhook_url and secret, the Issue created and Issue updated events, and a JQL filter such as labels = create-pr. A Jira Automation rule cannot be used instead: its "Send web request" action is not signed.

To test a manually configured webhook without Jira, sign a request the way Jira does:

bash
BODY='{"webhookEvent":"jira:issue_created","issue":{"key":"TEST-1","fields":{"labels":["create-pr"]}}}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$WEBHOOK_SECRET" | awk '{print $NF}')
curl -s -X POST "<webhook_url>" -H "Content-Type: application/json" \
  -H "X-Hub-Signature: sha256=$SIG" -d "$BODY"

"matched": 1 in the response means the trigger fired and a run was started.

Updating an Existing Deployment

To change configuration or update the script:

  1. Edit config.json with new values.
  2. Repackage and upload a new tarball (Steps 3-4 above).
  3. PATCH the existing automation with the new tarball_path:
bash
curl -s -X PATCH \
  "${OPENHANDS_HOST}/api/automation/v1/<AUTOMATION_ID>" \
  -H "$AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d "{\"tarball_path\": \"<NEW_TARBALL_PATH>\"}"

Resetting Processed State

To reprocess issues that were already handled (e.g., after testing), clear the KV store:

bash
curl -s -X DELETE \
  "${OPENHANDS_HOST}/api/automation/v1/<KV_BASE>/v1/kv/state" \
  -H "Authorization: Bearer $AUTOMATION_KV_TOKEN"

Or delete and recreate the automation to start with a clean state.

Script Reference

The automation script lives at scripts/main.py. Key behaviors:

  • No SDK dependencies - pure Python stdlib; no setup.sh or uv install needed.
  • Config file - reads all parameters from config.json co-located with the script.
  • First-run baseline - on the very first execution the script writes first_run_at (UTC timestamp) into the KV store and exits without dispatching; issues whose updated timestamp predates that baseline are skipped on all subsequent runs. Using updated (not created) means an old issue that has its label applied after deployment is correctly treated as new.
  • Per-run cap - max_new_per_run (default 5) limits how many conversations are started per cron firing; any remaining new issues are dispatched on the next run.
  • KV store - persists {"processed_keys": [...], "first_run_at": "..."} between runs; falls back to a local file in local dev environments where AUTOMATION_KV_TOKEN is absent (on OpenHands Cloud the run fails instead, since its sandbox does not persist).
  • Jira API - uses POST /rest/api/3/search/jql (the current non-deprecated endpoint).
  • Conversation dispatch - locally, calls POST /api/conversations on the agent server with the current user's LLM/agent settings forwarded to the new conversation; on OpenHands Cloud, calls POST /api/v1/app-conversations, which runs each conversation in its own sandbox with the user's settings, secrets and connected git provider.
  • Start confirmation (OpenHands Cloud only) - the API answers a start request before the conversation exists, so the next run checks each one. A start that failed is made again, up to three times, and after that the failure is posted on the Jira issue.
  • Error transparency - captures Jira HTTP response bodies in error messages for fast diagnosis.

scripts/setup_webhook.py belongs to the event-based alternative and is not part of the poller's tarball. It is stdlib-only, reads OPENHANDS_API_KEY and the Jira API token from the environment, and prints a JSON summary that never contains the signing secret.

Known Limitations

Pre-existing issues updated after deployment

The deduplication filter compares each issue's fields.updated timestamp against first_run_at. updated is Jira's last-modified timestamp for the issue as a whole — it advances whenever any field changes (comments, priority, description, status, etc.), not only when the create-pr label is applied.

This means a pre-existing issue that already carried the label at deployment time can slip through the filter if it is later updated for an unrelated reason (e.g. someone adds a comment), because its updated timestamp will have advanced past first_run_at while its key is not yet in processed_keys.

Workaround: The only fully reliable way to detect exactly when a label was applied is the Jira changelog API (GET /rest/api/3/issue/{key}/changelog), which requires an extra HTTP call per issue. To avoid that overhead, keep the automation's scope narrow: use a label that is exclusively added as a PR-creation signal and is not already present on issues at the time of deployment.

Once an issue is successfully dispatched its key is written to processed_keys in the KV store and is permanently skipped on every future run — regardless of subsequent label changes, comments, or any other updates to the issue. The only way to re-trigger a previously processed issue is to manually clear the KV store or delete and recreate the automation. This means the risk window described above is finite: as soon as the automation processes a pre-existing issue (even accidentally), it will never dispatch that issue again.

Additional Resources

  • references/setup.md - Jira API token creation, GitHub token scopes, cron schedule reference, and troubleshooting guide.

© OpenHands, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (scripts, references) in skills/jira-issue-to-pr of OpenHands/extensions.

  • SKILL.md
  • .claude-plugin
  • .codex-plugin
  • .plugin/plugin.json
  • README.md
  • references/setup.md
  • scripts/main.py
  • scripts/setup_webhook.py

Open the folder on GitHubat commit d008b81

Compare with similar skills

Jira Issue To PR next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Jira Issue To PR compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Jira Issue To PR this skillOpenHands/extensions158—~4.1kAutomated safety check: PassMIT
Link Ticket To SessionJayantDevkar/claude-code-karma329—~1.8kAutomated safety check: NotesApache-2.0
Dynamo PR DescriptionDynamoDS/Dynamo2k—~880Automated safety check: PassApache-2.0
Adhoc PRshopsys/shopsys350—~2.3kAutomated safety check: PassCustom licence
Code Reviewsortie-ai/sortie196—~2.9kAutomated safety check: PassMIT
Review Release Noteschef/chef-web-docs143—~5.2kAutomated safety check: PassCustom licence

Similar skills

  • Link Ticket To Session

    JayantDevkar/claude-code-karma

    Link the current Claude Code session to a ticket (Linear, Jira, GitHub Issues, or GitHub Pull Requests) and cache its title/status in karma.

    329 GitHub stars~1.8k tokensUpdated 10 days ago
    DevelopmentAuto-check: notes
  • Dynamo PR Description

    DynamoDS/Dynamo

    Generate PR descriptions for Dynamo that align with the team template section names and order.

    2k GitHub stars~880 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Adhoc PR

    shopsys/shopsys

    Ad-hoc Pull Request Publisher — commits the current changes, pushes the branch, opens a GitHub pull request against the repository's default branch, and creates a matching SSP Jira issue in the…

    350 GitHub stars~2.3k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Code Review

    sortie-ai/sortie

    Reviews pull requests in this repository for the defect classes a mechanical checklist misses: documentation that outlived the code it describes, reaction and retry state that leaks or clobbers a…

    196 GitHub stars~2.9k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Review Release Notes

    chef/chef-web-docs

    Read a release notes file and edit it using Jira release data and GitHub pull requests as co-equal, optional sources.

    143 GitHub stars~5.2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Create PR

    wanteddev/montage-web

    Create a GitHub pull request from the current branch. An agent skill from wanteddev/montage-web.

    117 GitHub stars~6.8k tokensUpdated yesterday
    DevelopmentAuto-check: notes

More from OpenHands/extensions

All 78 skills in this repo
  • GitHub

    OpenHands/extensions

    Interact with GitHub repositories, pull requests, issues, and workflows using the GITHUBTOKEN environment variable and GitHub CLI.

    158 GitHub starsUsed in 1 repo~1.7k tokens
    Auto-check passed
  • Agent Readiness Report

    OpenHands/extensions

    Evaluate how well a codebase supports autonomous AI-assisted development.

    158 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Discord

    OpenHands/extensions

    Build and automate Discord integrations (bots, webhooks, slash commands, and REST API workflows).

    158 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • GitHub Issue To PR

    OpenHands/extensions

    Create an automation that implements GitHub issues when a configurable trigger label is applied.

    158 GitHub stars~4.4k tokensUpdated yesterday
    Auto-check passed
  • GitHub Repo Monitor

    OpenHands/extensions

    This skill should be used when the user asks to "monitor a GitHub repository", "watch GitHub for issues or PRs", "respond to @OpenHands mentions on GitHub", "set up an OpenHands GitHub integration"…

    158 GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed
  • GitLab Issue To Mr

    OpenHands/extensions

    Create an automation that implements GitLab issues when a configurable trigger label is applied.

    158 GitHub stars~4.9k tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about Jira Issue To PR

What does Jira Issue To PR do?

This skill should be used when the user asks to "set up a Jira automation to create pull requests", "poll Jira for create-pr issues", "automatically create GitHub PRs from Jira tickets", "deploy a…. Jira Issue To PR is an agent skill from OpenHands/extensions. This skill should be used when the user asks to "set up a Jira automation to create pull requests", "poll Jira for create-pr issues", "automatically create GitHub PRs from Jira tickets", "deploy a Jira issue-to-PR automation", "create a Jira to GitHub PR workflow", or mentions automating GitHub PR creation from a Jira label.

When should I use Jira Issue To PR?

Jira Issue To PR fits situations like: asks to set up a Jira automation to create pull requests; poll Jira for create-pr issues; automatically create GitHub PRs from Jira tickets; deploy a Jira issue-to-PR automation.

How do I install Jira Issue To PR in Claude Code?

Run `npx skills add OpenHands/extensions --skill jira-issue-to-pr -a claude-code`. Or copy the skill folder (skills/jira-issue-to-pr in OpenHands/extensions) into .claude/skills/jira-issue-to-pr in your project. Claude Code loads it when a task matches its description.

How do I install Jira Issue To PR in Codex?

Run `npx skills add OpenHands/extensions --skill jira-issue-to-pr -a codex`. Or copy the skill folder (skills/jira-issue-to-pr in OpenHands/extensions) into .agents/skills/jira-issue-to-pr in your project. Codex loads it when a task matches its description.

Can I use Jira Issue To PR in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add OpenHands/extensions --skill jira-issue-to-pr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/jira-issue-to-pr, .gemini/skills/jira-issue-to-pr, .github/skills/jira-issue-to-pr and .opencode/skills/jira-issue-to-pr in your project.

What does Jira Issue To PR need to run?

Going by SKILL.md and its folder, Jira Issue To PR needs Python for the scripts in its folder, the command-line tools its instructions call (curl, python3 and openssl) and credentials named JIRA_ADMIN_TOKEN, OPENHANDS_API_KEY, JIRA_CLOUD_KEY and AUTOMATION_KV_TOKEN. Our summary lists: Python 3; A credential in OPENHANDS_API_KEY; A credential in OPENHANDS_AUTOMATION_API_KEY.

Does Jira Issue To PR access the network?

SKILL.md names 1 domain. In commands or code: acme.atlassian.net; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Jira Issue To PR safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Jira Issue To PR use?

Jira Issue To PR is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Jira Issue To PR use?

About 4.1k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.7k tokens, read only when the agent opens those files.

What are the alternatives to Jira Issue To PR?

Skills that share tags, products or a category with Jira Issue To PR: Link Ticket To Session (JayantDevkar/claude-code-karma, 329 stars), Dynamo PR Description (DynamoDS/Dynamo, 2k stars), Adhoc PR (shopsys/shopsys, 350 stars) and Code Review (sortie-ai/sortie, 196 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Jira Issue To PR?

OpenHands (a GitHub organization) maintains it in OpenHands/extensions, which has 158 GitHub stars. The repository holds 78 skills in this directory. The repository was last updated on October 7, 2026.

Source: OpenHands/extensions on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.