AgentSkillsCN

acli-jira

利用 Terraform 在 Hetzner Cloud 上创建并管理服务器集群的工具包。当用户请求部署虚拟机、搭建测试基础设施,或在 Hetzner Cloud 上搭建服务器集群时,可运用此技能。该技能提供了经过优化的 Terraform 模板,专为网络测试而设计,内置严格的防火墙规则、公有与私有网络接口,并支持 ZeroTier VPN。

SKILL.md
--- frontmatter
name: acli-jira
description: Atlassian CLI (acli) for Jira operations. Use when creating tickets, searching issues, updating status, or managing Jira work items from the command line.

Atlassian CLI (acli) - Jira Reference

The Atlassian CLI (acli) provides command-line access to Jira. Authentication is automatic via devcontainer environment variables.

Command Structure

code
acli jira <resource> <action> [flags]

Resources: workitem, project, sprint, board, filter


Work Item Operations

Create Ticket

bash
acli jira workitem create \
  --project "CLDS" \
  --type "Task" \
  --summary "Ticket summary here" \
  --description "Detailed description (supports markdown)"

# With additional options
acli jira workitem create \
  --project "CLDS" \
  --type "Bug" \
  --summary "Fix login issue" \
  --description "Users cannot login after password reset" \
  --assignee "user@wiliot.com" \
  --label "bug,urgent"

# Self-assign
acli jira workitem create \
  --project "CLDS" \
  --type "Task" \
  --summary "My task" \
  --assignee "@me"

Flags:

FlagDescription
--project, -pProject key (e.g., "CLDS", "INF") - required
--type, -tWork item type: Task, Bug, Story, Epic - required
--summary, -sTicket title - required
--description, -dDetailed description (markdown supported)
--assignee, -aEmail, account ID, @me, or default
--label, -lComma-separated labels
--parentParent work item ID (for subtasks)
--jsonOutput in JSON format

Output: Returns the ticket key and URL (e.g., CLDS-16825)


View Ticket

bash
# Basic view
acli jira workitem view CLDS-12345

# JSON output for parsing
acli jira workitem view CLDS-12345 --json

# Specific fields only
acli jira workitem view CLDS-12345 --fields "summary,status,assignee"

# Open in browser
acli jira workitem view CLDS-12345 --web

Flags:

FlagDescription
--fields, -fComma-separated field list (default: key,issuetype,summary,status,assignee,description)
--jsonJSON output
--web, -wOpen in web browser

Special field values:

  • *all - All fields
  • *navigable - All navigable fields
  • -description - Exclude description

Search Tickets (JQL)

bash
# Search by project
acli jira workitem search --jql "project = CLDS" --limit 20

# Search by status
acli jira workitem search --jql "project = CLDS AND status = 'In Progress'"

# Search by assignee
acli jira workitem search --jql "assignee = currentUser()"

# Search recent tickets
acli jira workitem search --jql "project = CLDS ORDER BY created DESC" --limit 10

# Get count only
acli jira workitem search --jql "project = CLDS AND status = Open" --count

# CSV output
acli jira workitem search --jql "project = CLDS" --csv --fields "key,summary,status"

# Paginate all results
acli jira workitem search --jql "project = CLDS" --paginate

Flags:

FlagDescription
--jql, -jJQL query string - required
--limit, -lMax results (default: none)
--countReturn count only
--jsonJSON output
--csvCSV output
--fields, -fFields to display
--paginateFetch all pages
--filterUse saved filter ID instead of JQL

Common JQL patterns:

code
project = CLDS                           # By project
status = "In Progress"                   # By status
assignee = currentUser()                 # My tickets
created >= -7d                           # Last 7 days
labels in (urgent, bug)                  # By labels
summary ~ "login"                        # Text search
ORDER BY priority DESC, created DESC     # Ordering

Edit Ticket

bash
# Update summary
acli jira workitem edit --key "CLDS-12345" --summary "New summary"

# Update description
acli jira workitem edit --key "CLDS-12345" --description "Updated description"

# Change assignee
acli jira workitem edit --key "CLDS-12345" --assignee "user@wiliot.com"

# Remove assignee
acli jira workitem edit --key "CLDS-12345" --remove-assignee

# Add labels
acli jira workitem edit --key "CLDS-12345" --labels "new-label"

# Remove labels
acli jira workitem edit --key "CLDS-12345" --remove-labels "old-label"

# Multiple tickets via JQL
acli jira workitem edit --jql "project = CLDS AND labels = temp" --remove-labels "temp" --yes

Flags:

FlagDescription
--key, -kTicket key(s), comma-separated
--jqlJQL query to select tickets
--summary, -sNew summary
--description, -dNew description
--assignee, -aNew assignee
--remove-assigneeRemove assignee
--labels, -lAdd labels
--remove-labelsRemove labels
--type, -tChange work item type
--yes, -ySkip confirmation

Transition Status

bash
# Move to Done
acli jira workitem transition --key "CLDS-12345" --status "Done" --yes

# Move to In Progress
acli jira workitem transition --key "CLDS-12345" --status "In Progress" --yes

# Bulk transition via JQL
acli jira workitem transition --jql "project = CLDS AND status = 'To Do'" --status "In Progress" --yes

Flags:

FlagDescription
--key, -kTicket key(s)
--jqlJQL query
--status, -sTarget status - required
--yes, -ySkip confirmation

Common statuses: To Do, In Progress, In Review, Done, Closed


Comments

bash
# Add comment
acli jira workitem comment create --key "CLDS-12345" --body "Comment text here"

# Add comment from file
acli jira workitem comment create --key "CLDS-12345" --body-file "comment.txt"

# List comments
acli jira workitem comment list --key "CLDS-12345"

# Edit last comment
acli jira workitem comment create --key "CLDS-12345" --body "Updated comment" --edit-last

Subcommands: create, list, update, delete


Project Operations

List Projects

bash
# Recent projects
acli jira project list --recent

# All projects (paginated)
acli jira project list --paginate

# Limited list
acli jira project list --limit 50

# JSON output
acli jira project list --limit 50 --json

# Find specific project
acli jira project list --limit 100 | grep -i "cloud"

Flags:

FlagDescription
--recentUp to 20 recently viewed
--limit, -lMax projects (default: 30)
--paginateFetch all pages
--jsonJSON output

View Project

bash
acli jira project view CLDS

Sprint Operations

bash
# List work items in sprint
acli jira sprint list-workitems --board-id 123 --sprint-id 456

Common Patterns

Create Ticket for Feature Branch

bash
# Create ticket and capture key
TICKET=$(acli jira workitem create \
  --project "CLDS" \
  --type "Task" \
  --summary "Implement feature X" \
  --json | jq -r '.key')

# Create branch
git checkout -b "feature/${TICKET}-implement-feature-x"

Find My Open Tickets

bash
acli jira workitem search \
  --jql "assignee = currentUser() AND status != Done" \
  --fields "key,summary,status,priority"

Bulk Update Labels

bash
acli jira workitem edit \
  --jql "project = CLDS AND created >= -30d AND labels is EMPTY" \
  --labels "needs-triage" \
  --yes

Create Sub-Tasks for Feature

Used by /feature:tasks to create sub-tasks under a parent ticket:

bash
# Extract project from parent ticket
PARENT_TICKET="CLDS-1234"
PROJECT=$(echo "$PARENT_TICKET" | grep -oE '^[A-Z]+')

# Create sub-task
SUBTASK_KEY=$(acli jira workitem create \
  --project "$PROJECT" \
  --type "Sub-task" \
  --parent "$PARENT_TICKET" \
  --summary "T001: Create project structure" \
  --json | jq -r '.key')

echo "Created sub-task: $SUBTASK_KEY"

Bulk Create Sub-Tasks from tasks.md

bash
#!/bin/bash
PARENT_TICKET="CLDS-1234"
PROJECT=$(echo "$PARENT_TICKET" | grep -oE '^[A-Z]+')

# Parse tasks.md and create sub-tasks
grep -E '^\- \[ \] T[0-9]+' tasks.md | while read -r line; do
  # Extract task ID and description
  TASK_ID=$(echo "$line" | grep -oE 'T[0-9]+')
  SUMMARY=$(echo "$line" | sed 's/.*\] //' | sed 's/\[.*\] //')

  # Create sub-task
  KEY=$(acli jira workitem create \
    --project "$PROJECT" \
    --type "Sub-task" \
    --parent "$PARENT_TICKET" \
    --summary "$TASK_ID: $SUMMARY" \
    --json | jq -r '.key')

  echo "$TASK_ID -> $KEY"
done

Status Lifecycle Transitions

Used by /feature workflow for automated status updates:

bash
# When starting implementation
acli jira workitem transition --key "CLDS-1234" --status "In Progress" --yes

# When creating PR
acli jira workitem transition --key "CLDS-1234" --status "In Review" --yes

# When PR is merged
acli jira workitem transition --key "CLDS-1234" --status "Done" --yes

Output Formats

FlagFormatUse Case
(none)TableHuman-readable display
--jsonJSONParsing with jq, automation
--csvCSVSpreadsheets, data export

JSON parsing examples:

bash
# Get ticket key
acli jira workitem create ... --json | jq -r '.key'

# Get assignee email
acli jira workitem view CLDS-123 --json | jq -r '.fields.assignee.emailAddress'

Error Handling

ErrorCauseSolution
"at least one flag required"Missing required flagCheck required flags (--project, --type, --summary for create)
"project not found"Invalid project keyUse acli jira project list to find valid keys
"transition not valid"Invalid status transitionCheck available transitions for current status
"not authenticated"Auth expired/missingRerun acli jira auth login or restart devcontainer

Notes

  • Always use acli jira workitem, not the old acli issue syntax
  • Project keys are uppercase (CLDS, INF, not "Cloud Services")
  • Use --yes / -y to skip confirmation prompts in scripts
  • Multi-line descriptions work directly in the --description string
  • Authentication is automatic in devcontainer via ATLASSIAN_* env vars