GitLab

September 9, 2026 ยท View on GitHub

tuicr reviews GitLab merge requests the same way it reviews GitHub pull requests, through the glab CLI.

Setup

Install the GitLab CLI and authenticate:

glab auth login

tuicr shells out to glab for every GitLab operation and stores no tokens of its own. tuicr submits as whatever account glab is logged into.

Open a merge request

tuicr mr 125

mr is an alias for pr, so tuicr mr 125, tuicr pr 125, and tuicr tui mr 125 all open the same review. The target accepts several forms:

TargetExample
MR IID125
MR URLhttps://gitlab.com/owner/repo/-/merge_requests/125
owner/repo#iidmygroup/myrepo#125
host/owner/repo#iidgit.example.com/mygroup/myrepo#125

Nested groups and subgroups work in the owner/repo slot, for example mygroup/subgroup/myrepo#125.

tuicr detects the forge from the repository's remotes. A remote routes to GitLab when its host contains gitlab or matches a self-hosted host configured in glab. Everything else falls back to GitHub.

Submit a review

:submit opens a picker. On GitLab it offers four events:

EventResult
CommentPosts your inline and review-level comments without changing approval state.
ApprovePosts your comments and approves the merge request.
Request changesPosts your comments and sets the MR reviewer state to changes requested.
DraftPosts your comments as GitLab draft notes without publishing them or changing approval state.

Inline comments land on their lines as merge request discussion notes. Review-level comments post as the review summary.

Request changes requires that your account is an assigned reviewer on the merge request. GitLab only lets a reviewer set that state. If you are not a reviewer, tuicr surfaces the error GitLab returns rather than reporting success. tuicr does not add you as a reviewer on your behalf.

:submit draft uses GitLab draft notes, the closest primitive to a GitHub pending review: your inline and review-level comments are stored but not published. Publish them yourself from GitLab's own "Submit review" control on the merge request.

Self-hosted GitLab

Authenticate against your instance once:

glab auth login --hostname git.example.com

After that, tuicr recognizes remotes on git.example.com as GitLab because the host is configured in glab. Pass the full URL or a host/owner/repo#iid target, and tuicr builds the https://git.example.com/owner/repo repository argument for glab on its own.

SSH over port 443

If your network only allows SSH on port 443, GitLab's altssh.gitlab.com endpoint works. tuicr maps altssh.gitlab.com back to gitlab.com when it reads your remote, so the MR resolves against the real host. HostName aliases in ~/.ssh/config are resolved the same way.

Limitations and troubleshooting

Reviewing a commit range within an MR requires a local checkout of the branch. A remote-only commit-range diff returns a "not yet supported" error.

For verbose tracing of the glab calls tuicr makes, set TUICR_GLAB_DEBUG=1. tuicr appends each interaction to /tmp/tuicr-glab-debug.log.

Common errors:

MessageFix
GitLab integration requires glab.Install the GitLab CLI, then run glab auth login.
GitLab authentication failed.Run glab auth login for the host named in the error.
GitLab token lacks merge request write permission.Authenticate with an account or token that has merge request write access.