A fast, single-binary CLI tool for working with JIRA issues from the terminal — browse, branch, and create tickets with an interactive Kanban board. Built in Go.
- Single binary — no runtime dependencies
- Secure auth — 1Password, env var, or any token source
- Multi-project — query across JIRA projects
- Interactive TUI — Kanban board with fuzzy search, vim keys
- Reverse workflow —
gci creategenerates a JIRA ticket from your current changes - Worktree + Claude integration — optional, configurable via
gci setup - Smart branch naming —
ISSUE-123_summary-in-kebab-case - Self-update —
gci update
Download the latest binary from Releases, then:
chmod +x gci
mv gci ~/.local/bin/ # or anywhere in your PATH
gci setup # first-time configurationRequires Go 1.19+:
go build -o gci .
mv gci ~/.local/bin/
gci setupgci updategci # list issues across all configured projects
gci -a # include unassigned issues
gci -p MYPROJECT # filter to one projectgci boardgci config doctor # check config health and connectivity
gci config print # display current config
gci config path # show config file location
gci config get KEY # get a specific config value
gci config set KEY VALUE # set a config value
gci config migrate # migrate config to latest schemaAlready started work and need a ticket? gci create analyzes your branch's changes, uses Claude to suggest a title and description, creates the JIRA issue, and renames your branch to match.
gci create # full interactive flow
gci create --dry-run # preview without creating anything
gci create -P MYPROJECT # target a specific project| Key | Action |
|---|---|
hjkl / arrows |
Navigate |
tab / shift+tab |
Switch column |
/ |
Filter (fuzzy search) |
enter |
Interactive mode (branch, worktree, Claude — based on config) |
b |
Create/checkout branch for selected issue |
s |
Cycle scope |
r |
Refresh |
o |
Open in browser |
w |
Setup wizard |
? |
Toggle help |
q / ctrl+c |
Quit |
Pressing Enter on a board issue runs the configurable workflow:
| Config | Behavior |
|---|---|
| Default | Creates/checks out a branch |
enable_worktrees = true |
Creates an isolated git worktree in a sibling directory |
enable_claude = true |
Spawns Claude CLI with full ticket context |
Both options are auto-detected during gci setup. Branch naming follows ISSUE-123_summary-in-kebab-case.
- Git (configured with your email)
- JIRA account with API token access
- 1Password CLI (optional) — for token retrieval; env var works too
- Claude CLI (optional) — for
gci createand Interactive Mode's Claude integration - Go 1.19+ (build from source only)
gci setupOr press w in the board view. The wizard walks through projects, JIRA URL, board discovery, and optional integrations (worktrees, Claude).
~/.config/gci/config.toml:
schema_version = 1
projects = ["MYPROJECT", "INFRA"]
default_scope = "assigned_or_reported"
jira_url = "https://your-company.atlassian.net"
enable_claude = false
enable_worktrees = true
[boards]
MYPROJECT_kanban = 123
INFRA_scrum = 456See examples/gci.toml for a complete annotated example.
- Create a JIRA API token at Atlassian API Tokens
- Provide the token (choose one):
- Environment variable:
export JIRA_API_TOKEN=your-token - 1Password: store it and configure the path during
gci setup
- Environment variable:
- Verify:
gci config doctor
GCI reads your email from git config user.email. If your git email domain differs from JIRA, configure a mapping:
[email_domain_map]
"old-domain.com" = "jira-domain.com"git config --global user.email "your.email@example.com"Provide a token via one of:
export JIRA_API_TOKEN=your-token- Configure
op_jira_token_pathin your config and runop signin
export PATH="$HOME/.local/bin:$PATH"
# Add to ~/.zshrc or ~/.bashrc to make permanent