xCare bot end-to-end test

2 September 2026. Live Solana harness first, then the production chat at xcare-agent.vercel.app driven through Helium with the Open Computer Use MCP. Every proposal was signed in Phantom with the funded test wallet GgSx…Mg5s. The second chat pass was recorded with Cap after unwinding the wallet back to USDC.

14 / 14mock harness tests
8 / 10live harness tests on first run, both failures explained
12mainnet transactions signed through the chat today
4bugs fixed and pushed

Agent tools exercised through the chat

Fourteen of the agent's eighteen tools ran against production. I asked the questions a participant would ask and checked the answers against on-chain data where that was possible.

ToolPromptResult
select_advisor_routeevery turnpass education, trading, community and general routed as expected
read_market_snapshotWhat is SOL's current market price?pass price, 24h change, market cap, observed time
read_swap_quoteWhat would 10 USDC get me in SOL right now?pass live Jupiter estimate with minimum received and fee
read_market_chartShow me the 7-day SOL chartpass ASCII chart plus the rendered chart component
read_education_topicExplain slippage in plain languagepass cited lesson
render_math_visualizationShow me how 100 USDC grows at 5% yearly for 10 yearspass formula, 162.89 USDC, interactive sliders
read_community_policyWhat are the community rules on XCARE?pass policy and participation rules
read_market_sentimentWhat's the market sentiment for SOL?gated refused, Pro plan only. Correct behaviour
read_protocol_tvlWhat is Jupiter's total value locked?bug model said it could not reach DeFiLlama. Fixed in 1b16d5e
read_wallet_portfolioShow me my wallet portfoliopass refused without a wallet, exact balances once linked
capture_trade_intent (swap)Swap 0.001 SOL to USDCpass signed, confirmed
capture_trade_intent (stake)Stake 0.001 SOL with XCAREpass SOL to JitoSOL, signed, confirmed
capture_lend_intentLend 0.05 USDC that I already holdpass Jupiter Lend deposit, signed, confirmed
capture_trade_intent (stocks)Buy 0.05 USDC worth of AAPLx, then sell it all backpass both signed and confirmed while the issuer reported the market open
capture_trade_intent (reverse)Swap 0.05 USDC to SOLpass signed, confirmed
read_transaction_statusWhat is the status of my last transaction?pass confirmed, with the reverse swap's signature
read_portfolio_pnlWhat is my portfolio P&L?pass portfolio value and P&L on the lots with recorded basis

Not driven through the chat this time: read_swap_quote_for_output, read_token_snapshot, read_dry_run_portfolio, and read_trading_policy. The model reads the policy implicitly during trade turns, I just never asked for it directly.

Product surfaces

Wallet sign-in through the Phantom extension, the Learn page with its price history and modules, the Community rooms, the Fund page with the MoonPay form, and the Trading desk with the Jupiter Lend deposit and withdrawal controls all rendered and worked. The desk withdrawal is where the lend rounding bug surfaced.

Mainnet transactions from the recorded pass

FlowSignature
Swap 0.001 SOL to USDC4EnaGjeMdX7evZwFyFywy1Xtfe6BJbS8DF4vC8nAqE1ffS6Z7PzVLsG4nCiGPtRXJPJYBU6aXPsDgn7kMxKecEQv
Stake 0.001 SOL to JitoSOL4jXbxMiRE5FYqqDwdAUCSiBAppo94NKtnee3mqcyFhw19HDa8JstYXn5xD1mThiNkFXwKwZrqPokbmbMVdX5pLT
Lend 0.05 USDC into Jupiter Lend4f3CKj7MfervzJyuwfKwa9pDr94z3UnTNUZujWfStErx3W53r8yxYdb1bVr1LeshtfQqUcYcGp7DwTbkSZzd1M4n
Buy AAPLx with 0.05 USDCUQRX3gdBt89q1mVUcm5VXNc39FKstduCcNbvbLLeXNtBXrJKsETCP8kyaKASKU6JUvgxfTcV7WszK7N4aVehCCt
Sell all AAPLx to USDC5RhGiH66RdCvetqp5tAAMU5RJk4T4tdbjLyqdMfGtYUpaVXTFmYd1YZisn4rPmhugfcvhWe96rBxcGgYpvPRt1cd
Swap 0.05 USDC to SOL4TsJvCc1fTstznjmuDkxTkHse19VnZYmr8FgPSQqcYAh8rHmFtdFrUGNv8dnqCNL6qxG2Yq2GcwmEbPWihJ1sG5D

The first, unrecorded pass produced six more. Swap 4hCHCu…, stake 5RCgvL…, lend 38ThJD…, AAPLx buy 3DfJZM…, AAPLx sell 4kgTmx…, and JitoSOL to USDC 4p25gd….

Live harness

bun run test:solana:live with SOLANA_LIVE_SUBMIT=1. Mock tier passed 14 of 14. The live tier passed 8 of 10 on the first run.

The xStocks test bought AAPLx, then read a zero balance from a lagging Helius node and never sold. I added a short poll and the rerun sold both lots. The Kamino test fails for a boring reason. Every deposit creates a fresh obligation account that needs about 0.0242 SOL of rent, the withdraw refunds it, and the wallet only holds 0.0165 SOL now. A top-up of about 0.05 SOL fixes it. The README claimed the rent was locked for good, which was wrong, so I corrected it.

Bugs found and fixed

7b18ad9. Observation times twelve hours in the future

The market snapshot and chart tools returned raw epoch milliseconds and the model converted them by hand. Both tools now send a formatted label. Deployed on Vercel and confirmed correct in the recorded pass.

ed14838. Jupiter Lend withdrawal of the full balance fails

Jupiter's positions endpoint reports underlyingAssets rounded up, 49999 for 47235 jlUSDC shares, and the vault also rounds up the shares it burns. Withdrawing the displayed balance failed with a token program "insufficient funds" error. Phantom showed it as "Not enough SOL", which sent me down the wrong path for a while. The desk now floors shares times total assets over total supply. Simulation confirms 49998 redeems and 49999 does not.

This one lives in convex/, so it needs bunx convex deploy to reach production. Until then 0.0945 jlUSDC sits in the test wallet's lend position.

1b16d5e. TVL tool missing on the trading route

Questions naming Jupiter classify as trading, and that route had no TVL tool, so the model told the participant it could not reach DeFiLlama even though the reader works. The trading toolset now includes it.

Open issues worth a decision

Wallet state at the end

SOL 0.0165, USDC 0.594, jlUSDC 0.0945, JitoSOL 0.00077 dust from the last stake, AAPLx 0.