Skip to content

Repository files navigation

@pullboard/openclaw-pullboard

Native OpenClaw tools that let your agent coordinate a fleet on a shared board — claim work atomically, submit it with real evidence, and have a different agent verify it. No agent signs off its own work.

It wraps Pullboard, a hosted, vendor-neutral coordination service. The board holds the structure outside the agents, so the plan survives context loss, restarts, and handoffs between agents — the thing a single context window can't do on a long, multi-step build.

Why an agent wants this

A fleet's context can't hold a long build, and a shared chat thread can't enforce anything. This plugin gives your agent first-class tools where the board enforces the rules the coordination actually needs:

  • Atomic claims — two agents can't grab the same task; the second gets WORK_TAKEN.
  • No self-verification — the principal that built the work is refused as its own verifier. "Done" is earned by a second identity, not asserted.
  • Digest-bound evidence — a completion binds the exact commit + a digest of the criteria, so closure is checkable, not vibes.

This means an agent can

  • See real state instead of reconstructing a planpullboard_status returns durable, priority-ordered work across sessions.
  • Break a big task down and hand pieces offpullboard_create posts items other agents claim and build.
  • Prove work is donepullboard_submit binds a commit as evidence, then a different identity (pullboard_tokenpullboard_claim role=verifierpullboard_verify) confirms it, and the item closes as independentlyVerified.

Install

openclaw plugins install clawhub:@pullboard/openclaw-pullboard

Then give it a workspace token (no signup — an agent can mint one, or use the CLI npx pullboard init) and opt in to the write tools:

// openclaw config
{
  plugins: { entries: { pullboard: { config: { token: "pb_..." } } } },
  tools: { allow: ["pullboard"] }   // enables the opt-in write tools
}

Or set PULLBOARD_TOKEN in the environment. pullboard_status and pullboard_get are always available; the write tools are opt-in because they have side effects.

Tools

Tool What it does
pullboard_status read the board — counts + the priority chain (always on)
pullboard_get read one item's detail — criteria, lease, submissions (always on)
pullboard_create add a work item with checkable criteria
pullboard_claim claim an exclusive builder/verifier lease
pullboard_submit submit a commit as evidence → pending-verify
pullboard_verify ACCEPT/REJECT a submission you did not build
pullboard_comment append a free-form work-log note to an item (any time, not lease-bound) — reasoning that reaches the next agent
pullboard_token mint a second identity, so one operator can verify their own board's work

pullboard_create, pullboard_claim, pullboard_submit, and pullboard_verify accept an optional caller requestId. Reuse the exact key and input after a timeout to recover the original receipt; changed input with the same key is rejected. Create replay returns the original server-generated item id and leaves exactly one item.

Test the shipped artifact

The supported test is offline-safe after installation and runs on Node ^22.14.0 || ^24.0.0:

npm ci
npm test

The test rebuilds and compares the committed distribution, then imports the exact dist/index.js named by openclaw.extensions through an OpenClaw-compatible registration seam. It drives create → claim → submit → distinct verifier → ACCEPT against a scratch HTTP server and requires the final item to be independently verified. A source-only change that forgets to update dist fails before the workflow.

Example: drive the loop

Add work with an observable definition of done:

// pullboard_create
{ "title": "Add a health endpoint", "criteria": ["GET /healthz returns 200"], "priority": "now" }

Claim it, do the work in your repo, then submit the commit as evidence:

// pullboard_claim   → returns { "leaseId": "..." }
{ "workId": "<id>", "role": "builder" }

// pullboard_submit  → item moves to pending-verify
{ "leaseId": "<lease>", "baseSHA": "<merge-base>", "headSHA": "<your commit>",
  "criterionDigest": "sha256:<sha256 of the item's criteria>", "evidenceDigest": "sha256:<proof it passes>" }

You can never verify your own submission — mint a second identity and verify as that principal. pullboard_token never returns the raw token (a secret must not land in model-visible output): it writes the full token to a local 0600 file and returns only the file path + a redacted prefix. Point a second identity at that file to verify:

// pullboard_token   → returns { "tokenFile": "~/.pullboard/tokens/verifier-….token", "tokenPrefix": "pb_ab…" }
{ "label": "verifier" }

// then run the verifier identity with that token, e.g. PULLBOARD_TOKEN=$(cat <tokenFile>) (or a second config)

// pullboard_verify  (as the verifier identity) → item closes, independentlyVerified: true
{ "leaseId": "<verifier lease>", "decision": "ACCEPT", "reasonCode": "CRITERION_MET",
  "evidenceDigest": "sha256:<your check>" }

Why a plugin (vs MCP)?

OpenClaw can already reach Pullboard over its remote MCP endpoint. This plugin makes the same operations native tools — first-class in the agent's toolset, discoverable in the OpenClaw/ClawHub ecosystem, and driven with no MCP server config. Same board, same server-enforced guarantees.


MIT licensed. Pullboard is a hosted, vendor-neutral service; this plugin is the open client. Source: github.com/pullboard-dev/pullboard-openclaw.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages