GitHub Copilot
GitHub's agent-driven development app, on the desktop.
- Schemes
ghapp:github-app:gh:
Links
- Add a plugin marketplace
ghapp://plugins/marketplace/add?source={source} - Install a plugin
ghapp://plugins/install?source={source} - Draft an automation
ghapp://automations/new?name={name}&trigger={trigger}&time={time}&day={day}&prompt={prompt} - Start a session
ghapp://session/new?repo={repo}&mode={mode}&prompt={prompt} - Open an issue
ghapp://github.com/{owner}/{repo}/issues/{number} - Open a pull request
ghapp://github.com/{owner}/{repo}/pull/{number} - Open a repository
ghapp://github.com/{owner}/{repo} - Resume an agent task
ghapp://github.com/{owner}/{repo}/tasks/{taskId}
ghapp:// is the canonical scheme. The app also answers github-app:// and gh://, but GitHub
asks that anything you generate or publish use ghapp://.
A raw ghapp:// link does nothing on a machine without the app. For a link other people will
click — in a README, an issue, a ticket — wrap it in the hosted launcher, which opens the app
when it can and shows a fallback page when it cannot:
https://github.com/copilot/app/launch?open={the whole app link, encodeURIComponent'd}
Mind the second encoding. Query values inside an app link are already encoded once, so wrapping
encodes them again: repo=OWNER%2FREPO becomes repo%3DOWNER%252FREPO in the launcher URL.
Nothing here acts on its own. Sessions, automations, plugins and marketplaces all open a pre-filled dialog and wait for a human to confirm.
The routes that take no parameters: ghapp:// (home), ghapp://chats, ghapp://mywork,
ghapp://recent and ghapp://automations. Three more take ids the app assigns —
ghapp://automations/{id} and ghapp://automations/{id}/{runId}, both of which take
?mode=cloud for the cloud copy, and ghapp://sessions/{id} for a workspace local to the app,
which is not how you resume an agent task.