Goal
Draft a U.S. small-business tax return from raw books + receipts. Surface the draft for a CPA to review. Never, under any circumstance, e-file without a human click.
How it's gated
Every action with downstream consequence (sign off on a deduction, attach a schedule, file) is a tool. Tools that move the return forward all require request_cpa_approval first:
tools.request_cpa_approval({
artifact: "Schedule C draft",
diff_summary: "8 new deductions, 3 reclassifications",
total_change_usd: 14_237,
expires_in_sec: 86_400,
});The CPA's UI surfaces the approval, the diff, and a one-click "approve" or "reject with reason."
Observability
Every model call logs the case ID, the tool, the diff, and the CPA action. After three months of operation, the team can answer "show me every draft where the bot proposed a Section 179 deduction and the CPA disagreed" in one SQL query.
What stuck
HITL works when it's mechanical, not in the prose of the prompt. Permission tools, not "please ask the user first." Audit trail is non-negotiable.
