Materialize wallet portfolio
{
"id": "portfolio",
"kind": "materialize",
"title": "Materialize wallet portfolio",
"request": {
"scope": {
"walletAddress": "{{ $.input.walletAddress }}"
},
"network": "eip155:8453",
"templateId": "wallet_portfolio",
"deliveryFormat": "json"
}
}
Rank yield-capable routes
{
"id": "routes",
"kind": "fetch_transform",
"title": "Rank yield-capable routes",
"request": {
"params": {
"limit": 5,
"strategy": "balanced",
"capability": "yield"
},
"sourceId": "route_capability_candidates",
"deliveryFormat": "json"
}
}
Search Base yield surface context
{
"id": "search",
"kind": "fetch_transform",
"title": "Search Base yield surface context",
"request": {
"params": {
"count": 5,
"query": "{{ $.input.surfaceName }} Base vault allocation {{ $.input.asset }} {{ $.input.operatorGoal }}"
},
"sourceId": "stableenrich_exa_search",
"deliveryFormat": "json"
}
}
Build Base vault allocation scorecard
{
"id": "summarize",
"kind": "fetch_transform",
"title": "Build Base vault allocation scorecard",
"request": {
"params": {
"input": {
"asset": "{{ $.input.asset }}",
"routes": "{{ $.stepsById.routes.output }}",
"portfolio": "{{ $.stepsById.portfolio.output.response.result }}",
"surfaceName": "{{ $.input.surfaceName }}",
"operatorGoal": "{{ $.input.operatorGoal }}",
"riskTolerance": "{{ $.input.riskTolerance }}",
"searchContext": "{{ $.stepsById.search.output }}"
},
"prompt": "Build a Base vault allocation scorecard. Focus on the allocation verdict, the best visible lanes, the risk caps, and the next actions.",
"responseSchema": {
"type": "object",
"required": [
"surfaceName",
"asset",
"allocationVerdict",
"summary",
"candidateLanes",
"riskCaps",
"nextActions"
],
"properties": {
"asset": {
"type": "string"
},
"summary": {
"type": "string",
"maxLength": 280
},
"riskCaps": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 4,
"description": "Risk caps or guardrails."
},
"nextActions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 4,
"description": "Next actions."
},
"surfaceName": {
"type": "string"
},
"candidateLanes": {
"type": "array",
"items": {
"type": "object",
"required": [
"endpointId",
"resource",
"score",
"fitNote"
],
"properties": {
"score": {
"type": "number"
},
"fitNote": {
"type": "string",
"maxLength": 120
},
"resource": {
"type": "string",
"maxLength": 180
},
"endpointId": {
"type": "string",
"maxLength": 80
}
},
"additionalProperties": false
},
"maxItems": 4,
"description": "Candidate Base yield lanes."
},
"allocationVerdict": {
"enum": [
"aggressive",
"balanced",
"defensive"
],
"type": "string"
}
},
"additionalProperties": false
},
"systemInstruction": "You are compressing Base vault-allocation work into a bounded scorecard. Stay grounded in the supplied wallet portfolio, route shortlist, and public surface context only."
},
"sourceId": "google_gemini_flash_structured",
"deliveryFormat": "json"
}
}