Multi-project portfolio for the [&] Protocol ecosystem. This repo contains the protocol spec, reference implementations, portfolio company sites, and the shared Supabase data layer that ties them together.
See CLAUDE.md for the authoritative architecture reference (spec folders per product, PULSE loop manifests, Graphonomous memory-loop policy, etc.).
| Area | Purpose |
|---|---|
AmpersandBoxDesign/ | [&] Protocol spec, JSON schemas, Elixir reference impl, npm/Python SDKs |
graphonomous/ | Elixir/OTP continual-learning engine + MCP server + npm wrapper |
PRISM/ | OS-009 PRISM Elixir/OTP benchmark engine (Fly.io deploy) |
PULSE/ | OS-010 PULSE manifest standard (schemas/, manifests/, docs/) |
WebHost.Systems/ | Node.js monorepo (Supabase backend + Vite/React frontend) |
bendscript.com/ | SvelteKit + Supabase knowledge-graph editor + KAG server |
runefort.com/ | SvelteKit + Svelte Flow spatial-cognition UI |
specprompt.com/ | Elixir/Phoenix spec registry |
ampersand-supabase/ | Shared Supabase instance (all product schemas, migrations, Edge Functions) |
ampersand-plugins/ | Claude Code skills shared across the ecosystem |
*.com/ / *.org/ | Marketing sites (mostly static HTML) with docs/spec/ folders |
Everything below assumes you are in the repo root (/home/travis/ProjectAmp2).
# 1. Start the shared Supabase data layer (Postgres, Auth, PostgREST, Storage, Studio)
npm run db:start
# 2. Start any preview site (examples)
npm run dev:runefort # SvelteKit → http://localhost:8093
npm run dev:bendscript # SvelteKit → http://localhost:5174
npm run dev:webhost # Vite/React → http://localhost:5173
# 3. Or start everything in one shot (Supabase + every site/service)
npm run dev:all
# Shut down
npm run stop:all
A top-level package.json exposes these orchestration commands. Each wraps the appropriate subproject command — nothing fancy, just convenience wrappers so you don't have to remember ports and working directories.
| Command | What it does |
|---|---|
npm run db:start | supabase start from ampersand-supabase/ — boots Postgres, Auth, PostgREST, Studio, Edge Functions |
npm run db:stop | supabase stop — shut down the full stack (data preserved in Docker volumes) |
npm run db:status | supabase status — show ports, anon key, publishable key, service-role key |
npm run db:reset | supabase db reset — re-apply all migrations + seed (destroys data) |
npm run db:migrate | supabase migration up --local --include-all — apply pending migrations without resetting |
npm run db:studio | Opens Studio at http://127.0.0.1:54323 |
Endpoints after db:start:
API / PostgREST → http://127.0.0.1:54321
Postgres → postgresql://postgres:[email protected]:54322/postgres
Studio → http://127.0.0.1:54323
Mailpit → http://127.0.0.1:54324
Exposed schemas (from ampersand-supabase/config.toml): public, amp, kag, webhost, fleet, geo, temporal, orchestrate, govern, agentelic, rune.
| Command | Target | URL |
|---|---|---|
npm run dev:webhost | WebHost.Systems/ (Vite/React) | http://localhost:5173 |
npm run dev:bendscript | bendscript.com/ (SvelteKit) | http://localhost:5174 |
npm run dev:runefort | runefort.com/ (SvelteKit) | http://localhost:8093 |
npm run dev:graphonomous-site | graphonomous.com/ static | http://localhost:8090 |
npm run dev:pulse-site | PULSE/site/ static | http://localhost:8091 |
npm run dev:opensentience | opensentience.org/ static | http://localhost:8092 |
npm run dev:prism | PRISM/ Phoenix | http://localhost:4000 |
npm run dev:specprompt | specprompt.com/ Phoenix | http://localhost:4200 |
| Command | What it does |
|---|---|
npm run dev:all | Starts Supabase, then every dev server above in parallel (uses concurrently). Press Ctrl+C to terminate all. |
npm run stop:all | Stops Supabase and kills any lingering dev-server processes on the ports above. |
| Command | What it does |
|---|---|
npm run build:all | Runs the build step in every buildable project (WebHost.Systems, bendscript.com, runefort.com, graphonomous, PRISM, specprompt.com). |
npm run test:all | Runs the test suite in every project that has one. |
npm run lint:all | Lints the Node projects; runs mix format --check-formatted on Elixir projects. |
npm run typecheck:all | svelte-check + tsc + mix compile --warnings-as-errors across the relevant projects. |
If you'd rather run commands directly:
# graphonomous (Elixir)
cd graphonomous && mix deps.get && mix compile --warnings-as-errors && mix test
# WebHost.Systems (Node monorepo)
cd WebHost.Systems && npm install && npm run dev
# AmpersandBoxDesign reference impl
cd AmpersandBoxDesign/reference/elixir/ampersand_core && mix deps.get && mix escript.build
# PRISM / SpecPrompt (Phoenix)
cd PRISM && mix deps.get && mix phx.server
cd specprompt.com && mix deps.get && mix phx.server
# Any SvelteKit / Vite site
cd runefort.com && npm install && npm run dev
Most sites need a .env.local pointing at local Supabase. The minimum required:
VITE_SUPABASE_URL=http://127.0.0.1:54321
VITE_SUPABASE_ANON_KEY=<ANON_KEY from `npm run db:status`>
npm run db:status -- -o env prints every key ready to paste. (The local anon key is deterministic for supabase-demo, so the same key works across rebuilds.)
Never commit secrets, API keys, or credentials.
Elixir code follows mix format; TypeScript uses ESLint + Prettier.
Each product has a spec under <project>/docs/spec/README.md (or prompts/ for AmpersandBoxDesign / BendScript). Always read the spec before changing code.
Graphonomous MCP is the always-on memory loop for every session in this repo — see the "Graphonomous session policy" section in CLAUDE.md.
Per-product schema ranges in ampersand-supabase/migrations/: 000–009 shared amp.*, 010–019 kag.*, 020–029 webhost.*, 030–039 fleet.*, 040–049 geo.*, 050–059 temporal.*, 060–069 orchestrate.*, 070–079 govern.*, 080–089 agentelic.*, 090–099 rune.*, 100–109 spec.*.
`Invalid schema: rune` (or similar) from PostgREST → new schema added to config.toml but Supabase not restarted. Run npm run db:stop && npm run db:start.
Pending migrations → npm run db:migrate applies them without wiping data.
A site can't reach Supabase → check its .env.local points at http://127.0.0.1:54321 (not the cloud URL) and that supabase status is green.
Port already in use → each site uses a dedicated port (see table above); npm run stop:all clears them.