Approval modes
The default mode is Manual.
Slash-command aliases are:
/always-confirm,/always-ask, or/strict;/manual-confirm;/auto-confirm,/auto-approve, or/approve.
Respond to a confirmation
An inline confirmation shows the tool, affected paths, and an external or destructive warning when applicable.- Allow once runs this call.
- Allow always grants matching calls in the same permission category for the rest of the session.
- Reject cancels the request. Rejecting one request also rejects other pending confirmations in that session.
Y, A, and N. Some confirmations intentionally omit Allow always.
Session grants are not persistent allowlist entries. Use /approvals when you want a command rule to survive a new session.
What Manual allows
Manual mode permits ordinary read tools without a generic confirmation. For shell commands, it evaluates:- hard policy blocks, such as protected Git metadata and
.embedderignore; - whether a referenced path leaves the project;
- your persistent deny and allow rules;
- the built-in read-only command rules.
- directory navigation and file listing;
- file, object-file, host, process, and device inspection;
- environment and tool-location queries;
- text search and formatting;
- read-only version-control, package, container, and cluster queries;
- build-tool help and dry runs;
- compiler, flasher, and debug-probe information queries that do not program or erase a target.
/approvals to search the exact built-in entries and test a command. The tester reports whether the command runs or asks, why, and any paths detected outside the project.
Turning off the built-in list makes every shell command ask in Manual mode. It does not make ordinary file reads ask. Use Always ask for that behavior.
Persistent rules
Embedder reads two files:
If
EMBEDDER_APP_DIR is set, the global file is stored in that directory instead of ~/.embedder.
A global file can contain:
Command rules
autoApprove adds commands that may run without a prompt in Manual mode. A rule matches the command and any positional prefix you include:
westmatcheswest buildandwest flash;west buildmatcheswest build -p always;west builddoes not matchwest flash;- a bare program name also matches an absolute system path to that program, but not a repository-local path such as
./west.
;, &, |, backticks, $, redirection operators, or line breaks.
neverAutoApprove has priority over your grants and the built-in list. Use it to make a built-in command ask. For example, denying env prevents an unattended environment dump.
Paths outside the project
Shell commands that name a path outside the project ask even when the command itself is allowlisted. Add a specific directory toallowOutsideProject when a trusted toolchain or SDK lives elsewhere.
Entries must be absolute paths. Embedder rejects the filesystem root and your entire home directory because either value would disable the boundary rather than scope it.
Allowing an external path removes only the path boundary. The command must still match a built-in or personal command rule.
Project policy can only narrow
The project file is shared with the repository, so it cannot silently grant execution on a cloned project. A project policy can:- add
neverAutoApproveentries; - set
useBuiltinSafeCommandstofalse; - request an
autoApprovecommand or outside-project path for you to review.
/approvals as not granted. Select Add to mine to copy an exact request into your global file.
During policy resolution:
- either layer can turn the built-in list off;
- global and project deny rules are combined;
- only global command grants and outside-project paths take effect.

