feat: add jira-cli skill — Jira issue tracker from the terminal #6

Merged
magnus merged 1 commit from feat/jira-cli-skill into main 2026-05-21 23:07:04 -04:00
Contributor

Summary

CLI wrapper for the Atlassian Jira Cloud REST API v3. Search issues, view details, create issues, add comments, list projects, and transition status.

Files

jira-cli/
├── SKILL.md                              # 122 lines — trigger surface, commands, gotchas
└── scripts/
    └── jira-cli                          # 545 lines — the Python CLI binary

Commands

  • me — current user profile
  • list — search issues with JQL or --project shortcut
  • view — full issue details with ADF plain-text extraction
  • projects — list all accessible projects
  • create — create issues with type and priority
  • comment — add comments to issues
  • transition — change issue status by name or ID

Features

  • All cli-builder patterns: --json, --dry-run, --quiet, --verbose
  • Lazy auth: --help and --dry-run work without credentials
  • Dual-output via emit() helper
  • Structured logging with log/warn/die
  • Pre-parsed global flags (flags work in any position)
  • Atlassian Document Format (ADF) plain-text extraction for descriptions
  • Transition lookup by name with available-options fallback

Setup

pip install requests
export JIRA_EMAIL="your-email@example.com"
export JIRA_API_TOKEN="your-token"
export JIRA_SERVER="https://your-domain.atlassian.net"
./scripts/jira-cli me

Token is free from id.atlassian.com/manage/api-tokens.

QA Gate (10/10 tests passing)

  • Syntax check ✓
  • --help on top level ✓
  • --help on all 7 subcommands ✓
  • Missing required args → error with usage ✓
  • --dry-run returns meaningful preview ✓
  • Unknown command → error ✓
  • Errors to stderr, data to stdout ✓
  • JSON dry-run output parseable ✓
  • No args → prints help ✓
  • Dry-run on chained commands ✓

Signed-off-by: Jasper magnus@groktop.us

## Summary CLI wrapper for the Atlassian Jira Cloud REST API v3. Search issues, view details, create issues, add comments, list projects, and transition status. ## Files ``` jira-cli/ ├── SKILL.md # 122 lines — trigger surface, commands, gotchas └── scripts/ └── jira-cli # 545 lines — the Python CLI binary ``` ## Commands - `me` — current user profile - `list` — search issues with JQL or --project shortcut - `view` — full issue details with ADF plain-text extraction - `projects` — list all accessible projects - `create` — create issues with type and priority - `comment` — add comments to issues - `transition` — change issue status by name or ID ## Features - All cli-builder patterns: --json, --dry-run, --quiet, --verbose - Lazy auth: --help and --dry-run work without credentials - Dual-output via emit() helper - Structured logging with log/warn/die - Pre-parsed global flags (flags work in any position) - Atlassian Document Format (ADF) plain-text extraction for descriptions - Transition lookup by name with available-options fallback ## Setup ```bash pip install requests export JIRA_EMAIL="your-email@example.com" export JIRA_API_TOKEN="your-token" export JIRA_SERVER="https://your-domain.atlassian.net" ./scripts/jira-cli me ``` Token is free from id.atlassian.com/manage/api-tokens. ## QA Gate (10/10 tests passing) - Syntax check ✓ - --help on top level ✓ - --help on all 7 subcommands ✓ - Missing required args → error with usage ✓ - --dry-run returns meaningful preview ✓ - Unknown command → error ✓ - Errors to stderr, data to stdout ✓ - JSON dry-run output parseable ✓ - No args → prints help ✓ - Dry-run on chained commands ✓ Signed-off-by: Jasper <magnus@groktop.us>
CLI wrapper for the Atlassian Jira Cloud REST API v3. Commands:
- me: current user profile
- list: search issues with JQL or --project shortcut
- view: full issue details with ADF plain-text extraction
- projects: list all accessible projects
- create: create issues with type and priority
- comment: add comments to issues
- transition: change issue status by name or ID

All cli-builder patterns: --json, --dry-run, --quiet, --verbose,
lazy auth, emit() dual-output, structured logging, pre-parsed
global flags. Auth via JIRA_EMAIL + JIRA_API_TOKEN (Basic Auth).

Signed-off-by: Jasper <magnus@groktop.us>
magnus merged commit 0e819fb3fd into main 2026-05-21 23:07:04 -04:00
jasper left a comment

Jasper (automated review) — First-pass review

Overall: Solid skill. Clean structure, proper cli-builder patterns, good error handling (401/403/404/500+, connection errors, dry-run previews). 10/10 QA tests pass. A few minor suggestions below.

What works well

  • Lazy auth — --help and --dry-run work without credentials
  • Global flags parse from any position
  • Dual-output via emit() pattern
  • ADF description extraction with graceful fallback
  • Transition lookup by name with available-options fallback
  • Clean SKILL.md with gotchas documented

Minor suggestions

## Jasper (automated review) — First-pass review **Overall:** Solid skill. Clean structure, proper cli-builder patterns, good error handling (401/403/404/500+, connection errors, dry-run previews). 10/10 QA tests pass. A few minor suggestions below. ### What works well - Lazy auth — `--help` and `--dry-run` work without credentials - Global flags parse from any position - Dual-output via `emit()` pattern - ADF description extraction with graceful fallback - Transition lookup by name with available-options fallback - Clean SKILL.md with gotchas documented ### Minor suggestions
Author
Contributor

Suggestion: _extract_text() only handles one level of ADF nesting (paragraph → text). ADF can contain lists, code blocks, headings, and nested content. Consider recursive traversal, or document the limitation in the gotchas section. Acceptable for MVP — real Jira issues often have multi-level formatted descriptions.

**Suggestion:** `_extract_text()` only handles one level of ADF nesting (paragraph → text). ADF can contain lists, code blocks, headings, and nested content. Consider recursive traversal, or document the limitation in the gotchas section. Acceptable for MVP — real Jira issues often have multi-level formatted descriptions.
Author
Contributor

Suggestion: search_issues() hardcodes the field list. Consider a --fields flag for flexibility (e.g., --fields summary,status,description,duedate). Low priority for MVP.

**Suggestion:** `search_issues()` hardcodes the field list. Consider a `--fields` flag for flexibility (e.g., `--fields summary,status,description,duedate`). Low priority for MVP.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
magnus/agent-skills!6
No description provided.