Skip to content

About

Noa, the relationship AI that remembers the little things and helps you show up. Built with Meta Muse Spark, Muse Spark Open on Baseten, and Muse Code for the Meta AI Hackathon.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

IceBrkn: Noa remembers the little things

Meta hackathon submission, Startups track. Theme: "Build for Your World". Built during the Meta hackathon, Oct 26 - Nov 4 2026, by Jesse, IceBrkn's founder, with AI coding tools (Meta Muse Code for the files listed under "Built with Meta Muse Code").

"There's Sarah. Catch me up." Jordan sees someone he knows. Noa, IceBrkn's assistant, tells him what matters about that person.

The film

Film: IceBrkn | Meet Noa: AI That Remembers What Matters | Meta AI Hackathon 2026 (youtu.be/HW44S3QxDHI)

About 2:20. The story, in order:

  1. Jordan runs Pace & Field, a furniture shop in Richmond. Sarah has been a customer of the shop since last September.
  2. In March, Jordan tells Noa once, in one sentence: Sarah is taking her daughter to UVA this fall, and once Sarah's fund launches he wants to introduce her to Marcus. Noa shows what she understood, and Jordan taps Keep.
  3. On November 4th, Sarah launches Wren Hollow Partners. Jordan never asked Noa to check. Noa notices the change and brings back the intro he asked for.
  4. Through Ray-Ban Meta glasses, Jordan asks Noa to catch him up on Sarah.
  5. Noa drafts the intro with Meta Muse Spark. Jordan reads both recipients and every word, approves once, and IceBrkn sends it (to a demo mailbox).
  6. Marcus replies (a demo fast-forward). Noa asks "Did they connect?" Jordan answers "It led to something": they're setting up lunch in Charlottesville with Sarah, Emma and Marcus. How it happened shows the whole story, from the March ask to Jordan's update. The film does not claim a booking or a lunch that happened.
  7. Sarah has her own task: Emma's dorm. A Meta-powered shopping agent gets only the task, not Sarah's relationship history. It skips the lamp and the rug, and Sarah approves a test order. In the judge web app this hand-off runs live on your seat.
  8. Try it yourself: the judge web app.

On-screen labels:

  • A Meta badge appears only where our logs show that model ran.
  • Each product scene is tagged as built at the Meta hackathon or built before it, following the table in "Built during the hackathon vs before" below. Neither tag means the feature is in a released app.
  • Closing credits: "In this film: Muse Spark · Muse Voice Transcribe · Ray-Ban Meta glasses" and "Also in the build: Muse Spark Open on Baseten · Muse Image · SAM 3.1 · Muse Code".

Try it

  • Live demo (the IceBrkn web app in judge mode): https://icebrkn-judge.vercel.app
  • Sign-in: the judge pass is in the judge notes on the submission. No pass, key or secret is in this repo. Each judge gets a demo seat: their own copy of Jordan Pace and his relationships. Sarah and Marcus are shared demo people. The page shows a seat code once; save it to come back to the same seat.
  • One story screen follows the film's order:
    1. Tell Noa once. Say or type the film's sentence (or press "Use the film's sentence"): "Sarah's taking her daughter to UVA this fall. Once Sarah's fund launches, I want to introduce her to Marcus Vantreese." Noa shows what she understood. Nothing is kept until you press Keep ("Logged 2 memories for Sarah."). In the story, Jordan told Noa this in March.
    2. Press "Launch Sarah's fund". This is a demo trigger, on your seat only, and in the story it is November 4th. You don't ask Noa anything: she notices the change, brings back the intro you asked for in March, catches you up on Sarah (out loud) and drafts the intro.
    3. Read the draft and approve it once. IceBrkn sends it to your seat's demo mailbox; no real email leaves the server.
    4. Marcus's reply arrives (pre-written demo text, a demo fast-forward). Noa asks "Did they connect?" Answer "It led to something" and add that they're setting up lunch.
    5. How it happened shows the story of the intro, from your March ask through Marcus's reply to your update, each step with its source. With a lunch update its headline reads "Now they're setting up lunch." It claims no meeting.
    6. Last, the dorm hand-off, live on your seat: Sarah's own task for Emma's dorm. Meta Muse Spark gets only the bed size, colors, colors to avoid and what not to buy. Code checks every pick. You approve the exact cart and total as Sarah, and a test order is placed. IceBrkn never stores payment details; they stay with the payment provider. The confirmation and Noa's closing line close the loop. One live run per seat per day; if it can't run, the page shows our recorded Nov 1 run instead.
  • "What Noa is doing" lists Noa's 12 steps as they happen, starting with "Remembered". Each one is tagged "Built at the hackathon" or "Built before the hackathon". Neither tag means the step is in a released app.
  • Tap Listen on any of Noa's replies in the chat to hear her (her voice is Mariana, through V2's own tap-to-hear). Catch me up speaks on its own. She says the names right ("IceBrkn" is spoken "Icebreaking").
  • The story survives a reload, and the one approval scrolls into view when the draft lands.
  • Model calls: loading or reloading the page makes no model call. Each seat has 40 model calls a day. Telling Noa is read by Muse Spark Open on Baseten (a spoken note is first heard by Muse Voice Transcribe); the intro draft and reading Marcus's reply use Muse Spark (Meta Model API). Catch me up answers from your seat's own records with no model call. The live dorm run uses Muse Spark. Noa's spoken voice is ElevenLabs, not a Meta model.
  • Please use made-up details. What you type or say in the story is sent to Meta's models; free-form chat with Noa on a judge seat is sent to Anthropic's Claude first.
  • The glasses beat needs Ray-Ban Meta glasses and a test build of the iOS app, so judges see it in the film.

What IceBrkn is

IceBrkn is relationship intelligence. It remembers the Little Things (our word for small facts about a person): a daughter starting college, a first marathon, an intro you want to make. Noa brings the right one back at the right moment, for example when you see that person again.

We compete with forgotten relationships, not with productivity AI. Email, calendar and chat are inputs. IceBrkn is not a CRM, not a task manager and not a general assistant. It answers one question: who matters right now, why, and what to do about it.

What's live today, and what we built here

Live today: IceBrkn V1 (iOS 1.0.4 on the App Store, released August 2024, no app updates since). Built by a human development team. V1 is about clean, verified data: it cleans up your contacts, verifies their details and builds accurate profiles. It also has events and reputation tiers. V1 has no way to connect with someone in the app.

Not live yet: IceBrkn V2. Started in May 2026, built by AI agents working with IceBrkn's founder. Nothing in this demo is in a released app. The demo runs V2 on a separate demo server, with fictional people only.

V2 pieces built before the hackathon (used in the story):

  • Noticing a job change ("Sarah launched Wren Hollow Partners")
  • Following up after an intro ("Did they connect?")
  • The Moments engine behind "How it happened"
  • Noa, Little Things, connecting, messaging, QR connect, Spaces

Built at the hackathon (Oct 26 to Nov 4):

  • Telling Noa once, by voice or typed, sorted into cards you keep
  • Waking up the intro you asked for when the moment arrives
  • Catch me up, including through Ray-Ban Meta glasses
  • The intro email drafted with Meta Muse Spark: you approve once, IceBrkn sends
  • The intro's full "How it happened" story, from your March ask to the reply and your update
  • Handing a task to an outside shopping agent (Emma's dorm, live on judge seats)

In the demo, each step is tagged Built at the hackathon or Built before the hackathon. Neither tag means the step is in a released app.

Demo data: everything here is fictional

Every person, company and event in the demo is made up: Jordan Pace (who runs a furniture shop in Richmond), Sarah and Emma Whitlock, Marcus Vantreese, Theo Marchetti, Dan Whitcombe, Lena Halvorsen, Pete Arbogast, Ines Carvalho, their companies and the store in beat 7. Demo accounts use @test.icebrkn.com or @example.com addresses. UVA (the University of Virginia) and the cities are real places, used only as places. Checkout is test mode only. Muse Image art in the demo is labeled as made by Meta Muse Image. The live dorm card captions its photo as reused from an earlier Meta Muse Image run. The shopping agent's own input photo and its cutouts in dorm-agent/hosted-cache are stored unlabeled.

A few seed tests still mention "Sarah Demo" and "Emma Demo": those are the placeholder names of an earlier draft cast, and the seed renames any record left with them. The cast above is the final one.

What is in this repo

Folder What it is Runs on its own?
api/ The new backend modules built for the judge demo and beats 1 to 6, the demo seed, and the Muse relay, copied from the private IceBrkn backend No. They plug into IceBrkn's private backend; judges use the live demo at the link above
dorm-agent/ Beat 7: a shopping agent built on Meta models that shops a dorm photo from the task IceBrkn hands it, plus its hosted mode (one live run per judge seat, called server to server) Yes, locally, with your own Meta key
feed-opener/ Beat 0: the opening video art (Muse Image) Yes (dry run needs no key)
demo-seed/ The fictional demo world as data files, with a validator Yes (no network, no database)
web/ The judge mode of the IceBrkn web app (the story screen, judge sign-in, the shopping agent hand-off), copied from the private IceBrkn web app No. It builds inside IceBrkn's private web app; judges use the live demo at the link above
docs/ Beat 7 evidence, the Oct 27 beat 7 design (before the task-only re-cut), the Muse Code prompts and run log, and judge.html, a one-page judge tour that matches this README

What was built

api/... is short for api/apps/core/src/modules. "Judge web app" is the live demo at the link above. "Earlier judge page" is the one-page judge page we checked on Nov 2 (its source is in api/.../hackathon-demo/judge-page/).

Beat What it does Meta tools Code Where you can see it
0. Feed opener Opening video art: three fictional moments in a feed Muse Image feed-opener/ Video. Run it yourself
1. Remember You tell Noa something by voice or typing. A Meta model sorts each sentence into a fact or an intro you want to make. Code, not the model, decides who each one is about, and nothing is kept until you confirm On the demo server: Muse Spark Open on Baseten reads the note, and on a judge seat Voice Transcribe hears a spoken one; Voice Transcribe + Muse Spark when the open-weight route is off api/.../voice-capture/ Judge web app (Tell Noa once)
2a. The photo You show Noa a photo about a person you name. A Meta model reads only the place and the occasion, never names or faces Muse Spark Open on Baseten on the demo server; Muse Spark when the route is off api/.../signal-intake/ Earlier judge page (Nov 2 checks). Not part of the judge web app story
2b. The job change When someone's job changes, the intro you asked for that was waiting on it comes back. Code decides; no model is involved. Noticing the job change itself was built before the hackathon (IceBrkn code) api/.../ratings/relevant-change/held-plan*.ts, api/.../relevant-change-push/ Judge web app ("Launch Sarah's fund")
3. Catch me up You ask about the person in front of you, by voice (Ray-Ban Meta as the mic and speaker) or typed. Noa's answer is written by code from your own records, with where each fact came from. Someone with nothing worth saying gets silence. What Noa knows and her voice were built before the hackathon Voice Transcribe, Ray-Ban Meta over Bluetooth api/.../glasses/ Judge web app (after the fund launch). The glasses part is in the film only
4. The intro Noa drafts the intro email with Muse Spark from facts code picks: only work lines and how you know each person, never a Little Thing you told Noa about them. You see every word and approve once before it goes, and it is built so it can't go out twice. Approving and sending from your mailbox were built before the hackathon Muse Spark api/.../plan-intro/ Judge web app, sent to the seat's demo mailbox
5. Who should I see in a city Muse Spark turns your question into a place. Code picks the people, and names only people with something waiting on you. When none of your relationships are there, code looks one step out (a friend of a friend) Muse Spark api/.../place-read/, api/.../hackathon-demo/warm-path/ Earlier judge page (Nov 2 checks). Not part of the judge web app story
6. How it happened The steps of an intro you asked for and Noa held, each with its source, and the "through you" line on the graph. New: the chain for that intro, its headline ("You asked for this intro back in March. Now Sarah and Marcus are talking.", or "Now they're setting up lunch." when your update says lunch), Marcus's reply as a step, Noa's line ("You said you'd introduce Sarah to Marcus once Sarah's fund launched. I didn't forget."), the "You approved the intro" and "Noa sent the intro" steps, and the source label on each step. Built before the hackathon: the reply follow-up, the Moments screen and evidence chain it sits in, the wording of the outcome steps you report ("You said it led to ...") and "Did Noa get this right?" (IceBrkn code); on the demo server Muse Spark reads the reply api/apps/core/src/common/lane-d-copy.ts, api/.../plan-intro/plan-intro.service.ts, api/.../ratings/relevant-change/held-plan*.ts, api/.../graph/through-you.ts, the wow-moments and user-intro.service.ts edits in the patch Judge web app, after Marcus's reply. The "through you" line is not shown on judge seats
7. Shop the dorm photo Sarah and Emma like a dorm photo. A Muse agent cuts it into pieces and shops them, using only the task IceBrkn hands it: Twin XL, sage and navy, no pink, skip the lamp and the rug Muse Image, SAM 3.1, Muse Spark (vision, strict JSON, tool calling) dorm-agent/; the IceBrkn side is api/.../agent-access/fulfillment-task.ts Film, and live on judge seats in the judge web app (one run per seat per day). Run it yourself
Today Noa's answer to "what's going on today": who matters today and why, with one offer. The calendar and birthdays it reads were built before the hackathon api/.../nova/today/ Not in the judge demo
Outside agents An outside agent gets Noa's short answer only, never the facts behind it, and a wider never-list (contact details, kids, health and money in any wording) screened before Noa sees the prompt; a fulfillment task carries only what the task needs. Agent sign-in, consent and the older sensitive-item hold were built before the hackathon api/.../agent-access/fulfillment-task.ts, api/apps/core/src/common/contact/, edits in the patch Not in the judge demo
Judge product Demo seats for judges, judge sign-in, a daily cap of 40 model calls per seat, a crisis check (code, no model) on every step that takes words, the demo trigger for the fund launch and the pre-written reply from Marcus, the story chat's router on the server (crisis line first; anything off-script gets a short line and no model call), and the earlier judge page. On a seat, the seat's people's names go to Voice Transcribe as hints, and a word or phrase Meta's transcript repeats back to back is folded to one before anything is shown or saved Voice Transcribe api/.../hackathon-demo/, api/.../voice-capture/fold-stutters.ts The judge web app itself
Demo seed Builds the fictional demo world through the same routes a user uses api/apps/core/src/scripts/hackathon-seed-demo.ts

Beat 7 in one line: the shopping agent gets the task, not your relationship. IceBrkn hands it six fields (who, bed size, colors, colors to avoid, what not to buy) and keeps the why. Code enforces the task. IceBrkn never shops. Details in the dorm-agent README.

Where the Meta pieces are

Meta tool What it does here Code
Muse Spark 1.3 (Meta Model API) Turns a place question into a place, drafts the intro email and, on the demo server, reads Marcus's reply; sorts a note and reads a photo when the open-weight route is off; in beat 7, names the pieces, reads the cutouts and runs the tool-calling shopper api/.../place-read/place-read.ts, api/.../place-read/place-read.service.ts, api/.../plan-intro/plan-intro-draft.ts, api/.../voice-capture/capture-extraction.ts, api/.../signal-intake/photo-read.ts; the provider retry and relay switch api/.../ai/providers/muse-retry.ts, api/.../ai/providers/muse-relay.spec.ts and the muse.provider.ts edits in the patch; dorm-agent/src/meta/
Muse Voice Transcribe (Meta Model API) Hears "Catch me up" questions and, on a judge seat, a spoken note, with the seat's people's names as hints; for other accounts, hears voice notes when the open-weight route is off api/.../voice-capture/muse-transcribe.service.ts, api/.../voice-capture/wav.ts, api/.../hackathon-demo/seat-transcribe-hints.ts
Muse Spark Open (Meta open weights, meta-models/muse-spark-open-1026, served by Baseten) The route for the private reads: reading the voice note, the typed note and the photo goes to Meta's open-weight model on Baseten instead of the Meta Model API. On a judge seat a voice note is heard by Muse Voice Transcribe first, since Nov 2; for other accounts with the route on, Muse Spark Open also hears it. Baseten is a hosted inference partner, not our own servers. The demo server has this route on. Every answer says which model ran (heard_by, read_by), and it never falls back to the hosted API api/.../ai/open-weights.ts, api/.../ai/providers/baseten.provider.ts, api/.../voice-capture/open-weight-transcribe.service.ts
Ray-Ban Meta glasses A Bluetooth mic and speaker for "Catch me up". The glasses camera is not used and the Meta wearables toolkit is not used: the wearer always says the name Server side: api/.../glasses/. The iOS side is not in this repo
SAM 3.1 Beat 7, cuts the dorm photo into its pieces dorm-agent/src/meta/sam.ts
Muse Image Beat 7 dorm photo, beat 0 feed art dorm-agent/src/steps/photo.ts, feed-opener/
Muse Code Wrote feed-opener/, demo-seed/ and the first versions of this README and docs/judge.html, and, on Nov 3, the recorded shopping agent hand-off in the web app, one line of Noa's copy, and the dorm agent's hosted mode and packaging See "Built with Meta Muse Code"

The Muse relay: on the demo server, Muse Spark chat calls go out through a small AWS relay, because on Oct 31 Meta's API refused calls from our hosting provider's network (model_not_found) while the same key worked from AWS. Meta support escalated it. The relay only forwards the call and stores nothing (its code logs nothing about the call): api/infra/muse-relay/. Voice Transcribe and Muse Spark Open do not use it.

Partner technology: Baseten only. It serves Muse Spark Open for the private reads. We did not use Fireworks or Modal.

How it works

  • Meta's models hear, read and see. IceBrkn's code decides who a fact is about and what to keep. A model never decides whose record a fact goes on, never picks who to email, and never sees an address from your records.
  • Confirm first. Nothing a model reads is kept until the user says so.
  • Every fact carries its source in plain words, for example "You mentioned it to Noa" or "Read from your photo by Meta Muse".
  • No face recognition anywhere. A person is always named by the user. Photos are read for place and occasion only, through a schema that allows nothing else.
  • On the demo server, the model calls a judge step makes count against a daily cap per seat. Words that sound like a crisis get one fixed line pointing to 988, from code, before any model reads them (a voice note is transcribed first).

Privacy rules the demo shows:

  • The intro never passes on a Little Thing you told Noa about someone. Only work lines and how you know each person reach Meta Muse Spark.
  • Catch me up answers from your own records, with no model call.
  • Outside agents get the task fields only.

Architecture

An iPhone app (and, for judges, the IceBrkn web app in judge mode) calls the IceBrkn API (NestJS, TypeScript, Postgres, Redis). The new modules sit inside that API next to the existing memory, graph and follow-up services. Model calls go out through one provider layer: Muse Spark and Voice Transcribe on the Meta Model API, or Muse Spark Open on Baseten for the private reads. On the demo server, free-form chat with Noa on a judge seat tries Anthropic's Claude first, with Muse Spark as the fallback; the reply check tries Muse Spark first, with Claude as the fallback. Noa's spoken voice is ElevenLabs.

The moat: the relationship stays in IceBrkn

Who knows who, how and where you met, and your full memory of each person stay in IceBrkn. In the story steps, Meta's models get one step's input at a time: the note, the photo, the question, or (for an intro draft) work lines and how you know each person, never a Little Thing, your list of relationships or your graph. Free-form chat with Noa is the full Noa chat: it sends the seat's fictional records Noa needs for the answer to Anthropic's Claude, or to Muse Spark if Claude fails. Outside agents, like the beat 7 shopping agent, get a fulfillment task and only what that task needs, under the user's own grant. IceBrkn never hands over the relationship.

Built during the hackathon vs before

The hackathon ran Oct 26 (kickoff day) to Nov 4 2026. Kickoff-day work counts as hackathon work. In the judge web app we use two tags: "Built at the hackathon" and "Built before the hackathon". "Built before the hackathon" does not mean live: most of it is V2, which is not in a released app (see "What's live today, and what we built here").

Piece Built before the hackathon (before the Oct 26 kickoff) New in this hackathon Built with Muse Code
Backend (api/) The NestJS + Postgres backend, accounts and sign-in, contacts, the relationship graph, the Little Things memory store (Oct 12), open loops (intros and follow-ups you asked for), Daily Brief, job-change detection, watchers and the job-change push (May to Oct 17), reply follow-ups ("Did they connect?", "How did it go?", by Oct 17), the Moments evidence chain (Oct 18) with its outcome step wording ("You said they met", "You said it led to ...") and "Did Noa get this right?", Noa chat, Noa's approve-first actions (Jul 30), Noa's ElevenLabs voice (Jul 12), key dates and birthdays, calendar connections, the AI provider layer (including a Muse Spark provider, added Sep 23 for benchmarks only), and the agent connector (OAuth for outside agents, ask_noa, consent, and holding back sensitive items, Oct 23 to 25) Everything in api/, including the How it happened chain for an intro you asked for and Noa held: its headline, Noa's line, the approve and send steps, and every step's source label (beat 6 above) No. One line of Noa's copy ("your relationships", run 06), in the patch
Judge web app (web/) The IceBrkn web app (Next.js): its V2 screens, the intro approval card, the "How did it go?" row and the Moments section it reuses Judge mode (a separate build: /judge sign-in, one seat per browser, every other screen fenced off), the story screen that follows the film's order with its 12 tagged steps, the story chat and its router on the server (api/.../hackathon-demo/seat-story/: crisis line first, Noa answers questions about the seat's relationships, anything off-script gets a short line and no model call), voice in the chat (Listen on Noa's replies), and the shopping agent hand-off: a live run per seat per day behind a server switch, which is on for judge seats, with the recorded Nov 1 run as the fallback Partly: the recorded hand-off cards (story-dorm.tsx, dorm-run.ts, run 05)
Beat 7 dorm agent (dorm-agent/) The agent connector above The whole agent: Muse Image photo, Muse Spark naming + SAM 3.1 cutouts + reading, the tool-calling agent, code rules, fictional store, test checkout, demo page; and the get_fulfillment_task tool on the IceBrkn side; and hosted mode, one live run per judge seat, called server to server Partly: hosted mode and its Railway packaging (runs 07 and 08)
Beat 0 feed opener (feed-opener/) None The whole module: prompts, labeled art, video frames, cost ledger Yes
Demo seed data (demo-seed/) None Fictional data files, validator, checks Yes
iOS app The iOS app, including its glasses service shell (May 30) and the Moments screen (Oct 18) that shows How it happened. Neither is in the App Store build The glasses and capture screens (not in this repo) No

How it happened in the film (scene 08) is the iOS Moments screen, which existed before the kickoff. Every line on it that tells this intro's story (the headline, Noa's line, "You approved the intro", "Noa sent the intro" and the source labels) is written by server code new in this hackathon: api/apps/core/src/common/lane-d-copy.ts, used through the wow-moments edits in the patch, for an intro held and matched by api/.../ratings/relevant-change/held-plan.ts and held-plan.service.ts, then drafted and sent by api/.../plan-intro/plan-intro.service.ts. None of these files exists at the baseline tag below. The outcome step wording and "Did Noa get this right?" were built before the hackathon. The film tags the scene "Built at the Meta hackathon".

How to tell them apart in api/:

  • Every file under api/apps, api/libs and api/infra is new: it did not exist before the kickoff. All 235 say so near the top (226 with the line "Built during the Meta hackathon, Oct 26 - Nov 4 2026").
  • api/changes-to-existing-files.patch holds only the hackathon's edits to the 151 files that existed before the kickoff. The unchanged parts of those files were built before the hackathon and are not in this repo.
  • "Before the kickoff" means the private backend's tag hackathon-baseline-2026-10-27, which points at the last commit before kickoff (Oct 25). Most hackathon commits start with hackathon:. A few from the same days do not (the outside-agent changes, the shared contact cleaner, some test ports and demo merges), so this repo counts every file added or changed since that baseline, not only commits with that word. Sign-in fixes finished just after midnight on Oct 26, before kickoff, are not hackathon work and are not here.
  • Left out on purpose: 5 test files whose fixtures were copied from the founder's own calendar and contacts, because they hold real people's details (nova/today/today.skill.spec.ts, nova/skills/calendar-list.every-account.spec.ts, connect-accounts/provider-routers.every-account.spec.ts, calendar-interactions/calendar-interactions.ingest-provider.spec.ts, ratings/birthday-signal.scheduler.tz.spec.ts). Also left out: the 5 cast portrait images the demo seed uploads (scripts/hackathon-seed-assets/). They are AI-made faces of the fictional cast from our video work, not Muse Image demo art.
  • Changed from the backend copy, in strings, comments and test data only (no logic): real names, real email addresses, a real calendar name, a real venue, a personal schedule and the demo server's storage bucket name in 10 files and one comment in the patch were swapped for made-up ones; the demo host and the judge page README's header are written for this repo; 30 files got the hackathon label line, and 14 labels give the Oct 26 kickoff instead of Oct 27. Every other file is copied as it is in the backend.
  • web/ the same way: the 40 files under web/packages/client are new judge mode files (the story screen, judge sign-in, seat handling, the Listen button, the shopping agent hand-off cards, and their tests), and web/changes-to-existing-files.patch holds only the judge mode edits to 13 files of the private web app. The demo host is written <DEMO_API_HOST>. See web/README.md.
  • Code comments carry our review trail: decision numbers (D-numbers) and the reviewer rounds a change went through.

Setup: run it yourself

Judges run the live demo at the link in "Try it". The api/ modules plug into IceBrkn's private backend (accounts, memory, graph, Brief), which is not in this repo. Their tests sit next to each file (*.spec.ts, and *.pg.spec.ts for tests against a real Postgres) and run inside that backend. .env.example lists the settings the new modules read, with placeholders only.

The parts below run from this repo.

Beat 7 (dorm-agent/, full steps in its README). Needs Node 22.9 or newer. The key goes in the shell only, never in a file.

cd dorm-agent
npm install
npm run probe
npm run serve
npm run run-agent
npm run shop -- --go
npm run order -- --approve
npm test

npm run serve starts the demo page on 127.0.0.1 only. The key is read only from the shell variable META_DEV_BACKEND_KEY.

Beat 0 (feed-opener/, full steps in its README). Needs Node 22.9 or newer. Dry run needs no key and makes no network call.

cd feed-opener
npm install
npm run make -- --dry-run
npm test
npm run typecheck

In Windows PowerShell (5.1) the -- separator is lost, so write '--': npm run make '--' --dry-run (or call npx tsx src/cli.ts --dry-run).

Demo seed data (demo-seed/, full steps in its README): data files only, no network, no database writes.

cd demo-seed
npm install
npm test
npm run check

All 26 demo-seed tests pass and npm run check prints "demo-seed: OK, no problems." (Nov 3). The Emma check now reads the dorm agent's task fixture (sarah-emma.get_fulfillment_task.json): every task field must be backed by one of Sarah's lines about Emma. It was a hand fix by Claude, logged as hand fix 11 in docs/muse-code/LOG.md.

Status on Nov 4 2026: the judge web app

From our recorded runs on the judge web app on Nov 4 (US Central), on rehearsal seats, with the model that answered read from the server's usage log. Nothing more than this is claimed.

Part Status
Judge web app Ran on demo, Nov 4: sign-in with the pass, a seat of its own, the full story from Tell Noa once to How it happened.
Page loads Loading and reloading the page made no model call (seat counter and usage log both unchanged).
The story The story survives a reload, and the one approval scrolls into view when the draft lands. The intro draft carries no Little Thing.
How it happened Shows Marcus's reply and Jordan's update; with a lunch update the headline is "Now they're setting up lunch." No meeting is claimed.
Which models answered Tell Noa once: Meta Muse Spark Open on Baseten (a spoken note is first heard by Meta Muse Voice Transcribe). Intro draft, reading Marcus's reply, the How it happened judge and the shopping agent: Meta Muse Spark. Noticing the fund launch, the waiting intro and Catch me up: no model, code only. Free-form chat with Noa on judge seats: IceBrkn's managed Claude model first, with Muse Spark as the fallback. Noa's spoken voice: ElevenLabs.
Model-call cap 40 calls per seat per day.
Shopping agent hand-off HK26_DORM_LIVE is on (checked Nov 4 at about 3:28 PM CT; the shopping hand-off is still on after the 4:22 PM deploy). Nov 4 live runs on seats 1, 2 and 7 each logged one allowed task read through the seat's own grant, and the two-seat isolation checks on seats 1 and 2 all passed. The final run on the build deployed at that time (seat 1, 3:34 to 3:38 PM CT) placed test order C53EA2E9 (8 items, $332, approved by Sarah). The order id comes from the cart, so the same cart always gets the same id (an approval can never place two orders). Muse Spark got only the bed size, colors, colors to avoid and what not to buy; code checked every pick; Sarah approved the exact cart and total. IceBrkn never stores payment details. One live run per seat per day; the recorded Nov 1 run is the fallback.
Listen Noa's replies in the chat have a Listen button (Mariana voice, ElevenLabs); Catch me up speaks.
Spoken notes in the web app Not checked by voice on Nov 4.

Earlier checks, Nov 2 2026: the earlier judge page

Built only from our recorded checks on Nov 2 (US Central) on the earlier one-page judge page: a full judge rehearsal of its steps 1 to 5 in the morning, then five live checks of the fixes made that day, each on fresh seats, and the server records of the takes we filmed that evening. "Ran on demo" means run on the demo server, with the model that answered read from the server's usage log. Voice was a computer-made (text-to-speech) clip played into the page's own recorder, not a live microphone. Nothing more than this is claimed.

Part Status
The judge page The page served then is the copy in api/.../hackathon-demo/judge-page/ (served files compared on Nov 2).
Judge sign-in, seats Ran on demo, Nov 2: 11 fresh seats signed in, each with its own copy of the demo world. A wrong pass is refused (checked Oct 31).
Step 1, typed note Ran on demo, Nov 2. Muse Spark Open on Baseten read it ("You typed it. Read by: Muse Spark Open"). Nothing was kept before Keep (checked Oct 31).
Step 1, voice note Ran on demo, Nov 2. Muse Voice Transcribe heard the note and Muse Spark Open read it, and the page labels both. On the final build, 4 of 4 runs ended with the intro matched to the one already on file, with no dead end (on one run the little thing waited for a pick of Sarah, then was kept). Meta's transcript repeated words back to back on 2 of them, and both were folded before anything was shown or saved. On earlier builds the same day, a garbled transcript could leave a card with no person, which is why the final build has a "Pick who this is, or skip it" wait instead of a dead end.
Step 2, photo Ran on demo, Nov 2 (morning rehearsal): Muse Spark Open read the place and occasion ("A party, about Sarah Whitlock"). The reading is not saved.
Step 3, Catch me up Ran on demo, Nov 2. Typed: Theo gets an answer with its source and Dan gets silence (morning rehearsal). By voice: Muse Voice Transcribe heard "catch me up on Sarah Whitlock", and on the final build 3 of 3 runs gave one answer with exactly one Sarah to Marcus intro. On the build before it, one run heard "catch me up on up on Sarah Whitlock" and Noa answered "Who do you mean?". The final build folds that kind of repeat, which is proven by tests only: Meta repeated no words in the 3 final runs.
Glasses (beat 3 on Ray-Ban Meta) Filmed on Nov 2 (4:25 PM CT) with an iOS test build on a demo seat: the server log shows one glasses "Catch me up" call about Sarah, heard by Muse Voice Transcribe (one successful usage row) and answered from Jordan's own saved notes, with no Muse Spark call. The log extract is in our private filming notes, not in this repo.
Step 4, Charlottesville Ran on demo, Nov 2 (morning rehearsal): Muse Spark found the place, and code named Lena and Marcus. For several hours on Oct 31 this step failed from the demo server (Meta's model_not_found, see the relay above).
Step 4, one step out (Asheville) Ran on demo, Nov 2 (morning rehearsal): "None of your relationships are in Asheville yet, but Marcus knows two people there.", and asking Marcus worked. Code only, no model (checked Oct 31).
Step 5, the fund launch Ran on demo, Nov 2, in every check. Noa brings back the intro with no model call.
Step 5, the intro Ran on demo, Nov 2 (morning rehearsal): Muse Spark drafted it ("Drafted with Meta Muse"), naming Sarah's new firm, Wren Hollow Partners, and it was sent to the seat's demo mailbox.
Step 5, Marcus writes back and How it happened Ran on demo, Nov 2, in every check through the final build: Muse Spark read Marcus's reply, Noa asked "How did it go?", and How it happened showed four steps under "You asked for this intro back in March. Now Sarah and Marcus are talking." It arrived from the page's own polling in 10.6 to 16.0 seconds, with no "Check again".
Which models answered In every Nov 2 check, every text and transcription model call on the judge seats was a Meta model (Muse Voice Transcribe, Muse Spark Open on Baseten, Muse Spark), each with a successful usage row, and the server log showed no Anthropic call or failover in the check windows.
Crisis line, steps 1, 3 and 4 Ran on demo, Oct 31. No model call.
Daily model-call cap Ran on demo, Oct 31: at zero calls left, each model step answers with the cap line. On Nov 2 the seat count matched the calls made (7 per seat in the rehearsal).
"Through you" line on the graph Not shown on demo: judge seats never connect Sarah and Marcus. It has a test against a real Postgres database (plan-intro/lane-d-beats.pg.spec.ts).
Today answer, outside agents Not in the judge demo and not proven on demo in these checks. They have unit tests.
Beat 7 Ran locally with real Meta calls. Nov 1 (8:44 PM CT): Muse Spark shopped the saved dorm photo against the current store in 4 model turns and 32 tool calls, skipped the rug and the desk lamp, picked a Twin XL comforter in sage, and, approved as Sarah, placed a $332 test order. Photo, pieces and cutouts are from the Oct 27 run. In this Nov 1 run the agent read its IceBrkn task from a fixture copy of IceBrkn's answer (the live run on judge seats came later: see the Nov 4 status). Run record.
iOS app, and the account we film Not part of the judge-page checks. The film's Meta badges each trace to a record: Muse Voice Transcribe on the glasses take above; Muse Spark 1.3 on the intro draft (one successful usage row, Nov 2 8:29 PM CT, then approved and sent at 8:39 PM CT as a demo send, so nothing left IceBrkn); Muse Spark in beat 7 (the Beat 7 row above).

Limits

Beyond the status tables above:

  • Marcus's reply is pre-written demo text, dropped into the seat's demo mailbox (a demo fast-forward). No real email is sent or read.
  • The lunch is what Jordan reports. No booking or lunch that happened is claimed.
  • The dorm hand-off runs live once per seat per day; after that, or if it can't run, the page shows our recorded Nov 1 run. Checkout is test mode in a fictional store.
  • A stray or misheard word in a voice note is kept as heard (Nov 2: "Sarah's is taking her daughter to UVA", "fun" for "fund"), and Catch me up then reads both that note and the clean one.
  • The fund launch card says Noa will bring the intro up at Richmond Founders Supper on Thursday, and that line stays after the intro is sent (Nov 2).
  • Seen on Oct 31: Noa read "Who do I know at Boston Consulting Group?" as a place, and a misspelled surname gets "I don't know a Marcus Vantriece yet." with no suggestion.

What is not here

  • The rest of the IceBrkn backend (see "Run it yourself").
  • The iOS app.
  • Any key, pass or secret. gitleaks scans the full history on every push in CI (.github/workflows/secrets-scan.yml) and in our pre-push hook. .gitleaks.toml allows exactly three made-up test values, each named in the file; any other finding, even in the same file, still fails the scan.

Built with Meta Muse Code

Muse Code ran headless with muse exec. Claude (an AI coding assistant) wrote each prompt, reviewed Muse Code's output, ran the tests, and sent findings back to Muse Code as new prompts. The prompts are committed in docs/muse-code/prompts/; every run, its token use and cost (where kept), and every hand fix are in docs/muse-code/LOG.md.

Files Muse Code wrote
feed-opener/ (all files)
demo-seed/ (all files)
The first version of docs/judge.html (Oct 27)
The first version of this README (Oct 27)
The recorded shopping agent hand-off cards in the web app, web/.../sections/v2-story/story-dorm.tsx and dorm-run.ts (Nov 3, run 05)
One line of Noa's copy, so it uses "your relationships", in nova/noa-lines.ts and its test (in api/changes-to-existing-files.patch; Nov 3, run 06)
dorm-agent/ hosted mode, src/hosted.ts, src/hosted-run.ts, test/hosted.test.ts and its seat task fixture (Nov 3, run 07)
dorm-agent/ Railway packaging, Dockerfile, .dockerignore, railway.json, scripts/pack-hosted-cache.ts and the README "Hosted mode" section (Nov 3, run 08)

Claude's later edits to these files are listed one by one in the log. On Oct 30, Nov 1, Nov 2, Nov 3 and Nov 4 Claude rewrote this README and docs/judge.html to match the demo, so neither is Muse Code's work any more. The hosted run time limit (commit 4ad118c) was written by Astra (OpenAI Codex) and reviewed by Claude; the restart fix (1dc105d) and the cart line fix (4edbfe1) are Claude's. None of the three is Muse Code's work.

Written by Claude, not Muse Code: docs/muse-code/LOG.md, the prompts, and the rest of web/, api/ and dorm-agent/ (one change in dorm-agent/ is Astra's, see the log).

Nov 3: Muse Code runs 05 to 08 are in the log with their prompts. Their token counts were not kept per run (Meta's dashboard shows account totals only). All Meta API use during the hackathon, Muse Code included, cost $8.70 (Meta console, Nov 3).

Evidence

License

All rights reserved. The code is public only so judges can read and evaluate the submission; see LICENSE.

About

Noa, the relationship AI that remembers the little things and helps you show up. Built with Meta Muse Spark, Muse Spark Open on Baseten, and Muse Code for the Meta AI Hackathon.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages