GitHub

The bundled GitHub plugin adds public-repository link previews and a read-only reader to the Control UI. It is separate from the GitHub Copilot model provider.

Upgrading with an existing plugin allowlist

GitHub previews that previously lived in core now belong to the bundled github plugin. A nonempty plugins.allow list remains authoritative: if it omits github, both hovercards and the reader stay unavailable, and links open externally. Apus does not add a plugin to an existing allowlist during an upgrade or Doctor repair.

To restore previews, append github to your existing plugins.allow list without removing its other entries, then enable GitHub in Plugins. Keep plugins.deny and explicit disabled entries consistent with your choice. Doctor explains this recovery when an implicit allowlist exclusion blocks the feature. To intentionally keep it off and silence that notice, set plugins.entries.github.enabled: false.

Read an item beside chat

The plugin is enabled by default. Connect to the Gateway, then click a public GitHub issue, pull request, or commit link in chat. The reader opens beside the conversation with a GitHub icon and an Open on GitHub link. Hover or focus an issue or pull request link to see its preview. Login, OAuth, profile, repository, and other general GitHub pages remain ordinary links: neither native item previews nor the generic page-preview fallback fetches them. A PR or issue URL inside a login redirect query does not make the login link previewable.

Each reader tab has its own Back and Forward history. Opening the same URL selects its existing tab. Links inside the reader navigate the current tab; the + button starts another tab. Up to ten tabs stay in memory. Closing the page discards the documents and history. The reader follows the session panel’s responsive layout; on a phone it can sit below chat or expand with the panel.

The reader includes descriptions, discussion comments, published inline PR review comments with file and diff context, commit comments, and expandable file diffs. The header separates the item state, author, change counts, and PR branches. Overview, Checks, Files, and Discussion shortcuts jump to the relevant section without leaving the reader.

Pull requests show check runs and commit statuses for the exact head commit. Expand the checks summary to inspect individual results and open their source logs. Failed checks expand by default. Pending, failed, passed, skipped, empty, and unavailable results remain distinct; a partial response never implies that all checks passed. These results describe CI, not approval or merge readiness. Use Refresh to fetch the current PR and its checks again.

Descriptions and replies render named emoji shortcodes such as :white_check_mark: and :rocket: in prose, tables, link labels, and disclosure summaries. Code, URLs, unknown shortcodes, and plain emoticons such as :) stay literal.

HTML comments in descriptions and replies stay hidden, matching GitHub; literal comment examples inside code remain visible. Markdown images and standalone HTML image attachments can display inline. The GitHub plugin fetches public user attachments anonymously through the Gateway, including GitHub's attachment redirects, so they do not need browser CORS headers. Requests send no GitHub credentials, cookies, or referrer. PNG, JPEG, GIF, and WebP attachments up to 2 MiB are supported by the resolver. If resolution fails, the reader preserves the original anonymous-CORS image path; images that still cannot load retain a full-size external link. Each loaded document bounds concurrent requests and cached image data; closing its tab or replacing the document retires that cache. Script and connection policies are unchanged; remote content cannot run scripts or app widgets.

Enable or disable the plugin

Open Plugins in the Control UI to manage the GitHub plugin. The corresponding configuration is:

{
  plugins: {
    entries: {
      github: { enabled: false },
    },
  },
}

Apply the configuration through the normal Gateway configuration flow. Capability updates remove disabled readers without requiring a browser reconnect. When disabled, the plugin contributes no reader or hovercard, and GitHub links open externally.

Limits and unavailable content

Plugin author integration

GitHub uses the generic docked link-reader contribution in the Plugin SDK. The plugin owns URL matching, GitHub API requests, caching, and mapping source data into the passive reader model. The Control UI owns tabs, layout, safe rendering, and keyboard interaction.