{
 "$schema": "https://agentdrives.com/schemas/tool.schema.json",
 "id": "prd_01m60jdfe62hf5vc3rs4je71ya",
 "ids": {
  "org": "org_01m60jdfe6tgkf4mqcas0rn1je",
  "surfaces": {
   "web": "srf_01m60jdfe63vp30kz52cf3a45v",
   "mcp": "srf_01m60jdfe67cbmzdzprq087bv5",
   "cli": "srf_01m60jdfe6dgjxt0f5wb0gn1gn"
  },
  "slugs": [
   "graphite"
  ],
  "domain": "graphite.dev"
 },
 "slug": "graphite",
 "name": "Graphite",
 "url": "https://graphite.dev",
 "domain": "graphite.dev",
 "category": "source-control",
 "category_name": "Source control",
 "tested_at": "2026-10-28",
 "run": "20261028T030131Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261028T030131Z",
   "date": "2026-10-28",
   "level": 2,
   "engine": {
    "model": "claude-opus-5-5",
    "driver": 5,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip",
    "version": "2026.10.27",
    "commit": "132c4d41a411d7acee60092fedfe2af74cee1ec3",
    "prompts": {
     "version": "2026.10.27",
     "commit": "845036a5a40ff8a1d6d9ed752a31210bed0cbc93"
    },
    "rules": {
     "version": "2026.10.27",
     "commit": "fe3b689b94a4f5fc8abd3c7adc454960326b9514"
    }
   },
   "stop": null,
   "paid": false,
   "agent_paid": null
  }
 ],
 "level": 2,
 "level_name": "Gets in",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 1,
  "tries": 1,
  "self_start": true
 },
 "badges": [
  "agent-can-leave"
 ],
 "not_counted": null,
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: runs locally",
   "how": "no-account"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "no",
   "text": "Work done: 12% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "No payment made: paying needs an account",
   "value": "not_tried",
   "route": "portal",
   "why": "account"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, made nothing to delete",
   "how": "no-account",
   "left": "nothing_made",
   "delete": {
    "state": "na",
    "text": "Made nothing to delete",
    "why": "No Graphite account was made."
   }
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Learn",
   "state": "yes",
   "text": "Docs it can act on: llms.txt and an MCP server",
   "have": [
    "llms_txt",
    "mcp"
   ],
   "docs": "gaps"
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: runs locally",
   "how": "no-account",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "no",
   "text": "Work done: 12% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "No payment made: paying needs an account",
   "value": "not_tried",
   "route": "portal",
   "why": "account",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, made nothing to delete",
   "how": "no-account",
   "left": "nothing_made",
   "delete": {
    "state": "na",
    "text": "Made nothing to delete",
    "why": "No Graphite account was made."
   },
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "local",
   "label": "Runs locally",
   "routes": [
    "local"
   ],
   "minutes": 6,
   "core": "1/8"
  }
 ],
 "minutes": 6,
 "next": {
  "to": 3,
  "text": "Next: do half of the core work (now 12%)"
 },
 "stop": null,
 "core": "1/8",
 "scores": {
  "coverage": 19,
  "reliability": 100,
  "resilience": 88,
  "setup": 75,
  "surface_coverage": 75,
  "docs_accuracy": 96,
  "docs_completeness": 50
 },
 "parts": {
  "holds_up": 94,
  "docs_match": 82,
  "setup": 75,
  "security": null,
  "standards": [
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   }
  ]
 },
 "reliability_method": "pass^k",
 "resilience": {
  "parts": {
   "error_legibility": 90,
   "recovery": 75,
   "idempotency": 100
  },
  "summary": {
   "error_legibility": "mixed",
   "recovery": "good",
   "idempotency": "safe",
   "rate_limits": "none-seen",
   "notes": "Local CLI errors name the fix (missing branch, frozen branch, duplicate name, conflict with gt abort/continue); gt sync says the token is \"invalid/expired\" when none was set, and gt config crashes with \"undefined is not a function\". No HTTP API to rate-limit."
  }
 },
 "stress": [
  {
   "capability": "Create a stacked branch/pull request",
   "probe": "checkout a branch that does not exist",
   "outcome": "rc=1 \"ERROR: Could not find branch no-such-branch.\"",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a stacked branch/pull request",
   "probe": "unknown flag on gt create",
   "outcome": "rc=1, prints the command help then \"Unknown arguments: bogus-flag, bogusFlag\"",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a stacked branch/pull request",
   "probe": "gt create with nothing staged",
   "outcome": "rc=0 \"No staged changes; creating a branch with no commit.\" (empty branch, as the help says)",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a stacked branch/pull request",
   "probe": "repeat a create with the same branch name",
   "outcome": "second: rc=1 \"ERROR: Branch with this name already exists\"; no duplicate, staged change left staged",
   "grade": "clear",
   "idempotent": "yes",
   "rate_limit": null
  },
  {
   "capability": "Submit a stack of PRs to GitHub",
   "probe": "bad credential: wrong auth token",
   "outcome": "\"Saved auth token ...\" then rc=1 \"ERROR: Your Graphite auth token is invalid/expired. Please obtain a new auth token by visiting https://app.graphite.com/activate\"",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Sync local stack with remote and restack on top of trunk",
   "probe": "interrupt a restack with a conflict, then abort",
   "outcome": "rc=1 \"Hit conflict restacking conflict-a on main ... It's safe to cancel the ongoing rebase with gt abort.\"; abort -> \"Successfully aborted gt restack\"; branch back at eeb8abb, gt log shows \"conflict-",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a stacked branch/pull request",
   "probe": "rate limit burst",
   "outcome": "not applicable",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": "none-seen"
  }
 ],
 "surface_audit": {
  "totals": {
   "items": 60,
   "documented": 59,
   "safe": 56,
   "exercised": 48,
   "passed": 42,
   "skipped": 3,
   "blocked": 8,
   "not_run": 0,
   "match": 46,
   "drift": 2,
   "broken_doc": 0,
   "docs_complete": 1,
   "docs_partial": 57,
   "docs_missing": 1,
   "errors_clear": 2,
   "errors_vague": 0,
   "errors_silent": 1
  }
 },
 "coverage_core": 12,
 "coverage_own": 12,
 "after_wall": null,
 "coverage_source": "computed",
 "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.27",
  "commit": "132c4d41a411d7acee60092fedfe2af74cee1ec3",
  "prompts": {
   "version": "2026.10.27",
   "commit": "845036a5a40ff8a1d6d9ed752a31210bed0cbc93"
  },
  "rules": {
   "version": "2026.10.27",
   "commit": "fe3b689b94a4f5fc8abd3c7adc454960326b9514"
  }
 },
 "same_level_drives": 1,
 "drives": 1,
 "same_stop_drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "newer_drives": null,
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-28"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "verified",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt (graphite.com/docs/llms.txt) and .md pages for every docs page; no API reference because there is no public API."
  },
  "signup": {
   "status": "n/a",
   "cause": "other",
   "note": "Not needed: a documented route works without an account.",
   "no_account": true,
   "note_driver": "Sign-up only through GitHub: no way in for an agent's own account. The sign-up page shows one button, \"Sign up with GitHub\"; its work-email field opens the GitHub login. Docs: \"GitHub is the only git provider that Graphite integrates with\".",
   "status_driver": "blocked"
  },
  "verify": {
   "status": "n/a",
   "note": "Not needed: a documented route works without an account.",
   "no_account": true,
   "note_driver": "Not reached: no account.",
   "status_driver": "blocked"
  },
  "credentials": {
   "status": "n/a",
   "cause": "other",
   "note": "Not needed: a documented route works without an account.",
   "via": "",
   "no_account": true,
   "note_driver": "The CLI token comes only from app.graphite.com/activate after a GitHub sign-in; no API or CLI route makes a key.",
   "status_driver": "blocked"
  },
  "first_call": {
   "status": "headless",
   "route": "no_account",
   "note": "The gt CLI (npm, 1.8.6) runs locally with no account: gt init, create, log, restack all worked. Anything that reaches Graphite (submit, sync, get, merge) answers \"Please authenticate your Graphite CLI\"."
  },
  "first_action": {
   "status": "headless",
   "note": "Created a two-branch stack locally with gt create and restacked it; opening the pull requests (gt submit) needs an account."
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [
    "Stripe billing portal (card)"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "route": "portal",
   "checkout": {
    "reached": "no",
    "processor": "stripe_checkout",
    "captcha": "none",
    "three_ds": "not_seen",
    "card_form": true,
    "phone_field": "none",
    "wallets": [],
    "rail_offer": "none",
    "price": "20.00",
    "currency": "USD",
    "period": "year",
    "plan": "Starter",
    "last_button": ""
   },
   "person": null,
   "ours": "account",
   "note": "No 402, MPP, Stripe Projects or billing API (nothing was paid). Docs: plans are bought by card in the Stripe billing portal from Settings > Billing; Team has a 30-day trial with no card. Not walked: the billing page needs a GitHub-only account. Starter $20 per user/month billed annually."
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent started no paid plan.",
   "docs_note": "Nothing to cancel: no plan was started. Docs: subscriptions are managed in the Stripe billing portal (Settings > Billing > Manage plan), a web UI.",
   "docs_grade": "",
   "nothing": "no_plan"
  },
  "delete": {
   "status": "n/a",
   "left": "nothing_made",
   "after_hours": null,
   "note": "No Graphite account was made. All work was local and removed with gt delete; the docs list no account deletion route.",
   "account": false
  }
 },
 "routes": [
  {
   "route": "local",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "partial",
   "wall": {
    "type": "idp",
    "owner": "product"
   },
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 6,
   "browser": false
  },
  {
   "route": "sso_github",
   "offered": "seen",
   "tried": false,
   "not_tried": "policy",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "device_login",
   "offered": "documented",
   "tried": false,
   "not_tried": "no_kit",
   "result": null,
   "wall": null,
   "person": null,
   "brings": null,
   "fresh": null,
   "minutes": null,
   "browser": null
  },
  {
   "route": "enterprise",
   "offered": "seen",
   "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": "20.00",
  "currency": "USD",
  "plan": "Starter"
 },
 "docs": {
  "at": "2026-10-28",
  "read": 57,
  "listed": 58,
  "sampled": false,
  "overall": "gaps",
  "getting_started": "found",
  "auth": "found",
  "errors": "partial",
  "examples": "some",
  "freshness": "unknown",
  "newest": null,
  "core_pages": "8 of 8",
  "capabilities": "covered",
  "label": "Some gaps"
 },
 "claims": {
  "claimed": 5,
  "tried": 3,
  "held": 1,
  "broken": 1,
  "unclear": 1,
  "not_tried": 2,
  "undocumented_works": 0
 },
 "pay_options": {
  "checked": "2026-10-28",
  "source": "probe",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": true,
   "card_required": null,
   "free_plan": true
  },
  "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": false,
  "openapi": false,
  "cli": true,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": false,
  "sandbox": false
 },
 "urls": {
  "docs": "https://graphite.com/docs/get-started",
  "llms_txt": "https://graphite.com/docs/llms.txt",
  "mcp": null
 },
 "surface_notes": {
  "cli": "gt 1.8.6 (npm @withgraphite/graphite-cli), about 50 commands",
  "mcp": "official, local stdio via gt mcp, 2 tools, beta",
  "llms_txt": "H1 and 90 links, no summary or sections; llms-full.txt too"
 },
 "surface_sizes": [
  {
   "kind": "mcp",
   "listed": 2,
   "tested": 2
  },
  {
   "kind": "cli",
   "listed": 55,
   "tested": 46
  }
 ],
 "can_do": [
  "Create, amend, restack, fold, squash, move, absorb and delete stacked branches locally with the gt CLI, no account needed",
  "Drive the same CLI through the built-in gt mcp server (run_gt_cmd)",
  "Freeze, track, untrack and undo stack changes locally"
 ],
 "cannot_do": [
  {
   "what": "Open, sync, fetch or merge pull requests (gt submit, sync, get, merge)",
   "why": "Needs a Graphite account, and sign-up is only through GitHub"
  },
  {
   "what": "Review PRs, get AI reviews, use Graphite Chat or the PR inbox",
   "why": "Web app only, behind a GitHub sign-in"
  },
  {
   "what": "Get an API key",
   "why": "No public API; the CLI token is copied from the web app after a GitHub sign-in"
  },
  {
   "what": "Buy a plan",
   "why": "Card checkout in the Stripe billing portal from the signed-in app; no agent payment rail"
  }
 ],
 "blockers": [
  "Sign-up only through GitHub",
  "No public API or API keys",
  "gt sync needs an auth token even to pull trunk"
 ],
 "tips_for_agents": [
  "Install gt from npm (@withgraphite/graphite-cli; the linux-x64 binary package holds the real binary) and pass --no-interactive to every command",
  "Use gt create -m, gt modify, gt restack, gt absorb and gt fold for local stack work; they need no auth",
  "Pull trunk with git fetch and git merge --ff-only, then gt restack, when no Graphite token is set",
  "Add the MCP server with command gt, args [mcp]; check tool text for \"ERROR:\" since failures are not flagged isError",
  "gt split, gt reorder, gt config and gt demo are interactive only"
 ],
 "selfhost": null,
 "edge_case": "none",
 "summary": "Graphite's gt CLI works for an agent with no account: it created, restacked, reorganised and deleted stacked branches locally, also through its built-in MCP server. Everything that touches pull requests (submit, sync, merge, reviews, inbox) needs a Graphite account, and the only sign-up is through GitHub, so an agent with its own identity cannot get in. There is no public API and no agent payment rail.",
 "wall": "Sign-up only through GitHub",
 "plan_scope": "none (no account: GitHub-only sign-up); local CLI only",
 "robots_stop": null,
 "robots": null,
 "terms": null,
 "terms_read": "2026-10-28",
 "email_gate": null,
 "plain": {
  "summary": "Graphite helps developers stack code changes on top of each other. Its command-line tool works without an account for local stacking, but opening pull requests, reviews and merging all need an account. The only sign-up goes through GitHub, so an agent with its own identity stopped there.",
  "can_do": [
   "Create, edit, reorder and delete stacked branches on a local repository without an account",
   "Use the same commands through the built-in MCP server",
   "Restack local branches after the main branch moves, once the main branch is pulled with plain git"
  ],
  "cannot_do": [
   {
    "what": "Open, sync or merge pull requests",
    "why": "Needs a Graphite account, and sign-up is only through GitHub"
   },
   {
    "what": "Use reviews, AI review, chat and the inbox",
    "why": "These live in the web app behind a GitHub sign-in"
   },
   {
    "what": "Get an API key",
    "why": "There is no public API; the CLI token is copied from the web app after sign-in"
   },
   {
    "what": "Buy a plan",
    "why": "Card checkout is in the signed-in app; no agent payment option"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "capability": "Create a stacked branch/pull request",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "gt mcp (CLI built-in)",
    "cli": "gt create",
    "ui": "New PR / stack"
   },
   "check": "gt log shows the new branch stacked on its parent; GitHub shows the PR open",
   "capability_id": "cap_kzejkm30",
   "source": "https://graphite.dev/docs/cheatsheet, https://graphite.dev/docs/create-stack",
   "result": "done",
   "via": "cli",
   "done_on": [
    "cli",
    "mcp"
   ]
  },
  {
   "id": "cap-02",
   "capability": "Submit a stack of PRs to GitHub",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt submit --stack",
    "ui": null
   },
   "check": "GitHub shows a PR open/updated for every branch in the stack",
   "capability_id": "cap_p32gmnqr",
   "source": "https://graphite.dev/docs/cheatsheet",
   "result": "blocked",
   "via": "cli"
  },
  {
   "id": "cap-03",
   "capability": "Review a pull request (diff, comments, versions)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "PR page"
   },
   "check": "GitHub shows the review and comments posted from Graphite's PR page",
   "capability_id": "cap_gbrba2xt",
   "source": "https://graphite.dev/docs/pr-page-overview",
   "result": "blocked",
   "via": "ui"
  },
  {
   "id": "cap-04",
   "capability": "Get an AI code review on a pull request",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "AI reviews dashboard / PR page"
   },
   "check": "The PR shows Graphite Agent comments after opening or updating the PR",
   "capability_id": "cap_h49mj67p",
   "source": "https://graphite.dev/docs/ai-reviews",
   "result": "blocked",
   "via": "ui"
  },
  {
   "id": "cap-05",
   "capability": "Chat with an AI assistant about a PR and apply its edits",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Graphite Chat panel on PR page"
   },
   "check": "The PR branch shows a new commit containing the edit Graphite Chat proposed",
   "capability_id": "cap_dy1t95mf",
   "source": "https://graphite.dev/docs/graphite-chat",
   "result": "blocked",
   "via": "ui"
  },
  {
   "id": "cap-06",
   "capability": "Merge a PR or stack through the merge queue",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt merge",
    "ui": "PR page / Merge Queue"
   },
   "check": "GitHub shows the PR(s) merged into trunk and Graphite posts a queue status comment",
   "capability_id": "cap_p32gmnqr",
   "source": "https://graphite.dev/docs/graphite-merge-queue, https://graphite.dev/docs/merge-pull-requests",
   "result": "blocked",
   "via": "cli"
  },
  {
   "id": "cap-07",
   "capability": "Sync local stack with remote and restack on top of trunk",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt sync",
    "ui": null
   },
   "check": "gt log shows branches rebased onto the latest trunk and merged branches removed",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/cheatsheet",
   "result": "partial",
   "via": "cli"
  },
  {
   "id": "cap-08",
   "capability": "Triage pull requests in a unified inbox",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "PR inbox"
   },
   "check": "Inbox sections (Needs your review, Approved, etc.) list the correct PRs for the synced repos",
   "capability_id": "cap_anz8wn6d",
   "source": "https://graphite.dev/docs/use-pr-inbox",
   "result": "blocked",
   "via": "ui"
  },
  {
   "id": "cap-09",
   "capability": "Reorganize a stack (move, fold, split, squash, reorder branches)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt move / gt fold / gt split / gt squash / gt reorder",
    "ui": null
   },
   "check": "gt log shows the stack structure changed as requested",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/cheatsheet, https://graphite.dev/docs/squash-fold-split",
   "result": "done",
   "via": "cli",
   "done_on": [
    "cli"
   ]
  },
  {
   "id": "cap-10",
   "capability": "Navigate a stack (checkout, up, down, top, bottom)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt checkout / gt up / gt down / gt top / gt bottom",
    "ui": null
   },
   "check": "Working tree HEAD moves to the targeted branch in the stack",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/cheatsheet, https://graphite.dev/docs/navigate-stack",
   "result": "done",
   "via": "cli",
   "done_on": [
    "cli"
   ]
  },
  {
   "id": "cap-11",
   "capability": "Track or untrack an existing git branch with Graphite",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt track / gt untrack",
    "ui": null
   },
   "check": "gt log shows the branch listed/removed from the tracked stack",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/track-branches",
   "result": "done",
   "via": "cli",
   "done_on": [
    "cli"
   ]
  },
  {
   "id": "cap-12",
   "capability": "Fetch a teammate's stack locally",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt get",
    "ui": null
   },
   "check": "The teammate's branches appear locally and in gt log",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/collaborate-on-a-stack",
   "result": "blocked",
   "via": "cli"
  },
  {
   "id": "cap-13",
   "capability": "Undo the most recent Graphite mutation",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt undo",
    "ui": null
   },
   "check": "gt log shows the branch/stack state reverted to before the last mutation",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/cheatsheet",
   "result": "done",
   "via": "cli",
   "done_on": [
    "cli"
   ]
  },
  {
   "id": "cap-14",
   "capability": "Customize AI review behavior with exclusions and custom rules",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "AI reviews dashboard → Rules & exclusions"
   },
   "check": "A new PR matching the rule/exclusion shows (or omits) the expected AI comment",
   "capability_id": "cap_jewg1kvx",
   "source": "https://graphite.dev/docs/ai-review-customization",
   "result": "blocked",
   "via": "browser"
  },
  {
   "id": "cap-15",
   "capability": "Create an automation rule to add reviewers, labels, comments or Slack notices on matching PRs",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Automations"
   },
   "check": "A PR matching the rule's filter gets the configured reviewers/labels/comment applied",
   "capability_id": "cap_jewg1kvx",
   "source": "https://graphite.dev/docs/automations",
   "result": "blocked",
   "via": "browser"
  },
  {
   "id": "cap-16",
   "capability": "View team engineering insights and metrics",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Insights"
   },
   "check": "The Insights page renders PR/merge/review stats for the selected time period",
   "capability_id": "cap_fhmexa68",
   "source": "https://graphite.dev/docs/insights",
   "result": "blocked",
   "via": "browser"
  },
  {
   "id": "cap-17",
   "capability": "Create a pull request with a Cursor Cloud Agent from a prompt",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Agents"
   },
   "check": "A new draft PR appears containing the agent-generated changes for the described task",
   "capability_id": "cap_9b5zz6b2",
   "source": "https://graphite.dev/docs/agents",
   "result": "blocked",
   "via": "browser"
  },
  {
   "id": "cap-19",
   "capability": "Receive Slack notifications for PR activity",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Integrations → Slack"
   },
   "check": "A Slack message is posted to the configured channel/user when a watched PR event fires",
   "capability_id": "cap_x4n6bnwy",
   "source": "https://graphite.dev/docs/slack-notifications",
   "result": "blocked",
   "via": "browser"
  },
  {
   "id": "cap-20",
   "capability": "Use the VS Code extension to create and manage stacked PRs visually",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "VS Code extension"
   },
   "check": "The VS Code extension panel shows the stack and reflects a branch created from it",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/vs-code-extension",
   "result": "blocked",
   "via": "browser"
  },
  {
   "id": "cap-21",
   "capability": "Distribute staged changes across downstack branches (absorb)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt absorb",
    "ui": null
   },
   "check": "gt log/diff shows the staged change amended into the correct downstack commit",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/cheatsheet",
   "result": "done",
   "via": "cli",
   "done_on": [
    "cli"
   ]
  },
  {
   "id": "cap-22",
   "capability": "Freeze or unfreeze a branch to prevent accidental edits",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "gt freeze / gt unfreeze",
    "ui": null
   },
   "check": "gt attempts to modify a frozen branch and is blocked until unfrozen",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/cheatsheet",
   "result": "done",
   "via": "cli",
   "done_on": [
    "cli"
   ]
  },
  {
   "id": "cap-23",
   "capability": "Configure CI optimizations for stacked PRs",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Repository settings → CI"
   },
   "check": "CI runs skip redundant checks on fast-forwarded stacked PRs as configured",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/stacking-and-ci",
   "result": "blocked",
   "via": "browser"
  },
  {
   "id": "cap-24",
   "capability": "Integrate with an external merge queue",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Merge Queue settings"
   },
   "check": "A PR merged through the external queue shows the expected Graphite status/comment",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://graphite.dev/docs/external-merge-queue-integration",
   "result": "blocked",
   "via": "browser"
  },
  {
   "id": "cap-25",
   "capability": "Manage organization members and permissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin"
   },
   "check": "The members list reflects the added/removed member and their role",
   "capability_id": "cap_bs3hvrpm",
   "source": "https://graphite.dev/docs/graphite-admin",
   "result": "blocked",
   "via": null
  },
  {
   "id": "cap-26",
   "capability": "Configure SAML SSO",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin → Security"
   },
   "check": "Sign-in via the configured SAML IdP succeeds for an org member",
   "capability_id": "cap_pz4pecfg",
   "source": "https://graphite.dev/pricing",
   "result": "blocked",
   "via": null
  },
  {
   "id": "cap-27",
   "capability": "Read the organization audit log",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin → Audit log"
   },
   "check": "A recent admin action appears as an entry in the audit log",
   "capability_id": "cap_xgs80797",
   "source": "https://graphite.dev/pricing",
   "result": "blocked",
   "via": null
  },
  {
   "id": "cap-28",
   "capability": "Change the subscription plan or seats",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Billing"
   },
   "check": "The billing page shows the new plan/seat count after the change",
   "capability_id": "cap_0fp1r7vd",
   "source": "https://graphite.dev/docs/billing-plans",
   "result": "blocked",
   "via": null
  }
 ],
 "stale": false,
 "unreachable_since": null,
 "not_driven_since": null,
 "icon": "/logos/graphite.png",
 "agent_kinds": {
  "browser": {
   "who": "An assistant in a browser",
   "passed": [],
   "stop": "signup",
   "why": "it's blocked there",
   "tone": "wall",
   "text": "Stops at sign-up: it's blocked there."
  },
  "direct": {
   "who": "An agent talking to it directly",
   "passed": [
    "first_call",
    "first_action"
   ],
   "stop": "work",
   "why": null,
   "tone": "warn",
   "text": "Without an account (runs locally) it makes its first API call and does 12% of the core work, then stops."
  }
 },
 "sdk": {
  "packages": [],
  "read_at": "2026-11-01T21:11:06Z"
 },
 "surface_reach": {
  "surfaces": {
   "cli": true
  },
  "read_at": "2026-10-31T01:03:29Z"
 },
 "connect": {
  "cli": {
   "install": "npm install -g @withgraphite/graphite-cli",
   "package": "@withgraphite/graphite-cli",
   "ecosystem": "npm",
   "source": "https://www.npmjs.com/package/@withgraphite/graphite-cli",
   "state": "documented"
  },
  "signup": {
   "url": "https://app.graphite.com/signup",
   "state": "documented"
  },
  "docs": {
   "url": "https://graphite.com/docs/get-started",
   "state": "tested"
  }
 },
 "surface_sources": {
  "docs": "https://graphite.com/docs/get-started",
  "llms_txt": "https://graphite.com/docs/llms.txt",
  "cli": "https://www.npmjs.com/package/@withgraphite/graphite-cli",
  "mcp": "https://graphite.com/docs/gt-mcp",
  "api": "https://graphite.com/docs/get-started"
 },
 "copilot_connector": null,
 "stripe_directory": null,
 "in_stripe_directory": null,
 "stripe_projects": null,
 "pay_rails": [],
 "stop_evidence": null,
 "wall_vendor": null,
 "mcp_sign_in": null,
 "safety_issues": 0,
 "fix_counts": {
  "small": 2,
  "medium": 2,
  "large": 2,
  "total": 6
 },
 "evidence_sha256": "d881bcff7587f180462070275ea9fe7f122fd60d0bde47da96f40498931d6faf",
 "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": null,
 "confirmation": {
  "state": "awaiting",
  "drives": 1,
  "agree": 1,
  "review": null,
  "text": "1 drive, awaiting confirmation"
 },
 "stop_shot": null,
 "stop_shot_hash": null,
 "attempts_count": 80,
 "detail": {
  "public": false,
  "in": [
   "report",
   "api"
  ],
  "since": "2026-10-17"
 },
 "what_it_does": "Graphite helps developers stack code changes on top of each other.",
 "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": 39,
   "above": 31,
   "percentile": 53
  },
  "DOCS-11": {
   "basis": "all",
   "n": 142,
   "below": 10,
   "above": 44,
   "percentile": 38
  },
  "FIND-06": {
   "basis": "all",
   "n": 106,
   "below": 10,
   "above": 81,
   "percentile": 17
  },
  "IN-08": {
   "basis": "all",
   "n": 120,
   "below": 55,
   "above": 0,
   "percentile": 73
  },
  "IN-11": {
   "basis": "category",
   "n": 5,
   "below": 4,
   "above": 0
  },
  "IN-12": {
   "basis": "category",
   "n": 5,
   "below": 0,
   "above": 3
  },
  "LEAVE-03": {
   "basis": "all",
   "n": 145,
   "below": 0,
   "above": 89,
   "percentile": 19
  },
  "MCP-03": {
   "basis": "all",
   "n": 66,
   "below": 4,
   "above": 0,
   "percentile": 53
  },
  "MCP-04": {
   "basis": "all",
   "n": 66,
   "below": 20,
   "above": 15,
   "percentile": 54
  },
  "MCP-05": {
   "basis": "all",
   "n": 66,
   "below": 46,
   "above": 0,
   "percentile": 85
  },
  "MCP-06": {
   "basis": "all",
   "n": 66,
   "below": 10,
   "above": 16,
   "percentile": 45
  },
  "MCP-07": {
   "basis": "all",
   "n": 66,
   "below": 0,
   "above": 48,
   "percentile": 14
  },
  "MCP-11": {
   "basis": "all",
   "n": 66,
   "below": 33,
   "above": 0,
   "percentile": 75
  },
  "PAY-05": {
   "basis": "all",
   "n": 119,
   "below": 0,
   "above": 34,
   "percentile": 36
  },
  "PROTO-02": {
   "basis": "category",
   "n": 5,
   "below": 0,
   "above": 0
  }
 },
 "probe": {
  "checked": "2026-11-01",
  "status": "ok",
  "sign_up_page": "page",
  "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": "page",
   "wall": "none",
   "llms_txt": false,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-31",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": false,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-30",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": false,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-29",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": false,
   "mcp": "none",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  }
 ],
 "surface_changes": [],
 "agent_reports": null,
 "verdict": "Our agent got in on its own at Graphite without an account: L2 · Gets in. No checkpoint stopped it, because the gt CLI runs locally, so sign-up, verification and a key were not needed. Payment was not reached. Our agent created a stack of branches with gt create, restacked it and deleted it, also through the built-in MCP server. Commands that reach Graphite, such as gt submit, sync, get and merge, answered \"Please authenticate your Graphite CLI\", and sign-up goes through GitHub only. Graphite has no public API. Plans are bought by card in the Stripe billing portal, and our agent paid nothing.",
 "changes": {
  "source": "store",
  "drives": [
   {
    "run": "20261028T030131Z",
    "date": "2026-10-28",
    "level": 2,
    "stop": null,
    "entry": "self-start",
    "driver": 5,
    "listed": true,
    "paid": false,
    "agent_paid": null
   }
  ],
  "events": [],
  "feed": "https://agentdrives.com/api/tools/graphite/changes.json"
 },
 "agreement": null,
 "method_release": "2026-Q4.27",
 "found": {
  "agent_blockers": 3,
  "surface_issues": 4
 },
 "agent_surfaces": {
  "api": {
   "state": "none_found",
   "reachable": null,
   "documented": null,
   "tested": null,
   "source": "https://graphite.com/docs/get-started"
  },
  "mcp": {
   "state": "tested",
   "reachable": true,
   "documented": 2,
   "tested": 2,
   "source": "https://graphite.com/docs/gt-mcp"
  },
  "cli": {
   "state": "tested",
   "reachable": true,
   "documented": 55,
   "tested": 46,
   "source": "https://www.npmjs.com/package/@withgraphite/graphite-cli"
  },
  "sdk": {
   "state": "none_found",
   "documented": null,
   "tested": null,
   "source": null
  },
  "docs": {
   "state": "tested",
   "documented": 58,
   "tested": 57,
   "source": "https://graphite.com/docs/get-started"
  },
  "payment": {
   "state": "none_found",
   "documented": null,
   "tested": null,
   "source": null
  }
 },
 "issues_found": 7,
 "rank": 1,
 "rank_of": 1,
 "rank_change": null,
 "rank_since": "2026-10-28",
 "links": {
  "category": [
   {
    "label": "Developer platform",
    "href": "https://agentdrives.com/categories/developer"
   },
   {
    "label": "Source control",
    "href": "https://agentdrives.com/categories/source-control"
   }
  ],
  "tasks": [
   {
    "label": "Create a task or issue",
    "href": "https://agentdrives.com/tasks/create-a-task-or-issue"
   }
  ],
  "walls": [
   {
    "label": "Sign-up or key only in a browser",
    "href": "https://agentdrives.com/access/get-in/sign-up",
    "note": "our agent got in another way"
   }
  ],
  "vendors": [],
  "standards": [
   {
    "label": "MCP",
    "href": "https://agentdrives.com/standards/mcp",
    "note": "tools an agent can call"
   },
   {
    "label": "llms.txt",
    "href": "https://agentdrives.com/standards/llms-txt",
    "note": "its docs, listed for agents"
   }
  ],
  "steps": [
   {
    "label": "Find",
    "href": "https://agentdrives.com/access/find"
   },
   {
    "label": "Get in",
    "href": "https://agentdrives.com/access/get-in"
   },
   {
    "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": "Gitea",
    "href": "https://agentdrives.com/tools/gitea",
    "slug": "gitea",
    "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 stacked branch/pull request",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "done",
    "cli": "done",
    "ui": "untried"
   }
  },
  {
   "id": "cap-02",
   "name": "Submit a stack of PRs to GitHub",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "blocked",
    "ui": "none"
   }
  },
  {
   "id": "cap-03",
   "name": "Review a pull request (diff, comments, versions)",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-04",
   "name": "Get an AI code review on a pull request",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-05",
   "name": "Chat with an AI assistant about a PR and apply its edits",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-06",
   "name": "Merge a PR or stack through the merge queue",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "blocked",
    "ui": "untried"
   }
  },
  {
   "id": "cap-07",
   "name": "Sync local stack with remote and restack on top of trunk",
   "core": true,
   "result": "partial",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "partial",
    "ui": "none"
   }
  },
  {
   "id": "cap-08",
   "name": "Triage pull requests in a unified inbox",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-09",
   "name": "Reorganize a stack (move, fold, split, squash, reorder branches)",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "done",
    "ui": "none"
   }
  },
  {
   "id": "cap-10",
   "name": "Navigate a stack (checkout, up, down, top, bottom)",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "done",
    "ui": "none"
   }
  },
  {
   "id": "cap-11",
   "name": "Track or untrack an existing git branch with Graphite",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "done",
    "ui": "none"
   }
  },
  {
   "id": "cap-12",
   "name": "Fetch a teammate's stack locally",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "blocked",
    "ui": "none"
   }
  },
  {
   "id": "cap-13",
   "name": "Undo the most recent Graphite mutation",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "done",
    "ui": "none"
   }
  },
  {
   "id": "cap-14",
   "name": "Customize AI review behavior with exclusions and custom rules",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "blocked"
   }
  },
  {
   "id": "cap-15",
   "name": "Create an automation rule to add reviewers, labels, comments or Slack notices on matching PRs",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "blocked"
   }
  },
  {
   "id": "cap-16",
   "name": "View team engineering insights and metrics",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "blocked"
   }
  },
  {
   "id": "cap-17",
   "name": "Create a pull request with a Cursor Cloud Agent from a prompt",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "blocked"
   }
  },
  {
   "id": "cap-19",
   "name": "Receive Slack notifications for PR activity",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "blocked"
   }
  },
  {
   "id": "cap-20",
   "name": "Use the VS Code extension to create and manage stacked PRs visually",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "blocked"
   }
  },
  {
   "id": "cap-21",
   "name": "Distribute staged changes across downstack branches (absorb)",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "done",
    "ui": "none"
   }
  },
  {
   "id": "cap-22",
   "name": "Freeze or unfreeze a branch to prevent accidental edits",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "done",
    "ui": "none"
   }
  },
  {
   "id": "cap-23",
   "name": "Configure CI optimizations for stacked PRs",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "blocked"
   }
  },
  {
   "id": "cap-24",
   "name": "Integrate with an external merge queue",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "blocked"
   }
  },
  {
   "id": "cap-25",
   "name": "Manage organization members and permissions",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-26",
   "name": "Configure SAML SSO",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-27",
   "name": "Read the organization audit log",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-28",
   "name": "Change the subscription plan or seats",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  }
 ],
 "category_place": {
  "category": "source-control",
  "products": 5,
  "higher": 0,
  "same_level": 0,
  "as_of": "2026-10-29",
  "stop": null,
  "rivals_by": "level",
  "rivals": []
 },
 "page": "https://agentdrives.com/tools/graphite?via=api"
}