Muse Code for VS Code (Unofficial)
A native VS Code chat UI for Muse Code, Meta's agentic terminal coding agent.
Unofficial community project. This extension is not made, endorsed, or supported by Meta. "Muse" and "Muse Code" are Meta's names for their product; they are used here only to describe what the extension connects to.
Inspired by the Claude Code VS Code extension. The layout, commands, keybindings, settings and workflow of this extension deliberately mirror Anthropic's Claude Code for VS Code so that anyone who knows that extension feels at home. This project is not affiliated with Anthropic or Meta.
- Works alongside you: Muse explores your codebase, reads and writes code, and runs terminal commands with your approval.
- Integrated with the editor: Muse knows about your current file and text selection, and you can review its file changes as a diff right in the editor.
- Durable sessions: resume any past conversation for the workspace, including ones started from the
muse terminal TUI.
- Agentic features supported: approvals with policy amendments, user-input questions, subagents, todo lists, context compaction, model and reasoning-effort selection, and user shell commands.
Requirements
- VS Code 1.98.0 or higher.
- The
muse CLI, version 1.0.3 or later. Run muse login once before using the extension. The extension looks for muse on PATH, in common install locations (~/.local/bin, /opt/homebrew/bin, ...), and via your login shell, so it works even when VS Code is launched from the Dock. Set museCode.executablePath only if it still cannot be found.
Getting started
- Open a folder.
- Click the Muse icon in the editor title bar, or press
Cmd+Escape (Ctrl+Escape on Windows/Linux).
- Type a message and press Enter.
Use @ to mention files, / for commands, and ! to run a shell command yourself.
Commands
| Command |
Default keybinding |
| Muse Code: Open |
Cmd/Ctrl+Escape (focus) |
| Muse Code: Open in New Tab |
Cmd/Ctrl+Shift+Escape |
| Muse Code: Open in Side Bar |
|
| Muse Code: Open in New Window |
|
| Muse Code: Open in Terminal |
Cmd/Ctrl+Escape when museCode.useTerminal is on |
| Muse Code: New Conversation |
Cmd/Ctrl+N when enabled |
| Muse Code: Resume Past Conversation |
|
| Muse Code: Reopen Closed Session |
Cmd/Ctrl+Shift+T |
| Muse Code: Insert @-Mention Reference |
Alt+K |
| Muse Code: Toggle Focus view |
Ctrl+Alt+F |
| Muse Code: Create Worktree |
|
| Muse Code: Accept / Reject Proposed Changes |
editor title buttons while viewing a diff |
| Muse Code: Login / Logout |
|
| Muse Code: Show Logs |
|
Inside the chat: Enter sends, Shift+Enter inserts a newline, Esc interrupts, Shift+Tab cycles the approval mode, ↑ recalls previous prompts.
Settings
| Setting |
Description |
museCode.executablePath |
Path to the muse executable. A bare name (default muse) is resolved via PATH, common install dirs, and your login shell; ~ is expanded. |
museCode.environmentVariables |
Extra environment variables for the Muse process. |
museCode.useTerminal |
Run the muse TUI in a terminal instead of the native UI. |
museCode.initialApprovalMode |
onRequest, promptUnmatched, denyUnmatched or allowAll for new conversations. |
museCode.allowDangerouslyAllowAll |
Permit the allowAll mode (never asks). Sandboxes only. Picking "Allow all" in the mode picker offers to turn this on after a confirmation. |
museCode.model / museCode.reasoningEffort |
Defaults for new conversations. |
museCode.autosave |
Save all files before each prompt. |
museCode.focusView |
Hide tool calls and reasoning; show only prompts and replies. |
museCode.useCtrlEnterToSend |
Send with Ctrl/Cmd+Enter so Enter inserts newlines. |
museCode.preferredLocation |
panel (editor tab) or sidebar. |
museCode.includeEditorContext |
Attach the active file and selection to prompts. |
museCode.respectGitIgnore |
Respect .gitignore in the @-mention file picker. |
museCode.hideOnboarding |
Hide the welcome checklist. |
How it works
The extension launches muse serve, the Muse Session Protocol (MSP) host, once per workspace folder and talks to it over newline-delimited JSON-RPC on stdio. Sessions, turns, streaming items, approvals and user-input prompts are all MSP objects; the TypeScript types in src/msp/msp.d.ts are generated by muse schema generate-ts and can be regenerated for a newer CLI.
Approval modes map directly onto Muse's: On request (ask when a tool requests it), Prompt unmatched (ask for anything no policy already allows), Deny unmatched, and Allow all.
Prefer the terminal?
Set museCode.useTerminal to true. The Muse icon and Cmd/Ctrl+Escape then open the muse TUI in an integrated terminal, and Cmd/Ctrl+Alt+K types an @file#L1-2 reference for the current selection into it.
Development
npm install
npm run build # or: npm run watch
# Press F5 in VS Code to launch the Extension Development Host
npm run package # produces muse-code-<version>.vsix
Regenerate the protocol types after upgrading muse:
muse schema generate-ts --out src/msp
Acknowledgements
Inspired by the Claude Code VS Code extension by Anthropic. Muse Code is a product of Meta. This is an independent community project released under the MIT license.