Vibersyn is an ambient idea room: people talk, the room detects concrete buildable ideas via windowed model inference — passively, or on demand via Idea Capture mode — grounds each idea to the span of conversation it came from, and turns it into a running app. A projector UI shows the ideas forming and the agents building them.
src/— the Vibersyn app:src/detect/— windowed idea detection (transcript window,IdeaDetector, reconciler, engine) + eval scorers.src/server/— the projector server (Bun + Hono), detection runner, idea builder, and the HTTP/SSE API.src/ui/— the projector UI (React).
.smithers/— Smithers workflows + evals for the idea loop (workflows/idea-detection.tsx,evals/).gesture-wall/— vendored gesture-to-wall control software (a Python depth-camera fusion server + a vanilla-JS wall client), an optional camera mode (./run-room.sh --gesture, one Orbbec Gemini 335 serving both walls) — desk mode below is the zero-hardware default. Seegesture-wall/VIBERSYN.md.
- The whole room, one command:
./run-room.sh— builds + serves Vibersyn (bound to0.0.0.0so your phone can reach the QR-import page) and opens the UI fullscreen on two walls. Both walls render the complete 3D room — all ideas AND all builds — each window with its own independent camera (drag to orbit, scroll to zoom,ffit,zzen;?wall=A|Bonly labels the window and seeds a different default camera angle so the walls don't boot pixel-identical). The?view=ideas|buildsparams in the URLs are legacy and no longer filter content. No cameras, no Python — you drive it with mouse, keyboard, and voice../run-room.sh --singleopens one window instead — a laptop or single projector;--single=ideas/--single=buildsonly add the legacy view badge. - Vibersyn projector only:
bun run start(server on :8787), orbun run devfor the UI dev server. Open/?live=1for the live runtime.
- Mouse: click bubbles and buttons directly.
- Keyboard: press
?(orh) for the cheat-sheet overlay. Highlights:b/Enterbuild the top ready idea ·xdismiss it ·ctoggle Idea Capture ·atoggle Auto-Build ·rtoggle Research mode ·qQR import ·mmic ·uunmute ·1–9select/steer processes ·Escclose overlays ·Shift+Eemergency stop. - Voice: the wake word is "Vibersyn" (fuzzy-matched — "viber sin" or
"vibersin" work too):
- the bare name starts Idea Capture;
- "Vibersyn, build it" builds the top ready idea;
- "Vibersyn, research it" (or "fact check") researches the top suggested quest; "research on/off" toggles the mode;
- "Vibersyn, stop everything" is the emergency stop;
- also understood: "dismiss"/"skip"/"no", "auto build on/off", "stop capturing".
- QR Import: the QR Import status-bar button shows a QR code — scan it on
your phone to open a page where you describe what the fleet should build
(context is the primary field) plus an optional link. A
github.com/<owner>/<repo>link is shallow-cloned intobuilds/<upid>/repo/and a digest of it grounds the build; any other http(s) link rides along as reference. Every submission spawns a REAL fleet project — the same accept→build→preview fan-out accepted ideas get. The server always binds a dedicated phone listener on0.0.0.0:<port+1>serving only the import surface, so the QR works even when the main server is loopback- bound (override the port withVIBERSYN_PHONE_PORT, disable the listener withVIBERSYN_PHONE_LISTENER=0). Note: like the rest of the room API, the import surface is unauthenticated — anyone on the room LAN can add projects; that's the point, but run it on a network you trust.
Toggle 🔍 Research (or press r, or say "Vibersyn, research on") and the
room's conversation grows a 3D dialogue tree next to the idea garden — a
rising helix of speaker-colored turn nodes (VoxTerm's flat transcript,
re-imagined in space) — while a suggester agent watches the talk and proposes
research quests: claims to fact-check, topics to deep-dive, framings to
bias-scan. Each quest buds off the exact turn it was grounded in as a
clickable crystal (blue = proposed). Nothing researches itself: click the
crystal (or the tray's Research button, or say "Vibersyn, research it" /
"fact check") and a research agent spawns — it web-searches for sources, an
adversarial second pass tries to refute every finding, and a third pass
flags bias and blind spots. The finished crystal (mint) opens a
self-contained dossier slideshow: findings with supported/refuted/mixed
verdicts, bias notes, and a QR code per source so anyone in the room can
scan a citation straight to their phone (GET /api/research/:id/deck).
src/research/— suggester, three-stage agent, quest ledger/loop, deck renderer. Backends mirror idea detection: host-claudeinference is the no-config default (the agent gets real web search via the CLI);VIBERSYN_RESEARCH_SUGGESTER=heuristicandVIBERSYN_RESEARCH_AGENT=stubrun deterministic offline versions (CI/tests). Models/timeouts:VIBERSYN_RESEARCH_SUGGESTER_MODEL,VIBERSYN_RESEARCH_AGENT_MODEL,VIBERSYN_RESEARCH_STAGE_TIMEOUT_MS.- API:
POST /api/research-mode {on}·POST /api/research/:id/accept·POST /api/research/:id/dismiss·GET /api/research/:id/deck.
./run-room.sh --gesture runs the camera-driven room: a single Orbbec
Gemini 335 depth camera in the room's far corner watches BOTH walls, and
the gesture wall's Python server turns its pose stream into per-wall cursor
streams over a WebSocket; each wall window opens with &gesture=1&fusion=ws://…
so the UI mounts its gesture layer (src/ui/gesture/) — a completed ~0.8s
dwell clicks the REAL bubble/button beneath the cursor. On macOS the camera
server must run under sudo -E (opening the camera needs elevated
permissions). Calibrate with ./run-room.sh --calibrate (projector
auto-calibration; re-run after moving anything), and keep some ambient light on
people — pose reads the color image, and a dark projected room starves it
(depth is IR and doesn't care). No camera handy? ./run-room.sh --fake uses
synthetic cursors so you can see it work. See
gesture-wall/GEMINI.md for the hardware setup and
gesture-wall/VIBERSYN.md.
The one-projector variant: a single wall driven by an old Kinect v2
(Xbox One) instead of the Orbbec — same gesture layer, no sudo, runs with
ROOM_CONFIG=gesture-wall/room.kinect.json ./run-room.sh --single --gesture.
Full bring-up (which Kinect you have, camera placement, libfreenect2 +
bridge build, calibration, troubleshooting):
docs/KINECT-SINGLE-WALL.md.
An independent, opt-in gesture input for the CAMERA (composes with desk mode
and with --gesture dwell): a TouchDesigner rig (the laptop's built-in camera
- MediaPipe hand tracking — no depth camera needed) streams per-hand pinch
frames over a WebSocket on :9980, and the
opted-in wall window steers its 3D camera with your hands — pinch-hold one
hand and drag to orbit (release with a flick to coast, exactly like a mouse
flick); pinch BOTH hands and spread/squeeze to zoom in/out (drifting both
hands pans). URL param:
?hands=1connects tows://<page-host>:9980,?hands=ws://td-mac:9980names an explicit source, absent = off.
- No hardware:
./run-room.sh --fake-hands— a scripted 12 s synthetic pinch choreography drives wall A (orbit → flick coast → zoom → pan), for tuning the feel with no TouchDesigner and no cameras. - Real hands, no TouchDesigner (recommended):
./run-room.sh --real-hands— launches the standalone MediaPipe bridge (gesture-wall/touchdesigner/hands_mediapipe.py) alongside the room: it opens the laptop camera, runs MediaPipe hand tracking, and streams the exact samevibersyn-pinchprotocol on :9980 that the TouchDesigner DAT did — no.toefile, no GPU plugin. The wall opens with&hands=1. First run downloads the ~7.8 MBhand_landmarker.taskmodel (cached). Needs macOS Camera permission granted to the launching Terminal/IDE (a sandboxed shell fails auth). Run the bridge by hand withgesture-wall/.venv/bin/python gesture-wall/touchdesigner/hands_mediapipe.py --port 9980 --wall Aand connect any room with--hands=ws://localhost:9980(or?hands=1). - Real rig (TouchDesigner):
./run-room.sh --hands=ws://<td-host>:9980— the TouchDesigner network described ingesture-wall/touchdesigner/README.md(MediaPipe plugin install, drop-in DAT scripts, channel verification, tuning).
The Cerebras decision path (VIBERSYN_DECISION_LLM=cue-cerebras, needs
CEREBRAS_API_KEY) defaults to gemma-4-31b — Cerebras's Gemma 4 (31B,
multimodal, ~1850 tok/s), currently preview tier. Set CEREBRAS_MODEL to
override, e.g. CEREBRAS_MODEL=gpt-oss-120b for the production-tier model.
(Idea judging itself defaults to the host claude CLI —
VIBERSYN_IDEA_DETECTOR selects the detector backend.)
bun test— the Vibersyn TS suite.node gesture-wall/web/_*_check.mjs— the wall client's headless JS checks;pytestundergesture-wall/for the Python pipeline.