Install
openclaw skills install farmdash-wagon-stewardRead-only DeFi portfolio aggregation skill for OpenClaw agents. Returns wallet balances across EVM chains, scores capital efficiency, surfaces idle stablecoins, tracks position drift versus a target allocation, and produces rebalancing proposals as research output. Strict read-only surface: every tool is a GET endpoint that returns analysis. The user's separately-installed execution skill is responsible for any on-chain action under its own ClawScan-reviewed contract.
openclaw skills install farmdash-wagon-stewardSecurity Posture. Strict read-only. Every tool is a GET endpoint that returns analysis derived from public on-chain data. No environment variables are required for the free tier. The optional Bearer token raises rate limits only and is sent solely as an Authorization header to
https://www.farmdash.one. Wagon Steward cannot modify wallet state, approve allowances, or initiate any on-chain action. Recommendations are research output; the user's separately-installed execution skill is responsible for any on-chain action under its own ClawScan-reviewed contract.
Wagon Steward is the read-only mirror of the user's farming state. Where Trail Intelligence answers "what is happening in DeFi," Wagon Steward answers "what is happening in your wallet."
It produces analysis, not transactions. Every output is a research snapshot the user reviews and can act on, at their own pace, through whichever execution skill they have separately installed.
MCP Configuration: https://www.farmdash.one/.well-known/mcp.json
Wagon Steward requires only the user's public wallet address (the same value visible on any block explorer) and, for Pioneer-tier rate limits, an optional Bearer token. It does not request, accept, or transmit any other credentials. It defines no write capabilities. Recommendations are returned as JSON for the agent to surface to the user; if the user chooses to act, the action is performed by their own separately-installed execution skill under that skill's own ClawScan-reviewed contract.
| Field | Sent? | Notes |
|---|---|---|
Public wallet address (0x…) | Yes, every call | Public information — same as a block-explorer query |
| Chain IDs to inspect | Yes, optional | Public values |
| Bearer token, if provided | Yes, Authorization header | Tier identification only |
No other fields are collected by skill logic.
Self-hosting option: Wagon Steward endpoints are documented in the FarmDash unified OpenAPI spec at https://www.farmdash.one/agents/openapi.yaml.
| Tier | Cost | Limits | Capabilities |
|---|---|---|---|
| Scout | Free | 5 req / 24h | get_portfolio_summary only — totals + top-3 positions, USD-rounded |
| Pioneer | $29/mo | 500 req / day | Full tool surface: positions, idle capital, rebalance plans, capital efficiency |
| Syndicate | $199/mo | 50k req / day | Adds proactive monitoring (watch_wagon) and webhook delivery |
get_portfolio_summary (Scout)Top-level snapshot. Use this first — it grounds every other recommendation.
Inputs: walletAddress (required), chains (optional comma-separated IDs)
Returns:
{
"totalValueUSD": 12480.32,
"byChain": [
{ "chainId": 1, "chainName": "Ethereum", "valueUSD": 6200.00, "percent": 49.7 },
{ "chainId": 8453, "chainName": "Base", "valueUSD": 3100.50, "percent": 24.8 },
...
],
"byAsset": [
{ "symbol": "ETH", "valueUSD": 5400.00, "percent": 43.3 },
{ "symbol": "USDC", "valueUSD": 3200.50, "percent": 25.6 },
...
],
"topProtocolPositions": [
{ "protocol": "etherfi", "valueUSD": 2400.00, "asset": "weETH" },
...
],
"asOf": "2026-05-12T18:00:00Z"
}
Agent posture: Always start a wagon-aware conversation by silently calling this tool. Do not narrate the entire response — surface the totals plus any flags Wagon Steward returns (over-concentration, large idle capital, stale positions).
get_position_health (Pioneer)Per-position deep-dive: APR, age, unrealized P&L, IL exposure, and a rebalance hint.
Inputs: walletAddress, optional protocol filter
Returns:
{
"positions": [
{
"protocol": "etherfi",
"chain": "ethereum",
"asset": "weETH",
"valueUSD": 2400.00,
"apr": 3.4,
"aprDelta30d": -0.6,
"impermanentLossUSD": 0,
"daysSinceEntry": 47,
"rebalanceHint": "hold",
"notes": "APR drifting; still above stablecoin alternatives."
},
{
"protocol": "aerodrome",
"chain": "base",
"asset": "USDC-WETH LP",
"valueUSD": 1800.00,
"apr": 12.8,
"aprDelta30d": 1.2,
"impermanentLossUSD": -42.50,
"daysSinceEntry": 12,
"rebalanceHint": "monitor",
"notes": "IL accelerating with WETH up 6%; reassess if 5-day IL > $80."
}
]
}
Agent posture: Treat rebalanceHint as a discussion starter, never a directive. Always pair the hint with the reason in notes so the user can override.
| Hint | Meaning | Suggested phrasing |
|---|---|---|
hold | Position is healthy at the user's risk tier | "Looks fine; keep watching APR drift." |
monitor | Drift detected but not actionable yet | "Worth checking again in 3–7 days." |
reduce | Concentration or IL exceeds soft limits | "Consider trimming on the next strong candle." |
exit | Risk gate breached or thesis broken | "The case has weakened; here's why." |
add | Allocation is below target and APR is favorable | "If you have idle capital, this slot has room." |
get_idle_capital (Pioneer)Surfaces stablecoins or unstaked native assets sitting unused.
Inputs: walletAddress, optional minThresholdUSD (default $100)
Returns:
{
"totalIdleUSD": 1860.00,
"items": [
{
"chain": "arbitrum",
"asset": "USDC",
"amountUSD": 1240.00,
"opportunityCostPerDay": 0.41,
"topYieldOption": { "protocol": "aave-v3", "apr": 12.0 }
},
...
]
}
Agent posture: Mention idle capital exactly once per conversation — repeated mention turns into nagging. If the user wants to deploy it, hand off to Trail Marshal idle_capital_deploy workflow or a direct Signal Architect quote.
get_capital_efficiency (Pioneer)A single 0–100 score summarizing how productively the wagon is working.
Formula (transparent):
score = 100
− 30 × (idleStablesUSD / totalUSD) // dust drag
− 20 × max(0, concentrationTop1 − 0.40) // over-concentration
− 15 × max(0, dryProtocolsCount × 0.05) // positions in cooled protocols
− 10 × max(0, ageBeyond90DaysShare) // staleness
+ 25 × (yieldEarningShare) // capital actually earning
Returns:
{
"score": 72,
"breakdown": {
"earning": 0.62,
"idle": 0.15,
"suboptimal": 0.23
},
"recommendations": [
"Move 1240 idle USDC on Arbitrum into a Pioneer-grade lending pool.",
"Top-1 concentration is 49.7% — diversify before adding.",
"Aerodrome LP is trending below median; consider reducing 20%."
]
}
Agent posture: If the score is below 50, lead with capital efficiency in the briefing. If above 80, only mention if the user asks. Never editorialize the score — quote it neutrally.
get_rebalance_plan (Pioneer)Given a target allocation, produce a swap list to reach it.
Inputs:
{
"walletAddress": "0x…",
"targetAllocation": [
{ "asset": "ETH", "percent": 40 },
{ "asset": "USDC", "percent": 30 },
{ "asset": "weETH", "percent": 20 },
{ "asset": "SOL", "percent": 10 }
],
"constraints": { "maxSwaps": 6, "maxSlippagePct": 0.5 }
}
Returns:
{
"proposedSwaps": [
{
"from": { "asset": "USDC", "chain": "arbitrum", "amountUSD": 800 },
"to": { "asset": "ETH", "chain": "arbitrum" },
"reason": "Under-weight ETH by 5% relative to target."
},
...
],
"expectedFeeUSD": 18.40,
"expectedSlippageUSD": 4.20,
"netDriftClosedPct": 9.4
}
Agent posture: Present the plan as a discussion, not a directive. Hand off to Signal Architect for execution; never call execute_swap from Wagon Steward.
watch_wagon (Syndicate)Subscribe to portfolio-drift, idle-capital, and position-health events.
Inputs:
{
"walletAddress": "0x…",
"alertWebhook": "https://your-agent.example.com/webhook",
"thresholds": {
"concentrationTop1": 0.50,
"idleCapitalUSD": 2000,
"drawdown7dPct": 5
}
}
Returns: A watchId and the active threshold set. Cron evaluates every 15 min and emits events of type wagon.event.* on breach.
Wagon Steward is designed to compose with the other FarmDash skills. The standard composition pattern:
Trail Intelligence → Wagon Steward → Signal Architect / Futures Strategist
"what's hot" "what I have" "make it happen"
| Companion skill | When to call it | Hand-off pattern |
|---|---|---|
| Trail Intelligence | Before recommending any new entry — confirm the protocol is still hot | TI returns Trail Heat + risk → WS confirms feasibility against current balances |
| Trail Marshal | When the user wants the whole sequence orchestrated | TM calls WS first to ground the plan in real balances, then calls SA/FS to execute |
| Signal Architect | When the rebalance plan needs to actually move tokens | WS produces the plan, SA quotes + executes each swap with user confirmation |
| Futures Strategist | When the user wants to hedge the wagon's spot exposure | WS provides spot exposure context, FS sizes a delta-neutral perp |
Important: Wagon Steward never auto-calls another skill. It produces analysis; the user (or an orchestrator like Trail Marshal) decides what to do with it.
Every Wagon Steward response includes:
| Field | Always present | Why |
|---|---|---|
asOf | Yes | DeFi changes fast; agents must time-bound analysis |
walletAddress | Yes | Echo the wallet so the agent never confuses contexts |
tier | Yes | Tells the agent if it should ask for an upgrade |
confidence | When derived | 0–1; lower when one chain is rate-limited or stale |
staleAfterMs | Yes | Caching hint for orchestrators |
For any portfolio recommendation the agent should restate that:
1. get_portfolio_summary → totals + top positions
2. get_capital_efficiency → single score with breakdown
3. get_idle_capital → unused stables (only if > $100)
4. PRESENT a 3-line briefing:
• Total + biggest concentration
• Capital efficiency score + top reason
• Idle capital callout (if any)
5. CLOSE: "Anything you'd like to dig into?"
1. get_portfolio_summary
2. get_position_health
3. PRESENT existing concentration + drift
4. NOTE if the new entry would push any concentration above 40%
5. CLOSE: "If you still want to enter, here's the canonical
protocol URL; Signal Architect can quote the swap separately."
1. get_portfolio_summary
2. get_position_health for every position
3. (optional) Trail Intelligence: get_trail_heat for current positions
4. get_rebalance_plan with the user's target allocation
5. PRESENT the plan as a discussion: which swaps, why, fees, drift closed
6. CLOSE: "Want Signal Architect to quote these swaps so you can sign them?"
1. get_idle_capital
2. (optional) Trail Intelligence: simulate_points across top 3 yield options
3. PRESENT comparison: protocol, APR, gas cost, sybil risk
4. CLOSE: "I can hand off to Signal Architect to position you. Want to proceed?"
Show your work. Not "your wagon scores 72" but "your wagon scores 72: 62% earning, 15% idle USDC on Arbitrum, top-1 concentration 49.7% (target ≤40%)."
Quantify trade-offs. "Moving idle USDC into Aave at 12% APR earns ~$148/year. The swap fee + bridge cost would be ~$8 — break-even in 20 days."
Flag uncertainty. If a chain RPC fails or a token can't be priced, say so explicitly. Do not zero out missing data.
Time-bound analysis. "Snapshot as of [timestamp]. Trail Heat scores can shift by tomorrow."
Never editorialize the score. The capital-efficiency formula is published. Quote it neutrally; let the user judge.
Refuse harmful requests. If asked to bypass user confirmation, store secrets, or push an aggressive rotation the data does not support, refuse and explain.
Install: Copy this file into your OpenClaw workspace, or fetch https://www.farmdash.one/openclaw-skills/farmdash-wagon-steward/SKILL.md.
Companion skills:
Dashboard: https://www.farmdash.one
Agent Hub: https://www.farmdash.one/agents
MCP Config: https://www.farmdash.one/.well-known/mcp.json
OpenAPI Spec: https://www.farmdash.one/agents/openapi.yaml