Your agent, in a real cockpit.

FlupCode is a web and desktop harness for OpenCode: rich chat with side-by-side diffs, an embedded terminal, permission modes and dashboards. The engine stays untouched. Everything you touch gets better.

Nothing else to install: the app fetches the OpenCode 2 engine once and starts it for you.

↓FlupCode-mac-arm64.dmg · FlupCode-win-x64.exe · FlupCode-linux-x64.AppImageSee all

Keep the desktop app open, or run the flupcode command and leave it running (--install starts it at every login). Then open app.flupcode.com.

$flupcode serve

Clone the monorepo and launch the harness in dev mode.

$git clone https://github.com/rldona/FlupCode && cd FlupCode && bun install && bun run dev:harness
opencode-ui-power · Move the provider panel into a dialog Connected · localhost:4096
Describe a task or ask a question
BuildPlan Accept edits ▾ Muse Spark 1.3 ↑
Agent = Engine + Cockpit
Cockpit

keeps you in command while the agent works

The engine is the brain. The cockpit is where you read, decide and steer. FlupCode rebuilds only the cockpit, on top of the OpenCode engine you already run.

The engine, untouched

FlupCode talks to the same HTTP and SSE API every OpenCode client uses. No new backend, no fork of the agent loop, upstream stays mergeable.

A cockpit you can read

Side-by-side diffs, collapsible reasoning, expandable tool output, a clear turn footer. What the terminal prints, FlupCode lays out.

Controls that mean something

Permission modes, plan versus build, model and effort pickers. The rules live in the engine, so the UI never lies about what the agent may do.

Tour

Everything the terminal does. In a real UI.

Rich chat with real diffs

Every edit shows as a side-by-side diff, every command with its output. Reasoning collapses out of the way; nothing is hidden behind a scrollback.

An embedded terminal

A real PTY in a workspace panel, wired to the engine. Resize it, type in it, run your tests next to the conversation. No context switch.

Home that shows your week

Sessions, messages, tokens, streaks and an activity heatmap across every project. Cost stays one glance away, not one dashboard away.

Permission modes per session

Switch from Manual, where every change is confirmed, to Bypass for unattended runs. The chip in the composer always tells the truth.

Session · rich chat
Add a search field to the providers dialog.
read src/components/ProvidersPanel.tsx completed
edit src/components/ProvidersPanel.tsx completed
12const [query, setQuery] = createSignal("")12const [query, setQuery] = createSignal("")
13const filtered = createMemo(() => match(providers, query()))
13return <ul>{providers.map(render)}</ul>14return <ul>{filtered().map(render)}</ul>
bash bun run check completed
6 pass · 0 fail · 15 expect() calls
▣ Build · Muse Spark 1.3 · 42s · 12.4k tokens
Workspace · terminal
zsh · opencode-ui-powerzsh · 2+
➜ opencode-ui-power git:(power) bun run check
$ tsgo --noEmit && bun test src
bun test v1.2.19
src/chat.test.ts:
✓ splits streamed parts into turns [2.1ms]
✓ keeps tool output attached to its call [0.4ms]
src/metrics.test.ts:
✓ sums tokens per model [0.3ms]
✓ builds the activity heatmap [1.0ms]
6 pass · 0 fail · 15 expect() calls
Ran 6 tests across 4 files. [212ms]
➜ opencode-ui-power git:(power)
Tests pass. Want me to open a PR against dev?
Yes, one PR, rebase after CI is green.
bash gh pr create --base dev running
Home · usage
+ New session
Projects
  • opencode-ui-power 3
  • content 2
  • radiovision 2
  • flapo-html 1
  • content 1

What's next, Raúl?

A summary of your activity in FlupCode.

⌕Explore and understand code
✎Build a new feature or tool
↻Review code and suggest changes
⚑Fix problems and failures
SummaryModelsAll 30d 7d
11Sessions
4,310Messages
1,750.9MTotal tokens
3Active days
1dCurrent streak
1dLongest streak
8:00Peak hour
deepseek-flashFavourite model

You used ~19,454× more tokens than 1984.

Session · permission mode
Auto · engine classifies each call⇧⇥
Manual · always ask before changes⇧⇥
Accept edits · auto-accept file edits⇧⇥
Bypass · accept all permissions⇧⇥
bash git push origin power needs approval
Allow once Allow Always for this session Deny
Try it

Decide how much the agent can do

Pick a mode. See what the same three actions would do in that session. This is the real rule set, not a wrapper on top.

Permission mode

Manual

Every write and every command waits for you. Best for unfamiliar repos and first sessions.

editsrc/components/ProvidersPanel.tsx—
bashbun run check—
bashgit push origin power—

Switch modes mid-session with the chip in the composer or ⇧ Tab. The choice is stored per session, not globally.

Surfaces

The same cockpit everywhere

Browser, desktop or next to the terminal you already love. All three talk to the same engine.

Web

Open app.flupcode.com and point it at your server. Pair a phone with a QR code and drive the same session remotely.

Desktop

An Electron shell that starts the engine for you. Native notifications, a dock badge while the agent works. Download

Terminal

Keep the OpenCode TUI. FlupCode complements it with feature-for-feature parity, tracked in a living matrix.

Download

Get the desktop app

Free preview builds published to GitHub Releases. We highlight the one for the machine you're on.

FlupCode runs on OpenCode 2 and fetches it for you the first time it starts: there is nothing else to install.

Builds are unsigned for now. On macOS, if it says “FlupCode is damaged”, run xattr -dr com.apple.quarantine /Applications/FlupCode.app or right-click → Open. On Windows pick “More info → Run anyway”.

Your engine. A better cockpit.

Clone it, connect it to OpenCode, and keep shipping. Independent, MIT, upstream-first.