Muse buyer and seller skills, with a bundled ACP bridge and an offline gate - #985
Draft
maxy-player wants to merge 3 commits into
Draft
Muse buyer and seller skills, with a bundled ACP bridge and an offline gate#985maxy-player wants to merge 3 commits into
maxy-player wants to merge 3 commits into
Conversation
added 3 commits
September 8, 2026 20:29
…gate The bridge lets a Muse account sell on maxplayer: it speaks the ACP slice the seller driver uses, publishes each turn as a queue job, and waits for a scheduled worker run to claim and finish it. Every guarantee the field shim lacked is enforced and tested offline: no os.getcwd() fallback for the job workdir, per-session identity on every prompt, the pre-advertise probe queued for the real worker instead of answered inline, atomic publish/claim/done, turn identity so a stale or late done is never reused, and cancellation propagated to the worker. Gate: node --test web/app/test/muse-skills.test.mjs (12 tests, no network).
…y entries Two skills for operating maxplayer from a Muse account, published alongside the existing five. They are the Muse layer and link to buyer-operate / seller-operate rather than restating them. muse-buyer: install into a Muse workspace, MAXPLAYER_HOME set on the MCP server process (buyer refuses --home), the two-step funding path, explicit human approval of task/target/amount/cap before every paid post with a re-post needing a fresh yes, and the source-checked trade loop -- including that post_job requires output, which the field guide's examples omitted. Recovery is stated only as far as the source supports it. muse-seller: the bridge plus a scheduled worker, the readiness gate whose nix check has no bypass, both stranger-facing routes closed until a sandbox launcher exists (the buyer allowlist admits and vetoes nothing), the claim -> work -> done contract with done meaning completion, and reap after a restart. Run history, not the schedule, proves a run happened. Every claim is tiered in references/verification.md: reproduced offline, source-checked, or field-reported. Clean-account Muse acceptance was unavailable, so it is marked an unpassed release gate, not a passing step. Gate: node --test web/app/test/muse-skills.test.mjs -- 17 tests, no network. web/app/test/build.test.mjs also passes 8/8 with the new index entries.
…safe-no-sandbox Source-checked against the maxplayer seller usage text: with both open routes off and no accept_offers_only_from, the seat claims nothing and says so at boot. The skill told readers to keep the routes closed without telling them the list is what makes a closed seat workable at all. Also names the flag that serves a stranger-facing surface with no containment, as one not to reach for.
|
Someone is attempting to deploy a commit to the MakePrisms Team on Vercel. A member of the Team first needs to authorize it. |
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.
Two public-use agent skills for operating Maxplayer from a Muse account, published alongside the existing five. They are the Muse layer only — they link to
buyer-operate/seller-operaterather than restating them. The five existing skills are untouched, and no crate, protocol or payment code changes.Draft: opened for review before any acceptance run exists. See the disclosure section — this is deliberately not a general-availability claim.
What is here
muse-buyer/skill.mdMAXPLAYER_HOMEon the MCP server process, the two-step funding path, human approval before every paid post, thepost_job → get_job → collectloopmuse-buyer/references/verification.mdmuse-seller/skill.mdclaim → work → donecontract, restart recoverymuse-seller/bin/muse-acp-bridge.pymuse-seller/references/{readiness,muse-platform,verification}.mdweb/app/test/muse-skills.test.mjs.well-known/skills/index.jsonWhy a bridge exists
maxplayer sellerspawns one agent process per job and speaks ACP to it over stdio. A Muse account cannot be that process — its model turns come from a scheduler, not a pipe. So:Every guarantee is enforced and has a test that fails without it:
os.getcwd()fallback for the job workdir. The driver spawns the agent with the seller's cwd, so a fallback silently ships an empty delivery. A session with a missing, relative or unwritablecwdfails instead.mkdir,donelands byos.replacestamped with its turn id. A stale or latedoneis never reused, and an expired turn cancels its own job.reapreleases claims held by killed runs without touching pending work, results or config.Offline gate
One command, no
npm install, no network, no relay, no seller daemon, no wallet, no sats:17 tests, 17 pass locally (node v26.5.0, python3 3.9.6). It fails loudly if
python3is absent rather than skipping — a green run that never executed the bridge is the false pass this work is about.python3is already a build-time assumption of this package (theservescript).Negative cases: missing / relative / non-existent session workdir; prompt for an unknown session; the probe not answered inline; five claimants racing one job; expired job; cancelled job; a
donestamped with another turn; a turn outliving its budget plus a late result trying to revive it; restart/stale-claim recovery; cancellation. Surface invariants: index↔file↔frontmatter agreement, every published pointer resolving to a shipped file, and asserted absence of identities, absolute home paths, 64-hex keys, invoices and balances.web/app/test/build.test.mjsalso passes 8/8 with the new index entries, which is what proves the derived AgentSkills v0.2.0 discovery index and its SHA-256 digests pick both skills up.Two documentation corrections from source
post_jobrequiresoutput(required: ["task","output","amount_sats"],additionalProperties: false). The field notes this work drew on omitted it, so no recorded call replays verbatim.maxplayer buyerrefuses--home(both spellings), namingMAXPLAYER_HOME— it does not silently ignore it.AGENTS.mdagrees the variable belongs on the MCP server process.Separately, and not changed here because it is outside this PR's scope: the published
buyer-operate/skill.mdstill saysmaxplayer buyer servesilently ignores--home, describing the pre-#438 behaviour as current. Worth a follow-up by whoever owns that page.Disclosure — what is not verified
maxplayer sellerprocess. Its ACP behaviour is tested against the protocol as read fromdriver/acp.rsanddriver/acp_driver.rs, not against the daemon.Deliberately absent
The field reports included an operator workaround for a box where the relay hostname resolved to a dead local intercept — a local forwarder plus a mount-namespace
/etc/hostsoverlay. It is not published here. The reports themselves record that no supported method exists for that situation, and a restriction workaround is not an installation step. Both skills instruct the reader to report an unreachable relay as a named blocker instead.No spending, wallet access, tag, merge or deployment was involved in producing this branch.