github miqdadbadjuber/anti-slop v3.2.29
v3.2.29: Muse Code becomes the ninth plugin door

45 minutes ago

Muse Code becomes the ninth plugin door, and it needed no new manifest. Set one experimental flag, add the repository as a marketplace, and Muse imports all six skills from a manifest it already understands.

It needed no new manifest

Muse Code looks for an Agent Plugins root plugin.json first, then .muse-plugin/, then .claude-plugin/. The repository root carries only a name, so Muse selects .claude-plugin/plugin.json, the same file Claude Code reads.

No .muse-plugin folder was added. A second manifest would be a version to bump every release and a claim that something is wired up when it is not.

The plugin system sits behind an opt-in flag, so the install sets it first:

export MUSE_EXPERIMENTAL_PLUGINS=1
muse plugins marketplace add anti-slop miqdadbadjuber/anti-slop
muse plugins install antislop@anti-slop

On Windows, set $env:MUSE_EXPERIMENTAL_PLUGINS = "1" in PowerShell instead. Muse ships a native Windows installer, so the flag is not a macOS and Linux detail.

Skills load with the plugin. The contrast MCP server is a runtime capability, so it needs muse plugins approve antislop, and any package change resets that approval.

A separator that mattered

Muse rejected the six skills' allowed-tools frontmatter, which used spaces, and it rejected the whole plugin with it: a marketplace snapshot reported plugins=0 skipped=1, so the door offered nothing at all. The field is now comma-separated in all six skills and in the generator that produces the core.

The Agent Skills specification shows the space-separated form, and Claude Code accepts either. Muse accepts commas only. No single form satisfies every parser, so the comma form was chosen: Muse keeps the plugin, Claude Code reads the tools correctly, and a parser that follows the specification literally grants no pre-approval, which changes nothing except permission prompts.

The installer covers it too

Muse Code reads .agents/skills at both scopes, plus .claude/skills and .codex/skills in a project, with the shared folder outranking the other two. The installer already writes that shared folder, so Muse joins without a new path. The installer now covers fourteen agents over nine folders.

The duplicate-read warning knows about Muse too, so picking it beside Claude Code or Codex names the second copy before a skill silently loses to one of them.

Project skills are gated by a trust decision. The first muse run asks whether to trust the workspace and remembers the answer; until then the skills stay dark and muse skills list reports project-skills-untrusted. A global install and the plugin door are not gated.

What is verified, and what is not

Verified on Muse Code 1.4.15 in WSL. The shorthand source resolves to GitHub, the GitHub marketplace now offers 3.2.29, the install imports all six skills with activation on, muse plugins approve enables the contrast server, and an MCP check_contrast call returned a real ratio. Duplicate skill ids were used to confirm the folder order: .agents/skills wins, then .codex/skills, then .claude/skills.

The installer smoke test pins the Muse target paths, its global target, and the duplicate read.

Two things are not verified: a full Muse session with a signed-in account, since this machine has no Meta account, and a session on Windows. Both need an account and a live session, so they stay unclaimed rather than assumed.

Updating

muse plugins marketplace update anti-slop
muse plugins update antislop
muse plugins approve antislop

A changed package resets the approval, so the last line is needed again after every update. Removing the plugin is muse plugins remove antislop, and removing the marketplace as well is muse plugins marketplace remove anti-slop.

The installer route is unchanged:

npx antislop-ai --update

A plugin keeps its own copy, so update it through Muse Code. Skills load when a session starts, so start a new one afterwards.

Don't miss a new anti-slop release

NewReleases is sending notifications on new releases.