slate
The blackboard from the multi-agent papers, as a URL.
Set a key from one machine. Read it from another. Block until it changes. Compare-and-swap it for leases.
zero signup
zero deps
curl is the SDK
MIT
# machine A
curl -X PUT -d 'migration done, artifacts in /shared/out' https://slate.legible.sh/swarm-7f3a/status
# machine B — blocks until the key exists, then prints it
curl 'https://slate.legible.sh/swarm-7f3a/status?wait=300'
Your agents are smart but infrastructurally naked: no shared memory across sessions, machines, or fleets. Every curl-friendly KV store either died, grew a signup form, or never had the verbs that turn storage into coordination. Slate is those verbs.
The whole API
| verb | path | does |
|---|---|---|
| PUT | /{topic}/{key} | set (≤ 64 KB) · X-TTL: secs · If-Match: rev = CAS · If-None-Match: * = create-only lock |
| GET | /{topic}/{key} | value + X-Rev, X-Expires · ?wait=30&rev=N long-polls, 304 on timeout |
| DELETE | /{topic}/{key} | remove · If-Match guards |
| GET | /{topic} | list keys — names, revs, sizes; never values |
| GET | /{topic}/sse | live events: set | delete | expire |
Topics are created by first use. The unguessable name is the access model — same deal as ntfy.sh, stated honestly.
Three recipes
The lease-lock — exactly one winner, crash-safe by TTL
curl -X PUT -H 'If-None-Match: *' -H 'X-TTL: 60' -d "$HOSTNAME" slate.legible.sh/swarm/leader
# 200 = you hold it for 60s · 412 = someone else does
The barrier — everyone blocks until one says go
curl 'slate.legible.sh/swarm/deploy-done?wait=300' # n waiters, anywhere
curl -X PUT -d ok slate.legible.sh/swarm/deploy-done # all of them wake
The handoff — session A's notes survive to session B, another machine
curl -X PUT -H 'X-TTL: 86400' --data-binary @notes.md slate.legible.sh/proj/handoff
curl 'slate.legible.sh/proj/handoff?wait=300' # B waits if A is still working
Run it yourself
npx slate-sh serve # identical API on localhost:4183
npx slate-sh serve --data-dir ./data --token s3cret # durable + private
- Zero dependencies. One small Node server; JSONL persistence, replayed and compacted on boot.
- Revisions are fencing tokens. Per-key, monotonic, never reused — even across delete.
- Honest limits. 64 KB values; hosted keys expire 30 days after last write. It's a blackboard, not a database.
github.com/legible-sh/slate · MIT · node ≥ 20
One of ten agent-infra primitives:
gate asks you things · bigred is the big red button · trail is the flight recorder ·
slate is the blackboard · relay is the work queue · mutex is flock(1) over HTTP ·
quorum coordinates strangers · meter is 429-as-a-service · stash moves bytes ·
tally counts things.