{
 "$schema": "https://agentdrives.com/schemas/tool.schema.json",
 "id": "prd_01m57vgtgxgnzbkf6we4em96b1",
 "ids": {
  "org": "org_01m57vgtgx4d7mbwmnc6s17a47",
  "surfaces": {
   "web": "srf_01m59bvv69h5wxac793p96qh54",
   "api": "srf_01m59bvv692j68447k4sqhstb7",
   "mcp": "srf_01m59bvv69vs2fxwgjj6hdh3n2",
   "cli": "srf_01m59bvv69yt360tm29kmqjb3x"
  },
  "slugs": [
   "gitlab"
  ],
  "domain": "gitlab.com",
  "wikidata": "Q16639197"
 },
 "slug": "gitlab",
 "name": "GitLab",
 "url": "https://gitlab.com",
 "domain": "gitlab.com",
 "category": "project-management",
 "category_name": "Project management",
 "tested_at": "2026-10-19",
 "run": "20261019T053355Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261019T053355Z",
   "date": "2026-10-19",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 4,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip"
   },
   "stop": "signup",
   "drives": 2
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [],
 "not_counted": null,
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "portal"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Learn",
   "state": "yes",
   "text": "Docs it can act on: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ],
   "docs": "complete"
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "portal",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": null,
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "coverage_own": null,
 "after_wall": null,
 "coverage_source": "reported",
 "driver": {
  "version": 4,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "2f233581a23a",
  "kb_version": "3+overlay-fb2c175349",
  "identity": "e8a92f24a9a8"
 },
 "methodology": 24,
 "rules_date": "2026-10-20",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 4,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "skip"
 },
 "same_level_drives": 1,
 "drives": 2,
 "same_stop_drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "newer_drives": null,
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Arkose Labs (FunCaptcha)",
  "visible": true,
  "type": "challenge",
  "human": null,
  "how": "Let signed agents (valid Web Bot Auth signature) skip the bot check on sign-up, or offer a documented sign-up API with email verification.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "captcha"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-23"
  },
  "browser": {
   "state": "captcha",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "docs.gitlab.com/llms.txt, MCP server docs, REST and OAuth docs, OpenAPI 3.0 page all fetched."
  },
  "signup": {
   "status": "human",
   "cause": "check",
   "note": "Arkose Labs puzzle ('Please solve this puzzle so we know you are a real person') on Continue at /users/sign_up and /-/trial_registrations/new."
  },
  "verify": {
   "status": "",
   "note": "Not reached: no account (Arkose puzzle at sign-up).",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Not reached: no account. Docs offer personal access tokens, OAuth device grant and DCR for MCP.",
   "reached": false
  },
  "first_call": {
   "status": "",
   "route": "no_account",
   "note": "Not reached: no account; keyless reads of /api/v4 are disallowed by robots.txt for all user agents.",
   "cause": "robots_star",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [
    "Customers Portal card checkout (per docs)"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": true,
   "rail_scope": "none",
   "trial_path": "free tier",
   "route": "portal",
   "checkout": {
    "reached": "no",
    "processor": "other",
    "captcha": "none",
    "three_ds": "not_seen",
    "card_form": false,
    "phone_field": "none",
    "wallets": [],
    "rail_offer": "none",
    "price": "29.00",
    "currency": "USD",
    "period": "year",
    "plan": "Premium",
    "last_button": "Buy subscription"
   },
   "person": "none",
   "ours": "no account",
   "note": "No 402/x402/MPP on any GitLab host and nothing paid; Stripe Projects listing unconfirmed. Docs: Settings > Billing > Upgrade > Customers Portal > 'Buy subscription' with a card; Premium $29/user/month billed annually. Checkout not reached without an account; from docs. Free plan and 30-day trial need no card.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "Nothing to cancel: nothing was started. Docs: Customers Portal > Subscription actions > Cancel subscription (web UI).",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was made, so nothing to delete; the sign-up form never submitted.",
   "account": false,
   "reached": false
  }
 },
 "routes": [
  {
   "route": "keyless",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "robots",
    "owner": "product"
   },
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 0.2,
   "browser": null
  },
  {
   "route": "email_password",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "challenge",
    "owner": "product"
   },
   "person": "none",
   "brings": "inbox",
   "fresh": true,
   "minutes": 3,
   "browser": null
  },
  {
   "route": "sso_github",
   "offered": "seen",
   "tried": false,
   "not_tried": "no_kit",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "sso_google",
   "offered": "seen",
   "tried": false,
   "not_tried": "no_kit",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "device_login",
   "offered": "documented",
   "tried": false,
   "not_tried": "same_as",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "oauth_consent",
   "offered": "documented",
   "tried": false,
   "not_tried": "same_as",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "sso_enterprise",
   "offered": "documented",
   "tried": false,
   "not_tried": "assisted_only",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "marketplace",
   "offered": "documented",
   "tried": false,
   "not_tried": "policy",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "enterprise",
   "offered": "documented",
   "tried": false,
   "not_tried": "assisted_only",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  }
 ],
 "checkout": {
  "reached": "no",
  "rail_offer": "none",
  "period": "year",
  "price": "29.00",
  "currency": "USD",
  "plan": "Premium"
 },
 "docs": {
  "at": "2026-10-19",
  "read": 425,
  "listed": 3738,
  "sampled": true,
  "overall": "complete",
  "getting_started": "found",
  "auth": "found",
  "errors": "found",
  "examples": "some",
  "freshness": "fresh",
  "newest": "2026-10-19",
  "core_pages": "10 of 10",
  "capabilities": "covered"
 },
 "claims": null,
 "pay_options": {
  "checked": "2026-10-19",
  "source": "probe",
  "options": [
   {
    "id": "stripe-projects",
    "name": "Stripe Projects",
    "kind": "agent-rail",
    "first_party": true,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [
   "stripe-projects"
  ],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST v4 + GraphQL, documented",
  "openapi": "docs say OpenAPI 3.0 (openapi_v3.yaml in the monorepo); raw file disallowed by robots.txt, declared field not read",
  "mcp": "official, HTTP at /api/v4/mcp, OAuth + DCR",
  "cli": "glab"
 },
 "can_do": [],
 "cannot_do": [
  {
   "what": "Create a GitLab.com account",
   "why": "Arkose Labs puzzle on both sign-up forms"
  },
  {
   "what": "Call the public REST API or MCP server without an account",
   "why": "robots.txt disallows /api/v* for all user agents"
  },
  {
   "what": "Any capability in the map (projects, issues, MRs, pipelines, releases)",
   "why": "no account could be made"
  }
 ],
 "blockers": [
  "Arkose Labs puzzle at sign-up (/users/sign_up and /-/trial_registrations/new)"
 ],
 "tips_for_agents": [
  "A person must create the GitLab.com account (Arkose puzzle); after that use the official MCP server at https://gitlab.com/api/v4/mcp (OAuth, DCR, scope mcp) or REST with a token.",
  "glab and the OAuth device grant (/oauth/authorize_device) give browser-free credentials once an account exists."
 ],
 "selfhost": {
  "install": {
   "status": "skipped",
   "minutes": 0,
   "note": "no docker in the drive sandbox"
  }
 },
 "summary": "An agent cannot get into GitLab.com on its own: both sign-up forms show an Arkose Labs puzzle, and no account was made. Without an account, robots.txt keeps agents off /api/v* (REST and MCP), so no capability could be tested. The agent surfaces are strong on paper: llms.txt, an official MCP server with OAuth and DCR, OpenAPI 3.0, glab and a device grant.",
 "wall": "Arkose Labs puzzle on the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": {
  "rule": "star",
  "step": null,
  "seen": "2026-10-19",
  "held": false
 },
 "terms": null,
 "plain": {
  "summary": "GitLab is a code-hosting and DevOps platform. An agent trying to sign up on its own was stopped immediately by a puzzle challenge meant to prove it's a human, so no account, and nothing behind it, could be tested.",
  "can_do": [],
  "cannot_do": [
   {
    "what": "Create a GitLab.com account",
    "why": "a puzzle challenge blocks the sign-up button"
   },
   {
    "what": "Use the API or the AI assistant connector without an account",
    "why": "the site's own robots file blocks those paths for all automated agents"
   },
   {
    "what": "Try any project, task, or code feature",
    "why": "every feature needs an account, which could not be created"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "capability": "Create a project or repository",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects",
    "mcp": null,
    "cli": "glab repo create",
    "ui": "New project"
   },
   "check": "GET /projects/:id returns the new project",
   "capability_id": "cap_pe5me100",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-02",
   "capability": "Create an issue",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/issues",
    "mcp": "create_issue",
    "cli": "glab issue create",
    "ui": "Plan > Issues"
   },
   "check": "GET /projects/:id/issues/:iid shows the issue",
   "capability_id": "cap_kzejkm30",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/issues",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-03",
   "capability": "Create a merge request to review code changes",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/merge_requests",
    "mcp": "create_merge_request",
    "cli": "glab mr create",
    "ui": "Code > Merge requests"
   },
   "check": "GET /projects/:id/merge_requests/:iid shows the MR with its diffs",
   "capability_id": "cap_kzejkm30",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/merge_requests",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-04",
   "capability": "Comment on an issue or merge request",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/issues/:iid/notes",
    "mcp": "create_note",
    "cli": "glab mr note",
    "ui": "Issue/MR discussion"
   },
   "check": "GET .../notes lists the new comment",
   "capability_id": "cap_4zn5cq20",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/discussions",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-05",
   "capability": "Run a CI/CD pipeline",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/pipeline",
    "mcp": null,
    "cli": "glab ci run",
    "ui": "Build > Pipelines"
   },
   "check": "GET /projects/:id/pipelines/:pipeline_id shows status running/success",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://docs.gitlab.com/ci",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-06",
   "capability": "Deploy or release an application",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/releases",
    "mcp": null,
    "cli": "glab release create",
    "ui": "Deploy > Releases"
   },
   "check": "GET /projects/:id/releases/:tag_name shows the release",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://docs.gitlab.com/user/project/releases",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-07",
   "capability": "Scan code for security vulnerabilities (SAST/dependency/container scanning)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /projects/:id/vulnerabilities",
    "mcp": null,
    "cli": null,
    "ui": "Secure > Vulnerability report"
   },
   "check": "Vulnerability report shows findings from a scan pipeline job",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://docs.gitlab.com/user/application_security",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-08",
   "capability": "Ask GitLab Duo Chat a question about code",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /graphql (aiAction)",
    "mcp": null,
    "cli": null,
    "ui": "Duo Chat panel"
   },
   "check": "Chat response appears in the Duo Chat panel referencing repo context",
   "capability_id": "cap_9qpyn3bj",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/gitlab_duo_chat",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-09",
   "capability": "Delegate a task to a GitLab Duo Agent Platform agent/flow",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Duo Agent Platform > Sessions"
   },
   "check": "GET session status in Duo Agent Platform Sessions shows the run and its result",
   "capability_id": "cap_4ew83zqz",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/duo_agent_platform",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-10",
   "capability": "Get AI code suggestions while typing",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Web IDE / Source Editor"
   },
   "check": "Visual: suggested completion appears inline while editing a file",
   "capability_id": "cap_1vwp1jc5",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/duo_agent_platform/code_suggestions",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-11",
   "capability": "Add a label to an issue",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /projects/:id/issues/:iid (labels)",
    "mcp": null,
    "cli": "glab issue update --label",
    "ui": "Issue sidebar"
   },
   "check": "GET issue shows labels array updated",
   "capability_id": "cap_7h83px69",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/labels",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-12",
   "capability": "Add a milestone to a project",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/milestones",
    "mcp": null,
    "cli": null,
    "ui": "Plan > Milestones"
   },
   "check": "GET /projects/:id/milestones lists the milestone",
   "capability_id": "cap_9xs2hcsv",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/milestones",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-13",
   "capability": "Group issues into an epic",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /groups/:id/epics",
    "mcp": null,
    "cli": null,
    "ui": "Plan > Epics"
   },
   "check": "Epic page lists linked child issues",
   "capability_id": "cap_a2ajb5h4",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/okrs",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-14",
   "capability": "Create an issue board (Kanban)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/boards",
    "mcp": null,
    "cli": null,
    "ui": "Plan > Issue boards"
   },
   "check": "Board shows the configured lists and cards",
   "capability_id": "cap_nj4x6v2s",
   "unmapped": null,
   "source": "https://docs.gitlab.com/tutorials/kanban",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-15",
   "capability": "Log time spent on an issue",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/issues/:iid/add_spent_time",
    "mcp": null,
    "cli": "quick action /spend",
    "ui": "Issue sidebar time tracking"
   },
   "check": "GET time_stats on the issue shows total_time_spent updated",
   "capability_id": "cap_nqxg2m23",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/time_tracking",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-16",
   "capability": "Search across projects and code",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /search",
    "mcp": "search",
    "cli": "glab api search",
    "ui": "Global search"
   },
   "check": "Search results list matching issues/code/MRs",
   "capability_id": "cap_j1x1a2f4",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/search",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-17",
   "capability": "Semantic code search",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Duo semantic search"
   },
   "check": "Search by meaning returns relevant code snippets not matching literal keywords",
   "capability_id": "cap_j1x1a2f4",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/gitlab_duo/semantic_code_search",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-18",
   "capability": "Request approval on a merge request",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "PUT /projects/:id/approval_rules",
    "mcp": null,
    "cli": "glab mr approve",
    "ui": "MR approvals section"
   },
   "check": "GET /projects/:id/merge_requests/:iid/approvals shows approvals_required and approved_by",
   "capability_id": "cap_pd11cz6h",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/merge_requests/approvals",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-19",
   "capability": "Create a wiki page",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/wikis",
    "mcp": null,
    "cli": null,
    "ui": "Plan > Wiki"
   },
   "check": "GET /projects/:id/wikis/:slug returns the page content",
   "capability_id": "cap_yvyjytn1",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/wiki",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-20",
   "capability": "Publish a static site with GitLab Pages",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/pages",
    "mcp": null,
    "cli": null,
    "ui": "Deploy > Pages"
   },
   "check": "The published Pages URL serves the built site",
   "capability_id": "cap_4g742dnh",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/pages",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-21",
   "capability": "Publish a package to the Package/Container Registry",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /projects/:id/packages/*",
    "mcp": null,
    "cli": "glab ... (via docker/npm clients)",
    "ui": "Deploy > Package registry"
   },
   "check": "GET /projects/:id/packages lists the uploaded package version",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://docs.gitlab.com/user/packages",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-22",
   "capability": "Export project data",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/export",
    "mcp": null,
    "cli": null,
    "ui": "Project settings > Advanced > Export"
   },
   "check": "GET /projects/:id/export status becomes finished and the download link works",
   "capability_id": "cap_8zwmj5wn",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/settings/import_export",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-23",
   "capability": "Import a repository from another tool",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /import/github",
    "mcp": null,
    "cli": "glab repo import",
    "ui": "New project > Import project"
   },
   "check": "Imported project appears with its history",
   "capability_id": "cap_a8damn1w",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/import",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-24",
   "capability": "Register a webhook",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/hooks",
    "mcp": null,
    "cli": null,
    "ui": "Project settings > Webhooks"
   },
   "check": "GET /projects/:id/hooks lists the webhook and test delivery returns 200",
   "capability_id": "cap_977hxacb",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/integrations/webhooks",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-25",
   "capability": "View DORA / analytics dashboards",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /projects/:id/dora/metrics",
    "mcp": null,
    "cli": null,
    "ui": "Analyze > Analytics dashboards"
   },
   "check": "Dashboard renders deployment frequency / lead time charts",
   "capability_id": "cap_fhmexa68",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/analytics/dora_metrics",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-26",
   "capability": "Manage feature flags",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /projects/:id/feature_flags",
    "mcp": null,
    "cli": null,
    "ui": "Deploy > Feature flags"
   },
   "check": "GET /projects/:id/feature_flags lists the flag and its active state",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://docs.gitlab.com/operations/feature_flags",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-27",
   "capability": "Manage incidents",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/issues (type=incident)",
    "mcp": null,
    "cli": null,
    "ui": "Operate > Incidents"
   },
   "check": "GET incident shows status and timeline updates",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://docs.gitlab.com/operations/incident_management",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-28",
   "capability": "Manage Kubernetes cluster agents",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/cluster_agents",
    "mcp": null,
    "cli": "glab cluster agent",
    "ui": "Operate > Kubernetes clusters"
   },
   "check": "GET /projects/:id/cluster_agents lists the connected agent",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://docs.gitlab.com/user/clusters/agent",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-29",
   "capability": "Invite a member to a project or group",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/invitations",
    "mcp": null,
    "cli": "glab api",
    "ui": "Manage > Members"
   },
   "check": "GET /projects/:id/members lists the invited user",
   "capability_id": "cap_3w8sjh12",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/members",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-30",
   "capability": "Set a member's role/permissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "PUT /projects/:id/members/:user_id",
    "mcp": null,
    "cli": null,
    "ui": "Manage > Members"
   },
   "check": "GET member shows updated access_level",
   "capability_id": "cap_bs3hvrpm",
   "unmapped": null,
   "source": "https://docs.gitlab.com/auth/user_permissions",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-31",
   "capability": "Create an API personal access token",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /personal_access_tokens",
    "mcp": null,
    "cli": null,
    "ui": "User settings > Access Tokens"
   },
   "check": "New token authenticates a subsequent API call",
   "capability_id": "cap_wbg916v9",
   "unmapped": null,
   "source": "https://docs.gitlab.com/auth/user_authentication",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-32",
   "capability": "Configure SAML SSO",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Group settings > SAML SSO"
   },
   "check": "SSO login redirect uses the configured identity provider",
   "capability_id": "cap_pz4pecfg",
   "unmapped": null,
   "source": "https://docs.gitlab.com/administration/auth",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-33",
   "capability": "Enable two-factor authentication",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "User settings > Account > 2FA"
   },
   "check": "Subsequent login requires an OTP code",
   "capability_id": "cap_9qz744jy",
   "unmapped": null,
   "source": "https://docs.gitlab.com/auth/user_authentication",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-34",
   "capability": "Read the audit log",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /groups/:id/audit_events",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Audit events"
   },
   "check": "Audit events list the recent admin action",
   "capability_id": "cap_xgs80797",
   "unmapped": null,
   "source": "https://docs.gitlab.com/administration/compliance/audit_event_streaming",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-35",
   "capability": "Change the subscription plan",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "customers.gitlab.com portal"
   },
   "check": "Plan shown in Billing reflects the upgrade",
   "capability_id": "cap_0fp1r7vd",
   "unmapped": null,
   "source": "https://about.gitlab.com/pricing/",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-36",
   "capability": "Query GitLab Orbit knowledge graph",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /orbit endpoints",
    "mcp": "list_commands, invoke_command",
    "cli": "glab orbit",
    "ui": null
   },
   "check": "invoke_command returns graph query results (e.g. blast radius of a file)",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://docs.gitlab.com/orbit/remote/access/mcp",
   "result": "unknown",
   "via": null
  },
  {
   "id": "cap-37",
   "capability": "Build a workspace in the browser (Web IDE / Remote Development)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/:id/remote_development/workspaces",
    "mcp": null,
    "cli": null,
    "ui": "Code > Web IDE"
   },
   "check": "Workspace status becomes Running and files are editable",
   "capability_id": "cap_p675qb2x",
   "unmapped": null,
   "source": "https://docs.gitlab.com/user/project/remote_development",
   "result": "unknown",
   "via": null
  }
 ],
 "stale": false,
 "unreachable_since": null,
 "not_driven_since": null,
 "icon": "/logos/gitlab.png",
 "agent_kinds": {
  "browser": {
   "who": "An assistant in a browser",
   "passed": [],
   "stop": "signup",
   "why": "a Arkose challenge blocks the sign-up",
   "tone": "wall",
   "text": "Signing up needs a person: a Arkose challenge blocks the sign-up."
  },
  "direct": {
   "who": "An agent talking to it directly",
   "passed": [],
   "stop": "signup",
   "why": "a Arkose challenge blocks the sign-up",
   "tone": "wall",
   "text": "Signing up needs a person: a Arkose challenge blocks the sign-up."
  }
 },
 "stop_evidence": {
  "at": "signup",
  "date": "2026-10-19",
  "line": "Arkose Labs puzzle ('Please solve this puzzle so we know you are a real person') on Continue at /users/sign_up and /-/trial_registrations/new."
 },
 "stop_shot": null,
 "attempts_count": 23,
 "detail": {
  "public": false,
  "in": [
   "report",
   "api"
  ],
  "since": "2026-10-17"
 },
 "what_it_does": "GitLab is a code-hosting and DevOps platform.",
 "rules_version": "rules-2026-10-20-24",
 "rules_url": "https://agentdrives.com/method/changelog#rules-2026-10-20-24",
 "category_median": null,
 "verdict": "Signup stops an agent cold: both sign-up forms show an Arkose Labs puzzle asking it to prove it's a real person, and our agent never got past it. That's L1 · Needs a person: a person has to open an account before any key work starts. With no account, robots.txt blocks keyless reads of the API too, so neither the REST endpoints nor the MCP server could be tried. Docs promise real agent surfaces once a person sets it up: llms.txt, an official MCP server with OAuth and dynamic client registration, OpenAPI docs, a CLI and a device grant. Paying and cancelling sit behind the same wall, in the Customers Portal, never reached this drive.",
 "changes": {
  "source": "store",
  "drives": [
   {
    "run": "20261019T050135Z",
    "date": "2026-10-19",
    "level": 1,
    "stop": "signup",
    "entry": "closed",
    "driver": 4,
    "listed": true
   },
   {
    "run": "20261019T053355Z",
    "date": "2026-10-19",
    "level": 1,
    "stop": "signup",
    "entry": "closed",
    "driver": 4,
    "listed": true
   }
  ],
  "events": [],
  "feed": "https://agentdrives.com/api/tools/gitlab/changes.json"
 },
 "agreement": {
  "drives": 2,
  "agree": 2
 },
 "method_release": "2026-Q4.9",
 "rank": null,
 "rank_of": 4,
 "rank_change": null,
 "rank_since": null,
 "capability_matrix": [
  {
   "id": "cap-01",
   "name": "Create a project or repository",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-02",
   "name": "Create an issue",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-03",
   "name": "Create a merge request to review code changes",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-04",
   "name": "Comment on an issue or merge request",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-05",
   "name": "Run a CI/CD pipeline",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-06",
   "name": "Deploy or release an application",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-07",
   "name": "Scan code for security vulnerabilities (SAST/dependency/container scanning)",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-08",
   "name": "Ask GitLab Duo Chat a question about code",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-09",
   "name": "Delegate a task to a GitLab Duo Agent Platform agent/flow",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-10",
   "name": "Get AI code suggestions while typing",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-11",
   "name": "Add a label to an issue",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-12",
   "name": "Add a milestone to a project",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-13",
   "name": "Group issues into an epic",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-14",
   "name": "Create an issue board (Kanban)",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-15",
   "name": "Log time spent on an issue",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-16",
   "name": "Search across projects and code",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-17",
   "name": "Semantic code search",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-18",
   "name": "Request approval on a merge request",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-19",
   "name": "Create a wiki page",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-20",
   "name": "Publish a static site with GitLab Pages",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-21",
   "name": "Publish a package to the Package/Container Registry",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-22",
   "name": "Export project data",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-23",
   "name": "Import a repository from another tool",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-24",
   "name": "Register a webhook",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-25",
   "name": "View DORA / analytics dashboards",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-26",
   "name": "Manage feature flags",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-27",
   "name": "Manage incidents",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-28",
   "name": "Manage Kubernetes cluster agents",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-29",
   "name": "Invite a member to a project or group",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-30",
   "name": "Set a member's role/permissions",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-31",
   "name": "Create an API personal access token",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-32",
   "name": "Configure SAML SSO",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-33",
   "name": "Enable two-factor authentication",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-34",
   "name": "Read the audit log",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-35",
   "name": "Change the subscription plan",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-36",
   "name": "Query GitLab Orbit knowledge graph",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "none"
   }
  },
  {
   "id": "cap-37",
   "name": "Build a workspace in the browser (Web IDE / Remote Development)",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  }
 ],
 "category_place": {
  "category": "project-management",
  "products": 15,
  "higher": 4,
  "same_level": 10,
  "as_of": "2026-10-22",
  "stop": "signup",
  "rivals_by": "stop",
  "rivals": [
   "asana",
   "basecamp",
   "clickup",
   "github",
   "atlassian",
   "linear",
   "smartsheet",
   "teamwork",
   "trello",
   "wrike"
  ]
 },
 "page": "https://agentdrives.com/tools/gitlab?via=api"
}