local·first·lab
Open source · Chrome extension

A terminal for your browser

lfl-terminal drops a command line onto any site. Known commands (search, open, ls, read, find, go, and more) run deterministically, no model involved. Type something else and a local model proposes exactly one action, which you approve, exact and literal, before it touches the page.

Deterministic commands (help, ls links, read, here) driving a live Wikipedia article
Deterministic commands driving a page. Anything the model proposes still needs your approval first.

How it works

Deterministic commands run first

search, open, ls, read, find, go and the rest never touch the model at all: regex parsing and DOM matching, running the moment you press enter.

A local model proposes, you approve

Anything else goes to a model running on your own machine. It can only ever answer with one of a fixed set of actions, and every mutating one renders an approval card built from the real page element, not the model's own words, before anything runs.

Hard limits live in code

No filling a password or one-time-code field. No clicking or navigating off-origin. No non-http(s) scheme. These checks run in code the model never touches, and approval cannot bypass them.

What it will not do

The honest limits are the pitch, not a footnote under it.

It also plays snake

Alongside the commands above there is a small fun pack: snake and 2048 rendered as plain text frames right in the terminal panel, a few color themes, and a steam locomotive for anyone who mistypes ls. None of it is the point of the project, and it runs under the exact same limits as everything else here: no network calls, no touching the page, no exception.

Snake played inside the overlay in the phosphor theme, eating two food tiles before game over

Install it

v0.3.x, early, Chrome only (Manifest V3). Not on the Chrome Web Store yet: for now you load it unpacked straight from the repo.

  1. Clone or download the repo.
  2. Start a local model server (a llama.cpp-class server on your own machine, reachable only over loopback; the deterministic commands above still work even with it offline).
  3. Open chrome://extensions, turn on Developer mode, click Load unpacked, and select the extension/ directory.
  4. On any page, press ` (backtick) or Ctrl+K to open the overlay.

See the code on GitHub → Or ask a question