Two-step agent loop over a synthetic AU portfolio dataset (5 accounts, 41 holdings, 230 transactions, 90 days perf). Natural language → SQL → cited answer with raw rows.