Autopilot
Menu
Request early access
Private early access · Self-hosted · GitLab CE

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

The problem

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.

Features

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 GitLab

Blocked-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 GitLab

Issue 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 hand

Auto-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 label

Pipeline 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 this

Merge 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 GitLab

Also 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.

How it works

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. 1

    Webhook

    GitLab sends every issue, merge request, pipeline and push event of the project to Autopilot.

  2. 2

    Read

    Autopilot reads the current state of the object from the GitLab API. A late or repeated event changes nothing.

  3. 3

    Decide

    Each rule decides on that state: which label goes, which status follows, which note needs an update.

  4. 4

    Write

    Label writes name only the labels to add and remove, so a label someone set in between stays. DryRun only logs.

Settings › Webhooks
Trigger         Issues events, Merge request events,
                Pipeline events, Push events
Signing token   the secret Autopilot checks
Comparison

GitLab CE, CE with Autopilot, GitLab Premium

diff --editions
CapabilityGitLab CECE + AutopilotGitLab Premium
Scoped labels—✓✓
Issue blocked-by dependencies—Note + Status::Blocked✓
Merge request dependencies—Note; merge hold with Auto Merge✓
Issue status—AutomaticManual
Approval by label—✓—
Merge request analytics—✓✓
Merge queue—With Auto Merge for GitLabMerge trains
PriceFreeEarly 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.

Who builds it

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.

Private early access

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.

Request early accessinfo@neckar.it
FAQ

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.