[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-vercel-labs-xref":3,"mdc-3j45sq-key":41,"related-repo-vercel-labs-xref":1219,"related-org-vercel-labs-xref":1228},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":25,"topics":29,"repo":36,"sourceUrl":39,"mdContent":40},"xref","trace GitHub cross-references","Snapshot the reference graph of a GitHub PR or issue and trace every linked PR, cross-referenced issue, and mention across repos. Use before working on an issue or PR; to reconcile an unlabeled backlog read-only; to find orphan, superseded, competing, or duplicate PRs; to see who mentioned or linked it; to survey a backlog by root-cause cluster; to rank a backlog by discussion heat and pick the most impactful issue to fix next; to spot two PRs that touch the same files; to catch a PR that says \"fixes",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"vercel-labs","Vercel Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fvercel-labs.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Graph Analysis","graph-analysis","tag",{"name":17,"slug":18,"type":15},"GitHub","github",{"name":20,"slug":21,"type":15},"Engineering","engineering",{"name":23,"slug":24,"type":15},"Code Analysis","code-analysis",0,"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fxref","2026-08-15T03:47:29.696151",null,[30,31,18,32,33,34,35],"cli","coding-agents","issue-triage","pull-requests","reference-graph","software-factory",{"repoUrl":26,"stars":25,"forks":25,"topics":37,"description":38},[30,31,18,32,33,34,35],"Map the complete reference graph around GitHub issues, pull requests, and repository backlogs.","https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fxref\u002Ftree\u002FHEAD\u002Fskills\u002Fxref","---\nname: xref\ndescription: Snapshot the reference graph of a GitHub PR or issue and trace every linked PR, cross-referenced issue, and mention across repos. Use before working on an issue or PR; to reconcile an unlabeled backlog read-only; to find orphan, superseded, competing, or duplicate PRs; to see who mentioned or linked it; to survey a backlog by root-cause cluster; to rank a backlog by discussion heat and pick the most impactful issue to fix next; to spot two PRs that touch the same files; to catch a PR that says \"fixes #N\" but will not auto-close; or to re-check what changed since the last snapshot. Trigger words include xref, reconcile backlog, clean backlog, map this PR or issue, trace references, what links to this, who mentioned this, find orphans, duplicate PRs, survey backlog, prioritize backlog, what to fix first, and most impactful issues.\ncompatibility: Requires the `xref` command on PATH. Install from source with `gh repo clone vercel-labs\u002Fxref && cd xref && bun install --frozen-lockfile && bun link`. Also needs an authenticated `gh`, Bun, and network access to the GitHub API. Snapshots persist under ~\u002F.xref\u002F. Clustering runs in the calling agent's context, or shells out to `claude` or `codex` with `--cluster-run`.\n---\n\n# xref\n\nTake a **snapshot** of everything a GitHub PR\u002Fissue connects to, so no **orphan** gets left behind — and so you never open a PR that duplicates work already in flight. The CLI is the hands (crawls, guards, classifies, attributes, persists); you are the brain (read the graph, run the one semantic step it hands back). `xref` is a globally-installed command (if it is missing, install it per compatibility above).\n\n## Steps\n\n1. **Crawl the seed.**\n   ```bash\n   xref \u003Curl|number> --repo owner\u002Frepo [--depth N] [--cluster] [--prioritize]\n   ```\n   Multi-seed \u002F backlog survey: `--seeds 1,2,3` or `--label \u003Clabel>`. Add `--prioritize` when the ask is \"what should I fix first\". `xref --help` lists every flag.\n   Done when the CLI has printed the Nodes list and the orphan checklist.\n\n   Map the ask onto the invocation:\n\n   | The user asks | Run |\n   | --- | --- |\n   | \"what's attached to this issue\u002FPR\", \"check before I fix it\" | `xref \u003Cn> --repo \u003Co\u002Fr> --depth 2` |\n   | \"what should I fix first\", \"most impactful issues\" | `xref --label \u003Clabel> --repo \u003Co\u002Fr> --prioritize` |\n   | \"which PRs are duplicating each other\" | `xref --seeds \u003Cn,n,n> --repo \u003Co\u002Fr>` and read the overlap section |\n   | \"which issues have no PR\" \u002F \"which have competing PRs\" | `xref --label \u003Clabel> --repo \u003Co\u002Fr>` and read the orphan checklist and flags |\n   | \"clean\u002Freconcile the whole backlog\", including repos without labels | `xref reconcile --repo \u003Co\u002Fr> --format markdown` |\n   | \"cluster my backlog by root cause\" | `xref --seeds \u003Cn,n,n> --repo \u003Co\u002Fr> --cluster` |\n   | \"what changed since last time\" | re-run the same seeds; the snapshot diff is automatic |\n\n2. **Surface the orphans and hazards.** Relay the orphan checklist to the user, most-actionable first:\n   - ⚠️ **SUPERSEDED** PRs — a merged PR already shipped this work; candidate to close *with credit*.\n   - ⚠️ **POSSIBLY SUPERSEDED** PRs — the PR is structurally linked to an issue that a later merged PR closed; verify scope, then close with credit if the merged work covers it.\n   - ⚠ **competing** PRs — two open PRs close the same issue; pick one, credit both.\n   - ⚠ **claims-close-no-link** — a PR says `fixes #N` (often in the title) but has no structural closing link, so merging it silently won't auto-close the issue.\n   - Then the remaining open related issues\u002FPRs.\n   Done when every open, superseded, competing, and flagged node is named — silence on a node is a miss.\n\n3. **Read the overlap section.** If a \"Possible duplicate \u002F overlapping PRs (shared files)\" section is present, relay it: each pair of open PRs that touch the same files is a likely duplicate or merge conflict, and a pair that also closes the same issue is a near-certain duplicate. This is the objective duplication signal — trust it over title similarity.\n\n4. **Relay the triage priority.** With `--prioritize`, the output ends with a \"Triage priority\" ranking of every open node by discussion heat — `comments×3 + participants×2 + reactions×2 + inbound refs×2 + min(12, daysOpen\u002F30)`. This encodes \"fix the most impactful issues, not inbox zero\": lots of discussion and\u002For obvious frustration first. Relay the top of the ranking with each node's raw signals (they are printed next to the score) so the user can override the order; the score is a sort key, not a verdict.\n\n5. **Run the cluster step.** With `--cluster`, the CLI prints a fenced `cluster-prompt` block listing each node's edges in `[brackets]`. That block is a sub-task addressed to you: cluster by the edge structure and shared defect (not title keywords), then present the root-cause clusters. This step is done only once the clusters exist in your reply — showing the CLI output is not doing it. (For unattended runs, pass `--cluster-run claude|codex` so the CLI shells out instead.)\n\n6. **Offer the hub re-seeds.** If the output has a \"Hubs not expanded\" section, give the user the exact re-seed command it printed for each hub — that is how the neighborhood behind a tracking issue gets explored without pulling the whole tracker.\n\n7. **Report what changed.** If a \"Since last snapshot\" diff is present, relay the new nodes, state changes, and new mentions\u002Flinks with who made them.\n\n## Reconcile mode\n\nUse `xref reconcile --repo owner\u002Frepo --format json` when another tool or agent will consume the result. Add `--no-snapshot` when the caller must leave local state unchanged. The JSON carries `schemaVersion`, counts, ordered items, structured evidence, crawl limits, repository-level history, and contextual next steps. Each evidence object has a stable `code`, a human `summary`, and exact `related` node keys. `history` compares against the previous report for the same repository and exposes added, changed, and resolved actions plus coverage regression or recovery. Run `xref schema` before building a durable integration and inspect both `githubMutations` and `localWrites`.\n\nTreat its actions as a verification queue:\n\n- `close-superseded`: verify scope parity, credit the contributor, then close if fully covered.\n- `verify-superseded`: compare both implementations before deciding.\n- `resolve-competing`: select one implementation path and respond to every contributor.\n- `repair-closing-link`: correct the GitHub closing relationship before merge.\n- `verify-completed`: check current `main`, acceptance criteria, and live behavior before closing the issue.\n- `review-open-pr`: run the repository's exact-SHA review gate.\n- `keep-linked`: leave it open while linked work is active.\n- `keep-untracked`: reproduce or inspect before prioritizing.\n\nIf `limits.seedLimitReached` is true, `limits.cappedOut` is non-empty, or `limits.fetchFailures` is non-empty, report the incomplete coverage. Increase `--max-nodes`, re-seed the omitted neighborhood, or retry failed nodes before claiming the backlog was fully reconciled.\n\n## Flags\n\n- `--repo owner\u002Frepo` — required for bare numbers, `--seeds`, `--label`.\n- `--depth N` (default 2) — same-repo recursion; cross-repo refs are fetched one hop, not expanded.\n- `--seeds a,b,c` \u002F `--label L` — backlog mode; output adds connected components.\n- `--max-nodes N` (80), `--hub-threshold N` (12) — crawl guards.\n- `--prioritize` — rank open nodes by discussion heat (comments, participants, reactions, inbound refs, time open); the ranking is also always present in `--json` output as `priorities`.\n- `--cluster` emits the prompt for you; `--cluster-run claude|codex` shells out.\n- `reconcile --repo owner\u002Frepo` inventories the open backlog without labels; `--format auto|json|markdown` controls its versioned output.\n- `--json out.json` writes the machine-readable graph (now includes `components` and `overlaps`); `--no-snapshot` skips persistence.\n- `--html out.html` writes a self-contained master–detail explorer (Geist-styled, no server — `open` it). `--clusters clusters.json` groups the explorer by agent-named clusters and pins a **Cleanup** checklist as the default view. The file is either `[{label, root_cause?, members:[{key, verdict?}]}]` or `{clusters:[…], cleanup:[{key?, text}]}` — the same shape the `--cluster` step produces, so feed your whole triage (clusters + the close\u002Fcredit cleanup list) back into the UI.\n\n## How it reads the graph\n\n- **Two edge sources.** Text mentions (body + comments) and structural links (timeline cross-references, connected events, closing refs) via GraphQL. Structural links catch attached PRs that never appear in the body text — the reason a text grep alone misses orphans.\n- **PR triage metadata.** Each PR node carries `review`, draft\u002Fmergeable state, `+adds\u002F-dels across Nf`, `updated \u003Cdate>` (staleness), and the file paths it touches — all in the one node query, no extra requests.\n- **Heat signals.** Every node also carries comment count, distinct participants, reactions, and createdAt in the same query — the inputs to `--prioritize`.\n- **File-overlap detection.** Open PRs whose changed-file sets intersect are paired as possible duplicates\u002Fconflicts; a shared closing issue promotes the pair to a likely duplicate.\n- **Derived triage.** Open PRs are marked superseded when they share a closing target with merged work, or possibly superseded when they are structurally linked to an issue closed by a later merged PR. `competing` (>1 open PR closes an issue) and `claims-close-no-link` (a `fixes #N` that won't auto-close) are computed and attached per node.\n- **Attribution.** Each node carries its author and who mentioned it; each edge carries the actor and date.\n- **State is fetched live per node** (OPEN\u002FCLOSED\u002FMERGED), never trusted from a cross-reference event, which can be stale.\n- **Snapshot + diff.** Graph runs compare the same seeds. Reconcile runs compare the repository even when its open seed set changes, including a transition to zero open items. Incomplete coverage suppresses unsafe new or resolved claims. Every run persists to `~\u002F.xref\u002F` unless `--no-snapshot` is set.\n\n## Guardrails\n\n- Report the graph to the user. Never post a comment, review, edit, or other mutation to GitHub.\n- A merged relationship is not behavioral proof. Never close an issue from `verify-completed` without checking current code and behavior.\n- Before opening a PR for an issue, run xref on it first: an existing open PR, a superseded one, or a file-overlap pair means the work may already be done — coordinate and credit instead of duplicating.\n- Cross-repo refs are fetched one hop and shown; external non-GitHub links are collected, with loopback\u002Fexample\u002FCI hosts filtered as noise.\n",{"data":42,"body":44},{"name":4,"description":6,"compatibility":43},"Requires the `xref` command on PATH. Install from source with `gh repo clone vercel-labs\u002Fxref && cd xref && bun install --frozen-lockfile && bun link`. Also needs an authenticated `gh`, Bun, and network access to the GitHub API. Snapshots persist under ~\u002F.xref\u002F. Clustering runs in the calling agent's context, or shells out to `claude` or `codex` with `--cluster-run`.",{"type":45,"children":46},"root",[47,54,83,90,559,565,648,653,752,789,795,1023,1029,1177,1183,1213],{"type":48,"tag":49,"props":50,"children":51},"element","h1",{"id":4},[52],{"type":53,"value":4},"text",{"type":48,"tag":55,"props":56,"children":57},"p",{},[58,60,66,68,73,75,81],{"type":53,"value":59},"Take a ",{"type":48,"tag":61,"props":62,"children":63},"strong",{},[64],{"type":53,"value":65},"snapshot",{"type":53,"value":67}," of everything a GitHub PR\u002Fissue connects to, so no ",{"type":48,"tag":61,"props":69,"children":70},{},[71],{"type":53,"value":72},"orphan",{"type":53,"value":74}," gets left behind — and so you never open a PR that duplicates work already in flight. The CLI is the hands (crawls, guards, classifies, attributes, persists); you are the brain (read the graph, run the one semantic step it hands back). ",{"type":48,"tag":76,"props":77,"children":79},"code",{"className":78},[],[80],{"type":53,"value":4},{"type":53,"value":82}," is a globally-installed command (if it is missing, install it per compatibility above).",{"type":48,"tag":84,"props":85,"children":87},"h2",{"id":86},"steps",[88],{"type":53,"value":89},"Steps",{"type":48,"tag":91,"props":92,"children":93},"ol",{},[94,382,463,473,498,539,549],{"type":48,"tag":95,"props":96,"children":97},"li",{},[98,103,193,197,199,205,207,213,215,220,222,228,230,233,235],{"type":48,"tag":61,"props":99,"children":100},{},[101],{"type":53,"value":102},"Crawl the seed.",{"type":48,"tag":104,"props":105,"children":110},"pre",{"className":106,"code":107,"language":108,"meta":109,"style":109},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","xref \u003Curl|number> --repo owner\u002Frepo [--depth N] [--cluster] [--prioritize]\n","bash","",[111],{"type":48,"tag":76,"props":112,"children":113},{"__ignoreMap":109},[114],{"type":48,"tag":115,"props":116,"children":119},"span",{"class":117,"line":118},"line",1,[120,125,131,137,142,147,153,158,163,168,173,178,183,188],{"type":48,"tag":115,"props":121,"children":123},{"style":122},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[124],{"type":53,"value":4},{"type":48,"tag":115,"props":126,"children":128},{"style":127},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[129],{"type":53,"value":130}," \u003C",{"type":48,"tag":115,"props":132,"children":134},{"style":133},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[135],{"type":53,"value":136},"url",{"type":48,"tag":115,"props":138,"children":139},{"style":127},[140],{"type":53,"value":141},"|",{"type":48,"tag":115,"props":143,"children":144},{"style":122},[145],{"type":53,"value":146},"number",{"type":48,"tag":115,"props":148,"children":150},{"style":149},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[151],{"type":53,"value":152},"> ",{"type":48,"tag":115,"props":154,"children":155},{"style":133},[156],{"type":53,"value":157},"--repo",{"type":48,"tag":115,"props":159,"children":160},{"style":133},[161],{"type":53,"value":162}," owner\u002Frepo",{"type":48,"tag":115,"props":164,"children":165},{"style":149},[166],{"type":53,"value":167}," [--depth ",{"type":48,"tag":115,"props":169,"children":170},{"style":133},[171],{"type":53,"value":172},"N]",{"type":48,"tag":115,"props":174,"children":175},{"style":149},[176],{"type":53,"value":177}," [--cluster] ",{"type":48,"tag":115,"props":179,"children":180},{"style":127},[181],{"type":53,"value":182},"[",{"type":48,"tag":115,"props":184,"children":185},{"style":149},[186],{"type":53,"value":187},"--prioritize",{"type":48,"tag":115,"props":189,"children":190},{"style":127},[191],{"type":53,"value":192},"]\n",{"type":48,"tag":194,"props":195,"children":196},"br",{},[],{"type":53,"value":198},"Multi-seed \u002F backlog survey: ",{"type":48,"tag":76,"props":200,"children":202},{"className":201},[],[203],{"type":53,"value":204},"--seeds 1,2,3",{"type":53,"value":206}," or ",{"type":48,"tag":76,"props":208,"children":210},{"className":209},[],[211],{"type":53,"value":212},"--label \u003Clabel>",{"type":53,"value":214},". Add ",{"type":48,"tag":76,"props":216,"children":218},{"className":217},[],[219],{"type":53,"value":187},{"type":53,"value":221}," when the ask is \"what should I fix first\". ",{"type":48,"tag":76,"props":223,"children":225},{"className":224},[],[226],{"type":53,"value":227},"xref --help",{"type":53,"value":229}," lists every flag.\nDone when the CLI has printed the Nodes list and the orphan checklist.",{"type":48,"tag":194,"props":231,"children":232},{},[],{"type":53,"value":234},"Map the ask onto the invocation:",{"type":48,"tag":236,"props":237,"children":238},"table",{},[239,258],{"type":48,"tag":240,"props":241,"children":242},"thead",{},[243],{"type":48,"tag":244,"props":245,"children":246},"tr",{},[247,253],{"type":48,"tag":248,"props":249,"children":250},"th",{},[251],{"type":53,"value":252},"The user asks",{"type":48,"tag":248,"props":254,"children":255},{},[256],{"type":53,"value":257},"Run",{"type":48,"tag":259,"props":260,"children":261},"tbody",{},[262,280,297,316,335,352,369],{"type":48,"tag":244,"props":263,"children":264},{},[265,271],{"type":48,"tag":266,"props":267,"children":268},"td",{},[269],{"type":53,"value":270},"\"what's attached to this issue\u002FPR\", \"check before I fix it\"",{"type":48,"tag":266,"props":272,"children":273},{},[274],{"type":48,"tag":76,"props":275,"children":277},{"className":276},[],[278],{"type":53,"value":279},"xref \u003Cn> --repo \u003Co\u002Fr> --depth 2",{"type":48,"tag":244,"props":281,"children":282},{},[283,288],{"type":48,"tag":266,"props":284,"children":285},{},[286],{"type":53,"value":287},"\"what should I fix first\", \"most impactful issues\"",{"type":48,"tag":266,"props":289,"children":290},{},[291],{"type":48,"tag":76,"props":292,"children":294},{"className":293},[],[295],{"type":53,"value":296},"xref --label \u003Clabel> --repo \u003Co\u002Fr> --prioritize",{"type":48,"tag":244,"props":298,"children":299},{},[300,305],{"type":48,"tag":266,"props":301,"children":302},{},[303],{"type":53,"value":304},"\"which PRs are duplicating each other\"",{"type":48,"tag":266,"props":306,"children":307},{},[308,314],{"type":48,"tag":76,"props":309,"children":311},{"className":310},[],[312],{"type":53,"value":313},"xref --seeds \u003Cn,n,n> --repo \u003Co\u002Fr>",{"type":53,"value":315}," and read the overlap section",{"type":48,"tag":244,"props":317,"children":318},{},[319,324],{"type":48,"tag":266,"props":320,"children":321},{},[322],{"type":53,"value":323},"\"which issues have no PR\" \u002F \"which have competing PRs\"",{"type":48,"tag":266,"props":325,"children":326},{},[327,333],{"type":48,"tag":76,"props":328,"children":330},{"className":329},[],[331],{"type":53,"value":332},"xref --label \u003Clabel> --repo \u003Co\u002Fr>",{"type":53,"value":334}," and read the orphan checklist and flags",{"type":48,"tag":244,"props":336,"children":337},{},[338,343],{"type":48,"tag":266,"props":339,"children":340},{},[341],{"type":53,"value":342},"\"clean\u002Freconcile the whole backlog\", including repos without labels",{"type":48,"tag":266,"props":344,"children":345},{},[346],{"type":48,"tag":76,"props":347,"children":349},{"className":348},[],[350],{"type":53,"value":351},"xref reconcile --repo \u003Co\u002Fr> --format markdown",{"type":48,"tag":244,"props":353,"children":354},{},[355,360],{"type":48,"tag":266,"props":356,"children":357},{},[358],{"type":53,"value":359},"\"cluster my backlog by root cause\"",{"type":48,"tag":266,"props":361,"children":362},{},[363],{"type":48,"tag":76,"props":364,"children":366},{"className":365},[],[367],{"type":53,"value":368},"xref --seeds \u003Cn,n,n> --repo \u003Co\u002Fr> --cluster",{"type":48,"tag":244,"props":370,"children":371},{},[372,377],{"type":48,"tag":266,"props":373,"children":374},{},[375],{"type":53,"value":376},"\"what changed since last time\"",{"type":48,"tag":266,"props":378,"children":379},{},[380],{"type":53,"value":381},"re-run the same seeds; the snapshot diff is automatic",{"type":48,"tag":95,"props":383,"children":384},{},[385,390,392],{"type":48,"tag":61,"props":386,"children":387},{},[388],{"type":53,"value":389},"Surface the orphans and hazards.",{"type":53,"value":391}," Relay the orphan checklist to the user, most-actionable first:",{"type":48,"tag":393,"props":394,"children":395},"ul",{},[396,416,427,439,458],{"type":48,"tag":95,"props":397,"children":398},{},[399,401,406,408,414],{"type":53,"value":400},"⚠️ ",{"type":48,"tag":61,"props":402,"children":403},{},[404],{"type":53,"value":405},"SUPERSEDED",{"type":53,"value":407}," PRs — a merged PR already shipped this work; candidate to close ",{"type":48,"tag":409,"props":410,"children":411},"em",{},[412],{"type":53,"value":413},"with credit",{"type":53,"value":415},".",{"type":48,"tag":95,"props":417,"children":418},{},[419,420,425],{"type":53,"value":400},{"type":48,"tag":61,"props":421,"children":422},{},[423],{"type":53,"value":424},"POSSIBLY SUPERSEDED",{"type":53,"value":426}," PRs — the PR is structurally linked to an issue that a later merged PR closed; verify scope, then close with credit if the merged work covers it.",{"type":48,"tag":95,"props":428,"children":429},{},[430,432,437],{"type":53,"value":431},"⚠ ",{"type":48,"tag":61,"props":433,"children":434},{},[435],{"type":53,"value":436},"competing",{"type":53,"value":438}," PRs — two open PRs close the same issue; pick one, credit both.",{"type":48,"tag":95,"props":440,"children":441},{},[442,443,448,450,456],{"type":53,"value":431},{"type":48,"tag":61,"props":444,"children":445},{},[446],{"type":53,"value":447},"claims-close-no-link",{"type":53,"value":449}," — a PR says ",{"type":48,"tag":76,"props":451,"children":453},{"className":452},[],[454],{"type":53,"value":455},"fixes #N",{"type":53,"value":457}," (often in the title) but has no structural closing link, so merging it silently won't auto-close the issue.",{"type":48,"tag":95,"props":459,"children":460},{},[461],{"type":53,"value":462},"Then the remaining open related issues\u002FPRs.\nDone when every open, superseded, competing, and flagged node is named — silence on a node is a miss.",{"type":48,"tag":95,"props":464,"children":465},{},[466,471],{"type":48,"tag":61,"props":467,"children":468},{},[469],{"type":53,"value":470},"Read the overlap section.",{"type":53,"value":472}," If a \"Possible duplicate \u002F overlapping PRs (shared files)\" section is present, relay it: each pair of open PRs that touch the same files is a likely duplicate or merge conflict, and a pair that also closes the same issue is a near-certain duplicate. This is the objective duplication signal — trust it over title similarity.",{"type":48,"tag":95,"props":474,"children":475},{},[476,481,483,488,490,496],{"type":48,"tag":61,"props":477,"children":478},{},[479],{"type":53,"value":480},"Relay the triage priority.",{"type":53,"value":482}," With ",{"type":48,"tag":76,"props":484,"children":486},{"className":485},[],[487],{"type":53,"value":187},{"type":53,"value":489},", the output ends with a \"Triage priority\" ranking of every open node by discussion heat — ",{"type":48,"tag":76,"props":491,"children":493},{"className":492},[],[494],{"type":53,"value":495},"comments×3 + participants×2 + reactions×2 + inbound refs×2 + min(12, daysOpen\u002F30)",{"type":53,"value":497},". This encodes \"fix the most impactful issues, not inbox zero\": lots of discussion and\u002For obvious frustration first. Relay the top of the ranking with each node's raw signals (they are printed next to the score) so the user can override the order; the score is a sort key, not a verdict.",{"type":48,"tag":95,"props":499,"children":500},{},[501,506,507,513,515,521,523,529,531,537],{"type":48,"tag":61,"props":502,"children":503},{},[504],{"type":53,"value":505},"Run the cluster step.",{"type":53,"value":482},{"type":48,"tag":76,"props":508,"children":510},{"className":509},[],[511],{"type":53,"value":512},"--cluster",{"type":53,"value":514},", the CLI prints a fenced ",{"type":48,"tag":76,"props":516,"children":518},{"className":517},[],[519],{"type":53,"value":520},"cluster-prompt",{"type":53,"value":522}," block listing each node's edges in ",{"type":48,"tag":76,"props":524,"children":526},{"className":525},[],[527],{"type":53,"value":528},"[brackets]",{"type":53,"value":530},". That block is a sub-task addressed to you: cluster by the edge structure and shared defect (not title keywords), then present the root-cause clusters. This step is done only once the clusters exist in your reply — showing the CLI output is not doing it. (For unattended runs, pass ",{"type":48,"tag":76,"props":532,"children":534},{"className":533},[],[535],{"type":53,"value":536},"--cluster-run claude|codex",{"type":53,"value":538}," so the CLI shells out instead.)",{"type":48,"tag":95,"props":540,"children":541},{},[542,547],{"type":48,"tag":61,"props":543,"children":544},{},[545],{"type":53,"value":546},"Offer the hub re-seeds.",{"type":53,"value":548}," If the output has a \"Hubs not expanded\" section, give the user the exact re-seed command it printed for each hub — that is how the neighborhood behind a tracking issue gets explored without pulling the whole tracker.",{"type":48,"tag":95,"props":550,"children":551},{},[552,557],{"type":48,"tag":61,"props":553,"children":554},{},[555],{"type":53,"value":556},"Report what changed.",{"type":53,"value":558}," If a \"Since last snapshot\" diff is present, relay the new nodes, state changes, and new mentions\u002Flinks with who made them.",{"type":48,"tag":84,"props":560,"children":562},{"id":561},"reconcile-mode",[563],{"type":53,"value":564},"Reconcile mode",{"type":48,"tag":55,"props":566,"children":567},{},[568,570,576,578,584,586,592,594,599,601,607,609,615,617,623,625,631,633,639,641,647],{"type":53,"value":569},"Use ",{"type":48,"tag":76,"props":571,"children":573},{"className":572},[],[574],{"type":53,"value":575},"xref reconcile --repo owner\u002Frepo --format json",{"type":53,"value":577}," when another tool or agent will consume the result. Add ",{"type":48,"tag":76,"props":579,"children":581},{"className":580},[],[582],{"type":53,"value":583},"--no-snapshot",{"type":53,"value":585}," when the caller must leave local state unchanged. The JSON carries ",{"type":48,"tag":76,"props":587,"children":589},{"className":588},[],[590],{"type":53,"value":591},"schemaVersion",{"type":53,"value":593},", counts, ordered items, structured evidence, crawl limits, repository-level history, and contextual next steps. Each evidence object has a stable ",{"type":48,"tag":76,"props":595,"children":597},{"className":596},[],[598],{"type":53,"value":76},{"type":53,"value":600},", a human ",{"type":48,"tag":76,"props":602,"children":604},{"className":603},[],[605],{"type":53,"value":606},"summary",{"type":53,"value":608},", and exact ",{"type":48,"tag":76,"props":610,"children":612},{"className":611},[],[613],{"type":53,"value":614},"related",{"type":53,"value":616}," node keys. ",{"type":48,"tag":76,"props":618,"children":620},{"className":619},[],[621],{"type":53,"value":622},"history",{"type":53,"value":624}," compares against the previous report for the same repository and exposes added, changed, and resolved actions plus coverage regression or recovery. Run ",{"type":48,"tag":76,"props":626,"children":628},{"className":627},[],[629],{"type":53,"value":630},"xref schema",{"type":53,"value":632}," before building a durable integration and inspect both ",{"type":48,"tag":76,"props":634,"children":636},{"className":635},[],[637],{"type":53,"value":638},"githubMutations",{"type":53,"value":640}," and ",{"type":48,"tag":76,"props":642,"children":644},{"className":643},[],[645],{"type":53,"value":646},"localWrites",{"type":53,"value":415},{"type":48,"tag":55,"props":649,"children":650},{},[651],{"type":53,"value":652},"Treat its actions as a verification queue:",{"type":48,"tag":393,"props":654,"children":655},{},[656,667,678,689,700,719,730,741],{"type":48,"tag":95,"props":657,"children":658},{},[659,665],{"type":48,"tag":76,"props":660,"children":662},{"className":661},[],[663],{"type":53,"value":664},"close-superseded",{"type":53,"value":666},": verify scope parity, credit the contributor, then close if fully covered.",{"type":48,"tag":95,"props":668,"children":669},{},[670,676],{"type":48,"tag":76,"props":671,"children":673},{"className":672},[],[674],{"type":53,"value":675},"verify-superseded",{"type":53,"value":677},": compare both implementations before deciding.",{"type":48,"tag":95,"props":679,"children":680},{},[681,687],{"type":48,"tag":76,"props":682,"children":684},{"className":683},[],[685],{"type":53,"value":686},"resolve-competing",{"type":53,"value":688},": select one implementation path and respond to every contributor.",{"type":48,"tag":95,"props":690,"children":691},{},[692,698],{"type":48,"tag":76,"props":693,"children":695},{"className":694},[],[696],{"type":53,"value":697},"repair-closing-link",{"type":53,"value":699},": correct the GitHub closing relationship before merge.",{"type":48,"tag":95,"props":701,"children":702},{},[703,709,711,717],{"type":48,"tag":76,"props":704,"children":706},{"className":705},[],[707],{"type":53,"value":708},"verify-completed",{"type":53,"value":710},": check current ",{"type":48,"tag":76,"props":712,"children":714},{"className":713},[],[715],{"type":53,"value":716},"main",{"type":53,"value":718},", acceptance criteria, and live behavior before closing the issue.",{"type":48,"tag":95,"props":720,"children":721},{},[722,728],{"type":48,"tag":76,"props":723,"children":725},{"className":724},[],[726],{"type":53,"value":727},"review-open-pr",{"type":53,"value":729},": run the repository's exact-SHA review gate.",{"type":48,"tag":95,"props":731,"children":732},{},[733,739],{"type":48,"tag":76,"props":734,"children":736},{"className":735},[],[737],{"type":53,"value":738},"keep-linked",{"type":53,"value":740},": leave it open while linked work is active.",{"type":48,"tag":95,"props":742,"children":743},{},[744,750],{"type":48,"tag":76,"props":745,"children":747},{"className":746},[],[748],{"type":53,"value":749},"keep-untracked",{"type":53,"value":751},": reproduce or inspect before prioritizing.",{"type":48,"tag":55,"props":753,"children":754},{},[755,757,763,765,771,773,779,781,787],{"type":53,"value":756},"If ",{"type":48,"tag":76,"props":758,"children":760},{"className":759},[],[761],{"type":53,"value":762},"limits.seedLimitReached",{"type":53,"value":764}," is true, ",{"type":48,"tag":76,"props":766,"children":768},{"className":767},[],[769],{"type":53,"value":770},"limits.cappedOut",{"type":53,"value":772}," is non-empty, or ",{"type":48,"tag":76,"props":774,"children":776},{"className":775},[],[777],{"type":53,"value":778},"limits.fetchFailures",{"type":53,"value":780}," is non-empty, report the incomplete coverage. Increase ",{"type":48,"tag":76,"props":782,"children":784},{"className":783},[],[785],{"type":53,"value":786},"--max-nodes",{"type":53,"value":788},", re-seed the omitted neighborhood, or retry failed nodes before claiming the backlog was fully reconciled.",{"type":48,"tag":84,"props":790,"children":792},{"id":791},"flags",[793],{"type":53,"value":794},"Flags",{"type":48,"tag":393,"props":796,"children":797},{},[798,824,835,854,873,898,915,934,967],{"type":48,"tag":95,"props":799,"children":800},{},[801,807,809,815,817,823],{"type":48,"tag":76,"props":802,"children":804},{"className":803},[],[805],{"type":53,"value":806},"--repo owner\u002Frepo",{"type":53,"value":808}," — required for bare numbers, ",{"type":48,"tag":76,"props":810,"children":812},{"className":811},[],[813],{"type":53,"value":814},"--seeds",{"type":53,"value":816},", ",{"type":48,"tag":76,"props":818,"children":820},{"className":819},[],[821],{"type":53,"value":822},"--label",{"type":53,"value":415},{"type":48,"tag":95,"props":825,"children":826},{},[827,833],{"type":48,"tag":76,"props":828,"children":830},{"className":829},[],[831],{"type":53,"value":832},"--depth N",{"type":53,"value":834}," (default 2) — same-repo recursion; cross-repo refs are fetched one hop, not expanded.",{"type":48,"tag":95,"props":836,"children":837},{},[838,844,846,852],{"type":48,"tag":76,"props":839,"children":841},{"className":840},[],[842],{"type":53,"value":843},"--seeds a,b,c",{"type":53,"value":845}," \u002F ",{"type":48,"tag":76,"props":847,"children":849},{"className":848},[],[850],{"type":53,"value":851},"--label L",{"type":53,"value":853}," — backlog mode; output adds connected components.",{"type":48,"tag":95,"props":855,"children":856},{},[857,863,865,871],{"type":48,"tag":76,"props":858,"children":860},{"className":859},[],[861],{"type":53,"value":862},"--max-nodes N",{"type":53,"value":864}," (80), ",{"type":48,"tag":76,"props":866,"children":868},{"className":867},[],[869],{"type":53,"value":870},"--hub-threshold N",{"type":53,"value":872}," (12) — crawl guards.",{"type":48,"tag":95,"props":874,"children":875},{},[876,881,883,889,891,897],{"type":48,"tag":76,"props":877,"children":879},{"className":878},[],[880],{"type":53,"value":187},{"type":53,"value":882}," — rank open nodes by discussion heat (comments, participants, reactions, inbound refs, time open); the ranking is also always present in ",{"type":48,"tag":76,"props":884,"children":886},{"className":885},[],[887],{"type":53,"value":888},"--json",{"type":53,"value":890}," output as ",{"type":48,"tag":76,"props":892,"children":894},{"className":893},[],[895],{"type":53,"value":896},"priorities",{"type":53,"value":415},{"type":48,"tag":95,"props":899,"children":900},{},[901,906,908,913],{"type":48,"tag":76,"props":902,"children":904},{"className":903},[],[905],{"type":53,"value":512},{"type":53,"value":907}," emits the prompt for you; ",{"type":48,"tag":76,"props":909,"children":911},{"className":910},[],[912],{"type":53,"value":536},{"type":53,"value":914}," shells out.",{"type":48,"tag":95,"props":916,"children":917},{},[918,924,926,932],{"type":48,"tag":76,"props":919,"children":921},{"className":920},[],[922],{"type":53,"value":923},"reconcile --repo owner\u002Frepo",{"type":53,"value":925}," inventories the open backlog without labels; ",{"type":48,"tag":76,"props":927,"children":929},{"className":928},[],[930],{"type":53,"value":931},"--format auto|json|markdown",{"type":53,"value":933}," controls its versioned output.",{"type":48,"tag":95,"props":935,"children":936},{},[937,943,945,951,952,958,960,965],{"type":48,"tag":76,"props":938,"children":940},{"className":939},[],[941],{"type":53,"value":942},"--json out.json",{"type":53,"value":944}," writes the machine-readable graph (now includes ",{"type":48,"tag":76,"props":946,"children":948},{"className":947},[],[949],{"type":53,"value":950},"components",{"type":53,"value":640},{"type":48,"tag":76,"props":953,"children":955},{"className":954},[],[956],{"type":53,"value":957},"overlaps",{"type":53,"value":959},"); ",{"type":48,"tag":76,"props":961,"children":963},{"className":962},[],[964],{"type":53,"value":583},{"type":53,"value":966}," skips persistence.",{"type":48,"tag":95,"props":968,"children":969},{},[970,976,978,984,986,992,994,999,1001,1007,1008,1014,1016,1021],{"type":48,"tag":76,"props":971,"children":973},{"className":972},[],[974],{"type":53,"value":975},"--html out.html",{"type":53,"value":977}," writes a self-contained master–detail explorer (Geist-styled, no server — ",{"type":48,"tag":76,"props":979,"children":981},{"className":980},[],[982],{"type":53,"value":983},"open",{"type":53,"value":985}," it). ",{"type":48,"tag":76,"props":987,"children":989},{"className":988},[],[990],{"type":53,"value":991},"--clusters clusters.json",{"type":53,"value":993}," groups the explorer by agent-named clusters and pins a ",{"type":48,"tag":61,"props":995,"children":996},{},[997],{"type":53,"value":998},"Cleanup",{"type":53,"value":1000}," checklist as the default view. The file is either ",{"type":48,"tag":76,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":53,"value":1006},"[{label, root_cause?, members:[{key, verdict?}]}]",{"type":53,"value":206},{"type":48,"tag":76,"props":1009,"children":1011},{"className":1010},[],[1012],{"type":53,"value":1013},"{clusters:[…], cleanup:[{key?, text}]}",{"type":53,"value":1015}," — the same shape the ",{"type":48,"tag":76,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":53,"value":512},{"type":53,"value":1022}," step produces, so feed your whole triage (clusters + the close\u002Fcredit cleanup list) back into the UI.",{"type":48,"tag":84,"props":1024,"children":1026},{"id":1025},"how-it-reads-the-graph",[1027],{"type":53,"value":1028},"How it reads the graph",{"type":48,"tag":393,"props":1030,"children":1031},{},[1032,1042,1075,1091,1101,1132,1142,1152],{"type":48,"tag":95,"props":1033,"children":1034},{},[1035,1040],{"type":48,"tag":61,"props":1036,"children":1037},{},[1038],{"type":53,"value":1039},"Two edge sources.",{"type":53,"value":1041}," Text mentions (body + comments) and structural links (timeline cross-references, connected events, closing refs) via GraphQL. Structural links catch attached PRs that never appear in the body text — the reason a text grep alone misses orphans.",{"type":48,"tag":95,"props":1043,"children":1044},{},[1045,1050,1052,1058,1060,1066,1067,1073],{"type":48,"tag":61,"props":1046,"children":1047},{},[1048],{"type":53,"value":1049},"PR triage metadata.",{"type":53,"value":1051}," Each PR node carries ",{"type":48,"tag":76,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":53,"value":1057},"review",{"type":53,"value":1059},", draft\u002Fmergeable state, ",{"type":48,"tag":76,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":53,"value":1065},"+adds\u002F-dels across Nf",{"type":53,"value":816},{"type":48,"tag":76,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":53,"value":1072},"updated \u003Cdate>",{"type":53,"value":1074}," (staleness), and the file paths it touches — all in the one node query, no extra requests.",{"type":48,"tag":95,"props":1076,"children":1077},{},[1078,1083,1085,1090],{"type":48,"tag":61,"props":1079,"children":1080},{},[1081],{"type":53,"value":1082},"Heat signals.",{"type":53,"value":1084}," Every node also carries comment count, distinct participants, reactions, and createdAt in the same query — the inputs to ",{"type":48,"tag":76,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":53,"value":187},{"type":53,"value":415},{"type":48,"tag":95,"props":1092,"children":1093},{},[1094,1099],{"type":48,"tag":61,"props":1095,"children":1096},{},[1097],{"type":53,"value":1098},"File-overlap detection.",{"type":53,"value":1100}," Open PRs whose changed-file sets intersect are paired as possible duplicates\u002Fconflicts; a shared closing issue promotes the pair to a likely duplicate.",{"type":48,"tag":95,"props":1102,"children":1103},{},[1104,1109,1111,1116,1118,1123,1125,1130],{"type":48,"tag":61,"props":1105,"children":1106},{},[1107],{"type":53,"value":1108},"Derived triage.",{"type":53,"value":1110}," Open PRs are marked superseded when they share a closing target with merged work, or possibly superseded when they are structurally linked to an issue closed by a later merged PR. ",{"type":48,"tag":76,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":53,"value":436},{"type":53,"value":1117}," (>1 open PR closes an issue) and ",{"type":48,"tag":76,"props":1119,"children":1121},{"className":1120},[],[1122],{"type":53,"value":447},{"type":53,"value":1124}," (a ",{"type":48,"tag":76,"props":1126,"children":1128},{"className":1127},[],[1129],{"type":53,"value":455},{"type":53,"value":1131}," that won't auto-close) are computed and attached per node.",{"type":48,"tag":95,"props":1133,"children":1134},{},[1135,1140],{"type":48,"tag":61,"props":1136,"children":1137},{},[1138],{"type":53,"value":1139},"Attribution.",{"type":53,"value":1141}," Each node carries its author and who mentioned it; each edge carries the actor and date.",{"type":48,"tag":95,"props":1143,"children":1144},{},[1145,1150],{"type":48,"tag":61,"props":1146,"children":1147},{},[1148],{"type":53,"value":1149},"State is fetched live per node",{"type":53,"value":1151}," (OPEN\u002FCLOSED\u002FMERGED), never trusted from a cross-reference event, which can be stale.",{"type":48,"tag":95,"props":1153,"children":1154},{},[1155,1160,1162,1168,1170,1175],{"type":48,"tag":61,"props":1156,"children":1157},{},[1158],{"type":53,"value":1159},"Snapshot + diff.",{"type":53,"value":1161}," Graph runs compare the same seeds. Reconcile runs compare the repository even when its open seed set changes, including a transition to zero open items. Incomplete coverage suppresses unsafe new or resolved claims. Every run persists to ",{"type":48,"tag":76,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":53,"value":1167},"~\u002F.xref\u002F",{"type":53,"value":1169}," unless ",{"type":48,"tag":76,"props":1171,"children":1173},{"className":1172},[],[1174],{"type":53,"value":583},{"type":53,"value":1176}," is set.",{"type":48,"tag":84,"props":1178,"children":1180},{"id":1179},"guardrails",[1181],{"type":53,"value":1182},"Guardrails",{"type":48,"tag":393,"props":1184,"children":1185},{},[1186,1191,1203,1208],{"type":48,"tag":95,"props":1187,"children":1188},{},[1189],{"type":53,"value":1190},"Report the graph to the user. Never post a comment, review, edit, or other mutation to GitHub.",{"type":48,"tag":95,"props":1192,"children":1193},{},[1194,1196,1201],{"type":53,"value":1195},"A merged relationship is not behavioral proof. Never close an issue from ",{"type":48,"tag":76,"props":1197,"children":1199},{"className":1198},[],[1200],{"type":53,"value":708},{"type":53,"value":1202}," without checking current code and behavior.",{"type":48,"tag":95,"props":1204,"children":1205},{},[1206],{"type":53,"value":1207},"Before opening a PR for an issue, run xref on it first: an existing open PR, a superseded one, or a file-overlap pair means the work may already be done — coordinate and credit instead of duplicating.",{"type":48,"tag":95,"props":1209,"children":1210},{},[1211],{"type":53,"value":1212},"Cross-repo refs are fetched one hop and shown; external non-GitHub links are collected, with loopback\u002Fexample\u002FCI hosts filtered as noise.",{"type":48,"tag":1214,"props":1215,"children":1216},"style",{},[1217],{"type":53,"value":1218},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1220,"total":118},[1221],{"slug":4,"name":4,"fn":5,"description":6,"org":1222,"tags":1223,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1224,1225,1226,1227],{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"items":1229,"total":1400},[1230,1248,1260,1272,1287,1304,1316,1329,1342,1355,1366,1385],{"slug":1231,"name":1231,"fn":1232,"description":1233,"org":1234,"tags":1235,"stars":1245,"repoUrl":1246,"updatedAt":1247},"agent-browser","automate browser interactions for AI agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to \"open a website\", \"fill out a form\", \"click a button\", \"take a screenshot\", \"scrape data from a page\", \"test this web app\", \"login to a site\", \"automate browser actions\", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1236,1239,1242],{"name":1237,"slug":1238,"type":15},"Agents","agents",{"name":1240,"slug":1241,"type":15},"Automation","automation",{"name":1243,"slug":1244,"type":15},"Browser Automation","browser-automation",38346,"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fagent-browser","2026-07-20T05:55:17.314329",{"slug":1249,"name":1249,"fn":1250,"description":1251,"org":1252,"tags":1253,"stars":1245,"repoUrl":1246,"updatedAt":1259},"agentcore","run browser automation on AWS Bedrock","Run agent-browser on AWS Bedrock AgentCore cloud browsers. Use when the user wants to use AgentCore, run browser automation on AWS, use a cloud browser with AWS credentials, or needs a managed browser session backed by AWS infrastructure. Triggers include \"use agentcore\", \"run on AWS\", \"cloud browser with AWS\", \"bedrock browser\", \"agentcore session\", or any task requiring AWS-hosted browser automation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1254,1255,1258],{"name":1240,"slug":1241,"type":15},{"name":1256,"slug":1257,"type":15},"AWS","aws",{"name":1243,"slug":1244,"type":15},"2026-07-17T06:08:33.665276",{"slug":1261,"name":1261,"fn":1262,"description":1263,"org":1264,"tags":1265,"stars":1245,"repoUrl":1246,"updatedAt":1271},"core","navigate and interact with web pages","Core agent-browser usage guide. Read this before running any agent-browser commands. Covers the snapshot-and-ref workflow, navigating pages, interacting with elements (click, fill, type, select), extracting text and data, taking screenshots, managing tabs, handling forms and auth, waiting for content, running multiple browser sessions in parallel, and troubleshooting common failures. Use when the user asks to interact with a website, fill a form, click something, extract data, take a screenshot, log into a site, test a web app, or automate any browser task.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1266,1267,1268],{"name":1237,"slug":1238,"type":15},{"name":1243,"slug":1244,"type":15},{"name":1269,"slug":1270,"type":15},"Navigation","navigation","2026-08-11T04:06:12.531034",{"slug":1273,"name":1273,"fn":1274,"description":1275,"org":1276,"tags":1277,"stars":1245,"repoUrl":1246,"updatedAt":1286},"derive-client","reverse engineer internal APIs from browser traffic","Reverse-engineer a website's internal API by recording browser traffic into a HAR file, then generate a standalone client or CLI that calls the endpoints directly, with no browser needed after the first recording. Use when asked to \"derive a client\", \"build a CLI for \u003Csite>\", \"reverse engineer this site's API\", \"record network requests\", \"turn this site into an API\", or when the same site will be automated repeatedly and direct HTTP calls would beat driving the browser every time.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1278,1281,1282,1283],{"name":1279,"slug":1280,"type":15},"API Development","api-development",{"name":1240,"slug":1241,"type":15},{"name":1243,"slug":1244,"type":15},{"name":1284,"slug":1285,"type":15},"Web Scraping","web-scraping","2026-07-20T06:24:11.928835",{"slug":1288,"name":1288,"fn":1289,"description":1290,"org":1291,"tags":1292,"stars":1245,"repoUrl":1246,"updatedAt":1303},"dogfood","perform exploratory testing on web applications","Systematically explore and test a web application to find bugs, UX issues, and other problems. Use when asked to \"dogfood\", \"QA\", \"exploratory test\", \"find issues\", \"bug hunt\", \"test this app\u002Fsite\u002Fplatform\", or review the quality of a web application. Produces a structured report with full reproduction evidence -- step-by-step screenshots, repro videos, and detailed repro steps for every issue -- so findings can be handed directly to the responsible teams.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1293,1294,1297,1300],{"name":1243,"slug":1244,"type":15},{"name":1295,"slug":1296,"type":15},"Debugging","debugging",{"name":1298,"slug":1299,"type":15},"QA","qa",{"name":1301,"slug":1302,"type":15},"Testing","testing","2026-07-17T06:07:41.421482",{"slug":1305,"name":1305,"fn":1306,"description":1307,"org":1308,"tags":1309,"stars":1245,"repoUrl":1246,"updatedAt":1315},"electron","automate Electron desktop applications","Automate Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify, etc.) using agent-browser via Chrome DevTools Protocol. Use when the user needs to interact with an Electron app, automate a desktop app, connect to a running app, control a native app, or test an Electron application. Triggers include \"automate Slack app\", \"control VS Code\", \"interact with Discord app\", \"test this Electron app\", \"connect to desktop app\", or any task requiring automation of a native Electron application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1310,1311,1312],{"name":1237,"slug":1238,"type":15},{"name":1243,"slug":1244,"type":15},{"name":1313,"slug":1314,"type":15},"Desktop","desktop","2026-07-17T06:08:28.007783",{"slug":1317,"name":1317,"fn":1318,"description":1319,"org":1320,"tags":1321,"stars":1245,"repoUrl":1246,"updatedAt":1328},"slack","interact with Slack workspaces","Interact with Slack workspaces using browser automation. Use when the user needs to check unread channels, navigate Slack, send messages, extract data, find information, search conversations, or automate any Slack task. Triggers include \"check my Slack\", \"what channels have unreads\", \"send a message to\", \"search Slack for\", \"extract from Slack\", \"find who said\", or any task requiring programmatic Slack interaction.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1322,1323,1326],{"name":1243,"slug":1244,"type":15},{"name":1324,"slug":1325,"type":15},"Messaging","messaging",{"name":1327,"slug":1317,"type":15},"Slack","2026-07-17T06:08:27.679015",{"slug":1330,"name":1330,"fn":1331,"description":1332,"org":1333,"tags":1334,"stars":1245,"repoUrl":1246,"updatedAt":1341},"vercel-sandbox","run browser automation in Vercel Sandbox","Run agent-browser + Chrome inside Vercel Sandbox microVMs for browser automation from any Vercel-deployed app. Use when the user needs browser automation in a Vercel app (Next.js, SvelteKit, Nuxt, Remix, Astro, etc.), wants to run headless Chrome without binary size limits, needs persistent browser sessions across commands, or wants ephemeral isolated browser environments. Triggers include \"Vercel Sandbox browser\", \"microVM Chrome\", \"agent-browser in sandbox\", \"browser automation on Vercel\", or any task requiring Chrome in a Vercel Sandbox.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1335,1336,1337,1338],{"name":1240,"slug":1241,"type":15},{"name":1243,"slug":1244,"type":15},{"name":1301,"slug":1302,"type":15},{"name":1339,"slug":1340,"type":15},"Vercel","vercel","2026-07-17T06:08:28.349899",{"slug":1343,"name":1343,"fn":1344,"description":1345,"org":1346,"tags":1347,"stars":1352,"repoUrl":1353,"updatedAt":1354},"deploy-to-vercel","deploy applications to Vercel","Deploy applications and websites to Vercel. Use when the user requests deployment actions like \"deploy my app\", \"deploy and give me the link\", \"push this live\", or \"create a preview deployment\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1348,1351],{"name":1349,"slug":1350,"type":15},"Deployment","deployment",{"name":1339,"slug":1340,"type":15},28993,"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fagent-skills","2026-07-17T06:08:41.18374",{"slug":1356,"name":1356,"fn":1357,"description":1358,"org":1359,"tags":1360,"stars":1352,"repoUrl":1353,"updatedAt":1365},"vercel-cli-with-tokens","manage Vercel projects via CLI","Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. \"deploy to vercel\", \"set up vercel\", \"add environment variables to vercel\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1361,1363,1364],{"name":1362,"slug":30,"type":15},"CLI",{"name":1349,"slug":1350,"type":15},{"name":1339,"slug":1340,"type":15},"2026-07-17T06:08:41.84179",{"slug":1367,"name":1367,"fn":1368,"description":1369,"org":1370,"tags":1371,"stars":1352,"repoUrl":1353,"updatedAt":1384},"vercel-composition-patterns","implement scalable React composition patterns","React composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1372,1375,1378,1381],{"name":1373,"slug":1374,"type":15},"Best Practices","best-practices",{"name":1376,"slug":1377,"type":15},"Frontend","frontend",{"name":1379,"slug":1380,"type":15},"React","react",{"name":1382,"slug":1383,"type":15},"UI Components","ui-components","2026-07-17T06:05:40.576913",{"slug":1386,"name":1386,"fn":1387,"description":1388,"org":1389,"tags":1390,"stars":1352,"repoUrl":1353,"updatedAt":1399},"vercel-optimize","optimize Vercel project performance and costs","Use for Vercel cost and performance optimization on deployed projects, especially Next.js, SvelteKit, Nuxt, and limited Astro apps. Collect Vercel metrics, usage, project config, and code scan results first; investigate only metric-backed candidates; produce ranked recommendations grounded in verified files and version-aware Vercel\u002Fframework docs. Trigger for Vercel bill reduction, slow or expensive routes, caching opportunities, Function Invocations, Build Minutes, Fast Data Transfer, Core Web Vitals, Bot Management, Fluid compute, or cost breakdown requests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1391,1394,1395,1398],{"name":1392,"slug":1393,"type":15},"Cost Optimization","cost-optimization",{"name":1349,"slug":1350,"type":15},{"name":1396,"slug":1397,"type":15},"Performance","performance",{"name":1339,"slug":1340,"type":15},"2026-07-17T06:04:08.327515",95]