Everything is a file. So any agent can build it.
Divine keeps your whole site in theme files: pages, blocks, templates, and assets. Agents build by editing those files locally, the way they already work, and Divine wraps each task in its own copy with Check and review before anything ships.
The agent works in your files directly.
A worktree is a real theme directory on disk, so the agent reads, edits, searches, and diffs it with the tools it already uses. Whatever it does stays in the copy, and the live theme only moves when you merge.
# The agent works in the files
rg 'Download Divine' pages blocks
→ pages/divine/home/index.php
→ blocks/elements/download-button/index.php
sed -n '1,80p' pages/divine/home/index.php
→ readable page source
divine-check pages/divine/home/index.php
→ no findings
# Only the worktree can change
git status --short
→ M pages/divine/home/index.php
→ changes live in the worktree only
# the live theme is never written here
→ it updates only when you merge
Why files beat a giant builder API.
A builder API can grow forever; files and git do not. Agents already know how to read, edit, and diff files, so Divine just gives them a safe, real copy of your theme to work in.
Tools it already has
The agent reuses search, read, edit, and diff instead of learning a new API for every WordPress operation.
Plain files and folders
Pages, blocks, templates, and assets are real files the agent can open, search, and change.
Validation is part of the loop
Check fires after every worktree write. Bad contract code never reaches review.
The whole builder is files.
Divine does not hide the website inside builder state. Pages, blocks, templates, assets, and styles stay in the theme, which means an agent can work from Divine, GitHub issues, code review comments, or any bug tracker that points at files and diffs.
# Theme source stays readable
pages/divine/home/index.php
blocks/elements/download-button/index.php
divine.json
assets/divine/images/divine-screenshot.png
functions.php
→ pages, blocks, config, assets, and glue code
# External context maps to files
GitHub issue: update the hero CTA
→ pages/divine/home/index.php
→ blocks/elements/download-button/index.php
Bug report: dependency card copy is unclear
→ blocks/elements/dependency-card/index.php
Review comment: config naming
→ divine.json
Works with every cloud or git-based agent.
One pass over the files, not a call per step.
A builder API would split a multi-step task into a tool call per step. Files do not: the agent reads, filters, counts, and sorts across the whole theme in a single pass, the way it already works.
# Top changed PHP files by size
git diff main --name-only \
| rg '\.php$' \
| xargs wc -l \
| sort -rn \
| head -5
260 pages/divine/home/index.php
145 pages/divine/agent-loop/index.php
106 pages/divine/workspace/index.php
89 pages/divine/how-it-works/index.php
67 pages/divine/wordpress-native/index.php
# Posts grouped by status
wp post list --post_status=any \
--format=csv --fields=post_status \
| tail -n +2 \
| sort \
| uniq -c
3 draft
47 publish
2 pending
# Block names, alphabetized
find blocks -name block.json \
| xargs jq -r '.name' \
| sort -u
divine-homepage/agent-card
divine-homepage/card
divine-homepage/code-sample
divine-homepage/dependency-card
divine-homepage/faq-item
divine-homepage/window
Safety comes from the gate, not a leash.
The agent works in an isolated copy of the theme, and only the changes you review and merge ever reach the live site. However the work happens in the worktree, the live theme stays protected until you approve the diff.
An isolated copy
The agent works in its own theme directory, separate from the live theme and from other tasks.
Live theme stays read-only
Nothing the agent does in the worktree touches the active theme until you choose to merge.
Worktree-aware git
Git state is tied to the active worktree, so diffs and reviews stay scoped to the task.
Plain, searchable files
Pages, blocks, templates, and code sit on disk as normal files, so the agent searches them with the tools it already runs.
Validation included
Check runs on every write. Syntax, naming, and theme-contract rules, in pure PHP.
Review boundary
The work still becomes a human-readable diff before anything reaches the live theme.
Every write runs through Check.
Agents run divine-check locally and get findings in milliseconds, no WordPress needed. It enforces the theme contract: namespaced functions, no raw database writes, no eval, no register_post_type, Divine block aliases. A failing rule stops the work before anyone reviews it.
Divine alias tags used
blocks/card/index.php
Functions are prefixed
drift_render_hero()
eval() is not allowed
blocks/pricing/render.php:42
No raw $wpdb writes
blocks/list/view.php
Built on PHP-native infrastructure.
Two focused packages do the heavy lifting, both pure PHP and available on Composer. Blockstudio renders theme files as blocks, and Pitmaster runs git worktrees without ever calling the git binary.
The loop stays simple.
The agent finds a file, edits it, and Check validates the change. You see the result in the preview, read the diff, and merge when it is right. Same loop for a hero tweak or a full rebuild.
Give agents your files, safely.
Real tools, an isolated worktree, and your review before anything ships.