<?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: Gregory Shevchenko</title>
    <description>The latest articles on DEV Community by Gregory Shevchenko (@gshevchenko).</description>
    <link>https://dev.to/gshevchenko</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3949227%2Fd67b0ec3-fbe1-40e7-8347-e5c96ad08bf4.jpg</url>
      <title>DEV Community: Gregory Shevchenko</title>
      <link>https://dev.to/gshevchenko</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gshevchenko"/>
    <language>en</language>
    <item>
      <title>Marketing agents need workflow boundaries, not better prompts</title>
      <dc:creator>Gregory Shevchenko</dc:creator>
      <pubDate>Mon, 08 Jun 2026 12:30:47 +0000</pubDate>
      <link>https://dev.to/gshevchenko/marketing-agents-need-workflow-boundaries-not-better-prompts-199k</link>
      <guid>https://dev.to/gshevchenko/marketing-agents-need-workflow-boundaries-not-better-prompts-199k</guid>
      <description>&lt;p&gt;On June 6, 2026, I spent the day at Profound HQ in New York City as a selected participant and solo builder at the Marketing Engineering Hackathon.&lt;/p&gt;

&lt;p&gt;I wrote the canonical field note here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gregshevchenko.com/notes/marketing-engineering-hackathon-nyc/" rel="noopener noreferrer"&gt;Profound Marketing Engineering Hackathon field note&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This DEV.to version is the builder-facing essay. The Medium version is more reflective. This one is about the operating lesson I took from the room:&lt;/p&gt;

&lt;p&gt;Marketing agents do not become useful because they produce better paragraphs.&lt;/p&gt;

&lt;p&gt;They become useful when they run a bounded workflow with clear inputs, preserved evidence, explicit review gates, and a measurement loop.&lt;/p&gt;

&lt;p&gt;That sounds less flashy than "autonomous marketing agent."&lt;/p&gt;

&lt;p&gt;It is also the part that actually matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hackathon prompt was the useful constraint
&lt;/h2&gt;

&lt;p&gt;Profound framed the day around a sharp build prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find a marketing process that's inhuman in scope or scale, and ship a system or agent that runs it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a better prompt than "build an AI marketing tool."&lt;/p&gt;

&lt;p&gt;It forces you to stop thinking in artifacts and start thinking in systems.&lt;/p&gt;

&lt;p&gt;A blog post is an artifact. A dashboard is an artifact. A generated brief is an artifact.&lt;/p&gt;

&lt;p&gt;The real question is different.&lt;/p&gt;

&lt;p&gt;What process produces that artifact?&lt;/p&gt;

&lt;p&gt;What evidence does it depend on?&lt;/p&gt;

&lt;p&gt;What state does it need to remember?&lt;/p&gt;

&lt;p&gt;Where should a human approve the next step?&lt;/p&gt;

&lt;p&gt;That distinction is where a lot of marketing-agent work breaks.&lt;/p&gt;

&lt;p&gt;Many systems are built around a single impressive output. They can generate a landing page, a report, a campaign idea, or a polished draft.&lt;/p&gt;

&lt;p&gt;But when you ask what happens before and after the output, the system gets blurry.&lt;/p&gt;

&lt;p&gt;Where did the sources come from?&lt;/p&gt;

&lt;p&gt;Which claims were allowed?&lt;/p&gt;

&lt;p&gt;What changed since the previous run?&lt;/p&gt;

&lt;p&gt;What happens when evidence is weak?&lt;/p&gt;

&lt;p&gt;Who decides whether draft becomes publish?&lt;/p&gt;

&lt;p&gt;If the agent cannot answer those questions, it is not a workflow yet.&lt;/p&gt;

&lt;p&gt;It is a demo with a nice ending.&lt;/p&gt;

&lt;h2&gt;
  
  
  AEO/GEO is a workflow problem
&lt;/h2&gt;

&lt;p&gt;My work is mostly around AEO/GEO, AI Search visibility, ContentOS, and marketing agents.&lt;/p&gt;

&lt;p&gt;AEO and GEO are often described as tactics for getting cited by answer engines.&lt;/p&gt;

&lt;p&gt;That includes ChatGPT Search, Perplexity, Google AI Overviews, Gemini, Claude, Copilot, and other AI search surfaces.&lt;/p&gt;

&lt;p&gt;That description is useful, but incomplete.&lt;/p&gt;

&lt;p&gt;If the job is only "write pages that AI systems might cite," then the solution sounds like a content checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;answer the question clearly&lt;/li&gt;
&lt;li&gt;mention the right entities&lt;/li&gt;
&lt;li&gt;add schema&lt;/li&gt;
&lt;li&gt;publish on trusted surfaces&lt;/li&gt;
&lt;li&gt;build topical authority&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of that helps.&lt;/p&gt;

&lt;p&gt;But the real operating problem is larger.&lt;/p&gt;

&lt;p&gt;An AEO/GEO workflow has to answer the same questions repeatedly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which buyer prompts matter?&lt;/li&gt;
&lt;li&gt;Which engines and regions are being checked?&lt;/li&gt;
&lt;li&gt;Which answers mention us?&lt;/li&gt;
&lt;li&gt;Which answers cite competitors instead?&lt;/li&gt;
&lt;li&gt;Which third-party sources are winning?&lt;/li&gt;
&lt;li&gt;Which first-party pages are strong enough to deserve citation?&lt;/li&gt;
&lt;li&gt;Which claims need more proof?&lt;/li&gt;
&lt;li&gt;Which source gaps should become pages, docs, case studies, decks, or partner mentions?&lt;/li&gt;
&lt;li&gt;What changed after the last publishing cycle?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not one content task.&lt;/p&gt;

&lt;p&gt;It is an evidence pipeline.&lt;/p&gt;

&lt;p&gt;And once you see it that way, the right architecture changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The useful unit is a packet, not a post
&lt;/h2&gt;

&lt;p&gt;For AI Search visibility, I do not think the useful unit is "an AI-written article."&lt;/p&gt;

&lt;p&gt;The useful unit is a packet.&lt;/p&gt;

&lt;p&gt;A good packet contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the prompt set&lt;/li&gt;
&lt;li&gt;the current answer snapshots&lt;/li&gt;
&lt;li&gt;the cited-source analysis&lt;/li&gt;
&lt;li&gt;the competitor/source gaps&lt;/li&gt;
&lt;li&gt;the claim inventory&lt;/li&gt;
&lt;li&gt;the approved source pack&lt;/li&gt;
&lt;li&gt;the canonical page or distribution asset&lt;/li&gt;
&lt;li&gt;the human review decision&lt;/li&gt;
&lt;li&gt;the follow-up measurement window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The article is only one output inside that packet.&lt;/p&gt;

&lt;p&gt;That framing makes the agent easier to design.&lt;/p&gt;

&lt;p&gt;Instead of asking an agent to "do marketing," you can give it a bounded job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect this prompt set&lt;/li&gt;
&lt;li&gt;classify cited sources&lt;/li&gt;
&lt;li&gt;find missing first-party answers&lt;/li&gt;
&lt;li&gt;draft a source-backed brief&lt;/li&gt;
&lt;li&gt;check unsupported claims&lt;/li&gt;
&lt;li&gt;prepare a human approval packet&lt;/li&gt;
&lt;li&gt;schedule remeasurement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each step has inputs.&lt;/p&gt;

&lt;p&gt;Each step has outputs.&lt;/p&gt;

&lt;p&gt;Each step can fail.&lt;/p&gt;

&lt;p&gt;Each step can be reviewed.&lt;/p&gt;

&lt;p&gt;That is boring in the best possible way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Draft is not publish
&lt;/h2&gt;

&lt;p&gt;One rule I keep coming back to:&lt;/p&gt;

&lt;p&gt;Draft is not publish.&lt;/p&gt;

&lt;p&gt;This sounds obvious until you watch teams wire agents straight into external surfaces.&lt;/p&gt;

&lt;p&gt;For marketing operations, the difference between a draft action and a publish action is not cosmetic. It is a trust boundary.&lt;/p&gt;

&lt;p&gt;A draft can be wrong and still be useful.&lt;/p&gt;

&lt;p&gt;A published page with weak sources can become a liability.&lt;/p&gt;

&lt;p&gt;A suggested source gap can be helpful.&lt;/p&gt;

&lt;p&gt;A fabricated claim attached to a brand can damage the source graph you are trying to build.&lt;/p&gt;

&lt;p&gt;This is why marketing agents need permission boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;read-only inspection&lt;/li&gt;
&lt;li&gt;draft generation&lt;/li&gt;
&lt;li&gt;internal review&lt;/li&gt;
&lt;li&gt;human approval&lt;/li&gt;
&lt;li&gt;external publish&lt;/li&gt;
&lt;li&gt;post-publish measurement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those should not be one permission level.&lt;/p&gt;

&lt;p&gt;They should be separate states.&lt;/p&gt;

&lt;p&gt;The agent should know which state it is in.&lt;/p&gt;

&lt;p&gt;The human should know what is being approved.&lt;/p&gt;

&lt;p&gt;The system should keep the evidence trail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The source graph is part of the product
&lt;/h2&gt;

&lt;p&gt;One thing the hackathon clarified for me is that the event record itself should be source-backed.&lt;/p&gt;

&lt;p&gt;The canonical note on my site links to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the public Profound event page&lt;/li&gt;
&lt;li&gt;the kickoff deck&lt;/li&gt;
&lt;li&gt;the official event photo gallery&lt;/li&gt;
&lt;li&gt;the LinkedIn discussion&lt;/li&gt;
&lt;li&gt;the Medium reflection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not just tidy blogging.&lt;/p&gt;

&lt;p&gt;It is a source graph.&lt;/p&gt;

&lt;p&gt;If you want AI systems and humans to understand a person, company, product, event, or case study, the public source graph has to be legible.&lt;/p&gt;

&lt;p&gt;It should say what happened, when it happened, where it happened, what role the person played, and which public sources support the claim.&lt;/p&gt;

&lt;p&gt;That matters for portfolio pages.&lt;/p&gt;

&lt;p&gt;It matters even more for AEO/GEO work.&lt;/p&gt;

&lt;p&gt;If your own site does not make the source of record clear, distribution platforms will compete with your canonical page instead of reinforcing it.&lt;/p&gt;

&lt;p&gt;For AI visibility, that is a structural mistake.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would measure first
&lt;/h2&gt;

&lt;p&gt;If I were turning this into an implementation checklist for a marketing team, I would not start by publishing more pages.&lt;/p&gt;

&lt;p&gt;I would start with a small measurement loop.&lt;/p&gt;

&lt;p&gt;Start small.&lt;/p&gt;

&lt;p&gt;The first version can be simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pick ten buyer prompts&lt;/li&gt;
&lt;li&gt;Run them across one or two answer engines&lt;/li&gt;
&lt;li&gt;Save the answer snapshots&lt;/li&gt;
&lt;li&gt;Record brand mentions separately from citations&lt;/li&gt;
&lt;li&gt;List the cited URLs&lt;/li&gt;
&lt;li&gt;Classify the missing source gaps&lt;/li&gt;
&lt;li&gt;Choose one canonical page to improve or create&lt;/li&gt;
&lt;li&gt;Publish the smallest useful source-backed asset&lt;/li&gt;
&lt;li&gt;Re-run the same prompts after the next crawl window&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That loop changes the work.&lt;/p&gt;

&lt;p&gt;The team is no longer asking, "What should we write next?"&lt;/p&gt;

&lt;p&gt;The team is asking, "Which source gap is blocking a useful answer, and what evidence-backed asset would close it?"&lt;/p&gt;

&lt;p&gt;That is where AEO/GEO starts to feel like engineering.&lt;/p&gt;

&lt;p&gt;Full stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where companies go wrong
&lt;/h2&gt;

&lt;p&gt;The common failure mode is not lack of AI tooling.&lt;/p&gt;

&lt;p&gt;It is unclear ownership of the workflow.&lt;/p&gt;

&lt;p&gt;One team owns content. Another owns SEO. Someone else owns analytics. A founder owns positioning. A freelancer owns distribution. Then an AI tool is dropped into the middle and asked to "make it faster."&lt;/p&gt;

&lt;p&gt;The result is usually more output with the same weak source graph.&lt;/p&gt;

&lt;p&gt;The fix is not to add more prompts.&lt;/p&gt;

&lt;p&gt;The fix is to define the workflow boundary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what question the workflow answers&lt;/li&gt;
&lt;li&gt;which sources it is allowed to use&lt;/li&gt;
&lt;li&gt;which claims require approval&lt;/li&gt;
&lt;li&gt;what output counts as a draft&lt;/li&gt;
&lt;li&gt;what output is allowed to publish&lt;/li&gt;
&lt;li&gt;when the same prompt set gets remeasured&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once that boundary exists, the agent can be useful.&lt;/p&gt;

&lt;p&gt;Without it, the agent only accelerates ambiguity.&lt;/p&gt;

&lt;p&gt;Not because every marketer needs to become a software engineer.&lt;/p&gt;

&lt;p&gt;Because the work needs system boundaries, state, and proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  The standard should be demo, not slideware
&lt;/h2&gt;

&lt;p&gt;The Profound hackathon was judged by demo, not by deck.&lt;/p&gt;

&lt;p&gt;That standard is healthy for marketing AI.&lt;/p&gt;

&lt;p&gt;A slide can hide a missing source.&lt;/p&gt;

&lt;p&gt;A polished paragraph can hide a weak claim.&lt;/p&gt;

&lt;p&gt;A screenshot can hide the lack of retry logic.&lt;/p&gt;

&lt;p&gt;A demo has to show the shape of the system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what goes in&lt;/li&gt;
&lt;li&gt;what comes out&lt;/li&gt;
&lt;li&gt;where state lives&lt;/li&gt;
&lt;li&gt;where evidence is preserved&lt;/li&gt;
&lt;li&gt;where a human decides&lt;/li&gt;
&lt;li&gt;what happens when the proof is weak&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the bar I want for marketing agents.&lt;/p&gt;

&lt;p&gt;Not "can it generate content?"&lt;/p&gt;

&lt;p&gt;"Can it run a bounded part of a real marketing workflow without hiding the evidence?"&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;The best version of marketing engineering is not old growth work with a new title.&lt;/p&gt;

&lt;p&gt;It is a change in the unit of work.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;What content should we publish?&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;p&gt;What marketing process is too large, too evidence-heavy, or too fast-changing to run manually, and what system would make it repeatable without hiding the proof?&lt;/p&gt;

&lt;p&gt;That question is where AEO/GEO gets interesting.&lt;/p&gt;

&lt;p&gt;It is also where marketing agents become useful.&lt;/p&gt;

&lt;p&gt;Not as chatbots.&lt;/p&gt;

&lt;p&gt;Not as content mills.&lt;/p&gt;

&lt;p&gt;As bounded systems that help teams inspect, decide, produce, publish, and measure with a trail a human can trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;Q: Was this a speaking event?&lt;/p&gt;

&lt;p&gt;A: No. My role was selected participant and solo builder. The canonical field note keeps that role explicit because builder participation and speaking should not be collapsed into the same claim.&lt;/p&gt;

&lt;p&gt;Q: Why publish a DEV.to version if the canonical note already exists?&lt;/p&gt;

&lt;p&gt;A: DEV.to reaches a more technical reader. The canonical page records the event and source graph. This version adapts the lesson for people building agents, workflow systems, and AI-search pipelines.&lt;/p&gt;

&lt;p&gt;Q: What is the main engineering lesson?&lt;/p&gt;

&lt;p&gt;A: A marketing agent needs a boundary. It should know its input, state, allowed sources, review point, output type, and measurement loop before it is trusted with real marketing work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Canonical field note: &lt;a href="https://gregshevchenko.com/notes/marketing-engineering-hackathon-nyc/" rel="noopener noreferrer"&gt;Profound Marketing Engineering Hackathon field note&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Medium reflection: &lt;a href="https://medium.com/@GregShevchenko/i-spent-a-day-at-profounds-marketing-engineering-hackathon-it-made-aeo-geo-feel-like-engineering-ed9d1f194835" rel="noopener noreferrer"&gt;I spent a day at Profound's Marketing Engineering Hackathon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Profound event page: &lt;a href="https://university.tryprofound.com/events/marketing-engineering-hackathon" rel="noopener noreferrer"&gt;The Marketing Engineering Hackathon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Profound kickoff deck: &lt;a href="https://drive.google.com/file/d/1LhK_p_1HooNCsASRNZF_E3ar_tP2qv5d/view?usp=sharing" rel="noopener noreferrer"&gt;Profound Hackathon Kickoff&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Official event photo gallery: &lt;a href="https://profoundzeroclick.pixieset.com/hackathon-ny/" rel="noopener noreferrer"&gt;Hackathon NY by Profound&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn discussion: &lt;a href="https://www.linkedin.com/feed/update/urn:li:ugcPost:7469525554149507073/" rel="noopener noreferrer"&gt;Gregory Shevchenko on LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://gregshevchenko.com/notes/marketing-engineering-hackathon-nyc/" rel="noopener noreferrer"&gt;gregshevchenko.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>agents</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I open-sourced the core of how we get clients cited by AI</title>
      <dc:creator>Gregory Shevchenko</dc:creator>
      <pubDate>Sat, 06 Jun 2026 00:46:44 +0000</pubDate>
      <link>https://dev.to/gshevchenko/i-open-sourced-the-core-of-how-we-get-clients-cited-by-ai-4a57</link>
      <guid>https://dev.to/gshevchenko/i-open-sourced-the-core-of-how-we-get-clients-cited-by-ai-4a57</guid>
      <description>&lt;p&gt;Last year I watched an AI engine praise a client in one sentence and cite only their competitors in the next. The client was thrilled to be "mentioned." I was not, because a mention you cannot trace back to your own URL is applause with no door behind it.&lt;/p&gt;

&lt;p&gt;That gap is the whole problem with AI search, and almost nobody is measuring it. A brand mention is when the model says your name. A citation is when it attributes the answer to a page on a domain you own. Mentions feel nice and disappear. Citations compound, because every one sends the engine and the reader back to a property you control.&lt;/p&gt;

&lt;p&gt;We build AI-marketing agents at Humanswith.ai, and we run the same loop for clients every week: measure, produce, optimize, design. This year I open-sourced the core of it. Four small tools, MIT-licensed, no account, no API keys, that are the honest skeletons of the agents inside our hosted Workspace. The Workspace runs the loop at scale. The free tools hand you the method.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — one tool per step:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ai-visibility-probe-lite&lt;/code&gt; — measure mention-share versus citation-share across engines.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;contentos-agent-lite&lt;/code&gt; — write from an eight-gate process with canonical-first distribution.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;aeo-site-audit-lite&lt;/code&gt; — audit the three retrieval gates: fetchable, chosen, extractable.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;brand-card-lite&lt;/code&gt; — generate on-brand social cards from a tokens file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the loop, one tool at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you find the prompts where AI search ignores you?
&lt;/h2&gt;

&lt;p&gt;You find them by running brand-free discovery prompts through the engines and recording who gets named and who gets cited. The first measurement is almost embarrassingly simple: ask the questions your buyers actually type, then read the answers.&lt;/p&gt;

&lt;p&gt;The first tool, &lt;code&gt;ai-visibility-probe-lite&lt;/code&gt;, is a kit for exactly that. You write brand-free discovery prompts, the questions a buyer asks before they have heard of you ("best X for Y," never "is Acme any good?"), run them yourself in ChatGPT, Perplexity, or Gemini, and paste the answers back. It then reports two numbers that most dashboards collapse into one: mention-share, how often the answer named you, and citation-share, how often it cited a URL you own. Brand-free prompts are the discipline here. Asking "is my brand good" measures how the model feels about you, not whether it treats you as a source. [1]&lt;/p&gt;

&lt;p&gt;The first time you run this on your own company, it stings a little. That sting is the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you produce content an AI engine will actually cite?
&lt;/h2&gt;

&lt;p&gt;You produce citable content by writing from a documented process with sources, not from a single prompt. The fastest way to write a page no engine will ever cite is the opposite: paste a topic into a chatbot and ship the first draft. The second tool exists to stop that.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;contentos-agent-lite&lt;/code&gt; is a content agent you run inside your own coding assistant. It writes from a documented process rather than a single prompt, walking eight gates: business context, research, a source pack, a brief, a draft, an editorial pass, a publish-readiness check, and distribution. It will not invent a fact that has no source, which already puts it ahead of most AI writing.&lt;/p&gt;

&lt;p&gt;Its eighth gate is the one teams skip and then pay for. Gate 08 is canonical-first distribution. Before anything ships, it lints the page for the signals that decide whether an engine can fetch and attribute a citation: one canonical URL, one H1, Open Graph tags, Article structured data. Then it drafts the LinkedIn, Medium, and dev.to versions, and every one of them links back to your canonical page. Publish on your own domain first. Make every rented copy point home, so the authority piles up where you own it instead of where you borrow it. [2]&lt;/p&gt;

&lt;h2&gt;
  
  
  Why can a well-written page still go uncited?
&lt;/h2&gt;

&lt;p&gt;A page can be beautifully written and still never get cited, because three gates sit in front of every citation, and most people only ever check the first.&lt;/p&gt;

&lt;p&gt;The third tool, &lt;code&gt;aeo-site-audit-lite&lt;/code&gt;, checks all three. Fetchable: can a crawler reach and index the page (HTTP status, robots and noindex, canonical, structured data). Chosen: among the pages it can reach, why does it pick a competitor (you hand it the URLs an engine cites today, and it classifies the gap as authority, freshness, a competitor's data table, or missing proof). Extractable: once chosen, can it lift a clean answer out (a concise lead answer, headings, schema, lists and tables it can quote in one block).&lt;/p&gt;

&lt;p&gt;Point it at a URL or a local file and you get a scored report and a prioritized fix list. It runs offline, needs no keys, and uses only the Python standard library, so you can read every line before you trust it. [3]&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you keep distributed content on brand?
&lt;/h2&gt;

&lt;p&gt;You keep it on brand by generating every social card from one brand-tokens file, so colors, fonts, and logo stay consistent wherever a post lands. Citable content still has to look like you when it shows up in a feed. The fourth tool, &lt;code&gt;brand-card-lite&lt;/code&gt;, turns a tiny brand-tokens file (your colors, fonts, and logo) into a self-contained, on-brand social card, and it lints those tokens for contrast and consistency so the text actually meets WCAG and the fonts have real fallbacks. No image model, no cloud service, no keys. Templating and a little math you can audit. [4]&lt;/p&gt;

&lt;h2&gt;
  
  
  Where do companies go wrong with AI visibility?
&lt;/h2&gt;

&lt;p&gt;Across the audits we run, the same four mistakes show up again and again, and each tool above targets exactly one of them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Loop step&lt;/th&gt;
&lt;th&gt;Free tool&lt;/th&gt;
&lt;th&gt;The mistake it fixes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Measure&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ai-visibility-probe-lite&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stopping at "are we mentioned?" instead of measuring the citations to URLs you own.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Produce + Publish&lt;/td&gt;
&lt;td&gt;&lt;code&gt;contentos-agent-lite&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shipping a one-prompt draft with no sources or structure — the page an engine skips.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optimize&lt;/td&gt;
&lt;td&gt;&lt;code&gt;aeo-site-audit-lite&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Never checking retrieval, so a page stays unreachable, un-chosen, or un-extractable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brand-card-lite&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Letting the silo win — distributing with no canonical home, so a rented platform takes the authority.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How do you run the AI-visibility loop this week?
&lt;/h2&gt;

&lt;p&gt;You do not need the hosted product to start. Here is the minimum loop, the one I would run if I had an hour:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Measure. Run ten brand-free prompts through one engine with the probe. Write down mention-share and citation-share.&lt;/li&gt;
&lt;li&gt;Pick one loss. Find a prompt where a competitor is cited and you are not.&lt;/li&gt;
&lt;li&gt;Write the answer. Take that prompt through the content agent's gates, then publish it on your own domain first.&lt;/li&gt;
&lt;li&gt;Audit the page. Run the site auditor and close the top Fetchable, Chosen, or Extractable gap.&lt;/li&gt;
&lt;li&gt;Dress it. Generate an on-brand card so the post looks like you.&lt;/li&gt;
&lt;li&gt;Re-measure next week. Run the same prompts again and watch the two numbers move.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why open-source the core for free?
&lt;/h2&gt;

&lt;p&gt;People ask why I open-sourced the part that took us years to figure out. The honest answer is that the method is not the moat. Brand-free measurement, the mention-versus-citation split, the eight content gates, the three retrieval gates, canonical-first distribution: that is the part that changes outcomes, and it is now fully in the open.&lt;/p&gt;

&lt;p&gt;The hosted Humanswith.ai Workspace adds the part you cannot do by hand at any real scale: automated multi-engine scans on a weekly cadence, the publishing and re-measurement loop that proves whether a fix actually worked, and the team and hosting around it. The free tools tell you where you stand. The Workspace runs the loop for you. [5]&lt;/p&gt;

&lt;p&gt;It is a deliberate bet. The companies that win AI search will treat it as an operating loop, not a one-time audit. So clone a tool, measure one prompt set, and fix one page this week. That is the entire ask.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Are these really free and open-source?&lt;/strong&gt; Yes. All four are MIT-licensed on GitHub, with zero runtime dependencies and no API keys. You can read every line before you run it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is mention-share versus citation-share?&lt;/strong&gt; Mention-share is how often an answer names your brand. Citation-share is how often it cites a URL on a domain you own. An engine can name you while sourcing only competitors, so the tools report both. [1]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does canonical-first distribution mean?&lt;/strong&gt; Publish on your own domain first as the canonical version, then adapt for the platforms, with every copy linking back to that URL. The citation authority stays on the property you control instead of the silo you rent. [2]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will this guarantee AI cites me?&lt;/strong&gt; No, and anyone who promises that is selling something. The tools measure the gates that come before a citation and give you a way to close them in priority order. The result is earned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should I move to the hosted Workspace?&lt;/strong&gt; When you want the loop run for you across a real content program, rather than running each tool by hand. [5]&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;[1] &lt;code&gt;[ai-visibility-probe-lite](https://github.com/humanswith-ai/ai-visibility-probe-lite)&lt;/code&gt; (MIT)&lt;br&gt;
[2] &lt;code&gt;[contentos-agent-lite](https://github.com/humanswith-ai/contentos-agent-lite)&lt;/code&gt; (MIT, incl. gate 08 canonical-first distribution)&lt;br&gt;
[3] &lt;code&gt;[aeo-site-audit-lite](https://github.com/humanswith-ai/aeo-site-audit-lite)&lt;/code&gt; (MIT)&lt;br&gt;
[4] &lt;code&gt;[brand-card-lite](https://github.com/humanswith-ai/brand-card-lite)&lt;/code&gt; (MIT)&lt;br&gt;
[5] &lt;a href="https://humanswith.ai/platform/" rel="noopener noreferrer"&gt;Humanswith.ai Workspace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://gregshevchenko.com/research/free-ai-marketing-agents/" rel="noopener noreferrer"&gt;gregshevchenko.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>seo</category>
      <category>python</category>
    </item>
    <item>
      <title>The open-source AI Search visibility audit stack I’m building</title>
      <dc:creator>Gregory Shevchenko</dc:creator>
      <pubDate>Tue, 02 Jun 2026 19:43:37 +0000</pubDate>
      <link>https://dev.to/gshevchenko/the-open-source-ai-search-visibility-audit-stack-im-building-1i1p</link>
      <guid>https://dev.to/gshevchenko/the-open-source-ai-search-visibility-audit-stack-im-building-1i1p</guid>
      <description>&lt;p&gt;Most AI Search visibility work becomes vague too early.&lt;/p&gt;

&lt;p&gt;A team asks, “How do we show up in ChatGPT?”&lt;/p&gt;

&lt;p&gt;Then the work jumps straight to prompts, dashboards, content ideas, competitor checks, and brand-mention screenshots.&lt;/p&gt;

&lt;p&gt;Those things can matter.&lt;/p&gt;

&lt;p&gt;But if the page layer is messy, the rest of the system becomes hard to interpret. A weak citation rate may be a content problem, a crawl problem, a schema problem, an entity problem, or a page that is not represented clearly enough for machines to reuse.&lt;/p&gt;

&lt;p&gt;So I am building &lt;code&gt;geo-audit&lt;/code&gt; as the open-source, inspectable layer of my AI Search visibility workflow. The first public slice is intentionally boring: crawl the site, inspect the head tags, parse JSON-LD, check canonical URLs, and turn that into a repeatable proof packet before asking an LLM to judge anything. &lt;a href="https://github.com/g-shevchenko/geo-audit" rel="noopener noreferrer"&gt;[1]&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why start with deterministic gates?
&lt;/h2&gt;

&lt;p&gt;Because deterministic checks remove preventable noise.&lt;/p&gt;

&lt;p&gt;Before a team asks an LLM whether a page is “good for AI Search,” I want to know simpler things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can the route be fetched?&lt;/li&gt;
&lt;li&gt;Is the final URL stable?&lt;/li&gt;
&lt;li&gt;Is there one clear title?&lt;/li&gt;
&lt;li&gt;Is there a meta description?&lt;/li&gt;
&lt;li&gt;Does the canonical URL match the intended source of record?&lt;/li&gt;
&lt;li&gt;Is there a visible H1?&lt;/li&gt;
&lt;li&gt;Does JSON-LD exist?&lt;/li&gt;
&lt;li&gt;Does JSON-LD parse?&lt;/li&gt;
&lt;li&gt;Are obvious noindex or schema gaps present?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that requires a model.&lt;/p&gt;

&lt;p&gt;That is the point.&lt;/p&gt;

&lt;p&gt;AI Search visibility work needs LLM checks later, but the base layer should be code-level, repeatable, and boring enough to rerun after every change.&lt;/p&gt;

&lt;h2&gt;
  
  
  What went public first?
&lt;/h2&gt;

&lt;p&gt;The first public release adds two modules to &lt;code&gt;geo-audit&lt;/code&gt;: &lt;code&gt;site-crawl-lite&lt;/code&gt; and &lt;code&gt;head-schema-gate&lt;/code&gt;. &lt;a href="https://github.com/g-shevchenko/geo-audit/pull/10" rel="noopener noreferrer"&gt;[2]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskdal1qxr1qto6wttyco.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskdal1qxr1qto6wttyco.png" alt="Table showing the two public geo-audit modules: site-crawl-lite and head-schema-gate, what each checks, and why each matters for AI Search visibility" width="799" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;site-crawl-lite&lt;/code&gt; gives a small-site route inventory. It checks status, final URL, title, meta description, canonical, H1, word count, JSON-LD count and types, link counts, image alt counts, and noindex state.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;head-schema-gate&lt;/code&gt; checks the homepage or target route more directly: title, description, canonical, H1, Open Graph, JSON-LD parse errors, Article author &lt;code&gt;sameAs&lt;/code&gt;, BreadcrumbList, and FAQPage signals.&lt;/p&gt;

&lt;p&gt;These modules are informational gates for now. They produce scores and action items, but they do not silently change the existing composite methodology.&lt;/p&gt;

&lt;p&gt;That was deliberate.&lt;/p&gt;

&lt;p&gt;A public audit tool should not move scoring goalposts in the same change that adds new checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the secrets boundary work?
&lt;/h2&gt;

&lt;p&gt;The public repository must never contain real API keys, private credentials, internal hostnames, or personal secrets.&lt;/p&gt;

&lt;p&gt;Users who clone the repo bring their own keys.&lt;/p&gt;

&lt;p&gt;The deterministic modules run without paid APIs. If someone wants richer provider checks, they can copy &lt;code&gt;.env.example&lt;/code&gt; into a local, gitignored &lt;code&gt;.env&lt;/code&gt; file and configure their own credentials. &lt;a href="https://github.com/g-shevchenko/geo-audit/blob/main/TRUST.md" rel="noopener noreferrer"&gt;[3]&lt;/a&gt; &lt;a href="https://github.com/g-shevchenko/geo-audit/blob/main/docs/external-services.md" rel="noopener noreferrer"&gt;[4]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The boundary is simple:&lt;/p&gt;

&lt;p&gt;Public repo = safe code, docs, placeholders, tests, and trust checks.&lt;/p&gt;

&lt;p&gt;Private workspace = local keys, team credentials, configured providers, and deployment-specific proof.&lt;/p&gt;

&lt;p&gt;That boundary matters more when agents are involved.&lt;/p&gt;

&lt;p&gt;If an agent can safely improve public code without touching secrets, the tool can evolve in public. If the same stack runs in a private environment with configured keys, it can do richer audits without leaking the private layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does this fit in the broader stack?
&lt;/h2&gt;

&lt;p&gt;I do not think one tool replaces everything.&lt;/p&gt;

&lt;p&gt;The operating stack has layers.&lt;/p&gt;

&lt;p&gt;First, crawl and head/schema gates answer the technical baseline question: can the site be fetched and represented cleanly enough for search engines, answer engines, and social surfaces?&lt;/p&gt;

&lt;p&gt;Second, ContentOS readiness answers the publishing question: does the page have a source pack, claims, evidence, answer units, FAQs, and human review before publication? &lt;a href="https://gregshevchenko.com/notes/contentos/" rel="noopener noreferrer"&gt;[6]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Third, distribution checks answer the authority question: do Medium, LinkedIn, Habr, VC.ru, X, Substack, GitHub, and profile pages route authority back to the canonical URL?&lt;/p&gt;

&lt;p&gt;Fourth, measurement answers the business question: do prompt sets, citations, source context, competitors, and downstream traffic change after the work ships? &lt;a href="https://gregshevchenko.com/notes/ai-search-visibility-measurement/" rel="noopener noreferrer"&gt;[5]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;geo-audit&lt;/code&gt; is strongest at the first layer today.&lt;/p&gt;

&lt;p&gt;That is okay. A good open-source base should be small enough to inspect and useful enough to run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What did the first proof find?
&lt;/h2&gt;

&lt;p&gt;I ran the two new gates against my own site before publishing the canonical note.&lt;/p&gt;

&lt;p&gt;The result was not a dramatic failure, which is exactly what a baseline gate should show after recent technical cleanup: &lt;code&gt;site-crawl-lite&lt;/code&gt; returned 99/100 across 19 checked routes, and &lt;code&gt;head-schema-gate&lt;/code&gt; returned 94/100 on the homepage. &lt;a href="https://github.com/g-shevchenko/geo-audit/pull/10" rel="noopener noreferrer"&gt;[2]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The remaining notes were small follow-ups: one route without JSON-LD and a BreadcrumbList recommendation where breadcrumb-like markup already exists.&lt;/p&gt;

&lt;p&gt;That is useful signal.&lt;/p&gt;

&lt;p&gt;It says the next improvement is a schema consistency pass, not a panic rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does this not replace?
&lt;/h2&gt;

&lt;p&gt;This does not replace Screaming Frog, Sitebulb, Oncrawl, log-file analysis, enterprise crawls, full keyword suites, or paid brand-monitoring products.&lt;/p&gt;

&lt;p&gt;Those tools are still useful.&lt;/p&gt;

&lt;p&gt;The point is different.&lt;/p&gt;

&lt;p&gt;I want an install-first, agent-friendly, testable stack that can run inside a repo workflow, produce proof artifacts, keep secrets local, and explain exactly what it checked.&lt;/p&gt;

&lt;p&gt;That makes it easier to improve the process in public and then write about the improvement with the source code attached.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to build next
&lt;/h2&gt;

&lt;p&gt;The next modules are not glamorous.&lt;/p&gt;

&lt;p&gt;That is a feature.&lt;/p&gt;

&lt;p&gt;I want an internal-link graph, route-readiness runner, image-alt gate, sitemap/feed/llms consistency checker, and a stronger bridge from ContentOS source packs into publish-readiness scoring.&lt;/p&gt;

&lt;p&gt;The pattern I want to keep is simple:&lt;/p&gt;

&lt;p&gt;Build a deterministic layer.&lt;/p&gt;

&lt;p&gt;Prove it on my own site.&lt;/p&gt;

&lt;p&gt;Publish the code.&lt;/p&gt;

&lt;p&gt;Write the canonical note.&lt;/p&gt;

&lt;p&gt;Then distribute the idea only after the first-party page is the source of record.&lt;/p&gt;

&lt;p&gt;The canonical version of this article lives on my site, where I keep the related pages and distribution links updated. &lt;a href="https://gregshevchenko.com/notes/open-source-ai-search-visibility-audit-stack/" rel="noopener noreferrer"&gt;[7]&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is geo-audit a replacement for Screaming Frog or Sitebulb?
&lt;/h3&gt;

&lt;p&gt;No. It is an inspectable AI Search visibility audit layer. Enterprise crawlers still matter for large-scale crawling, log-file analysis, and advanced technical SEO workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the public repo contain API keys?
&lt;/h3&gt;

&lt;p&gt;No. Public users bring their own keys through local environment variables or a gitignored &lt;code&gt;.env&lt;/code&gt; file. The public repository should contain placeholders and documentation, not real credentials. &lt;a href="https://github.com/g-shevchenko/geo-audit/blob/main/TRUST.md" rel="noopener noreferrer"&gt;[3]&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Can the tool run without paid APIs?
&lt;/h3&gt;

&lt;p&gt;Yes. The deterministic modules run without paid API keys. Optional keys unlock richer brand-mention, PageSpeed, and provider-specific checks. &lt;a href="https://github.com/g-shevchenko/geo-audit/blob/main/docs/external-services.md" rel="noopener noreferrer"&gt;[4]&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why start with crawl and head/schema gates?
&lt;/h3&gt;

&lt;p&gt;Because LLM scoring is less useful when a page is missing canonical tags, titles, descriptions, JSON-LD, or crawlable routes. Deterministic checks remove preventable noise first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;[1] GitHub — &lt;a href="https://github.com/g-shevchenko/geo-audit" rel="noopener noreferrer"&gt;geo-audit public repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] GitHub PR — &lt;a href="https://github.com/g-shevchenko/geo-audit/pull/10" rel="noopener noreferrer"&gt;geo-audit pull request #10&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] GitHub — &lt;a href="https://github.com/g-shevchenko/geo-audit/blob/main/TRUST.md" rel="noopener noreferrer"&gt;geo-audit TRUST manifest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[4] GitHub — &lt;a href="https://github.com/g-shevchenko/geo-audit/blob/main/docs/external-services.md" rel="noopener noreferrer"&gt;External services and BYOK configuration&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] Gregory Shevchenko — &lt;a href="https://gregshevchenko.com/notes/ai-search-visibility-measurement/" rel="noopener noreferrer"&gt;How to measure AI Search visibility&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[6] Gregory Shevchenko — &lt;a href="https://gregshevchenko.com/notes/contentos/" rel="noopener noreferrer"&gt;What ContentOS is&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[7] Canonical version on my site — &lt;a href="https://gregshevchenko.com/notes/open-source-ai-search-visibility-audit-stack/" rel="noopener noreferrer"&gt;gregshevchenko.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>seo</category>
      <category>testing</category>
    </item>
    <item>
      <title>How to roll out an Agentic Workspace inside a marketing team</title>
      <dc:creator>Gregory Shevchenko</dc:creator>
      <pubDate>Tue, 02 Jun 2026 19:22:17 +0000</pubDate>
      <link>https://dev.to/gshevchenko/how-to-roll-out-an-agentic-workspace-inside-a-marketing-team-4iol</link>
      <guid>https://dev.to/gshevchenko/how-to-roll-out-an-agentic-workspace-inside-a-marketing-team-4iol</guid>
      <description>&lt;p&gt;Most AI adoption plans start with the wrong unit.&lt;/p&gt;

&lt;p&gt;They ask which role can be replaced.&lt;/p&gt;

&lt;p&gt;A safer engineering question is narrower:&lt;/p&gt;

&lt;p&gt;Which repeatable workflow can be governed?&lt;/p&gt;

&lt;p&gt;That distinction matters because the strongest evidence around AI and work is task-shaped, not whole-role-shaped. The OpenAI/OpenResearch/UPenn paper on GPT exposure is often cited because it shows broad exposure across the labor market, but it does not say that entire jobs are already automated. &lt;a href="https://openai.com/index/gpts-are-gpts/" rel="noopener noreferrer"&gt;[1]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anthropic’s Economic Index points in the same direction: AI use is uneven, task-level, and split between augmentation and automation patterns. &lt;a href="https://www.anthropic.com/research/economic-index-primitives" rel="noopener noreferrer"&gt;[2]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So the practical rollout unit is not a job title.&lt;/p&gt;

&lt;p&gt;It is a workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the right first unit for agent rollout?
&lt;/h2&gt;

&lt;p&gt;A workflow has a clear start and a clear end.&lt;/p&gt;

&lt;p&gt;It has a trigger, approved inputs, a transformation step, a quality gate, a human approval point, and a measurement loop.&lt;/p&gt;

&lt;p&gt;A role is too broad. “Marketing manager” includes strategy, research, writing, review, publishing, reporting, coordination, taste, and accountability. If you try to automate the whole role, the system becomes vague before the first run.&lt;/p&gt;

&lt;p&gt;A workflow is observable.&lt;/p&gt;

&lt;p&gt;Good first workflows for a marketing team are smaller:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;weekly AI Search visibility measurement&lt;/li&gt;
&lt;li&gt;source-backed canonical page updates&lt;/li&gt;
&lt;li&gt;content brief generation&lt;/li&gt;
&lt;li&gt;internal link QA&lt;/li&gt;
&lt;li&gt;distribution rewrites for Medium, LinkedIn, X, or DEV.to&lt;/li&gt;
&lt;li&gt;schema, head tag, sitemap, and visible-link checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small enough to control.&lt;/p&gt;

&lt;p&gt;Important enough to matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why are raw AI tools not enough?
&lt;/h2&gt;

&lt;p&gt;Developer tools already show the pattern.&lt;/p&gt;

&lt;p&gt;GitHub describes Copilot coding agent as working in its own environment, running checks, and preparing pull requests for human review. &lt;a href="https://docs.github.com/en/copilot/using-github-copilot/coding-agent/about-assigning-tasks-to-copilot" rel="noopener noreferrer"&gt;[4]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claude Code and Codex point in the same direction: agents that can read context, use tools, prepare changes, and return reviewable work instead of only answering in chat. &lt;a href="https://docs.anthropic.com/en/docs/claude-code/overview" rel="noopener noreferrer"&gt;[5]&lt;/a&gt; &lt;a href="https://openai.com/index/introducing-codex/" rel="noopener noreferrer"&gt;[6]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But this does not mean every office worker should be dropped into a blank agent terminal.&lt;/p&gt;

&lt;p&gt;That is the adoption trap.&lt;/p&gt;

&lt;p&gt;Raw agent tools assume a strong operator. Most marketers do not want to manage repository context, shell commands, permission boundaries, tool routing, proof loops, and rollback logic.&lt;/p&gt;

&lt;p&gt;They need a prepared surface.&lt;/p&gt;

&lt;p&gt;That is what I mean by an Agentic Workspace: a governed layer where prepared agents work with approved sources, narrow permissions, quality gates, review packets, and human approval.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does the 30-day rollout look like?
&lt;/h2&gt;

&lt;p&gt;The rollout has four phases.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Scope one workflow
&lt;/h3&gt;

&lt;p&gt;Pick one recurring workflow.&lt;/p&gt;

&lt;p&gt;Write down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what starts it&lt;/li&gt;
&lt;li&gt;which inputs are allowed&lt;/li&gt;
&lt;li&gt;what output is expected&lt;/li&gt;
&lt;li&gt;what the agent may touch&lt;/li&gt;
&lt;li&gt;what the agent must never do&lt;/li&gt;
&lt;li&gt;what “done” means&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example acceptance criteria:&lt;/p&gt;

&lt;p&gt;“The packet is done when it includes one canonical URL, one source list, one changed page or draft, no orphan footnotes, passing visible-link checks, passing layout/style gates, and one next action.”&lt;/p&gt;

&lt;p&gt;Boring acceptance criteria are useful.&lt;/p&gt;

&lt;p&gt;They make review cheaper.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Build the source pack
&lt;/h3&gt;

&lt;p&gt;Do this before adding more agents.&lt;/p&gt;

&lt;p&gt;A marketing agent is only as good as the material it is allowed to use.&lt;/p&gt;

&lt;p&gt;A source pack should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;company facts&lt;/li&gt;
&lt;li&gt;product pages&lt;/li&gt;
&lt;li&gt;approved positioning&lt;/li&gt;
&lt;li&gt;URLs&lt;/li&gt;
&lt;li&gt;allowed claims&lt;/li&gt;
&lt;li&gt;banned claims&lt;/li&gt;
&lt;li&gt;examples of strong output&lt;/li&gt;
&lt;li&gt;examples of weak output&lt;/li&gt;
&lt;li&gt;language and style rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters even more for AI Search, AEO, and GEO work.&lt;/p&gt;

&lt;p&gt;If you want AI systems to cite your brand, the workflow needs source clarity, entity consistency, visible links, answer-ready blocks, and structured data discipline.&lt;/p&gt;

&lt;p&gt;Those requirements should be inside the packet, not remembered manually after the draft is finished.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Use prepared agents with narrow permissions
&lt;/h3&gt;

&lt;p&gt;Do not start with dozens of agents.&lt;/p&gt;

&lt;p&gt;Start with a few bounded ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;research agent: extracts facts, caveats, and unanswered questions&lt;/li&gt;
&lt;li&gt;brief agent: turns the source pack into a specific task&lt;/li&gt;
&lt;li&gt;canonical-page agent: proposes structure, FAQ, sources, and schema&lt;/li&gt;
&lt;li&gt;QA agent: checks footnotes, links, head tags, JSON-LD, sitemap/feed/llms coverage, and layout&lt;/li&gt;
&lt;li&gt;distribution agent: adapts canonical content for other platforms without breaking canonical-first logic&lt;/li&gt;
&lt;li&gt;measurement agent: updates prompt coverage, citation status, crawl status, and next actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most early agents should be draft-only.&lt;/p&gt;

&lt;p&gt;Let them prepare work.&lt;/p&gt;

&lt;p&gt;Do not let them publish without a human gate.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Review packets and rejected examples
&lt;/h3&gt;

&lt;p&gt;The review packet is the operating object.&lt;/p&gt;

&lt;p&gt;It should show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what changed&lt;/li&gt;
&lt;li&gt;which sources were used&lt;/li&gt;
&lt;li&gt;which checks passed&lt;/li&gt;
&lt;li&gt;what failed&lt;/li&gt;
&lt;li&gt;what was rejected&lt;/li&gt;
&lt;li&gt;what the smallest next action is&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rejected examples are not waste.&lt;/p&gt;

&lt;p&gt;They are memory.&lt;/p&gt;

&lt;p&gt;If a draft was generic, unsupported, too promotional, visually broken, or wrong about canonical logic, save that rejection and use it to improve the next run.&lt;/p&gt;

&lt;p&gt;That is how agentic work compounds: not from one magical prompt, but from a system that remembers what “not good enough” looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the best first workflow for marketing teams?
&lt;/h2&gt;

&lt;p&gt;I would start with weekly AI Search visibility.&lt;/p&gt;

&lt;p&gt;The loop is concrete:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Capture current entity facts and canonical URLs.&lt;/li&gt;
&lt;li&gt;Run a fixed prompt set across target answer engines or manual checks.&lt;/li&gt;
&lt;li&gt;Record mentions, citations, missing sources, and wrong recommendations.&lt;/li&gt;
&lt;li&gt;Choose one canonical page or source-surface improvement.&lt;/li&gt;
&lt;li&gt;Prepare the page or distribution update.&lt;/li&gt;
&lt;li&gt;Run footnote, visible-link, schema, sitemap, and layout gates.&lt;/li&gt;
&lt;li&gt;Publish after human approval.&lt;/li&gt;
&lt;li&gt;Repeat next week and compare the same prompts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is narrow enough for adoption.&lt;/p&gt;

&lt;p&gt;It is also strategically useful because AI Search visibility connects content, technical SEO, brand facts, external sources, and measurement.&lt;/p&gt;

&lt;p&gt;Microsoft’s Frontier Firm framing is useful here because it describes humans and agents as part of a new operating model, not a simple one-step replacement story. &lt;a href="https://www.microsoft.com/en-us/worklab/work-trend-index/2025-the-year-the-frontier-firm-is-born" rel="noopener noreferrer"&gt;[3]&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What should stop the rollout?
&lt;/h2&gt;

&lt;p&gt;Stop or slow down if the team has no source pack.&lt;/p&gt;

&lt;p&gt;Stop if nobody can define “done” before reviewing the output.&lt;/p&gt;

&lt;p&gt;Stop if the same weak draft or layout bug returns every week.&lt;/p&gt;

&lt;p&gt;Stop if an agent can publish, delete, overwrite, or send externally without a human gate.&lt;/p&gt;

&lt;p&gt;Stop if the team celebrates output volume without measuring citation, crawl, review quality, or business movement.&lt;/p&gt;

&lt;p&gt;In most cases, the fix is not a better prompt.&lt;/p&gt;

&lt;p&gt;The fix is a better workflow boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the practical takeaway?
&lt;/h2&gt;

&lt;p&gt;Do not roll out AI by trying to replace a marketing role.&lt;/p&gt;

&lt;p&gt;Roll it out by governing one repeatable workflow.&lt;/p&gt;

&lt;p&gt;Start with a source pack.&lt;/p&gt;

&lt;p&gt;Use prepared agents.&lt;/p&gt;

&lt;p&gt;Require review packets.&lt;/p&gt;

&lt;p&gt;Capture rejected examples.&lt;/p&gt;

&lt;p&gt;Measure the same loop next week.&lt;/p&gt;

&lt;p&gt;That is how an Agentic Workspace becomes useful: not as a pile of prompts, but as a controlled operating layer for work that humans still own.&lt;/p&gt;

&lt;p&gt;The canonical version of this article lives on my site, where I keep the distribution links and related research pages updated. &lt;a href="https://gregshevchenko.com/research/agentic-workspace-rollout-marketing-team/" rel="noopener noreferrer"&gt;[7]&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;[1] OpenAI / OpenResearch / University of Pennsylvania — &lt;a href="https://openai.com/index/gpts-are-gpts/" rel="noopener noreferrer"&gt;GPTs are GPTs: An Early Look at the Labor Market Impact Potential of Large Language Models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] Anthropic — &lt;a href="https://www.anthropic.com/research/economic-index-primitives" rel="noopener noreferrer"&gt;Economic Index: New building blocks for understanding AI use&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] Microsoft WorkLab — &lt;a href="https://www.microsoft.com/en-us/worklab/work-trend-index/2025-the-year-the-frontier-firm-is-born" rel="noopener noreferrer"&gt;2025 Work Trend Index: The Year the Frontier Firm is Born&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[4] GitHub Docs — &lt;a href="https://docs.github.com/en/copilot/using-github-copilot/coding-agent/about-assigning-tasks-to-copilot" rel="noopener noreferrer"&gt;About GitHub Copilot coding agent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] Anthropic Docs — &lt;a href="https://docs.anthropic.com/en/docs/claude-code/overview" rel="noopener noreferrer"&gt;Claude Code overview&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[6] OpenAI — &lt;a href="https://openai.com/index/introducing-codex/" rel="noopener noreferrer"&gt;Introducing Codex&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[7] Canonical version on my site — &lt;a href="https://gregshevchenko.com/research/agentic-workspace-rollout-marketing-team/" rel="noopener noreferrer"&gt;gregshevchenko.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
      <category>testing</category>
    </item>
    <item>
      <title>Token economics for AI agents: why workflow ownership matters more than task automation</title>
      <dc:creator>Gregory Shevchenko</dc:creator>
      <pubDate>Tue, 26 May 2026 15:40:44 +0000</pubDate>
      <link>https://dev.to/gshevchenko/token-economics-for-ai-agents-why-workflow-ownership-matters-more-than-task-automation-2m9p</link>
      <guid>https://dev.to/gshevchenko/token-economics-for-ai-agents-why-workflow-ownership-matters-more-than-task-automation-2m9p</guid>
      <description>&lt;p&gt;A weak version of AI labor economics sounds like this:&lt;/p&gt;

&lt;p&gt;A $100,000 knowledge worker can be replaced by a $2,730 token bill.&lt;/p&gt;

&lt;p&gt;That framing works as a shock, but it breaks as an operating model. Production work does not become cheap just because inference is cheap. You still need context, tools, prompts, permissions, retries, evaluation, approvals, security, and someone accountable for the result.&lt;/p&gt;

&lt;p&gt;A better framing is this:&lt;/p&gt;

&lt;p&gt;Your time now competes with token economics, but the real unit of competition is not the person. It is the repeatable workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is token bill not workflow cost?
&lt;/h2&gt;

&lt;p&gt;A recent token-economy model estimated that a comparable AI workflow could have a raw token bill around $2,730 per year. In the same analysis, a fully loaded AI-agent workflow is closer to $82,000 per year once the orchestration layer is included. That remains meaningfully below a fully loaded human benchmark around $135,000 per year for a $100,000 salary, but it is not “AI labor is basically free.” &lt;a href="https://meaningfultech.com/p/the-token-economy-what-a-100000-employee" rel="noopener noreferrer"&gt;[1]&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;If you compare a human role to only API spend, you will make bad decisions. If you compare a human workflow to a complete AI workflow, you can start making practical ones.&lt;/p&gt;

&lt;p&gt;Real cost includes model calls, retrieval, tool access, prompt and workflow design, deterministic checks, human review, failed attempts, monitoring, maintenance, and governance.&lt;/p&gt;

&lt;p&gt;That missing middle is where many AI replacement narratives become sloppy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does AI attack workflows before roles?
&lt;/h2&gt;

&lt;p&gt;A more useful question is not “which job disappears?”&lt;/p&gt;

&lt;p&gt;Ask this instead:&lt;/p&gt;

&lt;p&gt;Which repeatable processes inside this job can now be done by a machine-assisted workflow?&lt;/p&gt;

&lt;p&gt;A 2023 OpenAI, OpenResearch, and University of Pennsylvania paper on GPT exposure is often misquoted. A safer reading is that around 80% of workers could have at least 10% of their work tasks affected by GPTs, and around 19% could have at least 50% of tasks affected. &lt;a href="https://openai.com/index/gpts-are-gpts/" rel="noopener noreferrer"&gt;[2]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is not the same as saying 80% of work is already automated.&lt;/p&gt;

&lt;p&gt;It means task exposure is broad, uneven, and workflow-specific.&lt;/p&gt;

&lt;p&gt;Most roles combine judgment, communication, source gathering, drafting, checking, routing, publishing, reporting, and client/team coordination. AI is much better at absorbing some of those layers than others.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the practical unit for AI automation?
&lt;/h2&gt;

&lt;p&gt;For operators, developers, marketers, consultants, and agency teams, a workflow with clear boundaries is the right unit.&lt;/p&gt;

&lt;p&gt;A useful workflow has seven parts: input, approved source, transformation step, quality gate, approval point, output, and measurement loop.&lt;/p&gt;

&lt;p&gt;Once work is described that way, you can decide which parts belong to an agent, which parts need deterministic code, and which parts must stay with a human.&lt;/p&gt;

&lt;p&gt;This is where most “AI agent” projects either become useful or become theater.&lt;/p&gt;

&lt;p&gt;If an agent only produces text, it is a drafting assistant. If it can read the right sources, take the right action, run checks, preserve evidence, and stop when quality is not good enough, it starts to become workflow infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes for developers and operators?
&lt;/h2&gt;

&lt;p&gt;New literacy is not just prompting.&lt;/p&gt;

&lt;p&gt;Prompting is the visible layer. Deeper leverage comes from workflow ownership.&lt;/p&gt;

&lt;p&gt;A workflow owner decides what evidence is allowed, what “done” means, which failures are unacceptable, which checks are deterministic, when approval is required, how the system recovers after a bad output, and how improvement is measured.&lt;/p&gt;

&lt;p&gt;That is why tools like Claude Code, Codex, Cursor, Windsurf, n8n, MCP servers, and repo-level proof loops matter. They are not just “AI chat with files.” They are early versions of a new operating layer for knowledge work.&lt;/p&gt;

&lt;p&gt;People who can turn messy work into measured workflows become harder to replace.&lt;/p&gt;

&lt;p&gt;People who only sell hours for repeatable cognitive tasks become easier to compare against token economics.&lt;/p&gt;

&lt;h2&gt;
  
  
  How should an agent workflow be mapped?
&lt;/h2&gt;

&lt;p&gt;Here is a practical way to think about the system:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn0pxuur80buna4224bla.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn0pxuur80buna4224bla.png" alt="Table mapping five AI-agent workflow layers: source, draft or action, QA, distribution, and metrics, with what the human owns, what the agent can help with, and the required quality gate for each layer" width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not every layer becomes automated.&lt;/p&gt;

&lt;p&gt;Every layer becomes explicit.&lt;/p&gt;

&lt;p&gt;That is where cost, quality, and speed can improve together.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does this apply to content and marketing workflows?
&lt;/h2&gt;

&lt;p&gt;Take content production.&lt;/p&gt;

&lt;p&gt;A weak AI version is: “write me an article about AI Search.”&lt;/p&gt;

&lt;p&gt;A stronger workflow version starts with a canonical page and search intent, gathers internal evidence and external sources, scores pre-writing readiness, drafts with a clear answer structure, checks claims and footnotes, adapts the canonical article for Medium, LinkedIn, DEV.to, Habr, or X, verifies visible links and canonical references, and measures whether the page gets crawled, cited, shared, or reused.&lt;/p&gt;

&lt;p&gt;This is not “AI writes content.”&lt;/p&gt;

&lt;p&gt;It is a controlled content-production corridor where a human operator uses AI to increase throughput without giving up editorial control.&lt;/p&gt;

&lt;p&gt;That difference matters for SEO, AEO, GEO, and AI Search visibility. A language model can produce words quickly. A workflow can produce reliable assets repeatedly.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does this apply to coding-agent workflows?
&lt;/h2&gt;

&lt;p&gt;A weak coding-agent loop is simple: ask for a fix, accept a patch, and hope the issue is gone.&lt;/p&gt;

&lt;p&gt;A stronger loop defines the failing behavior, reproduces it, writes or runs a red check, makes the smallest safe change, runs the proof loop, documents the failure mode, and adds that bug class to the next gate.&lt;/p&gt;

&lt;p&gt;This is why “agent persistence” can become a quality bug. If an agent keeps patching without a better gate, it may return the same class of defect again and again. More persistence is not the fix. A clearer workflow boundary and a stronger stop condition are the fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should you build first?
&lt;/h2&gt;

&lt;p&gt;If you are trying to apply AI agents inside a real business, start smaller than “replace a role.”&lt;/p&gt;

&lt;p&gt;Start with one repeatable workflow.&lt;/p&gt;

&lt;p&gt;Write down what starts it, which sources are allowed, what output is expected, what the agent may do, what the agent must not do, which checks must pass, where a human approves or rejects, and how success is measured after delivery.&lt;/p&gt;

&lt;p&gt;Then automate the boring middle.&lt;/p&gt;

&lt;p&gt;Do not automate the accountability.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the career implication?
&lt;/h2&gt;

&lt;p&gt;If you are a developer, marketer, consultant, analyst, editor, or agency operator, the question is not whether AI replaces you tomorrow.&lt;/p&gt;

&lt;p&gt;Ask whether your work is packaged as isolated tasks or owned as a workflow.&lt;/p&gt;

&lt;p&gt;Task executors are compared against cheaper task execution.&lt;/p&gt;

&lt;p&gt;Workflow owners are compared against the value of the system they can run.&lt;/p&gt;

&lt;p&gt;That is the shift.&lt;/p&gt;

&lt;p&gt;Your time now competes with tokens. But judgment, systems thinking, taste, source discipline, and workflow ownership still compound.&lt;/p&gt;

&lt;p&gt;Move from task execution to workflow ownership before the market forces the transition.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does this mean AI replaces a $100,000 employee for $2,730?
&lt;/h3&gt;

&lt;p&gt;No. The $2,730 figure is a raw token-bill comparison, not a fully loaded workflow cost. A useful comparison includes orchestration, QA, retries, tools, monitoring, and human approval. &lt;a href="https://meaningfultech.com/p/the-token-economy-what-a-100000-employee" rel="noopener noreferrer"&gt;[1]&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Does GPT exposure mean whole jobs are already automated?
&lt;/h3&gt;

&lt;p&gt;No. The safer 2023 reading is task exposure: many workers may have some tasks affected by GPTs, but that is not the same as full role automation. &lt;a href="https://openai.com/index/gpts-are-gpts/" rel="noopener noreferrer"&gt;[2]&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the practical first step for a team?
&lt;/h3&gt;

&lt;p&gt;Pick one repeatable workflow and define its input, allowed sources, output, quality gate, approval point, and measurement loop before adding an agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;[1] &lt;a href="https://meaningfultech.com/p/the-token-economy-what-a-100000-employee" rel="noopener noreferrer"&gt;MeaningfulTech — The Token Economy: What a $100,000 Employee Really Costs in the Age of AI &lt;/a&gt; &lt;/p&gt;

&lt;p&gt;[2] OpenAI / OpenResearch / University of Pennsylvania — &lt;a href="https://openai.com/index/gpts-are-gpts/" rel="noopener noreferrer"&gt;GPTs are GPTs: An Early Look at the Labor Market Impact Potential of Large Language Models  &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] Canonical version on my site &lt;a href="https://gregshevchenko.com/notes/your-time-competes-with-tokens/" rel="noopener noreferrer"&gt;gregshevchenko.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
      <category>testing</category>
    </item>
    <item>
      <title>Autocompaction Is Not Memory</title>
      <dc:creator>Gregory Shevchenko</dc:creator>
      <pubDate>Tue, 26 May 2026 15:10:30 +0000</pubDate>
      <link>https://dev.to/gshevchenko/autocompaction-is-not-memory-4n0a</link>
      <guid>https://dev.to/gshevchenko/autocompaction-is-not-memory-4n0a</guid>
      <description>&lt;p&gt;Long-context agents already summarize.&lt;/p&gt;

&lt;p&gt;That is useful.&lt;/p&gt;

&lt;p&gt;It is not memory.&lt;/p&gt;

&lt;p&gt;Built-in autocompaction helps Claude Code, Codex, Cursor, Windsurf, or another coding-agent surface survive a long session. But a team workflow needs something stricter than "the chat got summarized."&lt;/p&gt;

&lt;p&gt;It needs portable operational state.&lt;/p&gt;

&lt;p&gt;That is the difference I keep coming back to while working on a local MCP token-economy stack: compression keeps one conversation alive; handoff lets a workspace continue.&lt;/p&gt;

&lt;h2&gt;
  
  
  What built-in autocompaction does well
&lt;/h2&gt;

&lt;p&gt;Autocompaction is good at reducing the raw context of a product session when the window gets too full.&lt;/p&gt;

&lt;p&gt;For a single agent in a single chat, that can be enough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;preserve the broad goal;&lt;/li&gt;
&lt;li&gt;compress prior discussion;&lt;/li&gt;
&lt;li&gt;keep the model moving;&lt;/li&gt;
&lt;li&gt;avoid forcing the user to start from zero.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is real value.&lt;/p&gt;

&lt;p&gt;The problem appears when the work is no longer just one chat.&lt;/p&gt;

&lt;p&gt;In a real repo, the same task may move between Claude Code, Codex, Cursor, Windsurf, a remote Mac Mini, MCP tools, CI gates, and human review. At that point, a narrative summary is not the same thing as an operational contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  What autocompaction usually loses
&lt;/h2&gt;

&lt;p&gt;The details that matter most are often the least summary-shaped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which approvals were actually granted;&lt;/li&gt;
&lt;li&gt;which files or services are off-limits;&lt;/li&gt;
&lt;li&gt;which exact values must not drift;&lt;/li&gt;
&lt;li&gt;which sources are trusted, semi-trusted, or untrusted;&lt;/li&gt;
&lt;li&gt;which errors were already tried and fixed;&lt;/li&gt;
&lt;li&gt;which commands passed;&lt;/li&gt;
&lt;li&gt;which checks are still pending;&lt;/li&gt;
&lt;li&gt;what the next agent must not redo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are not just "context."&lt;/p&gt;

&lt;p&gt;They are control-plane state.&lt;/p&gt;

&lt;p&gt;If that state disappears during compaction, the next agent can sound confident while silently re-opening risks the previous agent had already closed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The missing layer: local handoff MCP
&lt;/h2&gt;

&lt;p&gt;The mechanism I want is a local handoff MCP that writes a structured handoff before the window is full.&lt;/p&gt;

&lt;p&gt;The point is not to make a prettier summary.&lt;/p&gt;

&lt;p&gt;The point is to make a resume contract that another agent can use safely.&lt;/p&gt;

&lt;p&gt;A minimal handoff should preserve:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;objective and done condition;&lt;/li&gt;
&lt;li&gt;loaded instructions and constraints;&lt;/li&gt;
&lt;li&gt;approval state;&lt;/li&gt;
&lt;li&gt;exact values that must not change;&lt;/li&gt;
&lt;li&gt;risks and red flags;&lt;/li&gt;
&lt;li&gt;actions already taken;&lt;/li&gt;
&lt;li&gt;errors and fixes;&lt;/li&gt;
&lt;li&gt;pending verification;&lt;/li&gt;
&lt;li&gt;next recommended step;&lt;/li&gt;
&lt;li&gt;what not to redo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That contract should live in the workspace, not only inside the product's private chat memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Autocompaction vs local handoff
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzee0kloj1qups60mfsul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzee0kloj1qups60mfsul.png" alt="Comparison table showing that built-in autocompaction is usually one product session, late, narrative, product-specific, and opaque, while local handoff MCP is a shared workspace protocol with pre-scoring, operational state, cross-agent vocabulary, and measurable resume metrics" width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The timing difference matters.&lt;/p&gt;

&lt;p&gt;Autocompaction often happens after context pressure is already high. A handoff protocol can pre-score the session earlier and decide whether the next transition needs a normal summary, a red-flag handoff, or a hard stop for human review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a 1M context window does not remove the need
&lt;/h2&gt;

&lt;p&gt;A larger context window is valuable.&lt;/p&gt;

&lt;p&gt;I want it. I will use it.&lt;/p&gt;

&lt;p&gt;It lets the agent keep more code, logs, source material, and prior reasoning available before compression becomes necessary.&lt;/p&gt;

&lt;p&gt;But a larger window mostly delays the failure mode. It does not automatically make state portable, trusted, auditable, or shared across products.&lt;/p&gt;

&lt;p&gt;One million tokens can still contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stale approvals;&lt;/li&gt;
&lt;li&gt;buried secrets;&lt;/li&gt;
&lt;li&gt;contradictory instructions;&lt;/li&gt;
&lt;li&gt;obsolete diagnostics;&lt;/li&gt;
&lt;li&gt;repeated failed attempts;&lt;/li&gt;
&lt;li&gt;unlabeled source trust;&lt;/li&gt;
&lt;li&gt;no clear next step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More room is not the same thing as better state management.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple handoff contract
&lt;/h2&gt;

&lt;p&gt;Here is the shape I want agents to produce at real transition points:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Objective&lt;/span&gt;
What we are trying to finish.

&lt;span class="gu"&gt;## Done Condition&lt;/span&gt;
The exact observable state that means this task is complete.

&lt;span class="gu"&gt;## Constraints&lt;/span&gt;
Loaded repo rules, user constraints, risk boundaries, and trust labels.

&lt;span class="gu"&gt;## Approval State&lt;/span&gt;
What the user approved, what remains unapproved, and what requires a checkpoint.

&lt;span class="gu"&gt;## Actions Taken&lt;/span&gt;
Commands, edits, deploys, external publications, or tool calls already completed.

&lt;span class="gu"&gt;## Verification&lt;/span&gt;
Checks that passed, checks that failed, and checks still pending.

&lt;span class="gu"&gt;## Red Flags&lt;/span&gt;
Secrets, live ops, destructive commands, ambiguous ownership, or same-defect loops.

&lt;span class="gu"&gt;## Next Step&lt;/span&gt;
The recommended next action for a fresh agent.

&lt;span class="gu"&gt;## Do Not Redo&lt;/span&gt;
Work already completed or paths already ruled out.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is intentionally boring.&lt;/p&gt;

&lt;p&gt;Good handoff is not supposed to be clever. It is supposed to be hard to misunderstand.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we can measure
&lt;/h2&gt;

&lt;p&gt;The useful question is not "did the summary look nice?"&lt;/p&gt;

&lt;p&gt;The useful question is whether the next agent can continue with less waste and fewer mistakes.&lt;/p&gt;

&lt;p&gt;I would measure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;resume success&lt;/strong&gt;: can a fresh agent take the next step from the handoff alone?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;re-read rate&lt;/strong&gt;: how often does it need to reopen old files or old chat context?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;token estimate&lt;/strong&gt;: how much context was avoided during resume?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;leak rate&lt;/strong&gt;: did secrets, private implementation details, or off-limits facts enter the handoff?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;approval preservation&lt;/strong&gt;: did the resumed agent retain the correct permission boundary?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;redo rate&lt;/strong&gt;: did the agent repeat completed work?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where the MCP token-economy angle becomes practical. The point is not just fewer tokens. The point is fewer unsafe or wasteful recovery loops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this helps
&lt;/h2&gt;

&lt;p&gt;This pattern is useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a coding session is approaching context pressure;&lt;/li&gt;
&lt;li&gt;a task is moving from Claude Code to Codex or Cursor;&lt;/li&gt;
&lt;li&gt;a local agent hands work to a remote machine;&lt;/li&gt;
&lt;li&gt;a background MCP workflow needs to resume later;&lt;/li&gt;
&lt;li&gt;the work touched live deploys, credentials, publications, or approvals;&lt;/li&gt;
&lt;li&gt;the same defect class has already appeared twice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In those cases, "the chat will summarize itself" is not enough process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical takeaway
&lt;/h2&gt;

&lt;p&gt;Use autocompaction.&lt;/p&gt;

&lt;p&gt;Use bigger context windows when they are available.&lt;/p&gt;

&lt;p&gt;But do not confuse either one with memory.&lt;/p&gt;

&lt;p&gt;Memory for agentic engineering is not just remembering what was said. It is preserving the operational state that lets the next actor continue safely.&lt;/p&gt;

&lt;p&gt;Autocompaction helps a chat survive.&lt;/p&gt;

&lt;p&gt;Handoff helps a workspace continue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://gregshevchenko.com/research/mcp-stack-token-economy/" rel="noopener noreferrer"&gt;MCP stack token economy&lt;/a&gt; — the local measurement frame behind byte saving, cache-friendliness, and prompt-context economics.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gregshevchenko.com/notes/agentic-engineering-for-marketing-teams/" rel="noopener noreferrer"&gt;Agentic engineering for marketing teams&lt;/a&gt; — the shared operator vocabulary for Claude Code, Codex, Cursor, Windsurf, n8n, MCP, proof loops, and quality gates.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gregshevchenko.com/notes/ai-agent-failure-loop-breakers/" rel="noopener noreferrer"&gt;AI agent failure loops&lt;/a&gt; — the QA and stop-rule note behind red-first gates, blind validation, rejected examples, and failure-loop control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full canonical note:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gregshevchenko.com/notes/autocompaction-is-not-memory/" rel="noopener noreferrer"&gt;https://gregshevchenko.com/notes/autocompaction-is-not-memory/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>AI Agent Failure Loops: When Persistence Becomes a Quality Bug</title>
      <dc:creator>Gregory Shevchenko</dc:creator>
      <pubDate>Sun, 24 May 2026 16:16:51 +0000</pubDate>
      <link>https://dev.to/gshevchenko/ai-agent-failure-loops-when-persistence-becomes-a-quality-bug-4mmg</link>
      <guid>https://dev.to/gshevchenko/ai-agent-failure-loops-when-persistence-becomes-a-quality-bug-4mmg</guid>
      <description>&lt;p&gt;In 2026, I want my AI coding agents to have one more rule: know when to stop.&lt;/p&gt;

&lt;p&gt;AI agents do not always fail by stopping.&lt;/p&gt;

&lt;p&gt;Sometimes they fail by continuing.&lt;/p&gt;

&lt;p&gt;I ran into this while building a custom Cyrillic font extension for a real brand system. The task looked concrete: make Cyrillic letters, Latin letters, numerals, and special symbols feel like one editorial type family.&lt;/p&gt;

&lt;p&gt;Claude Code and Codex kept working. They generated files, exported proofs, reported progress, and fixed the last visible complaint.&lt;/p&gt;

&lt;p&gt;But the same defect class kept returning.&lt;/p&gt;

&lt;p&gt;That is the dangerous version of an AI-agent failure loop: the workflow looks productive while the real quality problem survives.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a failure loop?
&lt;/h2&gt;

&lt;p&gt;A failure loop is a repeated pattern where an agent keeps producing new candidate fixes while the same underlying defect remains unresolved.&lt;/p&gt;

&lt;p&gt;It usually has five steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user rejects the same kind of defect again.&lt;/li&gt;
&lt;li&gt;The agent patches the latest symptom.&lt;/li&gt;
&lt;li&gt;The proof gate is too weak to catch the issue.&lt;/li&gt;
&lt;li&gt;The agent asks for another manual review.&lt;/li&gt;
&lt;li&gt;Everyone spends another cycle on the same problem.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One mistake is normal.&lt;/p&gt;

&lt;p&gt;The real process bug appears when the agent continues after its validation system has already failed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why normal proof loops can fail
&lt;/h2&gt;

&lt;p&gt;Proof loops are useful. Tests, screenshots, build checks, linting, diffs, and generated reports all matter.&lt;/p&gt;

&lt;p&gt;But proof loops can also become theater if they measure the wrong thing.&lt;/p&gt;

&lt;p&gt;In my font project, the agent could prove that the font compiled, the PDF rendered, the screenshot existed, bounding boxes changed, and a numeric score improved.&lt;/p&gt;

&lt;p&gt;That did not prove the letters looked right.&lt;/p&gt;

&lt;p&gt;Users were rejecting a different thing: visual consistency.&lt;/p&gt;

&lt;p&gt;Some Cyrillic glyphs felt too short, too thick, too loosely spaced, or structurally wrong next to Latin letters.&lt;/p&gt;

&lt;p&gt;If the gate cannot see the defect the human keeps seeing, the gate is not allowed to declare the task done.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule I now use
&lt;/h2&gt;

&lt;p&gt;After the same visible defect class appears twice, stop normal implementation.&lt;/p&gt;

&lt;p&gt;Do not make one more speculative patch.&lt;/p&gt;

&lt;p&gt;Do not relax the threshold.&lt;/p&gt;

&lt;p&gt;Do not ask the user to inspect another candidate artifact.&lt;/p&gt;

&lt;p&gt;Switch into failure-loop breaker mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a failure-loop breaker does
&lt;/h2&gt;

&lt;p&gt;A failure-loop breaker is a hard mode switch for AI-agent work.&lt;/p&gt;

&lt;p&gt;A better next output is a diagnostic package, not another candidate fix.&lt;/p&gt;

&lt;p&gt;It should include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the repeated failure class;&lt;/li&gt;
&lt;li&gt;a rejected corpus of known-bad examples;&lt;/li&gt;
&lt;li&gt;a red-first gate that fails on those examples;&lt;/li&gt;
&lt;li&gt;a fix that turns the gate green;&lt;/li&gt;
&lt;li&gt;blind or independent validation when the author has seen the answer;&lt;/li&gt;
&lt;li&gt;a clear continue, stop, or human-decision recommendation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is not only a retry limit.&lt;/p&gt;

&lt;p&gt;A retry limit stops cost growth. A failure-loop breaker changes the work itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The red-first gate matters
&lt;/h2&gt;

&lt;p&gt;A useful gate must fail before the fix, because otherwise it has not proven that it can see the old failure.&lt;/p&gt;

&lt;p&gt;If the agent cannot make the new checker fail on previous bad artifacts, it has not built a checker for the real problem.&lt;/p&gt;

&lt;p&gt;Many agent workflows skip this part.&lt;/p&gt;

&lt;p&gt;They add a new metric, see the new candidate score higher, and call it progress. The metric was never forced to reject the old failure.&lt;/p&gt;

&lt;p&gt;For subjective or visual tasks, this matters even more because the rejected corpus becomes the bridge between human taste and deterministic validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  When the agent is contaminated
&lt;/h2&gt;

&lt;p&gt;Another trap is contaminated validation: the same agent writes the fix, knows the target, and grades the result.&lt;/p&gt;

&lt;p&gt;That can be useful during iteration, but it is not independent validation.&lt;/p&gt;

&lt;p&gt;If the agent has already seen the expected answer, the final check needs a deterministic gate with withheld examples, a blind reviewer, a separate model that does not receive the author reasoning, or a human decision when the requirement is taste rather than computation.&lt;/p&gt;

&lt;p&gt;Same-author validation is often self-consistency, not proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  I packaged this as a small public skill
&lt;/h2&gt;

&lt;p&gt;I turned the rule into a small public repo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/g-shevchenko/agent-failure-loop-breaker" rel="noopener noreferrer"&gt;https://github.com/g-shevchenko/agent-failure-loop-breaker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It installs a compact skill and repo-local rules for Claude Code, Codex, Cursor, and Windsurf.&lt;/p&gt;

&lt;p&gt;Its installed rule is deliberately simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the same defect class appears twice, the agent must stop normal patching and build a rejected corpus plus a red-first gate before continuing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This package is not meant to make the model smarter.&lt;/p&gt;

&lt;p&gt;It makes the workflow less willing to confuse motion with progress.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where companies go wrong
&lt;/h2&gt;

&lt;p&gt;Teams often treat agent persistence as an asset by default.&lt;/p&gt;

&lt;p&gt;That is reasonable for well-scoped implementation tasks with strong tests. It is risky for work where the acceptance criterion is visual, editorial, architectural, or operational.&lt;/p&gt;

&lt;p&gt;If Claude Code, Codex, Cursor, or Windsurf keeps failing the same class of review, the next investment should go into the validation contract.&lt;/p&gt;

&lt;p&gt;The best prompt in the world will still loop when the gate rewards the wrong artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this helps
&lt;/h2&gt;

&lt;p&gt;This pattern is useful for UI polish loops, visual regression work, PDF and presentation generation, typography systems, content QA, and agentic coding tasks where the same bug returns.&lt;/p&gt;

&lt;p&gt;Here is the signal:&lt;/p&gt;

&lt;p&gt;If the user says “this is still the same problem” twice, the process should change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical takeaway
&lt;/h2&gt;

&lt;p&gt;Do not ask an AI agent to “keep trying” forever.&lt;/p&gt;

&lt;p&gt;Ask it to prove that its checker can catch the last failed attempt.&lt;/p&gt;

&lt;p&gt;If it cannot, the next task is not implementation.&lt;/p&gt;

&lt;p&gt;At that point, the next task is building a better gate.&lt;/p&gt;

&lt;p&gt;Full write-up:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gregshevchenko.com/notes/ai-agent-failure-loop-breakers/" rel="noopener noreferrer"&gt;https://gregshevchenko.com/notes/ai-agent-failure-loop-breakers/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
