foldrun 2.9.0 → 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/agents.md CHANGED
@@ -370,6 +370,10 @@ All three are **hard ceilings**:
370
370
  whole machine from the steps beside it. When every core is busy, a bigger
371
371
  class gets a bigger share.
372
372
  - **Disk:** a step over it is evicted rather than the node filling up.
373
+ This is the step's scratch space, not the account's storage: the
374
+ sandbox's copy of the workspace and whatever the step writes while it
375
+ runs. When the step ends, the files it changed are copied back to the
376
+ workspace and the sandbox, scratch space included, is deleted.
373
377
 
374
378
  Pick `small` for an agent that mostly waits on an API, `heavy` for one that
375
379
  renders a browser or holds real data. The step's `resources:` line reports CPU
package/docs/api.md CHANGED
@@ -428,7 +428,7 @@ X-Foldrun-Cli: 0.6.0 # the CLI released with this version (absent
428
428
 
429
429
  | Route | Methods | |
430
430
  |---|---|---|
431
- | `/api/auth/signup` | POST | `email`, `password`, `account`, `invite`. Rate limited per address and per caller. With signups closed every address gets the same refusal, so the form cannot be used to discover which addresses are registered |
431
+ | `/api/auth/signup` | POST | `email`, `password`, `account`, `invite`, `setup`. An install with `FOLDRUN_SETUP_TOKEN` set creates its first account only with `setup` equal to it (403 otherwise); once an account exists the token does nothing. Rate limited per address and per caller. With signups closed every address gets the same refusal, so the form cannot be used to discover which addresses are registered |
432
432
  | `/api/auth/login` | POST | `email`, `password` |
433
433
  | `/api/auth/logout` | POST | ends the session |
434
434
  | `/api/auth/session` | GET | who am I |
@@ -32,9 +32,52 @@ curl -fsSL https://foldrun.io/install.sh | sh
32
32
 
33
33
  It checks Docker, puts `docker-compose.yml` in `~/foldrun`, writes `.env`
34
34
  there once (a fresh secret key, the address, the version), pulls the
35
- ready-made images and starts foldrun on port 3900. Then open
36
- `http://localhost:3900/signup` in a browser — the first account to
37
- sign up becomes the owner — then sign the CLI in and deploy:
35
+ ready-made images for your machine's chip and starts foldrun on port 3900.
36
+
37
+ **No Docker yet?** The installer offers to set it up, and asks before each
38
+ step (`[y/N]`):
39
+
40
+ | on | Docker missing | Docker stopped | Docker not reachable by you |
41
+ |---|---|---|---|
42
+ | **macOS** | installs Colima (a small Linux VM), `docker` and `docker-compose` with [Homebrew](https://brew.sh), then starts Colima with up to 4 CPUs and 8 GiB — enough for a `heavy` step | starts Colima, or opens Docker Desktop | — |
43
+ | **Linux** | runs Docker's official script ([get.docker.com](https://get.docker.com): the engine and the Compose plugin) as root, through `sudo` | `sudo systemctl start docker` | adds you to the `docker` group (root-equivalent), and uses `sudo` for the rest of that run; the group applies from your next login |
44
+
45
+ Answer after each question appears: anything typed ahead is lost while
46
+ Docker installs.
47
+
48
+ **What it checks first.** The install folder and every file Compose reads
49
+ there (`.env`, `docker-compose.yml`, `docker-compose.override.yml`) must be
50
+ yours alone — owned by you, writable by nobody else, no access control list,
51
+ no symlinks — because Docker runs what they say with root's reach. The
52
+ override must stand alone: no `include` or `extends`, and no `env_file` —
53
+ put settings in `.env` or in the override's own `environment:`. Anything
54
+ else it names, such as a secret's file, is your own configuration to
55
+ protect, as is a key written to slip past these checks.
56
+
57
+ `FOLDRUN_DATA_DIR` (a host folder instead of the data volume) holds the
58
+ accounts and the vault, so it must be private: the installer makes it
59
+ owner-only when it does not exist, refuses one that others can read or
60
+ write, and keeps its real path (symlinks resolved) in `.env`.
61
+
62
+ The installer sets foldrun up on the machine it runs on, and refuses a
63
+ remote Docker (`DOCKER_HOST` or a context pointing at another machine): run
64
+ it on the Docker host itself.
65
+ Compose is always given these files by name, so a `compose.yaml` beside them
66
+ or a `COMPOSE_FILE` in `.env` cannot stand in. Before starting, it checks
67
+ that the Docker the platform will be given (`FOLDRUN_DOCKER_SOCK`) is the
68
+ same daemon it installed into. With no terminal (a provisioning script), nothing is
69
+ installed unless you say so in advance with `FOLDRUN_INSTALL_DOCKER=yes`;
70
+ `FOLDRUN_INSTALL_DOCKER=no` never asks. Without Homebrew on a Mac, install
71
+ it or [Docker Desktop](https://docs.docker.com/desktop/setup/install/mac-install/)
72
+ first. Then open the signup link it prints —
73
+ `http://127.0.0.1:3900/signup?setup=…` (127.0.0.1, not `localhost`, which a browser may send to IPv6 where another user could be listening) — in a browser. The first account
74
+ becomes the owner, and only that link can create it: anyone else using the
75
+ same machine can reach `localhost` too, so the installer ties the owner to
76
+ whoever ran it (the token is `FOLDRUN_SETUP_TOKEN` in `~/foldrun/.env`, and
77
+ does nothing once the owner exists). With `FOLDRUN_BIND` set to one address
78
+ the link uses that address; from another machine, open it through the
79
+ tunnel the installer prints (`ssh -o ExitOnForwardFailure=yes -L …`), never
80
+ over plain http. Then sign the CLI in and deploy:
38
81
 
39
82
  ```sh
40
83
  npm install -g foldrun
@@ -67,6 +110,8 @@ edit `~/foldrun/.env` and run `docker compose up -d` there.
67
110
  | `ANTHROPIC_API_KEY` | none | the install's model key. Without one, each account adds its own in Settings → Model; a step with neither is refused with what to set |
68
111
  | `FOLDRUN_DIR` | `~/foldrun` | where the install lives (installer only) |
69
112
  | `FOLDRUN_DOCKER_SOCK` | `/var/run/docker.sock` | the Docker socket; rootless Docker is found by the installer |
113
+ | `FOLDRUN_SETUP_TOKEN` | made once | the first account (the owner) is created only with this, through the printed `/signup?setup=…` link |
114
+ | `FOLDRUN_INSTALL_DOCKER` | ask | `yes` installs or starts Docker without asking (for a script with no terminal); `no` never offers to |
70
115
  | `FOLDRUN_EGRESS_BIND` | `0.0.0.0` | the egress proxy's port 8090, which steps reach through `host.docker.internal`. On a server that faces a network, bind it to the Docker bridge (`172.17.0.1`); Docker-published ports skip host firewalls such as ufw |
71
116
  | `FOLDRUN_DATA_DIR` | a named volume | a host path for the data instead |
72
117
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foldrun",
3
- "version": "2.9.0",
3
+ "version": "2.9.1",
4
4
  "description": "Agents are just folders. Write them, check them, run them — on your machine.",
5
5
  "license": "FSL-1.1-ALv2",
6
6
  "type": "module",