A command-line tool for managing GitLab resources, pipelines, and issues.
Install
mkdir -p .claude/skills/glab && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/3655" && unzip -o skill.zip -d .claude/skills/glab && rm skill.zipInstalls to .claude/skills/glab
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Expert guidance for using the GitLab CLI (glab) to manage GitLab issues, merge requests, CI/CD pipelines, repositories, and other GitLab operations from the command line. Use this skill when the user needs to interact with GitLab resources or perform GitLab workflows.Key capabilities
- →Manage merge requests and issues
- →Monitor CI/CD pipelines
- →Post inline DiffNote comments
- →Trigger pipeline retries
- →List and filter GitLab resources
How it works
It provides a CLI wrapper for GitLab operations, using JSON-RPC or API calls to interact with GitLab resources based on the current repository context.
Inputs & outputs
When to use glab
- →Managing merge requests via CLI
- →Checking CI/CD pipeline status
- →Creating and updating GitLab issues
About this skill
GitLab CLI (glab) Skill
Provides guidance for using glab, the official GitLab CLI, to perform GitLab operations from the terminal.
When to Use This Skill
Invoke when the user needs to:
- Create, review, or manage merge requests
- Work with GitLab issues
- Monitor or trigger CI/CD pipelines
- Clone or manage repositories
- Perform any GitLab operation from the command line
Prerequisites
Verify glab installation before executing commands:
glab --version
If not installed, inform the user and provide platform-specific installation guidance.
Authentication Quick Start
Most glab operations require authentication:
# Interactive authentication
glab auth login
# Check authentication status
glab auth status
# For self-hosted GitLab
glab auth login --hostname gitlab.example.org
# Using environment variables
export GITLAB_TOKEN=your-token
export GITLAB_HOST=gitlab.example.org # for self-hosted
Core Workflows
Creating a Merge Request
# 1. Ensure branch is pushed
git push -u origin feature-branch
# 2. Create MR
glab mr create --title "Add feature" --description "Implements X"
# With reviewers and labels
glab mr create --title "Fix bug" --reviewer=alice,bob --label="bug,urgent"
Reviewing Merge Requests
# 1. List MRs awaiting your review
glab mr list --reviewer=@me
# 2. Checkout MR locally to test
glab mr checkout <mr-number>
# 3. After testing, approve
glab mr approve <mr-number>
# 4. Add a general comment
glab mr note <mr-number> -m "Please update tests"
Posting Inline DiffNote Comments
To anchor a comment to a specific line in the diff (a DiffNote), you must use a JSON body with the Content-Type: application/json header. Using -F form fields will create an unanchored DiscussionNote.
# Get SHA values from the MR
glab mr view <id> --output=json | grep -oP '"(base_sha|head_sha|start_sha)":\s*"\K[0-9a-f]{40}'
# Post a DiffNote on a new line
glab api --method POST "projects/:id/merge_requests/:iid/discussions" \
-H "Content-Type: application/json" \
--input - <<'JSONEOF'
{
"body": "Your review comment here",
"position": {
"base_sha": "<base_sha>",
"start_sha": "<start_sha>",
"head_sha": "<head_sha>",
"position_type": "text",
"new_path": "path/to/file.js",
"new_line": 42
}
}
JSONEOF
Key rules for DiffNotes:
- Always use
--input -with a heredoc and-H "Content-Type: application/json". Never use-Ffor thepositionobject — it will silently create aDiscussionNoteinstead. - Line numbers are new file line numbers calculated from the diff hunk headers (
@@ -old,count +new,count @@), not the diff output line numbers. Count only context lines and+lines from the hunk start. - Verify findings on the MR source branch (
git fetch origin <branch>thengit grep), not the current working branch. - To update an existing note:
glab api --method PUT "projects/:id/merge_requests/:iid/notes/:note_id" -H "Content-Type: application/json" --input - <<< '{"body":"updated text"}' - GitLab has no batch "Submit Review" API like GitHub. Post DiffNotes individually.
- To find a discussion or note ID:
glab api "projects/:id/merge_requests/:iid/discussions" --paginate
Managing Issues
# Create issue with labels
glab issue create --title "Bug in login" --label=bug
# Link MR to issue
glab mr create --title "Fix login" --description "Closes #<issue-number>"
# List your assigned issues
glab issue list --assignee=@me
Monitoring CI/CD
# Watch pipeline in progress
glab pipeline ci view
# Check pipeline status
glab ci status
# View logs if failed
glab ci trace
# Retry failed pipeline
glab ci retry
# Lint CI config before pushing
glab ci lint
Common Patterns
Working Outside Repository Context
When not in a Git repository, specify the repository:
glab mr list -R owner/repo
glab issue list -R owner/repo
Self-Hosted GitLab
Set hostname for all commands:
export GITLAB_HOST=gitlab.example.org
# or per-command
glab repo clone gitlab.example.org/owner/repo
Listing Unresolved MR Comments
glab api "projects/:id/merge_requests/{mr}/discussions?per_page=100" | jq '[.[] | select(.notes[0].resolvable == true and .notes[0].resolved == false) | {id: .notes[0].id, body: .notes[0].body[0:100], path: .notes[0].position.new_path, line: .notes[0].position.new_line}]'
Automation and Scripting
Use JSON output for parsing:
glab mr list --output=json | jq '.[] | .title'
Replying to MR Notes/Threads
glab mr note creates standalone comments. To reply within a discussion thread, use the API:
# 1. Find the discussion_id containing the note
glab api "projects/:id/merge_requests/{mr}/discussions" | jq '.[] | select(.notes[].id == {note_id}) | .id'
# 2. Post reply to the discussion thread
glab api --method POST "projects/:id/merge_requests/{mr}/discussions/{discussion_id}/notes" --field body="Your reply"
Example:
# Get discussion_id for note 13698970
glab api "projects/:id/merge_requests/1013/discussions" | jq '.[] | select(.notes[].id == 13698970) | {id}'
# Returns: {"id": "5356c3552e72e7b4c49276eb4dacfe3efe5c2c5c"}
# Reply to that thread
glab api --method POST "projects/:id/merge_requests/1013/discussions/5356c3552e72e7b4c49276eb4dacfe3efe5c2c5c/notes" --field body="Thanks for the review!"
Using the API Command
The glab api command provides direct GitLab API access:
# Basic API call
glab api projects/:id/merge_requests
# IMPORTANT: Pagination uses query parameters in URL, NOT flags
# ❌ WRONG: glab api --per-page=100 projects/:id/jobs
# ✓ CORRECT: glab api "projects/:id/jobs?per_page=100"
# Auto-fetch all pages
glab api --paginate "projects/:id/pipelines/123/jobs?per_page=100"
# POST with data
glab api --method POST projects/:id/issues --field title="Bug" --field description="Details"
Best Practices
- Verify authentication before executing commands:
glab auth status - Use
--helpto explore command options:glab <command> --help - Link MRs to issues using "Closes #123" in MR description
- Lint CI config before pushing:
glab ci lint - Check repository context when commands fail:
git remote -v
Common Commands Quick Reference
Merge Requests:
glab mr list --assignee=@me- Your assigned MRsglab mr list --reviewer=@me- MRs for you to reviewglab mr create- Create new MRglab mr checkout <number>- Test MR locallyglab mr approve <number>- Approve MRglab mr merge <number>- Merge approved MR
Issues:
glab issue list- List all issuesglab issue create- Create new issueglab issue close <number>- Close issue
CI/CD:
glab pipeline ci view- Watch pipelineglab ci status- Check statusglab ci lint- Validate .gitlab-ci.ymlglab ci retry- Retry failed pipeline
Repository:
glab repo clone owner/repo- Clone repositoryglab repo view- View repo detailsglab repo fork- Fork repository
Progressive Disclosure
For detailed command documentation, refer to:
- references/commands-detailed.md - Comprehensive command reference with all flags and options
- references/quick-reference.md - Condensed command cheat sheet
- references/troubleshooting.md - Detailed error scenarios and solutions
Load these references when:
- User needs specific flag or option details
- Troubleshooting authentication or connection issues
- Working with advanced features (API, schedules, variables, etc.)
Common Issues Quick Fixes
"command not found: glab" - Install glab or verify PATH
"401 Unauthorized" - Run glab auth login
"404 Project Not Found" - Verify repository name and access permissions
"not a git repository" - Navigate to repo or use -R owner/repo flag
"source branch already has a merge request" - Use glab mr list to find existing MR
For detailed troubleshooting, load references/troubleshooting.md.
Notes
- glab auto-detects repository context from Git remote
- Most commands have
--webflag to open in browser - Use
--output=jsonfor scripting and automation - Multiple GitLab accounts can be authenticated simultaneously
- Commands respect Git configuration and current repository context
When not to use it
- →Batch submitting reviews
- →Directly using raw API calls without glab context
Prerequisites
Limitations
- →No batch submit review API
- →Requires manual calculation of new file line numbers for DiffNotes
How it compares
It allows terminal-based management of GitLab workflows, avoiding browser-based navigation for routine tasks.
Compared to similar skills
glab side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| glab (this skill) | 6 | 3mo | Review | Intermediate |
| azure-devops-cli | 4 | 5mo | Review | Beginner |
| gitlab-ci-patterns | 10 | 3mo | No flags | Intermediate |
| update-go-version | 1 | 6mo | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by NikiforovAll
View all by NikiforovAll →You might also like
azure-devops-cli
github
Manage Azure DevOps resources via CLI including projects, repos, pipelines, builds, pull requests, work items, artifacts, and service endpoints. Use when working with Azure DevOps, az commands, devops automation, CI/CD, or when user mentions Azure DevOps CLI.
gitlab-ci-patterns
wshobson
Build GitLab CI/CD pipelines with multi-stage workflows, caching, and distributed runners for scalable automation. Use when implementing GitLab CI/CD, optimizing pipeline performance, or setting up automated testing and deployment.
update-go-version
grafana
Update Go version across the Tempo codebase (go.mod, tools/go.mod, Dockerfile, CI workflows, tools image tag)
repository-module-architecture
TencentBlueKing
Repository 代码库管理模块架构指南,涵盖 Git/SVN 代码库接入、Webhook 配置、代码库授权、触发器管理。当用户开发代码库功能、配置 Webhook、处理代码库授权或实现触发器逻辑时使用。
agent-ops-cicd-github
ruvnet
Agent skill for ops-cicd-github - invoke with $agent-ops-cicd-github
aios-devops
automacoescomerciaisintegradas
GitHub Repository Manager & DevOps Specialist (Gage). Use for repository operations, version management, CI/CD, quality gates, and GitHub push operations. ONLY agent authorized...