- Published on
GitLab Slack Slash Commands vs Notifications: Setup Explained
- Authors

- Name
- Maruan
A developer types /gitlab issue show group/project 12 into a Slack channel, gets a clean response, and assumes the channel is now wired up for merge request updates. An hour later, an engineer opens an urgent security fix, and the channel stays silent.
This happens every week on teams connecting GitLab to Slack. The official GitLab for Slack app houses two different mechanisms under one name. On-demand slash commands behave like an interactive terminal session, while event notifications run as a background pipeline.
When an admin assumes a slash command configures channel subscriptions, setup stalls. You end up troubleshooting silent channels or digging through permissions screens, fixing the wrong layer. Knowing where slash commands end and automated notifications begin saves hours of debugging.
The short answer: does a slash command subscribe a channel to GitLab?
No. No documented slash command subscribes a Slack channel to GitLab merge request or pipeline events. /gitlab subscribe does not work because that command does not exist in the official GitLab for Slack app.
Engineers coming from GitHub fall into this trap constantly. The official GitHub Slack integration relies on /github subscribe owner/repo to bind repositories to channels. GitLab took a different path. Enter /gitlab subscribe in a Slack channel and the bot returns an unknown command error.
GitLab channel subscriptions live entirely in the GitLab web interface, under your project or group integration settings. You can't turn on notifications, select triggers, or route merge request activity from the Slack message box. Slash commands handle immediate, ad-hoc queries. Event delivery needs admin configuration inside GitLab itself.
Two mechanisms, one app: on-demand commands vs configured event delivery
The GitLab for Slack app runs two distinct technical paths behind one interface: synchronous request-response commands and asynchronous webhook event delivery.
GitLab Slack slash commands use Slack's Slash Commands API. When you run a command, it is sent to the GitLab for Slack app. GitLab validates the requesting user, processes the query, and sends a JSON payload straight back to Slack. The interaction ends within milliseconds. It produces either an ephemeral message visible only to you or a single message in the channel.
Event notifications work in the other direction, through GitLab's background event workers. When a developer creates a merge request, GitLab delivers notifications to Slack based on your configured project integration settings. This pipeline runs whether or not anyone types anything in Slack.
These systems run on separate rails, so one can work perfectly while the other fails completely. A broken notification pipeline won't break your slash commands. And a successful slash command proves nothing about whether your merge request notifications are configured.
Teams that want review updates without a noisy stream of separate messages often find native event delivery overwhelming. MergeMe takes a different approach: it posts one updating card per PR/MR, giving teams clean visibility across GitLab merge requests and GitHub pull requests in Slack.
What the documented /gitlab commands actually do (help, issue show, issue new; deploy and run noted but not demonstrated)
The documented GitLab Slack slash commands cover a narrow set of operational tasks. They are shortcuts for developers who want quick project context without switching browser tabs.
The usual entry point is /gitlab help. It prints the available commands and the syntax your installation supports. It is the definitive reference for what your app version actually recognizes.
For day-to-day issue work, the app can read and create issues. /gitlab <project> issue show <id> queries GitLab and shows the issue directly in Slack. If you need to log a bug during an incident discussion, /gitlab <project> issue new <title> <description> creates a new issue in the target project.
The app also supports pipeline actions through /gitlab <project> deploy <from> to <to> and /gitlab <project> run <job name> <arguments>. These trigger deployments or pipeline schedules from Slack, and they need precise environment names and CI trigger configurations.
Look at what's missing from this list. No command lists webhook targets, changes notification filters, or assigns review alerts. Slash commands query data and trigger jobs. They don't configure channel event routing.
User authorization vs project integration settings: who is allowed versus what gets delivered
Most of the confusion between commands and notifications comes from their authorization models. Slash commands check the identity of the person typing. Notifications check the configuration of the project.
When a developer runs a slash command, GitLab checks user-level authorization. Users must authorize their Slack user account when running their first slash command. If a developer lacks read access to a private repository in GitLab, /gitlab group/project issue show 5 returns an unauthorized error, even with the bot sitting in the channel. The permissions boundary is the developer's personal account.
Event notifications bypass individual user tokens entirely. They run under project integration settings configured by a project Maintainer or Owner. Once configured, GitLab pushes merge request events to the designated Slack channel no matter who opened the merge request. Delivery succeeds or fails based on project-level integration tokens and Slack channel access.
If notifications don't arrive, individual user permissions are almost never the cause. Check whether the bot has been invited to private channels, and review your channel targeting settings using our GitLab Slack integration channel permissions guide.
Project path vs alias: what the <project> argument really means
Every project-specific slash command needs a target identifier. Developers often get command errors because they enter the wrong project format into Slack.
The required argument is the full GitLab project path, formatted as namespace/project or group/subgroup/project. The display name of the repository (such as 'Core API') fails. The bare repository name without its parent group (such as 'core-api' instead of 'backend/core-api') also fails.
Typing long paths over and over gets old. To fix that, GitLab lets project administrators define a project alias in the project settings. If an admin assigns the alias 'core' to 'backend/services/core-api', developers can run /gitlab core issue show 12 instead of typing the whole namespace.
You can't set this alias with a slash command. You have to log into the GitLab web UI, go to Settings > Integrations > GitLab for Slack, and set the alias in the project configuration form. The alias is a shortcut for the command parser. It does not subscribe channels to project notifications.
Verifying each side safely: a read-only issue show check vs a real merge request notification check
Slash commands and notifications use separate network pathways, so you have to verify each side on its own. Testing one tells you nothing about the other.
To verify slash commands safely, pick a known public or internal issue in your project and run a read-only query:
/gitlab <group/project> issue show 1
If Slack returns the issue details, your Slack-to-GitLab command routing, application endpoints, and personal OAuth connection all work. If it fails, the error message points to the cause: an invalid project path, an unlinked user account, or an unreachable GitLab instance.
Testing event notifications requires a real event trigger. Don't rely on the 'Test' button in GitLab integration settings. It confirms basic network reachability between GitLab and Slack, but it doesn't validate event payload triggers or channel privacy rules.
For a real notification check, open an existing draft merge request in GitLab and post a comment or edit the title. Then see whether your target Slack channel receives the event. If the slash command works but the merge request notification never appears, your project integration settings or channel invitation status are broken. Follow our checklist for when GitLab Slack test works but merge request notifications missing to isolate the root cause.
Unverified commands from AI answers: how to check them against the docs before running
Large language models regularly invent convincing but fictitious GitLab Slack slash commands. They blend syntax from the GitHub, Jira, and GitLab integrations and produce instructions that look legitimate until you run them.
Common hallucinations include /gitlab subscribe, /gitlab notify on, and /gitlab alias set core backend/core-api. When teams run these, Slack returns an unhelpful error, and engineers start wondering whether their OAuth connection or self-hosted network tunnel broke.
The fastest check is inside Slack: type /gitlab help. The response lists every slash command your installation supports.
If a suggested command isn't in the /gitlab help output, your GitLab instance can't process it. Don't burn time diagnosing firewall rules or token scopes for a command that doesn't exist in GitLab's codebase.
Decision checklist: which mechanism do you need, and where to go next for permissions and missing-MR troubleshooting
Before touching your integration settings, pin down which problem you're actually solving.
Use GitLab Slack slash commands when individual developers need on-demand data inside Slack:
Checking issue status during an engineering conversation.
Creating an issue without leaving a chat thread.
Triggering a deployment job manually from an incident channel.
Use GitLab project integration settings when your team needs automated event updates:
Alerting a channel when an engineer opens a new merge request.
Posting pipeline failure notifications to an operations room.
Routing project activity logs for compliance tracking.
If automated merge request alerts are your goal, slash commands won't get you there. Configure the GitLab for Slack integration at the project or group level inside GitLab, specify the target channel, and add the Slack bot to that channel.
For teams coordinating reviews across complex repositories, native notifications get chaotic, with separate messages for opens, comments, and approvals. MergeMe cuts that noise by showing Slack notifications for GitHub pull requests and GitLab merge requests as one updating card per PR/MR. It works across GitHub.com, GitLab.com, and self-hosted GitLab within a single workspace. Pricing starts on the Hobby plan (free forever with 1 channel mapping and 5 user mappings).
Conclusion
GitLab Slack slash commands give you an on-demand window into your projects. They will never automate your team's code review workflow. Event notifications need their own integration setup inside GitLab, separate permissions, and careful channel management.
If your team can't keep code reviews visible without drowning channels in disconnected bot messages, connect your repositories to MergeMe. It tracks your GitLab merge requests and GitHub pull requests with one updating card per PR/MR, so handoffs don't get missed and engineering channels stay focused.
FAQs
Can I use /gitlab subscribe to receive merge request notifications in Slack?
No. The /gitlab command exists for the GitLab for Slack app and supports slash commands such as /gitlab help, but it cannot be used to subscribe to notifications. For the GitLab for Slack app, notifications are configured under Project Settings > Integrations > GitLab for Slack app, where you select events and specify Slack channel names rather than using the legacy Slack notifications integration.
Why does /gitlab issue show work, but merge requests do not post to Slack?
Slash commands and notifications use different systems. The command runs via personal OAuth authorization when you make a request. The GitLab for Slack app does not use project-level webhook configurations; it is a native Slack app configured through project integrations, and it must be added to private Slack channels to post notifications.
How do I set a project alias for GitLab slash commands?
Project aliases cannot be created through Slack commands. Instead, a project Maintainer or Owner must configure the alias within the project settings in the GitLab web interface.
Does MergeMe support self-hosted GitLab alongside Slack?
Yes. MergeMe supports GitHub.com, GitLab.com, and self-hosted GitLab instances in a single Slack workspace, posting updates as one updating card per PR/MR. Teams with data residency or SSO requirements can also run MergeMe self-hosted.