no. 15 · the browser-native stack · your machine

Your folder never leaves your machine.

The part people don't believe until they try it: a web page can open a real folder on your disk, list it, read it, write to it, parse the .git directory sitting inside it, read your actual Excel files, watch a folder and process what you drop in — and, if you want, run node and python on your machine for real. No upload, no server, no Electron. Here's how that layer is built, tool by tool, and where the line is drawn.

The hinge: one folder, granted once

Everything here rests on the File System Access API. You click, you pick a folder, the browser hands the page a handle — and that handle is the entire world the agent can touch. Not your home directory. Not "your files." That folder.

That constraint is doing more work than it appears to. A hosted coding assistant has to convince you to upload a repository; the honest answer to "what happens to my code" is a privacy policy. Here the answer is a scope: the page can't read what you didn't grant, and there is nowhere for it to send anything anyway.

granted
1 folderchosen by you, in a native picker the page cannot fake or bypass.
uploaded
0 bytesthere is no upload endpoint in the product. The inference is local too.
install
noneunless you want real command execution — that's the one opt-in binary.

Five tools, and why they're shaped like that

The agent's whole access to your project is five functions. The design pressure here isn't elegance — it's that a 4B model has to succeed with them:

ToolWhat it doesThe detail that made it work
code.treelists the projectthe model orients before it guesses
code.readreads a filepaginated, 100 lines at a time, and it can centre on a line number — this single change moved the hit rate more than any prompt tweak
code.searchgreps the project, with line numberssearch-then-read beats read-everything: small models are good at locating and bad at holding
code.editsurgical editthe editor refreshes instantly, so you watch the change land
code.writewrites a whole filethe escape hatch, for new files
Tool design mattered more than model choice. Paginating code.read to 100 lines and letting it centre on around: 42 changed the agent's success rate more than swapping models did. Give a small model a smaller job and it stops being a small model.

The editor is the real one

The editor isn't a textarea with syntax colours: it's Monaco 0.52.2, the actual VS Code editor core, loaded from a CDN with its own AMD loader, wired to a file tree, tabs and Ctrl+S. There's no build step in this project at all — vanilla ES modules, served as-is.

And a small thing I'm fond of: the git status line — current branch, last commit — is produced by reading and parsing the .git directory directly. No isomorphic-git, no dependency. .git/HEAD points at a ref, the ref file holds a hash, the object gives you the message. Enough to orient you; committing is left to the agent or the terminal.

Beyond code: what a chat can do with your folders

The sibling app takes the same primitive somewhere else. Once a folder is granted, plain-language requests become filesystem work:

Each of those sits behind a permission scope that's asked for the first time and revocable afterwards. The tool layer refuses before the tool runs, not after.

The one thing the browser can't do — and the smallest possible fix

A web page cannot run npm test. That's not a gap to be clever about; it's the sandbox doing its job. So there's an opt-in bridge: a ~6 MB binary you download and run yourself, which opens a WebSocket on 127.0.0.1:8765 guarded by a token generated at startup. Connect the page to it and the agent gets real execution — node, npm, python — with the output streaming back into the chat.

Note what it is not: not a hosted runner, not a container in someone's cloud, not a daemon that phones home. It's a local process, on loopback, that you start and stop. The default remains no-install; this is the door for people who want the agent to close the loop by running the tests it just fixed.

The honest edges

What the whole series adds up to

Model, runtime, harness, editor, filesystem — five layers that all used to imply a server, a subscription and an upload, running in a tab that costs its author nothing to serve. That's the change worth noticing. Not that a browser can do inference: that the whole vertical fits, on hardware people already own, with the privacy question answered by architecture instead of by policy.

Source: js/tools/code.js, js/ide.js, js/bridge.js in elffuss-code; js/tools/{fs,watch,vault,apps}.js in elffuss-claw. Series: the stack · the runtime · the harness.