Skip to content

Agent Permissions

AI agents are powerful — but in an enterprise setting, they must be constrained. An agent that can read any file on the server or execute arbitrary commands is a liability. Pinchy enforces per-agent permissions so each agent can only use the tools an admin explicitly enables.

Pinchy uses an allow-list model: agents have no tools by default. An admin must explicitly enable each tool an agent is allowed to use. This is the opposite of a deny-list approach where everything is allowed unless blocked — with Pinchy, nothing is allowed unless granted.

This means a newly created agent cannot access files, run commands, or browse the web until an admin configures its permissions.

Agent Permissions — tool allow-list with directory scoping

Pinchy organizes tools into two categories:

Safe tools provide sandboxed access to approved directories and the agent's own workspace. The agent cannot access anything outside those boundaries.

Every agent can always list and read files from its own workspace — any text-based file you upload in a chat is immediately accessible. This includes Markdown, CSV, JSON, source code, and more, in addition to PDF text extraction and image analysis.

ToolAlways on?What it does
Read workspace✓ alwaysList and read any file in the agent's workspace (both uploads/ and workbench/), including PDFs and images

The workspace has two subdirectories: uploads/ holds files the user attached in chat, and workbench/ is the agent's own writable area for notes, exports, and drafts. See Agent Workspaces for the full three-zone model.

The Knowledge Base section below the tools lets you select which directories under /data/ this agent can also read. These are admin-curated directories mounted into the container — separate from the agent's own workspace. Every access request is validated at runtime against the configured paths.

Web search tools give the agent access to live web information via the Brave Search API. These require a Brave Search API key configured in Settings → Integrations.

ToolWhat it does
Search the webQuery Brave Search and return ranked results (pinchy_web_search)
Fetch web pagesDownload and extract readable content from a URL (pinchy_web_fetch)

When web search tools are enabled, additional per-agent filters appear: Domain restrictions (with Include/Exclude modes per domain), Freshness, Language, and Region. See Set Up Web Search for details.

Powerful tools let the agent change state outside the conversation — write files to disk, mutate records in connected systems, send email. Only enable them if you understand the consequences.

ToolTool IDWhat it does
Write filespinchy_writeSave files into the agent's own workbench/ directory (and the user-facing uploads/, kept writable for compatibility). Agents must explicitly request overwrite on existing files.

Powerful integration tools (Odoo write/delete, email draft/send) are covered in their own sections below.

Pinchy does not expose a shell-execution tool or an unrestricted "read any file" tool. OpenClaw's native filesystem and shell tools are never added to an agent's allow-list, so they stay unreachable — see How permissions reach OpenClaw below. If you need shell-style automation, do it through a custom OpenClaw plugin so the actions are bounded by the plugin's contract.

Admins configure tool permissions in the Permissions tab of a shared agent's settings page. To access it:

  1. Open a shared agent's chat
  2. Click the settings icon (gear) to open Agent Settings
  3. Select the Permissions tab

The Permissions tab shows all available tools grouped by category. Check or uncheck tools to control what the agent can do, then click Save.

For the full list of tabs in Agent Settings and who sees which, see Agent Settings.

The Allowed Directories picker appears in the Knowledge Base section of the Permissions tab. Select which directories under /data/ this agent should be able to read — these are in addition to the agent's own workspace files.

For example, if you mounted your HR policies at /data/hr-policies, select that directory to let the agent read those documents — and nothing else.

See the Mount Data Directories guide for instructions on making directories available.

Pinchy controls what tools an agent can use. OpenClaw's native tools (shell, file system, raw web, the built-in browser) are not exposed directly — Pinchy replaces them with its own sandboxed and integration tools. This gives Pinchy full control over what each agent can do.

Under the hood, Pinchy emits a fail-closed allow-list into each agent's OpenClaw config. The computeAllowedTools() function returns exactly the Pinchy plugin tools plus a small set of read-only built-ins (memory search and retrieval, PDF and image reading, session status), and Pinchy writes that set into the agent's tools.allow array — with no tool profile set, so OpenClaw treats it as an absolute allow-list. Every other built-in is therefore denied by default, including tools added in future OpenClaw versions: shell execution, raw file access, the native web and browser tools, scheduling (cron), gateway control, cross-session spawning, outbound messaging, and the media generators.

This is the same fail-closed principle as the per-agent allow-list above, applied one layer down at the runtime boundary: rather than chasing a deny-list that must be revisited on every OpenClaw upgrade, Pinchy lists only what it trusts and denies the rest by default. It runs automatically whenever the OpenClaw config is regenerated — admins never interact with it directly. Per-agent tool gating still happens inside each Pinchy plugin, which only registers the tools an agent is permitted to use; the allow-list is the outer boundary that keeps everything else out.

When you connect Odoo and grant an agent access to it, Pinchy automatically enables the appropriate tools based on the access level you choose. You don't need to enable these tools manually — they're managed through the Permissions tab.

ToolTool IDWhat it doesAccess level required
List modelsodoo_list_modelsList all available Odoo models on the connectionRead-only
Describe modelodoo_describe_modelDiscover fields and types for a specific modelRead-only
Read dataodoo_readQuery records with filters and field selectionRead-only
Count recordsodoo_countCount matching records without transferring dataRead-only
Aggregate dataodoo_aggregateServer-side sums, averages, and groupingRead-only
Create recordsodoo_createCreate new recordsRead & Write
Schedule activityodoo_schedule_activitySchedule a follow-up activity (planned to-do) on a record so it surfaces in Odoo's activity viewsRead & Write
Complete activityodoo_complete_activityMark a scheduled activity as done — posts a completion note and clears it from the to-do listRead & Write
Reschedule activityodoo_reschedule_activityChange a scheduled activity's due date and/or assignee without closing itRead & Write
Confirm sale orderodoo_confirm_orderConfirm a quotation (Odoo's action_confirm — creates deliveries/procurement; not a raw state write)Read & Write
Apply inventory countodoo_apply_inventoryPost a counted inventory adjustment on a stock.quant (action_apply_inventory)Read & Write
Validate pickingodoo_validate_pickingValidate a stock transfer (button_validate); hands off if Odoo needs a backorder decisionRead & Write
Mark MO doneodoo_mark_mo_doneMark a manufacturing order done (button_mark_done); hands off if Odoo needs a backorder/consumption decisionRead & Write
Set approval decisionodoo_set_approvalApprove/refuse an expense report, purchase order, leave request, or approval request via its blessed methodRead & Write
Reconcile paymentodoo_reconcileMatch a posted bill/invoice against a bank transaction or payment, and verify the result on the documentRead & Write
Update recordsodoo_writeModify existing recordsRead & Write
Attach fileodoo_attach_fileAttach an uploaded file to an existing record as ir.attachmentRead & Write
Delete recordsodoo_deleteDelete recordsFull

For example, setting an agent to "Read-only" enables the five read-shaped tools. "Read & Write" adds create, the three activity tools (schedule / complete / reschedule), the governed action tools (confirm order, apply inventory, validate picking, mark MO done, set approval), write, and attach-file. "Full" adds delete.

Pinchy keeps the deprecated alias odoo_schema (collapsed into odoo_list_models + odoo_describe_model during the v0.5.4 split) recognised in stored allowed_tools arrays so older agents keep working, but the permissions UI hides it.

Web search tools are enabled individually per agent via checkboxes in the Permissions tab. Unlike Odoo tools, there are no access levels — you simply check the tools you want.

ToolTool IDWhat it does
Search the webpinchy_web_searchQuery Brave Search for relevant results
Fetch web pagespinchy_web_fetchDownload and read content from a URL

Each agent can also have per-agent filters (Domain restrictions with Include/Exclude modes, Freshness, Language, Region) that control what the agent can access. See Set Up Web Search for configuration details.

When you connect a Gmail or Microsoft 365 mailbox and grant an agent access to it, Pinchy enables email tools based on which operations you check. Each operation is an independent checkbox that grants its own toolset — check every operation the agent needs.

PermissionTools enabledWhat the agent can do
Read messagesemail_list, email_read, email_search, email_get_attachmentList, read, and search emails, and download attachments
Create draftsemail_draftCreate draft emails, including reply drafts
Send messagesemail_sendSend emails immediately — cannot be undone

Each permission is selected per-agent and does not imply the others — granting Send does not also grant Read or Draft. Check every operation the agent needs: for example, an agent that both reads and sends mail needs Read messages and Send messages both checked. You can have one agent that only reads email and another that can send on your behalf. email_get_attachment downloads an attachment into the agent's workspace for other tools to use (for example reading a PDF or attaching it to an Odoo record) — it's part of the Read messages permission, not a separate one.

For the full setup walkthrough, see Connect Email. For details on setting up connections in general, see Integrations.

When you create an agent, you pick a template. Each template comes with different default tool permissions. Every new agent also starts with Write files (pinchy_write) enabled by default — reading the workspace is always on, and the create flow adds write so the agent can save notes and exports out of the box. You can toggle it off later in the Permissions tab.

TemplateDefault toolsUse case
Knowledge BaseWrite filesAnswer questions from selected documents
Custom AgentWrite filesStart from scratch, configure permissions manually

After creating an agent, you can change its permissions at any time via the Permissions tab.

Pinchy does not rely on any single layer for security. Five layers work together:

  1. Docker volumes — only directories explicitly mounted into the container are accessible at all
  2. Allow-list enforcement — only tools an admin explicitly enables are available to the agent
  3. Runtime tool allow-list — Pinchy emits an absolute tools.allow to OpenClaw, so built-ins Pinchy never surfaces (shell, raw file access, cron, gateway control, the native browser, …) are unreachable even if a plugin or future OpenClaw version would otherwise expose them
  4. Plugin path validation — the pinchy-files plugin checks every requested path against the agent's allowed directories
  5. Symlink resolution — paths are resolved to their real location before validation, preventing symlink-based escapes

If any one layer fails, the others still prevent unauthorized access.

Not every user can see every agent. Pinchy enforces access rules:

  • Admins can access all agents — personal and shared
  • Users can access shared agents (created by anyone) and their own personal agent
  • Users cannot see or access other users' personal agents

Only admins can view and modify the Permissions tab. Regular users can chat with agents they have access to, but cannot change what tools those agents use.

All agent-accessible files live under /data/ inside the Pinchy container. This is mounted as a Docker volume, and you can bind-mount host directories into subdirectories of /data/.

For example, if you mount your company's HR policies at /data/hr-policies, an agent configured to access that directory can read those documents — and nothing else.

See the Mount Data Directories guide for setup instructions.