Skip to content

Add Muse harness support (skills + always-on rules) - #1211

Merged
mergify[bot] merged 3 commits into
mainfrom
muse-harness
Sep 28, 2026
Merged

mergify[bot] merged 3 commits into
mainfrom
muse-harness

Conversation

@EdbertChan

@EdbertChan EdbertChan commented Sep 28, 2026 •

Copy link
Copy Markdown
Owner

Summary

Muse now receives the same reusable agent packages and standing guidance as the other coding agents. A setup run places them in Muse’s workspace and refreshes its global instructions file.

The problem was that Muse had no target in the setup path. The helper, parity checker, and instruction merger all assumed the older agent set, so Muse could drift.

The fix adds Muse as a first-class target, sends global instruction blocks to the file Muse reads, and enforces the four-agent invariant automatically.

Muse has no hook pipeline, so the Claude-only cat-mode default path cannot run there. When that flag is on, setup writes the matching directive into Muse’s global instructions.

Review Claim

Muse receives the same reusable agent packages and standing guidance as the other agents, with four-agent parity enforced automatically.

Review Lane

behavior

Review Unit

engine-runtime

Safety Invariant

This slice narrows the branch to runtime setup files plus direct tests. Existing Claude, Cursor, and Codex setup paths still use their same roots, and the four-agent parity check passes. (Proposed without user confirmation — repair is running headlessly; see Assumptions.)

Slice Rationale

This keeps the runtime Muse support in one review unit and leaves broad handbook wording for a docs-only follow-up.

Non-goals

  • No hooks or slash commands for Muse; it exposes neither surface.
  • No change to setup behavior for Claude, Cursor, or Codex.
  • The reflect-enforcement default stays off unless the flag is set.

Test Plan

Test Plan
  • node engine/skills/draft-pr/scripts/validate-pr-body.mjs --body-file /tmp/pr-body.md --changed-files-file /tmp/pr-files.txt
  • python3 scripts/ci/check_skill_test_coverage.py --base origin/main --head HEAD
  • python3 scripts/ci/check_skills_three_harnesses.py
  • python3 scripts/ci/check_ecosystem_boundaries.py
  • python3 -m unittest discover -s tests -p "test_skills_three_harnesses.py"
  • python3 -m unittest discover -s tests -p "test_validate_pr_body_local.py"
  • python3 -m unittest discover -s tests -p "test_reflect_enforcement_install.py"
  • python3 -m unittest tests.test_install.TestSkillSymlinks.test_cursor_always_on_create_skill_rule_symlinked tests.test_install.TestSkillSymlinks.test_codex_agents_md_gets_create_skill_block

Revert Plan

Revert Plan
  • Safe to revert? Yes
  • Revert command: revert the PR commits, including 57ccac2a
  • Post-revert steps: rerun ./install.sh to drop Muse links and managed blocks
  • Data migration? No

Assumptions

  • Safety Invariant published unconfirmed: this repair is running under a headless CI-fix request.

Note

Medium Risk
Changes ./install.sh behavior for every rerun (new symlinks, ~/AGENTS.md merges, link sweep) but leaves existing Claude/Cursor/Codex roots and Codex AGENTS behavior unchanged aside from shared installer refactors.

Overview
Adds Muse as a fourth agent harness alongside Claude, Cursor, and Codex for portable skills and standing “always-on” guidance.

./install.sh now symlinks skills into MUSE_SKILLS_DIR (default ~/workspace/skills), sweeps stale catstack links there, and merges the same marked always-on fragments into ~/AGENTS.md via a generalized install_codex_agents_md.py (--agents-path). Reflect-enforcement and standard always-on blocks follow Codex’s args; when CATSTACK_CAT_MODE_DEFAULT=on, a Muse-only cat-mode-default fragment is injected into ~/AGENTS.md (not into ~/.codex/AGENTS.md), since Muse has no hook pipeline.

Project-skill linking (link_skill_three_harnesses.sh) and CI/home parity checking (check_skills_three_harnesses.py) now require four roots; policy text in create-skill, always-on fragments, and the Cursor rule was updated to “Claude, Cursor, Codex, and Muse.” The repo check no longer gates CONTRIBUTING.md on that phrase. drafter.config.json treats always-on/** and cursor/rules/** as engine-runtime for review classification.

Reviewed by Cursor Bugbot for commit 58012e0. Bugbot is set up for automated code reviews on this repo. Configure here.

- install.sh: install catstack skills into ${MUSE_SKILLS_DIR:-$HOME/workspace/skills}
  and merge always-on fragments into ~/AGENTS.md as managed blocks
- install_codex_agents_md.py: generalized to an AGENTS-style merger with
  --agents-path (defaults to ~/.codex/AGENTS.md)
- link_skill_three_harnesses.sh: link project skills into Muse's skill dir
- check_skills_three_harnesses.py: four-harness parity (claude-only skills
  stay out of cursor, codex, and muse)
- Docs: README, CONTRIBUTING, create-skill, always-on, cursor rule,
  provenance, CLAUDE.core updated for four harnesses
- Tests: muse skill install, AGENTS.md managed blocks, content preservation,
  no hooks/commands dirs, reflect-enforcement for the muse block
@cursor

cursor Bot commented Sep 28, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_2b27afb2-72cf-4cd7-b410-9bc05aa43c59)

@cursor

cursor Bot commented Sep 28, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_f4451ddd-2e56-49ad-a1c1-edaa7eb8fcd8)

Muse has no hook pipeline, so the Claude-only cat-mode-default hook can
never fire there: the installed skill sat inert behind
disable-model-invocation with nothing to override it. install.sh now
merges an equivalent one-line cat-mode-default fragment into the muse
~/AGENTS.md block when CATSTACK_CAT_MODE_DEFAULT=on (and removes it
otherwise), mirroring the reflect-enforcement --fragment/--without
pattern. Codex behavior intentionally unchanged.

Tests: block present when on, removed when off, always-on blocks
otherwise untouched, and no such block in Codex's AGENTS.md.
@mergify

mergify Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Queued — the merge queue status continues in this comment ↓.

@cursor

cursor Bot commented Sep 28, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_86434298-2904-40c6-9bda-37cae60b1432)

@EdbertChan

Copy link
Copy Markdown
Owner Author

@Mergifyio queue

@mergify

mergify Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Merge Queue Status

This pull request spent 44 minutes 11 seconds in the queue, including 43 minutes 48 seconds running CI.

Required conditions to merge
  • check-success = lint
  • check-success = test
  • check-success = validate

@mergify mergify Bot added the queued label Sep 28, 2026
@mergify
mergify Bot merged commit 691e4b3 into main Sep 28, 2026
7 checks passed
@mergify mergify Bot removed the queued label Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant