OPEN · ALWAYS-ON · BUILT ON FLUE

An autonomous
dev assistant.

Neondeck is a locally installed app rethinking PR reviews and management in the era of agents. It prioritizes review requests, flags PRs that deserve a closer look, and ships with a fast built-in diff experience plus an agent to guide you through the review. Use your ChatGPT subscription or bring your own gateway, such as OpenRouter.

$ npm i -g neondeck@next

What the deck looks like

Sample 32:9 layout for the Corsair Xeneon Edge. But, Neon can configure itself to run as a companion on any display.

neondeck v0.4.1 CPU 12% MEM 8.4/32G GPU 41% 54°C NET ↓1.2 ↑0.3 flue:online 14:32:07
● GITHUB · @you4 OPEN PRs

flue/harness#1284 · 2h

fix: retry durable steps on cold start ● checks pass◆ 2 review

neondeck/core#312 · 5h

feat: configurable statusline sensors ● 1 failing△ draft

neondeck/panels#88 · 1d

add github review-requests panel ● checks pass↻ rebase

neondeck/docs#204 · 2d

docs: autopilot delivery guards ● checks pass◆ 1 review
● FLUE AGENT · morning briefingdurable · ctx 18k

Morning briefing · Aug 18

Failing checks (needs attention)

neondeck/core#312 · 1 of 15 checks failing, last updated 5h ago.

Open PRs, checks green (3 of 4)

flue/harness#1284 has 2 reviewers waiting on you. #88 and #204 need nothing from you.

Watches and Autopilot

One watch on #312, prepare-only. Nothing pending approval.

Suggested next action: dig into #312's failing check. Want me to pull the CI details?

DATA briefing {"briefingRunId":"briefing:20260818014652","profileId":"morning","status":…} full

Message neondeck...Enter send · Ctrl K tools

Three things Neon does

Your pull requests, everyone else's pull requests, and a daily read on which of them needs you.

01 You opened the PR. Neon helps it land.

Put a PR on Autopilot and Neon watches it for new feedback, failing checks, and a branch that has fallen behind, then chases all-green: CI failures, merge gates, routine review nits. Each one gets a continuing owner and a managed worktree that stay with it to merge. When a reviewer raises a real architectural flag, it hands that back to you instead of winging a fix. You decide how much rope it gets, and raising that takes an explicit confirmation.

Notify

Watches the PR and pings you when something needs eyes. Changes nothing on its own.

notify-only

Prepare

Diagnoses the failure and writes a fix in a managed worktree, left for you to inspect.

prepare-only

Approve

Prepares the fix and waits for your explicit sign-off before it touches the PR.

autofix-with-approval

Auto-deliver

Delivers on its own when checks and delivery guards pass. Never force-pushes.

autofix-push-when-safe

02 Your coworker's agent left you a 40,000-line PR. Neon helps you grok it.

A huge, mostly machine-written PR lands in your queue and someone still has to actually read it. Pull it onto your machine with one command: Neon scouts the exact revision before you get there and stages what it found, then stays beside the diff to answer what changed and where to look. It drafts, you decide. Every GitHub review action stays yours to submit.

Keep it local

Review the PR locally, diffs come from git rather than yet another slow GitHub page load. The diff viewer is built on @pierre/diffs, and even giant PRs are fast to navigate and render.

Get oriented first

Neon reviews the PR first, then stages its observations, draft comments, and a briefing that walks you through the change.

Ask, then approve

Ask the reviewer agent about the code while you read. Leave inline comments, resolve threads, and submit Comment, Approve, or Request changes without opening github.com.

PR REVIEW · flue/runtime#742

add tensorlake sandbox adapter package

checks pass main 2/2 threads +41,206 -892 re-review GitHub
Traverse local draft ▾ ← Previous [ Next ] → local draft · not selected · 2 available Shortcuts ?
files+41,206 -892

review map · T threads · D drafts · S stale · N Neon

filter paths or Neon findings

  • .changeset
  • md brave-tigers-dance.md A
  • .github / workflows
  • yml pr-checks.yml M
  • packages / flue-sandbox
  • src
  • ts index.test.ts A
  • ts index.ts T1 D2 A
  • txt LICENSE A
  • json package.json T1 A
  • md README.md A
  • json tsconfig.json A
  • ts vitest.config.ts A
+ packages/flue-sandbox/src/index.ts +199

49 options?: {

50 cwd?: string;

51 env?: Record<string, string>;

52 timeoutMs?: number;

53 signal?: AbortSignal;

DraftNeon generated · RIGHT L53

exec() accepts options.signal in its type but never reads it. If Flue cancels a turn while sandbox.run() is in flight, the returned promise stays pending until the remote command completes. Honor the AbortSignal locally: settle as soon as options.signal.aborted is true.

EditDelete

54 },

55 ): Promise<ShellResult> {

56 const timeout = options?.timeoutMs;

57 const result = await this.sandbox.run('bash', args);

REVIEWASK REVIEWER

user

Tell me more about the options.signal issue

assistant

Where it lives: packages/flue-sandbox/src/index.ts, TensorlakeSandboxDriver.exec(), flagged in a local draft anchored at line 53 and corroborated by an unresolved GitHub thread at line 61 (P2).

What's wrong: the type surface accepts a signal, the implementation forwards cwd, env, and timeoutMs to sandbox.run() and ignores the rest.

2 pending Comment Approve Request changes Submit

Local drafts only; nothing is sent to GitHub until you submit the review.

03 A morning briefing worth reading.

Neon pulls your PRs, active watches, CI failures, and next actions into one briefing, led by whatever actually changed since you last looked. Write your own scheduled instructions alongside it, and connect MCP servers so a briefing can reach past GitHub into the rest of your work.

What needs you, not everything

The briefing leads with PRs that moved, checks that broke, and reviews waiting on you. Semantic watermarks keep unchanged polls quiet instead of restating yesterday.

Your own scheduled tasks

Add a custom instruction and Neon runs it on your schedule, in the same durable session as the rest of its work.

Bring your other tools

Connect local and remote MCP servers, Jira and Superhuman included, so briefings and tasks can pull from the tools your work already lives in. Access runs through an approval policy you can inspect.

Underneath all three

Same machine, same rules, whichever one you are using.

It runs on your machine

Coding and validation happen locally, in a Neondeck-managed worktree that keeps autonomous changes out of your primary checkout. Commands that touch the host clear an approval policy you can read first. A worktree is not an operating-system sandbox, and we don't claim otherwise.

No signups, bring your own provider

Install from npm, configure your AI provider (OpenAI, Anthropic, OpenRouter, or any OpenAI-compatible endpoint), point it at your repos, and go. Neondeck is MIT licensed, feel free to fork and contribute.

It learns from your work

Neon updates its own memory and skills from your conversations and from how PRs turn out, by default. Each change is typed, recorded, and can be reverted, so you can read back what it picked up.

The deck configures itself

Layouts, text scale, fonts, panel regions, and plugin config live in dashboard.json in your runtime home. Edit it by hand, or describe the display you have and ask Neon to fit the deck to its size, orientation, and constraints. Repos, models, and schedules work the same way: if something is in the wrong place, tell it to move it.

{
  "schemaVersion": 1,
  "display": { "width": 2560, "height": 720 },
  "theme": "dark",
  "statusline": { "position": "top", "pluginId": "host-metrics" },
  "layout": {
    "columns": 12,
    "rows": 5,
    "regions": [
      {
        "id": "work", "title": "WORK",
        "column": 1, "row": 1, "columnSpan": 4, "rowSpan": 5,
        "defaultTab": "github",
        "tabs": [
          { "id": "github", "title": "GITHUB", "pluginId": "github-pr-list" }
        ]
      },
      {
        "id": "neon", "title": "NEON",
        "column": 5, "row": 1, "columnSpan": 8, "rowSpan": 5,
        "defaultTab": "chat",
        "tabs": [
          { "id": "chat", "title": "CHAT", "pluginId": "flue-chat" }
        ]
      }
    ]
  }
}