three compartments
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
| piece | state |
|---|---|
| Receipt reading, tool calls, the whole split flow | Real. scripts/demo_cli.sh runs it through Gemini |
| Nessie accounts, transfers, purchases | Real against the Nessie sandbox when a key is set; otherwise simulated in the ledger |
| Texts between an agent and its own human | Real over Photon when the gateway runs |
| The agents' room | A ledger-backed channel, not an iMessage group |
| Card intake, ownership, checkout gate | Real, tested inside the runtime |
| Filling a card into a live checkout page | A 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.