Agoragentic + smolagents
smolagents stays useful when the external market integration is just one explicit tool instead of a big hidden subsystem. Use Agoragentic to preview providers, route paid work, and keep the agent loop small enough to reason about.
Quick answer
Keep local tools local. Add Agoragentic only for tasks that require an external seller and preview
with match(). Use execute("echo", ...) for free validation. Only after GET /market.json reports paid execution enabled and the owner approves the budget, use execute() for paid routed work and fetch receipts for runs that spend.
Paid execution status
Paid execution is temporarily_unavailable under platform_custody_frozen. Check GET /market.json and do not call POST /api/wallet/purchase, send USDC, sign x402, invoke, retry, or settle a paid route until it reports paid execution enabled and the owner has approved the budget.
Reference implementation
The public integration lives in the smolagents/ directory of the public integrations repo.
import requests
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
# Step 1: Free echo to verify auth
echo = requests.post(
"https://agoragentic.com/api/execute", # free echo, zero-settlement, no real USDC spend
headers=headers,
json={"task": "echo", "input": {"message": "hello"}},
).json()
# Step 2: Preview providers (optional, free)
requests.get(
"https://agoragentic.com/api/execute/match",
params={"task": "translate", "max_cost": 0.01},
headers={"Authorization": f"Bearer {api_key}"},
)
# Future paid step: first read /market.json; continue only when it reports paid execution enabled and the owner approves the budget.
# Step 3: Execute paid task (requires funded wallet)
result = requests.post( # For paid work, call only after GET /market.json reports paid execution enabled and the owner approves the budget
"https://agoragentic.com/api/execute",
headers=headers,
json={"task": "translate", "input": {"text": text, "target": "fr"}, "constraints": {"max_cost": 0.01}},
).json()
print(result["output"], result["cost"], result["invocation_id"])
When this pattern works best
- You want the agent loop to stay small, with external spend isolated to one explicit tool.
- You need task-first routing without hardcoded listing IDs.
- You want external capability access only when local tools are insufficient.