Put self-hosted
GitLab™ CE on autopilot
Autopilot listens to your GitLab webhooks and keeps the project in order: scoped labels, blocked-by dependencies, issue status that follows the work, auto-approval by label and merge request analytics. No GitLab Premium.
From the makers of Auto Merge for GitLab
GitLab CE leaves the workflow rules to you
Labels contradict each other
An issue carries Priority::High and Priority::Low at once. GitLab CE treats labels with :: like any other label; scoped labels need Premium.
Dependencies live in people's heads
Issue A cannot start before B is done, merge request X needs Y first. GitLab CE has no blocking issues and no merge request dependencies.
The board is always out of date
Someone starts work, opens a merge request, merges it, and the issue still says To Do. Keeping status labels current is manual work nobody does.
GitLab Premium has most of these rules, at $29 per user per month for every user of the instance.
Six rules your project follows from day one
Scoped labels
Add Priority::High and Priority::Low disappears, on issues and merge requests. Every label with :: works this way.
Premium feature on GitLabBlocked-by dependencies
Write "blocked-by: #123" into a description. One note keeps the state of every dependency current, and the issue carries Status::Blocked until they are done.
Premium feature on GitLabIssue status on autopilot
Assigned: Status::In Progress. Merge request opened: Status::In Review. Merged: Status::Done. Nobody updates the board by hand.
GitLab Premium sets status by handAuto-approval by label
Merge requests with the label Pre-Approved, for example Renovate patch updates, are approved by the bot user. Every decision leaves an audit note.
No GitLab edition approves by labelPipeline and branch hygiene
Closing a merge request cancels its running pipelines. Branch 123-fix-login adds Closes #123. Merge requests idle for five days get the label stale.
No GitLab edition does thisMerge request analytics
Time to merge counted from the last real change, so a rebase does not reset the clock, plus throughput and OpenTelemetry metrics for Grafana.
Premium feature on GitLabAlso included: labels such as Priority:: and Component:: travel from the closed issue to its merge request, and merged branches older than 30 days are deleted.
One webhook, rules that read before they write
Autopilot runs next to GitLab as a single container. You add one project webhook; everything else happens through the GitLab REST API.
- 1
Webhook
GitLab sends every issue, merge request, pipeline and push event of the project to Autopilot.
- 2
Read
Autopilot reads the current state of the object from the GitLab API. A late or repeated event changes nothing.
- 3
Decide
Each rule decides on that state: which label goes, which status follows, which note needs an update.
- 4
Write
Label writes name only the labels to add and remove, so a label someone set in between stays. DryRun only logs.
Trigger Issues events, Merge request events,
Pipeline events, Push events
Signing token the secret Autopilot checksGitLab CE, CE with Autopilot, GitLab Premium
| Capability | GitLab CE | CE + Autopilot | GitLab Premium |
|---|---|---|---|
| Scoped labels | — | ✓ | ✓ |
| Issue blocked-by dependencies | — | Note + Status::Blocked | ✓ |
| Merge request dependencies | — | Note; merge hold with Auto Merge | ✓ |
| Issue status | — | Automatic | Manual |
| Approval by label | — | ✓ | — |
| Merge request analytics | — | ✓ | ✓ |
| Merge queue | — | With Auto Merge for GitLab | Merge trains |
| Price | Free | Early access | $29 per user / month |
Sources: GitLab documentation and price list, as of November 2026. Epics, push rules and group webhooks remain GitLab Premium features.
Running in production at Neckar IT
Neckar IT GmbH, a software company in Germany, built Autopilot for its own monorepo on self-hosted GitLab CE. It has handled every issue, merge request and pipeline event of that project since then.
DryRun by default
Logs every write it would make. You switch to Run when the log matches your rules.
Signed webhooks
Accepts only webhooks with a valid GitLab signature.
Reads before it writes
Every decision uses the state GitLab reports now, never the possibly stale webhook payload.
Leaves a trail
Approvals and dependency changes write one note per object, updated in place instead of piling up.
Get Autopilot on your GitLab
We set up Autopilot with a small number of teams on self-hosted GitLab CE before the public image ships. Tell us your GitLab version and which rules you need.
Questions teams ask first
Does Autopilot work with GitLab CE?
Yes. It is built for self-hosted GitLab CE and uses only webhooks, labels, notes and the REST API, which every GitLab edition has. Signed webhooks need GitLab 19.0 or newer.
Is it a GitLab Premium replacement?
It covers the workflow rules teams miss most on CE: scoped labels, dependencies, issue status and merge request analytics. Epics, push rules and group webhooks stay Premium features.
What happens if a webhook arrives late or twice?
Nothing goes wrong. Autopilot takes only the object id from the event and reads the current state from GitLab before it writes. A label someone set in between stays, because every label write names only the labels to add and remove.
Can I try it without changes to my project?
Yes. DryRun is the default mode: Autopilot logs every label, note and approval it would write and writes nothing.
How does it work together with Auto Merge for GitLab?
Autopilot keeps issues, labels and pipelines in order; Auto Merge rebases and merges. A merge request approved by label or declared as blocked-by is picked up by Auto Merge's queue.
How do I get it?
Autopilot is in private early access. Neckar IT runs it in production on its own GitLab and sets it up with early-access teams. Write to info@neckar.it.