Skip to content

Releases: jefrontv/agent-local

v0.36.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 21:56

Changelog

Features

Install

brew install jefrontv/tap/agent-local
# or, no Homebrew:
curl -fsSL https://raw.githubusercontent.com/jefrontv/agent-local/main/install.sh | bash

Already installed? agent-local update

First run

agent-local doctor --fix   # installs whatever is missing (PHP, MariaDB…)
agent-local sudo           # one-time: no more password prompts
agent-local create mysite

v0.35.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 23:44

Features

Idle sleeping — quiet sites give their memory back. Every site keeps a php-fpm pool, and a pool nobody is using still holds about 11 MB. After twelve hours without a request the daemon now parks it and marks the site sleeping; the next request starts it again in around a third of a second, once.

  • agent-local idle shows the window and which site parks next. agent-local idle 6 retimes it, agent-local idle off never parks anything.
  • A reboot only restores pools used inside the window. Everything else comes back sleeping and wakes on first request, which is where most of the memory comes back.
  • sleeping is a new state, and it is not stopped: stopped means a person stopped it. list, the dashboard and the API say which — both are woken by the next request.
  • The site record carries last_active and idle_sleeps_in, so an agent can see when a site will park without guessing.
  • Parking only runs on the router front. Apache forwards straight to a pool's socket and cannot start one, so switching to that front wakes everything parked first.

Fixes and changes

A pool that disappears mid-request no longer turns into a 502. The router checked the pool's socket, then dialed it; if the pool died in between — or a site parked — the request failed. It now starts the pool and serves the request instead.

Install

brew install jefrontv/tap/agent-local
# or, no Homebrew:
curl -fsSL https://raw.githubusercontent.com/jefrontv/agent-local/main/install.sh | bash

Already installed? agent-local update

First run

agent-local doctor --fix   # installs whatever is missing (PHP, MariaDB…)
agent-local sudo           # one-time: no more password prompts
agent-local create mysite

v0.34.4

Choose a tag to compare

@github-actions github-actions released this 11 Oct 01:47

Changelog

Fixes and changes

Install

brew install jefrontv/tap/agent-local
# or, no Homebrew:
curl -fsSL https://raw.githubusercontent.com/jefrontv/agent-local/main/install.sh | bash

Already installed? agent-local update

First run

agent-local doctor --fix   # installs whatever is missing (PHP, MariaDB…)
agent-local sudo           # one-time: no more password prompts
agent-local create mysite

v0.34.3

Choose a tag to compare

@github-actions github-actions released this 29 Sep 03:30

Faster imports and database save points. Nothing changes in how you use agent-local.

Fixes

import --copy clones instead of copying. The docroot, uploads included, is now cloned on APFS, so it takes almost no time and almost no extra disk. A 1.2 GB site copied in with about 4 MB of new disk use. A byte-for-byte copy used to cost about 5 s and the same again in disk per GB. Across volumes, where cloning is not possible, it falls back to a plain copy as before.

The URL rewrite scans the database once per old host, not twice. Imports, db import, domain changes and doctor --fix ran search-replace separately for https:// and http://, and each pass reads every table. One //old-host pass now covers both, so the "urls" step takes about half as long. It also rewrites protocol-relative links (//old-host/...), which the old passes left pointing at the old site.

Save points are faster to write. The automatic snapshot taken before db import, restore, reset, delete and checkpoint is now compressed at gzip's fastest level, which runs about five times faster. Compression was the slow part, so on a large database that step drops from roughly 26 s per GB of SQL to roughly 5 s. Snapshot files come out about a third bigger, and only the last 5 automatic ones per site are kept.

Install

brew install jefrontv/tap/agent-local
# or, no Homebrew:
curl -fsSL https://raw.githubusercontent.com/jefrontv/agent-local/main/install.sh | bash

v0.34.2

Choose a tag to compare

@github-actions github-actions released this 25 Sep 02:17

Fixes a delete that could remove your own project folder, plus several ways a failed or routine operation could lose a database or a wp-config.php. Update before deleting any attached or imported site.

Fixes

Deleting a site no longer removes a folder you own. If you had pointed the sites directory at a folder you also keep your own checkouts in (for example ~/Sites), deleting an attached site, or one imported in place, removed the whole checkout. Being inside the sites directory was treated as proof that agent-local had created the folder. Now only folders agent-local filled itself are removed. For everything else, delete restores the original wp-config.php and leaves your files where they are.

Delete only drops databases agent-local created. A site imported with --serve-only records whatever database and user its wp-config.php names. That can be another site's database, or root. Delete now leaves those in place and says so, instead of dropping them.

Your original wp-config.php backup survives WP_DEBUG and constant changes. Turning WP_DEBUG on or setting a constant overwrote wp-config.php.agent-local.bak, the copy of your config from before agent-local adopted the folder. A later delete then restored agent-local's config and lost your original credentials. Toggles now keep their rolling backup in wp-config.php.agent-local.prev, and .agent-local.bak is never rewritten.

A failed create or import no longer drops a database you kept. Re-adopting a folder after delete --keep-db reuses its database. If a later step failed, the cleanup dropped that database, which could be the only copy of the data. Cleanup now only removes what the failed call created.

wp-config.php edits keep valid PHP. Values containing $ (such as 'http://' . $_SERVER['HTTP_HOST']) or a ) (such as getenv('X') === '1') came out mangled, sometimes as a parse error that took the site down. Constants are now rewritten without touching the rest of the file, and commented-out defines are left alone.

Smaller fixes

  • An import whose database load fails now reports the error instead of hanging forever.
  • The daemon now sees sites created from the CLI straight away, instead of after some later change.
  • A crash that could take the daemon (and every site) down when branch previews changed at the same moment is gone.
  • If agent-local can't check how many tables a database has, the operation now stops with an error. Previously the automatic safety snapshot was skipped without a word.
  • A malformed update checksum file is reported as an error instead of crashing the daemon.
  • Deleting a site with --keep-files keeps its branch-preview checkouts, uncommitted work included.

Install

brew install jefrontv/tap/agent-local
# or, no Homebrew:
curl -fsSL https://raw.githubusercontent.com/jefrontv/agent-local/main/install.sh | bash

Already installed? agent-local update

First run

agent-local doctor --fix   # installs whatever is missing (PHP, MariaDB…)
agent-local sudo           # one-time: no more password prompts
agent-local create mysite

v0.34.1

Choose a tag to compare

@github-actions github-actions released this 18 Sep 00:32

Changelog

Fixes and changes

Install

brew install jefrontv/tap/agent-local
# or, no Homebrew:
curl -fsSL https://raw.githubusercontent.com/jefrontv/agent-local/main/install.sh | bash

Already installed? agent-local update

First run

agent-local doctor --fix   # installs whatever is missing (PHP, MariaDB…)
agent-local sudo           # one-time: no more password prompts
agent-local create mysite

v0.34.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 01:53

Setup now connects your coding agent as well, so a fresh machine is ready to use in one command.

New

agent-local setup registers the MCP server in every agent harness it finds. That was the one step left over from the last release, and the easiest to skip: nothing breaks without it, your agent simply never sees any of the 76 tools. It now runs as part of setup, after the machine work and before the summary.

It covers Claude Code, Claude Desktop, Codex, Gemini, Oh My Pi, OpenCode, pi, Cursor, Windsurf, VS Code, Qwen and Zed — whichever of them are installed — and reports one line each. Registration is idempotent, so a second run reports already configured and writes nothing.

agent-local setup

It stays one command for the whole first run: the passwordless root allowlist (one password dialog), the /etc/hosts entries, the per-site TLS certificates, bare URLs, anything missing, and now the harnesses.

--no-harnesses skips that step if you would rather wire up your editors yourself. agent-local connect --remove --all undoes it.

The installer needs no change — curl … | bash -s -- --setup runs setup, so it ends with your agent connected too. It also no longer prints a "Next:" heading when it has just done the setup itself.

Install

brew install jefrontv/tap/agent-local

Already installed? agent-local update

v0.33.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 06:25

First-run setup is now one command, and it is the same command whichever way you installed.

New

agent-local setup does the whole first-run sequence in the order that works, then tells you whether the machine is actually ready:

agent-local setup

It installs the passwordless root allowlist (one password dialog, and it skips it entirely if you already have it), writes the /etc/hosts entries, trusts the per-site TLS certificates, turns on bare URLs, and installs anything missing. Then it reports the result — setup complete with the next command, or the specific thing still wrong and how to fix it.

It is idempotent. Re-running does nothing and asks for nothing.

Previously this was three commands in a required order — doctor --fix, sudo, create — printed once at install time and never checked. The order mattered, and skipping or reordering it produced a site that would not resolve.

Install and set up in one step:

curl -fsSL https://al.tools.efront.dev/install.sh | bash -s -- --setup

The installer is now served from the project's own domain rather than GitHub, and --setup runs the sequence above after installing the binary. Without the flag it prints one command to run instead of a list to sequence.

Install

brew install jefrontv/tap/agent-local

Already installed? agent-local update

v0.32.4

Choose a tag to compare

@github-actions github-actions released this 15 Sep 06:07

Fixes a first-run trap that leaves new sites unreachable, and the stale state that kept their URLs showing a port long after everything was configured.

Fixes

A site created from an app is no longer born unreachable. Setting up a site writes an /etc/hosts entry and trusts a certificate, and both need admin rights. From a terminal you get the macOS password dialog and it just works. From an app — anything driving agent-local through its API — the daemon could not ask, the entry was never written, and the site was reported as created and running while its domain resolved to nothing. The failure existed only as a passing progress message.

Creating, attaching and importing a site can now be asked to show that password dialog, and so can doctor_fix, so a client can finish setup or repair it from inside the app. It stays off unless asked, so nothing pops a dialog on an unattended machine.

A failed /etc/hosts write is never swallowed again. Renaming a site and creating a branch preview discarded the result entirely: the new domain simply never resolved and nothing said why. Both now report it, alongside the setup paths that already did.

GET /status reports setup state. Clients get setup: {root, bare_urls, ok, detail, fix} — enough to finish setup before creating the first site rather than discovering the gap as a site that does not load.

The bare-URL alias is re-checked instead of assumed. Whether the portless 127.0.0.2 address is available was cached for the lifetime of the daemon, and a daemon that first looked before the alias existed believed it was missing forever. Everything downstream follows from that: URLs kept their :10443 port, and new hosts entries were written to 127.0.0.1 instead of the alias, so bare URLs would not have worked even once the alias came up. Restarting the daemon was the only cure. A positive answer is still cached; a negative is now re-checked within seconds.

Install

brew install jefrontv/tap/agent-local

Already installed? agent-local update

v0.32.3

Choose a tag to compare

@github-actions github-actions released this 13 Sep 06:32

Fixes a certificate that could not be trusted being dropped in silence while a site was created or imported — the site warned in the browser and nothing told you why.

Fixes

You are told when a certificate is not trusted. Setting up a site issues a certificate and asks macOS to trust it. When that failed, the error was discarded and the site was served anyway, so the browser showed a security warning and neither the terminal nor the dashboard named the cause. The failure is now reported alongside the rest of setup progress, with the command that clears it (agent-local sudo).

Two sites set up at once can no longer trust each other's certificate. Trusting a certificate writes the PEM to one fixed path before handing it to the keychain. Two setups running concurrently could interleave there, each trusting the bytes the other had just written, both told they had succeeded, and one site left untrusted. That pair now runs one at a time.

A crash can no longer leave that staging lock held. The lock around the staged write and trust is now released even if the process panics inside it, so one bad call cannot wedge every later attempt to trust a certificate until the daemon is restarted.

Changes

agent-local domain and agent-local worktree can now wait for you. Both raise the macOS password dialog to trust a certificate, the same way they already do for /etc/hosts. Previously they failed quietly instead of asking. A script that calls either command may now block until the dialog is answered.

Not fixed

A certificate that already exists but is not trusted is still served without a re-trust attempt: the new warning covers certificates issued from here on. If a site has an older untrusted certificate, run agent-local sudo once, then agent-local cert <domain> --trust.

Install

brew install jefrontv/tap/agent-local
# or, no Homebrew:
curl -fsSL https://raw.githubusercontent.com/jefrontv/agent-local/main/install.sh | bash

Already installed? agent-local update

First run

agent-local doctor --fix   # installs whatever is missing (PHP, MariaDB…)
agent-local sudo           # one-time: no more password prompts
agent-local create mysite