Features
What socialweb-computer supports today, how far each item is proven, and where it is documented. Releases at the
time of writing: socialweb-computer rc159 (ec0f4849) on the gateway, the ssh gateway and the bidders local, hat-9,
hat-7, and rc162 for the CLI (run requester, install requester, run request); page-rc143 on shell.socialweb.computer; atirc v0.1.0-5a8dfa2 on irc.fedfork.com.
Proof levels: prod = proven on the production gateway and bidders with real accounts; local = proven in a
market network of one host (dev up); built = in the code, not yet proven live.
Infrastructure as code
| Feature | How | Proven | Docs |
|---|---|---|---|
Infra / EphemeralInfra objects: VMs, Deno sandboxes, agent VMs in one file | kubectl apply -f examples/infra/*.yaml | prod (page, CLI), local | quickstart-local.md, quickstart-prod.md |
EphemeralInfra lifetime: ttlSeconds, endWhen: Deadline or Complete | Complete ends in the pass that sees every contract Released or Failed | local | acceptance/0012 |
Infra records in the user's repo, never deleted (endedAt, successor rkeys) | computer.socialweb.infra / ephemeralInfra | prod | protocol/infra.md |
| Long-lived requester in the foreground | run requester --name <n>: own kcp, port 0, ready.json with kcpUrl + kubeconfig | prod (alice, OAuth QR, acceptance 0013 A) | quickstart-prod.md section 7 |
| Requester as a systemd unit of its own account | install requester (account created or adopted, socialweb.slice, upgrade, uninstall) | prod (0013 B, rc160 CLI): install, run requester signin, contract, ssh as the account, restart keeps Held, uninstall --purge | quickstart-prod.md 7a |
| Requester under an account that already runs a core | kubectl apply -f examples/infra/requester-hostprocess.yaml | local | quickstart-prod.md 7b |
| Restart keeps the DID, the vault and every Held contract | resume waits for its policy engine, then runs the policy | local + prod (rc158) | acceptance/0013 |
| Tenant k8s cluster from the requester | run requester --with-gateway, run requester cluster, kubeconfig; nodes rented by the same requester | prod: node on a remote bidder (hat-7) fetches meshd from the public bucket, pod runs, scale to zero (0013 C) | quickstart-prod.md section 8 |
| Tenant k8s cluster from the hosted gateway | k8s.socialweb.computer: createCluster, getKubeconfig, NodeClaim to rented node, scale to zero | prod | acceptance/0001 |
Compute
| Feature | Proven | Notes |
|---|---|---|
Firecracker VM per contract, cloud-init user_data from the RFP | prod | one VM per host on demand, released on request or ttl |
Deno sandbox contracts (computeKind: deno) | prod (local bidder opted in: CLI 0013 and the page) | dev up --compute-kinds vm,deno, install bidder --compute-kinds vm,deno, run bidder --compute-kinds |
| Guest transports: iroh (default), ssh over WebRTC, opentunnel https, wootty web shell | prod | STUN stun.cloudflare.com only, no TURN |
| Guest fence: no TCP to the LAN or the host, only declared host ports | prod | lanUDP / hostUDP per bidder |
| Secrets: getSecrets by workload identity, sealed fallback on demand | prod | bundle in the requester's OpenBao |
| Bidder-side termination of a VM (ops) | prod | acceptance/0007 |
Agents (atirc)
| Feature | Proven | Notes |
|---|---|---|
atirc agent in a rented VM (spec.agent, guest.agentStart) | prod (CLI, page, ssh gateway) | leased mint after the receipt; revoked before vm.terminated |
| Agent placeholder bundle for kubectl-applied contracts | local, prod (page) | no bao step needed |
| Agent identity: OAuth (QR / browser) | prod | |
Agent identity: app password (pdsAccount) | prod (rc161 CLI, hat.dplc.rip on pds.rip: Held, JOIN, revoke before release) | market calls and the mint signed through the owner MarketIdentity; ATPROTO_PASSWORD goes to the requester's own OpenBao before sign-in |
Agent identity: local PDS (localRepo) | built | needs did:plc on plc.directory, a public PDS ingress and a handle you control; .local is refused before the RFP |
ssh <handle>@socialweb.computer atirc agent run <name> | prod | per-user OAuth; the VM is rented as the ssh user |
| Guest requester R2 with a contract-scoped association, nested VM, grandchild agent, cascading release | prod | acceptance/0005 |
Market, identity and policy
| Feature | Proven | Notes |
|---|---|---|
| RFP, bid, accept, receipt, events over XRPC submit* and relay / Jetstream | prod | protocol/market.md |
Default policies always run: requester-tangled-vouch, bidder-tangled-vouch | prod, local | open only when the user names it; dev networks compose both vouch directions |
| Vouch records through an OAuth requester (optional scope) | built | old sessions stay Ready with a scope-upgrade prompt |
Operator vouch from an installed bidder (--bidder-operator-signin) | local | QR page carries the vouch scope since 2026-11-01 |
| Stable rkeys, single getRecord reads | prod | no listRecords on hot paths |
| Per-user OAuth ssh gateway on port 22 | prod | acceptance/0002 |
Browser page (shell.socialweb.computer)
Real kcp and the socialweb control plane compiled to js/wasm, running in the tab as a requester. Release page-rc143.
| Feature | Proven |
|---|---|
| Sign in with any atproto account (OAuth, PAR, PKCE, DPoP) | prod |
| Snapshot hibernation: reload restores in about 3 s, also while a VM is Held | prod |
| Request VM button, ssh over WebRTC from the page terminal, Agent button, Release | prod |
kubectl apply of Infra / EphemeralInfra in the page terminal (heredoc); the page adds the ssh key, the ssh tunnel and the agent bundle | prod |
| Policy in a fenced sandbox on every bid | prod |
/chat web chat | prod |
Deno sandbox contracts from the page terminal, on a bidder that opts in (install bidder --compute-kinds vm,deno, pinned with bidderDids) | prod (mixed.yaml, stdout quickstart-deno-ok on linux/x86_64) |
Not yet: release by deleting the EphemeralInfra (use kubectl patch ... state Released);
reading repo files from the page terminal (paste them). Acceptance: acceptance/0009.
atirc (irc.fedfork.com)
- Transports: IRC (SASL PLAIN), XRPC
chat.atirc.subscribeover websocket (CBOR or?format=json) and over iroh - Tokens: service-auth JWTs and long tokens; mint equal-or-below your own handle; 11 scopes per NSID; revoke by the parent; contract leases (receipt + termination) that latch dead
- Presence: join and leave events carry an RFC3339
tsandby: client|server - Web chat
/chat, owner questions (ask,answer,decide, owner mode) atirc agent run, andatirc send/atirc recvbyte pipes (the receiver's child token is revoked when it ends)- Protocol and acceptance live in the atirc repo (
docs/protocol/atirc.md,docs/acceptance/0001-atirc.md)
iOS app
The embedded requester (pkg/embedded) runs in the app on its own in-process kcp. Last proven on the simulator on
2026-10-31 (acceptance/0010); not re-run on rc158/rc159.
Acceptance status (2026-11-01, rc158 / rc159)
| Runbook | Result | Release |
|---|---|---|
| 0001 account modes, pause, one VM per host, tenant k3s | pass | rc159 |
| 0002 ssh gateway, per-user OAuth | pass | rc158 |
| 0003 CLI ssh over WebRTC, every host | pass | rc158 |
| 0004 atirc agent in a VM | pass | rc158 |
| 0005 guest requester R2, nested VM, cascade | pass | rc159 |
| 0006 rollout checks, compat smoke | pass | rc158 |
| 0007 bidder-side termination | pass | rc158 |
| 0008 host observers | pass | rc158 |
| 0009 browser page A1-A7, deno from the page | pass | page-rc143 |
| 0010 iOS app | not run (no iOS client session); last pass simulator 2026-10-31 | - |
| 0011 atirc | pass | v0.1.0-5a8dfa2 |
| 0012 Infra quickstart, every example | pass (own network) | main ec97f78e |
| 0013 mixed prod: A run requester, B install requester, C gateway in the requester | pass (A, C on rc159; B on the rc160 CLI) | rc159 / rc160 |
Known limits
run request releaseon an invocation that already settled waits 3 min and exits 1 instead of reporting it is done- a tenant-cluster node's cloud-init fetches
get.k3s.iofrom the internet (not pinned) dev downcan warn that the MarketNetwork was not gone within 2 min; it still finishes cleanunits roll kcpcannot roll an installed requester's kcp yet (a drifted kcp rolls when the core starts)- an atirc agent from a local PDS (
localRepoon plc.directory with a public handle) is built but not yet proven against irc.fedfork.com