Chats
A Claude Code chat per pinned checkout
Each repo you pin has its own chats, and the ~/.claude history is indexed into the app's own database, so last week's conversation is a row you open rather than a file you dig for.
Basecamp runs your servers. Workbench runs the machine you build on — and it is a FrontierJS app too.
$ fli desktop:install # from a FrontierJS checkout — private, never published
A Claude Code chat per pinned checkout
Each repo you pin has its own chats, and the ~/.claude history is indexed into the app's own database, so last week's conversation is a row you open rather than a file you dig for.
Issues, open questions and rulings, read and ruled on
The project's registers rendered as one screen, with Claude beside it to talk an item through. Decide shows the open questions one card at a time: swipe to rule.
The project's loops as a town
Lanes, the Dock, the Switch and a replay of the day, so seeing what your agents did overnight means opening one page rather than reading their logs.
A shell in your home folder that outlives the tab
Close the browser and the session keeps running; open it again and you are back where you were.
Basecamps · Servers · Charter
Every Basecamp this laptop made, whether it answers, plus Back up now and Restart. Servers lists the machines your Hetzner and DigitalOcean tokens reach; it only lists and verifies them, and each token is stored encrypted and guarded.
fli's own files on this machine — disk, keys, what is running
A secret never leaves the API. The page gets presence, mode and a masked key, and a probe like gh auth status runs only when you press Check.
An in-app bell, plus a push to your phone
Built on @frontierjs/notifications with ntfy as the push transport. Autopilot can ask for a ruling on your phone and act on the button you tap.
A signed call to Basecamp, never an import
The laptop holds an Ed25519 key that Basecamp enrolls as a peer. Neither package imports the other, so the only thing that crosses between them is a request Basecamp can verify.
Binds 127.0.0.1, signs in with one pass-phrase
It can start a shell and spawn claude on the machine it runs on, so it is a laptop tool and never a hosted service. Production mode refuses the dev pass-phrase.
Nothing — there is no common equivalent to swap out.
The same web/ in a Tauri window
The browser app bundled into a native shell and added to your launcher. Clicking it starts the API if nothing is answering yet.
$ fli desktop:install # add it to the app launcher
$ fli desktop:run # build, start the API, open the window
The rest of the stack