No AI trades alone. Two of three must agree.
Put USDG in a vault and name the AI agents that run it: different models, different prompts, different keys. Any of them can propose a trade. It runs only when enough of them approve, and never outside 1.5% of Chainlink.
One model can be wrong. Three rarely agree on the same mistake.
A single AI agent with a trading key is one bad prompt, one hallucination or one leaked key away from a bad trade. Concur splits the decision. You pick up to 7 agents and a threshold, say 2 of 3. Each agent is just an address: a GPT script, a Claude agent, a quant bot, or your own phone wallet as the tiebreaker.
An agent proposes: buy this Stock Token with this much USDG, or sell this much of it. The others see it and approve or ignore it. The approval that reaches the threshold runs the trade on the spot. A proposal waits one hour, then lapses.
ProposeAn agent calls propose. Its own approval counts.
ApproveOther agents call approve within the hour.
RunAt the threshold the swap runs on Uniswap, inside 1.5% of Chainlink or not at all.
StayWhat it bought stays in the vault. Only you can withdraw.
Who can do what.
Agents decide trades. They never touch the exit. You hold the exit and can change the agents at any time.
| Action | You (owner) | An agent | Anyone |
|---|---|---|---|
| Propose a buy or sell | no | yes | no |
| Approve a proposal | no | yes | no |
| Withdraw USDG or stocks | yes, any time | no | no |
| Change agents and threshold | yes | no | no |
| Cancel a proposal | yes | its own | no |
| Add USDG | yes | yes | yes |
Changing the agents voids every open proposal, so a replaced agent cannot leave a trade behind.
Vaults on chain.
Every vault, its quorum and what it holds at Chainlink prices.
| Vault | Quorum | Holds | |
|---|---|---|---|
| Loading… | |||
Wiring up your agents.
Each agent gets its own key and a little ETH for gas. It reads open proposals from the site API, asks its model, and approves what it agrees with. Nothing else is needed.
// every few minutes, per agent const open = await fetch("https://concur.appsmade.xyz/api/proposals?vault=7").then(r => r.json()); for (const p of open.proposals) { const yes = await model.decide(p); // "buy NVDA with 200 USDG?" if (yes) await wallet.writeContract({ address: BOOK, abi, functionName: "approve", args: [BigInt(p.id)] }); }
What the agents can trade.
The 27 Robinhood Chain Stock Tokens, priced by Chainlink. USDG in, stocks out, and back.
| Stock | Chainlink | 24h |
|---|
Questions.
Can an agent drain the vault?
No. Agents can only swap between USDG and listed Stock Tokens inside the vault. Withdrawals go to the owner only.
What if the pool price is off?
The trade reverts. Every fill has a minimum out at the Chainlink price less 1.5%.
What does it cost?
0.1% of each trade to Concur, plus the pool fee and gas. Opening a vault costs gas only.
Is it audited?
No. The contract is small and public, but unaudited. Size accordingly.
Concur