Braide integrates with GitHub to let you browse repository issues and pull requests, attach them to agent sessions, and start new sessions directly from either. This gives agents full context about the work you want done.
export GITHUB_TOKEN=ghp_your_token_here
# or
export GH_TOKEN=ghp_your_token_here
The token needs read access to issues and labels for your repositories.
The GitHub panel is available from any view — the home screen, a new session, or an existing session. There are two ways to open it:
The panel animates open and closed with a smooth slide transition. When opened via edge hover, the panel overlays the content and closes automatically when you move the cursor away.

The GitHub panel displays both issues and pull requests from the project's repository, interleaved in a single list sorted by most recently updated:
Pull requests appear in the same list as issues but are visually distinct so they can be identified at a glance:
| Kind | Leading icon | Badge |
|---|---|---|
| Open issue | Green open-circle | — |
| Closed issue | Purple checkmark | — |
| Open pull request | Green git-branch | Green PR pill beside the title |
| Merged pull request | Purple git-merge | Purple PR pill beside the title |
| Closed (unmerged) pull request | Red cross-box | Red PR pill beside the title |
The coloured PR badge that prefixes pull request titles uses the same open/merged/closed palette as the leading icon, so the state of a pull request is readable even in the compact panel width where labels are hidden.
The panel can be displayed in two widths:
| Width | Description |
|---|---|
| Compact | A narrow sidebar (320px) showing issue titles and metadata |
| Full | An expanded view (50% of the viewport) that also displays issue labels |
Click the expand/collapse chevron button in the panel header to toggle between widths. On narrow viewports (below 900px), the panel is forced to compact width.
Each row in the panel — issue or pull request — has a split button in the top-right corner that provides context-aware actions. The same attach and chat actions apply uniformly to issues and pull requests. The available actions depend on whether you have an active session.
When you are in a session (new or existing), each issue shows:
Once an issue is attached, the button changes to:
When you are on the home screen with no session selected, each issue shows only:
Hover over any button to see a tooltip describing its action:
| Button | Tooltip |
|---|---|
| Attach (paperclip) | "Attach to session" |
| Detach (unlink) | "Detach from session" |
| Chat (speech bubble) | "Start new session with this issue" |
| Chevron (dropdown) | "Start new session with this issue" |
Attached GitHub issues go through two visual phases in the interface:
You can attach multiple issues to a single session. When you send a prompt, all attached issues that haven't been sent previously are automatically included as context.
Clicking on an attached issue pill (either in the prompt composing area before submission, or in the session header's Attachments Popover after submission) opens a popover with the full issue detail:
The Pull Requests, Referenced Issues, and Commits sections only appear when there are items to display. Click outside the popover or press Escape to close it.
The header of the Issue Detail Popover also contains an Open as tab button (the arrow-out-of-square icon, next to the close button). Click it to promote the issue onto the session's main canvas as a dedicated tab — the popover closes and the new tab becomes the active one.
The issue tab shows the same content as the popover (labels, description, timeline of comments, commits, PRs, and cross-references) but on a wider canvas with the activity section expanded by default. It sits alongside any open file tabs and follows the same interaction model: switch with a click, reorder by drag, close with the × on the tab, and the state persists with the session so the tab reappears when you return.
See File Browser & Editor → Tabs for full details on tab behaviour.
When an issue is sent to the agent, the following information is included:
| Field | Description |
|---|---|
| number | The issue number |
| title | The issue title |
| description | The full issue body text |
| state | Whether the issue is open or closed |
| stateReason | Why the issue was closed (completed, not_planned, or null if open) |
| author | The GitHub username of the person who opened the issue |
| labels | All label names applied to the issue |
| comments | Each comment's body text along with the author's GitHub username |
| commits | Commits referenced in the issue timeline, including SHA, message, author, and date |
| pullRequests | Pull requests that reference or close the issue, including PR number, title, state (open, closed, or merged), branch name, and merge date |
| crossReferences | Other issues that reference this issue, including their number, title, and state |
| createdAt | When the issue was created |
| updatedAt | When the issue was last updated |
This gives agents a comprehensive view of the issue — not just what the problem is, but who reported it, what work has already been attempted (via PRs and commits), and what related issues exist.
Braide automatically manages a label on GitHub issues to signal that an agent is currently attached.
Labelled issues appear dimmed in the GitHub panel, making it easy to see which ones already have an agent working on them.
The label defaults to wip but is configurable per project. Open Settings → Project Settings → Issue Tracker and enter the label name you'd like Braide to use; it's persisted under wipLabel in the project's settings.json.
agent-active or in-progress are stored as-is.wip.Use this when another tool in your workflow already interprets the literal label wip and you want Braide to claim issues with a different name.