# Tune WordPress cache settings with NanoClaw

> Tuning cache settings with NanoClaw means messaging your own self-hosted agent from a chat app to read or change xSpeed settings on your WordPress sites through xSpeed Hub, including one change across every site.

Page: https://xspeedcache.com/agent/nanoclaw/cache-settings/
Last updated: October 2026

You switched page caching off on every site while a theme update rolled out, and the work is done. You are away from your desk, so you open Telegram, or whichever channel your NanoClaw agent listens on, and message it with its trigger word: maintenance is over, turn caching back on everywhere. The agent calls list_sites through xSpeed Hub to count the sites behind the connection, so it can tell you exactly how many the change will touch before it makes any call that writes.

What comes back is one question in the chat. The Hub tells the agent to confirm once before a write that touches every site, in words such as this will turn caching on for all 4 sites, and after your yes the agent sends a single toggle_cache call with site: "all". The Hub runs the sites one after another with a short pause and returns a row per site. If another caching plugin owns the cache drop-in on one of them, that site declines and returns blocked: true with the reason, and the agent should report a partial result rather than a blanket done. Page caching is only switched with toggle_cache; update_settings refuses that key and handles the finer settings, such as the cache expiry.

What differs in NanoClaw is that you own the whole agent, including what it asks. Whether it prompts before an MCP tool runs depends on how your fork is set up; its documentation gates adding a server behind approval but describes no per-tool prompt for calls. The Hub has no confirmation step of its own either, so the question in the chat is the agent following the Hub's instructions. The firm stop is the connection token the group sends: with Read-only everywhere on, the Hub refuses every write tool.

## Set up NanoClaw once

### 1. Put your sites in xSpeed Hub

Sign in at app.xspeedcache.com with Google or email; the Hub is free and has no site cap. Then connect each WordPress site from its own dashboard: click Connect Hub in the xSpeed Cache top bar, then Connect via xSpeed Hub. Each site needs the free xSpeed Cache plugin.

### 2. Add xSpeed Hub to your agent group

Copy the connection token from Connect AI in the Hub (only the workspace owner sees it). Then run this on the machine that hosts NanoClaw, with your agent group's ID from ncl groups list. The header goes in as a JSON object, because NanoClaw refuses credentials inside the URL. NanoClaw may ask an admin to approve the change.

```bash
ncl groups config add-mcp-server --id <group-id> --name xspeedhub \
  --url https://app.xspeedcache.com/xspeed/mcp \
  --headers '{"Authorization":"Bearer <your connection token>"}'
```

### 3. Restart the group and ask

The new server takes effect after a restart. Then message your agent with its trigger word, @Andy by default, and ask something that names xSpeed Hub.

```bash
ncl groups restart --id <group-id>
```

Full setup: https://xspeedcache.com/agent/nanoclaw/

### Before you send a prompt that changes something

Reads change nothing on your sites, though contact_support emails xSpeed support. Writes run once your connection allows them, so your client's approval prompt and a read-only connection (the token's Read-only everywhere switch, or a Viewer sign-in) are the gates that matter. Whether NanoClaw asks you before an MCP tool runs depends on how your fork and its admins are set up; its documentation gates adding a server behind approval but describes no per-tool prompt for calls. xSpeed Hub has no confirmation step of its own, so a write runs as soon as the agent calls it and your connection allows writes. The Hub tells the agent to confirm the target site and to ask once before a write that touches every site, which in NanoClaw shows up as a question in the chat. The firm stop is the token: with Read-only everywhere on, the Hub refuses every write tool. Keep it on for scheduled tasks.

## Prompts

- @Andy use xSpeed Hub to list every site where page caching is off. Change nothing.
- @Andy with xSpeed Hub, turn page caching back on for every site, and ask me once first.
- @Andy use xSpeed Hub to read the cache expiry on shop and blog and tell me if they differ.

## Example session

```
You: @Andy maintenance is over. Use xSpeed Hub to turn page caching back on for every site.
  → list_sites [read-only]: 4 sites: shop, blog, docs, landing
Agent: This will turn page caching on for all 4 sites; any that already have it on stay on. Go ahead?
You: Yes, all four.
  → toggle_cache(site: all, enabled: true) [changes site]: 3 turned on, 1 blocked: landing has another caching plugin that owns the cache drop-in
Agent: shop, blog and docs are cached again. landing refused because another caching plugin owns its cache drop-in, so xSpeed stays off there until you deactivate that plugin.
```

## How it works

1. **List the modules**: list_modules returns every Free and Pro module available on one site, with its settings schema and status. It tells the agent which module slugs exist, such as minify or gzip, and what each setting accepts.
2. **Read the current settings**: get_settings takes a module slug and returns its settings. Credential fields come back masked, so an agent cannot read a stored API token or password back in plain text.
3. **Change them**: update_settings takes the module and a values object of setting keys. The site checks the whole object first. If any key is unknown, any value is outside the schema, or a field is pinned by a constant in wp-config.php, it refuses the write, writes nothing and says which keys and why, sometimes with a "did you mean" hint.
4. **Turn page caching on or off**: Page caching has its own tool, toggle_cache, because it installs or removes the cache drop-in and the WP_CACHE constant. Asking update_settings to set cache_enabled does not work and is refused. If another caching plugin owns the drop-in, the site declines to enable xSpeed and returns blocked: true with the reason.
5. **Check the effect**: The result of a settings write is the stored settings. A module can add a warning when a setting is saved but has no effect on this server, for example Brotli on a server without the module for it, and the agent should pass that on. run_benchmark then times cached against uncached to see whether the change helped.
6. **Apply to many sites only after reading one**: update_settings and toggle_cache accept site: "all" or a list of handles. Each site validates against its own schema and answers in its own row, so a module missing on one site fails that row and the others still apply. Read one site first, then apply.

## Reference

| | |
| --- | --- |
| Discover | list_modules (read): Free and Pro modules, settings schema, status, per site |
| Read settings | get_settings (read): argument module; credential fields masked |
| Change settings | update_settings (write): arguments module and values; validated by the site |
| Bad input | The whole write is refused and nothing is written; the error names the keys and reasons |
| Page cache on or off | toggle_cache (write): argument enabled; cache_enabled in update_settings is refused |
| Blocked by another plugin | toggle_cache returns blocked: true with blocked_reason when another plugin owns the cache drop-in |
| Every site at once | update_settings and toggle_cache accept site: "all" or a list of handles, one result per site |
| Pro modules | A Pro module on a site without an active licence cannot be read or written; the site refuses |
| Credential fields | Refused by default over MCP; set them in the xSpeed dashboard, not through the agent |
| Read-only connection | The connection token with Read-only everywhere on, or a Viewer member's sign-in: update_settings and toggle_cache are refused; list_modules and get_settings still work. An OAuth sign-in gets the scopes the client asks for, read and write by default, clamped to the member's role |
| Confirmation | None on the Hub; the Hub tells the agent to briefly confirm intent for these two, and your client's prompt is the gate |

## Rules

- Read before you write. Ask for list_modules and get_settings first, so the agent changes real keys with valid values instead of guessing.
- update_settings and toggle_cache change how a live site behaves. They run as soon as your connection allows writes. The Hub tells the agent to briefly confirm intent first, which is guidance to the agent, so your client's approval prompt and a read-only connection (the connection token with Read-only everywhere on, or a Viewer sign-in) are the gates. The switch does not limit an OAuth sign-in.
- For site: "all", the Hub tells the agent to confirm once with "this will touch all N sites", then make one call. The result is per site, and some sites failing is a partial result to report, not a blanket success or failure.
- Do not ask an agent to set credentials such as a Cloudflare token or Redis password. The site refuses those writes by default, and they belong in the xSpeed dashboard.
- If a settings result says a value is saved but inactive on this server, relay that. Do not tell the user the feature is enabled.

## Good to know with NanoClaw

The connection token sits in the agent group's container configuration on your host, so anyone who can read that machine or its backups can use it, unless you hold it in NanoClaw's credential gateway. One token serves every site, and a fan-out write through it reaches all of them. The Hub issues one connection token per account, so its Read-only everywhere switch covers scheduled tasks created with ncl tasks create and the groups you message alike: leave it on, and turn it off only while you make a change yourself. The server is added per group, so each group that should change settings needs it and a restart.

## More prompts for this job

They work in any client connected to xSpeed Hub.

- Use xSpeed Hub to list the modules on shop and tell me which ones are off.
- Ask xSpeed Hub for the current minify settings on blog.
- With xSpeed Hub, turn on HTML minification on blog, then benchmark the cache and tell me if it helped.
- Use xSpeed Hub to turn page caching off on staging while I debug, and tell me when it is off.
- Using xSpeed Hub, read the gzip settings on shop first, then enable the same options on every site.
- Use xSpeed Hub to set the page cache lifespan on docs to 30 days, and if the site refuses it, tell me why.

## Frequently asked questions

### Can one NanoClaw message change settings on every site?

Yes, for update_settings and toggle_cache, which accept every site in one call. The Hub runs them in turn and returns a result per site, so the agent can tell you in the chat which sites changed and which refused, for example a site where another caching plugin owns the drop-in.

### How do I make my NanoClaw agent read-only for xSpeed?

Turn on Read-only everywhere for the connection token on the Hub's Connect AI page. The token is what NanoClaw sends, so the Hub then refuses every write tool, whatever your fork does about prompts.

### How does an agent know which settings exist?

It calls list_modules for the site, which returns every available module with its settings schema and status, then get_settings for the one module it wants to change. The schema says which keys exist and what values each accepts.

### What happens if the agent sends a wrong setting key?

The site refuses the whole update and writes nothing. The error names the keys it rejected and why, such as an unknown key, a value outside the allowed range, or a field fixed by a constant in wp-config.php, and it can suggest the nearest valid key.

### How do I turn page caching on or off with an agent?

Use toggle_cache with enabled set to true or false. It installs or removes the cache drop-in and the WP_CACHE constant. Setting cache_enabled through update_settings does not work. If another caching plugin already owns the drop-in, the site will not enable xSpeed and says why.

### Can one prompt change settings on all of my sites?

Yes. update_settings and toggle_cache accept site: "all", and the Hub runs the sites one after another with a one-second pause and returns a result per site. Each site checks the values against its own schema, so a site that lacks the module fails its own row while the others apply.

### Can the agent change my Cloudflare or Redis credentials?

Not by default. Writing credential fields over MCP is off unless the site owner allows it, and the site refuses the write and names the fields. Set credentials in the xSpeed dashboard. Credential values also come back masked when an agent reads settings.

## Tune cache settings with other agents

[Claude Code](https://xspeedcache.com/agent/claude-code/cache-settings/) · [Claude](https://xspeedcache.com/agent/claude/cache-settings/) · [Claude Cowork](https://xspeedcache.com/agent/claude-cowork/cache-settings/) · [ChatGPT](https://xspeedcache.com/agent/chatgpt/cache-settings/) · [Codex](https://xspeedcache.com/agent/codex/cache-settings/) · [Cursor](https://xspeedcache.com/agent/cursor/cache-settings/) · [GitHub Copilot in VS Code](https://xspeedcache.com/agent/github-copilot/cache-settings/) · [Windsurf](https://xspeedcache.com/agent/windsurf/cache-settings/) · [Gemini CLI](https://xspeedcache.com/agent/gemini-cli/cache-settings/) · [Antigravity](https://xspeedcache.com/agent/antigravity/cache-settings/) · [Zed](https://xspeedcache.com/agent/zed/cache-settings/) · [Kiro](https://xspeedcache.com/agent/kiro/cache-settings/) · [OpenCode](https://xspeedcache.com/agent/opencode/cache-settings/) · [OpenClaw](https://xspeedcache.com/agent/openclaw/cache-settings/) · [Hermes Agent](https://xspeedcache.com/agent/hermes-agent/cache-settings/) · [Grok Build](https://xspeedcache.com/agent/grok-build/cache-settings/) · [ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/cache-settings/) · [Grok](https://xspeedcache.com/agent/grok/cache-settings/) · [Grok Bot](https://xspeedcache.com/agent/grok-bot/cache-settings/) · [Muse](https://xspeedcache.com/agent/muse/cache-settings/) · [Manus](https://xspeedcache.com/agent/manus/cache-settings/) · [Kimi Code](https://xspeedcache.com/agent/kimi/cache-settings/) · [Paperclip](https://xspeedcache.com/agent/paperclip/cache-settings/)

## More with NanoClaw

- [Purge the WordPress cache with NanoClaw](https://xspeedcache.com/agent/nanoclaw/purge-cache/)
- [Find out why WordPress pages are not cached with NanoClaw](https://xspeedcache.com/agent/nanoclaw/troubleshoot-cache/)
- [Scan a website for speed problems with NanoClaw](https://xspeedcache.com/agent/nanoclaw/speed-scan/)
- [Run and track PageSpeed tests with NanoClaw](https://xspeedcache.com/agent/nanoclaw/pagespeed-tests/)
- [Raise a WordPress site's PageSpeed score with NanoClaw](https://xspeedcache.com/agent/nanoclaw/optimize-site/)
- [Warm the WordPress cache with NanoClaw](https://xspeedcache.com/agent/nanoclaw/preload-cache/)
- [Set up the Redis object cache with NanoClaw](https://xspeedcache.com/agent/nanoclaw/object-cache/)
- [Manage Cloudflare caching with NanoClaw](https://xspeedcache.com/agent/nanoclaw/cloudflare/)
- [Manage every WordPress site at once with NanoClaw](https://xspeedcache.com/agent/nanoclaw/fleet/)

## Documentation

- How to enable Page Cache: https://xspeedcache.com/docs/page-cache/
- How to minify CSS and JavaScript: https://xspeedcache.com/docs/minify/
- How to add cache rules and bypasses: https://xspeedcache.com/docs/rules-and-bypass/
- Site MCP tool reference: https://xspeedcache.com/docs/mcp-tool-reference/
