---
schema_version: 1
route: /t/glab.md
tool: "glab"
---

# sincecutoff.com /t/glab — GitLab CLI

- name: GitLab CLI
- kind: cli
- children: none
- homepage: <https://gitlab.com/gitlab-org/cli>

Changes to the tools coding agents drive, since a model's training cutoff, each linked to its first-party source. Check installed versions and limitations before acting; a cutoff date does not establish what a model knows.
Original editorial content: [Apache 2.0](https://sincecutoff.com/v1/data-license.txt), by [0xPatrick](https://0xpatrick.dev). Preserve applicable license and [NOTICE](https://sincecutoff.com/notice.txt) attribution when redistributing. Third-party source text and examples retain their own rights. [License scope and attribution](https://sincecutoff.com/v1/license.json).
To stay current, read the changes feed: [`/v1/changes.md?tool=glab`](https://sincecutoff.com/v1/changes.md?tool=glab) (or `.json`), adding `since=YYYY-MM-DD` for your training cutoff. Entries for registered children are included; the registry itself is `/v1/tools.json`. How to page and save your place: [llms.txt](https://sincecutoff.com/llms.txt).

### glab group clone adds --exclude-subgroup (2026-10-13)
- slug: glab-group-clone-adds-exclude-subgroup-e3448be08dd4
- score: 0.92

How to use it:

When cloning a group’s repositories while excluding subgroup projects, run `glab repo clone` with `--group`, `--exclude-subgroup`, and `--paginate`.

Examples:

```
glab repo clone -g <group> --exclude-subgroup <subgroup-path> --paginate
```

- why_it_matters: Clone a group repository set while excluding subgroup repositories.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.123.0>, <https://docs.gitlab.com/cli/repo/clone/>
- gotchas: "Version: v1.123.0"; "-g, --group <group> (required): Group to clone repositories from."; "--exclude-subgroup <subgroup-path> (required): Skip projects in a subgroup, using its path relative to the group. Repeat the flag or use comma-separated values for multiple subgroups. Shared projects from other namespaces are unaffected."; "--paginate (required): Fetch additional pages of projects before cloning; respects `--per-page`."

### glab issue update supports time tracking (2026-10-13)
- slug: glab-issue-update-supports-time-tracking-2f4731d2b688
- score: 0.97

How to use it:

When updating an issue’s time tracking, use `glab issue update` with the estimate or time-spent flags; durations use GitLab time-tracking format. Use the removal flags to reset either value.

Examples:

```
glab issue update <issue-id> --estimate 2d --spend 1h30m
```

```
glab issue update <issue-id> --remove-estimate --remove-time-spent
```

- why_it_matters: Update an issue's time tracking information from a repository workflow.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.123.0>, <https://docs.gitlab.com/cli/issue/update/>, <https://docs.gitlab.com/cli/>
- gotchas: "Version: v1.123.0"; "<id> (required): Issue ID."; "--estimate <duration>: Set the issue time estimate; duration uses GitLab time-tracking format."; "--spend <duration>: Add time spent on the issue; duration uses GitLab time-tracking format."; "--remove-estimate: Remove the issue time estimate."; "--remove-time-spent: Remove all time spent from the issue."; "Prerequisite: Install `glab` and authenticate with GitLab, for example using `glab auth login`."

### glab mr note create supports internal notes and threads (2026-09-29)
- slug: glab-mr-note-create-supports-internal-notes-and-threads-fb223e402a37
- score: 0.91

How to use it:

When reviewing a merge request, create a project-member-only note with `glab mr note create <mr-id> --message "<message>" --internal`. To add it to an existing discussion, include `--reply <discussion-id>`.

Examples:

```
glab mr note create <mr-id> --message "<message>" --internal
```

```
glab mr note create <mr-id> --reply <discussion-id> --message "<message>" --internal
```

- why_it_matters: Create an internal note or thread while reviewing a merge request from a repository workflow.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.120.0>, <https://docs.gitlab.com/cli/mr/note/create/>, <https://docs.gitlab.com/cli/authentication/>
- gotchas: "Version: v1.120.0"; "<mr-id> or <branch>: Merge request ID or branch; omit to use the current branch’s merge request."; "--message <message> / -m: Comment or note body; if omitted, the command can open an editor or read input from stdin."; "--internal: Make the note visible only to project members. For replies, fails if the target thread is public; a reply to an internal thread is internal even without this flag."; "--reply <discussion-id>: Reply to an existing discussion instead of starting a new one. Accepts a full discussion ID or a unique prefix of at least 8 characters."; "Prerequisite: Install glab and authenticate to the GitLab instance. Personal access tokens require at least the api and write_repository scopes."

### glab firewall proxy adds a Cargo proxy matcher (2026-09-22)
- slug: glab-firewall-proxy-adds-a-cargo-proxy-matcher-f0c2932cf248
- score: 0.97

How to use it:

When running Cargo package operations, invoke Cargo through glab’s Dependency Firewall to check package transfers against the current project’s policy. Use `glab dependency-firewall cargo` and pass the Cargo arguments to it.

Examples:

```
glab dependency-firewall cargo fetch
```

- why_it_matters: Configure a firewall proxy matcher for Cargo requests.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.119.0>, <https://docs.gitlab.com/cli/dependency-firewall/cargo/>
- gotchas: "Version: v1.119.0"; "<cargo args>: Arguments are forwarded to Cargo verbatim; for example, `fetch` fetches dependencies."; "-h, --help: Show help for the command."

### glab attach uploads and references local files (2026-09-08)
- slug: glab-attach-uploads-and-references-local-files-53c7bd76b0d7
- score: 0.90

How to use it:

When creating or updating a GitLab work item, issue, or merge request with a local file to include, pass the file path with `--attach` to upload it and add its reference to the description.

Examples:

```
glab work-items create --type issue --title "<title>" --attach <local-file>
```

```
glab mr create -t "<title>" --attach <local-file>
```

```
glab mr update <id> --attach <local-file>
```

- why_it_matters: When attaching a local file in a GitLab workflow, upload and reference it with `--attach`.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.117.0>, <https://docs.gitlab.com/cli/work-items/create/>, <https://docs.gitlab.com/cli/mr/create/>, <https://docs.gitlab.com/cli/mr/update/>, <https://docs.gitlab.com/cli/>
- gotchas: "Version: v1.117.0"; "--attach <file>: Upload a file and reference it at the end of the description. Repeat the flag for multiple files, or pass `-` to read from standard input."; "--group: Select a group or subgroup for work item creation. The work-items docs say it cannot be combined with `--attach`."; "--type <type> (required): Work item type; documented values include epic, incident, issue, key_result, objective, requirement, task, test_case, and ticket."; "--title <title>: Set the work item title."; "-t, --title <title>: Set the merge request title."; "<id | branch>: Select the merge request to update; defaults to the currently checked-out branch."; "Prerequisite: Authenticate `glab` with the GitLab instance; the docs direct users to run `glab auth login`."; "Prerequisite: The `--attach` feature is experimental and might be unstable or removed."

### glab artifact-registry login adds Gradle, npm, sbt, and Maven options (2026-08-25)
- slug: glab-artifact-registry-login-adds-gradle-npm-sbt-and-maven-options-1a89d6725bde
- score: 0.96

How to use it:

When authenticating a project to GitLab Artifact Registry, run `glab artifact-registry login` with the registry URL and the option for its package manager: `--gradle`, `--npm`, `--sbt`, or `--maven`. [GitLab CLI docs](https://docs.gitlab.com/cli/artifact-registry/login/)

Examples:

```
glab artifact-registry login --gradle --registry <repository_url>
```

```
glab artifact-registry login --npm --registry <repository_url>
```

```
glab artifact-registry login --sbt --registry <repository_url>
```

- why_it_matters: Authenticate glab to the artifact registry for a project using Gradle, npm, sbt, or Maven.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.115.0>, <https://docs.gitlab.com/artifact-registry/formats/maven/>, <https://docs.gitlab.com/artifact-registry/formats/npm/>, <https://docs.gitlab.com/cli/artifact-registry/login/>, <https://docs.gitlab.com/artifact-registry/authenticate/>
- gotchas: "Version: v1.115.0"; "--gradle (required): Select Gradle; writes credentials to `~/.gradle/gradle.properties`."; "--npm (required): Select npm; writes an auth-token entry to `~/.npmrc`."; "--sbt (required): Select sbt; writes a credentials line to `~/.sbt/1.0/credentials.sbt`."; "--maven (required): Select Maven; writes a server block to `~/.m2/settings.xml`."; "--registry <repository_url> (required): Registry repository URL to authenticate against; typically a URL for non-Docker clients."; "--registry-alias <alias>: Maven/Gradle only: alias or ID for the registry; defaults to a name derived from the registry. Maven's repository ID must match the alias. For Gradle, use a valid build-script identifier."; "--duration <duration>: Requested token lifetime; default 15 minutes, maximum 12 hours. Re-run login before it expires."; "--hostname <hostname>: GitLab hostname to request the token from; defaults to the configured GitLab instance."; "Prerequisite: Install glab version 1.115.0 or later."; "Prerequisite: Authenticate glab: it uses `GITLAB_TOKEN` when set, otherwise credentials stored by `glab auth login`."

### glab issue, MR, and work item commands add --description-file (2026-08-25)
- slug: glab-issue-mr-and-work-item-commands-add-description-file-dca6555f3a9a
- score: 0.97

How to use it:

When creating or updating an issue, merge request, or work item with a description from a file, pass `--description-file <file>` to that command; use `-` to read from standard input.

Examples:

```
glab issue create -t "<title>" --description-file <file>
```

```
glab mr update <id> --description-file <file>
```

```
glab work-items create --type <type> --title "<title>" --description-file <file>
```

- why_it_matters: Create or update an issue, merge request, or work item using a description stored in a file.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.115.0>, <https://docs.gitlab.com/cli/issue/create/>, <https://docs.gitlab.com/cli/mr/update/>, <https://docs.gitlab.com/cli/work-items/create/>
- gotchas: "Version: v1.115.0"; "--description-file <file>: Read the issue, merge request, or work item description from the specified file. Use `-` to read from standard input."; "<id> (required): Merge request identifier for `glab mr update`."; "--type <type> (required): Work item type; documented values include epic, incident, issue, key_result, objective, requirement, task, test_case, and ticket."

### glab artifact-registry Docker login and credential helper resolution (2026-08-18)
- slug: glab-artifact-registry-docker-login-and-credential-helper-resolution-b42d3b580d00
- score: 0.98

How to use it:

When authenticating Docker to a GitLab Artifact Registry, register glab as its credential helper with `glab artifact-registry login --docker --registry <registry_host>`. The helper exchanges a fresh token for each pull or push and ignores `GITLAB_TOKEN`.

Examples:

```
glab artifact-registry login --docker --registry <registry_host>
```

- why_it_matters: Authenticate Docker to a GitLab artifact registry and resolve registry credentials through Docker's credential helper.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.114.0>, <https://docs.gitlab.com/cli/artifact-registry/login/>
- gotchas: "Version: v1.114.0"; "--docker (required): Selects Docker configuration; registers glab as a Docker credential helper. Writes to `$DOCKER_CONFIG`, or `~/.docker` if unset."; "--registry <registry_host> (required): Registry to authenticate against. For Docker, provide a bare hostname; use only a registry backed by Artifact Registry."; "--duration: Sets exchanged token lifetime for other package managers; ignored for Docker."; "--hostname: GitLab hostname to request the token from; defaults to the configured GitLab instance."; "Prerequisite: Run `glab auth login` first if no credential is stored for the GitLab host. The Docker helper reads credentials from the configuration file and ignores `GITLAB_TOKEN`."; "Docs conflict: Current GitLab Artifact Registry Docker documentation says the GitLab CLI version must be 1.115.0 or later, newer than the card’s v1.114.0. That page does not establish this prerequisite for v1.114.0: https://docs.gitlab.com/artifact-registry/formats/docker/"

### glab adds a variable import command (2026-07-21)
- slug: glab-adds-a-variable-import-command-a14cabf01804
- score: 0.97

How to use it:

When importing project or group CI/CD variables, provide a JSON array in the shape emitted by `glab variable export --output json`; use `--input-file` for a file or pipe JSON on standard input. By default, import targets the current project and errors if a variable already exists; use `--skip-existing` to continue past existing variables.

Examples:

```
glab variable import --input-file variables.json
```

```
glab variable import --input-file variables.json --skip-existing
```

```
glab variable export --group <group> | glab variable import --group <group>
```

- why_it_matters: Import variables for a repository using glab.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.109.0>, <https://docs.gitlab.com/cli/variable/import/>, <https://gitlab.com/gitlab-org/cli/>
- gotchas: "Version: v1.109.0"; "--input-file <file>: Read JSON from this file instead of standard input."; "--group <group>: Select a group or subgroup; ignored if a repository argument is set."; "--repo <repository>: Select another repository using OWNER/REPO, GROUP/NAMESPACE/REPO, a full URL, or a Git URL."; "--skip-existing: Skip existing variables instead of stopping with an error."; "Prerequisite: Provide a JSON array of variable objects in the same shape as `glab variable export --output json`; input may come from standard input or `--input-file`."; "Prerequisite: Install glab and authenticate with GitLab; the CLI getting-started docs list these setup steps."

### glab securefile can update existing files (2026-07-21)
- slug: glab-securefile-can-update-existing-files-2b0c8561d549
- score: 0.98

How to use it:

When a project already has the secure file, run `glab securefile update <name> <path> [flags]` to replace its contents. If the contents are unchanged, no update occurs; the update changes the file ID, so later downloads should use `--name`.

Examples:

```
glab securefile update "<name>" "<local-path>"
```

```
glab securefile update "<name>" "<local-path>" -y
```

```
glab securefile update "<name>" "<local-path>" --repo <owner>/<repo>
```

- why_it_matters: Update an existing secure file through glab.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.109.0>, <https://docs.gitlab.com/ja-jp/cli/securefile/update/>
- gotchas: "Version: v1.109.0"; "<name> (required): Existing secure file's name."; "<path> (required): Local path to the replacement file."; "-y, --yes: Skip the confirmation prompt."; "-R, --repo <string>: Select another repository; accepts OWNER/REPO, GROUP/NAMESPACE/REPO, a full URL, or a Git URL."

### glab adds packages list command group (2026-06-17)
- slug: glab-adds-packages-list-command-group-d2d63de25757
- score: 0.90

How to use it:

When listing packages in a GitLab repository, run `glab packages list` to list packages in the current project; use `--repo` to target another project.

Examples:

```
glab packages list
```

- why_it_matters: List packages while working in a GitLab repository using glab.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.103.0>, <https://docs.gitlab.com/cli/packages/list/>, <https://docs.gitlab.com/cli/packages/>
- gotchas: "Version: v1.103.0"; "--repo, -R <repository>: Select another repository; accepts OWNER/REPO, GROUP/NAMESPACE/REPO, a full URL, or a Git URL."; "--name, -n <string>: Filter packages by name using a substring match."; "--package-type <string>: Filter by package type: cargo, composer, conan, debian, generic, golang, helm, maven, ml_model, npm, nuget, pypi, rpm, rubygems, or terraform_module."; "--page, -p <int>: Select page number; default is 1."; "--per-page, -P <int>: Set the number of items per page; default is 30."; "--jq <string>: Filter JSON output with a jq expression."; "Prerequisite: Use existing `glab` authentication for the GitLab instance."

### glab stack amend adds --no-verify (2026-06-17)
- slug: glab-stack-amend-adds-no-verify-3622b239f5a1
- score: 0.90

How to use it:

When the coding workflow requires skipping commit verification, amend the current stacked diff with `glab stack amend --no-verify`.

Examples:

```
glab stack amend --no-verify
```

- why_it_matters: Amend a stack while skipping verification when that is required by the coding workflow.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.103.0>, <https://docs.gitlab.com/cli/stack/amend/>, <https://docs.gitlab.com/user/project/merge_requests/stacked_diffs/>
- gotchas: "Version: v1.103.0"; "--no-verify: Bypass the `pre-commit` and `commit-msg` hooks of `git-commit(1)`."; "Prerequisite: GitLab CLI must be installed and authenticated."

### glab stack save adds --no-verify (2026-06-17)
- slug: glab-stack-save-adds-no-verify-0ef809df9472
- score: 0.93

How to use it:

When saving a stacked diff and the workflow requires skipping verification, run `glab stack save --no-verify`.

Examples:

```
glab stack save --no-verify
```

- why_it_matters: Save a stack while skipping verification when that is required by the coding workflow.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.103.0>, <https://docs.gitlab.com/cli/stack/save/>, <https://docs.gitlab.com/user/project/merge_requests/stacked_diffs/>
- gotchas: "Version: v1.103.0"; "--no-verify: Bypasses the pre-commit and commit-msg hooks for `git-commit(1)`."; "Prerequisite: Install and authenticate the GitLab CLI to use stacked diffs."; "Prerequisite: Stacked diffs are experimental."

### glab repo adds command to prune merged local branches (2026-06-05)
- slug: glab-repo-adds-command-to-prune-merged-local-branches-5aa8263e5520
- score: 0.97

How to use it:

When you need to remove merged local branches, run `glab repo prune`; it checks merge requests and prompts before deleting eligible branches. Use `--dry-run` to preview first.

Examples:

```
glab repo prune --dry-run
```

```
glab repo prune
```

```
glab repo prune --yes
```

- why_it_matters: Remove merged local branches while maintaining a repository checkout.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.102.0>, <https://docs.gitlab.com/cli/repo/prune/>
- gotchas: "Version: v1.102.0"; "--dry-run: Preview branches without deleting them."; "-e, --exclude <branch-or-glob>: Exclude branches by name or glob; comma-separated or repeatable."; "--merged: Use `git branch --merged` instead of querying GitLab; detects fast-forward merges only."; "-y, --yes: Skip the confirmation prompt."; "Prerequisite: Run in a repository checkout. GitLab is queried by default to check merge request status for local branches."

### glab ci cancel job accepts --force (2026-06-01)
- slug: glab-ci-cancel-job-accepts-force-d6f2990e6c1d
- score: 0.96

How to use it:

When a job runs in a protected environment and needs forced cancellation, run `glab ci cancel job <job-id> --force`.

Examples:

```
glab ci cancel job <job-id> --force
```

- why_it_matters: Cancel a CI job when the command requires force confirmation.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.101.0>, <https://docs.gitlab.com/ja-jp/cli/ci/cancel/job/>, <https://docs.gitlab.com/cli/authentication/>
- gotchas: "Version: v1.101.0"; "<id> (required): Job ID to cancel; multiple IDs are supported."; "--force: Force-cancel the job, even if it runs in a protected environment."; "Prerequisite: Authenticate `glab` with GitLab before using authenticated commands."; "Docs conflict: The card says force confirmation is the condition; current command documentation describes `--force` as allowing cancellation of jobs in a protected environment."

### glab mr note create adds --resolvable (2026-06-01)
- slug: glab-mr-note-create-adds-resolvable-4c1841be0c27
- score: 0.95

How to use it:

When creating a merge request note that should be resolvable, run `glab mr note create` with `--resolvable`. The current docs say notes are resolvable by default; set `--resolvable=false` to create a non-resolvable note.

Examples:

```
glab mr note create <id-or-branch> --message "<note text>" --resolvable
```

- why_it_matters: Create a merge request note that can be marked resolvable.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.101.0>, <https://docs.gitlab.com/cli/mr/note/create/>
- gotchas: "Version: v1.101.0"; "<id> | <branch>: Select the merge request by ID or branch; omitted in the documented current-branch example."; "--message, -m: Set the comment or note message."; "--resolvable: Create the note as a resolvable discussion thread; set to false for a non-resolvable note. Current docs say true is the default."

### glab stack sync accepts --skip-mr-creation (2026-06-01)
- slug: glab-stack-sync-accepts-skip-mr-creation-ca6d734667a6
- score: 0.96

How to use it:

When synchronizing a stack without creating merge requests for branches that lack one, run `glab stack sync --skip-mr-creation`. The command syncs stack progress; stacked diffs are experimental. [v1.101.0 command docs](https://gitlab.com/gitlab-org/cli/-/raw/v1.101.0/docs/source/stack/sync.md)

Examples:

```
glab stack sync --skip-mr-creation
```

- why_it_matters: Synchronize a stack without creating merge requests.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.101.0>, <https://gitlab.com/gitlab-org/cli/-/raw/v1.101.0/docs/source/stack/sync.md>, <https://docs.gitlab.com/user/project/merge_requests/stacked_diffs/>
- gotchas: "Version: v1.101.0"; "--skip-mr-creation: Skips creating merge requests for branches that do not have one yet."; "Prerequisite: GitLab CLI must be installed and authenticated."; "Prerequisite: Stacked diffs are experimental and not ready for production use."

### glab repo remote add accepts a namespace/project (2026-05-27)
- slug: glab-repo-remote-add-accepts-a-namespace-project-4abaf9ec06f6
- score: 0.96

How to use it:

To add a GitLab project as a remote, run `glab repo remote add <namespace/project>`; the remote name defaults to the first path component. [Official glab docs](https://docs.gitlab.com/cli/repo/remote/add/)

Examples:

```
glab repo remote add <namespace/project>
```

- why_it_matters: Add a GitLab project as a remote in a repository.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.100.0>, <https://docs.gitlab.com/cli/repo/remote/add/>
- gotchas: "Version: v1.100.0"; "<namespace/project> (required): Project reference used to add the Git remote."; "-n, --name <string>: Remote name; defaults to the first path component (namespace)."; "-p, --protocol <string>: Git protocol: `ssh` or `https`; defaults to the `git_protocol` config."

### glab stack infer creates layers from a commit range (2026-05-27)
- slug: glab-stack-infer-creates-layers-from-a-commit-range-f3a6d50d6491
- score: 0.90

How to use it:

When you need to create stack layers from commits in a range, run `glab stack infer <revision-range>`; the command opens an editor to select commits and creates a diff for each selected commit. The start of the range must be a branch name, not a relative ref such as `HEAD~5`.

Examples:

```
glab stack infer main..HEAD
```

```
glab stack infer --name feature-stack main..HEAD
```

- why_it_matters: Create stack layers from a range of commits in a repository.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.100.0>, <https://docs.gitlab.com/ja-jp/cli/stack/infer/>, <https://docs.gitlab.com/cli/stack/>
- gotchas: "Version: v1.100.0"; "<revision-range> (required): Commit range; start must be a branch name, not a relative ref such as `HEAD~5`."; "-n, --name <string>: Name for the new stack when creating one."; "-R, --repo <string>: Select another repository by OWNER/REPO, GROUP/NAMESPACE/REPO, full URL, or Git URL."; "Prerequisite: `glab stack` is experimental and may be unstable or removed."; "The command operates on a commit range."

### glab ci get --mr and --failed-jobs-only flags (2026-05-20)
- slug: glab-ci-get-mr-and-failed-jobs-only-flags-3e8a58b88681
- score: 0.95

How to use it:

When inspecting CI for a merge request or focusing on failed jobs, use `glab ci get` with the corresponding `--mr` or `--failed-jobs-only` flag. The current docs describe a newer interface, so its alternatives do not establish v1.98.1 behavior.

Examples:

```
glab ci get --mr=<mr-id> --failed-jobs-only
```

- why_it_matters: Inspect CI results for a merge request or focus on failed jobs.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.98.1>
- gotchas: "Version: v1.98.1"; "--mr: The v1.98.1 release note confirms this flag was added to `glab ci get`; it does not document its argument or behavior."; "--failed-jobs-only: The v1.98.1 release note confirms this flag was added to `glab ci get`; it does not document its behavior."; "Docs conflict: Current `glab ci get` docs describe `--merge-request` and `--status`, not the v1.98.1 `--mr` and `--failed-jobs-only` flags. Those current docs may describe newer behavior: https://docs.gitlab.com/cli/ci/get/"

### glab work-items update command (2026-05-20)
- slug: glab-work-items-update-command-bd4c660735f4
- score: 0.93

How to use it:

When updating a work item in a project or group, run `glab work-items update <iid>` with the fields to change; repository context detects scope, or specify `--group` or `--repo`.

Examples:

```
glab work-items update <iid> --description "<description>"
```

```
glab work-items update <iid> --group <group-or-subgroup> --title "<title>"
```

```
glab work-items update <iid> --iteration <iteration-id>
```

- why_it_matters: Update a work item from a repository workflow.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.98.1>, <https://docs.gitlab.com/cli/work-items/update/>
- gotchas: "Version: v1.98.1"; "<iid> (required): Work item IID."; "--assignee / -a: Update assignee using GitLab usernames."; "--attach: Upload file(s) and reference them at the end of the description; repeat for multiple files or use `-` for stdin. Without `--description`, references append to the existing description. Project-scoped; cannot combine with `--group`."; "--description / -d: Set the work item description."; "--description-file: Read description from a file; use `-` for stdin."; "--duedate: Update the due date."; "--group / -g: Target a group or subgroup; mutually exclusive with `--repo`."; "--iteration: Move the work item to the iteration with this ID."; "--jq: Filter JSON output with a jq expression."; "--milestone / -m: Update the milestone by title or ID."; "--output / -F: Select text or JSON output; defaults to text."; "--repo / -R: Select another repository by OWNER/REPO, GROUP/NAMESPACE/REPO, full URL, or Git URL; mutually exclusive with `--group`."; "--startdate: Update the start date."; "--title / -t: Update the title."; "--weight / -w: Update the weight value."; "Prerequisite: The command is experimental and GitLab says it is not ready for production use; it might be unstable or removed. It detects scope from repository context unless `--group` or `--repo` is specified."

### glab mr creates diff comments (2026-05-06)
- slug: glab-mr-creates-diff-comments-581168143f8b
- score: 0.96

How to use it:

When reviewing a merge request, use `glab mr note create` to comment on a diff file or line. Specify `--file` with `--line` for a new-side line or `--old-line` for a removed line.

Examples:

```
glab mr note create <MR-ID> --file <path/to/file> --line <line-or-range> --message "<comment>"
```

```
glab mr note create <MR-ID> --file <path/to/file> --old-line <line> --message "<comment>"
```

- why_it_matters: Comment on a specific diff while reviewing a merge request.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.94.0>, <https://docs.gitlab.com/cli/mr/note/create/>
- gotchas: "Version: v1.94.0"; "<MR-ID>: Merge request ID; the command also accepts a branch name, or can infer the MR from the current branch."; "--file <path> (required): Path to the file in the latest merge request diff; required with `--line` or `--old-line`."; "--line <line-or-range>: Target line or range on the new side of the diff. Requires `--file`; cannot be combined with `--old-line`."; "--old-line <line>: Target line on the old side of the diff for a removed line. Requires `--file`; cannot be combined with `--line`."; "--message <text>: Comment body; if omitted, the command can open an editor or read from stdin."; "Prerequisite: The command is marked experimental in the documentation."

### glab mr note create accepts --reply (2026-05-06)
- slug: glab-mr-note-create-accepts-reply-672a5504fb70
- score: 0.97

How to use it:

To reply to an existing merge request discussion, run `glab mr note create` with the merge request ID, `--reply` set to the discussion ID or a unique prefix of at least 8 characters, and a message.

Examples:

```
glab mr note create <mr-id> --reply <discussion-id-or-8+-character-prefix> -m "<reply>"
```

- why_it_matters: Reply to an existing merge request note from the CLI.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.94.0>, <https://docs.gitlab.com/cli/mr/note/create/>
- gotchas: "Version: v1.94.0"; "<mr-id> (required): Merge request ID or IID; the command synopsis also allows a branch."; "--reply <discussion-id> (required): Reply to an existing discussion; accepts a full discussion ID or a unique prefix of at least 8 characters."; "-m, --message <text>: Reply text. If omitted, the command opens an editor or reads from standard input."

### glab issue create and glab mr create accept --template (2026-04-23)
- slug: glab-issue-create-and-glab-mr-create-accept-template-e5aff430e82a
- score: 0.96

How to use it:

When creating an issue or merge request from a local repository and you want to pre-populate its description from a template, pass `--template <template>` to the matching create command. Use a template name or path; local repository templates are read from the corresponding `.gitlab` template directory.

Examples:

```
glab issue create -t "<title>" --template <template>
```

```
glab mr create -t "<title>" --template <template>
```

- why_it_matters: Create an issue or merge request using a repository template.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.93.0>, <https://docs.gitlab.com/cli/issue/create/>, <https://docs.gitlab.com/cli/mr/create/>, <https://gitlab.com/gitlab-org/cli/-/merge_requests/3144>, <https://docs.gitlab.com/cli/authentication/>
- gotchas: "Version: v1.93.0"; "--template <template>: Pre-populates the description. For issues, a template name is looked up in `.gitlab/issue_templates/`; for merge requests, in `.gitlab/merge_request_templates/`. The `.md` extension is optional. An absolute path or value containing a path separator is read as a file path."; "-t, --title <title>: Supplies the issue or merge request title; the examples combine it with `--template`."; "Prerequisite: Templates are loaded from the local repository; remote repository templates are not supported."; "Prerequisite: Authenticate with the GitLab instance before running authenticated commands. The docs list personal access tokens with `api` and `write_repository` scopes as one authentication option."

### glab mr note create adds discussion-based notes (2026-04-23)
- slug: glab-mr-note-create-adds-discussion-based-notes-7d347adf6fe2
- score: 0.95

How to use it:

When reviewing a merge request from the command line, use `glab mr note create` to add a comment; it starts a new discussion thread by default.

Examples:

```
glab mr note create <MR-id-or-branch> -m "<comment>"
```

- why_it_matters: Add a discussion-based note while reviewing a merge request from the command line.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.93.0>, <https://docs.gitlab.com/cli/mr/note/create/>
- gotchas: "Version: v1.93.0"; "<MR-id-or-branch>: Merge request ID or branch; omit to use the current branch's merge request."; "-m, --message <text>: Comment text; without it, the command can open an editor or read the message from standard input."

### glab stack sync accepts --assignee (2026-04-23)
- slug: glab-stack-sync-accepts-assignee-f653fbd77e4e
- score: 0.94

How to use it:

When synchronizing a GitLab stack and assigning its merge requests, pass `--assignee` with one or more usernames to `glab stack sync`.

Examples:

```
glab stack sync --assignee <username>[,<username>...]
```

- why_it_matters: Synchronize a GitLab stack while assigning its associated work.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.93.0>, <https://docs.gitlab.com/cli/stack/sync/>
- gotchas: "Version: v1.93.0"; "--assignee <usernames>: Assign merge requests to users by username. Multiple usernames can be comma-separated or supplied by repeating the flag."; "Prerequisite: `glab stack` is experimental."

### glab stack sync accepts --label (2026-04-23)
- slug: glab-stack-sync-accepts-label-f6eedbc5c824
- score: 0.93

How to use it:

When synchronizing a GitLab stack, run `glab stack sync --label <label>` to add the label to merge requests. Labels can be comma-separated or supplied by repeating the flag.

Examples:

```
glab stack sync --label bug,priority::high
```

- why_it_matters: Synchronize a GitLab stack while applying a label to its associated work.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.93.0>, <https://docs.gitlab.com/cli/stack/sync/>
- gotchas: "Version: v1.93.0"; "--label <name> (alias: -l): Add label by name; multiple labels can be comma-separated or specified by repeating the flag."; "Prerequisite: `glab stack` is experimental."

### glab api supports multipart/form-data with --form (2026-04-01)
- slug: glab-api-supports-multipart-form-data-with-form-2c8df36aced3
- score: 0.96

How to use it:

When an API endpoint requires multipart/form-data, use `glab api` with `--form` fields; file values use `@<path>`.

Examples:

```
glab api --method POST projects/:fullpath/wikis/attachments --form "file=@./image.png" --form "branch=main"
```

- why_it_matters: Send multipart form data to a GitLab API endpoint while working with a repository.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.91.0>, <https://docs.gitlab.com/cli/api/>, <https://docs.gitlab.com/cli/>
- gotchas: "Version: v1.91.0"; "--method <method>: HTTP method; defaults to GET without parameters and POST when parameters are added. The example specifies POST."; "<endpoint> (required): GitLab API v4 endpoint path, or `graphql`; `:fullpath` expands to the current repository's full path."; "--form <key=value> (required): Add a multipart form field; repeat for additional fields. Changes the default HTTP method to POST. Prefix a file value with `@` and its path; use `@-` for stdin at most once. Do not combine with `--field`, `--raw-field`, or `--input`."; "Prerequisite: Authenticate `glab` with GitLab; in a Git directory, the command uses that directory's authenticated host."

### glab adds a command to check job status by runner (2026-03-23)
- slug: glab-adds-a-command-to-check-job-status-by-runner-f901223018f0
- score: 0.94

How to use it:

When investigating CI jobs for a runner, use `glab runner jobs <runner-id>` to list its jobs; add `--status <status>` to filter by status.

Examples:

```
glab runner jobs <runner-id> --status running
```

- why_it_matters: Check job status by runner while investigating a repository's CI workflow.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.90.0>, <https://docs.gitlab.com/ja-jp/cli/runner/jobs/>
- gotchas: "Version: v1.90.0"; "<runner-id> (required): Runner whose processed jobs to list."; "--status <status>: Filter by `running`, `success`, `failed`, or `canceled`."; "Prerequisite: Requires the Maintainer or Owner role for the project."

### glab mr adds a note list subcommand (2026-03-23)
- slug: glab-mr-adds-a-note-list-subcommand-acc8c601520b
- score: 0.97

How to use it:

When reviewing or maintaining a repository change, list discussions on the merge request with `glab mr note list`; optionally select an MR or branch and filter by type, resolution state, or file path.

Examples:

```
glab mr note list [<id> | <branch>] [flags]
```

```
glab mr note list <id> --type diff --state unresolved --file <path>
```

```
glab mr note list <id> -F json
```

- why_it_matters: List notes on a merge request while reviewing or maintaining a repository change.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.90.0>, <https://docs.gitlab.com/cli/mr/note/list/>, <https://docs.gitlab.com/cli/auth/login/>
- gotchas: "Version: v1.90.0"; "<id> | <branch>: Select a merge request by ID or branch; omitted to use the current branch's MR."; "--file <path>: Show only diff notes on this file path."; "-F, --output <format>: Output format: `text` or `json`; default `text`."; "--state <state>: Resolution filter: `all`, `resolved`, or `unresolved`; default `all`."; "-t, --type <type>: Note type filter: `all`, `general`, `diff`, or `system`; default `all`."; "-R, --repo <owner/repo>: Select another repository; accepts `OWNER/REPO`, `GROUP/NAMESPACE/REPO`, a full URL, or Git URL."; "Prerequisite: The command is marked experimental in the documentation."; "Prerequisite: Authenticate glab with the GitLab instance before running commands; the CLI uses stored credentials after authentication."

### glab mr adds note resolve and reopen subcommands (2026-03-23)
- slug: glab-mr-adds-note-resolve-and-reopen-subcommands-03aa7424ac4e
- score: 0.97

How to use it:

When a review discussion needs a state change, run `glab mr note resolve` to resolve it or `glab mr note reopen` to reopen it, supplying the discussion or note ID and optionally the merge request ID or branch. The command is experimental.

Examples:

```
glab mr note resolve [<id> | <branch>] <discussion-id>
```

```
glab mr note reopen [<id> | <branch>] <discussion-id>
```

- why_it_matters: Resolve or reopen a merge request note while reviewing a repository change.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.90.0>, <https://docs.gitlab.com/cli/mr/note/resolve/>, <https://docs.gitlab.com/cli/mr/note/reopen/>
- gotchas: "Version: v1.90.0"; "[<id> | <branch>]: Merge request ID or branch; omitted to use the current branch's merge request. When using `-R`, the merge request is required."; "<discussion-id> (required): Full 40-character discussion ID, 8+ character prefix, or integer note ID; a note ID resolves to its parent discussion."; "-R, --repo: Select another repository by OWNER/REPO, GROUP/NAMESPACE/REPO, URL, or Git URL."; "Prerequisite: Requires `glab` set up for GitLab access; the command is marked experimental and may be unstable or removed."; "Docs conflict: The release note says `reopen`; the earlier feature merge request calls the subcommand `unresolve`. Current official docs document `reopen`, consistent with the release note."

### glab stack sync adds --update-base (2026-03-05)
- slug: glab-stack-sync-adds-update-base-44cf2c183b82
- score: 0.91

How to use it:

When a stack needs rebasing onto the latest base branch, run `glab stack sync --update-base`. It rebases the stack onto that branch; sync then force-pushes the stack branches unless `--skip-push` is set.

Examples:

```
glab stack sync --update-base
```

- why_it_matters: Rebase a stack onto an updated base branch.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.89.0>, <https://gitlab.com/gitlab-org/cli/-/blob/remove-mcp-serve-command/docs/source/stack/sync.md>
- gotchas: "Version: v1.89.0"; "--update-base: Rebase the stack onto the latest version of the base branch."

### glab adds a command to assign a project to a runner (2026-03-04)
- slug: glab-adds-a-command-to-assign-a-project-to-a-runner-cd695d6d3200
- score: 0.90

How to use it:

When maintaining CI runner configuration, assign the runner to the project with `glab runner assign <runner-id>`. Specify `-R <owner>/<repo>` when the target project is not the current repository.

Examples:

```
glab runner assign <runner-id>
```

```
glab runner assign <runner-id> -R <owner>/<repo>
```

- why_it_matters: Assign a project to a runner when maintaining its CI runner configuration.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.88.0>, <https://docs.gitlab.com/cli/runner/assign/>
- gotchas: "Version: v1.88.0"; "<runner-id> (required): Runner ID to assign."; "-R, --repo <repository>: Select another repository; accepts OWNER/REPO, GROUP/NAMESPACE/REPO, a full URL, or a Git URL."; "Prerequisite: Requires the Maintainer or Owner role for the project."

### glab adds a command to unassign a runner from a project (2026-03-04)
- slug: glab-adds-a-command-to-unassign-a-runner-from-a-project-78aba57fb82f
- score: 0.97

How to use it:

When maintaining a project’s CI runner configuration, use `glab runner unassign` with the runner ID; use `-R` to select a different repository. You need the project’s Maintainer or Owner role, and cannot unassign a runner from its owner project.

Examples:

```
glab runner unassign <runner-id>
```

```
glab runner unassign <runner-id> -R <owner>/<repo>
```

- why_it_matters: Unassign a runner from a project when maintaining its CI runner configuration.
- sources: <https://gitlab.com/gitlab-org/cli/-/releases/v1.88.0>, <https://docs.gitlab.com/cli/runner/unassign/>
- gotchas: "Version: v1.88.0"; "<runner-id> (required): ID of the runner to unassign."; "-R, --repo <repository>: Select another repository. Accepts OWNER/REPO, GROUP/NAMESPACE/REPO, a full URL, or a Git URL."; "Prerequisite: Requires the Maintainer or Owner role for the project."; "Prerequisite: Cannot unassign a runner from its owner project; use `glab runner delete` instead."
