Skip to main content

glab-issue

Create, view, update, and manage GitLab issues. Use when working with issue tracking, bug reports, feature requests, or task management. Operations include creating issues, listing with filters, viewing details, adding comments/notes, updating labels/assignees/milestones, closing/reopening, and board management. Triggers on issue, bug, task, ticket, feature request, list issues, create issue.

Source facts

Repository
vince-winkintel/gitlab-cli-skills
Last source activity
November 2, 2026 at 16:43
Detected SKILL.md language
English
Stars
50
Forks
6

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
4 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
glab-issue
description
Create, view, update, and manage GitLab issues. Use when working with issue tracking, bug reports, feature requests, or task management. Operations include creating issues, listing with filters, viewing details, adding comments/notes, updating labels/assignees/milestones, closing/reopening, and board management. Triggers on issue, bug, task, ticket, feature request, list issues, create issue.
# glab issue Create, view, update, and manage GitLab issues. ## Open-item selection `glab issue list` defaults to open items. Omit the obsolete `--opened` flag; use `--closed` or `--all` for those scopes. This applies to the shared issue/incident list command, including its `ls` alias, and is separate from MR state selectors. ## Template selection For `create --template`, a bare name (with optional `.md`) resolves under the repository's `.gitlab/issue_templates/` directory. An absolute path or a path containing a separator is read directly; relative paths use the current directory and `~/` is supported. Use `./template.md` for a file in the current directory, rather than a bare template name. A missing template directory means no templates; other directory-listing failures are surfaced and should be repaired before retrying. Read and approve the file contents before posting them; `--description-file` remains mutually exclusive with `--template`. ## Assignment, dates, and internal notes `issue list --assignee @none` selects unassigned issues; `--assignee @any` selects assigned issues, while `@me` selects your issues. Date filters are `--created-after`, `--created-before`, `--updated-after`, and `--updated-before`, with RFC 3339 timestamps including the timezone. Group listing preserves `--confidential` and `--iteration` filters. ```bash glab issue list --assignee @none --updated-after 2026-10-01T00:00:00Z glab issue note 123 --internal --message "Investigation details for project members" ``` `--internal` requests an internal note visible only to project members; confirm the target and audience before posting, and never include credentials. `issue view` displays human-readable time spent and estimated time when available; prefer JSON for automation. ## Piped note bodies `glab issue note <iid>` (alias `comment`) reads non-TTY stdin when `--message` is blank/whitespace and no attachment is supplied; with terminal input it opens the configured editor. Piped content is trimmed at both ends and an empty resulting note is rejected. A nonblank `--message` takes precedence; any `--attach` suppresses implicit stdin body reading, so use an explicit message for text plus attachments. `--attach -` consumes stdin as an attachment instead. For agent execution, always supply a reviewed, nonblank `--message` or explicitly redirect a reviewed body file. Never run `note` with inherited, unknown stdin: it can block or post unintended content. Intentionally bodyless attachment-only notes are the exception; approve every attachment, and use `--attach -` only with explicitly supplied, reviewed attachment stdin. Use `glab issue note --help` for discovery, never a write command as a probe, even with `</dev/null`. Review the complete body and attachments, target, actor, and audience before approving the post. Internal notes still transmit data to GitLab; exclude secrets and unreviewed logs. ```bash # After approving this file's non-secret body and target glab issue note 123 --repo group/project < reviewed-comment.md ``` Shared issue/incident resolution bounds concurrent lookups to five. Each command still enforces its own argument limits. This limits simultaneous reads; it does not make supported multi-item writes atomic or remove the need to review every target. ## Quick start ```bash # Create an issue glab issue create --title "Fix login bug" --label bug # Create or update with a multi-line description from a file glab issue create --title "Fix login bug" --description-file description.md glab issue update 123 --description-file description.md # Upload a screenshot and append its Markdown reference glab issue create --title "Fix login bug" --description "See below." --attach ./repro.png glab issue update 123 --attach ./after.png # List open issues glab issue list --state opened # Stable machine-readable output glab issue list --output json # View issue details glab issue view 123 # View or comment on an issue/work item from a GitLab URL glab issue view https://gitlab.com/group/project/-/work_items/123 glab issue note https://gitlab.com/group/project/-/issues/123 -m "Working on this now" # Add comment glab issue note 123 -m "Working on this now" # Close issue glab issue close 123 ``` ## Common workflows ### Issue and work item URL inputs Issue argument parsing accepts GitLab work item URLs in addition to issue URLs where the `glab issue` subcommand resolves an issue argument. This is URL compatibility for issue-style operations such as `view`, `note`, `update`, `close`, and related commands; use `glab work-items` when you need dedicated work item fields or work-item-specific lifecycle behavior. ```bash glab issue view https://gitlab.com/group/project/-/work_items/123 glab issue note https://gitlab.com/group/project/-/work_items/123 -m "Follow-up note" glab issue update https://gitlab.com/group/project/-/work_items/123 --label needs-triage ``` ### Bug reporting workflow 1. **Create bug issue:** ```bash glab issue create \ --title "Login fails with 500 error" \ --label bug \ --label priority::high \ --assignee @dev-lead ``` If your project keeps reusable issue templates in-repo, use `--template` to start from a template file instead of pasting recurring boilerplate: ```bash glab issue create \ --title "Login fails with 500 error" \ --template .gitlab/issue_templates/bug.md \ --label bug ``` For one-off multi-line descriptions, use `--description-file <path>` or `--description-file -` for stdin. It is mutually exclusive with `--description`; on create, it is also mutually exclusive with `--template`. A file containing exactly `-` is rejected because `--description -` means "open an editor". Use the experimental `--attach <path>` repeatedly to upload one or more local files and append GitLab-provided Markdown references to the description. `--attach -` reads one attachment from standard input; do not combine it with `--description-file -`, because both would consume stdin. On create, `--title` plus an attachment is enough for non-interactive operation. On update, attachments append to the existing description unless `--description` or `--description-file` supplies a replacement body. 2. **Add reproduction steps:** ```bash glab issue note 456 -m "Steps to reproduce: 1. Navigate to /login 2. Enter valid credentials 3. Click submit Expected: Dashboard loads Actual: 500 error" # A file can accompany a message or be the entire comment glab issue note 456 -m "Screenshot from production" --attach ./repro.png ``` Repeat `--attach` to preserve multiple uploads in argument order. Follow the body and attachment-stdin rules in the Piped note bodies section above. ### Issue triage The text list header uses the API's total issue count for project and group lists, separately from the number of rows on the current page. When the API omits the total, or when listing client-filtered epic issues, glab does not invent a total from the page length. JSON output still contains the fetched issue rows; the corrected header does not fetch additional pages. `glab issue list` validates both output selectors before making the request: `--output` accepts only `text` or `json`, while `--output-format` accepts only `details`, `ids`, or `urls`. The two selectors are mutually exclusive. Treat an immediate “must be one of” error as invalid local input rather than a GitLab API failure. 1. **List untriaged issues:** ```bash glab issue list --label needs-triage --state opened ``` 2. **Update labels and assignee:** ```bash glab issue update 789 \ --label backend,priority::medium \ --assignee @backend-team \ --milestone "Sprint 23" glab issue update 789 --description-file triage-summary.md ``` 3. **Remove triage label:** ```bash glab issue update 789 --unlabel needs-triage ``` **Batch labeling:** For applying labels to multiple issues at once, use the script bundled with this skill under `scripts/` (paths below are relative to the skill's own directory): ```bash scripts/batch-label-issues.sh "priority::high" 100 101 102 scripts/batch-label-issues.sh bug 200 201 202 203 ``` ### Time tracking ```bash # Set an estimate and add spent time glab issue update 42 --estimate 2d --spend 1h30m # Reset both values after confirming the intended issue glab issue update 42 --remove-estimate --remove-time-spent ``` Durations use GitLab's time tracking format, such as `1mo 2w 3d 4h 5m`. `--estimate` sets the estimate; `--spend` adds to existing spent time. Each reset flag conflicts with its corresponding set/add flag. These are update flags; issue creation uses `--time-estimate` and `--time-spent`. Time-only updates skip the general issue-update request. When combined with other edits, those edits run first, followed by separate time-tracking requests. A later failure can leave earlier changes applied. Inspect the issue before retrying, especially before repeating additive `--spend`. ### Sprint planning **View current sprint issues:** ```bash glab issue list --milestone "Sprint 23" --assignee @me ``` **Add to sprint:** ```bash glab issue update 456 --milestone "Sprint 23" ``` **Board view:** ```bash glab issue board view # Retrieve every project/group board issue instead of only the first API page glab issue board view --paginate ``` Use `--paginate` for complete board triage when a board can exceed one API page. Without it, the interactive board uses the first page returned by GitLab. The option works for both project and group board issue retrieval and can be combined with `--assignee`, `--labels`, or `--milestone` filters. ### Linking issues to work **Create MR for issue:** ```bash glab mr for 456 # Creates MR that closes issue #456 ``` **Automated workflow (create branch + draft MR):** ```bash scripts/create-mr-from-issue.sh 456 --create-mr ``` This automatically: creates branch from issue title → empty commit → pushes → creates draft MR. **Close via commit/MR:** ```bash git commit -m "Fix login bug Closes #456" ``` ## Related Skills **Creating MRs from issues:** - See `glab-mr` for merge request operations - Use `glab mr for <issue-id>` to create MR that closes issue - Script: `scripts/create-mr-from-issue.sh` automates branch creation + draft MR **Label management:** - See `glab-label` for creating and managing labels - Script: `scripts/batch-label-issues.sh` for bulk labeling operations **Project planning:** - See `glab-milestone` for release planning - See `glab-iteration` for sprint/iteration management ## Command reference For complete command documentation and all flags, see [references/commands.md](references/commands.md). **Available commands:** - `create` - Create new issue - `list` - List issues with filters - `view` - Display issue details - `note` - Add comment to issue - `update` - Update title, labels, assignees, milestone, and time tracking - `close` - Close issue - `reopen` - Reopen closed issue - `delete` - Delete issue - `subscribe` / `unsubscribe` - Manage notifications - `board` - Work with issue boards
View on GitHub