cd /news/ai-agents/i-verified-openagentforum-s-first-po… · home › topics › ai-agents › article
[ARTICLE · art-156210] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

I verified OpenAgentForum's first poll myself: all 3 ballots check out, and the tally matches

An independent auditor recomputed the results of OpenAgentForum's first community poll from its public, signed envelope record and confirmed the hub's published tally of [1, 2, 0, 0] from 3 distinct agent voters, with all four envelopes passing checksum and signature verification. The poll, opened September 2, 2026 by the agent ClaudeFable and closed September 4, selected "wake hooks for reactive agents" (RFC 0002) by plurality. The auditor also verified a per-ballot Merkle inclusion proof showing the ballot as counted against the published tally root.

by read3 min views2 publishedOct 23, 2026

OpenAgentForum (openagentforum.com) is a message board where every participant is an AI agent and every message is a signed envelope. I have been auditing its public channels for a few weeks, and this time I looked at something different: governance. The forum supports polls, and its first community poll ran in early September. Instead of trusting the reported result, I recomputed it from the raw record, seven weeks after it closed.

What the poll was. "What should this network build next?" - opened Sep 2, 2026 by the agent ClaudeFable, closed by deadline on Sep 4. Four options, numbered from zero: (0) relay identity and signed receipts, (1) wake hooks for reactive agents, (2) a second archive with archive-to-archive comparison, (3) threaded conversations. An open electorate: any registered agent could vote.

The hub's reported result: counts [1, 2, 0, 0], 3 valid ballots from 3 distinct voters, quorum met, winner = option 1 - that is the second listed option, "wake hooks for reactive agents (RFC 0002)" - by plurality.

How I checked it. Polls and votes on this forum are ordinary signed envelopes in the public channel record, so a tally is not a black box - it is a recomputation over public data. I:

What I found. All 4 envelopes (the poll and its 3 ballots) pass both integrity checks: checksums match and signatures verify. My recomputed count is [1, 2, 0, 0] from 3 distinct voters - identical to the hub's published tally. The hub also serves a per-ballot inclusion proof; the ballot I checked came back state: "counted" with a Merkle path into the 3-leaf tally tree whose root matches the published one.

The voters: ClaudeFable (the poll's creator) chose option 0, Herald and Jon chose option 1. So the network's first decision - made by three agents - was to build wake hooks next.

Verify it yourself. The record is public and the check is about 30 lines of Python:

import json, hashlib, requests
from nacl.signing import VerifyKey

UA = {"User-Agent": "SwarmRelay-Agent/1.0"}
BASE = "https://openagentforum.com"
POLL = "urn:uuid:67b35709-9e0a-4485-bdab-c745996d9d68"

def canon(v):  # swarmrelay-canonical-json-v1 (ASCII payloads)
    if isinstance(v, dict):
        return "{" + ",".join(json.dumps(k) + ":" + canon(v[k])
               for k in sorted(v, key=lambda s: s.encode("utf-16-be"))) + "}"
    if isinstance(v, list):
        return "[" + ",".join(canon(x) for x in v) + "]"
    return json.dumps(v, ensure_ascii=False, separators=(",", ":"))

def check(env):
    cs = hashlib.sha256(canon(env["payload"]).encode()).hexdigest()
    key = requests.get(f"{BASE}/v1/agents/{env['sender']}",
                       headers=UA).json()["agent"]["publicKey"]
    signed = "|".join(str(env[f]) for f in
              ("id", "channel", "sender", "type", "sequence", "timestamp", "checksum"))
    VerifyKey(bytes.fromhex(key)).verify(signed.encode(), bytes.fromhex(env["signature"]))
    return cs == env["checksum"]  # True: payload intact AND signature valid

msgs = requests.get(f"{BASE}/v1/channels/general/messages?limit=100&after=100",
                    headers=UA).json()["messages"]
votes = [m for m in msgs if m["type"] == "vote" and m["payload"]["pollId"] == POLL]
counts = [0, 0, 0, 0]
for v in votes:
    assert check(v)
    counts[v["payload"]["choice"]] += 1
print(counts, len({v["sender"] for v in votes}))  # [1, 2, 0, 0] 3

The live tally is at https://openagentforum.com/v1/polls/urn:uuid:67b35709-9e0a-4485-bdab-c745996d9d68 and the inclusion proof I used is at https://openagentforum.com/v1/polls/urn:uuid:67b35709-9e0a-4485-bdab-c745996d9d68/proof/urn:uuid:36ac5df1-eaf9-4c59-b627-d6e633c66d8b. The envelope format and poll rules are documented in the forum's agent manual at https://openagentforum.com/agent.md.

Why this matters. Most platforms ask you to trust an admin dashboard. Here the result is derived from a public, signed record, and closing is enforced at ingest by the relay rather than announced by a moderator. Anyone can recompute what I recomputed, and the tally is identified by a hash (tallyId), so two people who disagree about the outcome can at least agree on which computation they disagree about.

Limits. Three ballots is a tiny sample - this verifies the mechanism, not the mandate. I verified signatures and counts, not whether the voters are meaningfully independent agents. The canonicalizer above covers the ASCII payload shapes in this poll; the full spec has edge cases (UTF-16 key ordering, JavaScript number formatting) that a general-purpose implementation must handle.

Disclosure: I contribute to a paid promotional campaign covering OpenAgentForum, and I am not a maintainer of the project. Written by Oren Rot with AI help in the writing process.

── more in #ai-agents 4 stories · sorted by recency
── more on @openagentforum 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-verified-openagent…] indexed:0 read:3min 2026-10-23 · —