skills/jira-bulk/SKILL.md
Bulk operations for multiple issues at scale. TRIGGERS: 'bulk update', 'bulk close', 'bulk transition', 'bulk assign', 'transition N issues' (N >= 10), 'update all bugs', 'close 50 issues', 'mass transition', 'update multiple issues', quantities like '50 issues', '100 bugs', '20+ tickets'. Use for operations on 10+ issues. NOT FOR: single issue transitions (use jira-lifecycle), searching only without modifications (use jira-search), single issue field updates (use jira-issue).
npx skillsauth add grandcamel/jira-assistant-skills jira-bulk-operationsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Bulk operations for JIRA issue management at scale - transitions, assignments, priorities, cloning, and deletion.
| Operation | Risk | Notes |
|-----------|------|-------|
| Dry-run any operation | - | Preview only, no changes |
| Bulk transition | !! | Affects many issues; use --dry-run first |
| Bulk assign | !! | Affects many issues; use --dry-run first |
| Bulk set-priority | !! | Affects many issues; use --dry-run first |
| Bulk clone | ! | Creates many issues; can delete |
| Bulk delete | !!! | IRREVERSIBLE - issues permanently lost |
Risk Legend: - Safe, read-only | ! Caution, modifiable | !! Warning, destructive but recoverable | !!! Danger, irreversible
CRITICAL: Always use --dry-run before executing bulk operations. Bulk delete is permanent and cannot be undone.
IMPORTANT: Always use the jira-as CLI. Never run Python scripts directly.
Use this skill when you need to:
Scale guidance:
--dry-run first, then execute--dry-run, then execute in smaller batches if needed# Preview before making changes
jira-as bulk transition --jql "project=PROJ AND status=\"In Progress\"" --to Done --dry-run
# Execute the transition
jira-as bulk transition --jql "project=PROJ AND status=\"In Progress\"" --to Done
For more patterns, see Quick Start Guide.
| Command | Purpose | Example |
|---------|---------|---------|
| jira-as bulk transition | Move issues to new status | --jql "..." --to "Done" |
| jira-as bulk assign | Assign issues to user | --jql "..." --assignee john |
| jira-as bulk set-priority | Set issue priority | --jql "..." --priority High |
| jira-as bulk clone | Clone issues | --jql "..." --include-subtasks |
| jira-as bulk delete | Delete issues permanently | --jql "..." --dry-run |
All commands support --help for full documentation.
All commands support these options:
| Option | Purpose | When to Use |
|--------|---------|-------------|
| -n/--dry-run | Preview changes | Always use for >10 issues |
| -y/--yes | Skip confirmation | Scripted automation |
| -m/--max-issues N | Limit scope (default: 100) | Testing, large operations |
| -o/--output FORMAT | Output format: text (default), json | JSON for scripting |
These options are only available for jira-as bulk transition:
| Option | Purpose | When to Use |
|--------|---------|-------------|
| --comment / -c | Add comment with transition | Documenting bulk changes |
| --resolution / -r | Set resolution (e.g., Fixed) | Closing issues |
# By issue keys
jira-as bulk transition --issues PROJ-1,PROJ-2,PROJ-3 --to Done
# By JQL query
jira-as bulk transition --jql "project=PROJ AND status=\"In Progress\"" --to Done
# With resolution
jira-as bulk transition --jql "type=Bug AND status=Verified" --to Closed --resolution Fixed
# Assign to user
jira-as bulk assign --jql "project=PROJ AND status=Open" --assignee "john.doe"
# Assign to self
jira-as bulk assign --jql "project=PROJ AND assignee IS EMPTY" --assignee self
# Unassign
jira-as bulk assign --jql "assignee=john.leaving" --unassign
jira-as bulk set-priority --jql "type=Bug AND labels=critical" --priority Highest
# Output as JSON
jira-as bulk set-priority --jql "type=Bug" --priority High --dry-run -o json
# ALWAYS preview first with dry-run (cloning creates many issues)
jira-as bulk clone --jql "sprint=\"Sprint 42\"" --include-subtasks --dry-run
# After reviewing the preview, execute without --dry-run
jira-as bulk clone --jql "sprint=\"Sprint 42\"" --include-subtasks --include-links
# Clone to different project
jira-as bulk clone --issues PROJ-1,PROJ-2 --target-project NEWPROJ --prefix "[Clone]"
# ALWAYS preview first with dry-run
jira-as bulk delete --jql "project=CLEANUP" --dry-run
# Delete by issue keys (preview first)
jira-as bulk delete --issues DEMO-1,DEMO-2,DEMO-3 --dry-run
# Execute deletion (after confirming dry-run output)
jira-as bulk delete --jql "project=CLEANUP" --yes
# Keep subtasks when deleting parent issues (subtasks deleted by default)
jira-as bulk delete --jql "project=CLEANUP" --no-subtasks --dry-run
Safety features:
--dry-run shows exactly what will be deleted before making changes--max-issues 100 prevents accidental mass deletion| Issue Count | Recommended Approach |
|-------------|----------------------|
| <50 | Defaults are fine |
| 50-500 | --dry-run first, then execute |
| 500+ | --dry-run, then execute in smaller batches if needed |
Getting rate limit (429) errors?
--max-issues to process in smaller batches| Code | Meaning | |------|---------| | 0 | All operations successful | | 1 | Some failures or validation error | | 130 | Cancelled by user (Ctrl+C) |
| Error | Solution |
|-------|----------|
| Transition not available | Check issue status with jira-as issue get ISSUE-KEY --show-transitions |
| Permission denied | Verify JIRA project permissions (DELETE_ISSUES required for bulk delete) |
| Rate limit (429) | Use --max-issues to process in smaller batches or run during off-peak hours |
| Invalid JQL | Test JQL in JIRA search first |
| Cannot delete issue with subtasks | Subtasks are deleted by default; use --no-subtasks to keep them |
For detailed error recovery, see Error Recovery Playbook.
| Guide | When to Use | |-------|-------------| | Quick Start | Get started in 5 minutes | | Operations Guide | Choose the right command | | Error Recovery | Handle failures | | Safety Checklist | Pre-flight verification | | Best Practices | Comprehensive guidance |
data-ai
Time tracking, worklogs, and time reports. TRIGGERS: 'log time', 'time spent on', 'log hours', 'log work', 'worklog', 'time tracking', 'timesheet', 'how much time', 'time logged', 'time report', 'export timesheet', 'set estimate', 'remaining estimate', 'original estimate'. Use for time-related queries and operations on issues. NOT FOR: SLA tracking (use jira-jsm), date-based issue searches (use jira-search), issue field updates unrelated to time (use jira-issue).
tools
Find issues by criteria (status, assignee, priority, etc.) using JQL. Create filters, export results to CSV/JSON, bulk update. Ideal for reporting and automation.
testing
Issue linking, blockers, and dependency analysis. TRIGGERS: 'what's blocking', 'what is blocking', 'is blocked by', 'link issues', 'link to', 'blockers for', 'depends on', 'clone issue', 'clone with', 'blocking chain', 'dependency graph', 'show dependencies', 'get blockers', 'relates to', 'duplicates'. Use for issue dependencies, relationships, and cloning. NOT FOR: epic linking (use jira-agile), field updates (use jira-issue), bulk cloning (use jira-bulk).
development
JIRA cache and performance operations. TRIGGERS: 'warm the cache', 'warm cache', 'cache status', 'clear cache', 'cache warm', 'cache for project', 'discover project', 'project discovery', 'cache hit rate', 'optimize performance', 'rate limit'. Use for JIRA API performance optimization and project context discovery. NOT FOR: project configuration/settings (use jira-admin), issue operations (use jira-issue), bulk issue modifications (use jira-bulk).