Skip to content

eugenetaranov/jiractl

Repository files navigation

jiractl

A command-line interface for Jira with interactive menus, secure credential storage, and saved queries.

Features

  • Interactive menus for creating issues and running queries
  • Secure credential storage using system keyring (macOS Keychain, Windows Credential Manager, Linux Secret Service)
  • TOML configuration with saved JQL queries
  • Issue defaults for faster ticket creation, including custom fields for required project-specific values

Installation

Quick Install (macOS/Linux)

curl -fsSL https://raw.githubusercontent.com/eugenetaranov/jiractl/main/install.sh | bash

Homebrew (macOS/Linux)

brew tap eugenetaranov/tap
brew install jiractl

From Source

git clone https://github.com/eugenetaranov/jiractl.git
cd jiractl
make build
make install  # copies to /usr/local/bin

Go Install

go install github.com/eugenetaranov/jiractl/cmd/jiractl@latest

Pre-built Binaries

Download from the releases page.

Quick Start

# Configure server and credentials
jiractl configure

# Run interactive menu
jiractl

# Or use commands directly
jiractl create        # Create a new issue
jiractl query         # Select and run a saved query
jiractl query "My Open Issues"  # Run a specific query

Commands

jiractl

Launches an interactive menu with options to create issues, run queries, or configure settings.

jiractl configure

Interactive setup that prompts for:

jiractl create

Interactively create a new Jira issue. Prompts for issue type, summary, and description.

jiractl query [name]

Run a saved JQL query. Without a name, shows a menu of available queries.

jiractl auth

Manage authentication credentials:

jiractl auth list    # Show stored credentials
jiractl auth create  # Create/update credentials
jiractl auth delete  # Remove credentials
jiractl auth test    # Test connection to Jira

Configuration

Configuration is stored in ~/.jiractl.toml. Credentials are stored securely in the system keyring.

Example Configuration

server = "https://yourcompany.atlassian.net"
project = "PROJ"

[issue_defaults]
assignee = "john.doe"
component = "Backend"
issue_type = "Task"
labels = ["team-alpha"]

# Custom fields applied to every created issue. Useful for required fields
# like Work Allocation that your Jira project enforces. Keys are the Jira
# custom field IDs (found in the error message when a create fails, or in
# the field configuration). Values that look like JSON are parsed as JSON
# so select-list fields can use the {"value": "..."} form; everything else
# is sent as a plain string.
[issue_defaults.custom_fields]
customfield_15838 = '{"value": "Operations"}'
customfield_10001 = "some text value"

# My assigned open issues
[[queries]]
name = "My Open Issues"
jql = "project = ${project} AND assignee = currentUser() AND status != Done ORDER BY updated DESC"
limit = 50

# Issues I'm watching
[[queries]]
name = "Watching"
jql = "watcher = currentUser() AND status != Done ORDER BY updated DESC"
limit = 30

# Recently updated in project
[[queries]]
name = "Recent Updates"
jql = "project = ${project} ORDER BY updated DESC"
limit = 20

# High priority bugs
[[queries]]
name = "Critical Bugs"
jql = "project = ${project} AND type = Bug AND priority in (Highest, High) AND status != Done"
limit = 50

# Sprint backlog
[[queries]]
name = "Current Sprint"
jql = "project = ${project} AND sprint in openSprints() ORDER BY rank ASC"
limit = 100

# Unassigned issues
[[queries]]
name = "Unassigned"
jql = "project = ${project} AND assignee is EMPTY AND status != Done ORDER BY created DESC"
limit = 30

# Created this week
[[queries]]
name = "Created This Week"
jql = "project = ${project} AND created >= startOfWeek() ORDER BY created DESC"
limit = 50

# Issues mentioning me in comments
[[queries]]
name = "Mentioned"
jql = "project = ${project} AND (text ~ currentUser() OR comment ~ currentUser()) ORDER BY updated DESC"
limit = 30

# Blocked issues
[[queries]]
name = "Blocked"
jql = "project = ${project} AND status = Blocked ORDER BY priority DESC"
limit = 50

# Due soon
[[queries]]
name = "Due This Week"
jql = "project = ${project} AND due <= endOfWeek() AND due >= startOfDay() AND status != Done ORDER BY due ASC"
limit = 30

Query Variables

  • ${project} - Replaced with the configured project key

Flags

  • --debug - Enable debug output
  • -v, --version - Show version information
  • -h, --help - Show help

Building

make build         # Build for current platform
make build-all     # Build for all platforms
make test          # Run tests
make lint          # Run linter
make clean         # Clean build artifacts

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors