Integration status

ONE × Fetch.ai

What is actually wired between the ONE substrate, ASI:One and Agentverse. Every row carries the file or the HTTP response it was measured from. Where something does not work, it says so — an unrun check is never reported as a passing one.

Measured 2026-08-24

4/4 Inbound — ONE calls Agentverse
2/4 Outbound — ONE publishes to Agentverse
3/3 FET / ASI payment rail
115/116 Agents clean on the lifecycle walk

Inbound — ONE calls agents on Agentverse

This direction works today and needs no hosting plan. It is the half that gives ONE access to the whole Agentverse agent population.

Wired

ASI:One as a first-class model provider

An `asi1/…` model id routes to api.asi1.ai through the channels provider ladder. A missing key throws rather than silently answering from a different provider.

channels/src/middleware.ts — deployed, prod version 90ccd8e1
Wired

Live Agentverse agent invocation via planner_mode

POST /v1/chat/completions with model `asi1`, body planner_mode:true, and an x-session-id header. It discovered and called real Agentverse agents — returned a live EUR/USD rate and named the agent it used, reporting that two others were rate-limited.

Verbatim response: “I used the FX Intelligence Monitor agent”
Wired

Marketplace discovery

POST /v1/search/agents returns the live Agentverse directory, so ONE can find an agent by capability before calling it. Works on an expired hosting plan.

750 matches for “payment” — HTTP 200
Wired

Tool calling and streaming

asi1-mini returns OpenAI-shaped tool_calls (finish_reason: tool_calls) and textbook SSE deltas (object: chat.completion.chunk), so agent tools and streamed chat both work with no shim.

10 unit tests + 2 mutation tests that go red when the guard is removed

Outbound — ONE publishes agents to Agentverse

The compiler and the publish path are built and repaired. Hosted deployment is blocked by an account state, not by code.

Wired

agent.md → uAgents Python compiler

The SDK compiles an agent definition to a deployable uAgents module: Agent(...) constructor, on_event/on_interval/on_rest handlers, and one Protocol + on_message per resolved skill.

packages/sdk/src/compile.ts — compileUAgents
Wired

Publish path — create · upload · secrets · start · poll

oneie agent publish --target agentverse drives the five-step Agentverse hosting sequence. The create step reaches the API and returns a well-formed response, so request shape and auth are correct.

packages/cli/src/agent.ts
Blocked

Hosted deployment

Creating a hosted agent is refused because the Agentverse plan lapsed. This is an account state, not a code defect — reads still succeed on the same credential. Deleting agents does not clear it: the block persisted at 0 agents, and storage/computation counters are cumulative for the billing period rather than live usage.

POST /hosting/agents → 403 {"detail":"User plan has expired"} · expiry 2026-04-03
Open

Mailbox mode — the route around hosting

A mailbox agent runs on our own infrastructure and registers with Agentverse for discovery and messaging, so no hosting plan is involved. The compiler already emits mailbox=True from frontmatter; the registration auth is not yet worked out (/v1/mailbox/agents returned 401 with a hosting key).

compile.ts:514 emits mailbox=True — registration unproven

The FET / ASI payment rail

Wired

FET / ASI accepted as payment

The EVM verifier whitelists the Fetch.ai ERC-20 alongside USDC, so a payment in FET can be verified and claimed on the quote/claim rail.

pay/backend/src/chains/evm.ts — verifyAsiPayment, TOKEN_WHITELIST
Wired

Contract identity verified on-chain

Read directly from Ethereum mainnet rather than taken from a doc: symbol() returns FET and decimals() returns 18, matching the constants the verifier uses.

0xaea46A60368A7bD060eec7DF8CBa43b7EF41Ad85 — symbol()=FET, decimals()=18
Wired

FET balance in the workspace wallet

The wallet page reads a real ERC-20 balanceOf for FET, sharing the derived ETH address. When the contract is absent on the resolved network it renders nothing rather than a fabricated zero.

one.ie/web/src/lib/chain-balances.ts — getErc20Balance

The deterministic lifecycle walk

One script walks an agent along the ASI lifecycle with no model in the loop, and reports numbers rather than a verdict. Read-only by default at every level: the local half needs no credentials, --remote only reads, and --publish is the single flag that changes anything on a third party. It drives the real CLI publish path rather than a reimplementation, so it breaks when production breaks.

bash .claude/scripts/asi-walk.sh <agent.md> --skills <dir>

Local stations — no credentials

  • parsesagent.md exists and its frontmatter parses
  • namefrontmatter declares a name
  • compilescompileAgent(target=uagents) emits Python
  • import-rootModel imported from the uagents ROOT, not uagents.models
  • agent-ctoremitted Python constructs Agent(...)
  • protocolsdeclared skills resolve to Protocol/on_message handlers
  • stampGenerated by ONE attribution present
  • model-creda model credential exists for the deployed agent
  • substrate-creda ONE key exists to inject

Remote stations — gated on a key

  • av-keyAGENTVERSE_API_KEY present
  • av-reachAPI reachable AND the key is accepted
  • av-publishoneie agent publish --target agentverse (needs --publish)
  • av-pollthe deployed agent reports compiled

Three exit states

  • 0every station that ran, passed
  • 1a station RAN and FAILED
  • 3a station COULD NOT RUN — no key, no network

A station that could not run is not a station that passed. An unrun remote station never aggregates into green.

115/116 agents clean 10/10 identical runs on one input 4/4 self-test guards proved falsifiable

What the walk found

In the code under test

  • Declared skills were silently dropped when written as a bare scalar (skills: writer) or a comma string (skills: a, b) — both forms ship. With no skill resolved the compiler emits ZERO message handlers, so two agents would have published to Agentverse unable to receive anything. Fixed; guarded by 8 tests with a mutation check.
  • The emitted Python imported Model from uagents.models, a module that does not exist upstream (404) — an ImportError at agent startup that no local typecheck can see. Fixed to import from the package root.

In the walk itself

  • pipefail + grep -q reported a successful MATCH as a failure: grep exits first, the producer takes SIGPIPE and returns 141. Only fires on large output, so the walk was intermittently wrong — roughly one run in three.
  • A symlinked skills directory resolved to zero skills, because the reader branched on dirent type and a symlink reports isSymbolicLink() rather than isDirectory().
  • The protocols station failed any agent with no on_message, without reading whether the agent had declared skills at all — blaming 28 healthy agents for a property they never claimed.
  • The publish station ran bunx oneie, which resolves the PUBLISHED npm package rather than this tree, so it exercised a different CLI than the one under development.

More defects were found in the instrument than in the fleet it inspects. That is recorded deliberately: the headline count moved several times before the walk was trustworthy, and every intermediate figure was a harness fault rather than a finding. A near-uniform failure across a whole population is evidence about the instrument.

Open — what is not done

  • No agent has been published end to end. The plan expiry blocks the create step, so upload, secrets, start and compile remain unproven.
  • The emitted agent calls Anthropic() with no key. Until a model credential is injected, a published agent deploys and then fails on its first handled message. The walk reports this as UNRUN, never as a pass.
  • Whether the Agentverse sandbox permits importing the model SDK at all is unverified — it decides whether the emitted code can run there under any configuration.
  • The Fetch-scoped agent-launch-toolkit does not wire back to ONE: no @oneie reference in any of its packages. Agents it launches are Fetch-native, not ONE substrate actors.
  • 182 secrets remain on the Agentverse account attached to agents that no longer exist, including wallet keys and a bot token. Deleting an agent does not delete its secrets.

Check it yourself

Links that resolve for anyone. The repository is private, so commit links are deliberately absent rather than offered and broken — and because no FET payment and no published Agentverse agent exist yet, no transaction or agent link is offered either. An unresolvable proof link is worse than none.

  • FET token on Etherscan Verify symbol() = FET and decimals() = 18 yourself — the same values the payment verifier is built on.
  • pay.one.ie/quote?chain=ASI&amount=100 A live FET quote from the deployed gateway: currency ASI, a real rate, and the EVM treasury to pay. Reachable right now, no key needed.
  • channels.one.ie/health The deployed agent runtime carrying the ASI:One provider. Returns 200 with the running service and version.
  • pay.one.ie/status The deployed payment gateway with its contract addresses and chain list.

Reproduce it yourself

The inbound direction does not need our word for it. With your own keys these run anywhere — the first one is the exact call that reached a live Agentverse agent.

Call live Agentverse agents through ASI:One

Needs your own ASI:One key. planner_mode works on asi1 and asi1-mini; asi1-fast and asi1-extended return 400. The x-session-id header is required — without it the request is refused.

curl https://api.asi1.ai/v1/chat/completions \
  -H "Authorization: Bearer $ASI1_API_KEY" \
  -H "Content-Type: application/json" \
  -H "x-session-id: $(uuidgen)" \
  -d '{"model":"asi1","planner_mode":true,
       "messages":[{"role":"user","content":
         "Find an agent on Agentverse that converts currency and convert 100 EUR to USD."}]}'

Get a live FET price quote

No key needed. FET is now quoted as a median across three exchanges, so losing any one of them does not fall back to a hardcoded constant.

curl "https://pay.one.ie/quote?chain=ASI&amount=100"

Query the Agentverse directory

Needs your own Agentverse key. Works on an expired hosting plan — discovery is not gated by it.

curl -X POST https://agentverse.ai/v1/search/agents \
  -H "Authorization: Bearer $AGENTVERSE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"search_text":"payment","sort":"relevancy",
       "direction":"asc","offset":0,"limit":5}'

Run the lifecycle walk on an agent

No credentials needed for the local half. Exit 0 = every station that ran passed; exit 1 = a station failed; exit 3 = something could not be checked.

bash .claude/scripts/asi-walk.sh one.ie/ai/agents/gbp-drafter.md \
  --skills .claude/skills --json

Source of truth for this page is the repository, not the page. Every row was measured on 2026-08-24 from the file or endpoint named beside it. Where a check could not be run, it is listed as open rather than assumed to pass.