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.