Assistant · 2 of 2
Permission rules
What the assistant may run without asking — and what it may never run — is written in one file: ~/.shellden/permissions.json. Settings → Assistant → Open permissions.json opens it; a change applies to the next command, without restarting.
What a rule changes
Read-only commands (
ls, cat, df, systemctl status…) already run by themselves in Auto. Rules are for everything else.A command in
allow runs by itself in Auto, even though it changes something.A command in
deny never runs from the assistant: no Run button, nothing automatic, snippets included — even inside a chain such as cd /tmp && sudo rm -rf build.A rule ending in
* matches every command that starts that way; without * it matches only that exact command. deny always wins.An example
{
"allow": ["git pull", "docker compose restart *"],
"deny": ["rm -rf *", "kubectl delete *"],
"scopes": {
"host:203.0.113.10": { "allow": ["sudo systemctl reload nginx"] },
"k8s:shop-prod": { "deny": ["kubectl scale *"] }
}
}With this file:
git pull and docker compose restart web run by themselves in Auto, on any connection.rm -rf ./build and kubectl delete pod web-1 never run from the assistant.sudo systemctl reload nginx runs by itself only while the active tab is the SSH session to 203.0.113.10; elsewhere it waits for a click.On the
shop-prod cluster, kubectl scale … never runs; on other clusters it waits for a click.Scopes
host:<address> — the Host field of an SSH host (the address shown in the status bar), docker:<container> or k8s:<context>.A scope applies only while its connection's tab is the active one; the top-level
allow and deny apply everywhere.Without editing the file
Always allow… beside a proposed command writes the rule: the first click shows the exact rule and where it applies, the second saves it.