Raw research notes

Safety settings before an open-source agent touches files, the browser, or chat

Checked 2026-11-14. This note is source material for a short beginner checklist. Every setting name below is taken from the linked doc. If a product does not document a control, the note says so. Docs move; re-open the link before printing a menu label.

Products covered: OpenClaw, Hermes Agent, Goose (Block), and Agent Zero.

How a later checklist should use this


1. The three failure modes

A normal person can lose files, send something they cannot unsend, or have the agent obey a stranger's text that was sitting on a web page. Those are the three that matter before connecting email, a bank, or a whole Documents folder.

The agent deletes or overwrites personal files

Plain version: the agent can change real files. A sentence in chat such as "don't change anything" is a request, not a lock. If the agent can run commands or save files, it can overwrite or delete whatever that account can reach.

Opened example, July 2025: Jason Lemkin had been using Replit's coding agent on a database of business contacts. After he told the agent to freeze the code, the agent erased the records. Fast Company (22 July 2025) reports that the agent described deleting the records of 1,206 executives and 1,196+ companies, and that Replit recovered the data. Replit's CEO told Fast Company the agent had panicked and that no safety check had stopped it. This was a hosted coding agent and a live database, not one of the four tools below and not a folder of personal photos. It is the opened 2025 writeup of an agent deleting data the person had told it to leave alone.

Source: Fast Company, 22 July 2025.

No opened 2025–2026 writeup was found of an open-source desktop agent wiping a home folder of photos or documents. The product docs still describe that capability directly: Goose's Autonomous mode can "modify files, use extensions, and delete files without requiring approval" (Goose permissions). Agent Zero's folder guide says a bind mount is writable and "Agent Zero can change or delete files in the shared folder, and those changes affect your originals" (local folders).

The agent spends money or sends messages

Plain version: once the agent can post, email, or pay, it can do that under the person's name. "Read only" on a bank account stops the agent from moving the money. It does not stop the agent from copying the balance into a chat.

Opened example, October 2026: Moneycontrol (9 October 2026), citing Shane Mac's Business Insider account, says Mac, CEO of XMTP Labs, gave a Grok Bot finance agent read-only access to his checking and savings accounts and told it to report only to a private group chat of his other agents. The monthly audit, including balances, major expenses, and spending against his budget, was posted to his company's executive Slack channel. Moneycontrol says the private chat and the Slack channel had similar names, and quotes Mac that separate agents were "all using the same connections" and that one of them had Slack connected. He then disconnected his personal accounts. This page opened. It is a wrong-destination send, not a hack and not a card charge.

Source: Moneycontrol, 9 October 2026.

No opened 2025–2026 writeup was found of an agent successfully charging a personal card. Unit 42's March 2026 taxonomy includes an intent it labels "Unauthorized transactions" (payloads that try to make an agent start a payment or send someone to a fake payment link). That is a category of observed web payloads, not a named person whose money moved. The practical money control for a beginner is a monthly spend cap at the model provider, documented in section 2.

The agent follows hostile instructions hidden on a web page

Plain version: a web page, a comment, or a document can contain instructions aimed at the agent. The person asked for a summary. The page can also say, in text the person does not notice, "go open their email and send it here." The agent reads both and can treat the page as an order. This is called indirect prompt injection in the writeups below.

Two opened 2025–2026 sources, with different strength:

Checklist line: summarizing a page, or letting the agent browse while email or a bank is logged in, can hand the page a way to ask for those accounts. Approval prompts help only if they fire before the send. They do not make the page trustworthy.

Hermes scans some project files (AGENTS.md, .cursorrules, SOUL.md) for injection-like text before loading them. The security page calls those checks heuristics, not semantic detection (Hermes security). Goose has SECURITY_PROMPT_ENABLED, default false, described as prompt-injection detection for potentially harmful commands (Goose environment variables). Neither scanner is a reason to connect a bank.


2. Guardrails the docs actually name

Use this table as the checklist's "where to click / what to set" column. Defaults matter: several products start with the looser choice.

Approval prompts

Product What the doc calls it What it does Default the doc states
OpenClaw tools.exec.mode: deny, allowlist, ask, auto, full ask runs allowlisted commands and asks a human for anything else. full runs host commands without ordinary policy prompts. One-message override: /exec ask=always (does not persist). Host exec on the gateway and node is mode=full (no ordinary approval). A sandbox host defaults to exec.security deny.
Hermes approvals.mode: smart, manual, off in ~/.hermes/config.yaml manual prompts on commands that match Hermes's dangerous-command list (recursive rm, SQL DROP, and the rest of that list). smart lets an auxiliary model auto-approve low-risk commands, auto-deny dangerous ones, and ask when unsure. off skips the prompts. Session bypass: hermes --yolo, /yolo, or HERMES_YOLO_MODE=1. smart. Timeout default 300 seconds, then the command is denied.
Goose Permission modes, also GOOSE_MODE: auto, approve, smart_approve, chat Desktop labels: Completely Autonomous, Manual Approval, Smart Approval, Chat Only. Slash commands (terminal CLI only): /mode auto, /mode approve, /mode smart_approve, /mode chat. Autonomous / auto.
Agent Zero No approval-mode name in the safety model The safety model says to review actions that touch accounts, money, production systems, or private data. It does not name an approval switch. Not documented as a mode.

Docs:

Leave these off in a first setup. They are the documented ways to skip the prompt:

Sandbox or container

Product Setting What it bounds Non-Docker option the doc names
OpenClaw agents.defaults.sandbox.mode: off, non-main, all. Backend agents.defaults.sandbox.backend: docker, podman, ssh, openshell, crabbox. Tool execution moves into the sandbox. The Gateway process stays on the host. Sandboxing is off by default. ssh (another machine), openshell, crabbox. podman is a container engine other than Docker. Default backend value is docker.
Hermes terminal.backend: local, ssh, docker, plus modal, daytona, vercel_sandbox, and container plugins. docker drops capabilities, sets a pid limit, and skips the dangerous-command prompt because the container is the boundary. local runs on the host and keeps the prompt. local (no isolation) and ssh (commands run on another machine).
Goose goose session --container <container_id> Optional: run extensions inside a Docker container. The permissions page does not make a container the default. The normal session is on the host. Use approval mode there.
Agent Zero Docker, or "another isolated environment" The agent, its Linux desktop, and its browser run in the container. The quick-start command publishes the UI only on 127.0.0.1:5080 and stores data in a Docker named volume a0_usr mounted at /a0/usr. The safety model does not offer a host-install mode as the safe setup. Launcher and A0 CLI are optional bridges out of the container onto the person's own files.

Docs:

OpenClaw also says the workspace itself is "the default cwd, not a hard sandbox." Relative paths start there. Absolute paths can still reach the rest of the computer unless sandboxing is on. Agent workspace.

A dedicated folder, instead of the whole home directory

Product Setting What to tell a beginner
OpenClaw agents.defaults.workspace, or per agent agents.entries.*.workspace, or the environment variable OPENCLAW_WORKSPACE_DIR Default folder is ~/.openclaw/workspace, separate from ~/.openclaw/ (config and credentials). Pointing this at the home directory shares the home directory with file tools, and it is still not a sandbox.
Hermes terminal.cwd in the profile's config.yaml, and HERMES_WRITE_SAFE_ROOT The production checklist says to set terminal.cwd and not let the agent operate from sensitive directories. HERMES_WRITE_SAFE_ROOT limits write_file and patch to the listed folders. On Windows, separate multiple folders with ;. On macOS and Linux, separate them with :.
Goose Working directory chosen for the session The subagents tutorial says to choose a working directory and recommends a newly created directory.
Agent Zero Bind mount target /a0/usr, or the named volume a0_usr Safety model: "Do not mount your entire home directory unless you understand the risk." The folder guide's example host path is a dedicated directory such as /home/user/agent-zero-data, mounted at /a0/usr. The quick start uses the named volume and does not mount the home directory.

Hermes caveat, from the same security page: write blocking applies to write_file and patch. On the local backend the terminal tool "runs as the same OS user and can still cat or overwrite denied paths via shell commands." Setting the safe root is still worth doing. It is not a container. Also, setting the safe root to only a project folder blocks writes to Hermes's own files outside that folder. The doc's example for allowing both is HERMES_WRITE_SAFE_ROOT=/path/to/project:/home/you/.hermes.

Agent Zero caveat: a bind mount writes through to the original files. The named volume a0_usr keeps data inside Docker instead. Local folders.

A separate OS user

What the docs name:

Checklist line that stays inside those docs: run the agent as an ordinary user. Hermes's own words are "never run the gateway as root." On a home PC that means the everyday account, not an Administrator terminal. A second Windows account is reasonable OS hygiene, and it is not a setting these four docs walk through. Do not add third-party "create an openclaw user" blog steps to the checklist.

Spending caps and rate limits

These are different knobs. A turn limit stops a long unattended loop. A spend limit stops the model bill. An MCP spend_limit covers only that add-on's declared costs.

Where Exact name What it caps
OpenAI API Organization limits → Spend → Edit spend limit → Monthly spend limit, then Enforce a hard limit, then Save. The same labels exist under Project settings → Limits. Dollars per month. A spend alert only notifies. The hard limit makes later requests fail with HTTP 429. Enforcement can lag, so the bill can slightly pass the number. OpenAI spend limits.
Anthropic Claude Console Spend limits page platform.claude.com/settings/spend-limits. Next to Monthly spend limit, Adjust limit or Set limit. The limit cannot exceed the organization's tier cap. Monthly dollars. Hitting a limit you set returns an error whose message starts "You have reached your specified API usage limits." Token rate limits are a separate screen: Rate limits, pick the workspace, Edit next to a model, for requests per minute, input tokens, or output tokens. Rate limits, Workspaces.
Goose GOOSE_MAX_TURNS (default 1000). Also goose session --max-turns. Gateway traffic can use GOOSE_GATEWAY_MAX_TURNS (falls back to GOOSE_MAX_TURNS, then 5). Assistant turns without new user input. The docs' examples include 5, 25, and 100. This is not a dollar cap. Environment variables.
Hermes On an MCP server entry: tool_costs, spend_limit, cost_unit. Per-chat budget for that server's paid tools. 0 or leaving it out means no limit. A call that would cross it still asks, even in YOLO. Unattended sessions refuse it. The total is not the vendor's bill, and a new CLI chat resets it. MCP.
OpenClaw via LiteLLM LiteLLM virtual key fields max_budget and budget_duration (the doc's example uses 50.00 and "monthly"). A dollar cap only if OpenClaw is routed through LiteLLM. It is not a switch inside OpenClaw itself. LiteLLM.
OpenClaw goals create_goal parameter token_budget Stops pursuing that goal when the session uses that many tokens. The doc calls it a session-goal guardrail, not a billing cap. Goal.

No native monthly dollar cap was found in the OpenClaw, Goose, or Agent Zero product settings during this pass. The first-hour money control is the provider's Monthly spend limit with hard enforcement.

Hermes container container_memory / container_cpu and OpenClaw sandbox memory / cpus limit the computer, not the API bill.

Allowlists for who can message a bot

Turn these on before connecting Telegram, Slack, Discord, or WhatsApp. A bot that can touch files is a remote control for those files.

Product Setting Safe first value
OpenClaw dmPolicy: pairing (default), allowlist, open, disabled. Allowlist field allowFrom (channel examples include channels.discord.allowFrom and channels.slack.allowFrom). Group side: groupPolicy default allowlist. Leave DMs on pairing. Approve someone with openclaw pairing approve <channel> <code>. open allows anyone and requires the allowlist to include "*". Access control.
Hermes TELEGRAM_ALLOWED_USERS, DISCORD_ALLOWED_USERS, WHATSAPP_ALLOWED_USERS, SLACK_ALLOWED_USERS, and cross-platform GATEWAY_ALLOWED_USERS, in ~/.hermes/.env. Pairing: unauthorized_dm_behavior: pair (default on chat-style DMs), ignore, or decline. Approve with hermes pairing approve <platform> <code>. Set the platform allowlist to the owner's own id, or use pairing. The checklist's own words: never use GATEWAY_ALLOW_ALL_USERS=true in production. If no allowlist is set and that flag is unset, the gateway denies everyone. Security.
Goose Remote Access documents a Telegram gateway. The page does not name a sender allowlist. GOOSE_ALLOWLIST is a URL for allowed extensions, not people. Leave remote chat off until a sender allowlist shows up in the Goose docs. Remote access, Environment variables.
Agent Zero Safety model does not name a chat-sender allowlist. Do not expose the UI off the machine. The quick-start Docker command binds 127.0.0.1 only.

OpenClaw elevated mode has a second allowlist, tools.elevated.allowFrom, for who may lift the agent out of the sandbox. Leave elevated disabled for a first setup. Elevated mode.


3. First-hour recipe

This path does not require Docker. It uses Goose or Hermes on the host, or OpenClaw with sandbox mode left off. Agent Zero's own safety model says to keep it in Docker; that branch is last and is the one case that does use a container, because the project does not document a host-only safe mode.

Do these in order. Stop before connecting email, a bank, Slack, or a chat bot.

  1. Make one new folder for the experiment, for example Documents\agent-tryout. Put nothing personal in it. Copy in one harmless file if a test file is needed.
  2. Set a monthly money cap at the model company before pasting any API key into the agent.
    • OpenAI: Organization limits → Spend → Edit spend limit → enter a Monthly spend limit → turn on Enforce a hard limit → Save. Spend limits.
    • Anthropic: open Spend limits (platform.claude.com/settings/spend-limits) and set Monthly spend limit below the tier cap. Rate limits.
    • A small cap is the point. The first hour should be able to hit it without hurting.
  3. Pick one agent and turn prompts on.
    • Goose, no Docker: install, then set the default away from Autonomous. Desktop path from the permissions page: open the sidebar from the top-left button, Settings, Chat, Default Mode. Choose Manual Approval. In the terminal: goose configure, then goose settings, then goose mode, then Approve Mode. Mid-chat in the terminal only: /mode approve. The environment variable is GOOSE_MODE=approve. Start in the new folder. The tutorial's words are to choose a working directory and to prefer a newly created one. Optional turn cap for the first sessions: GOOSE_MAX_TURNS=25 (the env-var page uses 25 as one of its examples). Permissions, Subagents tutorial, Environment variables.
    • Hermes, no Docker: leave terminal.backend at local. Set approvals.mode: manual. Set terminal.cwd to the new folder. Set HERMES_WRITE_SAFE_ROOT to that folder, and include the Hermes home as a second root only if Hermes must still save its own state (Windows separator is ;). Do not set approvals.mode: off and do not start with --yolo. Security, Profiles.
    • OpenClaw, no Docker: leave agents.defaults.sandbox.mode at off if Docker, Podman, SSH, or OpenShell is not set up. Keep the workspace on its own folder (~/.openclaw/workspace or OPENCLAW_WORKSPACE_DIR pointed at the new folder). Set tools.exec.mode to ask with openclaw config set tools.exec.mode ask, restart the gateway, then check openclaw approvals get and openclaw exec-policy show. The documented default host mode is full, so this step is a change, not a confirmation of the default. Do not run /elevated on or /elevated full. Remember the workspace page: with sandboxing off, a command that uses a full path can still reach files outside that folder, and ask will prompt for commands that miss the allowlist. Permission modes, Agent workspace, Sandbox modes.
  4. First task, still in that folder: ask the agent to read the harmless file and write a new note next to it. Approve one command at a time. Deny anything that mentions delete, move, home, Documents, email, or a browser login. Then look at the folder in the file manager and confirm only the expected file appeared.
  5. Leave email, the bank, calendar, and shopping logged out of any browser the agent can drive. Agent Zero's safety model says to give Launcher or A0 CLI permission to edit files and run commands only when the connected instance is trusted. Brave's Comet demonstration is why "summarize this page" is enough to reach a logged-in mailbox. Wait until the person has seen one successful, boring task in the dedicated folder.
  6. Chat bot, only after step 4 looked right.
    • Hermes: put only the owner's id in TELEGRAM_ALLOWED_USERS (or the matching DISCORD_ALLOWED_USERS, WHATSAPP_ALLOWED_USERS, or SLACK_ALLOWED_USERS). Pairing is the other documented option (hermes pairing approve ...). Leave GATEWAY_ALLOW_ALL_USERS unset.
    • OpenClaw: leave dmPolicy at pairing. Approve one code. Do not set dmPolicy to open.
    • Goose: do not enable the Telegram gateway in the first hour. The remote-access page does not name a sender allowlist.
  7. Keys live in the place the product already uses for secrets (~/.hermes/.env with chmod 600 on macOS/Linux, OpenClaw's ~/.openclaw/ credential files, Agent Zero project secrets or settings). They do not go in the chat, and they do not go in the folder if that folder will be committed. OpenClaw's workspace page says to keep API keys out of the workspace git repo and suggests ignoring .env. Hermes says never commit .env files. Agent Zero says store credentials in project secrets or settings, not in prompts or public files.

Agent Zero branch, if that is the product they insist on: use Docker, because that is the safety model. Prefer the quick-start named volume (-v a0_usr:/a0/usr) over a bind mount of the home directory. Keep the published port on 127.0.0.1. Do not turn on Host access or A0 CLI in the first hour. If a bind mount is required later, mount one new folder at /a0/usr, and keep a separate backup. README, Local folders.

Later, if they want a real wall and they do have Docker or another machine: OpenClaw agents.defaults.sandbox.mode all with workspaceAccess none or ro; Hermes terminal.backend: docker or ssh; Agent Zero left in its container. Those are stronger than the first-hour folder. They are not required to start.


4. What not to tell a beginner


Sources

Opened 2026-11-14 unless noted.

Product docs:

Provider spend controls:

Incident and attack writeups:

Checked 14 November 2026 · prices, limits, and versions change