
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.
- Installs
- 127
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/vince-winkintel/gitlab-cli-skills --skill glab-issue- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads glab-issue automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
glab issue
Create, view, update, and manage GitLab issues.
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. 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.
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.
Quick start
# 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.
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
-
Create bug issue:
glab issue create \ --title "Login fails with 500 error" \ --label bug \ --label priority::high \ --assignee @dev-leadIf your project keeps reusable issue templates in-repo, use
--templateto start from a template file instead of pasting recurring boilerplate:glab issue create \ --title "Login fails with 500 error" \ --template .gitlab/issue_templates/bug.md \ --label bugFor 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,--titleplus an attachment is enough for non-interactive operation. On update, attachments append to the existing description unless--descriptionor--description-filesupplies a replacement body. -
Add reproduction steps:
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.pngRepeat
--attachto preserve multiple uploads in argument order. An attachment-only note skips the editor; use--attach -when piping a single file through stdin.
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.
-
List untriaged issues:
glab issue list --label needs-triage --state opened -
Update labels and assignee:
glab issue update 789 \ --label backend,priority::medium \ --assignee @backend-team \ --milestone "Sprint 23" glab issue update 789 --description-file triage-summary.md -
Remove triage label:
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):
scripts/batch-label-issues.sh "priority::high" 100 101 102
scripts/batch-label-issues.sh bug 200 201 202 203
Time tracking
# 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:
glab issue list --milestone "Sprint 23" --assignee @me
Add to sprint:
glab issue update 456 --milestone "Sprint 23"
Board view:
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:
glab mr for 456 # Creates MR that closes issue #456
Automated workflow (create branch + draft MR):
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:
git commit -m "Fix login bug
Closes #456"
Related Skills
Creating MRs from issues:
- See
glab-mrfor merge request operations - Use
glab mr for <issue-id>to create MR that closes issue - Script:
scripts/create-mr-from-issue.shautomates branch creation + draft MR
Label management:
- See
glab-labelfor creating and managing labels - Script:
scripts/batch-label-issues.shfor bulk labeling operations
Project planning:
- See
glab-milestonefor release planning - See
glab-iterationfor sprint/iteration management
Command reference
For complete command documentation and all flags, see references/commands.md.
Available commands:
create- Create new issuelist- List issues with filtersview- Display issue detailsnote- Add comment to issueupdate- Update title, labels, assignees, milestone, and time trackingclose- Close issuereopen- Reopen closed issuedelete- Delete issuesubscribe/unsubscribe- Manage notificationsboard- Work with issue boards
FAQ
What does the glab-issue skill do?
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.
How do I install glab-issue?
Run npx skills add https://github.com/vince-winkintel/gitlab-cli-skills --skill glab-issue in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/glab-issue/ (personal) or .claude/skills/glab-issue/ (project).
Which AI agents can use glab-issue?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is glab-issue safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains glab-issue?
It is published by vince-winkintel in vince-winkintel/gitlab-cli-skills. It has 127 recorded installs.
More from vince-winkintel/gitlab-cli-skills
gitlab-cli-skills
vince-winkintel/gitlab-cli-skills
Comprehensive GitLab CLI (glab) command reference and workflows for all GitLab operations via terminal. Use when user mentions GitLab CLI, glab commands, GitLab automation, MR/issue management via CLI, CI/CD pipeline commands, Artifact Registry token exchange, repo operations, authentication setup, or any GitLab terminal operations. Routes to specialized sub-skills for auth, CI, MRs, issues, releases, repos, and 30+ other glab commands. Triggers on glab, GitLab CLI, GitLab commands, GitLab terminal, GitLab automation.
glab-mr
vince-winkintel/gitlab-cli-skills
Open the skill to read its SKILL.md instructions.
glab-ci
vince-winkintel/gitlab-cli-skills
Open the skill to read its SKILL.md instructions.
glab-api
vince-winkintel/gitlab-cli-skills
Make direct GitLab REST API calls for advanced queries and operations not covered by other glab commands. Use when accessing GitLab API endpoints directly, making custom API requests, or fetching data in JSON format. Triggers on API call, REST API, GitLab API, JSON query, advanced query.
glab-auth
vince-winkintel/gitlab-cli-skills
Open the skill to read its SKILL.md instructions.
glab-repo
vince-winkintel/gitlab-cli-skills
Open the skill to read its SKILL.md instructions.
Popular code quality & workflow skills
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
improve-codebase-architecture
mattpocock/skills
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
handoff
mattpocock/skills
Compact the current conversation into a handoff document for another agent to pick up.
domain-modeling
mattpocock/skills
Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.
codebase-design
mattpocock/skills
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
diagnosing-bugs
mattpocock/skills
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.