Documentation Index
Fetch the complete documentation index at: https://docs.agentscope.io/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The permission system intercepts every tool call an agent makes and produces one of three decisions: allow the tool to execute, deny it, or ask the user for confirmation. Age system combines static configuration with dynamic runtime analysis. Three components drive the decision together:- Rules — explicit allow/deny/ask patterns per tool and command, evaluated with highest priority. Rules have two sources: statically pre-configured in
PermissionContext, or dynamically added when the user accepts a suggested rule during an ASK prompt. Suggestions are auto-generated from the current tool call, so accepting one means future identical calls are handled automatically without prompting again. - Mode — a static global policy set at configuration time; determines default behavior for all calls that match no rules (e.g.,
EXPLOREmakes the agent read-only;DONT_ASKsilently denies unmatched calls). - Built-in checks — dynamic runtime analysis performed by the tools themselves against actual call inputs: read-only command detection (parsing the bash command at call time) and dangerous path protection (checking the real file path or command target). Because these are runtime checks rather than pre-configured patterns, they are bypass-immune and cannot be overridden by mode or rules.
Detailed decision flow
Detailed decision flow
Deny rules and dangerous path checks are bypass-immune — they apply even in
BYPASS mode.Permission Mode
AgentScope supports the following modes, each suited to a different deployment scenario.| Mode | Behavior | Use Case |
|---|---|---|
DEFAULT | All ops require explicit rules or user confirmation | Most secure, recommended default |
ACCEPT_EDITS | Auto-allow file ops in working directories | Active development with user present |
EXPLORE | Read-only: allow reads, deny all writes and commands | Code exploration, planning |
BYPASS | Allow everything (deny/ask rules still apply) | Fully trusted sandbox |
DONT_ASK | Convert all ASK → DENY | Unattended / scheduled execution |
AgentState.permission_context when creating the agent, or update it at runtime.
Permission Rules
APermissionRule maps a specific tool and call pattern to one of three behaviors: ALLOW, DENY, or ASK.
Each rule consists of the following fields. When the permission engine evaluates a rule, it calls the tool’s match_rule() method with rule_content and the actual call input to determine whether the rule applies.
Tool this rule applies to:
"Bash", "Read", "Write", "Edit", or any custom tool name.Match pattern — semantics depend on
tool_name:- Bash: wildcard prefix pattern (
npm run:*matchesnpm run build,npm run test) - Read / Write / Edit: glob pattern (
src/**/*.pymatches any.pyundersrc/) - Other tools: exact JSON-serialized parameter match
ALLOW, DENY, or ASKOrigin of the rule:
"userSettings", "projectSettings", "session", etc.Pattern Examples
rule_content is consumed by each tool’s match_rule() method and auto-generated by ToolBase.generate_suggestions(). Because both methods are part of the tool interface, each tool can define its own pattern syntax and matching logic independently.
For AgentScope’s built-in tools, the patterns are as follows:
- Bash
- File Tools (Read / Write / Edit)
Matches against the
command parameter. Pattern format is COMMAND_PREFIX:* — the prefix is the leading token of the command, and * matches any arguments that follow.| Pattern | Matches | Does Not Match |
|---|---|---|
npm run:* | npm run build, npm run test | npm install |
git commit:* | git commit -m "fix" | git push |
rm:* | rm file.txt, rm -rf /tmp/x | ls |
Configuring Rules
At initialization — pass rules intoPermissionContext when creating the agent:
UserConfirmResultEvent.rules; the agent adds them to the engine automatically:
Built-in Checks
Each tool implements acheck_permissions() method that runs against the actual call inputs at runtime. These checks are bypass-immune — they apply regardless of mode or rules. AgentScope’s built-in tools cover three areas:
- Dangerous path protection —
Write,Edit, andBashcheck whether the target file or command touches sensitive paths. Always triggers ASK, even inBYPASSmode. - Read-only command detection —
Bashparses the command string to detect read-only operations and auto-allows them. - ACCEPT_EDITS mode —
WriteandEditauto-allow operations on files within configured working directories.
check_permissions():
Read-Only Commands
Common read-only bash commands are auto-allowed without any rules. A compound command (&&, ||, ;, |) is read-only only if all subcommands are read-only. Output redirections (>, >>) always make a command non-read-only.
Full read-only command list
Full read-only command list
| Category | Commands |
|---|---|
| Git | git status, git log, git diff, git show, git branch, git blame, git grep, git reflog, git config --list |
| Files | ls, cat, head, tail, grep, rg, find, tree, stat, wc, pwd, which |
| Docker | docker ps, docker images, docker logs, docker inspect, docker info |
| GitHub CLI | gh repo view, gh issue list, gh pr list, gh status |
| Package managers | npm list, pip list, pip show, node --version, python --version |
Dangerous Path Protection
| Category | Paths |
|---|---|
| Shell configs | .bashrc, .zshrc, .bash_profile, .profile |
| Git configs | .gitconfig, .gitmodules |
| SSH | .ssh/config, .ssh/authorized_keys, id_rsa, id_ed25519 |
| Credentials | .env, .env.local, .npmrc, .pypirc, .aws/credentials |
| Directories | .git/, .ssh/, .claude/, .vscode/, .aws/, .kube/ |
Common Recipes
The following examples show how to configureAgentState.permission_context for common deployment scenarios. Each recipe combines a mode with rules to match a specific use case.