Browser-native web OS — multi-instance, agentic, serverless. Per-instance Service Worker isolation, IndexedDB filesystem, in-browser POSIX shell, freddie-host with vector search and code insight.
anentrypoint.github.io/thebird — landing + project chrome (built from site/ via flatspace).
The full web-OS lives in docs/ and runs against any static server — no install, no build:
bunx serve docs # or: npx serve docs / python -m http.server -d docsThen open http://localhost:3000/os.html.
Two thebird instances in the same browser tab never share state. Isolation is enforced at the Service Worker thread boundary: each instance gets its own SW at scope ./sw-iN/. 16 static SW files (docs/sw-iN/index.js) are committed for GH Pages (no custom headers required); dynamic docs/sw-instance.js?inst=iN is the fallback past instance 16. Regenerate the static files after editing the source SW: npm run gen-sws.
docs/validate.html is the 159-invariant truth source. The CI workflow .github/workflows/validate.yml boots a headless Chromium against the harness on every push and PR; the runner at .github/workflows/validate-runner.mjs polls window.__debug.validateResults and fails the build on any regression. A pre-check step also re-runs scripts/gen-static-sws.mjs and diffs the committed docs/sw-iN/ files so stale wrappers fail the build before validate runs.
Current score: 159/159 against anentrypoint-design@0.0.114+.
The menubar and taskbar sit at --os-bar-h: 34px to match the rendered window titlebar, and .wm-root spans the full viewport so the bars paint OVER a maximized window's chrome (z-index 9200 > 9000). The backtick / tilde key (`) hides both bars system-wide — toggle again to restore. The setting persists per-instance.
Reload restores every instance and every window: ids, geometry, z-order, focus, maximized/minimized flags, active instance, and bars-hidden state. The snapshot is mirrored to every per-instance Service Worker so partial wipes don't lose the desktop. See memory/tilde-bars-and-restore.md for the full contract.
AGENTS.md is the primary developer doc — load-bearing contracts (dynamic stack, GUI boundary rule, per-instance isolation, brand tokens, sqlite-shim quirks) and a memo index live there. Read it before touching anything in docs/.
MIT