Apps in a sandbox
An app is an agent with a web front end. The maintainer, 2026-10-29: "because I have a repo, sandbox and tools, I should be able to use those tools to build apps out of that repo and not worry too much because they are in a sandbox", and "i'm not really thinking of an app or an agent very different."
So an app has what an agent run has:
- a workspace with its own copy of its repository, read-write;
- its own user, whose capabilities are its limits on the server;
- a sandbox, from
confine; - sync: what it writes goes into its copy first, and reaches the server by sync as its user. Fossil keeps all history, so a mistake is never lost, and a sync that fails is pushed by the next.
What is different:
- The front end. Fossil runs the app's program at
/ext/NAMEfor each request, in the app's sandbox and workspace, and may serve in-browser code beside it. - The viewer. Fossil says who is viewing (
FOSSIL_USER,FOSSIL_CAPABILITIES); its login cookie is never passed in. When the viewer is the one deciding, they post through Fossil's own form, so the record names them. - Keeping current. The ocx2 daemon pulls the app's copy, as it pulls its node copies, so pages are not slowed by a sync.
F: box "Fossil" bold thick A: box "app" bold "its workspace and copy" italic "its own user" italic wid 1.7in ht 0.8in dashed with .w at F.e + (1.3in, 0) D: box "ocx2 daemon" bold wid 1.1in with .n at F.s - (0, 0.6in) arrow from F.e to A.w "runs its front end" above "at /ext/NAME" below arrow from A.n up 0.3in then left until even with F then to F.n "syncs as its own user" above arrow from D.e right until even with A then to A.s "keeps its copy current" below line from F.s to D.n dashed→ /pikchrshow
What was tried
On 2026-10-29: a reader in bubblewrap queried a copy 400 times while 60 pulls wrote to it; all 400 answered, with SQLite's ordinary wait of up to 2 seconds for a lock.
What a copy doesn't have
- Chat: Fossil doesn't sync it. An app reads it through Fossil's own
/chat-poll, as its user holdingC. - Who sent each artifact: the receipt reader answers that, as it does now.
- Posts waiting for a moderator, and other users' details.
The three apps
| App | Today | As an agent with a front end |
|---|---|---|
| OCX's console | opens the served repository directly | its own workspace and user; the first app moved |
| swk-ai | opens the served repository directly, sends runs as an admin user, its program in an old run's workspace | its own workspace and user, not admin |
| crystal-robots | a program from its repository | the same, in its sandbox |
What changes
confinegains one mode,app, which runs the front end in the app's sandbox and workspace, chosen by the name Fossil runs it under. Small, with the maintainer's approval (scripts/).- The daemon pulls each app's copy, as it pulls its node copies.