WordPress AI strategy – Artur’s Version

I am currently circulating a draft for WordPress project AI strategy vision. This post is a snapshot of that document. It has been born from mine & Grzegorz’s Knowledge merge proposal and it explains reasoning behind it.

The idea is to keep the open web alive in the AI world.

WordPress is the biggest open ecosystem to create your home on the web, configure it according to your needs, and host it exactly the way you like. The strategy we propose stays on the same message, but makes sure WordPress strengths shine in the AI world.

People are moving aspects of their daily work into Claude, ChatGPT and agent tools. Their connections, notes, skills, memories are piling up on platforms they don’t control. Interoperability, open protocols and secure access has to include agents and their needs.

WordPress should become the place where all your AI Agents and employees alike can store your private data and tools and where the knowledge work happens – in the place you control, extend and connect to external and internal AI providers.

“Content Management System” is only one letter away from “Context Management System”:

What this strategy unlocks

With WordPress it’s easy, safe and extensibleWithout WordPress it’s hard, messy and closed
User is able to manage their AI Skills database in WordPress, syncing their OpenClaw skills with Claude and ChatGPT. Unmanaged directories of multiple sources of skill files with no UX
Businesses and enterprises can sync certain skills with their team, while other stay privateDistributing via enterprise features of Claude or asking the team to install specific repositories and asking them to learn git and sync directories. No UI to edit skills
User is able to safely expose certain tools (like for example calendar connection) to agents while making sure secrets stay safely managed by WordPressRandom packages installed from random skills on local machine, potentially leaking secrets or API keys.

Collections of MCPs, potentially unsafe
User is able to switch from Codex, to Claude, to any other agent, ensuring all their stored knowledge, notes, skills, and configuration is portedNo good way – you can expose the same workspace to OpenClaw and Claude, but they have different file conventions and symlinks break (I tried).

For syncing memory closest is something like GBrain
User is able to centralize all their MCP connections through WordPress, ensuring access policies follow centralized rulesEnterprise centralized MCP proxy services

Plugin developers can create plugins that improve agentic memory, the experience of managing AI data (skills/memories/etc) or that experiment with novel AI uses.
Because each plugin owns its data, monolithic plugins are incompatible with each other.
WordPress-native agents are immediately as capable as Claude / Codex due to shared knowledge and content already available on your websiteYou have to teach each agent from scratch

Why WordPress can do this

  1. Memories, Documents, Skills, and all Markdown files are all content. WordPress is from ground up a Content Management System, with appropriate data types, screens our users are familiar with.
  2. It has a robust and tested permission system, with your team already using it. Data provenance, access control and user education are a solved problem
  3. It already has an ecosystem of business capabilities and plugin marketplace much richer than Claude / ChatGPT ones. We can leverage existing connections and APIs to gain network effects from plugins.
  4. WooCommerce is a good example: It stores financial data, runs orders and exposes mission-critical data flows.

Future-proofing WordPress

We are seeing a new wave of software: Claude Cowork, Codex for office work, Office 365 Copilot, Google Workspace Gemini, OpenClaw. All these aim to integrate agentic capabilities with your data, skills and AI memories to provide better AI help while also hosting your data on their platform. This creates 2 risks:

  1. As these companies compete they may decide to lock the private data
  2. Eventually, as these products consume more work tasks, these companies will offer website hosting, as we see with ChatGPT Sites.

WordPress stays relevant in that future if we:

  1. Establish a vision that will allow our experiments to share the same broad direction and allow independent explorations to stack upon each other.
  2. Unlock new use cases for WordPress, as AI is changing user behavior. While WordPress has a lot of advantages, users who do their work inside agent platforms have less reason to visit their WordPress site.
  3. Commit to not forcing AI. This document assumes no changes in the classic WordPress experience. The cornerstone of this strategy is to make subtle, behind-the-scenes changes that unlock new possibilities, but require no change in habits.

That’s a good idea. Yeah. Sounds like a good product

– Stephen Wolfram, Automattic advisor when presented with this plan. This feedback made me really happy.

Workstreams

None of these workstreams are new. This document only describes how they fit together and how their development should fit with the overall needs of the vision.

WP AI Client

WP AI Client provides integration points for AI features running directly inside WordPress.

  • ✅Plugin developers can focus on user-facing features or tweaks to the functionality instead of repeating boilerplates.
  • ✅Users can choose any token provider they want

Abilities API

✅Abilities API is the equivalent to AI tools, with built-in permission schemes. Plugin developers can create WordPress-native equivalents to CLI tools for agents or custom MCPs, with credentials safely managed on WordPress.

🆕Abilities Catalog needs to solve ability orchestration problem by automatically organizing independent abilities

WP Knowledge

🚧 WP Knowledge (Merge proposal) aims at providing a common standard to store skills, memories, and notes on WordPress. It seeks to become a standard in Core so that plugins standardize on the same data format and are interoperable between each other.

WP AI Client introduced a way to call LLMs into WordPress, and Abilities API introduced tools to interact with WP itself. But developers wanting to build compelling AI features need to store memory, skills or work-in-progress artifacts somewhere, requiring external services or limiting capabilities of their plugins. Knowledge introduces a missing component: state. This completes the first phase of Core AI rollout, giving WordPress-based agents APIs to compete with other agentic solutions.

Finally, WP Knowledge is part of the AI Strategy, but it unlocks use cases for non-AI users too. A common API for knowledge bases and private data allows unrelated plugins to introduce features known from apps like Notion, Evernote, Google Docs and Automattic’s P2 system. This post describes these new opportunities extensively.

This document has been born to explain the reasoning behind WP Knowledge and how it fits with the broader context.

Interoperability

The core of this strategy is that you can access your tools, memories, notes, artifacts, configurations through any agent on any surface. This requires ensuring WordPress supports broadest array of standards and access points possible.

  • ✅ MCP Adapter will allow triggering any ability through MCP-enabled clients
  • 🆕 We need to expose WP Knowledge through MCP as well
  • 🆕 We need to look into CLI thin client / sync tools for skills, memories and agents.md configurations
  • 🚧 There are explorations of GIT protocol as sync layer.

Data Provenance

While WordPress will enable access to any data and tool for any agent you want, it also needs to ensure that private data stays private.

  • ✅ Capabilities API manages access control for Abilities and Knowledge.
  • 🆕 We need to explore finer access controls for MCP and Abilities instead of inheriting your (potentially admin user) permissions. This would turn WordPress into enterprise-grade permission proxy for all AI use. Some approaches include:
    • Delegated users
    • Access control matrix for specific agents

Vector Search

🚧 Vector Search API in WordPress would allow multiple plugins and solutions to search common infrastructure. RAG solutions are a very common request in the community and would strengthen AI, SEO and private search/research capabilities of WordPress.

This also combines and unlocks superpowers for Knowledge – like semantic skill search.

A safe way to proceed with this work would be to introduce a RAG connector that bootstraps an appropriate canonical plugin on the connectors’ screen.

I have a prototype for this too.

WP Knowledge: Beyond AI

WP Knowledge is a new API we seek to introduce to WordPress Core. While it’s immediate applications are central to WordPress AI strategy, it has a lot of use-cases beyond our AI needs.

What is knowledge?

Knowledge starts as a very simple API to store non-public data in a predictible place in your WordPress installation:

  • The wp_knowledge custom post type and capabilities
  • The built-in types guidelinememory, and note in wp_knowledge_type taxonomy
  • /wp/v2/knowledge REST routes

While we cover potential AI use cases elsewhere, in this post I am going to focus on what this unlocks for non-AI use cases.

WordPress as a Personal Cloud

The core ambition is to shift private data from apps like Notion, Evernote, Obsidian, Logseq, Roam, Google Doc, Sharepoint and other systems into WordPress, where your public writing already lives. All your writing belongs together, regardless if it’s private or not.

  • For personal use, this means WordPress becoming a “Second Brain”
  • For small business / enterprise this means WordPress becoming a Knowledge base

There is more private than public data in the world and the advantages of WordPress – being a secure, self-hosted and reliable place to store it are even more compelling for knowledge bases.

Most of the cloud-based alternatives are VC-funded and can delete your critical feature at any moment, not to mention data privacy concerns. Self-hosted alternatives require complex setups, while you already host WordPress.

For an existing WordPress owner, there is no easier way to self-host a knowledge base than WordPress.

Storing metadata where your work happens – in WordPress

There are network effects to data, and that includes your writing, notes, and reference documents.:

  • Your private notes could cross-reference your public writing
  • While composing a new post you could have a sidebar with research as PersonalOS supports
  • For a small business or an enterprise, you could have a procedure document and internal instructions tied to capabilities
    • or linked to actual actions in WordPress like managing a WooCommerce store
  • One search API surfaces your public writing and private notes alike
Example UI with research sidebar from PersonalOS

I promised no AI pitches here, but you could imagine how powerful is the idea of a single indexed, searchable and organized knowledge store for AI-powered work.

New plugins on top of this API

The main reason to introduce Knowledge into Core AI is to kickstart an ecosystem of compatible plugins, all built on top of a single data store. API is both a convenience and a statement:

“We see this use case, we want more of this, it deserves it’s own API”

This API is purposefully lean: It aims to organize similar use cases, ensure security promises and serve as a bootstrap for an entire range of solutions.

Leveraging plugin ecosystem

Technically all of these use cases are possible via plugins, but they are not interoperable until we introduce a standard.

PersonalOS introduces a host of note-taking features, but anybody wanting to extend it has to target PersonalOS specifically. Knowledge seeks to break the data layer definition out of all these plugins so multiple developers can independently ship:

  • A sidebar Gutenberg plugin surfacing notes supporting the drafted post
  • An Evernote, Readwise, or other service sync implemention plugin
  • A backlink plugin that would show notes linking to the current one
  • A knowledge graph visualization plugin showing relations between different ideas in the knowledge base
  • A myriad of knowledge-base targetted specific features that suddenly can be installed on any WP site to improve note experience.

Shipping a compelling data management plugin on top of WordPress cannot use it’s biggest advantage: the plugin ecosystem. Each plugin uses a propriatary format for it’s data and has to recreate entire feature set from scratch.

Automattic has state of the art knowledge base support with the WordPress-based P2 project. If it was built on top of knowledge, users could pick and choose features they like instead of relying on a proprietary network and installs.

Extensibility beyond plugins

Finally, there is a class of use-cases that depend on a common defined API for storing data: Desktop and Mobile Applications like:

With a common API for syncing private data you can tell your user “point this at your WordPress and sync“. The alternative – installing a plugin – introduces enough friction that the developer has no incentive to even start.

But if we already have plugins working with the same API – suddenly there is a reason to create compatible apps, unlocking a new growth opportunity for WordPress.

WordPress as Obsidian Sync

I am writing this post directly in Obsidian. A git clone of my blog sits on my laptop, and obsidian works with plain .md files. Everything gets written to a WordPress database on push.

Introducing PushMD

This workflow is possible thanks to the PushMD plugin we wrote with Adam. The plugin exposes a git remote url via wp-rest. This allows you to commit, push and pull to sync entire blog content.

All workflows including git will have some sort of script or Github action to sync with an external repository. In PushMD, your website is the repository.

  • Your entire content will be checked out locally as .md files (and more)
  • Your agents can see your entire website at once, use file operations to edit and read content and resolve conflicts in a git way
  • WP-Admin users can work together with multiple other clients
  • You can sync arbitrary private markdown content (like your obsidian vault)

I checked out my entire website with this one-liner:

git clone https://arturpiszek@piszek.com/wp-json/git/v1/md.git

Guidelines

The upcoming changes in WordPress Core will introduce Guidelines: a predefined storage for Instructions, Skills, Memory and Artifacts.

PushMD is already compatible, which means AGENTS.md or Skills in WordPress end up in your agent configuration.

Artifacts

Artifacts is a special type for arbitrary content – this is where you can store your private notes that you never intend to publish (like your obsidian vault.)

WordPress as your personal cloud

WordPress is your home on the web – and not everything in your home needs to be public. PushMD is another way to connect it to everything everywhere.

Download PushMD for your own blog here.

Book: Be Useful by Arnold Schwarzenegger

It is hard at first. But do you know what’s harder? Living a life you hate. That’s hard. This, by comparison, is a walk in the park.

One book I keep recommending to everyone is Arnold Schwarzenegger’s autobiography. What I love about Arnold is how human he is – caring, thoughtful, whimsical, and refreshingly honest about his mistakes.

“Be Useful: Seven Tools for Life” is his attempt to compile the same lessons into a more organized structure, built around the idea of being genuinely useful to other people instead of coasting through life.

Total Recall

I happened to read Arnold’s autobiography – Total Recall – long ago. I recommend it without hesitation, mostly for the hilarious anecdotes. “Be Useful” extracts the lessons; “Total Recall” gives you the stories that made the lessons stick.

A few things that stuck with me:

  • Arnold was, first and foremost, a businessman and a salesman. He made a fortune in real estate well before his film career took off.
  • On “Twins” with Danny DeVito, he negotiated a percentage of the gross instead of a flat fee. That one deal made him more money than his more famous movies.
  • He married into the Kennedys, had an affair, lied about it, and that lie is what ultimately blew up the marriage. He’s candid about that too.
I think my favorite story is about his “European Bricklayers” business – from the Tim Ferriss show (click to expand)

Since Franco’s talent was to be a bricklayer, and a very skilled bricklayer, and he learned that in Italy and Germany, we were able to go and start thinking about putting together the idea of putting an ad in the LA Times, creating a company and calling it European bricklayers and masonry experts, marble experts, building chimneys and fireplaces the European style. This was also a time where everything that was European was huge in America, so we benefited from that. Swedish massages and everything had to be kind of a foreign name. Japanese this and this. Europe and Japan and all these places; the names were used because for some reason or another people thought that it was better. So we used that in the ad and we put the ad in the paper and literally a week later we had the big earthquake in Los Angeles. The chimneys fell off the apartment houses and all that stuff and there were cracked walls and all this. One of the friend’s of ours wife who was very smart and she worked in a supermarket, she did answering the phones and calling people back and all this just to make sure our English doesn’t get all screwed up with talking over the phone. She gave us the addresses and then we got to do the estimates and I was kind of like set up to be the math genius that figures out the square footage. Franco would play the bad guy and I played the good guy. We would go to someone’s house and then someone would say, “Well, look at my patio. It’s all cracked. Can you guys put a new patio in here?” I would say yes and then we would run out and get the tape measure, but it would be a tape measure with centimeters. No one in those days could at all figure out anything with centimeters. We would be measuring up and I would say 4 meters and 82 centimeters. They had no idea what we were talking about. This is so much and we were writing up dollars and amounts and square centimeters and square meters. Then I would go to the guy and say, “It’s $5,000,” and the guy would be in a state of shock. He’d say, “It’s $5,000? This is outrageous.” I’d say, “What did you expect? and he’d say, “I expected like $2,000 or $3,000.” I’d say, “Let me talk to my guy because he’s really the masonry expert, but I can beat him down for you a little bit. Let me soften the meat.” Then I would go to Franco and we would start arguing in German. [25:40 Content in German.] This would be going on and on and he was screaming back at me in Italian. Then all of a sudden he would calm down and I would go to the guy and say, “Okay, here it is. I could get him as low as $3,800. Can you go with that?” He says, “Thank you very much. I really think that you’re a great man and blah, blah, blah and all this stuff.” I’d say, “Give us half down right now and we’ll go right away and get the cement and the bricks and everything we need for here and we’ll start working on Monday.”

Arnold’s rules (from Total Recall)

  • Turn your liabilities into assets
  • When someone tells you no, hear yes
  • Never follow the crowd – go where it’s empty
  • No matter what you do in life, selling is part of it
  • Never let pride get in your way
  • Don’t overthink
  • Forget plan B
  • Use outrageous humor to settle the score
  • The day has 24 hours
  • Reps, reps, reps
  • Don’t blame your parents
  • Change takes big balls
  • Take care of your body and your mind
  • Stay hungry

The central lesson, repeated over and over: a clear, crystalline vision that will be fulfilled no matter what. Victory is then only a matter of time.

Back to Be Useful

I’ll be honest – I read “Be Useful” pretty briefly, because by the time I got to it I had already read “Total Recall” and most of the material was familiar. If you’re going to read only one, read the autobiography.

That said, “Be Useful” is organized around seven tools (have a clear vision, never think small, work your ass off, sell sell sell, shift gears, shut your mouth open your mind, break your mirrors), and the framing is useful on its own. The “break your mirrors” idea is the thesis of the whole book: stop looking at yourself, start looking at the people around you, and your life gets bigger.

The part I find hardest to actually implement is the vision piece. Arnold really hammers the idea of a single, focused, maniacal vision guiding your life. I agree it’s powerful. I also find it very hard to do – and that singular obsession seems to be the one thing every person who achieves greatness has in common.

A handful from my highlights

  • Start doing things you like to do, or that make you proud of yourself for having completed them.
  • Put the machines away and create space and time in your life, however small or short in the beginning, for inspiration to find its way in and for the discovery process to happen.
  • It is hard at first. But do you know what’s harder? Living a life you hate. That’s hard. This, by comparison, is a walk in the park.
  • There is no plan B. Plan B is to succeed at plan A.
  • Don’t be a lazy fuck. Do the work. The only time you are allowed to use the phrase “I took care of it” is when it is done. Completely.
  • Follow-through is usually the easiest part of the work in terms of energy and resources, yet it’s almost always the thing we either take for granted or let slip through the cracks. We say “I want to do this great, fantastic thing,” get the ball rolling, and just expect it to keep rolling.
  • Rest is for babies and relaxation is for retired people. Which one are you?
  • We aren’t giving young people the time and space to discover a purpose or to create a vision for themselves. Instead, right at the point where they have the least to lose and the most to gain from spending time out in the world, we’re plucking them out of it and sticking them in four-year universities – the exact opposite of the real world.
  • “There is no fate but what we make for ourselves.” — The Terminator

Media is new smoking indeed

Yesterday, a jury in Los Angeles has found media giants guilty of damaging a young woman’s mental health and awarded her $6 million from Meta and Youtube for addicting her to Social Media (CNN).

That was the first time these companies were actually found guilty and may be the start of a new wave of lawsuits. A tobacco-related lawsuit wave in 1990s led to 1998 Master Settlement Agreement, in which 46 states and several territories settled with the four largest cigarette companies for $206 billion and imposed advertising and marketing restrictions.

Weaponized Psychology

The core of the case stated that the companies knew both about their manipulation and it’s effect on the users. They were charged with using addictive psychological tricks – auto-scrolling, beauty filters, fear of missing out, autoplaying videos, and many others – to make their users come for another fix.

The issue is systemic: Stanford Behavior Design Lab regularly consults with Tech Giants help them with “Persuasive Technology”, and the market incentives create apps designed for engagement – which is a code for addiction.

Time to fight back

Sure, regulation is one solution, but nobody is coming to save you: managing your media diet is part of being an adult now.

For that reason I created an app using all psychological tricks I know to help you curb social media addiction and I’m launching it today.

Check out DoomToll on Product Hunt:

DoomToll swaps your social media icons on the home screen with it’s own shortcuts. These shortcuts put a paywall between you and addictive apps.

Here is why it works:

  • Replacing existing icons is leveraging Habit replacement to form a new habit – touching grass
  • The paywall appears roughly 25% of the time and randomly. This is called Variable reinforcement and is meant to keep you from giving up and going to social media directly. It makes doomscrolling a little more tedious
  • Paywall is introducing loss aversion and pain of paying. You don’t have to pay – touching grass is always free – but it makes it clear that not only you are trying to waste time, but also lose money.

Yes, I am getting this money. As one user stated:

This is the most ingenious combination of evil altruism I’ve ever seen

But you shouldn’t pay me. You should touch grass.

It’s the Media, not Social Media

I think social media is getting an unfair amount of the blame here. When the networks were all about keeping up with your friends, the Internet was fairly whimsical.

The real digital fentanyl hit the information highway when the feed started displaying the most addictive content sourced from the entire human race.

TikTok is bundled together with “social media” but there is nothing social about it: the videos you see are chosen by the algorithm and they have nothing to do with your social circle. It has more in common with the oldschool television experience than social media, and it has the same brain numbing effects.

Group chats, closed communities and small online groups can be an antidote to the mass digital media, and a grounding force to prevent ill effects leading to the mentioned lawsuits.

Humans were simply not meant to constantly hear what other 7 billion of homo sometimes sapiens is currently enraged about.

Touch grass, don’t doomscroll. Your attention has a price.

Bucketlist #80 – Baby Turtles

My job has some sweet perks and one of them is flying to nice locations with my cool teammates. This time it was Costa Rica – and in particular Playa Del Coco. I also have a Bucketlist on this blog which is an excuse to inject a little bit more fun into my life – it’s my way of reminding myself why do I do all this.

The number 80 on my bucketlist is “Observe baby turtles going to the sea” and Costa Rica is known for it’s respect for nature and many turtle spawning areas. So I stayed 1 day longer, drove to Tamarindo so I try and find these cuties, and I did!

During the Turtle conservation tour we also saw 3 mamas searching for a good nest in Las Baulas National Park.

Apparently only 1 egg in a thousand survives the hatching and the perilous journey to the sea. Observing these tiny guys flop their fins gives you a perspective on how precious and brittle life is. I got emotionally invested in their endeavor and made miss my kids so much more.

La Leona waterfall

I love waterfalls as much as I love turtles, so I also took this opportunity to visit the La Leona waterfall. It’s a paid affair where you hike through the canyon, wade through obscenely blue water, jump into vortexes and swim under a waterfall. Worth every penny.

Rio Celeste

The Rio Celeste waterfall we got to see with my coworkers was a pretty sight too!

Pura Vida!

Jackpoint: control Claude via Matrix DMs

I don’t want to sit in front of the computer watching it work. I want to fire off a task, and continue my merry life eventually helping it along the way, . Walk in the forest, tinker with woodworking or draw with my kids.

The promise of agents is that they should continue working in the background. But that promise is not realized when you have to sit and wait until your Claude overlords demand more permissions from you.

So I wrote jackpoint to wrap the Claude sessions so that I can fire them off on the computer and continue them on mobile. Its using the Matrix protocol and I’m managing my sessions via Beeper.

Jackpoint is giving full terminal access to the Matrix account that it connects to. Matrix has double-ratchet end-to-end encryption, but you should still be careful.

TLDR: Install with `npm install -g jackpoint`. Repository is here, and here are the full docs:


Jackpoint

A bidirectional Matrix bridge for Claude Code. Get notifications on your phone when Claude needs input, and respond directly from Matrix.

Why?

When running long Claude Code sessions, you don’t want to babysit your terminal. Jackpoint sends you a Matrix DM when Claude:

  • Asks a question
  • Needs permission for a tool
  • Stops and waits for input

You can respond from your phone, and the message gets injected back into the terminal.

Requirements

  • Node.js 18+
  • tmux (for bidirectional communication)
  • A Matrix account (e.g., on matrix.org)
  • Claude Code CLI

Installation

npm install -g jackpoint

Setup

Run the setup wizard to configure your Matrix credentials:

jackpoint --setup

You’ll be prompted for:

  • Matrix homeserver URL (default: https://matrix.org)
  • Matrix username (for the bot account that runs Claude)
  • Matrix password (for the bot account)
  • Recipient user ID (your personal Matrix ID that receives notifications – usually yourself on mobile)

Note: The login credentials are for a bot account that will run Claude and send you notifications. This can be a separate Matrix account or your main account. The recipient user ID is where you want to receive the notifications (typically your main Matrix account that you check on your phone).

Credentials are stored in ~/.jackpoint/ (not in the repo).

Usage

Start Claude Code with Matrix integration:

# Must be inside tmux
jackpoint claude

With arguments:

jackpoint claude --model sonnet
jackpoint claude --resume

Matrix Commands

In your Matrix DM, you can use these commands:

Command Description
/lines [n] Show last n lines of terminal output (default: 30)
/help Show available commands

Any other message is sent directly to Claude as input.

How It Works

  1. Wrapper Pattern: jackpoint claude wraps Claude Code and injects hooks via --settings flag
  2. IPC Socket: Hooks ping a Unix socket instead of doing Matrix I/O directly
  3. Matrix Listener: Listens for incoming Matrix messages and injects them via tmux send-keys
  4. Session Persistence: Matrix rooms persist by tmux pane (hostname:session:window.pane)

PHP can AI: WordPress.com Agentic Infrastructure

This post describes how we designed the Automattic / WordPress.com AI Agent “Framework”, how it’s running (in PHP!), and what trade‑offs we made along the way. If there is one point I want to get across, it is that agentic frameworks are dime a dozen, agents are LLMs calling tools in a loop, and absolutely the hardest part about working on agentic frameworks is resisting the urge to overcomplicate things (per the AIKEA effect).

Automattic, like everybody has introduced a suite of AI features to our products. Prepare for a lot of sparkle emoji.

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

  • ✨ WordPress.com & Jetpack has Jetpack AI Assistant and Write Brief with AI in the block editor
  • ✨ WooCommerce now has AI‑powered code and store management via MCP‑based agents,
  • Telex lets you vibe-code WordPress: turn natural language into fully coded WordPress blocks
  • AI Website Builder helps new users create a complete site by asking a few questions, then automatically generating a starter design, structure, and copy they can edit.
  • ✨ Pocket Casts and Day One experiment with AI‑powered media and journaling: Pocket Casts adds AI‑generated episode transcripts so you can search and skim shows, while Day One offers AI journaling tools like entry and multi‑entry summaries plus image generation.

We got a lot more cooking, but you have to wait for the announcements.

Diverse architectures

The architectures of these features follow the gold rush of the AI era: We shipped what was fast, mostly directly on top of the OpenAI API, and that simplicity proved to be an excellent choice. It allowed us to iterate quickly, find what resonated with users, and integrate new APIs.

What proved to be challenging is not these ad hoc implementations, but when we tried to optimize prematurely. Either using frameworks that we didn’t really need or trying to predict the future by laying foundations for the APIs that never materialized. Future-proofing is a fool’s errand.

Regardless of reasons, we ended up with a few different implementations:

  • Jetpack AI provided WP-Admin integrations in the block editor. It is running in PHP and reaching out to our main server (WordPress.com) for authorization and secret sauce
  • Our support chatbot was a Langchain workflow orchestrator deployed on a Python / Ray cluster, exposed in WordPress.com WP-Admin.
  • Our AI Website builder had logic mostly in React hooks which allowed us to iterate rapidly, but extremely hard to keep stable and consistent.
  • The new Agentic version of our website builder was a docker image running Claude code SDK for more brains / capabilities.

All these choices were locally optimal, but they didn’t provide a cohesive experience and they didn’t reinforce each other.

Why? The AWS Manifesto

Inside Amazon there is this famous internal “API mandate” memo (often called the AWS manifesto): every team must expose its data and capabilities only through well‑defined service APIs, no direct database calls, no backdoors, and the same interfaces must work both internally and externally.

That painful mandate forced Amazon to transition from ad-hoc locally optimal implementation to composable generic services: and once those services existed, it became “obvious” that you could rent them out to the rest of the world as primitives, which is how AWS appeared as a product.

This is the mental model we’re chasing at Automattic: invest in reusable building blocks (sometimes quite literally) so that improving one piece (payments, search, agents, etc.) automatically makes every product better.

I wrote more about this lens in Composability is the only game in town, and we used the same trick when running Tumblr on WooCommerce instead of inventing a one‑off billing stack.

One architecture to rule them all

Yours truly presenting this simple and elegant architecture to the Automattic AI division.
My colleagues appreciated the clarity of my explanation with a flattering meme.

PHP can AI

The most controversial decision we made was to lean into our main stack: run the agentic framework in PHP, next to the rest of WordPress.com complex infrastructure which is WordPress on bare metal, spread around 28 data centers.

Before this, our AI landscape looked more or less like this:

  • Support chatbot: infrastructure based on LangChain, running in a Python service in a Ray cluster.
  • New agentic experiments: an npm‑based Docker container running Claude Code SDK, with Prisma and several Node libraries
  • The rest of our universe: a large, battle‑tested PHP monorepo that powers WordPress.com.

This microservices approach “worked”, but it didn’t generate the flywheel you want in a big product:

  • Harder to adopt: every new AI feature meant touching a different repo, stack, deploy pipeline and security monitoring.
  • More friction for experimentation: the barrier between “I have a cool demo” and “this is live in production” was higher than for “normal” features. In AI demos are easy, but production grade quality is hard.
  • Fragmented observability: logs, metrics, and traces lived in different places, making it harder to reason about an end‑to‑end user journey.

By bringing the agentic layer into PHP, we got:

  • One deployment story: ship AI features like any other feature.
  • Shared abstractions: reuse our existing request lifecycle, auth, permissions, caching, and data access patterns. Our AI workers are powered by every available WPCOM HTTP worker.
  • Closer to the product: agents can talk directly to the same domain objects and services the rest of WordPress.com uses.

Is PHP the “coolest” language for AI? No.

Does it matter when most of the “AI” is an HTTP call to a model and the hard part is orchestration, safety, and product integration? Also no.

What we’re actually building: agents, abilities, and context

Working with AI is really like delegating:

To help People
succeed
To help your AIHow Automattic
does it
You need to empower your teamYou provide toolsWP Abilities
You need to give them space to actYou put it in agentic loopclass.agent.php
You need to give them enough informationYou provide prompt + ContextContext hydration
You listen to their complaintsTracesLangfuse

Or if you really like charts:

graph TB
    subgraph "Frontend"
        CLIENT[Agenttic Client]
        USER[User Input]
        FE_TOOLS[WP_Ability<br/>JS]
        CONTENT[Post Content]
        WPDATA[wp.data]
        CLIENT <--> USER
        CLIENT <--> FE_TOOLS
        CLIENT <--> CONTENT
        CLIENT <--> WPDATA
    end

    subgraph "Backend"
        subgraph "Agent"
            PROMPT[Prompt]
            LOOP[Agentic Loop]
        end
        CTX[Context]
        BE[WP_Ability<br/>PHP]
    end

    LLM[LLM]

    CLIENT <-->|A2A protocol| LOOP
    CTX --> PROMPT
    PROMPT --> LOOP
    LOOP <--> LLM
    LOOP <--> BE

Abilities

You can think of Abilities as something like Agent Skills for WordPress, with bundled tools.

We introduced it into WordPress Core in 6.9 release and this API design was guided by the needs of the infrastructure you are reading about right now.

Abilities are self-contained, ideally stateless workers that perform a task:

  • Like tools, they contain argument schema and callback that actually performs the work
  • Like skills, they contain multiple lengths of description designed to work with progressive disclosure pattern
  • Permission framework directly tying into WordPress capabilities, making them safe to run in both multi-user and multi-tenant environments (aka Multisite)

Abilities API will be WordPress’ moat in the AI world. Products are easy to vibe code nowadays but the ecosystem of connected, tested and safe tooling for AI agents is not.

Frontend Abilities

Regular abilities run in the PHP environment on top of WordPress, with access to database and all WP API.

That is not enough. After rewriting the editor into WordPress blocks, our users expect interactive and snappy experiences in the editor, and that also includes AI interaction.

Abilities API introduces Generative UI via frontend (JS) tools to interact with current WordPress editor canvas.

In our Agentic Framework:

  • If Agent decides to call backend ability, it triggers it and continues the work
  • If it decides to call Frontend ability, the API request sends special trigger and ends
  • If the ability collects data, it sends it to the agent in a new API request

Some examples of Frontend abilities we use for our AI Website builder include:

  • Directly manipulate any block on the currently edited page allowing AI to make targeted content and design edits and previewing them before saving
  • Display a component to collect input in the chat session – pick font, color scheme,
  • Redirect to a page which we use in our support experience
  • Write data to WordPress Data entities, allowing user to preview global website changes before saving them to the database

Agents

Under the hood, LLM agents are just LLMs in a loop calling tools. Yes, I am tired of the hype too.

  1. In marketing speak, agent implies that it’s gonna do everything for you, work independently and require no supervision.
  2. In practice, we call everything that has a loop an agent.

And you know what? As models are getting better, both of these are true.

Source via Simon Willison

As I mentioned – we started by implementing Agents on top of Claude Code SDK, but that proved challenging to orchestrate at our scale. We replaced it with a 3-component class.agent.php

  • It has a list of abilities it can call
  • It has a prompt (configured for dynamic context injection)
  • It has a loop

Are you ready for a secret Automattic Agentic Loop™️ ?

/**
 * Run the agent on the specified backscroll. This will call tools if needed, and loop until the agent is done.
 *
 * @param Message[] $user_backscroll List of messages representing the conversation history.
 * @return Message[]|WP_Error The conversation history with the agent's responses appended, or an error on failure.
 */
public function run( array $user_backscroll ): array|WP_Error {
	$max_loops = $this->max_loops;
	$this->log_pre_run( $user_backscroll, $max_loops );
	$tool_results = array();
	do {
		--$max_loops;
		$response = $this->complete_backscroll( $user_backscroll );
		$tool_results = array();
		$user_backscroll = array_merge( $user_backscroll, $response );
		foreach ( $response as $message ) {
			if ( $message instanceof Tool_Call ) {
				$this->log_tool_call( $message );
				$tool_result = $this->call_tool( $message );
				$this->log_tool_call_result( $message, $tool_result );
				$user_backscroll[] = $tool_result;
				$tool_results[]	    = $tool_result;
			} else {
				$this->log_updates_callback( $message );
			}
		}
	} while (
		$max_loops > 0
	&&
		! empty( $user_backscroll )
	&&
		self::get_last_message( $user_backscroll )->should_resubmit()
	);
	$this->log_after_run( $user_backscroll );
	return $user_backscroll;
}

Where is the reasoning and intelligence?

Ah! Surely you are thinking of our secret thinking ability!

'execute_callback'    => function ( array $input ): string {
	// The incredible thinking tool works like a rubber duck.
	// It forces the LLM to verbalize its thinking and just spits it back out.
	return $input['thoughts'];
},

We are still using non-reasoning models for some tasks and when we need to add reasoning, we just add this incredible ability and the output improves. I added it as a joke and it just… works 🤷

Prompt engineering is really context engineering

We discussed tools and agents, but we also have a spin on prompt management. All our prompts run through a home-grown hydration phase where a templating engine that injects dynamic context into prompt templates. This can be:

  • User purchases
  • Site title
  • Shape of buttons on a site
  • Preferred image style for image generation
  • 100s of other variables

The context gets lazy-loaded at execution time. Every time we encounter [[site.current_site.title]], we retrieve the current title from the database and so on.

That way we can focus on fine-tuning prompts – for example our support chatbot has immutable configurations stored in the database that our support staff keeps tweaking daily.

Orchestration

This interplay between Abilities, Context and Agents lets us orchestrate a few behaviors for the framework:

Frontend abilities are dynamically loaded and stateless.

While initiating the request to the agent, the frontend declares available frontend abilities, and the agent may choose to use them if available. That way, we can dynamically turn them on/off or make the agent adapt to the context its executed in.

We send client context to our context system

When loaded in Gutenberg canvas, Agent gets:

  • Current WordPress block tree
  • Metadata about current session
  • Current URL

This gets loaded into the context system, allowing agent to have full visibility into data on the frontend, despite running in the PHP environment.

Minimizing API roundtrips

Agent by default runs as an HTTP request serving JSON-RPC data stream per A2A protocol. Each user request typically initiates a new server round-trip and:

  • Backend (PHP) abilities run, report to agent and continue agent execution
  • Frontend abilities:
    • Can derive trigger actions on the frontend without stopping the execution when they don’t have return data. For example, we can trigger a “Processing” state on certain Gutenberg blocks asynchronously and continue the agent execution
    • Can stop execution, trigger frontend code and automatically trigger a new request with the result. This is the case for navigation for example.
    • Can stop execution and wait for user input – like choosing a desired color scheme – and continue execution after.

We keep track of “Dirty entities”

Context system is integrated with wp.data entity framework. When agent is operating on a surface with “pre-save panel”, like Gutenberg canvas:

  1. Agent changes data using edit_entity ability
  2. No changes are persisted to database until save is confirmed by the user
  3. The edited entities are marked as “dirty” and their current state is sent back to the Agent on subsequent requests.
    That way:
  4. Agent thinks it has made a change on all subsequent requests but the user is yet to confirm it
  5. Context system acts as if user has made that change allowing model to execute complex multi-step queries and user having full control and preview over individual changes.

When agent is loaded in a non-interactive environment, then the changes are persisted straight to the database if permitted.

Other implementation details

  • The agents are exposed to the frontend via a forked version of the A2A protocol. We added:
    • Reporting of available frontend tools
    • Images and file data parts
  • We had to write our own eval framework to work on entire agents, verifying their tool calls in multiple turns. There is a huge gap in market offering, since most eval systems are testing single prompts,
  • We introduced extremely lightweight abstraction over AI messages – Message, Tool_Call, Tool_Call_Result and Input_Required_Tool_Call_Result which simplified and abstracted provider quirks.
    I think WP Core needs something like this too, but it’s a slippery slope and you end up shipping too many assumptions in your framework bits before an AI provider breaks your mental model on next release.
  • We have a whole package called Agenttic-UI and Agenttic-Client for frontend interaction
  • Back in 2023 I introduced a lib/openai that routes entire AI traffic on WPCOM (including other providers) and it remains surprisingly useful and durable despite being extremely dated. I recommend centralizing your AI comms so you can have last line of defense for unexpected behavior.
  • For more guided agentic behaviour, we have a very robust Workflow multi-step implementation similar to Langchain, but native to class.agent.php and the rest of presented framework.

On-demand Framework design

There ain’t no rules around here. We’re trying to accomplish something

Thomas Edison

Capabilities, products, needs and approaches in AI are evolving every week and it is very hard to tell where the next big idea is coming from. To reiterate my point from the beginning: the biggest challenge in AI is staying flexible enough to adapt to the torrent of changes but still provide a framework to quickly ship actual products people use. This entire framework has been built by

  • Catering to the next immediate need,
  • Boiling it down to the most pragmatic and minimal approach,
  • Comparing the need across all product needs
  • Shipping implementation as part of product work
  • Picking it up in other product teams.

There are no AI architects sitting on their high chairs. There is a bunch of engineers doing messy product work and trying to not reinvent the wheel. Huge kudos to my pragmatic coworkers Emdash, Glen Davies, Stephane Thomas, Chris Blower, Ovidiu Galatan, Aaron Fas, Derek Smart, Gziolo and many, many others!

Cool Stuff from 2025

Every January I compile a list of things and experiences that impressed me during the past year. See the 2024 here.

House

After years of preparations, the paperwork has been approved. We promptly tore down the old house to make a place for the new one:

The first floor of the new house in that same exact spot:

Extending the old construction was out of the question, and extremely painful to maintain. Building a new building in its place was the smartest choice, but seeing the old one demolished was a very moving experience.

It is very hard to build, very easy to tear down.

As a sidenote, one of the weirdest hurdles I had to deal with is the Notary who prepared my paperwork deciding to poison her business partner. Yes, you are reading that right.

RV

RV is the gift that keeps on giving, especially with kids. Learning from last year experiences, we coordinated with other families and it was awesome.

Sweden

Our friends from kids’ preschool were going to Sweden on an RV trip and of course – we had to seize that opportunity. The children had great fun together, we all swam in plenty of lakes, visited Astrid Lindgren’s World (highly recommended with kids) and checked out my University in Kristianstad where I studied for half a year.

Sweden is super easy in an RV – there is plenty of space and you don’t have to book anything. The south is missing mountains, but it’s getting beautiful closer to Norway.

Austria & Garda

Its almost a tradition that every year we try venture into the southern Europe but we get held up in Austria and Lake Garda, and this year it was the case too. However this year – it was on purpose. We met up with friends (and inspiring strangers) from Travelling Village. You should check out what they are up to.

Thanks to AI coding agents I was able to do quite a bit of work while enjoying life – I would spend my focus time outlining the tasks to agents, spin up 3 or 4 of them in tmux sessions and go hike or spend time with kids. It was stressful, but doable.

In the Ötztal valley, you can find Oztal birds of Prey park where giant birds (including Hedwig apparently) are flying over your head

Lucha Libre

Lucha Libre is like American Wrestling, but you know, a little less classy and a little bit more over-the-top. It embraced the cringe and kitsch fully and turned it all into great fun. Compared to other “experiences” this year, I enjoyed it more than Broadway and a Michelin 2-star restaurant (Pujol) we visited with colleagues.

I am trying to find culturally appropriate way to say that you know stuff is serious when the midgets step in and I am failing. Clearly, in Mexico they don’t care.

AI Coding

AI coding is a thing now. I started the year using tab completion and delegating tasks to AI with very mixed success, and now I am ship entire features in giant repositories without typing a single line of code by hand.

This dramatic workflow change is mostly due warp speed improvements in model capabilities and tooling, but it’s also a muscle that you have to train. Some articles that helped me the most are:

These are probably a bit outdated (10 months is forever in AI time), but introduced me to a new way of working.

Self hosting

AI takes the tedious of self-hosting. Previously I was reluctant to deal with debugging docker build parameters, certificates, toolchains and figuring out new fresh hell on my free afternoon.

Now, I can just drop the error message to ChatGPT and get step-by-step instructions to get the tool running, or even better – I can run claude code locally to fix stuff for me. AI is lowering the barrier to entry not only for code, but for devops too!

Here is the new stuff I am self-hosting on my QNAP NAS:

n8n

N8N is an Open-Source version of Zapier. It connects all your services and serves as “glue” between them. Here, for example is my tweet scheduler that will post anything I put in a special Evernote notebook (as a sidenote, I had to implement Evernote N8N Node for this):

In Why do you have so many bots? I described some of my personal infrastructure that I am currently porting to n8n. Self-hosting n8n allows me Claude Code to write new nodes for missing functionality, all the API keys are stored on a machine in my closet.

Plex

Plex is a media center manager akin to a private Netflix. It syncs playback state across different devices and makes it easy to manage your media library.

I resisted this one for a long time, because I don’t want to make it easier to watch movies, but I treat it as private Netflix for the kids. Both Youtube kids and Netflix are pushing absolute garbage despite parental settings, so I locked down a curated experience with a few quality options.

And for me, it makes it much easier to stream movies to Oculus since official Netflix app has 480p resolution (backstory).

MCP

MCP is a protocol for providing context to AI models, promising interoperability between AI clients and services you use. It enjoyed tremendous popularity in the middle of the year, which resulted in widespread adoption – WordPress.com released an MCP server too, and new ChatGPT Apps protocol is based on MCP.

It is genuinely useful in connecting consumer products, but now there are other options for dev tooling – particularly Skills and CLI tools.

I am drafting a post about analogies between MCP and WEB3.

Voice Mode

Voice input is finally good and has been for a while. The trick we were missing all these years is voice recognition (like whisper model) combined with post processing with an LLM or a multimodal model. The bigger blocker seems to be “ick factor” of talking to a computer like a crazyman mumbling to himself.

I don’t find voice input particularly useful in writing – I am thinking at roughly my typing speed.

Where voice input shines is dumping context:

  • Describing task to an AI coding agent via voice makes it super fast and ALSO makes you share more context – win-win. Plus typos don’t matter because AI is gonna process it anyway.
  • It is solving my particular pain point on Slack on the go: Most of my timezone overlap with colleagues happens during my evenings when I’m at the gym of dealing with kids. Being able to brain dump into a phone while sounding semi-coherent is super useful
  • I am able to talk much much faster when there is no human on the other end.

On my mac I am using superwhisper, although it’s expensive and subscription does not make sense. I will find other solution (sotto?) when my cycle is up. On my iPhone I have this DIY iOS shortcut.

I think there are a lot of cool applications of voice input/output that we haven’t yet seen in products.

Evernote N8N Node

I created an Open Source N8N node for Evernote. You can install it on your instance using “Community Nodes” functionality.

N8N

N8N is like an open source version of Zapier. You connect nodes, give credentials and it can execute tasks. Most importantly, you can install it on your own server and the credentials will not leave your computer.

Community Nodes

Because N8N can run locally on your computer, there is a way to install any compatible NPM package, which unlocks custom code running on your N8N instance.

You can browse all community nodes here

Evernote Node

Since I use Evernote heavily for personal productivity, I really wanted to utilize it in my workflows.

I published the node in this Github repository

What does it do?

It exposes following actions

  • Create Note
  • Delete Note
  • Get Note contents
  • Search Notes
  • Update Note
  • List Notebooks
  • List tags

Listing Notebooks

Searching notes

Creating a note

Installation

This will only work on self hosted n8n instances because it is running custom code

Go to the “Community Nodes”

In the “Install community nodes” paste:

n8n-nodes-evernote

Credentials

You will need to get a Developer token for your Evernote account. You can get them here.

You’re done! The code is here.