agent-local: local WordPress for humans and agents

Measured, not estimated

3.2ms to serve a static file
18.8s to create a serving site
75 tools in the agent API
0 containers required

Same machine, same client, same day

The numbers, side by side.

Create a WordPress sitelower is better

agent-local 18.8 s median of three runs 4.7× faster than DDEV
LocalWP no CLI, by hand in the app
DDEV 87.6 s warm images; 215.7 s on first run

Start a stopped sitelower is better

agent-local 0.4 s 9.5× faster than LocalWP
LocalWP 3.8 s
DDEV 10.3 s

List your sites from a scriptlower is better

agent-local 0.03 s 11× faster than DDEV
LocalWP no CLI
DDEV 0.32 s

Serve a static assetlower is better

agent-local 3.2 ms 1.5× faster than DDEV
LocalWP 12.7 ms measured on a real client site
DDEV 4.9 ms

Memory to serve one sitelower is better

agent-local 52 MB the whole 34-site rack is 142 MB 12× less than LocalWP
LocalWP 601 MB including the 493 MB app window
DDEV 2488 MB Docker VM, freshly booted

Apple M3, macOS, September 2026. One HTTP client for every provider, interleaved samples, medians of thirty for latency and three for lifecycle. DDEV 1.24 on Colima with 4 CPUs and 6 GB; LocalWP 9. Memory is everything one site needs: daemon, database and PHP pool here; app window plus site services for LocalWP; the freshly booted VM for DDEV, not the 5 GB it peaks at while pulling images. Where a result was a tie we say so: fresh-install homepage time was 30 ms here, 29 ms on DDEV. Published as measured.

NO DOCKER.

Native processes on real files. Container tools pay the macOS filesystem tax on every request; agent-local lists your sites in 28 milliseconds and serves PHP in 4.6. After a reboot, everything returns on its own — the database first, then every site that was running.

What is actually running

One engine. Three doors.

You, or an agent
  • tuithe dashboard: sites, previews, runtimes, doctor
  • clione command per action, scriptable
  • mcp75 tools over stdio, plus the HTTP API
The daemon
  • frontone listener on 80 and 443, routed by Host
  • tlsa certificate per domain, trusted for you
  • hosts.test domains resolve with no port suffix
  • dbone MariaDB, a schema and user per site
  • mailevery outgoing message caught, nothing sent
Each site
  • fpmits own PHP pool, 7.4 to 8.5, on a unix socket
  • filesserved where they already are, no copy
  • @/branch previews beside the checkout
  • staticstraight from disk, PHP streamed

State is one JSON file, written under a lock and re-read when it changes, so the TUI, the CLI, the daemon and any number of agents act on the same truth at once. Processes carry pid files and are reaped on exit, so restarts never leave an orphan holding a socket.

BUILT FOR AGENTS

Most local tools assume a person is clicking. agent-local exposes the same engine to you and to Claude, Codex, or anything that speaks MCP. Create, import, probe, checkpoint, roll back, read the mail a form just sent. Failed calls name the fix, calls run concurrently, and nothing prompts for a password.

create · import · snapshot · share · mail · previews

  • ClaudeClaude Code
  • CodexCodex
  • GeminiGemini CLI
  • AntigravityAntigravity
  • πpi
  • ompOh My Pi
  • Z.aiZ.ai
  • QwenQwen Code
  • DeepSeekDeepSeek
  • KimiKimi CLI
  • CopilotCopilot
  • CursorCursor
  • WindsurfWindsurf
  • GrokGrok
  • MistralMistral

What ships in the binary

01

Captured mail

Every email a site sends lands in a local inbox: password resets, form notifications, receipts. Agents can read it and assert on it.

02

Automatic snapshots

The database is saved before every destructive operation. A snapshot is a plain .sql.gz, and the one taken before a delete survives it.

03

Public share links

One command opens a verified public URL through a Cloudflare tunnel. No account needed, and client sites keep their production images.

04

Branch previews

Any git branch on its own domain beside the running site. Same database, copy-on-write files, ready in about ten seconds.

05

Per-site PHP versions

Each site runs its own pool, 7.4 through 8.5. Switching installs or repairs the runtime it needs, including releases Homebrew has dropped.

06

Trusted HTTPS

Every domain gets a certificate issued and trusted in the keychain the moment it is created or renamed. Sites and previews answer on 443 with no warning page.

07

Streaming imports

A 7 GB LocalWP or DDEV site imports in place with no copy step — DDEV projects move out of Docker entirely. Every stored domain is rewritten, serialized data included.

08

Production media fallback

Missing uploads redirect to your production origin, honouring the .htaccess rule already in the repo.

09

WP_DEBUG without the ritual

One flag turns debugging on with the log routed to a file and display kept off. Reproduce, then read the log. An agent does the same in two calls.

10

Checkpoint, then roll back

Database and files saved together under one name before a risky update — a copy-on-write clone, seconds regardless of size. Rollback puts both back and is itself undoable.

11

A doctor that fixes

One probe says whether a site is down, fatal, redirecting, blank or slow. Every health check reports the exact command that repairs it, and doctor --fix applies them all.

12

A live request log

Every request the site serves, as it happens: status, timing, and the PHP errors it logged. Click one for the headers and the file that answered. Pause when you need to read.

13

Any PHP app

Attach a Joomla, Laravel, Drupal or plain-PHP directory and it gets the same domain, certificate, database and dashboard. WordPress keeps the full toolkit; the rest is told so, plainly.

Compared, honestly

Capabilityagent-localLocalWPMAMPDDEV
Runs on native processes Electron + services bundled Apache/MySQL Docker containers
Prerequisites none, installs what it needs app download app download Docker Desktop / Colima
Agent control 75 MCP tools + HTTP API none none CLI with JSON output
New WordPress site 19 seconds about a minute manual setup fast after first pull
Memory for one site 52 MB 601 MB not measured 2.5 GB
Trusted HTTPS automatic, every domain a Trust button per site by hand mkcert, once
Branch previews own URLs, shared database none none second project by hand
Outgoing mail capture yes, agents can read it yes no Mailpit
Database snapshots automatic no no manual
Public share links verified, no account account required no ngrok / cloudflared
Coexists on port 80 by design conflicts conflicts conflicts
Beyond WordPress any PHP app; WordPress gets the full toolkit WordPress only any LAMP app Drupal, Laravel, TYPO3

ONE BINARY.

macOS · Apple Silicon and Intel · MIT licensed