| `gl-get-runner` | Get runner by `GITLAB_RUNNER_NAME` |
| `gl-get-runner-token` | Get runner token |
@@ -540,6 +542,8 @@ GitLab API operations. Depends on GitLab API helper scripts.
| `push-new-tag` | Tag HEAD with `${PUSH_TAG_PREFIX}YYYY-MM-DD_HH-MM-SS` and push |
| `gitlab-pid` | Print project ID for `GITLAB_PROJECT_URL` |
**Slack — legacy webhook vs. the GitLab for Slack app.**`gl-set-slack` (and `gl-setup` / `gl-new-repo`) configure the legacy "Slack notifications" webhook service. For the modern **GitLab for Slack app** (slug `gitlab-slack-application`) run `gl-set-slack-app` (it skips the `vault-login` prereq the legacy target carries; the script also honors `SLACK_APP=true` if invoked directly). The app needs no webhook (so `SLACK_WEBHOOK_PATH`/Vault aren't required) and routes **per-event channels** — set `SLACK_ISSUE_CHANNEL`, `SLACK_NOTE_CHANNEL`, `SLACK_MERGE_REQUEST_CHANNEL`, `SLACK_PIPELINE_CHANNEL`, … as **bare channel names without a leading `#`** (the command adds it, like `SLACK_GITLAB_CHANNEL`). Each defaults to `SLACK_GITLAB_CHANNEL`, with CI/CD events (pipeline/job) defaulting to `SLACK_CICD_CHANNEL`; enabling an event without a channel silently drops it. In legacy mode the command warns when the app is the active integration (a legacy edit is a no-op there). `work_item_channel` is omitted — the current API ignores it, so set standalone work-item types from the Slack side.