What it does
Abend helps friends resolve shared expenses without turning disagreements over money into arguments. When people split costs, the difficult part isn't always the calculation. It's remembering what everyone agreed to, identifying which repayments actually count, and understanding why someone still owes money. Abend brings those records together in one workspace. Users enter participants, shared expenses, agreed shares, repayment claims, and optional supporting evidence. Two concurrent Mozaik investigators examine the agreements and repayments. Their findings feed an evidence-backed reconciliation system that calculates balances using exact arithmetic. Unlike a basic expense splitter, Abend doesn't automatically treat a claimed repayment as confirmed. Users can inspect supporting evidence, confirm or reject payments, reverse decisions, and immediately see how their choices change the balances. The result is a transparent, human-reviewed way to settle shared expenses while keeping friendships intact.
How the agents run concurrently
Abend uses @mozaik-ai/core v4.0.6 to run two independent investigators concurrently within a shared Mozaik runtime. The Agreement Investigator examines structured expense records, identifying participants, payers, agreed shares, and supporting evidence. At the same time, the Payment Investigator examines repayment records, checking the sender, recipient, amount, currency, purpose, and claimed payment status. Both investigators are separate Mozaik participants with distinct identities. Each starts through its own genuine runLoop call without waiting for the other to finish. Their validated findings are published as semantic events into a shared RuntimeState. A deterministic reconciliation participant reacts as findings arrive, first processing partial state and then updating the results when information from both investigators becomes available. This means reconciliation genuinely depends on the combined outputs of both concurrent investigators rather than two sequential steps disguised as agents. Human confirmations, rejections, and reversals also produce runtime decisions that trigger recalculation. Concurrency is independently verifiable through authentic Mozaik loop IDs, event timelines, and shared-state updates exposed in the application. During final public-browser verification, the investigators demonstrated 32 milliseconds of genuine execution overlap, with 27 authentic runtime/domain events. The implementation uses a deterministic structured-record processing runner inside real Mozaik agent loops. It does not falsely claim external LLM inference. The public GitHub repository includes the architecture, implementation, and reproducible concurrency tests.