|
1 | 1 | # Saddle — direction |
2 | 2 |
|
3 | | -Moved out of `CLAUDE.md` on 2026-08-12. It was a dated section in a file that |
4 | | -loads on every task; roadmaps belong where they can go stale without misleading |
5 | | -anyone mid-session. |
6 | | - |
7 | | -Each item becomes a GitHub issue when it's picked up. The positioning narrative |
8 | | -behind it is in `STATUS.md` (2026-08-12 entry). |
9 | | - |
10 | | -**Re-derived 2026-08-15: items 1 and 2 have SHIPPED.** The text below was |
11 | | -written before they did; it is kept because items 3–6 still stand on it. Read |
12 | | -the gap description as history, not as the current state. |
13 | | - |
14 | | -## The gap that matters — as it stood on 2026-08-12 |
15 | | - |
16 | | -**On a block theme, Saddle can build a page but not a site.** Verified against |
17 | | -the tree: there are zero abilities for templates, template parts, global styles, |
18 | | -user patterns or fonts, and no reference anywhere in `includes/` to |
19 | | -`wp_template`, `wp_global_styles`, `wp_font_family` or `wp_block`. |
20 | | - |
21 | | -Worse, `saddle/bootstrap-design-system` **silently no-ops on block themes** |
22 | | -(`includes/abilities/blocks.php`): it returns `applied: false` and tells the |
23 | | -owner to go do it by hand in Appearance → Editor → Styles. Only Divi, via Pro's |
24 | | -filter, gets a design system actually written. An agent on a block-theme site |
25 | | -cannot see the header, cannot set the palette, and cannot save what it built as |
26 | | -a reusable pattern. |
27 | | - |
28 | | -## Ordered, and deliberately split by risk |
29 | | - |
30 | | -1. ~~**Site-editor reads (free, DB-only).**~~ **SHIPPED.** `list-templates`, |
31 | | - `get-template`, `get-global-styles` and `list-saved-patterns` are registered |
32 | | - in `includes/abilities/site-editor.php`, read tier. `list-fonts` was not |
33 | | - built and nobody has asked for it. |
34 | | -2. ~~**Make `bootstrap-design-system` real on block themes.**~~ **SHIPPED.** |
35 | | - `includes/abilities/blocks.php` resolves a `$store` — builder, global-styles, |
36 | | - or none — *before* the gate, so a classic-theme site is refused up front with |
37 | | - a reason instead of spending a single-use token to be told to go do it by |
38 | | - hand. The block-theme path writes the spec into global styles. |
39 | | -3. **Template / part / pattern writes (free, DB-only).** `set-template`, |
40 | | - `create-template-part`, and "save this subtree as a pattern" built on |
41 | | - `Saddle_Tree`. Approval-gated on overwrite. |
42 | | -4. **Filesystem export — a separate addon, never free.** The block-theme |
43 | | - equivalent of Create Block Theme, agent-driven: plan → export → clean, moving |
44 | | - templates, parts, global styles, patterns and fonts out of the database and |
45 | | - into theme files so an agency can version-control them. Native PHP via |
46 | | - `WP_Filesystem` — **not** a bash or WP-CLI wrapper (see the hard line in |
47 | | - `CLAUDE.md`). The `clean` step is exactly what `Saddle_Approval::gate()` was |
48 | | - built for. |
49 | | -5. **If code-writing ever happens, it is that same addon, and CSS first.** A |
50 | | - child theme stylesheet or Additional CSS is non-executable, covers most "make |
51 | | - it look right" work, and pairs directly with `get-design-system`. Data files |
52 | | - (`templates/*.html`, `theme.json`) next. PHP templates only if demand proves |
53 | | - it out. Every one of them goes through diff-preview → confirm → `saddle_log` → |
54 | | - revertable, which is the whole differentiator. |
55 | | -6. **The Divi analogue belongs in Pro.** Theme Builder templates, Global Presets |
56 | | - and Global Colors all live in the database with no version-control story. Pro |
57 | | - already reads all three; a JSON export/import into a repo is the direct |
58 | | - parallel. |
59 | | - |
60 | | -## Constraint on all of the above |
61 | | - |
62 | | -Nothing that adds a filesystem write ships in free while the WordPress.org |
63 | | -submission is in flight. |
| 3 | +Reset on 2026-09-07 (issue #166). The previous version, written 2026-08-12 around the |
| 4 | +block-theme gap, is in git history; items 1 and 2 of it shipped, item 3 is carried |
| 5 | +below, items 4–6 are folded into the pillars. Each item here becomes a GitHub issue |
| 6 | +when it is picked up; this file names direction, not tickets. |
| 7 | + |
| 8 | +## What changed the picture (2026-09-06 research) |
| 9 | + |
| 10 | +- **Elegant Themes shipped Divi AI Agents on 2026-09-04**, built into Divi 5, with an |
| 11 | + official MCP "on the way". "An AI that builds Divi pages" is no longer something |
| 12 | + only Pro offers. What survives as Pro's reason to exist: it runs from the |
| 13 | + developer's own Claude Code or Codex, on a live site, with no relay, no code |
| 14 | + execution, and a lint → render → verify loop the agent can be held to. |
| 15 | +- **What the community actually asks for**, in order: (1) not being afraid of write |
| 16 | + access on production, (2) bulk content and meta operations — the one concrete |
| 17 | + success story anyone told was SEO meta on 300 posts, (3) verifying from outside |
| 18 | + the tool that wrote, because "the MCP read its own write back and reported |
| 19 | + success while the public page served old content". Nobody sells (1) as the |
| 20 | + headline. |
| 21 | +- **Respira** sells duplicate-first / approval / 90-day undo across 17 builders for |
| 22 | + €9/month — through their own server. **WPVibe** (SeedProd) is a hosted relay with |
| 23 | + 12,000 sites. Saddle's edge over both is one sentence, and it has to be the first |
| 24 | + sentence everywhere. |
| 25 | + |
| 26 | +## The sentence |
| 27 | + |
| 28 | +> Self-hosted WordPress MCP for Claude Code. Nothing leaves your site, nothing |
| 29 | +> executes agent code, every destructive step previews and asks. Safe on a live site. |
| 30 | +
|
| 31 | +## Pillars, in priority order |
| 32 | + |
| 33 | +1. **Ship what exists.** WordPress.org approval of 1.0.0; a green CI that means |
| 34 | + green; Pro releases for what is already on `main`. |
| 35 | +2. **The production-safe write path is the product.** A drafts-only policy switch |
| 36 | + (the advice every thread gives by hand, as a checkbox); bulk post operations with |
| 37 | + preview → confirm token → batch undo, the same shape Pro's `wc-bulk-*` already |
| 38 | + has; `upload-media` accepting inline content so a write-capable client without a |
| 39 | + public URL is not stranded; `verify-page` proving the *public* page serves the |
| 40 | + new content, not just the read-back. All free. |
| 41 | +3. **The agency workflow.** Divi design-system export/import as JSON (Pro) — |
| 42 | + global colors, fonts, variables, presets, Theme Builder templates, library |
| 43 | + items — the version-control story Divi AI Agents does not have. Template, part |
| 44 | + and pattern writes on block themes (free, DB-only, built on `Saddle_Tree`, |
| 45 | + approval-gated on overwrite) — the gap the previous roadmap called the one that |
| 46 | + matters. |
| 47 | +4. **Say it out loud.** The sentence above leads both readmes and plugpress.co. A |
| 48 | + comparison page against Divi AI Agents, Respira and WPVibe on five rows: where |
| 49 | + traffic goes, code execution, works on a live site, verify loop, price. A |
| 50 | + token-per-task benchmark, because nobody measures it and address-based edits |
| 51 | + with compact reads are Saddle's answer to the "burns a five-hour window in an |
| 52 | + hour" complaint. |
| 53 | + |
| 54 | +## Explicit NO list |
| 55 | + |
| 56 | +Do not open issues for these. If a paying customer asks by name, the ask goes on |
| 57 | +the issue and the rule is revisited there. |
| 58 | + |
| 59 | +- **New builders.** Elementor has six competing MCP servers; Bricks 2.4 ships its |
| 60 | + own abilities natively; only Divi has paying customers. |
| 61 | +- **Partner-plugin wrappers without a named customer** (Slim SEO was closed on this |
| 62 | + rule). |
| 63 | +- **Divi 4 → 5 conversion.** Divi ships its own converter. |
| 64 | +- **Filesystem writes in free, ever.** A theme-export addon is the only place that |
| 65 | + belongs, and CSS or code writing anywhere waits until that addon exists. |
| 66 | +- **Admin UI redesigns.** The re-brand landed 2026-08-25. |
| 67 | +- **Runtime license checks in Pro** (decided 2026-07-12, saddle-pro#23). |
| 68 | +- Per-connection access profiles, comment abilities, activity-log export and |
| 69 | + retention — closed as not planned on 2026-09-07. |
| 70 | + |
| 71 | +## Kept, not scheduled (label `later`) |
| 72 | + |
| 73 | +- **Custom post type support across the content abilities.** Real agency pull, but |
| 74 | + it touches the whole read-authorization funnel; size it after the pillar-2 work. |
| 75 | +- **Menu abilities.** Divi AI Agents covers menus on Divi; block themes have the |
| 76 | + navigation block. |
| 77 | +- **Rate limiting on the MCP surface.** Do it after the positioning copy so it can |
| 78 | + be named there. |
| 79 | + |
| 80 | +## Constraints that do not move |
| 81 | + |
| 82 | +- Nothing that adds a filesystem write ships in free while a WordPress.org |
| 83 | + submission is in flight, and nothing self-hosted is published without a version |
| 84 | + bump Fahim approved. |
| 85 | +- Tool changes stay backward compatible — new optional parameters only. ChatGPT |
| 86 | + freezes an approved connector's tool list until an admin refreshes it, and a |
| 87 | + renamed tool or new required parameter errors there with no prompt to update. |
| 88 | +- The three non-negotiables in `CLAUDE.md` apply to every item above without |
| 89 | + exception. |
0 commit comments