<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Santiago yie</title>
    <description>The latest articles on DEV Community by Santiago yie (@yielab).</description>
    <link>https://dev.to/yielab</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4004292%2Fe2c5f7b0-c467-4b41-a0ed-e6f6396afac6.jpg</url>
      <title>DEV Community: Santiago yie</title>
      <link>https://dev.to/yielab</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yielab"/>
    <language>en</language>
    <item>
      <title>Is Drupal Still a CMS? Its New Role in the Agentic Stack</title>
      <dc:creator>Santiago yie</dc:creator>
      <pubDate>Wed, 19 Aug 2026 22:15:40 +0000</pubDate>
      <link>https://dev.to/yielab/is-drupal-still-a-cms-its-new-role-in-the-agentic-stack-4mfa</link>
      <guid>https://dev.to/yielab/is-drupal-still-a-cms-its-new-role-in-the-agentic-stack-4mfa</guid>
      <description>&lt;p&gt;For most of its history, Drupal has been easy to describe: a CMS, or for developers, a content management framework.&lt;/p&gt;

&lt;p&gt;That is still true. But in 2026, it is becoming incomplete.&lt;/p&gt;

&lt;p&gt;Through projects such as AI Search, AI Agents, Tool API, and MCP Server, Drupal can now participate in RAG pipelines, expose application capabilities as tools, and allow external AI agents to interact with a site.&lt;/p&gt;

&lt;p&gt;What makes this interesting is not that Drupal suddenly "has AI."&lt;/p&gt;

&lt;p&gt;It is that much of the architecture agents need was already there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drupal already had the hard part
&lt;/h2&gt;

&lt;p&gt;A mature Drupal application already knows how to represent structured entities, relationships, permissions, revisions, workflows, configuration, APIs, and services.&lt;/p&gt;

&lt;p&gt;Drupal doesn't just store documents. It stores &lt;strong&gt;structured domain knowledge together with rules governing what can be done with it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the emerging agentic stack, that maps surprisingly well to three concepts: &lt;strong&gt;context, skills, and tools&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Drupal content can become &lt;strong&gt;context&lt;/strong&gt;. AI Search can retrieve relevant entities through semantic search and feed them into RAG pipelines.&lt;/p&gt;

&lt;p&gt;Drupal capabilities can become &lt;strong&gt;tools&lt;/strong&gt;. Tool API can expose operations such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search_content(query)
create_article(data)
publish_content(entity_id)
create_taxonomy_term(vocabulary, name)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And higher-level combinations of tools, instructions, and domain rules can become something closer to &lt;strong&gt;skills&lt;/strong&gt;: reusable capabilities for operating a particular Drupal application.&lt;/p&gt;

&lt;p&gt;But there is another piece: the &lt;strong&gt;harness&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drupal doesn't have to be the agent
&lt;/h2&gt;

&lt;p&gt;This distinction matters.&lt;/p&gt;

&lt;p&gt;An agent is more than an LLM with access to some tools.&lt;/p&gt;

&lt;p&gt;The harness is the runtime around the model: the system that decides what context to provide, which tools are available, how many steps the agent can take, how failures are handled, when human approval is required, and when execution should stop.&lt;/p&gt;

&lt;p&gt;That harness might live in an external coding agent, an automation platform, or a custom agent built with something like LangGraph.&lt;/p&gt;

&lt;p&gt;Drupal can sit underneath it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             Agent Harness
                  │
       ┌──────────┼──────────┐
       ↓          ↓          ↓
    Context     Skills      Tools
       │          │          │
       └──────────┼──────────┘
                  ↓
                 MCP
                  ↓
                Drupal
          ┌───────┼────────┐
          ↓       ↓        ↓
       Content  Actions  Permissions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where Drupal's role becomes more interesting.&lt;/p&gt;

&lt;p&gt;Drupal does not need to replace the agent framework.&lt;/p&gt;

&lt;p&gt;It can become the &lt;strong&gt;governed environment the agent operates against&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  From CMS to context engine
&lt;/h2&gt;

&lt;p&gt;Drupal's AI Search project integrates embeddings and vector search with Search API.&lt;/p&gt;

&lt;p&gt;A Drupal site can therefore expose its structured content as semantic context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Drupal entities
      ↓
Search API
      ↓
chunking + embeddings
      ↓
vector database
      ↓
semantic retrieval
      ↓
agent context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For organizations whose authoritative information already lives in Drupal, this removes an awkward duplication.&lt;/p&gt;

&lt;p&gt;Instead of maintaining Drupal as the CMS and building an entirely separate knowledge system for AI, Drupal itself can participate in the retrieval architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  From APIs to agent skills
&lt;/h2&gt;

&lt;p&gt;The other direction is action.&lt;/p&gt;

&lt;p&gt;Tool API allows Drupal operations to be represented as structured capabilities. MCP Server can then expose those capabilities to external MCP-compatible agents.&lt;/p&gt;

&lt;p&gt;An external agent could discover that a Drupal application provides tools for searching content, managing taxonomy, creating drafts, or triggering workflows.&lt;/p&gt;

&lt;p&gt;The harness decides &lt;strong&gt;when&lt;/strong&gt; to use them.&lt;/p&gt;

&lt;p&gt;Drupal decides &lt;strong&gt;whether the operation is allowed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That separation is important.&lt;/p&gt;

&lt;p&gt;Giving an LLM unrestricted database access is easy. Giving an agent a small set of explicit, permission-aware capabilities is much safer.&lt;/p&gt;

&lt;p&gt;And this is where some of Drupal's old complexity suddenly becomes valuable.&lt;/p&gt;

&lt;p&gt;Entities, permissions, revisions, moderation, workflows, plugins, and configuration were originally designed to control what humans could do.&lt;/p&gt;

&lt;p&gt;Now the same architecture can help control what &lt;strong&gt;agents&lt;/strong&gt; can do.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, what is Drupal now?
&lt;/h2&gt;

&lt;p&gt;Drupal is still a CMS.&lt;/p&gt;

&lt;p&gt;It is not suddenly a replacement for LangGraph, an agent runtime, or a general-purpose Agent SDK.&lt;/p&gt;

&lt;p&gt;A more useful description is that Drupal is becoming a possible &lt;strong&gt;application and governance layer in the agentic stack&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Drupal entities     → context
AI Search           → retrieval
Tool API            → tools
Domain workflows    → skills
Permissions         → governance
MCP                 → interoperability
External runtime    → harness
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;Humans see pages, fields, forms, and workflows.&lt;/p&gt;

&lt;p&gt;Applications see APIs.&lt;/p&gt;

&lt;p&gt;LLMs see context.&lt;/p&gt;

&lt;p&gt;Agents see tools and skills.&lt;/p&gt;

&lt;p&gt;The harness sees an environment it can operate.&lt;/p&gt;

&lt;p&gt;Drupal spent more than two decades building systems for structured knowledge, permissions, workflows, and controlled operations. AI agents now need many of those same things.&lt;/p&gt;

&lt;p&gt;So perhaps the interesting question is no longer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Is Drupal still a CMS?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Could a CMS become the governed application layer behind AI agents?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drupal is starting to make a surprisingly strong case that it can.&lt;/p&gt;

</description>
      <category>drupal</category>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
    </item>
    <item>
      <title>I rewrote my AI-agent tool from Bash to Python. That was the easy doubt.</title>
      <dc:creator>Santiago yie</dc:creator>
      <pubDate>Thu, 16 Jul 2026 18:27:14 +0000</pubDate>
      <link>https://dev.to/yielab/i-rewrote-my-ai-agent-tool-from-bash-to-python-that-was-the-easy-doubt-4n9n</link>
      <guid>https://dev.to/yielab/i-rewrote-my-ai-agent-tool-from-bash-to-python-that-was-the-easy-doubt-4n9n</guid>
      <description>&lt;p&gt;There are, conservatively, nine thousand tools for running AI agents across your projects. This is number nine thousand and one. I know. Stay a second anyway.&lt;/p&gt;

&lt;p&gt;Eighteen years of backend work, most of it PHP, most of it through agencies — which is a polite way of saying I've spent my career as a line item in someone else's staffing spreadsheet. Several projects at once, different clients, different timezones, "resource" being the official word for what I am on a good invoicing day. So when AI agents got good enough to do real work, I didn't wonder whether one could write code. I wondered how I'd wrangle a whole fleet of them across projects — which, I eventually noticed, is me trying to become the manager of a little spreadsheet of resources, after eighteen years of being one. The snake found its tail. I built it anyway.&lt;/p&gt;

&lt;p&gt;Docket, then: a control plane for running OpenClaw agents across projects, made with heavy AI assistance on purpose — the point was to close my own gaps, not to prove I could type from memory. It started as a Bash CLI; it's now a tested Python package. On GitHub, beta, link at the bottom. This is me thinking out loud in public, not selling you anything.&lt;/p&gt;

&lt;p&gt;And somewhere in that rewrite, the doubt everyone expected me to have — is Bash the right language? — died, and a worse one took its place. That worse one is what this piece is actually about. Let me get there honestly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I aimed for, not what I mastered&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I want to say this before the vocabulary makes me sound like I know more than I do. I did not sit down understanding context isolation, or git worktrees per agent, or anti-corruption layers. I sat down wanting clean, stable, maintainable, tested code — and I steered an AI toward that shape until it held together.&lt;/p&gt;

&lt;p&gt;The shape is real. My grip on every part of it is not the same.&lt;/p&gt;

&lt;p&gt;What the shape does, plainly: OpenClaw is a local-first agent daemon, great at running one agent. Run a fleet and you hit problems it doesn't solve. Docket runs pods — a Lead that owns context and talks to me but never touches code, an Implementer that does, optionally a Reviewer and Tester. Each project is walled off from the others. Each agent has a hard spend cap that pauses it when the money runs out. Nothing risky happens without an approval gate.&lt;/p&gt;

&lt;p&gt;That's the honest brochure. It reads like a product. Hold onto that feeling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Doubt 1: is a control plane the right thing for one person?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I answered the Bash question by leaving Bash — no types, error handling by discipline, testing as a craft. Python gave me a safety net Bash structurally can't.&lt;/p&gt;

&lt;p&gt;But what I built is Kubernetes-shaped thinking for a fleet of mostly-me. The people who build this shape are solving real multi-tenant problems. I'm one guy with a handful of projects; I could probably survive on a shell script and some discipline.&lt;/p&gt;

&lt;p&gt;So did the problem need a control plane, or is building a control plane just how you learn control planes? I keep reaching for the flattering answer. I've stopped trusting myself when I do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Doubt 2: is there a use case, when first-party tools are this good?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If Claude Code, Codex, and Antigravity all ship great orchestration, who needs mine? Nobody who lives inside one vendor. Each is a walled garden — Codex to GPT, Claude Code to Claude, Antigravity to Gemini. None will happily run a mixed fleet where the Tester is on a cheap model, the Implementer on Sonnet, and the Lead on a free tier, under one budget and one policy.&lt;/p&gt;

&lt;p&gt;That's the niche. Whether anyone's standing in it is another matter. The story only gets compelling for a team with governance and audit needs — the exact kind of org I'm not, shipping alone. "A real use case" and "a use case with real people in it" turn out to be different claims.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Doubt 3: the tests I trust and the tests I can't write&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The deterministic half is genuinely covered — config, isolation, cost math, gate logic, pinned against the old Bash behavior so the rewrite couldn't quietly change meaning. Coming from PHPUnit, that part was easy.&lt;/p&gt;

&lt;p&gt;The other half: the thing dispatches LLM-driven agents, and LLMs don't return the same answer twice. A unit test works because f(2) is always 4. A Lead → Implementer → Reviewer → Tester run has no such guarantee. Testing that properly — eval harnesses, judge models, regression across the whole pipeline — is a second project the size of the first, and I haven't built it.&lt;/p&gt;

&lt;p&gt;The tested half is the half I know how to be proud of. The untested half is the half that decides whether the thing actually works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Doubt 4: should this be public at all?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Against: chasing a fast-moving daemon is brutal maintenance, I'm adjacent to three of the best-funded eng orgs alive, and a repo with one contributor is a diary with a license file.&lt;/p&gt;

&lt;p&gt;For: nothing forced me to understand a feature like having to defend it in public and write down where it isn't true yet.&lt;/p&gt;

&lt;p&gt;So it stays open — not because I'm sure, but because the reasons for it are ones I believe on good days, and the reasons against are ones I believe at 2am. I ship on the good-day logic and try not to check the star count.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The doubt the other four stand on&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built this with heavy AI assistance, on purpose. So some fraction of what I call understanding is really me having supervised a machine that already understood — well enough to review it, argue with it, throw out the wrong versions. That's not nothing; reviewing well might be the skill now. But it isn't the same weight as the PHP that lives in my hands, and I can't always find the line.&lt;/p&gt;

&lt;p&gt;I'm writing this with the same kind of help. Somewhere in here is a sentence I'd have phrased worse alone, and I've lost the ability to point at it. An essay about not knowing what I learned, co-written with the thing I learned it from. Sit with that. I'm trying to.&lt;/p&gt;

&lt;p&gt;Would I bet my career on Docket becoming the standard? No. Would I build it again? Yes — mostly because I still don't know what I learned, and the only way I can think to find out is to build the next one with less help, and see what falls over.&lt;/p&gt;

&lt;p&gt;So here's the door. If you run OpenClaw fleets and this problem is already yours — the mixed-vendor mess, the budget that quietly runs away from you — come look, and come break it. I'd rather hear where it falls over from you than find out alone at 2am. The repo's below.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Docket is open source (Apache 2.0, beta) at &lt;a href="https://github.com/yielab/docket" rel="noopener noreferrer"&gt;github.com/yielab/docket&lt;/a&gt;. Independent project, not affiliated with OpenClaw or the OpenClaw Foundation.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openclaw</category>
      <category>python</category>
      <category>agents</category>
    </item>
    <item>
      <title>The AI Agent Solved Drupal's Easy Problem. Nobody Asked About the Hard One.</title>
      <dc:creator>Santiago yie</dc:creator>
      <pubDate>Tue, 14 Jul 2026 13:50:48 +0000</pubDate>
      <link>https://dev.to/yielab/the-ai-agent-solved-drupals-easy-problem-nobody-asked-about-the-hard-one-e05</link>
      <guid>https://dev.to/yielab/the-ai-agent-solved-drupals-easy-problem-nobody-asked-about-the-hard-one-e05</guid>
      <description>&lt;p&gt;Drupal now has an AI agent that builds your site by chat. Type a sentence, it wires up a field, spins up a content type, configures a view. Stuff that used to eat an entire afternoon of clicking through admin screens now happens in a chat bubble.&lt;/p&gt;

&lt;p&gt;Very slick. Very "the future is here."&lt;/p&gt;

&lt;p&gt;It also requires PHP 8.1.&lt;/p&gt;

&lt;h2&gt;
  
  
  The version number is the whole story
&lt;/h2&gt;

&lt;p&gt;That requirement is Drupal's extremely polite way of saying: this feature is not for you, specifically, if the institution you work with is still running software from the Obama administration. Drupal 7 shipped in 2011. PHP 8.1 didn't show up for another decade. If you've spent any time around government, nonprofit, or higher-ed Drupal installs, you already know exactly which sites that excludes — and it's not a small number.&lt;/p&gt;

&lt;p&gt;So there's an immediate, practical split: newer Drupal 10/11 sites on modern PHP get a genuinely useful productivity tool. Everyone still running Drupal 7 or an early 8, which in my experience is a &lt;em&gt;lot&lt;/em&gt; of institutions, gets nothing from this except one more reason the upgrade gap keeps widening.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the agent is actually good at
&lt;/h2&gt;

&lt;p&gt;Here's the part worth sitting with, though. The agent is genuinely good at the part of Drupal work that was always the boring part — field wiring, content type scaffolding, boilerplate views. That's real. I'm not being sarcastic about the "slick" part.&lt;/p&gt;

&lt;p&gt;Which leaves the developer doing migration work holding exactly the part that was never really teachable: the instinct for which piece of a fifteen-year-old install is load-bearing, and which is scar tissue nobody removed. That instinct comes from having broken things on production sites, or from having read someone else's undocumented &lt;code&gt;hook_update_N()&lt;/code&gt; at 2am and had to reverse-engineer why it exists.&lt;/p&gt;

&lt;p&gt;Either that's the most secure seat in the room right now — the work an agent can't touch yet — or it's the last seat left before the room empties out entirely. Hard to tell which, from inside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision that got harder, not easier
&lt;/h2&gt;

&lt;p&gt;Meanwhile the institutions I work with aren't just choosing between Drupal versions anymore, which is its own quiet shift. Migrate to 10 or 11, sure. But also: stay in the Drupal family at all, or take the "rip it out" option and leave for WordPress, or go static, or hand the whole thing to a headless setup an AI agent can plausibly assemble.&lt;/p&gt;

&lt;p&gt;And underneath that, a second question nobody used to ask out loud: pay the traditional agency's markup, or hire a handful of contractors directly and coordinate it yourself, now that an AI assistant can plausibly do the project-management glue work an agency used to justify its cut with.&lt;/p&gt;

&lt;p&gt;More options, more tools, more paths that technically work. And somehow the actual decision is harder to make than when there was just one obvious next version to upgrade to.&lt;/p&gt;

&lt;p&gt;Dries Buytaert — Drupal's founder — &lt;a href="https://dri.es/do-ai-coding-agents-recommend-drupal-2026" rel="noopener noreferrer"&gt;ran an experiment recently&lt;/a&gt; asking an AI coding agent to recommend a CMS stack for a typical institutional project. Drupal's structured content model and explicit APIs should be exactly what an agent wants. But the agent flagged something it called "session-time risk" — too much friction in the first hour of getting a working, verifiable site up. Capability wasn't the blocker. The first-session experience was. That's a strange new axis to be judged on, and it's not one any of us were optimizing for a few years ago.&lt;/p&gt;

&lt;p&gt;I don't know if that's a Drupal problem specifically, or just what "too much change, arriving all at once" does to any institution — regardless of which CMS, or which staffing model, happens to be running underneath it.&lt;/p&gt;




&lt;p&gt;Curious whether other people doing long-running CMS/migration work — Drupal, WordPress, whatever — are seeing the same shift: not "will AI replace X," but "the menu of options got long enough that choosing well is now the hard part." What does that look like from inside a WordPress shop, or an agency that isn't CMS-specific at all?&lt;/p&gt;

</description>
      <category>drupal</category>
      <category>ai</category>
      <category>wordpress</category>
      <category>architecture</category>
    </item>
    <item>
      <title>My roommate partied all night in Rio. I ended up building local-first JS on the stairs.</title>
      <dc:creator>Santiago yie</dc:creator>
      <pubDate>Tue, 30 Jun 2026 19:10:40 +0000</pubDate>
      <link>https://dev.to/yielab/my-roommate-partied-all-night-in-rio-i-ended-up-building-local-first-js-on-the-stairs-3lm8</link>
      <guid>https://dev.to/yielab/my-roommate-partied-all-night-in-rio-i-ended-up-building-local-first-js-on-the-stairs-3lm8</guid>
      <description>&lt;p&gt;2012, Rio de Janeiro, Carnival week. I was playing digital nomad before that was a phrase anyone used — staying in a rented room, splitting it with a roommate who was still asleep at noon because the whole night had been spent out celebrating. Couldn't work inside without waking him up, so I took the laptop out to the staircase of the building instead. Client was in Bogotá: an equipment rental company whose reps needed to build quotes on the spot at venues with no WiFi. So the catalog, the pricing logic, the whole quote state lived in the browser — no server round-trip per calculation, just local storage doing the persistence. Local-first before "local-first" was a name anyone used for it. App itself was hosted on Heroku for whenever a connection did show up.&lt;/p&gt;

&lt;p&gt;Samba through the wall the whole time. Carnival two blocks away. I tested it with my own WiFi off to make sure it actually held up with zero connection, then sent the client setup instructions for their reps and called it done.&lt;/p&gt;

&lt;p&gt;Looking back, I'm not sure how much of that was a real engineering challenge and how much was just the tools of the time being clunky for something that's almost trivial now — local-first patterns are basically a checkbox in a lot of frameworks today, and I genuinely don't know if an agent would've had this solved in twenty minutes flat. Maybe the staircase was the hard part, not the code.&lt;/p&gt;

&lt;p&gt;Anyone else have a "the deadline did not care what was happening outside" story?&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>career</category>
      <category>watercooler</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
