{
 "$schema": "https://agentdrives.com/schemas/tool.schema.json",
 "id": "prd_01m57vgth4pmstmxcyh57mxtm7",
 "ids": {
  "org": "org_01m57vgth42scp6n62c4ryxg6d",
  "surfaces": {
   "web": "srf_01m634770m89jbnc6sq833m0cd",
   "api": "srf_01m634770mcxgzx035ra8fkysb",
   "mcp": "srf_01m634770mtkcmktvwayb5q643",
   "cli": "srf_01m634770m7b0t3s751w1869yp"
  },
  "slugs": [
   "gitea"
  ],
  "domain": "gitea.com",
  "wikidata": "Q28714270"
 },
 "slug": "gitea",
 "name": "Gitea",
 "url": "https://gitea.com",
 "domain": "gitea.com",
 "category": "source-control",
 "category_name": "Source control",
 "tested_at": "2026-10-29",
 "run": "20261028T233021Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261028T060134Z",
   "date": "2026-10-28",
   "level": 1,
   "engine": {
    "model": "claude-opus-5-5",
    "driver": 5,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip",
    "version": "2026.10.28",
    "commit": "3440e5c62c95160a8125825a987e36d623edd38d",
    "prompts": {
     "version": "2026.10.28",
     "commit": "f3a993449822f9f55b1a57fc1810bbe6f82cce0a"
    },
    "rules": {
     "version": "2026.10.28",
     "commit": "3440e5c62c95160a8125825a987e36d623edd38d"
    }
   },
   "stop": "signup",
   "paid": false,
   "agent_paid": null
  },
  {
   "run": "20261028T233021Z",
   "date": "2026-10-29",
   "level": 1,
   "engine": {
    "model": "claude-opus-5-5",
    "driver": 5,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip",
    "version": "2026.10.28",
    "commit": "99ae3421cf12ceb022f11490ba63dc427fd69aa3",
    "prompts": {
     "version": "2026.10.28",
     "commit": "99ae3421cf12ceb022f11490ba63dc427fd69aa3"
    },
    "rules": {
     "version": "2026.10.28",
     "commit": "3440e5c62c95160a8125825a987e36d623edd38d"
    }
   },
   "stop": "signup",
   "paid": false,
   "agent_paid": null
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": 4,
 "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",
   "how": "robots"
  },
  {
   "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: an OpenAPI and an MCP server",
   "have": [
    "openapi",
    "mcp"
   ],
   "docs": "gaps"
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "how": "robots",
   "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": 80,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 80,
  "security": "private",
  "standards": [
   {
    "standard": "MCP discovery",
    "state": "current",
    "behind": null,
    "value": "ok"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 3,
    "value": "2.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [
  {
   "capability": "Create a code repository",
   "probe": "Bad credential: revoked token",
   "outcome": "401 {'message': 'invalid username, password or token', 'url': 'http://127.0.0.1:3917/api/swagger'}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a code repository",
   "probe": "Missing required field 'name'",
   "outcome": "422 Content-Type: application/json;charset=utf-8 {'message': '[Name]: Required', 'url': 'http://127.0.0.1:3917/api/swagger'}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a code repository",
   "probe": "Repeat a create (same name)",
   "outcome": "first 201, second 409 {'message': 'The repository with the same name already exists.', 'url': 'http://127.0.0.1:3917/api/swagger'}",
   "grade": "clear",
   "idempotent": "yes",
   "rate_limit": null
  },
  {
   "capability": "Create a task or issue",
   "probe": "Repeat an issue create (no idempotency key)",
   "outcome": "first 201 #9, second 201 #10",
   "grade": "silent",
   "idempotent": "no",
   "rate_limit": null
  },
  {
   "capability": "Create a task or issue",
   "probe": "Well-formed id that does not exist",
   "outcome": "404 {'message': 'not found', 'url': 'http://127.0.0.1:3917/api/swagger'}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Open and merge a pull request",
   "probe": "PR from a branch that does not exist",
   "outcome": "404 {'message': 'ref \"no-such-branch\" does not exist', 'url': 'http://127.0.0.1:3917/api/swagger'}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Open and merge a pull request",
   "probe": "Merge with a bad enum value",
   "outcome": "422 {'message': '[Do]: In', 'url': 'http://127.0.0.1:3917/api/swagger'}",
   "grade": "vague",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Open and merge a pull request",
   "probe": "Merge twice",
   "outcome": "first 200, second 405 {'message': 'The PR is already merged', 'url': 'http://127.0.0.1:3917/api/swagger'}",
   "grade": "clear",
   "idempotent": "yes",
   "rate_limit": null
  },
  {
   "capability": "Push commits to a repository",
   "probe": "git push with a wrong token",
   "outcome": "rc 128: remote: Failed to authenticate user\nfatal: Authentication failed for 'http://127.0.0.1:3917/agentdrives/work.git/'",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Push commits to a repository",
   "probe": "git push to a repo that does not exist",
   "outcome": "rc 128: remote: Push to create is not enabled for users.\nfatal: unable to access 'http://127.0.0.1:3917/agentdrives/no-such-repo.git/': The requested URL returned error: 403",
   "grade": "vague",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Review a pull request",
   "probe": "Review with a bad event value",
   "outcome": "200 {'id': 8, 'user': {'id': 1, 'login': 'agentdrives', 'type': 'User', 'login_name': '', 'source_id': 0, 'full_name': '', 'email': 'the agent's inbox', 'avatar_url': 'http://127.0.0.1:3917/av",
   "grade": "silent",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Review a pull request",
   "probe": "Review on a PR that does not exist",
   "outcome": "404 {'message': 'pull request does not exist [id: 0, issue_id: 0, head_repo_id: 0, base_repo_id: 4, head_branch: , base_branch: ]', 'url': 'http://127.0.0",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Run a CI/CD workflow",
   "probe": "Dispatch a workflow that does not exist",
   "outcome": "404 {'message': 'workflow \"nope.yml\" doesn\\'t exist', 'url': 'http://127.0.0.1:3917/api/swagger'}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Run a CI/CD workflow",
   "probe": "Dispatch on a ref that does not exist",
   "outcome": "404 {'message': 'ref \"no-branch\" doesn\\'t exist', 'url': 'http://127.0.0.1:3917/api/swagger'}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Publish a package",
   "probe": "Upload the same package file twice",
   "outcome": "first 201, second 409 package file already exists",
   "grade": "clear",
   "idempotent": "yes",
   "rate_limit": null
  },
  {
   "capability": "Create a code repository",
   "probe": "Burst of 20 GETs on one repo",
   "outcome": "statuses [200]; rate-limit headers: none",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": "none-seen"
  },
  {
   "capability": "Create a code repository",
   "probe": "Interrupted multi-step create: auto_init with a license template that does not exist",
   "outcome": "500 {'message': 'initRepository: prepareRepoCommit: getLicense[No-Such-License]: GetLicense[No-Such-License]: file does not exist', 'url': 'http://127.0.0; then GET /repos/agentdrives/partial-2155 -> ",
   "grade": "vague",
   "idempotent": null,
   "rate_limit": null
  }
 ],
 "surface_audit": null,
 "coverage_core": null,
 "coverage_own": null,
 "after_wall": null,
 "coverage_source": "reported",
 "driver": {
  "version": 5,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false
 },
 "methodology": 42,
 "rules_date": "2026-10-30",
 "engine": {
  "model": "claude-opus-5-5",
  "driver": 5,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "skip",
  "version": "2026.10.28",
  "commit": "99ae3421cf12ceb022f11490ba63dc427fd69aa3",
  "prompts": {
   "version": "2026.10.28",
   "commit": "99ae3421cf12ceb022f11490ba63dc427fd69aa3"
  },
  "rules": {
   "version": "2026.10.28",
   "commit": "3440e5c62c95160a8125825a987e36d623edd38d"
  }
 },
 "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": "Cloudflare Turnstile (Gitea Cloud sign-up)",
  "visible": true,
  "type": "network",
  "human": null,
  "how": "Let verified bots and signed agents past the check on sign-up: in Cloudflare, add a WAF custom rule that skips the bot challenge on your sign-up paths for verified bots and for signed agents (rule field cf.bot_management.signed_agent; since 1 July 2026 signed agents count as verified bots), and render Turnstile only when the request is not from a verified agent.",
  "recognises_us": true,
  "vendor_id": "cloudflare",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "robots"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-29"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "verified",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "docs.gitea.com read with plain HTTP: API reference with a page per operation, CLI, runner and Enterprise sections. No llms.txt, no Markdown versions."
  },
  "signup": {
   "status": "blocked",
   "cause": "robots_named",
   "note": "robots.txt disallows sign-up for AI agents (/user/sign_up): gitea.com robots.txt has 'User-agent: ChatGPT-User' 'Disallow: /'. Gitea Cloud's sign-up (cloud.gitea.com) has a visible Cloudflare Turnstile."
  },
  "verify": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "first_call": {
   "status": "",
   "route": "account",
   "note": "Not reached with an account; the public API is also disallowed for all user agents (robots.txt 'Disallow: /api/*').",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [],
   "rail_ids": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "none",
   "route": "portal",
   "checkout": {
    "reached": "no",
    "processor": "none",
    "captcha": "none",
    "three_ds": "not_seen",
    "card_form": false,
    "phone_field": "none",
    "wallets": [],
    "rail_offer": "none",
    "price": "19.00",
    "currency": "USD",
    "period": "month",
    "plan": "Enterprise",
    "last_button": ""
   },
   "person": "none",
   "ours": "robots",
   "note": "No 402, x402 or MPP was found anywhere, and no payment went through. Enterprise is $19 per user per month ($9.5 shown as the discounted figure) with a 1-year commitment, bought at the customers portal. That portal and its 30-day trial sign in only through gitea.com OAuth, whose authorize page robots.txt disallows for our agent, so the agent did not open it. The checkout and its payment processor were not seen.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "X5",
   "note": "Nothing was started. docs.gitea.com/enterprise: 'When your license is about to expire, you can choose to renew it'; after a trial Gitea Enterprise 'will function the same as the open-source Gitea project'.",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No gitea.com or Gitea Cloud account was made, so nothing to delete.",
   "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": "local",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "in",
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 3,
   "browser": false
  },
  {
   "route": "email_password",
   "offered": "seen",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "robots",
    "owner": "product"
   },
   "person": "none",
   "brings": "inbox",
   "fresh": true,
   "minutes": 0.3,
   "browser": null
  },
  {
   "route": "email_password",
   "offered": "seen",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "challenge",
    "owner": "product"
   },
   "person": "each",
   "brings": "inbox",
   "fresh": true,
   "minutes": 1,
   "browser": null
  },
  {
   "route": "sso_github",
   "offered": "seen",
   "tried": false,
   "not_tried": "policy",
   "result": null,
   "wall": null,
   "person": "once",
   "brings": "github_account",
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "sso_google",
   "offered": "seen",
   "tried": false,
   "not_tried": "policy",
   "result": null,
   "wall": null,
   "person": "once",
   "brings": "google_account",
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "enterprise",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "robots",
    "owner": "product"
   },
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 0.5,
   "browser": null
  }
 ],
 "checkout": {
  "reached": "no",
  "rail_offer": "none",
  "period": "month",
  "price": "19.00",
  "currency": "USD",
  "plan": "Enterprise"
 },
 "docs": {
  "at": "2026-10-28",
  "read": 600,
  "listed": 701,
  "sampled": true,
  "overall": "gaps",
  "getting_started": "found",
  "auth": "found",
  "errors": "found",
  "examples": "good",
  "freshness": "unknown",
  "newest": null,
  "core_pages": "7 of 10",
  "capabilities": "gaps",
  "label": "Some gaps"
 },
 "claims": null,
 "pay_options": {
  "checked": "2026-10-28",
  "source": "probe",
  "options": [],
  "agentic": [],
  "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."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "mcp": "official",
  "llms_txt": false,
  "webhooks": true
 },
 "urls": {
  "docs": "https://docs.gitea.com/",
  "llms_txt": null,
  "mcp": null
 },
 "surface_notes": {
  "api": "REST, 537 operations in Gitea 28.2.0",
  "openapi": "Swagger 2.0, served by each instance at /swagger.v1.json",
  "mcp": "official gitea-mcp 1.11.0, 61 tools, run with your own token",
  "cli": "official gt 0.2.0, about 200 commands"
 },
 "surface_sizes": [
  {
   "kind": "api",
   "listed": 537,
   "tested": 526
  },
  {
   "kind": "mcp",
   "listed": 61,
   "tested": 61
  },
  {
   "kind": "cli",
   "listed": 216,
   "tested": 213
  }
 ],
 "can_do": [
  "Stand up its own Gitea from the official binary and get an admin account and API token without a browser",
  "Create, edit and delete repositories through the API, MCP or the gt CLI",
  "Push commits over HTTP with a token and read them back",
  "Open, review and merge pull requests through the API, MCP or gt",
  "Create, label, comment on and close issues",
  "Dispatch a Gitea Actions workflow and read its job log",
  "Publish, link and delete packages in the generic registry",
  "Read the audit log in site administration on a self-hosted 28.x instance"
 ],
 "cannot_do": [
  {
   "what": "Make an account on gitea.com",
   "why": "robots.txt disallows the whole site for AI agents acting for a user (ChatGPT-User), including /user/sign_up"
  },
  {
   "what": "Call the gitea.com API without an account",
   "why": "robots.txt disallows /api/* for all user agents"
  },
  {
   "what": "Sign up for Gitea Cloud",
   "why": "Visible Cloudflare Turnstile on the sign-up form"
  },
  {
   "what": "Start the Enterprise trial or buy a licence",
   "why": "The customers portal signs in only with a gitea.com account"
  },
  {
   "what": "Configure SAML, dependency scanning or an IP allowlist",
   "why": "Gitea Enterprise only"
  }
 ],
 "blockers": [
  "robots.txt on gitea.com disallows everything for ChatGPT-User, so our agent couldn't sign up, sign in or call the API",
  "Gitea Cloud sign-up has a visible Cloudflare Turnstile",
  "The Enterprise portal accepts only gitea.com sign-in"
 ],
 "tips_for_agents": [
  "On gitea.com you cannot sign up or call the API as an AI agent; drive a self-hosted Gitea or one whose owner gives you a token.",
  "Self-host in minutes: download the binary from dl.gitea.com, set INSTALL_LOCK=true and sqlite3 in app.ini, run 'gitea migrate', then 'gitea admin user create --admin'.",
  "Get a token without a browser with POST /api/v1/users/{name}/tokens using basic auth; pick scopes, a read token gets a 403 naming the missing scope.",
  "Run gitea-mcp (docker.gitea.com/gitea-mcp-server) with -t http and your token; server/discover answers 2026-07-28.",
  "In gt, 'gt pr merge' and other destructive commands need --yes when not on a terminal.",
  "Approving your own pull request is refused (422); use a second account or the admin Sudo header.",
  "An admin cannot delete itself; make another admin first, then 'gitea admin user delete --purge'."
 ],
 "selfhost": {
  "install": {
   "status": "headless",
   "minutes": 3,
   "note": "Official binary gitea-28.2.0-linux-amd64 from dl.gitea.com (sha256 checked), app.ini with INSTALL_LOCK=true and sqlite3, 'gitea migrate', 'gitea web' on 127.0.0.1:3917; gitea-runner 5.2.0 registered with --no-interactive for Actions; gitea-mcp 1.11.0 from docker.gitea.com/gitea-mcp-server; gt 0.2.0 from dl.gitea.com/gitea-cli. All headless, no Docker."
  },
  "ladder": {
   "signup": {
    "status": "headless",
    "note": "gitea admin user create --admin (documented CLI)."
   },
   "verify": {
    "status": "n/a",
    "note": "No mail confirmation on a fresh instance."
   },
   "credentials": {
    "status": "headless",
    "note": "POST /api/v1/users/{name}/tokens with basic auth; scoped token made, used (write refused 403 with the missing scope named) and revoked."
   },
   "first_call": {
    "status": "headless",
    "note": "GET /api/v1/user 200."
   },
   "first_action": {
    "status": "headless",
    "note": "POST /api/v1/user/repos 201, read back 200."
   },
   "delete": {
    "status": "headless",
    "note": "Browser delete refused for an admin and the API refuses self-delete; 'gitea admin user delete' refuses the last admin; after a second admin the CLI delete worked and the token answered 401.",
    "left": "deleted"
   },
   "pay": {
    "status": "n/a",
    "note": "Self-hosted: nothing to pay or cancel."
   },
   "cancel": {
    "status": "n/a",
    "note": "Self-hosted: nothing to pay or cancel."
   }
  },
  "coverage_core": 100,
  "coverage_source": "computed"
 },
 "edge_case": "none",
 "summary": "Our agent couldn't get into gitea.com: its robots.txt disallows the whole site for ChatGPT-User, an AI agent that acts for a user, so sign-up and sign-in stay closed, and it also disallows the public API for all user agents. Gitea Cloud's own sign-up has a visible Cloudflare Turnstile. Separately, the open source edition was installed and run on our own machine with no browser (about 3 minutes), and the agent did all 8 free core tasks there through the API, the official MCP server and the gt CLI; that is scored apart from gitea.com. SAML, dependency scanning and the IP allowlist need Gitea Enterprise.",
 "wall": "robots.txt bars AI agents from gitea.com sign-up",
 "plan_scope": "",
 "robots_stop": "signup",
 "robots": {
  "rule": "named",
  "step": "signup",
  "seen": "2026-10-28",
  "held": false
 },
 "terms": null,
 "terms_read": null,
 "email_gate": null,
 "plain": {
  "summary": "Gitea is a code hosting service. An AI agent could not sign up on the hosted gitea.com, because the site's robots.txt asks AI agents to stay out. The agent did run the free open source version on its own machine and used it fully.",
  "can_do": [
   "Install the open source Gitea and make an admin account and token without a browser",
   "Create repositories, push commits, and open, review and merge pull requests on its own copy",
   "Create issues, run a workflow and read its log, and publish a package on its own copy",
   "Use the official MCP server and command line tool for the same tasks"
  ],
  "cannot_do": [
   {
    "what": "Make an account on gitea.com",
    "why": "robots.txt tells AI agents acting for a user to stay out"
   },
   {
    "what": "Call the gitea.com API",
    "why": "robots.txt disallows the API for all automated visitors"
   },
   {
    "what": "Sign up for Gitea Cloud",
    "why": "The sign-up form has a visible Cloudflare check for humans"
   },
   {
    "what": "Start the Enterprise trial or buy a licence",
    "why": "The customer portal signs in only through gitea.com, which is closed to agents"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Configure SAML SSO",
   "plan": "Enterprise",
   "evidence": "Open-source 28.2.0 authentication types: LDAP (via BindDN), LDAP (simple auth), SMTP, OAuth2, SPNEGO with SSPI; SAML is in docs.gitea.com/enterprise/features/saml-auth/"
  },
  {
   "capability": "Scan code for vulnerabilities",
   "plan": "Enterprise",
   "evidence": "docs.gitea.com/enterprise/features/dependency-scan/: 'One of the key features of Gitea Enterprise is dependency scanning.'"
  },
  {
   "capability": "Restrict access by IP address",
   "plan": "Enterprise",
   "evidence": "docs.gitea.com/enterprise/features/ip-allowlist/"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "capability": "Create a code repository",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/user/repos",
    "mcp": null,
    "cli": null,
    "ui": "+ > New Repository"
   },
   "check": "GET /api/v1/repos/{owner}/{repo} returns the created repository",
   "capability_id": "cap_xcgt50hx",
   "unmapped": null,
   "source": "https://docs.gitea.com/ ('Code Hosting: Gitea supports creating and managing repositories...')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-02",
   "capability": "Push commits to a repository",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "git push over HTTP(S)/SSH",
    "mcp": null,
    "cli": "git push",
    "ui": "Web code editor commit"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/commits shows the new commit",
   "capability_id": "cap_dzrmp5j9",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#code-management ('Web code editor', 'Commit graph')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-03",
   "capability": "Open and merge a pull request",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/{owner}/{repo}/pulls; POST /api/v1/repos/{owner}/{repo}/pulls/{index}/merge",
    "mcp": null,
    "cli": null,
    "ui": "Repository > Pull Requests > New Pull Request"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/pulls/{index} shows state merged",
   "capability_id": "cap_p32gmnqr",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#pullmerge-requests ('Pull/Merge requests', 'Squash merging', 'Rebase merging')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-04",
   "capability": "Review a pull request",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/{owner}/{repo}/pulls/{index}/reviews",
    "mcp": "pull_request_review_write",
    "cli": null,
    "ui": "Pull Request > Files changed > Review"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/pulls/{index}/reviews lists the submitted review",
   "capability_id": "cap_gbrba2xt",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#pullmerge-requests ('Pull/Merge request inline comments', 'Pull/Merge request approval'); https://gitea.com/gitea/gitea-mcp ('pull_request_review_write: Create, submit, delete, dismiss, reply to, or resolve PR review comments')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-05",
   "capability": "Create a task or issue",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/{owner}/{repo}/issues",
    "mcp": "search_issues",
    "cli": null,
    "ui": "Repository > Issues > New Issue"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/issues/{index} returns the created issue",
   "capability_id": "cap_kzejkm30",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#issue-tracker ('Issue tracker', 'Issue templates'); https://gitea.com/gitea/gitea-mcp ('search_issues: Search issues and pull requests across repositories')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-06",
   "capability": "Run a CI/CD workflow",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches",
    "mcp": "actions_run_write",
    "cli": null,
    "ui": "Repository > Actions"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/actions/tasks shows the dispatched run",
   "capability_id": "cap_r6y9w5sx",
   "unmapped": null,
   "source": "https://docs.gitea.com/ ('CI/CD: Gitea Actions supports CI/CD functionality, compatible with GitHub Actions'); https://gitea.com/gitea/gitea-mcp ('actions_run_write: Dispatch, cancel, rerun, approve, or enable/disable workflows and jobs')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-07",
   "capability": "Publish a package",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PUT /api/packages/{owner}/{type}/{name}/{version} (per-registry endpoints)",
    "mcp": null,
    "cli": null,
    "ui": "Organization/User > Packages"
   },
   "check": "GET /api/v1/packages/{owner} lists the published package",
   "capability_id": "cap_78eevzzc",
   "unmapped": null,
   "source": "https://docs.gitea.com/ ('Artifact Repository: Gitea supports over 20 different types of public or private software package management, including Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, NuGet...')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-08",
   "capability": "Configure SAML SSO",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site Administration > Authentication Sources"
   },
   "check": "Admin panel shows the configured SAML 2.0 authentication source active",
   "capability_id": "cap_pz4pecfg",
   "unmapped": null,
   "source": "https://about.gitea.com/products/gitea-enterprise/ ('SAML Authentication: With Gitea Enterprise, you can configure Gitea as a SAML 2.0 Service Provider'); https://about.gitea.com/ (pricing, Enterprise plan lists 'SAML SSO Integration')",
   "result": "plan_gated",
   "via": "browser"
  },
  {
   "id": "cap-09",
   "capability": "Read the audit log",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site Administration > Audit Log"
   },
   "check": "Admin audit log view lists the recent recorded activity",
   "capability_id": "cap_xgs80797",
   "unmapped": null,
   "source": "https://about.gitea.com/products/gitea-enterprise/ ('Audit Log: Gitea Enterprise provides a comprehensive Audit Log feature, giving you an in-depth history of activities'); https://about.gitea.com/ (pricing, Enterprise plan lists 'Audit Logs')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-10",
   "capability": "Scan code for vulnerabilities",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Repository > Security/Dependencies"
   },
   "check": "Repository security tab lists detected dependency vulnerabilities",
   "capability_id": "cap_v0b4bqdj",
   "unmapped": null,
   "source": "https://about.gitea.com/products/gitea-enterprise/",
   "result": "plan_gated",
   "via": null
  },
  {
   "id": "cap-11",
   "capability": "Publish a release",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/{owner}/{repo}/releases",
    "mcp": null,
    "cli": null,
    "ui": "Repository > Releases > New Release"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/releases/{id} returns the published release",
   "capability_id": "cap_4wthbqyz",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#general-features (repository tags/releases support implied by 'Extensive API', confirmed in API usage docs); https://docs.gitea.com/development/api-usage",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-12",
   "capability": "Read logs",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v1/repos/{owner}/{repo}/actions/tasks/{task_id}/logs",
    "mcp": "actions_run_read",
    "cli": null,
    "ui": "Repository > Actions > job log view"
   },
   "check": "Actions run detail page displays the step log output",
   "capability_id": "cap_dacsttk8",
   "unmapped": null,
   "source": "https://gitea.com/gitea/gitea-mcp ('actions_run_read: Read workflows, runs, jobs, logs, and artifacts')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-13",
   "capability": "Register a webhook",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/{owner}/{repo}/hooks",
    "mcp": null,
    "cli": null,
    "ui": "Repository > Settings > Webhooks"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/hooks lists the registered webhook",
   "capability_id": "cap_977hxacb",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#3rd-party-integrations ('Webhooks ✓')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-14",
   "capability": "Create a project or board",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/{owner}/{repo}/projects",
    "mcp": "project_write",
    "cli": null,
    "ui": "Repository/Organization > Projects > New Project"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/projects lists the created board",
   "capability_id": "cap_pe5me100",
   "unmapped": null,
   "source": "https://docs.gitea.com/ ('Project Management: Gitea tracks project requirements, features, and bugs through columns and issues'); https://gitea.com/gitea/gitea-mcp ('project_write: Manage repository, organization, and user projects; requires Gitea v28 or newer')",
   "result": "failed",
   "via": "api"
  },
  {
   "id": "cap-15",
   "capability": "Add a label to a task",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/{owner}/{repo}/issues/{index}/labels",
    "mcp": "label_write",
    "cli": null,
    "ui": "Issue/PR sidebar > Labels"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/issues/{index}/labels shows the applied label",
   "capability_id": "cap_7h83px69",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#issue-tracker ('Labels ✓'); https://gitea.com/gitea/gitea-mcp ('label_write: Create, update, or delete labels')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-16",
   "capability": "Create a doc or wiki page",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/{owner}/{repo}/wiki/page",
    "mcp": null,
    "cli": null,
    "ui": "Repository > Wiki > New Page"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/wiki/page/{pageName} returns the created wiki page",
   "capability_id": "cap_yvyjytn1",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#general-features ('Repo-specific wiki (as a repo itself) ✓')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-17",
   "capability": "Create a workspace",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/orgs",
    "mcp": "create_organization",
    "cli": null,
    "ui": "+ > New Organization"
   },
   "check": "GET /api/v1/orgs/{org} returns the created organization",
   "capability_id": "cap_vk1kvzkm",
   "unmapped": null,
   "source": "https://gitea.com/gitea/gitea-mcp ('create_organization: Create an organization')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-18",
   "capability": "Invite a member",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /api/v1/orgs/{org}/members/{username}",
    "mcp": null,
    "cli": null,
    "ui": "Organization > Settings > Members"
   },
   "check": "GET /api/v1/orgs/{org}/members lists the invited user",
   "capability_id": "cap_3w8sjh12",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#general-features ('Extensive API ✓') and organization membership management described in https://docs.gitea.com/",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-19",
   "capability": "Import data from a file or another tool",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/repos/migrate",
    "mcp": null,
    "cli": null,
    "ui": "+ > New Migration"
   },
   "check": "GET /api/v1/repos/{owner}/{repo} shows the migrated repository with mirror status",
   "capability_id": "cap_a8damn1w",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#code-management ('Migrating repos from other services ✓')",
   "result": "failed",
   "via": "api"
  },
  {
   "id": "cap-20",
   "capability": "Search the account's content",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v1/repos/search",
    "mcp": "search_repos",
    "cli": null,
    "ui": "top navigation search bar"
   },
   "check": "Search results page lists matching repositories/issues",
   "capability_id": "cap_j1x1a2f4",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#code-management ('Global code search ✓'); https://gitea.com/gitea/gitea-mcp ('search_repos: Search repositories')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-21",
   "capability": "Restrict access by IP address",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site Administration > Security > IP Allowlist"
   },
   "check": "Admin security settings show the configured IP allowlist entry",
   "capability_id": "cap_wrzp7nnm",
   "unmapped": null,
   "source": "https://about.gitea.com/products/gitea-enterprise/ ('Advanced Security Features: Gitea Enterprise introduces advanced security features like IP Allowlist')",
   "result": "plan_gated",
   "via": null
  },
  {
   "id": "cap-22",
   "capability": "Enable two-factor authentication",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/user/settings/2fa",
    "mcp": null,
    "cli": null,
    "ui": "User Settings > Security > Two-Factor Authentication"
   },
   "check": "User security settings show 2FA enabled",
   "capability_id": "cap_9qz744jy",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#general-features ('WebAuthn (2FA) ✓'); mandatory 2FA enforcement noted at https://about.gitea.com/products/gitea-enterprise/ ('strengthens account security with mandatory two-factor authentication')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-23",
   "capability": "Set a member's role or permissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "PUT /api/v1/repos/{owner}/{repo}/collaborators/{collaborator}",
    "mcp": null,
    "cli": null,
    "ui": "Repository/Organization > Settings > Collaborators/Teams"
   },
   "check": "GET /api/v1/repos/{owner}/{repo}/collaborators/{collaborator}/permission shows the updated permission",
   "capability_id": "cap_bs3hvrpm",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#code-management ('Granular user roles (Code, Issues, Wiki, …) ✓')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-24",
   "capability": "Connect a third-party integration",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Repository > Settings > Webhooks (Slack/Discord/MS Teams/Lark presets)"
   },
   "check": "Repository settings list the connected chat-tool webhook",
   "capability_id": "cap_x4n6bnwy",
   "unmapped": null,
   "source": "https://about.gitea.com/ ('Chat Tool Integration: Sync seamlessly with tools like Slack, Discord, MS Teams, Lark, and more')",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-25",
   "capability": "Register an OAuth app",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/user/applications/oauth2",
    "mcp": null,
    "cli": null,
    "ui": "User Settings > Applications > Manage OAuth2 Applications"
   },
   "check": "GET /api/v1/user/applications/oauth2 lists the registered OAuth2 application",
   "capability_id": "cap_rw58zb2y",
   "unmapped": null,
   "source": "https://docs.gitea.com/installation/comparison#3rd-party-integrations ('Act as OAuth 2.0 provider ✓')",
   "result": "not_tried",
   "via": null
  }
 ],
 "stale": false,
 "unreachable_since": null,
 "not_driven_since": null,
 "icon": "/logos/gitea.png",
 "agent_kinds": {
  "browser": {
   "who": "An assistant in a browser",
   "passed": [],
   "stop": "signup",
   "why": "its robots.txt disallows AI agents there",
   "tone": "wall",
   "text": "Signing up needs a person: its robots.txt disallows AI agents there."
  },
  "direct": {
   "who": "An agent talking to it directly",
   "passed": [],
   "stop": "signup",
   "why": "its robots.txt disallows AI agents there",
   "tone": "wall",
   "text": "Signing up needs a person: its robots.txt disallows AI agents there."
  }
 },
 "sdk": {
  "packages": [],
  "read_at": "2026-11-01T21:08:12Z"
 },
 "surface_reach": {
  "surfaces": {
   "cli": true
  },
  "read_at": "2026-10-31T07:49:07Z"
 },
 "connect": {
  "cli": {
   "install": "brew install gitea",
   "package": "gitea",
   "ecosystem": "homebrew",
   "source": "https://docs.gitea.com/installation/install-from-package/",
   "state": "documented"
  },
  "signup": {
   "url": "https://gitea.com/join",
   "state": "documented"
  },
  "docs": {
   "url": "https://docs.gitea.com/",
   "state": "tested"
  }
 },
 "surface_sources": {
  "docs": "https://docs.gitea.com/",
  "cli": "https://docs.gitea.com/installation/install-from-package/",
  "api": "https://docs.gitea.com/api/operations/list-admin-workflow-jobs/",
  "mcp": "https://gitea.com/gitea/gitea-mcp",
  "openapi": "https://docs.gitea.com/openapi3-28.json"
 },
 "copilot_connector": null,
 "stripe_directory": null,
 "in_stripe_directory": null,
 "stripe_projects": null,
 "pay_rails": [],
 "stop_evidence": {
  "at": "signup",
  "date": "2026-10-29",
  "line": "robots.txt disallows sign-up for AI agents (/user/sign_up): gitea.com robots.txt has 'User-agent: ChatGPT-User' 'Disallow: /'. Gitea Cloud's sign-up (cloud.gitea.com) has a visible Cloudflare Turnstile."
 },
 "wall_vendor": {
  "vendor": "Cloudflare",
  "id": "cloudflare",
  "kind": "bot check",
  "at": "signup"
 },
 "mcp_sign_in": null,
 "safety_issues": 2,
 "fix_counts": {
  "small": 7,
  "medium": 3,
  "large": 0,
  "total": 10
 },
 "evidence_sha256": "acc9b182dca6fa9b82c5af84b8ca523332ad9f170b5f0538eef5c87e9d4e4df8",
 "first_seen": "2026-10-28",
 "license": {
  "name": "CC BY 4.0",
  "url": "https://creativecommons.org/licenses/by/4.0/"
 },
 "correction": {
  "status": "none",
  "open": 0,
  "since": null,
  "reply_by": null
 },
 "attribution": {
  "vendor": "Cloudflare Turnstile",
  "at": "signup",
  "state": "seen",
  "stopped": false,
  "line": null
 },
 "confirmation": {
  "state": "awaiting",
  "drives": 2,
  "agree": 2,
  "review": null,
  "text": "2 drives on one day, awaiting confirmation"
 },
 "stop_shot": null,
 "stop_shot_hash": null,
 "attempts_count": 158,
 "detail": {
  "public": false,
  "in": [
   "report",
   "api"
  ],
  "since": "2026-10-17"
 },
 "what_it_does": "Gitea is a code hosting service.",
 "kind": "product",
 "rules_version": "rules-2026-10-30-42",
 "rules_url": "https://agentdrives.com/method/changelog#rules-2026-10-30-42",
 "category_median": null,
 "peers": {
  "DOCS-08": {
   "basis": "all",
   "n": 142,
   "below": 0,
   "above": 54,
   "percentile": 31
  },
  "DOCS-10": {
   "basis": "all",
   "n": 142,
   "below": 0,
   "above": 103,
   "percentile": 14
  },
  "DOCS-11": {
   "basis": "all",
   "n": 142,
   "below": 10,
   "above": 44,
   "percentile": 38
  },
  "ERR-02": {
   "basis": "all",
   "n": 105,
   "below": 0,
   "above": 65,
   "percentile": 19
  },
  "ERR-03": {
   "basis": "all",
   "n": 104,
   "below": 81,
   "above": 0,
   "percentile": 89
  },
  "ERR-04": {
   "basis": "all",
   "n": 36,
   "below": 0,
   "above": 12,
   "percentile": 33
  },
  "ERR-07": {
   "basis": "all",
   "n": 104,
   "below": 0,
   "above": 70,
   "percentile": 16
  },
  "IN-11": {
   "basis": "category",
   "n": 5,
   "below": 0,
   "above": 1
  },
  "IN-12": {
   "basis": "category",
   "n": 5,
   "below": 2,
   "above": 0
  },
  "LEAVE-03": {
   "basis": "all",
   "n": 145,
   "below": 56,
   "above": 28,
   "percentile": 60
  },
  "LIM-02": {
   "basis": "all",
   "n": 48,
   "below": 0,
   "above": 21,
   "percentile": 28
  },
  "PROTO-02": {
   "basis": "category",
   "n": 5,
   "below": 0,
   "above": 0
  }
 },
 "probe": {
  "checked": "2026-11-01",
  "status": "ok",
  "sign_up_page": "not-found",
  "wall": "none",
  "llms_txt": false,
  "mcp": "none",
  "openapi": false,
  "payment_402": null,
  "payment_rails": [],
  "files": {
   "openapi": {
    "url": null,
    "found": false
   },
   "llms_txt": {
    "url": null,
    "found": false
   },
   "llms_full": {
    "url": null,
    "found": false
   }
  }
 },
 "probe_history": [
  {
   "checked": "2026-11-01",
   "status": "ok",
   "sign_up_page": "not-found",
   "wall": "none",
   "llms_txt": false,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-31",
   "status": "ok",
   "sign_up_page": "not-found",
   "wall": "none",
   "llms_txt": false,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-30",
   "status": "ok",
   "sign_up_page": "not-found",
   "wall": "none",
   "llms_txt": false,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  }
 ],
 "surface_changes": [],
 "agent_reports": null,
 "verdict": "Gitea sits at L1 · Needs a person: our agent did not get in on its own. It stopped at sign-up, where the gitea.com robots.txt disallows sign-up for AI agents and Gitea Cloud's sign-up shows a visible Cloudflare Turnstile. Verification, the key, the API call and work were not reached, and robots.txt disallows the public API for all user agents. The open source edition, installed and run by our agent without a browser, did the free core tasks through the API, the official MCP server and the gt CLI; that is scored apart from gitea.com. No payment went through, and the Enterprise customers portal signs in only through gitea.com.",
 "changes": {
  "source": "store",
  "drives": [
   {
    "run": "20261028T060134Z",
    "date": "2026-10-28",
    "level": 1,
    "stop": "signup",
    "entry": "closed",
    "driver": 5,
    "listed": true,
    "paid": false,
    "agent_paid": null
   },
   {
    "run": "20261028T233021Z",
    "date": "2026-10-28",
    "level": 1,
    "stop": "signup",
    "entry": "closed",
    "driver": 5,
    "listed": true,
    "paid": false,
    "agent_paid": null
   }
  ],
  "events": [],
  "feed": "https://agentdrives.com/api/tools/gitea/changes.json"
 },
 "agreement": {
  "drives": 2,
  "agree": 2
 },
 "method_release": "2026-Q4.27",
 "found": {
  "agent_blockers": 3,
  "surface_issues": null
 },
 "agent_surfaces": {
  "api": {
   "state": "tested",
   "reachable": true,
   "documented": 537,
   "tested": 526,
   "source": "https://docs.gitea.com/api/operations/list-admin-workflow-jobs/"
  },
  "mcp": {
   "state": "tested",
   "reachable": true,
   "documented": 61,
   "tested": 61,
   "source": "https://gitea.com/gitea/gitea-mcp"
  },
  "cli": {
   "state": "tested",
   "reachable": true,
   "documented": 216,
   "tested": 213,
   "source": "https://docs.gitea.com/installation/install-from-package/"
  },
  "sdk": {
   "state": "unknown",
   "documented": null,
   "tested": null,
   "source": null
  },
  "docs": {
   "state": "tested",
   "documented": 701,
   "tested": 600,
   "source": "https://docs.gitea.com/"
  },
  "payment": {
   "state": "none_found",
   "documented": null,
   "tested": null,
   "source": null
  }
 },
 "issues_found": 3,
 "rank": null,
 "rank_of": 1,
 "rank_change": null,
 "rank_since": null,
 "links": {
  "category": [
   {
    "label": "Developer platform",
    "href": "https://agentdrives.com/categories/developer"
   },
   {
    "label": "Source control",
    "href": "https://agentdrives.com/categories/source-control"
   }
  ],
  "tasks": [],
  "walls": [
   {
    "label": "Bot checks",
    "href": "https://agentdrives.com/access/get-in/bot-checks",
    "note": "kept our agent out"
   },
   {
    "label": "Cloudflare bot check",
    "href": "https://agentdrives.com/vendors/cloudflare",
    "note": "the check, and every product we met it at"
   },
   {
    "label": "Let signed AI agents past your bot check",
    "href": "https://agentdrives.com/guides/let-signed-agents-past-your-bot-check",
    "note": "fix guide"
   }
  ],
  "vendors": [],
  "standards": [
   {
    "label": "MCP",
    "href": "https://agentdrives.com/standards/mcp",
    "note": "tools an agent can call"
   },
   {
    "label": "OpenAPI",
    "href": "https://agentdrives.com/standards/openapi",
    "note": "its API, described"
   }
  ],
  "steps": [
   {
    "label": "Find",
    "href": "https://agentdrives.com/access/find"
   },
   {
    "label": "Get in",
    "href": "https://agentdrives.com/access/get-in",
    "note": "stopped here"
   },
   {
    "label": "Use",
    "href": "https://agentdrives.com/access/use"
   },
   {
    "label": "Pay",
    "href": "https://agentdrives.com/access/pay"
   },
   {
    "label": "Leave",
    "href": "https://agentdrives.com/access/leave"
   }
  ],
  "rivals": [
   {
    "label": "Bitbucket",
    "href": "https://agentdrives.com/tools/bitbucket",
    "slug": "bitbucket",
    "level": 1
   },
   {
    "label": "Codeberg",
    "href": "https://agentdrives.com/tools/codeberg",
    "slug": "codeberg",
    "level": 1
   },
   {
    "label": "GitHub",
    "href": "https://agentdrives.com/tools/github",
    "slug": "github",
    "level": 1
   }
  ],
  "compare": [],
  "rail": [
   {
    "label": "Watch this product",
    "href": "https://agentdrives.com/watch"
   },
   {
    "label": "Get the data",
    "href": "https://agentdrives.com/data#plans"
   }
  ]
 },
 "capability_matrix": [
  {
   "id": "cap-01",
   "name": "Create a code repository",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-02",
   "name": "Push commits to a repository",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-03",
   "name": "Open and merge a pull request",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-04",
   "name": "Review a pull request",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-05",
   "name": "Create a task or issue",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-06",
   "name": "Run a CI/CD workflow",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-07",
   "name": "Publish a package",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-08",
   "name": "Configure SAML SSO",
   "core": true,
   "result": "plan",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "plan"
   }
  },
  {
   "id": "cap-09",
   "name": "Read the audit log",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-10",
   "name": "Scan code for vulnerabilities",
   "core": true,
   "result": "plan",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-11",
   "name": "Publish a release",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-12",
   "name": "Read logs",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-13",
   "name": "Register a webhook",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-14",
   "name": "Create a project or board",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "blocked",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-15",
   "name": "Add a label to a task",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-16",
   "name": "Create a doc or wiki page",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-17",
   "name": "Create a workspace",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-18",
   "name": "Invite a member",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-19",
   "name": "Import data from a file or another tool",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "blocked",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-20",
   "name": "Search the account's content",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-21",
   "name": "Restrict access by IP address",
   "core": false,
   "result": "plan",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-22",
   "name": "Enable two-factor authentication",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-23",
   "name": "Set a member's role or permissions",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-24",
   "name": "Connect a third-party integration",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-25",
   "name": "Register an OAuth app",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  }
 ],
 "category_place": {
  "category": "source-control",
  "products": 5,
  "higher": 1,
  "same_level": 3,
  "as_of": "2026-10-29",
  "stop": "signup",
  "rivals_by": "stop",
  "rivals": [
   "bitbucket",
   "codeberg",
   "github"
  ]
 },
 "page": "https://agentdrives.com/tools/gitea?via=api"
}