Download the PHP package mi-lopez/jira-cli-wizard without Composer
On this page you can find all versions of the php package mi-lopez/jira-cli-wizard. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package jira-cli-wizard
๐ฏ Jira CLI Wizard
A beautiful, interactive CLI wizard for creating Jira tickets with smart defaults and an intuitive user experience. Skip the web interface hassle and create tickets directly from your terminal!
โจ Features
- ๐งโโ๏ธ Interactive Wizard: Step-by-step guided ticket creation
- ๐ค Non-Interactive Mode: Create tickets from scripts and AI agents using flags
- ๐ฏ Smart Defaults: Suggests active sprints, recent epics, and assignees
- ๐ Quick Creation: Create tickets based on existing ones
- โ๏ธ Update Command: Modify fields on existing tickets, interactively or by flag
- ๐ Workflow Transitions: Move a ticket's status by name, and list the moves that are legal right now
- ๐ View Command: Read a ticket and its comments in the terminal, with the text back in Markdown
- ๐ Attachments: Upload files and screenshots on create, create-from and update
- ๐ Markdown Descriptions: Headings, lists, bold, italic, code and links render as real Jira ADF
- ๐ท๏ธ Labels: Prompted in the wizard, prefilled from the template when copying a ticket
- ๐ Template System: Copy settings from existing tickets
- ๐ Resource Discovery: List projects, issue types, priorities, epics, sprints and transitions as JSON
- ๐งช Dry Run: Preview the full payload before creating any ticket
- ๐ Secure: API token-based authentication
- ๐จ Beautiful UI: Colorful, user-friendly terminal interface
- โก Fast Setup: One-command configuration
- ๐ Complete Support: Projects, issue types, priorities, assignees, sprints, and epics
- ๐ Epic Linking: Automatically link tickets to epics
- ๐ Sprint Integration: Add tickets to active sprints
- ๐ Status Monitoring: Check configuration and connection status
- ๐ Smart Search: Find projects, users, and issue types by name or partial match
๐ Quick Start
Installation
Configuration
Configure your Jira credentials (one-time setup):
You'll need:
- Your Jira instance URL (e.g.,
https://yourcompany.atlassian.net) - Your email address
- An API token (generate here)
Create Your First Ticket
The wizard will guide you through:
- Project Selection - Choose from your accessible projects
- Issue Type - Select Story, Bug, Task, etc.
- Summary - Enter a descriptive title
- Description - Add details (optional)
- Priority - Set importance level
- Assignee - Assign to team members or leave unassigned
- Additional Options - Link to epics, add to active sprint
๐ฅ Power Features
Create from Existing Ticket
The fastest way to create similar tickets:
What gets copied:
- โ
Project (or override with
--project) - โ Issue type
- โ Priority
- โ Assignee
- โ Epic (if linked)
- โ Sprint (current active sprint)
What you provide:
- โ New summary
- โ New description
- โ Optional: modify any copied settings
๐ Usage Examples
Standard Ticket Creation
Quick Template Creation
Cross-Project Template
๐ ๏ธ Available Commands
Create Ticket (Interactive)
Full interactive wizard for creating tickets from scratch.
Create Ticket (Non-Interactive)
Skip the wizard entirely by passing flags. Outputs only the issue key to stdout โ ideal for scripts and AI agents.
Available flags:
| Flag | Short | Required | Description |
|---|---|---|---|
--project |
-p |
Yes | Project key (e.g. ALDO) |
--type |
-t |
Yes | Issue type name (e.g. Task, Story, Epic) |
--summary |
-s |
Yes | Ticket title |
--description |
-d |
No | Ticket description |
--parent |
No | Parent/epic key (e.g. ALDO-10) |
|
--epic |
No | Alias for --parent |
|
--labels |
-l |
No | Comma-separated labels (e.g. upgrade,backend) |
--priority |
No | Priority name (e.g. High, Medium, Low) |
|
--sprint |
No | Sprint ID or active to auto-resolve the current sprint |
|
--assignee |
-a |
No | Display name, email, account id, or me |
--attachment |
No | Path to a file to upload. Repeatable | |
--dry-run |
No | Print the JSON payload without creating the ticket |
--assigneeresolves by exact display name or email first, then by partial match. An ambiguous partial match is rejected with the list of candidates rather than silently picking one.
--dry-runrequires--project,--typeand--summary. Without them it fails instead of falling through to the interactive wizard, which would create a real ticket.
Capture the key in a script:
Preview before creating (dry-run):
Update an Existing Ticket
Fields accept the same values as create. Two update-specific conventions:
--statusmoves the ticket through the workflow. Status is not a writable field in Jira, so this ridesPOST /issue/{key}/transitionsinstead of the field update. It accepts a transition id, a transition name, or the name of the resulting status, matched case-insensitively; an unambiguous fragment works too. When nothing matches, the error lists what is legal from the current status. Asking for the status the ticket already has is a no-op, not a failure, so re-running a script is safe.--assignee=unassigned(ornone) clears the assignee.--epic=noneclears the parent link.- An empty
--labels=clears every label, whereas omitting the flag leaves them untouched.
View a Ticket
The description comes back from Jira as ADF and is rendered in the same Markdown flavour
create and update accept, so a ticket can be read, edited and sent back without the
formatting drifting. Headings, lists, task lists, tables, code blocks, quotes, mentions and
links are all preserved; attachments show as [attachment: name].
--comments (-c) appends the thread, oldest first, with author, date and an (edited โฆ)
marker when the comment was actually changed. Comments live behind their own endpoint, so
they cost an extra request and are only fetched when you ask for them:
--json prints a flattened object โ key, url, summary, status, type, priority, assignee,
reporter, project, parent, labels, timestamps and the Markdown description โ rather than
Jira's raw payload, which also carries the changelog and every rendered field. With
--comments it also carries a comments array (author, created, updated, Markdown body);
without the flag the key is absent, which is a different claim from an empty list.
Attach Files
Works on create, create-from and update. The flag is repeatable and the wizard also
prompts for files:
Missing files are reported before anything is sent to Jira.
Markdown in Descriptions
Descriptions are converted to Jira's ADF, so markdown renders as real formatting instead of literal characters:
Supported: headings, bullet and ordered lists, **bold**, *italic*, `code`,
[links](url), blank lines as paragraph breaks and single newlines as hard breaks.
List Resources as JSON
Discover valid values for flags before scripting or using with an AI agent:
Transitions are keyed off the issue, not the project: which moves are legal depends on where the ticket currently stands, so the list never offers a step Jira would reject.
Example output (list projects):
Typical AI agent workflow:
Create from Template
Create a new ticket using an existing ticket as a template.
Examples:
View a Ticket
Examples:
Configure Credentials
Set up or update your Jira credentials and connection settings.
Check Status
Display current configuration and test connection to Jira.
Get Help
โ๏ธ Configuration
Configuration is stored in ~/.jira-cli-config.json. You can:
- View current config:
./vendor/bin/jira-wizard status - Reconfigure:
./vendor/bin/jira-wizard configure - Manual edit: Edit
~/.jira-cli-config.jsondirectly
Environment Variables
You can also set configuration via environment variables:
๐ฏ Smart Features
Flexible Selection
All selection prompts support multiple input methods:
Projects:
- Number:
10(from numbered list) - Project key:
CAM(exact match) - Partial key:
CAM(if unique) - Project name:
CAMEL(partial match)
Issue Types:
- Number:
0(from numbered list) - Type name:
TareaorHistoria - Partial name:
Hist(matches Historia)
Priorities:
- Number:
2(from numbered list) - Priority name:
HighorMedium - Skip:
skip(use default)
Assignees:
- Number:
15(from numbered list) - Full name:
Miguel Lopez - Email:
[email protected] - Partial name:
Miguel - Unassigned:
unassigned
Smart Defaults
- Active Sprint: Automatically suggests current active sprint
- Recent Epics: Shows epics ordered by last updated
- Team Members: Lists assignable users for the project
- Cross-Project: Maintains settings when copying between projects
Error Handling
- Connection Testing: Validates credentials before use
- Graceful Fallbacks: Continues even if optional features fail
- Clear Messages: Descriptive error messages with solutions
- Multiple Matches: Shows options when partial matches are ambiguous
๐ง Requirements
- PHP: ^8.1
- Jira: Cloud or Server with REST API access
- Extensions:
curl,json
๐จ Advanced Usage
Workflow Integration
Create tickets as part of your development workflow:
Batch Operations
Use shell scripting for batch operations:
Team Productivity
Project Templates:
- Create a "template" ticket for each project type
- Use
create-fromto maintain consistency - Share template ticket keys with team
Sprint Planning:
- Clone user stories with
create-from - Maintain epic linkage across related tickets
- Quickly create test tickets for each feature
Custom Fields Support
The wizard automatically handles:
- Standard Fields: Summary, Description, Priority, Assignee
- Project Fields: Issue Types, Components, Versions
- Agile Fields: Sprint, Epic, Story Points
- Custom Fields: (via template copying)
๐ Troubleshooting
Common Issues
Connection Failed
Solution: Check your email and API token. Regenerate token if needed.
No Projects Found
Solution: Ensure your account has access to at least one Jira project.
Permission Denied
Solution: Verify you have permission to create issues in the selected project.
Template Ticket Not Found
Solution: Check the ticket key and ensure you have access to view it.
Invalid Project Override
Solution: Verify the project key exists and you have access to it.
Debug Information
Performance Tips
- Connection Caching: The CLI tests connection once per session
- Project Caching: Project lists are cached during wizard execution
- API Optimization: Minimal API calls for better performance
- Batch Operations: Use templates for creating multiple similar tickets
Getting Help
- ๐ Documentation
- ๐ Report Issues
- ๐ฌ Discussions
- ๐ง Contact
๐งช Development
Setup Development Environment
Project Structure
Running Tests
๐ค Contributing
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for new functionality
- Ensure all tests pass (
composer test) - Check code style (
composer cs-check) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Code Style
This project follows PSR-12 coding standards:
๐ Security
API Token Security
- API tokens are stored locally in
~/.jira-cli-config.json - Tokens are never logged or transmitted except to Jira
- Use file permissions to protect your config:
chmod 600 ~/.jira-cli-config.json
Best Practices
- Generate dedicated tokens: Create a token specifically for CLI use
- Regular rotation: Rotate API tokens periodically
- Minimal permissions: Use accounts with minimal required permissions
- Secure storage: Keep your config file secure
๐ Roadmap
Version 1.1.0
- [ ] Bulk Operations: Create multiple tickets at once
- [ ] Custom Templates: Save and reuse ticket templates locally
- [ ] Custom Fields: Enhanced support for custom Jira fields
- [ ] Watchers: Add watchers to tickets during creation
- [ ] Project Shortcuts: Quick project selection via aliases
Version 1.2.0
- [ ] Comments: Add initial comments to tickets
- [ ] Attachments: Upload files to tickets
- [ ] Sub-tasks: Create sub-tasks automatically
- [ ] Time Tracking: Add time estimates and logging
- [ ] Workflows: Support for custom workflow transitions
Version 2.0.0
- [ ] Multiple Instances: Support multiple Jira instances
- [ ] Plugins: Plugin system for extensions
- [ ] GUI Mode: Optional web interface
- [ ] AI Integration: AI-powered descriptions and summaries
- [ ] Git Integration: Create tickets from git commits/branches
๐ Performance
- Cold start: ~200ms (first run after configuration)
- Warm start: ~100ms (subsequent runs)
- Template operations: ~150ms (including API calls)
- API calls: Optimized to minimize requests
- Memory usage: ~12MB typical usage
๐ Star History
If this tool saves you time, please consider giving it a star! โญ
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- Atlassian: For providing the excellent Jira REST API
- Symfony Console: For the powerful CLI framework
- Guzzle HTTP: For reliable HTTP client functionality
- Contributors: All the amazing people who help improve this tool
๐ Changelog
[1.5.0] - 2026-08-19
Added
- ๐
update --statusโ move a ticket through its workflow by transition name, id or target status name, matched case-insensitively; unmatched values report what is legal from the current status, and asking for the status the ticket already has is a no-op - ๐
list transitions --issue=KEYโ the transitions available from where the ticket stands, for scripts and AI agents
[1.4.0] - 2026-08-19
Added
- ๐ฌ
view --comments(-c) โ appends the comment thread, oldest first, with author, date and an(edited โฆ)marker; paginated, so long threads come back whole
Fixed
- ๐
--versionreported1.0.0on every release. The string was hardcoded when the CLI was written and never bumped; it now comes from Composer's installed version
[1.3.0] - 2026-08-19
Added
- ๐
viewcommand โ print a ticket's fields and description in the terminal, with--jsonfor scripts and AI agents - ๐ค
AdfToTexthelper โ converts Jira's ADF back to the Markdown flavourcreateandupdateaccept, so a description survives a read/edit round trip
[1.2.0] - 2026-08-05
โ ๏ธ Upgrade strongly recommended: 1.1.0 does not start on current Symfony.
Added
- โ๏ธ
updatecommand โ modify summary, description, type, epic/parent, priority, assignee, labels and sprint on an existing ticket, interactively or by flag, with--dry-run - ๐ Attachment upload on
create,create-fromandupdatevia the repeatable--attachmentflag, plus a wizard prompt - ๐ค
--assignee(-a) in non-interactive mode, resolving display name, email, account id orme - ๐ Markdown descriptions rendered as real Jira ADF โ headings, bullet and ordered lists, bold, italic, inline code, links and hard breaks
- ๐ท๏ธ Labels prompted in the
createwizard, and prefilled from the source ticket increate-from
Fixed
- ๐ The CLI failed to start on symfony/console 6.0 and 7.4. Every command class redeclared
$defaultNamewith a type the parent declares untyped, which is a fatal error in PHP. Only 7.3.x happened to work, so1.1.0is broken on a fresh install. Commands now use#[AsCommand] - ๐ Attachment uploads were never sent correctly. The request cleared its
Content-Typewith a null value, which makes Guzzle skipmultipart/form-data, so the body went out with no boundary for the server to parse - ๐
--dry-runcould create a real ticket. Without the non-interactive flags it fell through to the wizard, which ends by creating the ticket. It now fails up front - ๐ An ambiguous
--assigneeno longer silently picks the first partial match; it lists the candidates and stops - ๐ Issue types without a
descriptionno longer emit a PHP warning - ๐
getIssue()now requests thelabelsfield
Internal
- โ Test suite grew from 31 to 114 tests; line coverage from ~19% to ~44%
- ๐
JiraApiClientis injectable into the commands, and accepts an HTTP client, so the suite runs fully offline - ๐ The two duplicated assignee resolvers were merged into one tested helper
- โ๏ธ CI now runs. It had never executed once: it triggered on
main/developwhile the default branch ismaster. Test Analytics and Codecov PR reporting are wired up
[1.1.0] - 2026-06-02
- ๐ค NEW: Non-interactive mode for
createโ pass all fields as flags, get issue key on stdout - ๐งช NEW:
--dry-runflag โ preview the full JSON payload without creating any ticket - ๐ NEW:
listcommand โ outputs projects, issue-types, priorities, epics, and sprints as JSON - ๐ NEW:
--sprint=activeโ auto-resolves the current active sprint at runtime - ๐ FIX:
getEpics()migrated from deprecated/rest/api/3/searchto/rest/api/3/search/jql
[1.0.0] - 2025-07-03
- ๐ Initial release
- โจ Interactive ticket creation wizard
- ๐ง One-command configuration setup
- ๐ฏ Smart defaults for sprints and epics
- ๐จ Beautiful terminal interface
- ๐ Status and health checking
- ๐ Secure API token authentication
- ๐ NEW: Create from existing ticket templates
- ๐ NEW: Cross-project ticket copying
- ๐ NEW: Smart search and selection
- โก NEW: Quick ticket creation workflows
All versions of jira-cli-wizard with dependencies
composer-runtime-api Version ^2.0
symfony/console Version ^6.0|^7.0
guzzlehttp/guzzle Version ^7.0
symfony/process Version ^6.0|^7.0