Messageboard
Govern a bounty-style messageboard from post through moderation, claim, delivery, acceptance, payout authorization, and trial take evidence.From its SKILL.md
npx -y skills add runxhq/runx --skill messageboardAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
9.3 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it
Messageboard
Operate a governed bounty messageboard where every consequential transition is explicit: a posting starts in screening, moderation controls visibility, claims are exclusive while their fuse is active, delivery starts an acceptance window, acceptance authorizes payout, and trial take exhibits seal either an allowed messageboard ledger transition or a denial.
Use this skill as the agent-facing context for board work. Select the runner
that matches the transition you are performing: post, moderate, claim,
deliver, accept, or take. When the transition must be durable, use the
matching *_and_append graph runner and pass a logical data_source_ref.
Do not split those transitions into separate catalog skills; they are one
product capability with several governed modes.
Composes
<!-- Generated from the native execution closure; run pnpm core-skills:composes:generate. -->data-store#append_eventdata-store#read_projection
What this skill does
- Prepares funded bounty postings with actor identity, clocks, deliverable tests, and moderation notes.
- Approves or rejects screened postings with cited reasons and no hidden visibility bypass.
- Creates exclusive claims, records delivery evidence, and accepts completed work against the original terms.
- Authorizes payout ledger rows only after accepted delivery.
- Exercises the trial take exhibit with generic effect-transition proof, norm refs, and ledger impact when allowed.
- Persists post, claim, delivery, and acceptance transitions through
data-storewhen run with the durable graph runners.
When to use this skill
- A chain needs a board posting, moderation decision, claim, delivery, acceptance, or payout authorization that can be audited later.
- A hosted or local stateful-effect app needs packet-shaped transitions rather than prose-only state changes.
- A verifier needs to inspect who acted, under which grant, against which posting, and with which receipt/proof refs.
- A demo needs to show allow-and-mark versus deny behavior on a messageboard effect family without adding a new core packet or contract enum.
When not to use this skill
- For ordinary chat, comments, or non-governed task tracking.
- To bypass moderation, funding checks, identity checks, or receipt sealing.
- To mutate board state without selecting the matching runner and returning the packet shape for that transition.
- To execute real settlement rails. This skill authorizes board ledger effects; real rail settlement belongs to the payment/spend family.
Procedure
- Identify the transition:
post,moderate,claim,deliver,accept, ortake. - Confirm the caller has authority for that transition. Do not infer authority from display names; use stable actor/moderator/claimant identifiers.
- Check the current state and lazy clocks before deciding. Apply claim fuses, delivery deadlines, and acceptance windows before acting.
- Bind evidence by reference. Use artifact refs, funding refs, verifier output, norm refs, and prior receipt refs rather than embedding private artifacts or raw secrets.
- Emit a stop decision instead of guessing when identity, funding, policy, clocks, acceptance criteria, or artifacts are unclear.
- Return the transition packet named by the runner. The receipt should bind the authority/grant, posting id, actor id, clock state, amount, and proof refs.
- For durable board state, call the matching
*_and_appendrunner. The graph first decides the transition, then appends the sealed packet to the declared data source, then reads back the projection. The domain packet owns meaning; the data adapter only proves resource, aggregate id, version movement, and digest.
Edge cases and stop conditions
needs_agent: actor authority, moderator authority, claimant identity, constitution, or current board state cannot be verified.needs_more_evidence: funding, deliverable scope, artifact refs, verifier output, norm refs, or acceptance criteria are incomplete.reject: the request is unfunded, unsafe, impossible, late, duplicate, already active-claimed, or outside the board rules.refused: the requested transition does not match the current state or grant.denied: an enforced constitution blocks a trial take.escalated: legal, sanctions, fraud, wash-trading, safety, or dispute signals require human/counsel review.
Output schema
Return one packet shape based on the selected runner. Every packet starts with
effect_family: "messageboard" and operation equal to the runner name:
post:posting,funding,clocks,screening_notes,stop_conditions.moderate:moderator_kid,posting_id,decision,reasons,visibility_effect,stop_conditions.claim:actor_kid,posting_id,claim,stop_conditions.deliver:actor_kid,posting_id,delivery,acceptance_window,stop_conditions.accept:actor_kid,posting_id,acceptance,payout_authorization,stop_conditions.take:phase,actor_kid,victim_kid,norm_refs,receipt_ref,ledger_entries,stop_conditions.
Every runner emits the generic packet runx.effect.transition.v1 with
effect_family: "messageboard" and an operation matching the runner. The
stateful-effect app owns the operation payload, reducers, views, and clock
folds; runx seals the generic transition envelope with the relevant
grant/scope, prior receipt refs, and ledger impact when a transition changes
value or visibility.
For persistence, compose this skill with data-store or a product-owned data
adapter. Do not add messageboard-specific database semantics to runx core.
Durable runners:
post_and_appendclaim_and_appenddeliver_and_appendaccept_and_append
Each durable runner takes the base transition inputs plus
data_source_ref, resource, aggregate_id, expected_version, and
idempotency_key. The data source binding decides whether the event lands in
local JSON, SQLite, Postgres, D1, Redis, or a product-owned adapter. The
messageboard graph does not branch on provider type.
Worked example
A vendor posts Verify receipt link with a mock funded hold. The post runner
returns a screening packet with clock policy and moderator notes. The
moderate runner approves it only after funding and scope are clear. A worker
then uses claim, submits a verifier command through deliver, and the vendor
uses accept to authorize payout from board escrow to the worker. Each packet
binds the same posting id and is independently receipt-verifiable.
Inputs
Each runner has its own required inputs:
post:actor_kid,title,deliverable,amount_minor,currency, optionalfunding_evidence, optionalclock_policy.moderate:moderator_kid,posting,decision, optionalreasons.claim:actor_kid,posting, optionalidempotency_seed.deliver:actor_kid,claim,delivery_evidence.accept:actor_kid,delivery,acceptance_evidence.take:actor_kid,victim_kid,amount_minor,currency,constitution,receipt_ref.
Agent task contracts
messageboard-post
Build one screening-stage posting from the supplied actor, deliverable, amount,
funding evidence, and clock policy. Return exactly effect_family, operation,
actor_kid, posting, funding, clocks, screening_notes, and
stop_conditions. Never call an unproved hold funded, make a posting visible,
or authorize payout. Stop when the deliverable, identity, currency, amount, or
funding evidence is unsafe or ambiguous.
messageboard-moderate
Evaluate only the supplied screened posting and requested decision. Return the
moderator and posting ids, decision, cited reasons, visibility_effect, and
stop_conditions. Approval requires bounded deliverables and credible funding;
rejection requires reasons. Never rewrite the posting or bypass a required
escalation.
messageboard-claim
Create one exclusive claim only for the supplied approved, currently claimable
posting. Bind the claimant id, posting id, stable idempotency material, fuse,
and delivery deadline in claim. Stop on an active competing claim, expired
window, identity mismatch, or non-approved posting; do not choose a winner by
guesswork.
messageboard-deliver
Accept delivery only from the active claim owner before its deadline. Preserve
artifact and verifier references in delivery, derive the acceptance window
from the board clocks, and return no payout claim. Missing or unverifiable work
evidence is a stop, not a successful delivery.
messageboard-accept
Compare supplied delivery evidence with the original acceptance criteria under
the supplied actor's authority. Return acceptance and a bounded
payout_authorization; this authorizes the next payment lane but never claims
settlement. Reject or escalate incomplete verification, disputes, identity
mismatch, or altered terms.
messageboard-take
Apply the supplied constitution to one trial take and return the exact phase, actors, norm refs, receipt ref, ledger entries, and stop conditions. Do not invent constitutional rules, evidence, or value movement. A denial is a valid sealed outcome; ambiguous authority or evidence must stop.
What ships with it: 14 files
35.5 KB alongside SKILL.md
fixtures/
- accept-and-append-sqlite.yaml1.4 KB
- accept-delivery.yaml799 B
- approve-screened-posting.yaml753 B
- claim-and-append-conflict.yaml1.4 KB
- claim-and-append-sqlite.yaml1.3 KB
- claim-approved-posting.yaml751 B
- deliver-active-claim.yaml830 B
- deliver-and-append-sqlite.yaml1.4 KB
- permissive-take.yaml792 B
- post-and-append-sqlite.yaml1.8 KB
- post-to-accept-lifecycle.yaml4.8 KB
- ready-funded-posting.yaml1.2 KB
harness/
- post-to-accept.yaml3.7 KB
- X.yaml14.7 KB