Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Two-Key: Airwallex Agentic Banking hackathon (Payment Ops + Adaptive Treasury)
翻訳待ち
Loading the full README.
Read the full README ↗A payment ops agent for the Airwallex Agentic Banking Hackathon. It fixes failed supplier payments without paying twice. Tracks: 03 Payment Ops Incident Commander (primary) and 01 Adaptive Treasury Controller.
Each money move needs two keys. The planner drafts the fix: retry the transfer, convert funds with an FX quote, or defer a low-priority payout. The Wringer tries to break the plan. It looks for duplicate or out-of-order webhooks, CANCELLED vs FAILED, stale FX quotes, and reserve breaches. After the bank rejects the payee name, it blocks any retry to the unchanged payee (beneficiary_unchanged_after_mismatch); the planner first updates the payee to the name the (fictional) supplier confirmed, with POST /api/v1/beneficiaries/{id}/update. The executor runs a plan only when both agree, uses one stable request_id per intent and action, and waits for a human tap at or above APPROVAL_THRESHOLD_USD. Every step lands in the ledger and comes out as a receipt.
Status: the $40k Northwind incident runs end to end in MOCK mode with no model key, no Convex deployment and no Airwallex keys. The desk opens on an image-led spread: the live amount, payee, state and next step beside an illustrative photo, then the bound rail (Incident, Cash plan, Independent check, Human authorization, Receipt). A SANDBOX smoke against api.sandbox.airwallex.com was run on 2026-10-27 (see docs/ops-note.md); npm run proof reruns it only when sandbox keys are present. Licensed MIT, see LICENSE.
| Label | Means |
|---|---|
| MOCK | Hand-written fixtures in lib/airwallex/mock.ts. No network. No real money moves. The public desk and every npm run demo line are MOCK. |
| SANDBOX | Airwallex sandbox host only, real sandbox ids, still not real money. Only npm run live-smoke and the optional step in npm run proof call it. |
| Live money | Not built. The live client refuses any host other than api.sandbox.airwallex.com. |
Recorded live model run, mock provider: docs/agent-runs/2026-11-13-live-ernie-free-model-moves-converged.json, Fri Nov 13 2026 02:53 UTC, head 59b2335, planner and Wringer baidu/ernie-5.5-flash-preview:free on OpenRouter. The model proposed the moves itself. Round 1: the model Wringer blocked on the reserve floor. Round 2: the model dropped the deferral and the code check blocked it (reserve_breach). Round 3: the model put the deferral back, approved, one mock transfer. The companion run that stayed blocked all 3 rounds (0 transfers) and the earlier runs are in docs/agent-runs/.
Recorded sandbox run, 2026-10-27. The public desk runs the same corridor against a mock provider.
| Endpoint | Recorded result |
|---|---|
POST /api/v1/authentication/login | 201 |
GET /api/v1/balances/current | 200 |
POST /api/v1/fx/quotes/create | quote 878e1b2c-070a-3b39-9b69-0a60291f9ec6 |
GET /api/v1/fx/conversions?request_id= + POST /api/v1/fx/conversions/create | conversion 32a3bfa6-0c1e-408b-986e-84a45f472449 SETTLED |
GET /api/v1/transfers?request_id= + POST /api/v1/transfers/create | transfer 4e1dab1a-c59b-413b-92d5-813f6caafd59 |
POST /api/v1/simulation/transfers/{id}/transition | SENT, FAILED (BENEFICIARY_NAME_MISMATCH), read back CANCELLED |
| Rerun 2026-10-28 | already_done for both, no second create |
Those ids came from scripts/live-smoke.ts, not from this desk build. Details in docs/ops-note.md, the endpoint to code to test map in docs/AIRWALLEX-MAP.md. Rerun with your own sandbox keys: AIRWALLEX_CLIENT_ID=... AIRWALLEX_API_KEY=... npm run proof.
Skeptical? docs/RED-TEAM.md answers 20+ attacks with the test that proves each, and docs/CLAIMS.md maps every claim here to a command.
No keys. No site login. Node 20.9 or newer (tested on Node 22 and 24) and at least 2 GiB of RAM for the Next.js build. Fresh-machine run on Daytona: docs/fresh-machine/2026-11-12-daytona.
npm ci
npm run proof # install check, npm run check, demo, demo -- rerun, matrix, optional SANDBOX corridor
npm run dev # then open http://localhost:3000/fixture
npm run proof writes artifacts/proof/summary.md plus one log per step. It fails if the Northwind demo does not pay once, if the rerun is not already_done with zero new calls, or if any matrix row fails. Without AIRWALLEX_CLIENT_ID and AIRWALLEX_API_KEY the sandbox step prints SANDBOX skipped and names the missing variables. It never invents a sandbox id.
/fixture is the public judge page: MOCK, read only. The opening shows INV-2291 Northwind Steel, 40,000.00 USD, the current state and the next step. The photo beside it is an illustrative scene, not transaction evidence. Open Demo controls to step through incident, blocked, planned, refused, failed, paid and replay. docs/JUDGE.md has the measured counts and docs/shots/ has desktop and phone captures.
npm run evidence prints the failure matrix, then three separate scenarios: main, replay, and deposit. Provider ids change every process. Request ids stay, and they include the amount.
This is the beginning of the README. Read the rest at the original. Read the full README ↗