groupcart

three compartments

imessageeach friend texts their own agent
photon spectrumthe cloud that carries the texts
core/ · the agent runtimePhoton adapter and sidecar · a gateway with one session per person · the agent loop, calling Gemini, which reads receipt photos natively · browser tools and an encrypted vault store
app/split/receipt → agents' room → shares → payment · the ledger (SQLite) · Capital One Nessie
vault/cardvault/card intake over text · per-person scoping · the split-or-solo checkout gate
ours vendored, not ours

Our code reaches the runtime only through its plugin API. The two plugins do not import each other: the vault asks the split plugin one question, "has everyone paid on this split?", through the tool registry.

one runtime, many agents

Every friend texts the same Photon project. The gateway keeps a separate session per person, and a hook starts every turn by telling the model whose agent it is and what is pending for that person.

So "each person has their own agent" is true at the level that matters: separate conversation, separate identity, separate money, separate cards. What they share is the ledger, which is how one agent's question reaches another.

real or simulated

piecestate
Receipt reading, tool calls, the whole split flowReal. scripts/demo_cli.sh runs it through Gemini
Nessie accounts, transfers, purchasesReal against the Nessie sandbox when a key is set; otherwise simulated in the ledger
Texts between an agent and its own humanReal over Photon when the gateway runs
The agents' roomA ledger-backed channel, not an iMessage group
Card intake, ownership, checkout gateReal, tested inside the runtime
Filling a card into a live checkout pageA runtime feature; not exercised by us end to end

the ledger

One SQLite file. Nine tables: people contacts splits items members claims room outbox kv.

room is the agent-to-agent conversation, one row per message. outbox is every text an agent sent to a human, with whether it was delivered. Look at them from outside a conversation:

./gc split room --watch
./gc split outbox
./gc split people

what we wrote, what we did not

app/, vault/, scripts/, docs/ and this site were written during the hackathon.

core/ was not. It is Hermes Agent by Nous Research (MIT licence), copied in and renamed to GroupCart by a script. It gives us the agent loop, the Photon iMessage adapter, browser automation and the encrypted vault store. We never edit it by hand.

next: hosted

Plan only; not built. You enter a name and a phone number, the page shows your agent's number, and you text it. No terminal, no keys, no account anywhere else: we run one instance and hold every outside account on the server.

One small VM, exactly one runtime replica, a persistent disk for the ledger and the vault key. The real limit is how many people one Photon project can hold.

Bello!