Permissions - Poolside

Documentation Index

Fetch the complete documentation index at: /llms.txt

Use this file to discover all available pages before exploring further.

Use settings.yaml to control what Poolside agents can do when you run pool or pool exec. For a complete reference of supported settings keys, see Settings file reference. You can use settings.yaml to:

These controls help you balance productivity with safety when running agents in your development environment.

Main controls in settings.yaml

Most users interact with three configuration areas. Other supported settings include personal MCP server configuration, secret rules, prompt defaults, and API connection settings. For the full schema, see Settings file reference.

Setting Purpose
tools Turn tools off or define auto-approval rules
paths Restrict which files the agent can read or modify
sandbox Run agents inside an isolated runtime environment

These settings serve different purposes:

tools and paths mainly control approvals and explicit file operations. They do not fully sandbox the agent. If you need an enforced runtime boundary, use a sandbox.

The shell tool

Treat the shell tool as high risk. Shell commands can:

Programs started through shell may read or modify files outside the restrictions defined in paths. If you need strict file access controls, turn off shell or run agents inside a sandbox.

File locations

Poolside reads settings.yaml from three locations.

File location Use this for
.poolside/settings.local.yaml Personal, project-specific.
Do not commit. Takes precedence over all other files.
.poolside/settings.yaml Shared, project-specific.
Commit and share with your team.
~/.config/poolside/settings.yaml Personal defaults (all projects).
Applies when no project-level settings override it.

When the same setting appears in multiple files, the most specific file takes precedence:

  1. .poolside/settings.local.yaml
  2. .poolside/settings.yaml
  3. ~/.config/poolside/settings.yaml

Use ~/.config/poolside/settings.yaml for personal defaults across all projects. Use .poolside/settings.local.yaml for personal, project-specific restrictions. Use .poolside/settings.yaml for shared project defaults. For example settings files for each location, see Settings file reference.

Approvals

Approvals let you automatically allow or deny specific tool calls, which reduces repeated confirmation prompts when you trust certain operations. Rules:

Approvals are a convenience feature, not a security boundary. Use a sandbox for stronger isolation.

Modes

In an interactive pool session, modes give you a quick way to adjust approval behavior without editing settings.yaml:

Mode ID What it does
Always ask default Prompts for approval on first use of each tool type
Accept edits accept-edits Auto-approves workspace file reads and writes, then prompts for everything else
Allow all always-allow Approves tool actions automatically
Plan plan Plans changes without modifying your codebase

Press Shift+Tab to cycle through modes, or use /mode to open the mode selector. deny rules in settings.yaml still apply regardless of mode.

Command-line approvals

In pool, tool calls require approval unless a matching allow rule exists in settings.yaml. To run pool exec without approval prompts, use --unsafe-auto-allow:

pool exec -p "Review this repository" --unsafe-auto-allow

When --unsafe-auto-allow is set:

Use --unsafe-auto-allow only in trusted sandboxed environments.

Tool rules

Use tools to turn tools off or configure approval rules. File access tools such as read and edit are controlled by paths, not tools.

Add tool rules to .poolside/settings.local.yaml for personal, project-specific settings, to .poolside/settings.yaml for shared, project-specific settings, or to ~/.config/poolside/settings.yaml for personal defaults across projects.

Tools example

tools:
  shell:
    disabled: false
    allow:
      - "git log *"
      - "rg *"
    deny:
      - "rm *"
      - "git push *"

How tool rules work:

Path rules

Use paths to control which files agents can access through explicit file tools.

Add path rules to .poolside/settings.local.yaml for personal, project-specific settings, to .poolside/settings.yaml for shared, project-specific settings, or to ~/.config/poolside/settings.yaml for personal defaults across projects.

Paths example for .poolside/settings.local.yaml or ~/.config/poolside/settings.yaml

paths:
  allow:
    - path: ~/Documents/**
    - path: ~/workspace/docs/**
      write: true
  deny:
    - path: ~/.ssh/**
    - path: ~/.env

How path rules work:

Read-only configuration

Read-only paths example for .poolside/settings.yaml

tools:
  shell:
    disabled: true

paths:
  allow:
    - path: src/**
    - path: docs/**
  deny:
    - path: .env
    - path: secrets/**

Read-write configuration

Read-write paths example for .poolside/settings.yaml

tools:
  shell:
    disabled: true

paths:
  allow:
    - path: src/**
      write: true
    - path: docs/**
      write: true
  deny:
    - path: .env
    - path: secrets/**

paths rules apply only to explicit file tools. Programs started through shell may still modify files outside these rules.

Protect sensitive files across projects

To block access to sensitive files in every project, add deny rules to your personal defaults file, ~/.config/poolside/settings.yaml:

Protect sensitive files example for ~/.config/poolside/settings.yaml

paths:
  deny:
    - path: ~/.ssh/**
    - path: ~/.aws/**
    - path: /**/.env

deny rules always override allow.

Local sandbox

A sandbox creates a stronger runtime boundary. Sandbox workspace access supports two modes:

For user-managed local runs, define sandbox settings in your personal default ~/.config/poolside/settings.yaml file.

Sandbox example for ~/.config/poolside/settings.yaml

sandbox:
  image: poolsideengineering/ubuntu-with-tools
  filesystem:
    workspaces:
      access: read-only
  network:
    policy: allow-list
    egress:
      allowed_domains:
        - poolside.ai

Sandbox configuration controls:

Use volume mounts in local sandboxes

Use volume mounts to mount extra host paths into the sandbox. If your development workflow depends on host resources outside the workspace, add extra mounts under sandbox.filesystem.mounts. For example, you can mount a persistent host cache directory, the local Docker socket, and a Docker config directory into the sandbox:

Volume mounts example for ~/.config/poolside/settings.yaml

sandbox:
  image: <image-with-docker-cli>
  filesystem:
    workspaces:
      access: read-write
    mounts:
      - host: <absolute-host-path-to-build-cache>
        sandbox: /cache
        access: read-write
      - host: /var/run/docker.sock
        sandbox: /var/run/docker.sock
        access: read-write
      - host: <absolute-host-path-to-docker-config-dir>
        sandbox: /docker-config
        access: read-only

Use this pattern when you want to reuse build artifacts and config files across sandbox recreation, talk to your local Docker daemon, or read registry credentials from a mounted config directory. Mounting /var/run/docker.sock gives processes inside the sandbox access to your host Docker daemon. Use that mount only when your workflow requires it. Best practices:

Poolside already mounts workspace directories for the sandbox and rejects extra mounts that overlap with those workspace paths.

Use private or local images

For local sandboxes, Poolside uses your local Docker engine to resolve the sandbox image.

Private image example for ~/.config/poolside/settings.yaml

sandbox:
  image: ghcr.io/<org>/<image>:<tag>

Before you use a private image, authenticate Docker on your host for that registry. For example:

docker login ghcr.io