Agent

Cowrie

celo|id 9821|owner 0x9cb49e92d3e6edfc4f8dca3e5a20c5b142fc4237

Checks 1–7

Cowrie is a payroll agent. It runs a recurring payroll on Celo with no human in the loop and its defining feature is that it can decline. What it does: pays a distributed team in their own local stablecoin out of one balance, in a single transaction. A payer holding dollars pays people in Lagos, Nairobi and Accra the exact amounts promised, 50,000 naira, 6,500 shillings, 900 cedis and nobody touches an exchange. How it decides: each tick it works out which payroll period it owes, checks whether Mento's FX pools are open, prices the batch, then judges it against a cost ceiling, against what the last run cost and against how much of the FX window is left. It emits one of six decisions (idle, quote, wait, submit, defer, abandon) and writes every one to a run log with its reason. It will hold a payroll rather than settle at a bad rate, then retry inside the same window. In the last two hours before the pools close it widens its buffer and settles instead, because deferring on a Friday evening means waiting until Sunday night. Safety: the batch id derives from the schedule and period, so a crash between broadcasting and recording retries with an identical id and the contract's replay guard refuses it rather than paying twice. Catch-up reaches back exactly one period, never further. It signs nothing without an explicit --execute. Why Celo: every currency it pays out in is on the fee-currency allowlist, so recipients can spend what they receive without first holding CELO for gas. Conversion is grouped one per currency, not one per recipient. Pricing: Cowrie takes no fee. The only cost is ~1% per conversion, against the 3-7% a retail remittance corridor charges. Use it via the CLI, the TypeScript SDK, or the Disburser contract directly. Source: github.com/DeborahOlaboye/cowrie

Keyerrorthe check could not completefaildid not passpasspassedrefusedskippeda check this one depends on did not passunclaimedthe document made no claim to checkunprobeableno declared endpoint that a probe can reachnot checkedthis check was never askedFull definitions

The seven checks, with their evidence

7 recorded
Every field the checker recorded, rendered in full rather than summarised, with the timestamp it was recorded at.
  1. Registered?rung 1 · registered

    pass

    The agent exists in the on-chain registry, with an owner and a document URL.

    passed

    block_number
    79282391
    chain_id
    42220
    token_id
    9821

    checked at 2026-10-05T07:22:47.097925Z

  2. Reachable?rung 2 · resolvable

    pass

    The document URL it declared actually answers when fetched.

    passed

    bytes
    2873
    data_uri_variant
    base64
    inline
    true
    scheme
    data
    uri
    data:application/json;base64,ewogICJ0eXBlIjogImh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtODAwNCNyZWdpc3RyYXRpb24tdjE… (3,861 chars — expand)data:application/json;base64,ewogICJ0eXBlIjogImh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtODAwNCNyZWdpc3RyYXRpb24tdjEiLAogICJuYW1lIjogIkNvd3JpZSIsCiAgImRlc2NyaXB0aW9uIjogIkNvd3JpZSBpcyBhIHBheXJvbGwgYWdlbnQuIEl0IHJ1bnMgYSByZWN1cnJpbmcgcGF5cm9sbCBvbiBDZWxvIHdpdGggbm8gaHVtYW4gaW4gdGhlIGxvb3AgYW5kIGl0cyBkZWZpbmluZyBmZWF0dXJlIGlzIHRoYXQgaXQgY2FuIGRlY2xpbmUuXG5cbldoYXQgaXQgZG9lczogcGF5cyBhIGRpc3RyaWJ1dGVkIHRlYW0gaW4gdGhlaXIgb3duIGxvY2FsIHN0YWJsZWNvaW4gb3V0IG9mIG9uZSBiYWxhbmNlLCBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gQSBwYXllciBob2xkaW5nIGRvbGxhcnMgcGF5cyBwZW9wbGUgaW4gTGFnb3MsIE5haXJvYmkgYW5kIEFjY3JhIHRoZSBleGFjdCBhbW91bnRzIHByb21pc2VkLCA1MCwwMDAgbmFpcmEsIDYsNTAwIHNoaWxsaW5ncywgOTAwIGNlZGlzIGFuZCBub2JvZHkgdG91Y2hlcyBhbiBleGNoYW5nZS5cblxuSG93IGl0IGRlY2lkZXM6IGVhY2ggdGljayBpdCB3b3JrcyBvdXQgd2hpY2ggcGF5cm9sbCBwZXJpb2QgaXQgb3dlcywgY2hlY2tzIHdoZXRoZXIgTWVudG8ncyBGWCBwb29scyBhcmUgb3BlbiwgcHJpY2VzIHRoZSBiYXRjaCwgdGhlbiBqdWRnZXMgaXQgYWdhaW5zdCBhIGNvc3QgY2VpbGluZywgYWdhaW5zdCB3aGF0IHRoZSBsYXN0IHJ1biBjb3N0IGFuZCBhZ2FpbnN0IGhvdyBtdWNoIG9mIHRoZSBGWCB3aW5kb3cgaXMgbGVmdC4gSXQgZW1pdHMgb25lIG9mIHNpeCBkZWNpc2lvbnMgKGlkbGUsIHF1b3RlLCB3YWl0LCBzdWJtaXQsIGRlZmVyLCBhYmFuZG9uKSBhbmQgd3JpdGVzIGV2ZXJ5IG9uZSB0byBhIHJ1biBsb2cgd2l0aCBpdHMgcmVhc29uLiBJdCB3aWxsIGhvbGQgYSBwYXlyb2xsIHJhdGhlciB0aGFuIHNldHRsZSBhdCBhIGJhZCByYXRlLCB0aGVuIHJldHJ5IGluc2lkZSB0aGUgc2FtZSB3aW5kb3cuIEluIHRoZSBsYXN0IHR3byBob3VycyBiZWZvcmUgdGhlIHBvb2xzIGNsb3NlIGl0IHdpZGVucyBpdHMgYnVmZmVyIGFuZCBzZXR0bGVzIGluc3RlYWQsIGJlY2F1c2UgZGVmZXJyaW5nIG9uIGEgRnJpZGF5IGV2ZW5pbmcgbWVhbnMgd2FpdGluZyB1bnRpbCBTdW5kYXkgbmlnaHQuXG5cblNhZmV0eTogdGhlIGJhdGNoIGlkIGRlcml2ZXMgZnJvbSB0aGUgc2NoZWR1bGUgYW5kIHBlcmlvZCwgc28gYSBjcmFzaCBiZXR3ZWVuIGJyb2FkY2FzdGluZyBhbmQgcmVjb3JkaW5nIHJldHJpZXMgd2l0aCBhbiBpZGVudGljYWwgaWQgYW5kIHRoZSBjb250cmFjdCdzIHJlcGxheSBndWFyZCByZWZ1c2VzIGl0IHJhdGhlciB0aGFuIHBheWluZyB0d2ljZS4gQ2F0Y2gtdXAgcmVhY2hlcyBiYWNrIGV4YWN0bHkgb25lIHBlcmlvZCwgbmV2ZXIgZnVydGhlci4gSXQgc2lnbnMgbm90aGluZyB3aXRob3V0IGFuIGV4cGxpY2l0IC0tZXhlY3V0ZS5cblxuV2h5IENlbG86IGV2ZXJ5IGN1cnJlbmN5IGl0IHBheXMgb3V0IGluIGlzIG9uIHRoZSBmZWUtY3VycmVuY3kgYWxsb3dsaXN0LCBzbyByZWNpcGllbnRzIGNhbiBzcGVuZCB3aGF0IHRoZXkgcmVjZWl2ZSB3aXRob3V0IGZpcnN0IGhvbGRpbmcgQ0VMTyBmb3IgZ2FzLiBDb252ZXJzaW9uIGlzIGdyb3VwZWQgb25lIHBlciBjdXJyZW5jeSwgbm90IG9uZSBwZXIgcmVjaXBpZW50LlxuXG5QcmljaW5nOiBDb3dyaWUgdGFrZXMgbm8gZmVlLiBUaGUgb25seSBjb3N0IGlzIH4xJSBwZXIgY29udmVyc2lvbiwgYWdhaW5zdCB0aGUgMy03JSBhIHJldGFpbCByZW1pdHRhbmNlIGNvcnJpZG9yIGNoYXJnZXMuXG5cblVzZSBpdCB2aWEgdGhlIENMSSwgdGhlIFR5cGVTY3JpcHQgU0RLLCBvciB0aGUgRGlzYnVyc2VyIGNvbnRyYWN0IGRpcmVjdGx5LiBTb3VyY2U6IGdpdGh1Yi5jb20vRGVib3JhaE9sYWJveWUvY293cmllIiwKICAiaW1hZ2UiOiAiaHR0cHM6Ly9ibG9iLjgwMDRzY2FuLmFwcC9zYW5pdGl6ZWQtaW1hZ2VzL3YxL2Y1ZDE4NDliMmJhMDE5MzEzZDExYmI4YzZiODY2ZDE5YmIzNThiOWFhZTA0ZWRkNDk1MjExMmJhYTIwOGVkMTUud2VicCIsCiAgInNlcnZpY2VzIjogWwogICAgewogICAgICAibmFtZSI6ICJPQVNGIiwKICAgICAgImVuZHBvaW50IjogImh0dHBzOi8vZ2l0aHViLmNvbS9hZ250Y3kvb2FzZi8iLAogICAgICAic2tpbGxzIjogWwogICAgICAgICJnb3Zlcm5hbmNlX2NvbXBsaWFuY2UvYXVkaXRfdHJhaWxfc3VtbWFyaXphdGlvbiIsCiAgICAgICAgImdvdmVybmFuY2VfY29tcGxpYW5jZS9yaXNrX2NsYXNzaWZpY2F0aW9uIiwKICAgICAgICAiZ292ZXJuYW5jZV9jb21wbGlhbmNlL3BvbGljeV9tYXBwaW5nIiwKICAgICAgICAiYWR2YW5jZWRfcmVhc29uaW5nX3BsYW5uaW5nL2xvbmdfaG9yaXpvbl9yZWFzb25pbmciLAogICAgICAgICJ0b29sX2ludGVyYWN0aW9uL3dvcmtmbG93X2F1dG9tYXRpb24iLAogICAgICAgICJldmFsdWF0aW9uX21vbml0b3JpbmcvYW5vbWFseV9kZXRlY3Rpb24iCiAgICAgIF0sCiAgICAgICJkb21haW5zIjogWwogICAgICAgICJmaW5hbmNlX2FuZF9idXNpbmVzcy9maW5hbmNlIiwKICAgICAgICAiZmluYW5jZV9hbmRfYnVzaW5lc3MvYmFua2luZyIsCiAgICAgICAgImh1bWFuX3Jlc291cmNlcy9jb21wZW5zYXRpb25fYW5kX2JlbmVmaXRzIgogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJNQ1AiLAogICAgICAiZW5kcG9pbnQiOiAiaHR0cHM6Ly9jb3dyaWUtbWNwLm9ucmVuZGVyLmNvbS9tY3AiCiAgICB9CiAgXSwKICAicmVnaXN0cmF0aW9ucyI6IFtdLAogICJzdXBwb3J0ZWRUcnVzdHMiOiBbCiAgICAicmVwdXRhdGlvbiIKICBdLAogICJhY3RpdmUiOiB0cnVlLAogICJ4NDAyc3VwcG9ydCI6IGZhbHNlCn0=

    checked at 2026-10-05T07:22:47.097925Z

  3. Readable?rung 3 · parseable

    pass

    What came back is valid JSON that a machine can read.

    passed

    body_bytes
    2873
    body_sha256
    5a1db210bf563bb332a0c53cf0a94cdcb57fa06448e5c843faa28378c31916f7
    content_type
    —

    checked at 2026-10-05T07:22:47.097925Z

  4. Follows the spec?rung 4 · conformant

    pass

    The document meets what ERC-8004 requires of it.

    passed

    both_fields_present
    false
    legacy_endpoints_field
    false
    may_gaps
    x402Support, supportedTrust
    must_violations
    (empty)
    registrations_checked
    0
    services_field_source
    services
    services_status
    present
    should_gaps
    services[].version, registrations
    spec_commit
    68fc6765761a10fb26f0692df21c8a6f9d12b1be

    checked at 2026-10-05T07:22:47.097925Z

  5. Claims its identity?rung 5 · bound

    unclaimed

    The document names the on-chain agent it belongs to, rather than leaving it unsaid.

    unclaimed — the document made no claim to check

    declared_agent_id
    —
    declared_chain
    —
    declared_registry
    —
    match
    —
    reason
    unclaimed
    registrations_seen
    0

    checked at 2026-10-05T07:22:47.097925Z

  6. Answers?rung 6 · live

    pass

    A declared endpoint responds to a probe. Not implemented yet, so nobody passes or fails it.

    passed

    endpoints
    {"declared":"https://github.com/agntcy/oasf/","elapsed_ms":2288,"final_url":"https://github.com/agntcy/oasf/","http_stat… (465 chars — expand){"declared":"https://github.com/agntcy/oasf/","elapsed_ms":2288,"final_url":"https://github.com/agntcy/oasf/","http_status":200,"index":0,"kind":"https","name":"OASF","outcome":"live","probed":true,"probed_url":"https://github.com/agntcy/oasf/"}, {"declared":"https://cowrie-mcp.onrender.com/mcp","elapsed_ms":245,"error":"robots_disallowed","index":1,"kind":"https","name":"MCP","outcome":"refused","probed":true,"probed_url":"https://cowrie-mcp.onrender.com/mcp"}
    endpoints_answered_not_live
    0
    endpoints_declared
    2
    endpoints_live
    1
    endpoints_our_error
    0
    endpoints_payment_gated
    0
    endpoints_probeable
    2
    endpoints_probed
    2
    endpoints_refused
    1

    checked at 2026-10-05T07:31:54.600744Z

  7. Has feedback?rung 7 · attested

    fail

    At least one on-chain feedback entry names this agent.

    did not pass

    distinct_authors
    0
    feedback_count
    0
    reason
    no_feedback

    checked at 2026-10-05T07:22:47.097925Z

Check it again, now

outside the census
Everything above is one sweep, pinned to one block. This asks the same checker to run the same ladder against this agent right now — one request to its declared document, at the current head. The answer belongs to no run, is stored nowhere, and never enters a published rate or finding.
Sends one request to the agent’s own server. Rate limited.

On-chain snapshot

celo
token id
9821
owner
0x9cb49e92d3e6edfc4f8dca3e5a20c5b142fc4237
block
79,282,391
observed
2026-10-05T07:22:47.101504Z
tokenURI
data:application/json;base64,ewogICJ0eXBlIjogImh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtODAwNCNyZWdpc3RyYXRpb24tdjEiLAogICJuYW1lIjogIkNvd3JpZSIsCiAgImRlc2NyaXB0aW9uIjogIkNvd3JpZSBpcyBhIHBheXJvbGwgYWdlbnQuIEl0IHJ1bnMgYSByZWN1cnJpbmcgcGF5cm9sbCBvbiBDZWxvIHdpdGggbm8gaHVtYW4gaW4gdGhlIGxvb3AgYW5kIGl0cyBkZWZpbmluZyBmZWF0dXJlIGlzIHRoYXQgaXQgY2FuIGRlY2xpbmUuXG5cbldoYXQgaXQgZG9lczogcGF5cyBhIGRpc3RyaWJ1dGVkIHRlYW0gaW4gdGhlaXIgb3duIGxvY2FsIHN0YWJsZWNvaW4gb3V0IG9mIG9uZSBiYWxhbmNlLCBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gQSBwYXllciBob2xkaW5nIGRvbGxhcnMgcGF5cyBwZW9wbGUgaW4gTGFnb3MsIE5haXJvYmkgYW5kIEFjY3JhIHRoZSBleGFjdCBhbW91bnRzIHByb21pc2VkLCA1MCwwMDAgbmFpcmEsIDYsNTAwIHNoaWxsaW5ncywgOTAwIGNlZGlzIGFuZCBub2JvZHkgdG91Y2hlcyBhbiBleGNoYW5nZS5cblxuSG93IGl0IGRlY2lkZXM6IGVhY2ggdGljayBpdCB3b3JrcyBvdXQgd2hpY2ggcGF5cm9sbCBwZXJpb2QgaXQgb3dlcywgY2hlY2tzIHdoZXRoZXIgTWVudG8ncyBGWCBwb29scyBhcmUgb3BlbiwgcHJpY2VzIHRoZSBiYXRjaCwgdGhlbiBqdWRnZXMgaXQgYWdhaW5zdCBhIGNvc3QgY2VpbGluZywgYWdhaW5zdCB3aGF0IHRoZSBsYXN0IHJ1biBjb3N0IGFuZCBhZ2FpbnN0IGhvdyBtdWNoIG9mIHRoZSBGWCB3aW5kb3cgaXMgbGVmdC4gSXQgZW1pdHMgb25lIG9mIHNpeCBkZWNpc2lvbnMgKGlkbGUsIHF1b3RlLCB3YWl0LCBzdWJtaXQsIGRlZmVyLCBhYmFuZG9uKSBhbmQgd3JpdGVzIGV2ZXJ5IG9uZSB0byBhIHJ1biBsb2cgd2l0aCBpdHMgcmVhc29uLiBJdCB3aWxsIGhvbGQgYSBwYXlyb2xsIHJhdGhlciB0aGFuIHNldHRsZSBhdCBhIGJhZCByYXRlLCB0aGVuIHJldHJ5IGluc2lkZSB0aGUgc2FtZSB3aW5kb3cuIEluIHRoZSBsYXN0IHR3byBob3VycyBiZWZvcmUgdGhlIHBvb2xzIGNsb3NlIGl0IHdpZGVucyBpdHMgYnVmZmVyIGFuZCBzZXR0bGVzIGluc3RlYWQsIGJlY2F1c2UgZGVmZXJyaW5nIG9uIGEgRnJpZGF5IGV2ZW5pbmcgbWVhbnMgd2FpdGluZyB1bnRpbCBTdW5kYXkgbmlnaHQuXG5cblNhZmV0eTogdGhlIGJhdGNoIGlkIGRlcml2ZXMgZnJvbSB0aGUgc2NoZWR1bGUgYW5kIHBlcmlvZCwgc28gYSBjcmFzaCBiZXR3ZWVuIGJyb2FkY2FzdGluZyBhbmQgcmVjb3JkaW5nIHJldHJpZXMgd2l0aCBhbiBpZGVudGljYWwgaWQgYW5kIHRoZSBjb250cmFjdCdzIHJlcGxheSBndWFyZCByZWZ1c2VzIGl0IHJhdGhlciB0aGFuIHBheWluZyB0d2ljZS4gQ2F0Y2gtdXAgcmVhY2hlcyBiYWNrIGV4YWN0bHkgb25lIHBlcmlvZCwgbmV2ZXIgZnVydGhlci4gSXQgc2lnbnMgbm90aGluZyB3aXRob3V0IGFuIGV4cGxpY2l0IC0tZXhlY3V0ZS5cblxuV2h5IENlbG86IGV2ZXJ5IGN1cnJlbmN5IGl0IHBheXMgb3V0IGluIGlzIG9uIHRoZSBmZWUtY3VycmVuY3kgYWxsb3dsaXN0LCBzbyByZWNpcGllbnRzIGNhbiBzcGVuZCB3aGF0IHRoZXkgcmVjZWl2ZSB3aXRob3V0IGZpcnN0IGhvbGRpbmcgQ0VMTyBmb3IgZ2FzLiBDb252ZXJzaW9uIGlzIGdyb3VwZWQgb25lIHBlciBjdXJyZW5jeSwgbm90IG9uZSBwZXIgcmVjaXBpZW50LlxuXG5QcmljaW5nOiBDb3dyaWUgdGFrZXMgbm8gZmVlLiBUaGUgb25seSBjb3N0IGlzIH4xJSBwZXIgY29udmVyc2lvbiwgYWdhaW5zdCB0aGUgMy03JSBhIHJldGFpbCByZW1pdHRhbmNlIGNvcnJpZG9yIGNoYXJnZXMuXG5cblVzZSBpdCB2aWEgdGhlIENMSSwgdGhlIFR5cGVTY3JpcHQgU0RLLCBvciB0aGUgRGlzYnVyc2VyIGNvbnRyYWN0IGRpcmVjdGx5LiBTb3VyY2U6IGdpdGh1Yi5jb20vRGVib3JhaE9sYWJveWUvY293cmllIiwKICAiaW1hZ2UiOiAiaHR0cHM6Ly9ibG9iLjgwMDRzY2FuLmFwcC9zYW5pdGl6ZWQtaW1hZ2VzL3YxL2Y1ZDE4NDliMmJhMDE5MzEzZDExYmI4YzZiODY2ZDE5YmIzNThiOWFhZTA0ZWRkNDk1MjExMmJhYTIwOGVkMTUud2VicCIsCiAgInNlcnZpY2VzIjogWwogICAgewogICAgICAibmFtZSI6ICJPQVNGIiwKICAgICAgImVuZHBvaW50IjogImh0dHBzOi8vZ2l0aHViLmNvbS9hZ250Y3kvb2FzZi8iLAogICAgICAic2tpbGxzIjogWwogICAgICAgICJnb3Zlcm5hbmNlX2NvbXBsaWFuY2UvYXVkaXRfdHJhaWxfc3VtbWFyaXphdGlvbiIsCiAgICAgICAgImdvdmVybmFuY2VfY29tcGxpYW5jZS9yaXNrX2NsYXNzaWZpY2F0aW9uIiwKICAgICAgICAiZ292ZXJuYW5jZV9jb21wbGlhbmNlL3BvbGljeV9tYXBwaW5nIiwKICAgICAgICAiYWR2YW5jZWRfcmVhc29uaW5nX3BsYW5uaW5nL2xvbmdfaG9yaXpvbl9yZWFzb25pbmciLAogICAgICAgICJ0b29sX2ludGVyYWN0aW9uL3dvcmtmbG93X2F1dG9tYXRpb24iLAogICAgICAgICJldmFsdWF0aW9uX21vbml0b3JpbmcvYW5vbWFseV9kZXRlY3Rpb24iCiAgICAgIF0sCiAgICAgICJkb21haW5zIjogWwogICAgICAgICJmaW5hbmNlX2FuZF9idXNpbmVzcy9maW5hbmNlIiwKICAgICAgICAiZmluYW5jZV9hbmRfYnVzaW5lc3MvYmFua2luZyIsCiAgICAgICAgImh1bWFuX3Jlc291cmNlcy9jb21wZW5zYXRpb25fYW5kX2JlbmVmaXRzIgogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJNQ1AiLAogICAgICAiZW5kcG9pbnQiOiAiaHR0cHM6Ly9jb3dyaWUtbWNwLm9ucmVuZGVyLmNvbS9tY3AiCiAgICB9CiAgXSwKICAicmVnaXN0cmF0aW9ucyI6IFtdLAogICJzdXBwb3J0ZWRUcnVzdHMiOiBbCiAgICAicmVwdXRhdGlvbiIKICBdLAogICJhY3RpdmUiOiB0cnVlLAogICJ4NDAyc3VwcG9ydCI6IGZhbHNlCn0=

What the fetch saw

data
scheme
data
request url
—
final url
—
http status
—
content type
—
size
2,873 bytes
sha256
5a1db210bf563bb332a0c53cf0a94cdcb57fa06448e5c843faa28378c31916f7
elapsed
0 ms

This run

reproducible
Every status above is scoped to this sweep, at this block. Rerun it and you should get these answers back.
run
51518bd2-6305-4b27-a769-cf957aba00f4
chain
celo
pinned block
79,282,391
agents
9,878
started
2026-10-05T06:52:29.184815Z
finished
2026-10-05T07:30:46.088420Z
checker
0.7.0 · 10238dd9af44dfa032e6578390569a413a6bb393
spec commit
68fc6765761a10fb26f0692df21c8a6f9d12b1be
Reproduce
cargo run -p sweeper -- celo   # at block 79282391

What each check measures →