Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions docs/user/permission-modes.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,11 @@ the parent conversation with the subagent's name, so you can respond without swi
## Provider differences

Providers enforce permissions differently. Some read-only actions can proceed in **Supervised**.
**Auto** uses automatic review on Codex, Claude, Cursor, Grok, and fx; providers without an equivalent,
**Auto** uses automatic review on Codex, Claude, Cursor, Grok, Muse Code, and fx; providers without an equivalent,
including OpenCode and Antigravity, fall back to asking. On Grok, commands its review blocks come
to you for approval. On fx, prompts it still sends also come to you.

Muse Code offers only **Supervised** and **Full access**. A Muse thread already set to another mode
runs in **Supervised**.
Muse Code offers no **Auto-accept edits**. A Muse thread already set to it runs in **Supervised**.

T3 Code offers no **Auto-accept edits** or **Full access** for fx. An fx thread already set to either runs in
**Supervised**.
Expand Down
8 changes: 5 additions & 3 deletions docs/user/providers-muse.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,11 @@ can use under **Custom models** in the instance settings.

## Permissions and limitations

Muse offers two [permission modes](./permission-modes.md): **Supervised** asks
before commands and edits, and **Full access** runs them without asking. Muse has
no equivalent of **Auto-accept edits** or **Auto**, so they are not offered.
Muse offers three [permission modes](./permission-modes.md): **Supervised** asks
before commands and edits, **Auto** keeps the sandbox on and lets Muse's
automatic review decide actions the sandbox restricts, and **Full access** runs
everything without asking. Muse has no equivalent of **Auto-accept edits**, so
it is not offered.

Muse can use T3 Code's tools. If Muse cannot reach them, the turn continues
without them. Switching providers can pass conversation context as a handoff.
Expand Down
1 change: 1 addition & 0 deletions packages/provider-muse/src/server/adapter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,7 @@ describe("MuseAdapterV2", () => {
Effect.gen(function* () {
for (const [runtimeMode, profile, approvalMode] of [
["approval-required", ":ask-me", "promptUnmatched"],
["auto", ":auto-review", "onRequest"],
["full-access", ":unrestricted", "allowAll"],
] as const) {
const policy = ProviderAdapter.ProviderAdapterV2RuntimePolicy.make({
Expand Down
2 changes: 0 additions & 2 deletions packages/provider-muse/src/server/sdk.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import {
createMuseSdkHost,
createMuseSdkHostEffect,
makeMuseEnvironment,
museApprovalMode,
museLaunch,
museVerbatimPath,
museWorkspaceRoot,
Expand Down Expand Up @@ -102,7 +101,6 @@ describe("Muse SDK host", () => {
? ["serve", "--trust-workspace", "--disable-sandbox"]
: ["serve", "--trust-workspace"],
});
expect(museApprovalMode(mode)).toBe(mode === "full-access" ? "allowAll" : "promptUnmatched");
fake.startup.resolve(fake.ready);
const host = await running;
fake.shutdown.resolve({ code: 0, signal: null });
Expand Down
9 changes: 6 additions & 3 deletions packages/provider-muse/src/server/sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,13 +132,16 @@ export const museLaunch = Effect.fn("museLaunch")(function* (
};
});

// Auto's onRequest asks only for actions the sandboxed profile restricts.
export function museApprovalMode(runtimeMode: RuntimeMode) {
return runtimeMode === "full-access" ? "allowAll" : "promptUnmatched";
if (runtimeMode === "full-access") return "allowAll";
return runtimeMode === "auto" ? "onRequest" : "promptUnmatched";
}

// Select explicitly; Muse defaults may let an AI reviewer decide approvals.
// Select explicitly; Muse defaults may let an AI reviewer decide approvals, so only Auto opts in.
export function musePermissionProfile(runtimeMode: RuntimeMode) {
return runtimeMode === "full-access" ? ":unrestricted" : ":ask-me";
if (runtimeMode === "full-access") return ":unrestricted";
return runtimeMode === "auto" ? ":auto-review" : ":ask-me";
}

export function museServeArgs(
Expand Down
4 changes: 2 additions & 2 deletions packages/provider-muse/src/server/status.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ const MUSE_PRESENTATION = {
displayName: "Muse Code",
showInteractionModeToggle: false,
reportsContextWindow: true,
// Muse has no accept-edits mode; map only :ask-me and :unrestricted.
supportedRuntimeModes: ["approval-required", "full-access"],
// Muse has no accept-edits mode; map only :ask-me, :auto-review, and :unrestricted.
supportedRuntimeModes: ["approval-required", "auto", "full-access"],
} as const;

const FALLBACK_CAPABILITIES = museModelCapabilities();
Expand Down
Loading