Muse Code Integration (Native Claude Skills Spec)
Uses the native Claude skills specification via Muse Code's own plugin marketplace: muse plugins marketplace add + muse plugins install load the plugin as a claude-compatible bundle, _shared/ included.
Prerequisites
- Jira auth configured — per-request Basic auth from
.jst/jira-sdlc-tools.local.env, no login step (see jira-api-reference.md §9) gh(GitHub CLI) authenticated.jst/jira-sdlc-tools.envand.jst/jira-sdlc-tools.local.envin your project root — see project-config.md- Meta's Muse Code CLI installed (
museonPATH) and logged in (muse login), with an active subscription —muse usageshows the allowance. Written against Muse Code 1.4.13 (1.4.13-R6996.1) on Linux. - Muse's credentials live in
~/.config/muse/auth.json. Never print or paste that file.
Install / Wire-up Steps
Muse Code reads Claude Code plugin bundles natively, so the install mirrors Claude Code's marketplace flow. No copy step, no per-skill adaptation file.
-
Check the bundle (optional, read-only):
muse plugins validate </PATH>/plugins/jira-sdlcExpect
valid jira-sdlc claude-compatible skills=4. The eight warnings are expected (see the caveats below). -
Register this repo as a marketplace and install the plugin from it:
muse plugins marketplace add jira-sdlc-tools </PATH-OR-GIT-URL> # the repo root, which holds .claude-plugin/marketplace.jsonmuse plugins install jira-sdlc@jira-sdlc-toolsReplace
</PATH-OR-GIT-URL>with the absolute path to a local clone, or with the repo's git URL. Muse snapshots the marketplace, then copies the whole plugin root into its own cache (~/.local/share/muse/plugins/cache/local/jira-sdlc/<hash>/package/)._shared/arrives intact, next to the four skill folders. -
Confirm the skills are registered:
muse skills list --source pluginEach of the four shows as
plugin:jira-sdlc:<skill>with activationuser-invocable-only, which is thedisable-model-invocation: truefrontmatter honoured.
muse plugins install <path> --scope user|project (a local bundle, no marketplace) and muse skills install / muse skills import --from claude are also listed by the CLI. They are not covered here, because the marketplace route is the one that keeps _shared/ next to the skills and was run live.
Invoking the Three Skills
Start the interactive TUI (muse) from where each skill expects to run, and use the same slash commands as Claude Code:
/jira-sdlc:jira-task-assigner— break down a task into Jira issues with branches + worktrees (from the main checkout)/jira-sdlc:jira-task-executor— implement an issue end-to-end from its worktree/jira-sdlc:jira-task-reviewer— review the issue's PRs from its worktree
/jira-sdlc:jst-install sets a project up. Muse also offers a bare alias for each (/jira-task-assigner, /jst-install, …), but the namespaced form is the one the skills' own cross-references use. Text after the command reaches the model: Muse leaves $ARGUMENTS unexpanded in the skill body and appends the arguments after it, which is enough for the assigner's free-form task and the notes the other skills accept. Verified in the TUI.
The first run in a directory asks whether to trust the workspace. Trusting only loads project-local skills and rules — the plugin's skills load either way.
Platform-Specific Caveats and Known Gaps
disable-model-invocation: true— honoured natively (Verified). The skills register asuser-invocable-only. When the model tries to load one itself,read_skillreturnscode: disabled-skill, and the model stops and asks rather than improvising. Only the user's slash command loads them.- No headless route (Verified). The flip side of the point above:
muse execpasses/jira-sdlc:<skill>,/plugin:jira-sdlc:<skill>and/skill <id>to the model as plain text, the model'sread_skillis refused, and the run ends asking for confirmation. These skills therefore run in the TUI only, so there is no Muse equivalent of theclaude -pCI demos. - Script paths resolve with no fallback (Verified). Muse substitutes
${CLAUDE_PLUGIN_ROOT}in the skill body with the cached plugin root and passes the skill's ownskill-dir, so every_shared/scripts/posix/call hits the cache copy directly. The skills' "Locating the shared scripts" fallback never runs, and Muse needs no entry in its skills-locations list. - Sandbox needs unprivileged user namespaces. Muse's Linux sandbox is Bubblewrap. On Ubuntu 24.04, AppArmor restricts unprivileged user namespaces (
kernel.apparmor_restrict_unprivileged_userns = 1) and every sandboxed command fails withbwrap: loopback: Failed RTM_NEWADDR: Operation not permitted. Muse then offers to rerun the command outside the sandbox, which needs approval. Approved,ensure_local_env,check_assignee,statuscheck(Jira REST,gh auth,gh api) all ran (Verified). Whether git,ghand Jira calls work inside a working sandbox — whose network mode defaults toproxy-only— and whether it allows writes toWORKTREES_DIRoutside the workspace is Unverified. Compare Codex'swritable_rootscaveat. allowed-toolsis not enforced. Muse reports that the skills'allowed-toolslists can't be represented exactly and runs them under ordinary approval, so you approve each command, as with any other Muse tool call. Theplugin.jsonauthor/keywords/license/repositorywarnings are presentation-only.- The cache is a snapshot. Like Claude Code, Muse copies the plugin at install time, so edits to your clone don't reach it.
muse plugins marketplace update jira-sdlc-toolsthenmuse plugins update jira-sdlcshould refresh it (Unverified). - What was run. Under Muse Code 1.4.13 on this repo: the marketplace install,
/jira-sdlc:jira-task-executorup to its credential gate (it stopped as designed, outside any project), and the assigner's step 1 healthcheck from the main checkout — every row as expected, and the skill stopped when told to. Not yet run under Muse: the assigner's issue creation and a full executor or reviewer pass.