Issues & boards

The core loop: file issues, triage them on the board, and track them from Backlog to a merged pull request.

The board

A board is a list of issues grouped by status. Change status, priority, assignee, labels, and due date inline from the row. Click through for the full detail view.

EExponential
Boards
Issues
In Progress1
EXP-8Live-steer terminal reconnectDSJul 9
In Review1
EXP-11Issue board keyboard navigationJul 15
Todo1
EXP-12Attachment paste uploads
Backlog2
EXP-9Issue board keyboard polish
EXP-13Widget screenshot annotationsfeedback
Done2
EXP-5Side-by-side diff viewDS
EXP-7Terminal exit-code badges

The filter bar keeps the board focused: All / Active / Backlog tab presets, plus a filter popover that drills into any combination of status, priority, and labels. Active filters show as removable pills under the bar.

Need to move many issues at once? Bulk select rows and change status or priority, add labels, or hand the whole selection to an agent as a batch coding run.

Deleting a board is a 48-hour soft delete. An owner can restore it from the trash until the purge sweep runs.

Statuses & priorities

Every team starts with seven built-in statuses (Backlog, Todo, In Progress, In Review, Done, Cancelled, Duplicate) and adds its own under Team settings → Statuses. Any member manages them; the seven builtins are locked (never renamed, recolored or deleted) but can be reordered.

Every status sits in one of six categories (backlog, unstarted, started, completed, cancelled, duplicate), and the category is what the clients reason about: the board groups by it, completed stamps the completion timestamp, and duplicate points at the issue it duplicates. A custom status needs a name, a color and a category; started caps at four.

Priorities are Urgent, High, Medium, Low, or none. An optional due date shows on the row with a calendar marker as it approaches.

Writing issues

Descriptions and comments are GitHub-flavored markdown, and the same text renders identically on web, iOS, Android, and desktop, with no client-specific dialects. Supported and round-trippable:

  • Inline: bold, italic, strikethrough, and inline code.
  • Blocks: headings H1–H3, bullet and ordered lists, task lists (- [ ] / - [x], checkable from any client), blockquotes, and fenced code blocks.
  • Links and images: paste or drop an image straight into the editor; it uploads as an attachment and embeds in place, pre-sized so nothing jumps while loading.
markdown
## Repro
1. Open the board on a **narrow** viewport
2. Drag an issue between columns

## Acceptance
- [ ] Drop indicator visible while dragging
- [x] Board scrolls when dragging near the edge

```ts
// the culprit — offset ignores the scrolled container
const y = event.clientY - rect.top
```
Deliberately not supportedUnderline has no GFM representation, so it doesn't exist here. What you write must survive a round-trip through plain markdown on every client.

Mentions & refs

@-mentions

Type @ in any description or comment editor and an autocomplete offers your teammates. A mentioned member is notified and auto-subscribed to the issue, and their mention renders as a name pill on every client.

#-issue references

Type # and pick an issue, or just write #EXP-42. When the identifier resolves to an issue in the same team, every client renders it as a clickable pill that jumps straight to that issue. Unknown identifiers stay plain text, so pasting logs or commit messages never produces broken links.

Issue detail

The full-page view puts the description front and center with a properties rail (status, priority, assignee, labels, due date) and the conversation below.

EExponential
Boards
EXP-8Live-steer terminal reconnect
Live-steer terminal reconnect

When the steer relay drops a WebSocket mid-session, the activity feed goes stale and never recovers. Reconnect with exponential backoff and resume the pty stream from the last acked offset.

Repro: kill the relay while a Claude session is streaming. The viewer freezes until a full page reload.

Same reconnect contract as EXP-5. Ping @Danny Strähhuber once the relay patch lands.

Coding now · Claude on Danny's desktop
Activity (2)
DS
Danny Strähhuber3 hours ago
Backoff should cap at 15s. The relay load balancer kills idle sockets after 60s anyway.
Danny Strähhuber changed status to In Progress· 2 hours ago

The activity timeline interleaves comments with events: status changes, label changes, assignments, PR opened, PR merged. Subscribe to any issue to get its notifications. Commenting, being assigned, or being mentioned subscribes you automatically.

Notifications

The inbox collects everything addressed to you: assignments, comments on subscribed issues, @-mentions, PR opened / merged, and status changes.

EExponential
Boards
Inbox

On iOS and Android the same events arrive as push notifications the moment they happen.

The daily email digest

Email is push-first, never a firehose: there are no per-event notification emails. Notifications still unread bundle into one digest a day, sent at a local hour you choose (08:00 by default). Read them in the app and no email ever comes.

Tune it under Account → Notifications: per-type preferences, the send hour, and an hourly cadence if once a day is too slow. Every digest carries a one-click unsubscribe.

Branches & PRs

An issue that gets coded maps to one branch (exp/<IDENTIFIER>, e.g. exp/EXP-42) and one linked pull request. The PR state (open, merged) is tracked on the issue automatically.

PR automation

What a PR event does to the issue is a per-team setting: Team settings → Statuses → PR automation. Out of the box, opening the PR moves the issue to In Review and merging it completes the issue to Done. Point either event at any of your team's statuses instead, or set it to Do nothing and move issues by hand.

The one exception: batch coding runs. A batch works several issues in one session on a shared exp/batch-<id> branch and opens one combined PR linked to every issue in the batch. Merging that single PR completes them all.