A client’s site usually waits for a developer or for an owner who will “deploy it tonight”. Mila Agent has an optional Webmaster pack: Mila builds the client’s site in her own container, shows a preview and sends a batch to production once the client has said the word in the work chat. A service on the server does the deploy: Mila holds no hosting token.
For a Mila who runs client sites. The pack is installed separately from the core.
Mila is a contracted webmaster: she builds and maintains. What goes on the site and when it is published is the client’s call. webmaster:16-17
Previews on *.pages.dev and test branches Mila ships herself, as often as needed: she sends the client a link and takes measurements.
webmaster:24-26The live domain only after the client’s explicit word in the work chat on a specific list of what goes out now. Yesterday’s “go on” and a general “deploy when ready” do not count. The message number or the exact quote goes into the batch log.
webmaster:19-23Mila does not ask the MILAGPT owner to “deploy it” and does not wait for his command. A missing token or missing rights is a task for the administrator, not a request to deploy by hand.
webmaster:27-30A batch is the list of what goes on the site in one go. webmaster:111-118
Each client has a folder: sources in git, build scripts per section, the build in dist-<domain>/. Before a production build the preview address is replaced with the domain in canonical, og:url, hreflang and ld+json, and noindex is removed. For a new client Mila sets up the same structure. webmaster:36-49 webmaster:54-57
request_deploy.py puts a request into work/outbox/deploy/<id>.json: the client, production or preview, the build hash, what goes out. For production, without the client’s name and the number of their message (or an exact quote) the script stops and writes no file. request_deploy.py:65-82 request_deploy.py:46-51
The webmaster-deploy service on the server reads the outboxes on a timer and checks each request against a table: Mila → Pages project → build folder → domain. Only her own project can be deployed: a request for someone else’s is rejected mechanically. With a token it runs wrangler pages deploy; without one the status is dry_run_no_token: the service shows what it would do and runs nothing. webmaster:149-158 webmaster:161-163 webmaster:164-166
The result arrives in <id>.result.json: done means Mila goes to check the site; blocked means she reads the reason, fixes it and sends again. A blocked she does not understand is a task for the administrator, not a workaround through her own wrangler. webmaster:119-123 webmaster:172-174
There is no Cloudflare token in Mila’s container, and there should not be one: it lives on the server. webmaster:146-147
Even when the client has said to deploy the batch, these files need a separate look from a person: the client, a lawyer or the owner. webmaster:59-73
The layout passes design_check.py before hand-off. The brand follows the client’s brand guide; with no guide, it follows what already stands on the client’s current site: Mila does not invent a new palette to her own taste. webmaster:83-88
The mobile screen is 360 px: the norm, not the edge of the range. Page weight and the number of requests do not grow from batch to batch without an explanation in the log. webmaster:89-92
On every public page: its own title and description, canonical to the live domain, hreflang to every language, the page in sitemap.xml, schema.org with real numbers. noindex only on previews. webmaster:93-98
| Check | Norm |
|---|---|
| Addresses | Every new or changed page returns 200, not 301, 308 or 404 |
| Prices and texts | Match what the client saw before giving the word |
| 360 px | No sideways scroll, no touch targets smaller than 12 px, the first-screen heading takes no more than 3 lines |
| Forms | A test submission with utm_source=test reached where it should, and it is clear that it is a test |
| Log | One entry per batch: what went out, the client’s word, the hash, the status, the check results |
The first quick pass is check_deploy.py: 200 for a list of addresses, viewport, canonical not on pages.dev, no noindex in production; exit code 1 if any address fails. A batch without a log entry is as if it never happened. webmaster:129-139 check_deploy.py:12-14 check_deploy.py:44 webmaster:178-191
Mila talks to the client in the voice of a host in their work chat. webmaster:195-204
The pack has been in the kit since the first release, v1.0, and is installed one skill at a time with update.py install-skill. CHANGELOG.md:385 README.md:1-3
| File | What it does |
|---|---|
| packs/webmaster/README.md | what the pack holds and how to install it |
| webmaster/SKILL.md | the skill: who decides, a batch’s path, checks, the log, talking to the client |
| webmaster/request_deploy.py | a deploy request into her own outbox; no production request without the client’s word |
| webmaster/check_deploy.py | a quick check after the deploy: 200, viewport, canonical, noindex |
| webmaster/img_proportsii.js | an image proportion probe at 390 and 1440 px |
The kit is open: skills, hooks, tools and templates. Every pull request is read by a person and by Mila Quality.
Facts on this page: github.com/shakhruz/mila-agent (main, 83d4af4, v1.7.1), checked 1 Nov 2026. The chat in the phone is an illustration. “Mila”, “MILAGPT” and the logo are trademarks of MILAGPT.