Automate Jira ticket to GitHub PR workflow
Project description
Ticket2PR
Ticket2PR is an AI-powered automation tool designed to streamline the process of converting development tickets into ready-to-merge pull requests.
Workflow
The tool runs a single pipeline from Jira ticket to GitHub PR. Only the steps that truly need AI use it—everything else is done with APIs and deterministic logic. That keeps token usage and run time low.
Full pipeline:
- Workspace — If no workspace path is set (CLI or config), clone the repo to a temp folder; otherwise use the given path. The temp folder is removed when the run finishes.
- Fetch Jira issue — Get ticket details via Jira API.
- Create branch — Generate branch name from issue key/summary, create it on GitHub, and link the branch to the Jira ticket.
- Checkout branch — Git fetch and checkout.
- Solve ticket — 2 AI agents in sequence: a Planner explores the codebase and writes a
PLAN.md(no other files); an Executor implements that plan (code edits, then stages the changed files). - Fix tests (optional,
--fix-tests) — 2 AI agents in sequence: a Test planner analyzes staged changes, finds existing related tests, and writes aTESTS_PLAN.md; a Test fixer runs those tests, fixes failures, and stages only the fix-related changes. - Pre-commit (if installed and config present) — Run pre-commit; only if it fails, an AI agent tries to fix lint/format issues (with retries). This step is skipped if pre-commit isn’t installed or if
.pre-commit-config.yamlis missing or not a file. - Commit message & PR body — AI agent: generates a conventional commit message and PR description from the changes and ticket context.
- Commit and push — Git commit and push.
- PR title — Build title from issue key and summary, e.g.
[PROJ-123] Summary. - Create PR — Open the pull request via GitHub API.
Agents
Ticket2PR uses several specialized agents, each with a single responsibility:
| Agent | Purpose |
|---|---|
| Planner | Reads the Jira ticket, explores the codebase, and writes a single PLAN.md with implementation steps and file list. Does not modify any other files. |
| Executor | Implements the plan: makes the code changes and stages only the files listed in the plan. |
| Test planner | Analyzes staged changes, finds existing related tests, and writes a TESTS_PLAN.md with test paths and run commands (used only with --fix-tests). |
| Test fixer | Runs tests from the plan, diagnoses failures, and applies fixes until all tests pass (used only with --fix-tests). |
| Pre-commit fixer | When pre-commit fails (lint/format, etc.), suggests and applies fixes so hooks pass. |
| Commit & PR generator | Writes a conventional commit message and the PR body from the diff and ticket context. |
They run in sequence where needed; the workflow invokes only the agents required for the current run (e.g. no test fixer without --fix-tests, no pre-commit fixer if hooks pass or pre-commit isn’t available).
Getting Started
Follow these steps to set up and start using Ticket2PR:
Installation
You can install ticket2pr directly from PyPI:
pip install ticket2pr
Usage
Run the Ticket2PR CLI to create a pull request from a Jira ticket:
ticket2pr run <JIRA_ISSUE_KEY>
Replace <JIRA_ISSUE_KEY> with the actual ID of your Jira ticket (e.g., PROJ-123).
Use --fix-tests (or -t) to run an extra step after solving the ticket: the tool will plan and run tests from the staged changes, fix any failures with an AI agent, and stage only the fix-related changes before committing.
Configuration
Ticket2PR automatically guides you through the initial configuration process the first time you run the CLI.
To re-initialize the interactive configuration session, run:
ticket2pr init
Alternatively, you can manually configure settings by editing the ~/.ticket2pr/config.toml file or by setting environment variables.
Prerequisites
- Jira Account and API Token: An account with access to a Jira instance and a valid API token with necessary permissions to view tickets.
- GitHub Account and Personal Access Token: A GitHub account with permissions to create branches and pull requests in your target repository, and a Personal Access Token (PAT) with
reposcope for GitHub API access. - Claude Code: Be logged in locally to Claude Code (used for the AI-powered steps).
License
This project is open-sourced under the terms of the LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ticket2pr-0.4.2.tar.gz.
File metadata
- Download URL: ticket2pr-0.4.2.tar.gz
- Upload date:
- Size: 111.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c36a3cea87b382cfb4ef8d956575c509e374f94ecf185721e8d18e8c331d58f3
|
|
| MD5 |
9ea2c8c276fe1b307462390cabe5c3bb
|
|
| BLAKE2b-256 |
48d1da48e76f3bebc991278da8bfbc57d0c0003777d1c431fe341769c8b268f0
|
File details
Details for the file ticket2pr-0.4.2-py3-none-any.whl.
File metadata
- Download URL: ticket2pr-0.4.2-py3-none-any.whl
- Upload date:
- Size: 40.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10240ca79ec72ff1852bbd64b2bdef2597c8f8a65ac4957aae07b963adff98ba
|
|
| MD5 |
1dd6d6c8cf6d3f84a62cc76e6f380cf3
|
|
| BLAKE2b-256 |
94b240ff4a8e1ba50a524e1de0f8185f0fceea52c6e649501d08bbfe52c56e1f
|