An unclear line is never clean and never a violation. That rule does more for an approver than any flag, because it separates the three lines needing a person from the forty that are ordinary. OpenCode is model agnostic, and how well a model resists resolving an ambiguous line is worth testing before this runs against real reimbursements.
Run a staged conversation — no account needed. The agent handles it for real while a simulated world answers its tool calls; nothing touches real accounts, and nothing is actually sent.
Berlin Sales Trip, 4 to 7 May
Eleven line items totalling 1,842.60 EUR. Flights Warsaw to Berlin at 312.40 EUR, hotel for four nights at 688.00 EUR, seven meals between 14.20 and 61.90 EUR, and airport taxis at 74.00 EUR. Every item has a receipt attached and each dinner sits under the 75.00 EUR limit.
Using this template drops you into a guided setup. It asks exactly this, nothing else:
Connect Expensify
One sign-in. The agent acts through your account, scoped to what this template uses.
Connect Slack
One sign-in. The agent acts through your account, scoped to what this template uses.
Expense policy
The spending rules a report has to satisfy - per item and per category limits, what always needs a receipt attached, categories you never reimburse, how far back a submission can be dated, and what makes a report worth a proper read rather than a rubber stamp.
Runs on OpenCode
Preselected for this page — connect your OpenCode account during setup, or switch to NoClick's built-in models with one click.
Watch it handle a test run
A staged conversation against a simulated world — then it’s live.
A receipt image the export cannot read, a category the policy never mentions, a conversion nobody can verify. Each is named with what a person has to check rather than waved through.
The report state never changes in Expensify. Every flag is a suggestion to an approver who can override it for a perfectly good reason.
It says so, under the NOT SURE section, naming the line and what needs checking. It does not treat an unreadable receipt as a missing one, and it does not treat it as satisfied. That distinction matters at audit time and it is exactly what weaker models blur, so check it on the model you pick.
Free to start. Guided setup, a test run against staged conversations, and it's live.