Manage permissions
Permissions control what an agent is allowed to do inside its sandbox: read files, run bash commands, make web requests, and more. You set permissions at the project level and can override them per agent version.
How permissions work
A permission config is either a single action ("allow", "deny", "ask") or an object with granular keys. Agent-level permissions override project-level permissions. An explicit deny always wins over allow.
The available permission keys are:
| Key | Controls |
|---|---|
read | Read files in the sandbox |
edit | Write or modify files |
glob | Search files by pattern |
grep | Search file contents |
list | List directory contents |
bash | Run shell commands |
task | Create and manage sub-tasks |
external_directory | Access directories outside the project |
todowrite | Write to the todo list |
question | Ask clarifying questions |
webfetch | Fetch external URLs |
websearch | Search the web |
codesearch | Search code with semantic search |
lsp | Use language server features |
doom_loop | Allow the agent to loop without intervention |
skill | Load and execute skills |
See Permissions for the full concept.
In the UI
In the UI
-
Open a project and go to Settings → Permissions.
-
Set the default policy for each capability: Allow, Deny, or Ask.
-
To override for a specific agent, open the agent’s version settings and adjust the permissions there.
-
Click Save.
Programmatically
Set project-level permissions
ren projects update prj_def456 \ --permission '{"read": "allow", "edit": "allow", "bash": "ask"}'Set agent-version-level permissions
ren agents versions create agt_abc123 \ --permission '{"bash": "deny", "webfetch": "deny"}'Set project-level permissions
curl -X PATCH "https://api.renai.build/api/projects/prj_def456" \ -H "Authorization: Bearer $REN_PAT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "permission": { "read": "allow", "edit": "allow", "bash": "ask" } }'Set agent-version-level permissions
curl -X POST "https://api.renai.build/api/agents/agt_abc123/versions" \ -H "Authorization: Bearer $REN_PAT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "permission": { "bash": "deny", "webfetch": "deny" } }'import { createRenClient, pat } from "@renai-labs/sdk"
const client = createRenClient({baseUrl: "https://api.renai.build",auth: pat(process.env.REN_PAT_TOKEN!),})
// Set project-level permissionsawait client.project.update({path: { id: "prj_def456" },body: { permission: { read: "allow", edit: "allow", bash: "ask" } },})
// Override on a new agent versionawait client.agent.version.create({path: { id: "agt_abc123" },body: { version: "minor", permission: { bash: "deny", webfetch: "deny" } },})