Mirror CLI is in early beta. Commands and behavior may change as we fix bugs and polish the release. Run
/help to see the commands available in your installation, including those added by enabled extensions.Start Mirror CLI
Start it from the directory where you want to work:Continue and trust this folder? [y/N] before it starts; type y and press Enter to continue.
A fresh installation uses Reflection and Beam-501B-A23B. If you previously selected another provider or model, run /model reflection after Mirror starts; Mirror remembers the selection. To use Reflection for one launch without changing the saved selection:
--api-key, if provided. Prefer the environment variable to keep the key out of shell history.REFLECTION_API_KEYin your environment.- A saved key in
~/.mirror/reflection_api_key. - The Connect to Reflection prompt, if no key is available. Input is masked with one
*per character, and Mirror saves the key for later sessions without checking it.
/logout removes the saved key and, if REFLECTION_API_KEY isn’t set, reopens the Connect to Reflection prompt so you can replace a wrong key. It doesn’t affect REFLECTION_API_KEY.
See API-key setup.
- Run
mirror --helpfor launch options. - Enter your task after Mirror starts. The interactive CLI does not accept a prompt as a positional argument.
Send prompts and interrupt turns
Slash commands
- Type
/to browse commands. - Use the arrow keys to choose one.
- Press
Enterto select it.
Conversations and workspaces
Settings and tools
Model, credential, context, editor, connection, memory, and feedback commands come from bundled extensions. They are available while the corresponding extension is enabled.Keyboard shortcuts
These are the default bindings. Menus and approval prompts use some keys for their own navigation, butEscape at an approval prompt interrupts the whole turn.
User shortcut overrides live in
~/.mirror/keybindings.json. Project directories do not supply shortcut overrides.
Resume or branch a conversation
Inside Mirror, use
/resume to open the searchable picker:
- Type to filter the list.
- Press
Tabto cycle between the current directory, the repository, and all directories. - Pass a full ID or unique prefix to
/resumeto select a conversation directly. A prefix must identify exactly one conversation. - Resuming from a different directory asks for confirmation. Files and the working directory may differ from the earlier session.
/rewind:
- Choose an earlier user turn.
- Edit its prompt.
- Confirm the new conversation branch. The original conversation keeps its later turns.
Work on parallel tasks
Use/worktree [name] to create a separate checkout, then /workspaces to select it. Each workspace has its own agent and conversation.
See workspaces for creation, switching, status indicators, saved settings, parallel-task examples, and removing completed checkouts.
Choose a model and reasoning effort
- Use
/modelto choose a provider or model. - Mirror remembers a model selected with
/model. A model or provider set with launch flags applies to that launch only. - Each workspace remembers its model and reasoning effort.
- Run
/statusto check the model and reasoning effort. The status bar below the prompt shows the approval mode, model, and reasoning effort.
- Launch default:
xhigh. A workspace’s saved reasoning effort takes precedence over the default and--reasoning-effort. Use/reasoningafter launch to change it. - Effort levels: The
/reasoningpicker offersprovider default,minimal,low,medium,high,xhigh, andmax.--reasoning-effortand/reasoning <effort>also acceptnone. - Supported levels: These depend on the provider and model. With
Beam-501B-A23B, uselowthroughmax; requests withminimalfail with400. See Reasoning.
Model picker configuration
~/.mirror/models.json contains a JSON array of model entries:
- Required fields:
idandlabel. - Optional fields:
description,api, andbase_url.
- Set
MIRROR_MODELS_CONFIGto select a different file. - Explicit
--apiand--base-urlflags override values from the selected entry. - Keep API keys in the provider’s environment variable rather than this file.
Other providers
Exporting a key does not select its provider. Choose the matching--api value or use /model.
For a custom endpoint, supply its model ID and base URL:
- Custom endpoints can work without an API key.
--api reflectionuses Reflection’s endpoint and does not accept an alternative base URL.
Tool approvals
Mirror’s default is manual approval: it asks before running tools that require approval, and the status bar showsmanual. To approve tool calls automatically:
- Saved mode: Use
/permissionsorF2after launch to switch between automatic and manual approval. Mirror remembers the choice, including one made with--approval-mode, for every directory in~/.mirror/config.json. - Calls needing review: Manual mode asks before tools marked as requiring approval. By default, these include shell commands, even read-only ones such as
lsorcat, file writes and edits, and connected-service tools. - Approve or reject: Press
1orEnterto approve, and2to reject. Use the arrow keys to choose another option. - Interrupt:
Escapeat an approval prompt interrupts the whole turn. - Local permissions: Tools, external extensions, and local MCP servers execute with your account’s permissions. Approval mode controls review and does not create an operating-system sandbox.
Project instructions and skills
Instructions
Put project guidance inAGENTS.md or CLAUDE.md. When both exist in a directory, Mirror uses AGENTS.md.
Mirror loads instructions from:
~/.mirror/AGENTS.mdor~/.mirror/CLAUDE.mdfor global guidance.- Directories along the path from the repository root to your working directory.
- Outside a repository, it loads global instructions and those in the current directory.
- Run
/contextto inspect the sources used for the latest model request.
Skills
A skill is a directory containing aSKILL.md file with YAML metadata and task instructions. For example, .agents/skills/review-tests/SKILL.md:
A closer skill with the same name replaces an earlier one.
- Type
$in the composer to browse skills. - Include a whitespace-separated mention such as
$review-testsin your prompt to request one. - The model can also load a skill when its description matches the task.
MCP servers
MCP connects Mirror to additional tools and services:/connectopens a picker of services: Datadog, Linear, Notion, and Slack, which you sign in to, and Add a custom server…, which shows how to define your own./connectionsshows connected services. If it says the Mirror server is unavailable, it lists the services connected on your machine, which work without it./disconnectdisconnects a service.
- Save each server in
~/.mirror/mcp/<server-name>.json, then run/connect <server-name>. Names use letters, numbers,-, and_. - Custom servers stay on your machine.
- Set
MIRROR_MCP_DIRto use another directory. Project-local definitions are not loaded. - Each file describes one server, without an
mcpServerswrapper. - Provide exactly one of
urlorcommand.
- Export
MY_MCP_KEYin the shell that launches Mirror. - Authenticated HTTP servers need HTTPS, except for loopback addresses.
- In
env, each right-hand value names an existing environment variable, not a literal credential. This example passes Mirror’sMY_MCP_KEYvalue to the server asAPI_KEY. - Optional
enabledToolslimits exposed tools: omit it for all tools, or use[]for none. - After editing a definition, run
/connect <server-name>to load it again. Mirror also loads definitions when it starts. - Tool names use
mcp__<server-name>__<tool-name>.
Extensions
Use/extensions to enable or disable commands, tools, and widgets. Mirror includes bundled features and can load external Python extensions.
See extensions for discovery and trust, bundled features, a working reminder widget, and the extension API.
Launch options
These options apply to the interactive CLI.--model and --api apply to that launch only; /model changes the saved selection. --approval-mode is remembered for later launches. /status and the status bar show the active values.
Local files and diagnostics
- Database paths: The agent and CLI databases must use different paths.
- Conversation state: Keep it when troubleshooting a failed launch. Changing the executable does not reset these files.
- Model requests: They include conversation context, relevant file contents, and tool results.
- Shared diagnostics: Logs can contain sensitive information. Review them and remove API keys or private code before sharing.
Report a bug
- Run
/feedbackto open the GitHub feedback form. - Sign in to GitHub and choose a report type.
- Include your operating system, installed wheel version, reproduction steps, and the error message.
- Review the public issue and remove API keys or private code before submitting it.
/feedback does not attach session data or diagnostics automatically.