feat(plugin): ship the buyer playbook as a Claude Code plugin - #938
Open
orveth wants to merge 2 commits into
Open
feat(plugin): ship the buyer playbook as a Claude Code plugin#938orveth wants to merge 2 commits into
orveth wants to merge 2 commits into
Conversation
The four MCP tools teach the mechanics of posting, awarding and collecting. They cannot teach shape, and shape is what decides whether delegation saves money or costs it. This puts the playbook where a new buyer gets it without asking. npm/plugin/ carries the manifest, an .mcp.json that spawns the published launcher, and skills/buyer/SKILL.md. The skill is model-invocable, so a delegation-shaped request loads it without maxplayer vocabulary in the prompt. No second copy of the binary: npx -y maxplayer mcp. SKILL.md is the source of truth. docs/BUYER-PLAYBOOK.md is generated from it for hosts that speak MCP but not plugins, and verify-buyer-playbook.sh fails CI when the two drift. The script owns the generator too, so the check cannot diverge from what it checks. Two lines of the playbook did not match the tools, corrected here and in the spec appendix so the two copies agree: - It told the agent to set a claim timeout. No such parameter exists in mcp.rs; it is unbuilt. Replaced with the repost rule that does hold. - It hedged about a readiness surface "if available" and taught collect polling as the fallback. get_job already long-polls on wait_for=result, so the skill now names it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Absolute sats were a snapshot of one relay in one week, and a model reads a number as a target whatever label sits beside it. "Calibration, not constants" does not stop anchoring. What the A/B established is an ordering, not a price: plan cheap, implementation dear, gate expensive behind cheap. That survives any price level, so it stays. The four step headers now name their relative cost. The prices are replaced by the loop that finds the real one, using machinery that already exists: offer your own valuation in amount_sats, cap it with max_sats (a claim above it is refused), read the claims that arrive, and repost higher if none do. An unclaimed offer costs nothing. Workstream B item 5 defined the skill as carrying a price ladder, so it contradicted the skill as shipped; it now describes discovery instead. Problem and Evidence keep their numbers. There a price is a record of what one run cost, which is what evidence should be. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements workstreams A (plugin packaging) and B (the buyer skill) from
docs/superpowers/specs/2026-08-31-buyer-optimal-use-distribution.md(#936, merged). C and D are deliberately out of scope.What lands
SKILL.md is the spec's Appendix 1, extracted rather than retyped. It is model-invocable, so a delegation-shaped request loads it without maxplayer vocabulary in the prompt. The plugin reuses the published launcher, so there is no second distribution of the binary.
Two corrections to the playbook
The skill instructed the agent to do one thing the tools cannot do, and to skip one thing they can. Both are fixed here and in the spec appendix, so the two copies agree:
claim_timeoutappears nowhere incrates/maxplayer/src/mcp.rs. It is workstream D item 3, unbuilt. Replaced with the repost rule, which does hold.collect." That surface already exists:get_jobtakeswait_for: claim|resultplustimeout_secs, capped internally. The skill now names it instead of teaching the polling fallback.The second one also narrows workstream D2, which proposes exposing a wait surface as though none is exposed. The per-job wait ships today; only the cross-job version ("block until any awarded job is ready") is missing.
The drift gate is red-proven
Two copies of the same normative text rot silently.
verify-buyer-playbook.showns both the generator and the check, so they cannot diverge. Four failure arms, all exit non-zero, green restored after each:Notes for review
maxplayer mcphas no--home, and this manifest sets no env, so the server uses the default~/.maxplayer. Correct for a new buyer; operators with several homes must register the server themselves. Documented innpm/plugin/README.md.npx -y maxplayerresolveslatest, per the spec's "no second distribution". That means a plugin user follows releases automatically — including of a binary that spends money. Flagging it as a deliberate decision to confirm, not an oversight. The plugin's own version is independent and is not a release-flow bump site.mcp.rs, which AGENTS.md names as the source of truth.🤖 Generated with Claude Code