[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70M1BX1H1B3M7TMMD155M2M":3,"skill-same:01M70M1BX1H1B3M7TMMD155M2M":95},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":57,"ownerDescription":6,"updatedAt":58,"install":59,"resources":72},"01M70M1BX1H1B3M7TMMD155M2M","orbit",null,"Use Orbit (`glab orbit` or `orbit`) to search code and read it with callers and tests. It reads MRs, issues, and failed jobs with the code they cite. Graph queries answer relationship and aggregation questions across GitLab. Skip it for writes that `glab` handles.","viktomas\u002Fdotfiles","viktomas","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1079718?v=4","01M6BVT8PETCD406WYPFA6THY2","Tomas","01M6BVT8TG1RXM9SGZ7SE6VX3V",2,"MIT","https:\u002F\u002Fgithub.com\u002Fviktomas\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents\u002F.agents\u002Fskills\u002Forbit\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"across","graph","org","gkg","network","commands","read","gitlab","cli","knowledge-graph","api","relationship","code","query","access","knowledge","issues","search","gql","2026-11-10 10:12:30",false,"---\nname: orbit\ndescription: Use Orbit (`glab orbit` or `orbit`) to search code and read it with callers and tests. It reads MRs, issues, and failed jobs with the code they cite. Graph queries answer relationship and aggregation questions across GitLab. Skip it for writes that `glab` handles.\nversion: 0.35.14+gql\nlicense: MIT\ncompatibility: Requires the GitLab Orbit CLI (directly or through glab) and network access to the GitLab instance for commands that call the GitLab Orbit API.\nmetadata:\n  audience: developers\n  keywords: orbit, knowledge-graph, gkg, graph, query, glab\n  workflow: ai\n  source-project: gitlab-org\u002Forbit\u002Fknowledge-graph\n  source-path: skills\u002Forbit\n---\n\n# Orbit skill\n\nQuery GitLab Orbit (previously GitLab Knowledge Graph) through the flat `glab orbit` command tree. It needs glab v1.126.0 or later. Hosted commands handle authentication, response framing, and exit codes. Local commands use the managed binary and the local DuckDB graph.\n\n## Prerequisites\n\nIf a `glab orbit` command fails with \"command not found\", an auth error, or a feature-flag exit code, work through the [first-run setup](references\u002Ftroubleshooting.md#first-run-setup).\n\n## Fix inaccurate guidance\n\nIf guidance is wrong or outdated (command, flag, or behavior), tell the user.\nWith their confirmation, open a focused MR against `metadata.source-project` fixing `metadata.source-path` (one fix per MR, Conventional Commits).\nIf they decline, note the discrepancy in one line and continue with the corrected command.\n\n## Query language\n\nQueries use read-only openCypher 9-based syntax (`MATCH ... RETURN`). If you find a legacy JSON query, run `glab orbit skills get orbit-gql-migration` to convert it.\n\n## Discovery\n\n`glab orbit help` and `glab orbit \u003Ccommand> --help` are the authoritative usage references. Run `glab orbit skills` to list available skills. Run `glab orbit skills get orbit` to print the composed skill (`SKILL.md` by default), or append a path such as `references\u002Flocal\u002Fcli.md` to print a file.\n\nRun `CALL db.schema()` once per session, because the schema does not change mid-session. It lists every relationship as `(Source)-[:TYPE]->(Target)` and the properties of the common nodes, such as `User`, `Project`, `Group`, `MergeRequest`, and `WorkItem`. Run `CALL db.schema('Node')` only for a node it does not list properties for. Query syntax and paste-ready queries are in [`references\u002Fgql.md`](references\u002Fgql.md).\n\nBatch schema reads: make every schema read a question needs in one shell command, not one command per read. Each `CALL db.schema` call takes one node. On the first read, chain the overview with the nodes that the question names. Later, batch only the new node reads.\n\n```shell\nglab orbit query 'CALL db.schema()'; echo; glab orbit query \"CALL db.schema('Vulnerability')\"; echo; glab orbit query \"CALL db.schema('Pipeline')\"\n```\n\nThe named-query catalog at `GET \u002Fapi\u002Fv4\u002Forbit\u002Fquery\u002Ftemplates` is rendered in your mode. Do not reuse discovery results across users or mode changes. Entries contain only `name`, `description`, and `raw_query`; there is no client language selector. See [catalog troubleshooting](references\u002Ftroubleshooting.md#named-query-catalog).\n\nEach `glab orbit query` has fixed per-call overhead. Prefer one aggregate query, with `count(...)` in `RETURN`, over N lookups for \"how many X grouped by Y\", and batch related lookups.\n\nWhen editing Orbit docs or skills, fence executable GQL queries as `gql orbit-query` so docs smoke tests run them.\n\n## Running a query\n\nPass query text inline. The CLI builds the request envelope, so a short query needs no temporary file:\n\n```shell\nglab orbit query 'CALL db.schema()'\nglab orbit query \"CALL db.schema('Project')\"\nglab orbit query \"MATCH (p:Project {full_path: 'gitlab-org\u002Fgitlab'}) RETURN p.id, p.full_path LIMIT 1\"\n```\n\nWith a standalone install, use `orbit query` instead of `glab orbit query`. Quote the whole query for the shell; single-quoted string literals then need double quotes around the query.\n\n`--file` reads a JSON request envelope whose `query` field holds the query text, not a bare query file. `--file -` reads that envelope from stdin. Default output is `llm` (compact, agent-friendly). Pass `--response-format raw` to pipe into `jq`. Endpoints are user-scoped, so do not pass `-R owner\u002Frepo`.\n\n## Common pitfalls\n\nRead [`references\u002Fgql.md`](references\u002Fgql.md) before you construct a query. These traps recur:\n\n- At least one node needs an ID or a property filter. `LIMIT` does not bound the scan, so `MATCH (p:Project) RETURN p LIMIT 5` rejects.\n- Write relationship types after a colon: `-[:AUTHORED]->`. `-[AUTHORED]->` declares a variable and rejects.\n- Pipelines for a merge request need the `source: 'merge_request_event'` filter.\n- Prefer a single anchored node when you can bound the target directly. Extra anchor nodes can change the row shape and skew aggregate counts.\n- To find MRs that ever touched a file, use `HAS_DIFF`; see [file history](references\u002Fgql.md#merge-requests-that-touched-a-file). Use `HAS_LATEST_DIFF` for one MR's current revision.\n- Issues, epics, tasks, and incidents are the `WorkItem` node. There is no `Issue` node.\n- There is no `OR`, `XOR`, `RETURN DISTINCT`, `count(*)`, `OPTIONAL MATCH`, or `WITH`. `DISTINCT` works only inside `count()`: `count(DISTINCT pl)`.\n\n## Iteration budget\n\nResolve a user question in at most 5 query attempts, validation errors included. Changing only the row limit or the returned properties is not progress. Full rules: [`references\u002Ftroubleshooting.md`](references\u002Ftroubleshooting.md#iteration-budget-rules).\n\n## Reporting results\n\nOrbit answers come from graph queries, not an authoritative source. Flag known coverage gaps inline when they affect the result. Full guidance: [`references\u002Freporting.md`](references\u002Freporting.md).\n\n## Choose the command\n\n- `orbit grep 'a|b'` searches code, tests, config, and docs and labels each match with its enclosing definition. A plain query also searches the GitLab group behind `origin` over the network. For code only, pass the repository top-level as the path (`$(git rev-parse --show-toplevel)`). `.` scopes the search to the current directory, and widens when nothing matches there. Exit 1 means no match.\n- `orbit context \u003Cname> \u003Cpath>:\u003Clines> mr:42 job:9` reads several targets in one call. Definitions come with their callers and tests, and GitLab merge requests, issues, branches, pipelines, and jobs come with the local code they point at. A bare `orbit context` reads the current branch's merge request and CI failures.\n- `orbit query` answers relationship and aggregation questions across GitLab entities through the GitLab Orbit API. Examples: who reviewed which merge requests, or which changes to an area failed CI. Write the query in the language below.\n\n```shell\norbit grep 'retry_backoff|RetryBackoff'\norbit context src\u002Fretry.rs:40-90 retry_backoff mr:42\n```\n\nRun `grep` first, then `context` on the symbol you will change to get its callers, callees, and covering tests.\n\n\n## Managed CLI\n\n`glab orbit` downloads, verifies, and runs the GitLab Orbit CLI binary from the `orbit-cli` package (macOS, Linux, and Windows). `grep` and `context` read the local graph and index the working tree on their own. `workspace` groups the other local-graph commands (`index`, `list`, `mcp serve`, `reset`). The top-level `index` and `list` still run as deprecated aliases. `query`, `status`, and `schema` call the GitLab Orbit API.\n\nglab handles `--install`, `--update`, and `--yes` itself and forwards everything else to the binary. `--install` and `--update` are mutually exclusive. `--yes` skips the confirmation prompts, so pass it in scripts and agent runs. Put these flags before the subcommand (`glab orbit --yes status`); the binary rejects `--yes` after other subcommands, except for `setup` and `uninstall`, which take their own. glab's own `update` command also takes `--yes`. `glab help orbit` shows the wrapper help. `glab orbit help` and `glab orbit \u003Ccommand> --help` show the binary's.\n\n```shell\nglab orbit --install --yes   # install without running\nglab orbit --update          # install the latest compatible version\n```\n\nSkip the confirmation prompts for good with `glab config set orbit_cli_auto_run true` and `glab config set orbit_cli_auto_download true`. Point glab at your own build with `glab config set orbit_cli_binary_path \u002Fpath\u002Fto\u002Forbit` or the `GLAB_ORBIT_CLI_BINARY_PATH` env var. That skips download, version checks, and updates. glab records `orbit_cli_binary_version`, `orbit_cli_binary_checksum`, and `orbit_cli_last_update_check` itself. Do not set them by hand.\n\n## References\n\n| Topic | Location |\n|---|---|\n| First-run setup, exit codes, service health, iteration budget | [`references\u002Ftroubleshooting.md`](references\u002Ftroubleshooting.md) |\n| openCypher 9-based syntax and paste-ready queries | [`references\u002Fgql.md`](references\u002Fgql.md) |\n| Empty results and query validation errors | [`references\u002Fgql.md`](references\u002Fgql.md#troubleshooting) |\n| Reporting results and coverage caveats | [`references\u002Freporting.md`](references\u002Freporting.md) |\n| Maintaining this skill (contributing, doc sync) | [`references\u002Fmaintaining.md`](references\u002Fmaintaining.md) |\n","# Orbit skill\n\nQuery GitLab Orbit (previously GitLab Knowledge Graph) through the flat `glab orbit` command tree. It needs glab v1.126.0 or later. Hosted commands handle authentication, response framing, and exit codes. Local commands use the managed binary and the local DuckDB graph.\n\n## Prerequisites\n\nIf a `glab orbit` command fails with \"command not found\", an auth error, or a feature-flag exit code, work through the [first-run setup](references\u002Ftroubleshooting.md#first-run-setup).\n\n## Fix inaccurate guidance\n\nIf guidance is wrong or outdated (command, flag, or behavior), tell the user.\nWith their confirmation, open a focused MR against `metadata.source-project` fixing `metadata.source-path` (one fix per MR, Conventional Commits).\nIf they decline, note the discrepancy in one line and continue with the corrected command.\n\n## Query language\n\nQueries use read-only openCypher 9-based syntax (`MATCH ... RETURN`). If you find a legacy JSON query, run `glab orbit skills get orbit-gql-migration` to convert it.\n\n## Discovery\n\n`glab orbit help` and `glab orbit \u003Ccommand> --help` are the authoritative usage references. Run `glab orbit skills` to list available skills. Run `glab orbit skills get orbit` to print the composed skill (`SKILL.md` by default), or append a path such as `references\u002Flocal\u002Fcli.md` to print a file.\n\nRun `CALL db.schema()` once per session, because the schema does not change mid-session. It lists every relationship as `(Source)-[:TYPE]->(Target)` and the properties of the common nodes, such as `User`, `Project`, `Group`, `MergeRequest`, and `WorkItem`. Run `CALL db.schema('Node')` only for a node it does not list properties for. Query syntax and paste-ready queries are in [`references\u002Fgql.md`](references\u002Fgql.md).\n\nBatch schema reads: make every schema read a question needs in one shell command, not one command per read. Each `CALL db.schema` call takes one node. On the first read, chain the overview with the nodes that the question names. Later, batch only the new node reads.\n\n```shell\nglab orbit query 'CALL db.schema()'; echo; glab orbit query \"CALL db.schema('Vulnerability')\"; echo; glab orbit query \"CALL db.schema('Pipeline')\"\n```\n\nThe named-query catalog at `GET \u002Fapi\u002Fv4\u002Forbit\u002Fquery\u002Ftemplates` is rendered in your mode. Do not reuse discovery results across users or mode changes. Entries contain only `name`, `description`, and `raw_query`; there is no client language selector. See [catalog troubleshooting](references\u002Ftroubleshooting.md#named-query-catalog).\n\nEach `glab orbit query` has fixed per-call overhead. Prefer one aggregate query, with `count(...)` in `RETURN`, over N lookups for \"how many X grouped by Y\", and batch related lookups.\n\nWhen editing Orbit docs or skills, fence executable GQL queries as `gql orbit-query` so docs smoke tests run them.\n\n## Running a query\n\nPass query text inline. The CLI builds the request envelope, so a short query needs no temporary file:\n\n```shell\nglab orbit query 'CALL db.schema()'\nglab orbit query \"CALL db.schema('Project')\"\nglab orbit query \"MATCH (p:Project {full_path: 'gitlab-org\u002Fgitlab'}) RETURN p.id, p.full_path LIMIT 1\"\n```\n\nWith a standalone install, use `orbit query` instead of `glab orbit query`. Quote the whole query for the shell; single-quoted string literals then need double quotes around the query.\n\n`--file` reads a JSON request envelope whose `query` field holds the query text, not a bare query file. `--file -` reads that envelope from stdin. Default output is `llm` (compact, agent-friendly). Pass `--response-format raw` to pipe into `jq`. Endpoints are user-scoped, so do not pass `-R owner\u002Frepo`.\n\n## Common pitfalls\n\nRead [`references\u002Fgql.md`](references\u002Fgql.md) before you construct a query. These traps recur:\n\n- At least one node needs an ID or a property filter. `LIMIT` does not bound the scan, so `MATCH (p:Project) RETURN p LIMIT 5` rejects.\n- Write relationship types after a colon: `-[:AUTHORED]->`. `-[AUTHORED]->` declares a variable and rejects.\n- Pipelines for a merge request need the `source: 'merge_request_event'` filter.\n- Prefer a single anchored node when you can bound the target directly. Extra anchor nodes can change the row shape and skew aggregate counts.\n- To find MRs that ever touched a file, use `HAS_DIFF`; see [file history](references\u002Fgql.md#merge-requests-that-touched-a-file). Use `HAS_LATEST_DIFF` for one MR's current revision.\n- Issues, epics, tasks, and incidents are the `WorkItem` node. There is no `Issue` node.\n- There is no `OR`, `XOR`, `RETURN DISTINCT`, `count(*)`, `OPTIONAL MATCH`, or `WITH`. `DISTINCT` works only inside `count()`: `count(DISTINCT pl)`.\n\n## Iteration budget\n\nResolve a user question in at most 5 query attempts, validation errors included. Changing only the row limit or the returned properties is not progress. Full rules: [`references\u002Ftroubleshooting.md`](references\u002Ftroubleshooting.md#iteration-budget-rules).\n\n## Reporting results\n\nOrbit answers come from graph queries, not an authoritative source. Flag known coverage gaps inline when they affect the result. Full guidance: [`references\u002Freporting.md`](references\u002Freporting.md).\n\n## Choose the command\n\n- `orbit grep 'a|b'` searches code, tests, config, and docs and labels each match with its enclosing definition. A plain query also searches the GitLab group behind `origin` over the network. For code only, pass the repository top-level as the path (`$(git rev-parse --show-toplevel)`). `.` scopes the search to the current directory, and widens when nothing matches there. Exit 1 means no match.\n- `orbit context \u003Cname> \u003Cpath>:\u003Clines> mr:42 job:9` reads several targets in one call. Definitions come with their callers and tests, and GitLab merge requests, issues, branches, pipelines, and jobs come with the local code they point at. A bare `orbit context` reads the current branch's merge request and CI failures.\n- `orbit query` answers relationship and aggregation questions across GitLab entities through the GitLab Orbit API. Examples: who reviewed which merge requests, or which changes to an area failed CI. Write the query in the language below.\n\n```shell\norbit grep 'retry_backoff|RetryBackoff'\norbit context src\u002Fretry.rs:40-90 retry_backoff mr:42\n```\n\nRun `grep` first, then `context` on the symbol you will change to get its callers, callees, and covering tests.\n\n\n## Managed CLI\n\n`glab orbit` downloads, verifies, and runs the GitLab Orbit CLI binary from the `orbit-cli` package (macOS, Linux, and Windows). `grep` and `context` read the local graph and index the working tree on their own. `workspace` groups the other local-graph commands (`index`, `list`, `mcp serve`, `reset`). The top-level `index` and `list` still run as deprecated aliases. `query`, `status`, and `schema` call the GitLab Orbit API.\n\nglab handles `--install`, `--update`, and `--yes` itself and forwards everything else to the binary. `--install` and `--update` are mutually exclusive. `--yes` skips the confirmation prompts, so pass it in scripts and agent runs. Put these flags before the subcommand (`glab orbit --yes status`); the binary rejects `--yes` after other subcommands, except for `setup` and `uninstall`, which take their own. glab's own `update` command also takes `--yes`. `glab help orbit` shows the wrapper help. `glab orbit help` and `glab orbit \u003Ccommand> --help` show the binary's.\n\n```shell\nglab orbit --install --yes   # install without running\nglab orbit --update          # install the latest compatible version\n```\n\nSkip the confirmation prompts for good with `glab config set orbit_cli_auto_run true` and `glab config set orbit_cli_auto_download true`. Point glab at your own build with `glab config set orbit_cli_binary_path \u002Fpath\u002Fto\u002Forbit` or the `GLAB_ORBIT_CLI_BINARY_PATH` env var. That skips download, version checks, and updates. glab records `orbit_cli_binary_version`, `orbit_cli_binary_checksum`, and `orbit_cli_last_update_check` itself. Do not set them by hand.\n\n## References\n\n| Topic | Location |\n|---|---|\n| First-run setup, exit codes, service health, iteration budget | [`references\u002Ftroubleshooting.md`](references\u002Ftroubleshooting.md) |\n| openCypher 9-based syntax and paste-ready queries | [`references\u002Fgql.md`](references\u002Fgql.md) |\n| Empty results and query validation errors | [`references\u002Fgql.md`](references\u002Fgql.md#troubleshooting) |\n| Reporting results and coverage caveats | [`references\u002Freporting.md`](references\u002Freporting.md) |\n| Maintaining this skill (contributing, doc sync) | [`references\u002Fmaintaining.md`](references\u002Fmaintaining.md) |\n",{"name":5,"license":15,"version":43,"metadata":44,"description":7,"compatibility":50},"0.35.14+gql",{"audience":45,"keywords":46,"workflow":47,"source-path":48,"source-project":49},"developers","orbit, knowledge-graph, gkg, graph, query, glab","ai","skills\u002Forbit","gitlab-org\u002Forbit\u002Fknowledge-graph","Requires the GitLab Orbit CLI (directly or through glab) and network access to the GitLab instance for commands that call the GitLab Orbit API.","master","54bc1c5df433e13de26945c5fa80a6c1ee5510ab","agents\u002F.agents\u002Fskills\u002Forbit",1,"https:\u002F\u002Fgithub.com\u002Fviktomas\u002Fdotfiles","https:\u002F\u002Fgithub.com\u002Fviktomas","http:\u002F\u002Fblog.viktomas.com","2026-11-11 16:52:26",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add viktomas\u002Fdotfiles --skill orbit",{"tool":65,"command":66},"bunx","bunx skills add viktomas\u002Fdotfiles --skill orbit",{"tool":68,"command":69},"pnpm","pnpm dlx skills add viktomas\u002Fdotfiles --skill orbit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fviktomas\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents\u002F.agents\u002Fskills\u002Forbit\u002FSKILL.md",true,[73,79,83,87,91],{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Fgql.md","REFERENCE","参考文档",11759,"https:\u002F\u002Fgithub.com\u002Fviktomas\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents\u002F.agents\u002Fskills\u002Forbit\u002Freferences\u002Fgql.md",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Flocal\u002Fcli.md",1446,"https:\u002F\u002Fgithub.com\u002Fviktomas\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents\u002F.agents\u002Fskills\u002Forbit\u002Freferences\u002Flocal\u002Fcli.md",{"path":84,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fmaintaining.md",3686,"https:\u002F\u002Fgithub.com\u002Fviktomas\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents\u002F.agents\u002Fskills\u002Forbit\u002Freferences\u002Fmaintaining.md",{"path":88,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Freporting.md",1152,"https:\u002F\u002Fgithub.com\u002Fviktomas\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents\u002F.agents\u002Fskills\u002Forbit\u002Freferences\u002Freporting.md",{"path":92,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Ftroubleshooting.md",5015,"https:\u002F\u002Fgithub.com\u002Fviktomas\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents\u002F.agents\u002Fskills\u002Forbit\u002Freferences\u002Ftroubleshooting.md",[]]