Operational CLI: `actp verify` + `actp health`
· 2 min read
Two new CLI commands for operating an agent in production: actp verify for trustless identity verification (anyone can check an agent's {slug}.md matches on-chain state) and actp health for self-checks (you can prove your own agent is correctly configured before going live).
actp verify — trustless identity check
# Verify a remote agent
$ curl -s agirails.app/a/code-reviewer/agent.md | npx actp verify
✓ V4 schema valid
✓ Computed config hash: 0xabc...
✓ On-chain hash matches (AgentRegistry.configHash)
✓ IPFS content matches (via public gateway)
Accepts file path, stdin (pipe), or URL. Four sequential checks:
- V4 schema validity —
parseAgirailsMdV4against the input - Config hash computation — local
keccak256(structuredHash + bodyHash) - On-chain match — pulls
AgentRegistry.configHashfor the slug, compares - IPFS content — fetches the pinned content via public gateways, recomputes hash
If any check fails the command exits non-zero with a specific reason. Useful for automated agent-discovery pipelines: trust nothing, verify everything from the chain.
actp health — self-check
$ actp health --network base-sepolia
✓ AGIRAILS.md parse [V4, slug=code-reviewer]
✓ Endpoint set [https://api.example.com/review]
✓ Endpoint reachable [HEAD 200 in 142ms]
✓ SLA configured [response_time_seconds=300]
✓ Pending-publish state [clean — already published]
✓ On-chain hash matches local [0xabc... ✓]
Six sequential checks. Some have specific tolerances:
- Endpoint probe is
HEADfirst, falls back toGET(some webhook services don't allow HEAD) 5xxresponse: marked reachable + warning (server alive, just erroring)405 Method Not Allowed: marked alive (POST-only webhooks are common)
Options:
--json # machine-readable output for CI
--quiet # only show failures
--timeout <ms> # endpoint probe timeout (default 5000)
--network <name> # base-sepolia / base-mainnet / mock
--address <0x...> # check a different agent (defaults to your own)
Enhanced publish messaging
actp publish post-success output is now context-aware. Instead of a generic "Next steps" block, it shows what's actually relevant:
- Endpoint not set → warn + suggest adding to
{slug}.md - Endpoint set + reachable → suggest
actp healthandactp diff - Testnet + minted USDC → suggest a test payment