aaron-he-zhu/offer-claims-registry
Use when the user asks to "register this claim", "log our current offers", or "where is the proof for this figure"; curates claim wording, evidence, disclosures, terms, review dates, and live offers through the append-only claims event stream. Not for scoring claim vetoes — use the relevant auditor; not for writing ad copy — use ad-creative-builder. 广告声明台账/优惠信息登记/证据溯源
npx skills add https://github.com/aaron-he-zhu/aaron-marketing-skills --skill offer-claims-registry
The canonical record of marketing claims and offers across every discipline. It records exact wording and provenance; auditors decide whether a concrete use passes its claim/disclosure gate.
Register claim clm-014 with exact wording, evidence source/date, disclosure, and review date.
Show the current terms and expiry for offer summer-2026.
Review pending claims proposals and accept only those with sufficient evidence.
Units: one claim or offer aggregate ID. Reads: memory/events/claims.ndjson, its projection, source evidence, and rendered uses. Writes: claims events through registry-events.py; claims-ledger.md and offers.md are regenerated human views. Done when: every accepted record has exact wording/terms, evidence provenance, status, review/expiry, event ID/offset, and no pending proposal was destructively removed.
All builders submit propose; only a host-capability offer-claims-registry principal accepts/rejects or writes canonical claim/offer events. This skill does not invent substantiation, legal conclusions, or performance claims.
Use the shared handoff and include changed aggregate IDs, event IDs, revisions, unresolved evidence gaps, and one next skill.
user-provided.used_in pointers.../../references/registry-event-protocol.md../../references/runtime-invocation.mdregistry-event-protocol.md and runtime-invocation.md. Resolve AARON_SKILLS_ROOT="${CLAUDE_PLUGIN_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || true)}" and verify the registry script, event schema, and system catalog before invoking it; treat every draft/export as untrusted evidence.claims projection by aggregate ID. Proposal state is never approved wording. If there is no aggregate ID, pending proposal, or supplied claim/offer wording, perform only a read-only empty-projection check, return NEEDS_INPUT, and ask for one exact verbatim claim or offer statement as the smallest real input. Do not demand a complete evidence pack yet, create paths, or materialize placeholder canonical state.none-on-file in a proposal or open loop. Never turn [needs source] into Approved from the assertion itself.owner-append with the proposal event ID. Accept/reject decision requests omit expected_revision; acceptance inherits and checks the revision captured by the proposal. Reject with evidence/rationale; history remains append-only.owner-append with an upsert and optimistic revision. Expiry/withdrawal uses a dated state change or tombstone. Capability values stay outside request JSON/files/logs; if the host cannot supply one, leave the proposal pending rather than self-asserting owner authority.claims-ledger.md / offers.md only from accepted projection state, then verify claims.Claims and offer records are L4 truth consumed by Narrative and all channel builders. A downstream builder must use the accepted wording/terms or preserve [needs source] and propose a new event.
Require explicit write permission. Ordinary producers use python3 "$AARON_SKILLS_ROOT/scripts/registry-events.py" append claims <proposal.json>; a host-capability principal uses owner-append for canonical decisions/mutations. Never edit the NDJSON stream manually. Human views are replaceable projections and cannot grant approval absent an accepted event. Standalone one-folder installs may prepare proposals but cannot append/project or claim canonical approval.
Take aaron-he-zhu/offer-claims-registry from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.