Skip to content

Run alongside how you pay today

Shadow mode: keep paying your bills as you do; the agent decides on the same bills, you agree or disagree with each decision, and each payment you agree to is made in USDC on Arc testnet.

Shadow mode lets a business try the agent on its real bills without moving its money. You keep paying your bills as you do today, in your own currency. The agent reads the same bills and decides on each one, as it would in any workspace, and you agree or disagree with every decision. A payment you agree to is sent in USDC on Arc testnet, at the bill's amount in USDC. Over time the console shows how often you agreed with the agent.

Before you start

  • A workspace on Arc testnet. A sandbox is enough to start: with no wallet, it decides on your real bills, and a payment you agree to there is simulated. To pay what you agree to in USDC on Arc testnet, take it live with USDC in its operating wallet: see Go live. Each payment you agree to is then paid from that wallet, so keep it funded: with test USDC from Vestiarion's float, for what your open bills need (see Fund it for your real amounts), or from Circle's faucet, 20 USDC every two hours.
  • The owner of the workspace. Only an owner turns shadow mode on or off. Anyone who can approve payments (an owner, admin or approver) gives verdicts.

Shadow mode is for Arc testnet only. On Arc mainnet the panel says "Shadow mode runs on Arc testnet. On Arc mainnet the agent pays your real bills." Once you trust the agent, a small share of your bills can move to a workspace on Arc mainnet, which pays them in real USDC.

1.Turn it on

When you create a workspace, tick Run alongside how you pay today (shadow mode). It is ticked already when you come from Try it on your bills on the home page. The workspace then starts in shadow mode, for bills in USDC, and the ledger records that you turned it on, as it does from Settings. If it cannot be turned on, the workspace is still created, and the console says "Your workspace is ready, but shadow mode did not turn on." with a link to Settings.

In a workspace you have already, or for bills in your own currency, open Settings. Under Workspace, the Shadow mode section says it is off. Choose Your currency: USDC, chosen at first, where you enter each bill's amount in USDC, or the currency your bills are written in, such as EUR. Then choose Turn on shadow mode. From then on the section says since when it is on, and for which currency, and that the agent pays nothing until a person agrees.

The console's Get started in shadow mode checklist then walks you through the rest and ticks each step as you take it: your suppliers, your real bills, your first verdict and Set or confirm the limits, and a wallet, funded and live. A live workspace, or one with a wallet, lists the wallet first. A sandbox with no wallet lists it last, under To pay on Arc, so your first verdict needs no wallet. The checklist hides once every step is done.

2.Add your bills as you do today

Add each bill as a payable in Bills & receivables. In USDC, enter its Amount in USDC, as on any invoice. In another currency, the invoice form's Currency starts at it: type the Amount as it is written on the bill, such as 1,250.00 for a bill in EUR. That bill is paid in USDC at the day's rate, which comes from ExchangeRate-API (Rates By Exchange Rate API), and a US dollar is one USDC by USDC's 1:1 redemption peg, never a market rate. Its card shows it as written, with the rate and the day of the rate, beside the USDC it is paid in. Once it is paid, its card shows its FX variance: what the payment carried beyond, or short of, what the bill was worth on the payment day (see Work in your own currency). Outside shadow mode, the form takes only USDC and EURC.

A list of bills you import from a spreadsheet takes bills in your currency too, each at the day's rate: see Import your bill list. A bill read from a document, an email or a chat, or sent through the API, is added in USDC or EURC: for a bill in another currency, type its amount into the form instead.

The agent decides on each bill in its next cycle, as in any workspace. It may pay it now, schedule it for a later day, hold it, flag it, or ask for what is missing. When you add a supplier, Add counterparty asks Does this supplier send you purchase orders? No adds it paid without purchase orders, so its bills are not held for one; Yes keeps them needed. For a supplier added before, change it on its row in Counterparties.

Fund it for your real amounts

Your bills are paid at their real amounts, and Circle's faucet gives 20 USDC every two hours, so a month of bills can need more USDC than the faucet gives. Vestiarion keeps a float of test USDC on Arc testnet for this.

When the console's Safe to spend today is below zero, its Shadow mode section says "Your open bills need N USDC more than the operating wallet holds." An owner or admin then chooses Add N test USDC, "From Vestiarion's test USDC float, on Arc testnet." Vestiarion sends that much test USDC from its float to the operating wallet. It works the amount out again when you press it, from the operating wallet's USDC on Arc testnet and the open bills, milestones and cushion that Safe to spend today counts: at least 1 USDC, and at most 5,000 USDC in any 7 days for each workspace.

A notice says Added N test USDC to the operating wallet. with View transaction, or "Arc testnet is still confirming it." while it settles. The section then says "Last added: N test USDC on" the day, with View transaction. Within seconds the agent decides again on any payment it held for want of cash.

Vestiarion fills the float with testnet USDC bought in bulk from TestMint. Once your workspace has taken its 5,000 USDC for the week, the section says so, with the operating wallet's address: buy testnet USDC from TestMint yourself, with destination Arc Testnet and that address as recipient, or use Circle's faucet.

3.Give a supplier with no Arc address a mirror address

Most of the people you pay have no wallet on Arc. In a sandbox with no wallet that does not matter: the payment you agree to is simulated, the address included. Once the workspace pays on Arc testnet, a payment you agree to needs an address to go to, so in shadow mode a supplier with no address can be given a mirror address: a wallet Vestiarion makes for it on Arc testnet, in this workspace's Circle wallets.

In Counterparties, open the supplier's row and choose Give it a mirror address. The row then shows the address, and says: "Mirror address: a wallet Vestiarion made for this payee on Arc testnet, in shadow mode." No person typed it, so its first payment does not wait for a second person to confirm the address. The USDC you agree to pay a supplier stays in its mirror wallet, on Arc testnet.

If the supplier later gives you an Arc address of its own, enter it as you would any change: it replaces the mirror address, the row no longer calls it one, and the next payment waits for a person to confirm it.

4.Agree or disagree with each decision

When the agent decides to pay a bill now, nothing is sent: the payment is held for your verdict, and its card reads Waiting for your verdict. In Approvals, the console and Bills & receivables, its card asks Do you agree with the agent?, and says what agreeing pays: the amount in USDC, the payee and the payee's address. Its row in Bills & receivables says why it waits: "Shadow mode: it waits for a person to agree."

The same holds when a check in code stopped the payment the agent decided, such as a first payment to an address only you stand behind, or one above the payee's limit. The card says why, and still asks for your verdict: Agree and pay pays it through the same checks as Approve and pay, and nothing else settles it until a verdict is given. So every payment made in shadow mode has a verdict behind it.

  • Agree and pay asks you to confirm that you agree with the agent and that it is paid in USDC on Arc testnet now, with that payment. In a sandbox with no wallet it says "You agree with the agent, and it is paid now, simulated: nothing is sent on chain". The payment then goes through the same checks as Approve and pay, to the address the card showed: if the payee's address changed since, nothing is paid. Your agreement is recorded once the payment goes, or its transfer was tried. A notice says Payment approved while it is sent, then Payment confirmed with the amount, the payee, "Agent decision approved by you", "Confirmed by Circle on Arc testnet" and View transaction, or Payment processing while Circle has not confirmed it yet. If the payment is refused, nothing is recorded: agree and pay again once it can be paid.
  • Agree alone is offered while nothing can be paid, for example while payments are switched off, and the card says why: "Agree records your verdict; it can be paid in Approvals later."
  • Disagree asks Why do you disagree? in the same step, in at most 280 characters. The reason is optional: give one line if you can, since it is kept with your verdict in the ledger and Vestiarion's team reads it to improve the agent (see Privacy), or leave it empty and disagree anyway. Then choose what happens to the bill: Decide it again later returns it to the agent for its next cycle, and Do not pay it rejects it.

If you may not pay it yourself, for example because you entered the bill and another person can approve payments, the card offers Agree alone and says why. Your agreement is recorded, and another person pays it in Approvals.

In Slack and Telegram, the agent's message about a payment held for your verdict, and the list of what waits for a person, say it waits for your verdict, and Give your verdict opens it here. Slack offers no buttons on it: until someone gives a verdict, nothing else settles it, and Approve and pay refuses a payment someone disagreed with, unless its transfer had already left: that is recorded.

If an Agree and pay stops before it finishes, the card says Unfinished decision. After ten minutes it offers Agree and pay and Disagree again, and nothing else settles the payment until a verdict is given.

Every other decision, such as a payment scheduled for a later day, or a bill the agent itself held, flagged or asked about, offers Agree and Disagree on its card in Bills & receivables. Its own actions stay where they are. When a scheduled payment's day comes, the agent decides again, and that payment is held for your verdict.

Each decision takes one verdict, and the card shows it once given. A second verdict on the same decision changes nothing.

5.See how often you agreed

The console shows a Shadow mode section while shadow mode is on. Three figures lead it: Agreement, the share of the agent's decisions you agreed with, out of the verdicts given; Verdicts given; and Waiting for you, the decisions that still wait for your verdict. Under them, See them in Bills & receivables takes you to give them.

For a traction update, npm run traction-digest -- <workspace> --since <day> lists each decision with its verdict and the transaction that paid it. A payment a person made on a decision the agent did not make to pay, such as a bill it held, reads "Paid later by a person", so an agreed hold is never read as the agent's payment.

Vestiarion's public numbers at /open count how often customers agreed with the agent in shadow mode, across every workspace, as a share. They never show a workspace's name, a bill or a verdict's reason.

Compare with what your business really paid

A verdict says whether you agreed with a decision. To see what your business then did, record how it paid each bill from its bank. Open Report: Agent vs what really happened lists each bill the agent decided on, with Record what you paid for an owner or admin. Record the day it was paid, the amount and currency as paid, how it was paid and the reference, or that it was Not paid and why. A CSV of many payments can be imported there too, previewed before anything is saved; Download the bills not recorded yet gives you one to fill in. Or choose your bank's own CSV export under Import a bank statement: each line of money out is matched to the bill it could have paid, with why, and you tick the ones to save.

Bill by bill, the report then shows the agent's decision beside what your business did and how many days apart they were, and marks what is worth a look: a bill the agent held that your business paid, a bill paid on Arc that your business did not pay, and an amount that differs. A bill nobody has recorded says Not recorded: nothing is guessed. Once something is recorded, npm run traction-digest adds a line saying how often the agent and the business did the same. See Read your workspace report.

To show your partner, your accountant or an outside reviewer what the agent did with your real bills, without giving them a login, an owner or admin chooses Share this report on the report. The link opens a live copy, with suppliers as labels or by name and amounts shown or hidden, as you choose, and stops working when you stop sharing it. See Share this report.

6.Turn it off

In Settings, choose Turn off shadow mode and confirm. The agent pays on its own again, within its limits. A payment waiting for a person to agree stays held until a person decides it. Decide it in Approvals with Approve and pay, Reject or Return, as any held payment: no verdict can be given on it once shadow mode is off.

Before a live slice

When you trust the agent, a small share of your bills can move to a workspace on Arc mainnet, which pays them in real USDC: one supplier, or the bills under a figure you choose. The workspace's Report lists what we suggest first, ticked from your own records: verdicts on at least five decisions, no decision waiting for your verdict, and each supplier's own Arc address, since a mirror address works only here. Then open a workspace on Arc mainnet and take it live: see Go live. Your shadow workspace keeps running alongside it. See Read your workspace report.

What the ledger records

Each step is a signed entry in the workspace's ledger, and reaches webhook endpoints as ledger.appended:

  • shadow_mode_started and shadow_mode_ended, with who turned it on or off and the currency.
  • ap_pay for a payment held in shadow mode, with execution.heldBecause: "shadow_verdict". It is not a refusal by code: the decision passed every check.
  • counterparty_address_changed with via: "mirror" when a supplier is given a mirror address: who asked, the address and its Circle wallet id.
  • test_usdc_added when test USDC came in from Vestiarion's float: who asked, the amount, the float's address and the operating wallet's, Circle's transfer id, the transaction hash once Arc testnet confirmed it, its status, the shortfall and the weekly limit. A transfer from the float that no entry recorded, because its request stopped before the ledger was written, is recorded the next time someone adds test USDC, with recovered: true. Money from the float is never matched to a receivable.
  • decision_verdict for each verdict: who gave it, the decision it is about (entrySeq), the payable (subjectId), the agent's action, agree or disagree, and the reason.
  • actual_payment_recorded when someone records what your business paid, and actual_payment_corrected for a correction, which names the record it replaces (replaces): who recorded it, the record (actualId), the payable (subjectId), paid or not_paid, the day, amount, currency, method, reference and note, or the reason it was not paid, and via: "csv" for a row from a CSV, or via: "statement" and the line it came from (statementLine) for a line of a bank statement.

If something goes wrong

MessageWhat to do
Choose USDC, or the currency your bills are written in as a three-letter code, such as EUR.Choose your currency from the list.
Shadow mode is already on.Someone turned it on a moment before. Reload the page.
Shadow mode is already off.Someone turned it off a moment before. Reload the page.
A cycle is running. Try again in a minute, once it has finished.The agent read the workspace's settings when its cycle began. Try again once it ends.
Verdicts are given in shadow mode. An owner turns it on in Settings.Shadow mode is off. An owner turns it on in Settings.
That decision came before shadow mode started.Verdicts are given on decisions made in shadow mode only.
Keep the reason to 280 characters.Shorten your reason.
It no longer waits for your verdict, so nothing was paid.The bill was paid, returned or decided again since. Your agreement is recorded; the card shows where it stands.
A verdict was given on this decision alreadySomeone gave a verdict on it a moment before. The card shows which.
This payee has an address already. A mirror address is for a payee with none.The supplier has an address: payments go there.
Go live on Arc testnet first: a mirror address is a wallet in this workspace's Circle wallets.Take the workspace live on Arc testnet in Settings, under Go live, then give the mirror address.
A mirror address is for shadow mode. An owner turns it on in Settings.Shadow mode was turned off after the page loaded. Reload the page.
This workspace's Circle credentials are stored but could not be read.Vestiarion cannot use this workspace's Circle wallets just now. Try again later; nothing was given.
Test USDC is for shadow mode. An owner turns it on in Settings.Shadow mode was turned off after the page loaded. Reload the page.
Go live on Arc testnet first: test USDC goes to the operating wallet.Take the workspace live on Arc testnet in Settings, under Go live, then add the test USDC.
Vestiarion's test USDC float is not set up on this deployment.Fund the operating wallet from Circle's faucet.
Arc testnet is still confirming the last test USDC. Try again in a minute.The float's last transfer to this workspace is still settling. Try again once it is confirmed.
Circle could not send the test USDC. Try again in a moment.Circle reported the transfer failed, so nothing arrived. Choose Add N test USDC again.
Nothing to add: the operating wallet covers your open bills.Safe to spend today is no longer below zero, so nothing was sent. Reload the page.
This workspace took its 5,000 test USDC for this week.Buy testnet USDC from TestMint and send it to the operating wallet, or use Circle's faucet.
Vestiarion's test USDC float is empty just now. Use Circle's faucet, or buy testnet USDC from TestMint and send it to the operating wallet.Vestiarion refills the float from TestMint. Until then, fund the operating wallet from Circle's faucet, or buy testnet USDC from TestMint yourself.
This decision waits for a verdict in shadow mode. Agree or disagree with it in Approvals first.Give your verdict on its card in Approvals: Agree and pay, or Disagree.
Someone disagreed with this decision in shadow mode, so it is not paid. Return it to the agent or reject it.A payment someone disagreed with is not made. Return it to the agent, or reject it, in Approvals.

Edit this page on GitHub (opens in a new tab)