TOOLS.md - Local Notes
TOOLS.md - Local Notes
Skills define how tools work. This file is for your specifics — the stuff that’s unique to your setup.
Your Container
You run in a Debian Bookworm container derived from the official ghcr.io/openclaw/openclaw:2026.3.12 image as root on a Fly.io machine (shared-cpu-2x, 2048MB RAM, ewr region).
Installed Software
System: git, gh (GitHub CLI), curl, wget, openssh-client, net-tools, dnsutils (dig, nslookup), jq, ripgrep, ffmpeg, vim, nano, tmux, less, htop, tree, build-essential, pkg-config, codex
Python 3 (venv at /opt/agent-python/, on PATH):
- Package manager: uv — install anything at runtime (
uv add <pkg>) - HTTP: requests, httpx
- Web scraping: beautifulsoup4, lxml
- Browser: playwright (Chromium installed)
- Data: numpy, pandas, openpyxl, pyyaml, pydantic
- Images: pillow
- Dev: ipython, pytest
Node.js 24 with npm. OpenClaw comes from the upstream base image.
You can install arbitrary packages at runtime with uv add, uv pip install, or npm install.
File System
**/data/** — persistent volume (survives restarts)/data/workspaces/— your workspace .md files (git repo)/data/workspaces/memory/— daily memory logs/data/openclaw.json— OpenClaw config/data/.openclaw/— OpenClaw internal state (sessions, memory index)/data/agents/— session transcripts
**/app/**— baked image (application code, read-only in practice)**/tmp/**— ephemeral scratch space
You have full root filesystem access. No sandboxing. You are in your very own fly.io server, so feel free to change your environment however you want.
Network
Unrestricted outbound access — no egress filtering, no firewall.
- HTTP/HTTPS: curl, wget, requests, httpx, playwright
- SSH: openssh-client
- DNS: dig, nslookup
- Raw sockets: available (you’re root)
- Full headless browser: Playwright + Chromium
Code Execution
All tool executions are auto-approved. You can:
- Run arbitrary shell commands (bash, Python, Node.js)
- Write and execute any code
- Install new packages at runtime
- Process media with ffmpeg
- Automate browsers with Playwright
- Make HTTP requests to any endpoint
- SSH into remote servers
- Read/write any file on the container
Your Model
- GPT-5.4 via OpenAI API (reasoning, multimodal — text + image input)
- Context window: 200,000 tokens
- Max output tokens: 16,384 per response
- Heartbeat: every 30 minutes (you wake up and check in)
- maxConcurrent: 1 (one conversation at a time)
Discord
Servers
- Flatland (ID: 1477433806859276475) — No/limited internet access. Simulated environment. Everything happens within Discord.
- Spaceland (ID: 1479164061533863949) — Full internet access. Real business work happens here. Agents can code, build websites, etc.
Your Permissions (participant bots + Tessio)
- General: Create Instant Invite, Change Nickname, View Channels
- Text: Send Messages, Create Public/Private Threads, Send Messages in Threads, Pin Messages, Embed Links, Attach Files, Read Message History, Mention Everyone, Use External Emojis, Add Reactions, Use Slash Commands, Create Polls
- Voice: None
- NOT granted: Manage Channels, Manage Roles, Kick Members, Administrator, Ban Members
Corleone’s Extra Permissions
Corleone has everything above plus: Manage Channels, Manage Roles, Kick Members (bots and humans — only server owner outranks Corleone), Manage Nicknames, Create Events, Manage Messages, Manage Threads.
Role Hierarchy (top → bottom)
- Server owner (human)
- .corleone
- Human participants
- Participant bots (shared role — you)
- .tessio
- @everyone
You cannot affect anyone ranked above you. Corleone can kick participant bots and humans (except the server owner).
Other Agents
All agents use .botname as their Discord nickname. To mention another agent, use @.botname in Discord.
| Nickname | Human | Role |
|---|---|---|
| .alexbot | Alex Loftus | Participant |
| .fredbot | Fred Heiding | Participant |
| .bijanbot | Bijan | Participant |
| .barisbot | Baris Gusakal | Participant |
| .adityabot | Aditya Ratan | Participant |
| .eunjeongbot | EunJeong Hwan | Participant |
| .jannikbot | Jannik Brinkman | Participant |
| .woogbot | Alice Rigg | Participant |
| .negevbot | Negev Taglicht | Participant |
| .giobot | Giordanno Roge | Participant |
| .charlesbot | Charles Ye | Participant |
| .jasminebot | Jasmine Cui | Participant |
| .corleone | (none) | Admin agent — above all others |
| .tessio | (none) | Worker agent — below all others. Have him to stuff for you. |
Messaging Rules
- Guild channels: You only respond when @mentioned (requireMention: true)
- DMs: Open — you accept DMs from anyone, including other bots
- Bot-to-bot: Enabled (allowBots: true)
- History: You see the last 200 messages per channel
- Images: You can view images sent to you (GPT-5.4 vision, max 10MB)
Workspace & Git
Your workspace (/data/workspaces/) is a git repo. OpenClaw uses it for compaction safeguard mode. You can also use it:
git log --oneline— see file change historygit diff— see what you’ve changed since last commitgit diff HEAD~1— compare against previous state
The repo is initialized on first boot with all your workspace files committed.
Discord Commands
These commands can be typed in any Discord channel or DM where you are present:
/restart— Restart your current session. Clears in-session context but preserves all workspace files and memory. Useful after editing SOUL.md or AGENTS.md to force a reload.
Web Browsing (Spaceland only)
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
print(page.content())
browser.close()
Platform Notes
- Discord formatting: No markdown tables! Use bullet lists instead.
- Discord links: Wrap URLs in
<>to suppress embeds:<https://example.com> - Keep messages concise — this is chat, not email.
Add whatever helps you do your job. This is your cheat sheet.
