<?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: John Lee</title>
    <description>The latest articles on DEV Community by John Lee (@johnonlee).</description>
    <link>https://dev.to/johnonlee</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%2F3924610%2Fe3db9d16-677c-4971-9de6-071496991f48.jpeg</url>
      <title>DEV Community: John Lee</title>
      <link>https://dev.to/johnonlee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johnonlee"/>
    <language>en</language>
    <item>
      <title>What AI Engineer Job Ads Actually Screen For</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Wed, 09 Sep 2026 07:29:22 +0000</pubDate>
      <link>https://dev.to/johnonlee/what-ai-engineer-job-ads-actually-screen-for-53lf</link>
      <guid>https://dev.to/johnonlee/what-ai-engineer-job-ads-actually-screen-for-53lf</guid>
      <description>&lt;p&gt;Decide to become an AI engineer and the first thing you meet is a framework list. Learn LangChain? People say LangGraph is rising. What about CrewAI, AutoGen? Picking wrong feels like it will cost you a year.&lt;/p&gt;

&lt;p&gt;The posting data settles that anxiety first. An agent-specialist job board &lt;a href="https://agentic-engineering-jobs.com/ai-agent-frameworks-job-market-2026" rel="noopener noreferrer"&gt;tallied 1,135 of its own listings&lt;/a&gt; from March–May 2026 (the site doesn't name its operator, so read it as a snapshot). More than half of those ads name no framework at all. The ads that do name them average 2.31 each: LangChain in 392, LangGraph 256, LlamaIndex 150, CrewAI 106, AutoGen 74; and even LangChain, the market default, appears alone in only one of its eight listings. This is not a pick-one game.&lt;/p&gt;

&lt;p&gt;The salary data points the same way, harder. Postings that name frameworks have medians of $185–190K, roughly $20K &lt;em&gt;below&lt;/em&gt; the agent segment's overall median of $213K. Naming frameworks doesn't buy you a premium. For scale: the posted-salary median across 43,480 US AI-engineering ads is $176,000 (&lt;a href="https://axialsearch.com/insights/ai-engineering-jobs" rel="noopener noreferrer"&gt;Axial Search&lt;/a&gt;). The agent segment sits a bit above that, though the two tallies differ in window and method, so don't read the gap as precise.&lt;/p&gt;

&lt;p&gt;Of the &lt;a href="https://john.onlee.io/en/blog/ai-operator-map/" rel="noopener noreferrer"&gt;five functions&lt;/a&gt; AI jobs sort into, this installment covers Application.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sentences that repeat in real postings
&lt;/h2&gt;

&lt;p&gt;Strip away the framework lists and read what senior postings ask for, and different words keep coming back. Two engineering ads and one PM ad that states the same demands from the other side. Condensed here; originals at the links.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Design evaluation harnesses and quality scoring — we use Langfuse, rubrics to measure safety, effectiveness, and personalization." (&lt;a href="https://job-boards.greenhouse.io/future/jobs/4683133005" rel="noopener noreferrer"&gt;Future&lt;/a&gt;, Applied AI Engineer, $215,000–250,000)&lt;/li&gt;
&lt;li&gt;"Improve our observability and instrumentation to profile agent behavior… design and implement infrastructure for low-latency agent execution." (&lt;a href="https://www.harvey.ai/company/careers/04eb457b-e985-4e3b-9635-0a2b867ada97" rel="noopener noreferrer"&gt;Harvey&lt;/a&gt;, Senior and Staff Software Engineer, Agents, $193,400–340,000)&lt;/li&gt;
&lt;li&gt;A role partnering with engineering and AI leadership across LLM orchestration, latency, caching, reliability, evaluation, observability, and cost; the phrase "cost per successful outcome" comes from here. (&lt;a href="https://jobs.lever.co/gohighlevel/13cbdf7e-ec82-4a0f-aec1-3bc55add776d" rel="noopener noreferrer"&gt;HighLevel&lt;/a&gt;, Principal PM, Conversation AI)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What the three postings share isn't a framework name; it's evals and operating numbers. And an eval isn't anything exotic: it's automated grading of whether your system answered well, against a set of reference answers you wrote: a golden dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  You can put down the fine-tuning worry
&lt;/h2&gt;

&lt;p&gt;The fear that this job requires training models keeps a lot of builders out. In a survey of 1,340 practitioners (&lt;a href="https://www.langchain.com/state-of-agent-engineering" rel="noopener noreferrer"&gt;LangChain's own survey&lt;/a&gt;, late 2025), 57% do not fine-tune at all. The working baseline is a base model plus prompting plus retrieval (RAG), tightened by evals. In the same survey, 57.3% already run agents in production and 89% have some form of observability. Learning evaluation and operations gets you closer to the ads than going back to ML math does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool names barely appear in the ads
&lt;/h2&gt;

&lt;p&gt;Eval tools are only starting to register in job ads. In UK posting counts (ITJobsWatch, 2 September 2026), just two names show up at all: &lt;a href="https://www.itjobswatch.co.uk/jobs/uk/langsmith.do" rel="noopener noreferrer"&gt;LangSmith&lt;/a&gt; (38 postings over six months) and &lt;a href="https://www.itjobswatch.co.uk/jobs/uk/langfuse.do" rel="noopener noreferrer"&gt;Langfuse&lt;/a&gt; (31); Braintrust has no page. The salary columns aren't readable yet either; last year's samples were two or three postings each. That thinness is the signal: what companies screen for isn't a tool name but whether you can design evaluations and read operating numbers.&lt;/p&gt;

&lt;p&gt;One protocol is the exception. MCP (Model Context Protocol) shows up in 17–24% of postings for every one of the five frameworks, the only thing in that data that cuts across all of them. Its security problems are growing just as fast, so "I can use MCP" has to mean "I can use it safely."&lt;/p&gt;

&lt;p&gt;One fast-growing title deserves a caution: Forward Deployed Engineer, embedded with customers and accountable through production, &lt;a href="https://www.aol.com/articles/job-postings-tech-role-grown-185134000.html" rel="noopener noreferrer"&gt;grew 729% in a year on US Indeed's index&lt;/a&gt;. But the same title spans two pay tiers: an FDE at a frontier lab and an FDE at an ordinary enterprise are different jobs. Don't judge by the title alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual size of the Australian market
&lt;/h2&gt;

&lt;p&gt;If you're reading from Australia, set expectations from local numbers. On SEEK, &lt;a href="https://au.seek.com/ai-engineer-jobs" rel="noopener noreferrer"&gt;"ai engineer"&lt;/a&gt; returns 1,177 listings, &lt;a href="https://au.seek.com/langchain-jobs" rel="noopener noreferrer"&gt;"langchain"&lt;/a&gt; 30, and &lt;a href="https://au.seek.com/llm-jobs" rel="noopener noreferrer"&gt;"llm"&lt;/a&gt; 101 (2 Sep 2026; keyword matches, so treat ratios loosely). LLM-specific roles are still few. The named hiring is real: Commonwealth Bank, including its subsidiary Bankwest, &lt;a href="https://au.seek.com/job/94157906" rel="noopener noreferrer"&gt;is hiring GenAI and agentic engineers&lt;/a&gt;, and &lt;a href="https://au.seek.com/job/94242359" rel="noopener noreferrer"&gt;recruiter listings&lt;/a&gt; run to AUD $230–340k. Rough bands: $130–165k mid, $165–200k senior, $200–230k+ principal (aggregated from recruiter guides such as &lt;a href="https://bigwavedigital.com.au/ai-engineer-salary-sydney-2026/" rel="noopener noreferrer"&gt;Big Wave Digital&lt;/a&gt;, not official statistics).&lt;/p&gt;

&lt;h2&gt;
  
  
  So what do you build?
&lt;/h2&gt;

&lt;p&gt;Not a framework mastered; one small thing finished. Build a retrieval-backed Q&amp;amp;A over some documents and write fifty reference answers yourself. Automate the grading, measure latency and cost per request, and keep the records. Those are the words the postings above keep repeating.&lt;/p&gt;

&lt;p&gt;What this project gives you is hands-on experience with evaluation and instrumentation. It does not substitute for the production-scale experience the senior ads also want. But juniors who arrive having done it are rare. You'll touch a couple of frameworks building it. You don't need to finish learning them first.&lt;/p&gt;

&lt;p&gt;Next up: Enablement, the role that helps employees actually use AI well.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
    </item>
    <item>
      <title>Why YouTube Only Teaches You n8n</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Thu, 03 Sep 2026 15:56:44 +0000</pubDate>
      <link>https://dev.to/johnonlee/why-youtube-only-teaches-you-n8n-58h</link>
      <guid>https://dev.to/johnonlee/why-youtube-only-teaches-you-n8n-58h</guid>
      <description>&lt;p&gt;Open YouTube to learn automation and you get n8n, Make, Zapier. The enterprise-market tools from &lt;a href="https://john.onlee.io/en/blog/ai-automation-two-markets/" rel="noopener noreferrer"&gt;the last piece&lt;/a&gt; (Boomi, Workato, UiPath) are almost nowhere. The job ads clearly want them; the content layer barely mentions them.&lt;/p&gt;

&lt;p&gt;The easy answer is views: beginners are the audience, so beginner tools win. That's half of it; the other half is where the money comes from. Follow who pays the teacher.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first money: affiliate commissions
&lt;/h2&gt;

&lt;p&gt;n8n runs &lt;a href="https://n8n.io/affiliates/" rel="noopener noreferrer"&gt;an affiliate program for creators&lt;/a&gt;: 30% of referred cloud-subscription revenue, for twelve months. Every viewer who signs up through a creator's link becomes recurring income for that creator, and Make runs &lt;a href="https://www.make.com/en/affiliate" rel="noopener noreferrer"&gt;a similar program&lt;/a&gt;. Zapier &lt;a href="https://community.zapier.com/show-tell-5/does-zapier-have-an-affiliate-program-13950" rel="noopener noreferrer"&gt;has no affiliate program open to ordinary creators&lt;/a&gt;; it holds the same shelf space through search dominance instead.&lt;/p&gt;

&lt;p&gt;Enterprise vendors don't pay creators this kind of commission. There is no per-signup commission open to individuals. &lt;a href="https://www.workato.com/partners" rel="noopener noreferrer"&gt;Workato&lt;/a&gt; and &lt;a href="https://www.uipath.com/partners/become-a-partner" rel="noopener noreferrer"&gt;UiPath&lt;/a&gt; do run partner revenue programs, but the money arrives after a partner agreement and a closed enterprise deal. A video can't collect on that, so a YouTuber teaching Workato has effectively nobody to collect from.&lt;/p&gt;

&lt;p&gt;Which means a creator's menu was set before the first video went up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The second money: the community business
&lt;/h2&gt;

&lt;p&gt;The monetization point in automation education now sits below the videos, on Skool, a community platform. The two biggest automation communities there, &lt;a href="https://www.skool.com/learn-ai/about" rel="noopener noreferrer"&gt;AI Automation Agency Hub&lt;/a&gt; (330,000+ members) and &lt;a href="https://www.skool.com/ai-automation-society/about" rel="noopener noreferrer"&gt;AI Automation Society&lt;/a&gt; (440,000+), are both free.&lt;/p&gt;

&lt;p&gt;The free tier brings people in, and what's sold behind it differs by operator. AI Automation Society sells &lt;a href="https://www.skool.com/ai-automation-society-plus/about" rel="noopener noreferrer"&gt;a $129-a-month membership&lt;/a&gt; to its 440,000 free members; the AAA Hub side sells an accelerator priced above $5,000 to its 330,000 (pricing disclosed only on a sales call; that figure comes from student accounts). Where the published numbers allow an estimate, at AI Automation Society, the paid share sits under 1%: 447,000 free vs 3,700 paid is 0.8%. Strictly a paid-to-free count taken on the same day, not a conversion rate.&lt;/p&gt;

&lt;p&gt;Skool adds a competition on top. &lt;a href="https://help.skool.com/article/182-skool-games-leaderboard-faq" rel="noopener noreferrer"&gt;Skool Games&lt;/a&gt; ranks community owners each quarter by the new subscription revenue they add in 90 days, and the leaderboard counts at most $100 a month per subscription. The contest is built for low-priced volume, and the curriculum that sells at volume is a low-barrier tool. The answer, again, is n8n. High-priced accelerators aren't subscriptions, so the leaderboard doesn't count them at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other side is nearly free, and invisible
&lt;/h2&gt;

&lt;p&gt;Enterprise education is much bigger and barely shows up on YouTube. UiPath Academy reported &lt;a href="https://ir.uipath.com/news/detail/311/introducing-the-next-evolution-of-uipath-academy-a-gateway-to-ai-at-work" rel="noopener noreferrer"&gt;1.6 million learners&lt;/a&gt; (UiPath, 2023). Salesforce Trailhead issued &lt;a href="https://www.salesforce.com/news/press-releases/2024/09/18/ai-training-opportunities/" rel="noopener noreferrer"&gt;2.6 million+ AI and data badges&lt;/a&gt; in the fifteen months from June 2023, about 40% of them going to Salesforce's own employees. &lt;a href="https://www.workato.com/certification" rel="noopener noreferrer"&gt;Workato's courses and exams cost nothing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Workato aside, what's free is the training, not the credential. &lt;a href="https://www.uipath.com/learning/certification/faqs" rel="noopener noreferrer"&gt;UiPath's official exams run $150–300&lt;/a&gt;, and &lt;a href="https://www.salesforce.com/blog/salesforce-candidate-ai-certification/" rel="noopener noreferrer"&gt;Salesforce's free first attempt at its AI certifications&lt;/a&gt; ended at the close of 2025. The credential track itself is churning under the AI transition: Microsoft &lt;a href="https://learn.microsoft.com/en-us/credentials/support/retired-certification-exams" rel="noopener noreferrer"&gt;retired its Power Automate certification&lt;/a&gt; this year and replaced it with an agent certification.&lt;/p&gt;

&lt;p&gt;Creators teaching the enterprise tools do exist. There are channels devoted to Power Automate, and the Salesforce world supports a paid-course market of its own. But since no vendor pays per signup, those creators have to earn outside the vendors, at a much smaller scale. Which leaves learners looking at an inverted world: the education that costs money is the most visible, and the education that's nearly free is the hardest to find.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is not a scam story
&lt;/h2&gt;

&lt;p&gt;Some things deserve saying in the other direction. The big accelerator's review score is solid: &lt;a href="https://www.trustpilot.com/review/aaaaccelerator.com" rel="noopener noreferrer"&gt;4.7 on Trustpilot across 548 reviews&lt;/a&gt;, though the account actively invites customers to review, so read it with that in mind. A different community backs itself with a full-refund 90-day guarantee tied to landing your first client (Maker School, $184 a month). &lt;a href="https://ciphernutz.com/blog/hire-n8n-expert-cost-pricing-guide" rel="noopener noreferrer"&gt;Freelance-market guides&lt;/a&gt; put n8n rates at $40–100 an hour, $125–250 senior (agency tallies, not marketplace statistics). Real people earn real money in this market.&lt;/p&gt;

&lt;p&gt;The problem isn't fraud. It's distortion: several hundred thousand people are being trained toward the smallest part of the market companies actually pay for, and the direction was set by the teachers' revenue structure rather than the learners' needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use the content layer anyway
&lt;/h2&gt;

&lt;p&gt;Learning n8n is fine in itself — the last piece showed real jobs on it and real enterprises adopting it. Three things to keep.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check whether a channel teaches only the tool its affiliate links point at. A curriculum with one tool as every answer is a funnel, not a curriculum.&lt;/li&gt;
&lt;li&gt;Before paying for a course, sweep the free tier: vendor academy training costs nothing, enterprise ads recognise vendor certifications, and a $150–300 exam is cheaper than most paid courses.&lt;/li&gt;
&lt;li&gt;Spend what's left, money and hours, on records. Whoever's hiring reads a workflow with an error rate and throughput attached before any certificate. That was the last piece's closing table.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next up is Application: what AI engineer job ads actually screen for, once you set the framework names aside.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
    </item>
    <item>
      <title>There Are Two AI Automation Job Markets</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Wed, 02 Sep 2026 07:53:05 +0000</pubDate>
      <link>https://dev.to/johnonlee/there-are-two-ai-automation-job-markets-4bia</link>
      <guid>https://dev.to/johnonlee/there-are-two-ai-automation-job-markets-4bia</guid>
      <description>&lt;p&gt;Automation is the door most people pick when they start an AI career. You watch n8n videos on YouTube, join a community, take a course, and start preparing for a job or an agency. The sheer number of people learning it tells you something: the two biggest free automation communities alone hold 770,000+ members combined (as of August 2026, overlapping signups included).&lt;/p&gt;

&lt;p&gt;Then you open the job ads and the names look wrong. "8+ years hands-on Boomi." Workato, Celigo. Tools you have never seen on YouTube, paying more than the ones you have. Somewhere around here you start wondering whether you learned the wrong thing.&lt;/p&gt;

&lt;p&gt;You didn't. There are two markets, and YouTube only shows you one of them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://john.onlee.io/en/blog/ai-operator-map/" rel="noopener noreferrer"&gt;The AI Operator Map&lt;/a&gt; split AI careers into five functions. This installment covers Automation, one of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two markets, side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Startup &amp;amp; agency market&lt;/th&gt;
&lt;th&gt;Enterprise market&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who hires&lt;/td&gt;
&lt;td&gt;Startups, agencies&lt;/td&gt;
&lt;td&gt;Large companies, regulated industries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The tools&lt;/td&gt;
&lt;td&gt;n8n, Make, Zapier&lt;/td&gt;
&lt;td&gt;Boomi, Workato, Power Automate, UiPath&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical titles&lt;/td&gt;
&lt;td&gt;AI Automation Specialist, GTM Engineer&lt;/td&gt;
&lt;td&gt;Integration Engineer, RPA Developer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where you learn&lt;/td&gt;
&lt;td&gt;YouTube, communities, paid courses&lt;/td&gt;
&lt;td&gt;Vendor academies, certifications (often free)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The startup side's speed shows up in job ads. In &lt;a href="https://bloomberry.com/blog/i-analyzed-1000-gtm-engineering-jobs-here-is-what-i-learned/" rel="noopener noreferrer"&gt;an analysis of 1,000 GTM and RevOps postings&lt;/a&gt; (Bloomberry), those roles grew 205% in Jan–Sep 2025 over the same months a year earlier, with a median salary of $127,500. The tools the ads name: Zapier in 39% of postings, n8n in 28%, and Workato doesn't appear on the published tool list at all.&lt;/p&gt;

&lt;p&gt;The enterprise side barely exists on YouTube. But the hiring is steady, and learning it costs less, not more. Workato's courses and exams are free, and UiPath's academy training is free too (the official certification exams start at $150). And don't let the "8+ years" ads scare you off: those are the top of this market, not its entrance. The entrance is already paved: free academy, certification to pass screening, junior integration and RPA developer postings.&lt;/p&gt;

&lt;p&gt;Two titles in that table deserve a definition. A GTM engineer automates go-to-market work, meaning sales and marketing operations. An RPA (Robotic Process Automation) developer builds software robots that take over repetitive on-screen work people used to do. And the enterprise column itself has two grains: Boomi and Workato are integration platforms (iPaaS) that connect systems to systems, while UiPath's core is RPA.&lt;/p&gt;

&lt;p&gt;So why did the market split in two? To see it, you have to take the word "automation" apart.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Automation" is not one thing
&lt;/h2&gt;

&lt;p&gt;Job ads and interviews talk past each other because one word is covering four different distinctions. Split them and the ads start making sense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Who is in whose loop?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes the human owns the process and the automation helps. A support ticket comes in, a workflow classifies it and drafts a reply, but a person reads it and hits send. Sometimes the automation owns the process and the human is a checkpoint: invoices flow through untouched, and only the ones over a threshold land on someone's desk.&lt;/p&gt;

&lt;p&gt;The first is AI-in-the-loop (the AI joins your loop). The second is human-in-the-loop (you join the automation's loop). A lot of material online uses the two interchangeably; there is &lt;a href="https://arxiv.org/abs/2412.14232" rel="noopener noreferrer"&gt;a research paper&lt;/a&gt; whose whole point is untangling them, and its test is a usable one: who owns the process? Get this distinction right in an interview and the conversation moves up a level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Who decides the path?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Put a trigger on an n8n flow and drop an LLM node in the middle, and the path is yours. The AI summarizes or classifies in its assigned slot; the next step is always known. The industry calls this a workflow. An agent is different: you give it a goal, and the AI decides what to do next and which tools to use. What you own are the goal and the guardrails.&lt;/p&gt;

&lt;p&gt;Anthropic, the company behind Claude, gives &lt;a href="https://www.anthropic.com/engineering/building-effective-agents" rel="noopener noreferrer"&gt;blunt guidance here&lt;/a&gt;: use the simplest pattern that passes your evaluations, and save agents for problems where you cannot script the path in advance. An "agentic" keyword in a job ad does not always mean the job is building agents. If you can explain &lt;em&gt;why&lt;/em&gt; something needed to be an agent, you stand out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Where does the human watch from?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some roles approve every action (in the loop). Some watch a running system and step in when something looks off (on the loop). Some hand the whole thing over (out of the loop). This isn't new either: since the 2010s the RPA industry has used a similar split between &lt;a href="https://docs.uipath.com/robot/standalone/2025.10/admin-guide/attended-automations" rel="noopener noreferrer"&gt;attended robots&lt;/a&gt; (assisting at someone's desk) and &lt;a href="https://docs.uipath.com/robot/standalone/2025.10/admin-guide/unattended-automations" rel="noopener noreferrer"&gt;unattended ones&lt;/a&gt; (running headless). Tools keep changing; the axis stays. When an enterprise ad asks for "human oversight" and "exception handling," this is the axis it's talking about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Autonomy comes in levels.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Researchers have proposed &lt;a href="https://knightcolumbia.org/content/levels-of-autonomy-for-ai-agents-1" rel="noopener noreferrer"&gt;an L1–L5 scale&lt;/a&gt;. At L1 the human makes every decision and the AI only executes. At L3 the AI leads and the human gives direction and feedback. At L5 the human keeps an emergency stop and little else. Gartner expects &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-08-26-gartner-predicts-40-percent-of-enterprise-apps-will-feature-task-specific-ai-agents-by-2026-up-from-less-than-5-percent-in-2025" rel="noopener noreferrer"&gt;task-specific agents inside 40% of enterprise applications&lt;/a&gt; by the end of 2026, up from under 5% in 2025. Agents inside everyday enterprise apps are about to be common.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two markets, re-read through the four axes
&lt;/h2&gt;

&lt;p&gt;What YouTube and the courses teach is mostly automation that stays near a person: it runs while you watch, and you fix it when it breaks. Enterprises use plenty of near-a-person automation too — attended robots next to call-centre agents, for one. But the point where the two markets' prices split is the other kind: automation that runs all night with nobody watching, brings only the exceptions to a human, and passes a security review.&lt;/p&gt;

&lt;p&gt;The price bands differ from the start. n8n cloud starts at €20 a month; Workato's average contract sits in the &lt;a href="https://www.vendr.com/marketplace/workato" rel="noopener noreferrer"&gt;mid-$60,000s a year&lt;/a&gt; (Vendr, 2026). Feature lists don't explain that. What does: large companies, especially in regulated industries, review a tool's security before adopting it and demand a contract that says who is liable when something goes wrong. Zapier holds a SOC 2 certification, but SOC 2 attests that security controls were audited; it doesn't substitute for specific regulations. Handling data covered by HIPAA, the US health-privacy law, requires a liability agreement (a BAA) that Zapier declines to sign, so organisations that need one can't pass it through review. What an enterprise product sells includes those contracts and that review-readiness, not just features.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tool you're learning is not a dead end
&lt;/h2&gt;

&lt;p&gt;Three things are happening at once.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There are already good jobs on startup-market tools alone. That's the GTM engineer above: hired by startups, working in Zapier and n8n.&lt;/li&gt;
&lt;li&gt;Enterprises have started using startup-market tools. Delivery Hero (53,000 employees) used n8n Enterprise to cut account-unlock time from 35 to 20 minutes on average, reclaiming 200 employee-hours a month (&lt;a href="https://n8n.io/case-studies/delivery-hero/" rel="noopener noreferrer"&gt;n8n's published case study&lt;/a&gt;); BMW is wiring n8n into an internal platform (&lt;a href="https://bloomberry.com/data/n8n/" rel="noopener noreferrer"&gt;independent scan by Bloomberry&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;The enterprise tools themselves are being rebuilt around agents. UiPath has re-positioned the whole company on "agentic automation," and Workato is opening its automations to be called by agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whichever direction you take, though, the last thing you have to show is the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  What companies actually buy
&lt;/h2&gt;

&lt;p&gt;Not "I can build it" — "it ran, and here is the record." The further the automation gets from human hands, the heavier the record they ask for.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Where the human sits&lt;/th&gt;
&lt;th&gt;The record they ask for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Human owns it, automation assists&lt;/td&gt;
&lt;td&gt;Before-and-after: what got faster, by how much&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation runs, human supervises&lt;/td&gt;
&lt;td&gt;Error rate, throughput, run logs, intervention log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human hands-off&lt;/td&gt;
&lt;td&gt;Full monitoring setup and audit trail&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In portfolio terms: swap the workflow screenshots for an error-rate graph. Certificates don't appear anywhere in this table. Paid courses aren't the problem; it's that the record still has to be built after the course ends.&lt;/p&gt;

&lt;p&gt;If you're learning n8n right now, nobody is telling you to stop. Know who owns the process in the thing you're building, know where the human watches from, and start attaching error rates and throughput. If I were screening, I'd look at that one record before ten certificates.&lt;/p&gt;

&lt;p&gt;Why does YouTube only teach the kind that runs next to a person? Next up, we follow the money.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
    </item>
    <item>
      <title>The AI Operator Map: AI Jobs Sort on a Different Axis</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Wed, 02 Sep 2026 07:52:45 +0000</pubDate>
      <link>https://dev.to/johnonlee/the-ai-operator-map-ai-jobs-sort-on-a-different-axis-28oe</link>
      <guid>https://dev.to/johnonlee/the-ai-operator-map-ai-jobs-sort-on-a-different-axis-28oe</guid>
      <description>&lt;p&gt;A while back a message landed in my LinkedIn inbox. A recruiter at an AI-specialist firm here in Australia: they were placing AI talent with clients across the country, my profile had stood out, would I be keen for a chat. I said yes, but honestly not for the role. I wanted to know what demand for AI people actually looks like in this market, straight from the people who sit behind the job ads.&lt;/p&gt;

&lt;p&gt;Which is how that call turned into two interviews running at once. They were measuring me against their ladder, three tiers from hands-on operator to executive, AUD $70k to $250k and up. I was trying to read the market off them: what problems are companies actually hiring people to solve?&lt;/p&gt;

&lt;p&gt;But my question wasn't anywhere on their ladder. Hire two people at the same tier and you can get two completely different jobs: one automating internal workflows, one building products on LLMs. Different experience required, different evidence to show. The ladder had no row for that distinction. The call ended and I still didn't have my answer.&lt;/p&gt;

&lt;p&gt;So I went and checked myself: job postings, salary guides, national statistics. Every number in this piece carries its source and its definition; the stage is the Australian market, and global surveys are marked as such. You'll see why by the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  The names the market uses collapse into five
&lt;/h2&gt;

&lt;p&gt;Strip away the titles, group by "what problem does this person solve", and you get five functions. Not an industry standard — a grouping I built from the postings and the surveys.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;The problem it solves&lt;/th&gt;
&lt;th&gt;Titles the market actually uses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Automation&lt;/td&gt;
&lt;td&gt;Rebuild workflows that logic-based tools never could&lt;/td&gt;
&lt;td&gt;AI Automation Specialist, Integration Engineer, GTM Engineer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Application&lt;/td&gt;
&lt;td&gt;Build products where the model does the data work CRUD used to do&lt;/td&gt;
&lt;td&gt;AI Engineer, LLM Engineer, GenAI Engineer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enablement&lt;/td&gt;
&lt;td&gt;Move an existing workforce onto AI&lt;/td&gt;
&lt;td&gt;AI Enablement Lead, AI Adoption Specialist, AI Academy Lead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product &amp;amp; Architecture&lt;/td&gt;
&lt;td&gt;Design the path from AI spend to revenue&lt;/td&gt;
&lt;td&gt;AI Product Manager, AI Solutions Architect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Governance&lt;/td&gt;
&lt;td&gt;Make AI cleared to ship&lt;/td&gt;
&lt;td&gt;AI Governance Specialist, Model &amp;amp; AI Risk Manager&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Five rows and the map would be done, except the moment you search by title, the table starts coming apart.&lt;/p&gt;

&lt;h2&gt;
  
  
  Titles churn. Functions persist.
&lt;/h2&gt;

&lt;p&gt;It isn't just titles — the credentials around them churn too. This year's evidence alone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft &lt;a href="https://learn.microsoft.com/en-us/credentials/support/retired-certification-exams" rel="noopener noreferrer"&gt;retired the Power Automate RPA developer certification (PL-500)&lt;/a&gt; in June 2026 and put a new &lt;a href="https://learn.microsoft.com/en-us/credentials/certifications/exams/ab-100/" rel="noopener noreferrer"&gt;agent certification (AB-100)&lt;/a&gt; in its place. The credential name swapped; the automation function underneath didn't move.&lt;/li&gt;
&lt;li&gt;"Chief AI Revenue Officer" circulates in content everywhere. I could not find a single person who actually holds the title.&lt;/li&gt;
&lt;li&gt;Forward Deployed Engineer &lt;a href="https://leaddev.com/career-development/the-rise-of-the-forward-deployed-engineer-fde" rel="noopener noreferrer"&gt;postings grew 729% in a year on Indeed's data&lt;/a&gt;, and the role sits across two functions, Application and Architecture, so it fits no single cell.&lt;/li&gt;
&lt;li&gt;One Melbourne government posting for an AI Enablement Lead bundles the AI roadmap, responsible-AI governance, and the organisational learning program into one hire.&lt;/li&gt;
&lt;li&gt;In &lt;a href="https://iapp.org/news/a/when-ai-governance-lands-on-privacy-s-desk" rel="noopener noreferrer"&gt;IAPP's survey&lt;/a&gt;, 68% of privacy professionals have taken on AI governance as a second hat.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the unit is the function, not the title. In the postings, small organisations bundle several functions into one person, and the bigger the company, the more each function gets its own team. Adoption itself tracks size too: per the &lt;a href="https://www.abs.gov.au/media-centre/media-releases/business-adoption-artificial-intelligence-accelerates-2024-25" rel="noopener noreferrer"&gt;Australian Bureau of Statistics' 2024–25 business survey&lt;/a&gt;, 35% of large businesses use AI, 22% of mid-sized, and 11% of small and micro businesses.&lt;/p&gt;

&lt;p&gt;Tools track company size as well. n8n, the center of gravity of YouTube automation content, &lt;a href="https://sygeon.com/integration-2/2026-gartner-ipaas-magic-quadrant-architect-perspective/" rel="noopener noreferrer"&gt;didn't make the grid of the 2026 Gartner Magic Quadrant for iPaaS at all&lt;/a&gt; (a mention in the text, no more), while the leaders are &lt;a href="https://boomi.com/blog/gartner-magic-quadrant-ipaas-2026/" rel="noopener noreferrer"&gt;Boomi&lt;/a&gt;, &lt;a href="https://www.workato.com/report/gartner" rel="noopener noreferrer"&gt;Workato&lt;/a&gt;, SAP, Salesforce, and Microsoft. Half the companies running self-hosted n8n have 2 to 10 employees (&lt;a href="https://bloomberry.com/data/n8n/" rel="noopener noreferrer"&gt;Bloomberry's certificate-log scan&lt;/a&gt; of self-hosted instances; cloud customers aren't captured). n8n is inside big companies too; what splits isn't presence but the procurement and production-approval layer. Why the tools YouTube teaches and the tools companies actually buy differ this much deserves its own piece, so just one line here: enterprise vendors don't pay YouTubers affiliate commissions. SMB tools do. &lt;a href="https://n8n.io/affiliates/" rel="noopener noreferrer"&gt;n8n pays 30% of referred cloud-subscription revenue for twelve months&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Can't I just learn whatever and go?"
&lt;/h2&gt;

&lt;p&gt;I wish. The failure data says it's not that simple.&lt;/p&gt;

&lt;p&gt;Quoted failure rates for enterprise AI run anywhere from 30% to 95%, and they measure different things in different units, so they can't be lined up on one scale. Pull out any single number and you almost certainly distort it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What was measured&lt;/th&gt;
&lt;th&gt;Number&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Projects predicted to be abandoned after PoC&lt;/td&gt;
&lt;td&gt;30%+&lt;/td&gt;
&lt;td&gt;Gartner, 2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Companies that abandoned most AI initiatives&lt;/td&gt;
&lt;td&gt;42%&lt;/td&gt;
&lt;td&gt;S&amp;amp;P Global, 1,000+ respondents, 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PoCs scrapped before production&lt;/td&gt;
&lt;td&gt;46% avg&lt;/td&gt;
&lt;td&gt;same survey&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Companies failing to achieve and scale value&lt;/td&gt;
&lt;td&gt;74%&lt;/td&gt;
&lt;td&gt;BCG, 1,000 CxOs, 2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Companies with no tangible enterprise-level EBIT impact&lt;/td&gt;
&lt;td&gt;80%+&lt;/td&gt;
&lt;td&gt;McKinsey, 2024 survey&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PoCs that never reached wide deployment&lt;/td&gt;
&lt;td&gt;88%&lt;/td&gt;
&lt;td&gt;IDC with Lenovo, 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Organisations with no attested P&amp;amp;L impact within 6 months (custom tools)&lt;/td&gt;
&lt;td&gt;95%&lt;/td&gt;
&lt;td&gt;MIT NANDA, preliminary report, 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you've seen "95% of AI projects fail" somewhere, it comes from the bottom row: &lt;a href="https://www.media.mit.edu/groups/nanda/overview/" rel="noopener noreferrer"&gt;a preliminary report&lt;/a&gt;, not a peer-reviewed study, built on 52 interviews plus 153 conference surveys and a review of 300-odd public initiatives. The real limits are its six-month window and interview-attested outcomes, and the same report found that roughly 83% of generic chatbot pilots succeed. This is why every number in this series carries its source and its definition.&lt;/p&gt;

&lt;p&gt;Where the surveys do overlap, despite their different bars, is an observation: in McKinsey's, BCG's, and MIT's data alike, the successful minority defined the outcome before building and redesigned the workflow instead of laying a tool on top. Correlation, not proven cause, but the direction is consistent. My reading: this market is short on people who know what to measure.&lt;/p&gt;

&lt;p&gt;And AI skills already carry a price. Australian job ads asking for AI skills grew little for four years, then doubled from 20,000 to 41,000 in a single year, and those ads carry an average 62% wage premium (&lt;a href="https://www.pwc.com.au/services/artificial-intelligence/ai-jobs-barometer-report-2026.pdf" rel="noopener noreferrer"&gt;PwC AI Jobs Barometer, Australia 2026&lt;/a&gt;; by industry it ranges 8–59%). Demand is growing, but which size of organisation you join changes the tools you'll meet and the evidence you'll be asked to show.&lt;/p&gt;

&lt;h2&gt;
  
  
  Each function has its own evidence
&lt;/h2&gt;

&lt;p&gt;That's why the last column of this map is evidence, not tools.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;What counts as evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Automation&lt;/td&gt;
&lt;td&gt;Workflows live in production; error rate, throughput, monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Application&lt;/td&gt;
&lt;td&gt;An eval harness; latency and cost per request; a golden dataset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enablement&lt;/td&gt;
&lt;td&gt;Measured behaviour change; before-and-after on a real workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product &amp;amp; Architecture&lt;/td&gt;
&lt;td&gt;Revenue or cost movement tied to something that shipped&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Governance&lt;/td&gt;
&lt;td&gt;Framework fluency (NIST AI RMF, ISO 42001); a policy that survived a real review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If some terms in the table are unfamiliar, that's fine. What an eval harness is, how you measure behaviour change: each function's installment will unpack them one at a time.&lt;/p&gt;

&lt;p&gt;Evidence isn't something you can batch up later. Build with measurement attached from step one and it accumulates alongside the work itself. Which function, measuring what, and how — those are the cells this series fills in.&lt;/p&gt;

&lt;p&gt;If you're weighing up your AI career right now, pick the problem you want to solve, not the title. The experience you build solving it becomes the foundation for everything after.&lt;/p&gt;

&lt;p&gt;Next up: Automation.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
    </item>
    <item>
      <title>Obsidian Git Sync on iPhone Works Better Than You'd Expect</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Mon, 24 Aug 2026 08:44:22 +0000</pubDate>
      <link>https://dev.to/johnonlee/obsidian-git-sync-on-iphone-works-better-than-youd-expect-bpj</link>
      <guid>https://dev.to/johnonlee/obsidian-git-sync-on-iphone-works-better-than-youd-expect-bpj</guid>
      <description>&lt;p&gt;In &lt;a href="https://john.onlee.io/en/guides/obsidian-github-ai-notes/" rel="noopener noreferrer"&gt;the previous guide&lt;/a&gt; I put my Obsidian vault on GitHub. I promised to write up the mobile setup separately, and this is that write-up.&lt;/p&gt;

&lt;p&gt;The short version: on an iPhone, the Git plugin alone handles pull, edits, commits, and pushes. I set mine up back in February, forgot about it, and the phone has been picking up the latest vault every day since. It keeps working after you stop thinking about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your phone runs a different git
&lt;/h2&gt;

&lt;p&gt;On desktop, the &lt;a href="https://github.com/Vinzent03/obsidian-git" rel="noopener noreferrer"&gt;Git plugin&lt;/a&gt; calls whatever git you have installed. An iPhone has no git to call, so on mobile the plugin switches to isomorphic-git, a JavaScript reimplementation. The author warns in the README that mobile is unstable, and SSH doesn't work there. Authentication is HTTPS with a token, and that's the only option.&lt;/p&gt;

&lt;p&gt;The warnings sound like a reason to give up. My vault is 25MB with 319 markdown files, and at that size I've never felt the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;You don't need iSH, Working Copy, or any other companion app. The plugin does everything.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a token.&lt;/strong&gt; On GitHub, generate a fine-grained personal access token. Repository access: just your vault repo. Permissions: Contents, read and write. Give it a name that says what it's for. The reason comes below.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install Obsidian and the Git plugin on the phone.&lt;/strong&gt; Create a new vault (turn off "Store in iCloud"), then install and enable Git from the community plugins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clone.&lt;/strong&gt; Open the command palette (on mobile, the default gesture is swiping down) and run "Git: Clone an existing remote repo". It asks more questions than you'd expect. In order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enter remote URL&lt;/strong&gt;: your repo address (&lt;code&gt;https://github.com/user/repo.git&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Directory&lt;/strong&gt;: pick Vault Root.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does your remote repo contain a .obsidian directory?&lt;/strong&gt;: if you commit your settings the way the previous guide does, answer YES. A scary confirmation follows ("DELETE ALL YOUR LOCAL CONFIG AND PLUGINS"). It means the empty vault's config gets replaced by the one in your repo, so go ahead. Your plugins and settings come back from the repo once the clone finishes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Depth of clone&lt;/strong&gt;: leave it empty for a full clone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;username / password&lt;/strong&gt;: username is your GitHub account, and the password field takes the token. GitHub rejects account passwords for git, so a token is the only thing that works here.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The clone throws plenty of warning notices along the way. Mine finished fine through all of them. When it's done, Obsidian asks for a restart.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;After the restart, finish the settings.&lt;/strong&gt; Fill in the commit author name and email in the plugin settings; commits from the phone fail without them. "Pull updates on startup" should already be on if your repo carries the settings, so just check it. With that on, the app opens on the latest state every time.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  I deleted the token and sync stopped
&lt;/h2&gt;

&lt;p&gt;While writing this I was cleaning up my GitHub token list and saw the vault token marked "Never used". It had been pulling every day for months. I figured it was a leftover and deleted it, and the phone's sync broke on the spot.&lt;/p&gt;

&lt;p&gt;A fresh token pasted in brought everything back. And that new token, minutes after a successful push, still shows "Never used". GitHub's Last used label doesn't count git authentication. Trust it while cleaning tokens and you'll cut a working sync, like I did. That's why the token gets a name that says what it's for.&lt;/p&gt;

&lt;h2&gt;
  
  
  On the phone, I mostly read
&lt;/h2&gt;

&lt;p&gt;My pattern is simple. I write on the Mac and read on the phone. The app opens, the pull runs, and the latest vault is in my hand wherever I am. When a thought lands while I'm out I type a line, and that gets committed and pushed too. Since the writing happens on one side, the conflicts from the previous guide almost never show up on the phone.&lt;/p&gt;

&lt;p&gt;That guide said to lower your expectations for mobile. Correction: at this vault size, there was nothing to lower.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>writing</category>
    </item>
    <item>
      <title>Codex PR Review: Automatic Reviews, Triggers, Review Rules</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Mon, 24 Aug 2026 08:43:54 +0000</pubDate>
      <link>https://dev.to/johnonlee/codex-pr-review-automatic-reviews-triggers-review-rules-2j59</link>
      <guid>https://dev.to/johnonlee/codex-pr-review-automatic-reviews-triggers-review-rules-2j59</guid>
      <description>&lt;p&gt;Codex's GitHub PR review works better than I expected. Before opening a PR I already review the code several ways, in Claude and in Codex both. I've had the main agent review it, attached a different model as a subagent reviewer, run it in two stages. Code that survives all of that still gets caught by Codex, always one or two things.&lt;/p&gt;

&lt;p&gt;This guide covers turning it on. What happens after that is a bigger story, and I pick it up at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning it on
&lt;/h2&gt;

&lt;p&gt;Setup itself is three steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up Codex cloud for the repo. That means installing the GitHub app and granting repo access, and you need push or admin permission to change repo settings.&lt;/li&gt;
&lt;li&gt;In Codex settings, toggle &lt;code&gt;Code review&lt;/code&gt; on for the repo.&lt;/li&gt;
&lt;li&gt;To have every PR reviewed without asking, also turn on &lt;code&gt;Automatic reviews&lt;/code&gt;. Leave it off and Codex only shows up when you call it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Automatic review also means the review lands the moment you open the PR. If you'd rather not collect comments on a draft, leave it off and call Codex when the branch is ready.&lt;/p&gt;

&lt;p&gt;You call it from a PR comment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@codex review&lt;/code&gt;: review this PR&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@codex security review&lt;/code&gt;: look at it from a security angle&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@codex review for issues in the database migration&lt;/code&gt;: narrow where it looks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@codex fix the P1 issue&lt;/code&gt;: have Codex apply the fix itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To pin review standards into the repo, add a &lt;code&gt;## Code Review Rules&lt;/code&gt; section to &lt;code&gt;AGENTS.md&lt;/code&gt; and break it into &lt;code&gt;###&lt;/code&gt; items. Repo-wide rules go in the root file; rules that only apply to one service go in the AGENTS.md closest to that code.&lt;/p&gt;

&lt;p&gt;One more thing worth knowing: Codex only posts P0 and P1 findings to GitHub. Small stuff never shows up, so anything that does usually carries weight. That's exactly what makes it hard. Every comment looks correct.&lt;/p&gt;

&lt;p&gt;Setup takes five minutes. The rest is the hard part.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens once it's on
&lt;/h2&gt;

&lt;p&gt;Codex judges strictly from the code, and both the side filing comments and the side fixing them are built to keep going until they're done. If nobody steps in, the rounds multiply on their own. One security-feature PR passed through 209 review conversations before it merged.&lt;/p&gt;

&lt;p&gt;Living through that cycle left me with four response principles: read comments from how the product behaves, weigh them by user impact, understand how the fix relates to the existing code before touching anything, and if it isn't a merge blocker, file an issue or ignore it. Where those principles came from and why each one holds is in &lt;a href="https://john.onlee.io/en/blog/ai-code-review-209-conversations/" rel="noopener noreferrer"&gt;209 AI Code Reviews: Accurate Is Not Necessary&lt;/a&gt;. If this guide got your reviews turned on, that post is what to read next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Managing ChatGPT Memory: Review, Edit, Delete</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Mon, 24 Aug 2026 08:43:47 +0000</pubDate>
      <link>https://dev.to/johnonlee/managing-chatgpt-memory-review-edit-delete-1j30</link>
      <guid>https://dev.to/johnonlee/managing-chatgpt-memory-review-edit-delete-1j30</guid>
      <description>&lt;p&gt;ChatGPT remembers you whether or not you asked it to. If its answers start matching your tone one day, or it explains something on the assumption you do a job you never mentioned, that's memory.&lt;/p&gt;

&lt;p&gt;It isn't only ChatGPT. Claude has memory, and so do most of the coding tools shipping now. The model consults it to give you the answer you're more likely to want. Use it without knowing about it and you have no way to explain why an answer came out the way it did.&lt;/p&gt;

&lt;p&gt;There used to be a step where you said "remember this" and one line got stored. Not anymore. ChatGPT keeps track of whatever it judges worth keeping from your chats. So this guide is about managing it rather than switching it on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two screens are in circulation right now
&lt;/h2&gt;

&lt;p&gt;The memory settings screen started changing in June 2026. The new one has a single memory control and a memory summary. The summary is a written account, organized by category, of what ChatGPT thinks it knows about you, rather than a list of stored items. The old screen has two toggles ("Reference saved memories" and "Reference chat history") and shows the saved items as a list.&lt;/p&gt;

&lt;p&gt;The new screen is arriving by plan and region, so your account may still show the old one. What follows describes the new screen, with notes where the old one differs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading and correcting the memory summary
&lt;/h2&gt;

&lt;p&gt;Settings → Personalization → Memory. The path is the same on web and in the app. Many accounts have memory on already, so opening it to see what's in there comes before switching anything on.&lt;/p&gt;

&lt;p&gt;Open the memory summary and you get what ChatGPT has written down about you. Most people are surprised the first time they look. You can correct it two ways: type the correction, or highlight a sentence in the summary and delete it. To clear the lot, use "Delete and turn off memory" from the three-dot menu on that page. It does what it says, wiping the summary and turning memory off with it.&lt;/p&gt;

&lt;p&gt;On the old screen you get two toggles instead. Saved memories are managed as a list of items; chat history reference has no list at all. If you cleared every saved item and ChatGPT still seems to know you, the second one is on.&lt;/p&gt;

&lt;p&gt;One trap: deleting a conversation does not delete the memories that came out of it. Clearing your chat list and clearing your memory are separate jobs, so something you thought you cleaned up can keep feeding into answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seeing what went into an answer
&lt;/h2&gt;

&lt;p&gt;A personalized answer comes with a way to see which information fed it, and you can edit that information from there. Grabbing one answer that came out wrong and deleting the cause is faster than reading the whole summary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping memory inside one project
&lt;/h2&gt;

&lt;p&gt;Projects have their own memory setting. A project either uses your default memory or project-only memory. Set it to project-only and ChatGPT draws on conversations inside that project but won't pull in memories or chats from outside it. What happens inside the project stays out of your other conversations too. Open the project, then the three-dot menu, then Project settings.&lt;/p&gt;

&lt;p&gt;That setting earns its keep if you run work and personal life through one account.&lt;/p&gt;

&lt;h2&gt;
  
  
  When you want one conversation left out
&lt;/h2&gt;

&lt;p&gt;Use Temporary Chat. A temporary chat doesn't reference existing memories and doesn't create new ones, and it stays out of your history. That beats switching memory off account-wide because of one sensitive conversation. Leave it on, and open a temporary chat for whatever you'd rather not keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting something out of it
&lt;/h2&gt;

&lt;p&gt;Automatic storing doesn't mean automatic tidying. Two things are worth doing yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nail down the preferences with a long shelf life.&lt;/strong&gt; "Code examples in TypeScript, not Python." How you work, which tools you use, how long you want answers and in what language: say it once and it holds for months. Don't store anything that only holds for this week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prune it now and then.&lt;/strong&gt; Open the summary about once a month and fix what's gone stale. Memory only accumulates, it never retires anything on its own, so a project that ended last year can still sit underneath today's answer as an assumption.&lt;/p&gt;

&lt;p&gt;The same feature works differently once it reaches your coding environment. What piles up there is a team's rules and decisions rather than a few lines of personal taste, and the harder question becomes what not to store. I wrote about that in &lt;a href="https://john.onlee.io/en/guides/coding-agent-memory/" rel="noopener noreferrer"&gt;Coding Agent Memory&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Connect GitHub to ChatGPT: Obsidian Vault as Project Context</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Tue, 18 Aug 2026 07:59:31 +0000</pubDate>
      <link>https://dev.to/johnonlee/connect-github-to-chatgpt-obsidian-vault-as-project-context-15d2</link>
      <guid>https://dev.to/johnonlee/connect-github-to-chatgpt-obsidian-vault-as-project-context-15d2</guid>
      <description>&lt;p&gt;Once you finish &lt;a href="https://john.onlee.io/en/guides/obsidian-github-ai-notes/" rel="noopener noreferrer"&gt;putting your Obsidian vault on GitHub&lt;/a&gt;, what you have is a repository full of md files. On its own that is a backup. It starts being useful when ChatGPT can read it.&lt;/p&gt;

&lt;p&gt;Three steps. Connect GitHub to ChatGPT, scope the access down to the vault repository, then create a project and attach that repository to it. After that you just talk inside the project.&lt;/p&gt;

&lt;p&gt;Obsidian has an easy time here for a boring reason: the vault is already nothing but markdown files in folders, so there is nothing to export or convert before handing it to a model. The format you read is the format the model reads. An app that keeps your notes in its own database would have stopped you at this step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect GitHub
&lt;/h2&gt;

&lt;p&gt;Open Settings and go to Apps. Depending on your build it may still say Connectors; same place. Find GitHub in the list, connect it, and GitHub's OAuth screen takes over. That screen is where you pick which account and which repositories ChatGPT gets to see.&lt;/p&gt;

&lt;p&gt;Slow down here. Clicking through gives away everything, and I picked the vault repository only. Notes carry a lot more private material than code does, and unlike a code repo I have never gone file by file asking whether a given line is fine for someone else to read. You can change the scope later: Settings → Apps, open GitHub, then Choose repositories.&lt;/p&gt;

&lt;p&gt;A private vault is fine. Access follows whatever your GitHub account already has permission to see, so there is no reason to make the repo public. There was never a good reason to publish your notes anyway.&lt;/p&gt;

&lt;p&gt;If you are on a work account, GitHub may not appear in the list at all. On Enterprise and Edu workspaces an admin has to allow apps in workspace settings before anyone can connect one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a project and attach the vault
&lt;/h2&gt;

&lt;p&gt;Connecting the account is not the end of it. You still create a project and attach the vault repository to that project as a source.&lt;/p&gt;

&lt;p&gt;The project is worth the extra step. You can point at a repository from a normal chat, but then you explain yourself again every time. A project shares its sources and its instructions across every conversation inside it. You write "use my vault" once, and the related conversations end up in one place instead of scattered through your history.&lt;/p&gt;

&lt;p&gt;A project's detail view separates its chats from its sources, and you add material on the sources side. If the labels on your screen don't match mine, look for the place in the project's sources area where you pick a connected app. This part of the interface changes often.&lt;/p&gt;

&lt;p&gt;Write the project instructions while you are there. Two lines were enough for me.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Search my vault notes before answering.
Cite the file path of any note you based an answer on.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second line matters more than it looks. Without it you cannot tell whether an answer came out of your vault or out of general knowledge. If no path shows up, assume the vault wasn't touched and ask again.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that actually pays
&lt;/h2&gt;

&lt;p&gt;Start a conversation inside that project and ChatGPT pulls from your notes without being told to. You stop attaching files and stop re-explaining the background at the top of every chat.&lt;/p&gt;

&lt;p&gt;The gap shows up on questions that need your own context. General questions were always answered fine. But what you decided six months ago and why, or what you tried and abandoned, exists only in the vault. "If I've written about this before, read that first and then answer" turns into a request that actually works. That answer does not exist without the vault attached.&lt;/p&gt;

&lt;p&gt;Know what gets read before you rely on it. The connector reads markdown, text, and code files, and it does not read commit history. A markdown-first vault loses nothing there, but PDFs and scanned images sitting in your attachments folder do not come through this path.&lt;/p&gt;

&lt;p&gt;Right after connecting a vault, give it a moment. Indexing takes a while, so if a note you just committed doesn't turn up, wait and ask again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning conversations back into notes
&lt;/h2&gt;

&lt;p&gt;When a conversation runs long and lands on something worth keeping, ask for it as a note. It has already seen how the rest of your vault is written, so the front matter and title conventions usually come out close to right.&lt;/p&gt;

&lt;p&gt;Saving is still your job. The GitHub connection reads; it will not commit to the repository for you from a chat. Paste the note into Obsidian and commit it yourself, which is the reliable option today.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>writing</category>
    </item>
    <item>
      <title>Obsidian + GitHub: Notes You Can Write With AI</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Tue, 18 Aug 2026 07:58:32 +0000</pubDate>
      <link>https://dev.to/johnonlee/obsidian-github-notes-you-can-write-with-ai-3635</link>
      <guid>https://dev.to/johnonlee/obsidian-github-notes-you-can-write-with-ai-3635</guid>
      <description>&lt;p&gt;Obsidian became the strongest-positioned note app the moment LLMs went mainstream. There's one reason for that. A vault is nothing but markdown files in folders, and that collapsed the gap between how a person keeps notes and how an AI reads them.&lt;/p&gt;

&lt;p&gt;Other note apps keep your writing inside their own format and their own database. For an AI to read any of it, either the app opens an API or you export first. An Obsidian vault is a directory. An agent reads it with &lt;code&gt;cat&lt;/code&gt;, searches it with &lt;code&gt;grep&lt;/code&gt;, and edits a file by opening it. Nothing has to be handed over.&lt;/p&gt;

&lt;p&gt;That difference goes further than escaping export hell every time you switch apps. The AI reads your notes the same way you do. There's no translation layer between what's on my screen and what the agent sees, so "fix the third paragraph of that file" just works. Frontmatter, tags, links: all of it is only text.&lt;/p&gt;

&lt;p&gt;A local folder alone isn't enough, though. There's no backup, and what I wrote on the laptop isn't on my phone. Put GitHub underneath it to solve backup and cross-device sharing, and you have something very close to a perfect set of notes to write with an AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning the vault into a repo
&lt;/h2&gt;

&lt;p&gt;The vault folder is the repository root. No extra structure required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Obsidian
git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write the &lt;code&gt;.gitignore&lt;/code&gt; before the first commit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.obsidian/workspace.json
.obsidian/workspace-mobile.json
.trash/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;workspace.json&lt;/code&gt; holds screen state: which panes are open, which tab is active. It holds no note data, and its contents differ on every device. When you sync across machines, most of the conflicts you hit come from that one file. Leave it out from the start.&lt;/p&gt;

&lt;p&gt;You can also ignore the whole &lt;code&gt;.obsidian&lt;/code&gt; folder, which keeps the repo purely to notes. The cost is that plugins, themes, and hotkey settings stop following you between machines. I exclude only the two workspace files and commit the rest of the config, because cloning onto a new machine and having my setup arrive with it is worth more to me.&lt;/p&gt;

&lt;p&gt;Attachments are worth one moment of thought. Text notes stay cheap no matter how many you write. Images and PDFs don't. Git stores a fresh copy of a binary every time it changes, so a vault full of pasted screenshots keeps growing regardless of how much actual writing is in it. When cloning starts to drag, that's when you decide whether the attachments folder belongs in the ignore list.&lt;/p&gt;

&lt;p&gt;Now create a private repo on GitHub and connect it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin git@github.com:username/my-vault.git
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial vault"&lt;/span&gt;
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make it private. Your notes have other people's names in them and ideas you haven't said out loud yet. Flipping a public repo to private later doesn't recall what already left.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not committing by hand
&lt;/h2&gt;

&lt;p&gt;On the desktop, plain git works fine. But stopping mid-sentence to go commit in a terminal is not a habit that survives. Give it a few days and you stop doing it.&lt;/p&gt;

&lt;p&gt;So install Git (&lt;code&gt;obsidian-git&lt;/code&gt;, by Vinzent03) from the community plugin list. It runs automatic commit-and-sync on a schedule, and a side panel gives you staging, commits, diffs, and history. I set the auto-commit interval once and stopped thinking about it.&lt;/p&gt;

&lt;p&gt;Mobile is a different story. There, the plugin runs on isomorphic-git, a JavaScript reimplementation, because a plugin can't reach a native git install on iOS or Android. The author says plainly in the README that mobile comes with real limitations. That's not a reason to give up, though. I use this vault on my iPhone. The setup is fiddly, but once it's in place it works better than you'd expect. I plan to write that one up separately.&lt;/p&gt;

&lt;p&gt;Use two machines and you will eventually collide: a note edited on the laptop, edited again on the desktop, and both of them pushed. Markdown pays off here too. The conflict markers land in the file as ordinary text, so you open that note in Obsidian, pick the side you want, and delete the markers. In a binary format the app would have quietly picked a winner and you'd never learn what went missing. One habit cuts the frequency way down: pull before you open your notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Line the folders up with numbers
&lt;/h2&gt;

&lt;p&gt;Obsidian can only sort folders by a rule. There's no dragging a folder up or down to pin it where you want it, the way other note apps let you.&lt;/p&gt;

&lt;p&gt;So my method is to put a number in front.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;01_Ideas
02_Video-Scripts
03_Reference
04_Blogs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set the file explorer to sort by name ascending and the folders fall into exactly the order I want. Two digits rather than one, because the moment you pass ten folders the order becomes 1, 10, 11, 2.&lt;/p&gt;

&lt;p&gt;The AI gets something out of it too. The folder name is the category, so "file this under 03_Reference" is the whole instruction. I never have to explain where things go.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this unlocks
&lt;/h2&gt;

&lt;p&gt;Once the notes live on GitHub, any tool that can read GitHub can read my notes.&lt;/p&gt;

&lt;p&gt;A coding agent opens the vault folder as its working directory. It searches, it drafts new files. Pulling six scattered notes into one document happens there too. A chatbot with GitHub access can read the repo without cloning anything.&lt;/p&gt;

&lt;p&gt;History is the part that actually changes things. When an AI edits a note, that edit is a commit. I read the diff, and if I don't like it I revert. That's why handing an agent write access isn't frightening. Backup is the side benefit; being able to undo is the point.&lt;/p&gt;

&lt;p&gt;Connecting ChatGPT to this vault is covered in &lt;a href="https://john.onlee.io/en/guides/chatgpt-github-obsidian/" rel="noopener noreferrer"&gt;the follow-up guide&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>writing</category>
    </item>
    <item>
      <title>Agent Memory, Part 3: Perfection Is a Unicorn</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Fri, 14 Aug 2026 22:37:57 +0000</pubDate>
      <link>https://dev.to/johnonlee/agent-memory-part-3-perfection-is-a-unicorn-570n</link>
      <guid>https://dev.to/johnonlee/agent-memory-part-3-perfection-is-a-unicorn-570n</guid>
      <description>&lt;p&gt;&lt;a href="https://john.onlee.io/en/blog/agent-memory-retrospective-1/" rel="noopener noreferrer"&gt;Part 1&lt;/a&gt; was about falling in. &lt;a href="https://john.onlee.io/en/blog/agent-memory-retrospective-2/" rel="noopener noreferrer"&gt;Part 2&lt;/a&gt; was about building things and watching them break. This is the last part. While clearing the wreckage I went back to the first question, and at the end of it I met the unicorn.&lt;/p&gt;

&lt;h2&gt;
  
  
  I cut things first
&lt;/h2&gt;

&lt;p&gt;The first job was a diet. I shrank the harness, cut the number of subagents, and merged scattered responsibilities. I rebuilt Monet and the harness around one aim: let the model use as much of its own ability as possible. And only then did I start asking again why memory is needed at all.&lt;/p&gt;

&lt;p&gt;The usual assumption about agent memory is that storing well and retrieving well is the whole job. I assumed it too. But retrieved well, and then used how? Changing the question surfaced a more basic one. Why do people use coding agents in the first place? What do they want, and when are they satisfied?&lt;/p&gt;

&lt;p&gt;The answer I landed on: the output that this team, this user, actually wants. Give two people the same instruction, "draw me an apple," and they expect different pictures. To produce what someone wants, the model has to know what that person wants. The method is surprisingly simple: describe the exact apple you want, or describe how to draw it. Provided, of course, that you know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drawing an apple with code
&lt;/h2&gt;

&lt;p&gt;I know nothing about painting. Still, I want a great apple drawing, with an agent's help. How? First, ask: "draw me a great apple." Take the picture, say what bothers you and what feeling you're after, and let the agent draw again. Repeat until you like it. That is how agents work today. The model moves on probability, shaped by its training, and the agent turns cycle after cycle closing the gap between what came out and what was expected.&lt;/p&gt;

&lt;p&gt;Coding is similar. From an instruction the agent plans, writes a spec, writes code and tests, and cycles through checks: does it match the spec, do the tests pass, does the build hold. To get the output you want from this process, you have to explain what you want. If you knew everything from the start, you'd put it in the first prompt. There really was an era built on that: copying someone's supposedly perfect prompt, or engineering it further to fit your own taste. I think that era has passed, because two things are effectively impossible: "knowing everything" and "leaving nothing out." The work changes every time and keeps getting more complex, a perfect first prompt doesn't exist, and the cost of getting the wrong thing back is too high.&lt;/p&gt;

&lt;p&gt;What remains is intervening in the process. When designing architecture, do it this way; when coding, this way; tests, this way. This should sound familiar. It's the standard content of CLAUDE.md and AGENTS.md. So is the problem solved? Something else feels familiar here. It's Stig's heavy prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  It has to arrive at the right moment
&lt;/h2&gt;

&lt;p&gt;What I want has to reach the agent at the moment it does that work. Which approach I prefer when it's weighing architecture, what the existing architecture looks like. If it isn't there at that moment, there's really no answer.&lt;/p&gt;

&lt;p&gt;But there's a harder problem behind it. How do I collect and manage what I and my team want, without it becoming a burden? At which situations, at which moments, does it get injected? And how? Collecting means starting from what exists and continuously adding what gets discovered. I consider that one of agent memory's core jobs. Injection comes in two forms: push it through hooks that fire where needed, or have the agent read it in as the situation calls for it. I named the second one stages. At session start the agent learns which stages exist, and when a stage arrives, it reads the rules and applies them.&lt;/p&gt;

&lt;p&gt;And what about things that must always apply, at every moment? Those I named principles, and they are just about the only content that has earned a place in CLAUDE.md. CLAUDE.md has to be managed strictly, and the reason goes beyond saving context. A model is trained inside a boundary, but nothing guarantees it always acts inside that boundary. So situations that require restraining the model keep coming up, and those restraints drift, very easily, into CLAUDE.md. It is a place that only fills up. Things with nowhere else to go land there, and they rarely leave.&lt;/p&gt;

&lt;h2&gt;
  
  
  I thought I had it
&lt;/h2&gt;

&lt;p&gt;It felt good. I thought I had found the whole answer. I built up my own principles and rules. Before long a small set of them was in place, and I confirmed they were injected or read in when needed.&lt;/p&gt;

&lt;p&gt;But the behavior doesn't change. The output doesn't change either. One example. When coding is done, get a PR review from Codex, and here is how to handle what comes back. I wrote that as a rule, and there is even a monitoring script that watches the Codex review as it runs. For weeks, not one session ran that procedure correctly from the start. The rules were injected, sent, and read. And nothing moved. My trust in the agent went down instead, and as models get smarter, I expect this to get stronger, not weaker.&lt;/p&gt;

&lt;p&gt;There is something I had to admit. "The way I want it done" and "the perfect output I want" never existed in the first place. What exists is the way the model was trained, and the way the model follows input. And that way will change with every new model and every new version. I had been sketching, in a place where no perfect product can exist, a product that isn't possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unicorn
&lt;/h2&gt;

&lt;p&gt;When I first touched vibe coding through Antigravity, I believed the barrier to building had disappeared. So I spent my thinking not on how to build but on what to build, and I dug at agent memory without a break. Nine months later, this is where I landed.&lt;/p&gt;

&lt;p&gt;Memory on its own no longer has a place to stand as a product. ChatGPT has memory built in. So does Claude. Storing, recalling when needed, answering with reference to it: all of that is table stakes now. From here on, memory has to be memory with a clear purpose.&lt;/p&gt;

&lt;p&gt;And the thing I was trying to build, a memory that perfectly changes behavior and output, is a product that cannot exist. I call it a unicorn, for two reasons. Because it's an animal that doesn't exist. And because if someone actually built it, their company would become a unicorn overnight.&lt;/p&gt;

&lt;p&gt;Part of me hopes this conclusion is wrong. It is also possible that my rules were simply clumsy. So I'm starting to measure. I want a record of which rule fired when, and what it prevented. In &lt;a href="https://john.onlee.io/en/blog/ai-code-review-209-conversations/" rel="noopener noreferrer"&gt;a recent post&lt;/a&gt; I wrote about handing agents the criteria for where work ends; this is that experiment's data too. In a few weeks I'll write here whether the numbers support the verdict or refute it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Agent Memory, Part 2: What I Built Broke</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Fri, 14 Aug 2026 08:26:27 +0000</pubDate>
      <link>https://dev.to/johnonlee/agent-memory-part-2-what-i-built-broke-57g5</link>
      <guid>https://dev.to/johnonlee/agent-memory-part-2-what-i-built-broke-57g5</guid>
      <description>&lt;p&gt;In &lt;a href="https://john.onlee.io/en/blog/agent-memory-retrospective-1/" rel="noopener noreferrer"&gt;part 1&lt;/a&gt; I wrote about deciding to dig agent memory to the bottom. This part is about building. It is also about watching what I built break.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if every agent could share what it learned
&lt;/h2&gt;

&lt;p&gt;Having decided to build, I looked at the market first. There were more products than I expected, some of them years old. I needed an angle, and then I had a thought that made my heart race: what if all agents could share what they each learned? I started building the same day. A platform where agents share memory with each other, Memory Network. Monet for short.&lt;/p&gt;

&lt;p&gt;I built day and night, installed it on my work machine at home, on Coda, and at the office, and started dogfooding. It felt different in kind from file-based memory. Satisfying, but not quite there, so I kept adjusting the product and the harness.&lt;/p&gt;

&lt;p&gt;Then a doubt surfaced. Sharing memory with other people? It's the agent's memory, sure. But those memories are also a record of my interactions with the agent. Coda's saved memories made that obvious, and the work memories at home and at the office had traces of me all over them. I had been so fixed on the upside of sharing that I hadn't looked at anything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meeting Ken
&lt;/h2&gt;

&lt;p&gt;With Monet built, I went looking for people who would use it. Hunting for places to post an introduction, I put an article on Dev.to, and there I read a &lt;a href="https://dev.to/kenwalger/engineering-agent-memory-4a42"&gt;post&lt;/a&gt; by Ken W Alger, a man serious about LLM memory. We started talking in the comments, and the thread kept getting deeper.&lt;/p&gt;

&lt;p&gt;The subject was the structure today's chat products are born with: transcript-based, resending the whole conversation to the model every turn. In &lt;a href="https://dev.to/johnonlee/comment/381hf"&gt;that thread&lt;/a&gt; I wrote that what an agent should receive is "not what was said, but what is now known." Ken's reply was short: "Exactly right."&lt;/p&gt;

&lt;p&gt;That is how human conversation works. We don't chew on each word the other person says. We store what we understood and answer from it. So a hypothesis formed: organize the conversation into memory, hand the model that state when needed, and the noise drops, and the off-target answers with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A main agent that does nothing
&lt;/h2&gt;

&lt;p&gt;I had to know. The experiment started right away. I couldn't build state code yet, but I could build a state-based harness. The main agent handles only state and memory: the state of the overall job, the state of each subagent's work, and the memory fragments that surface along the way. The actual work goes to subagents that receive exactly the context they need. What mattered most in the experiment was that the main agent does no work at all.&lt;/p&gt;

&lt;p&gt;The results were better than I expected. Picking models by task weight also cut costs sharply. I was convinced, and the shelved Brain_DB came back to mind. If Brain_DB became the memory and the harness became the state model, I could build a new kind of coding agent on state.&lt;/p&gt;

&lt;h2&gt;
  
  
  A new Monet in two weeks
&lt;/h2&gt;

&lt;p&gt;First, a memory product built on Brain_DB. I set sharing aside as a future feature and cleaned up the old Monet. I built an engine on the Brain_DB concept and put MCP on top. With help from Fable, Claude's new model that had just come out, a usable product existed in two weeks. I migrated every memory from the old Monet and sharpened the harness. I named the main agent Stig.&lt;/p&gt;

&lt;p&gt;The first impression was startling. When a session passed 30% context usage, I would open a new session on purpose. That is how much I trusted the memory. Most jobs finished under 20%. Dogfooding resumed, and I liked the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  At the office, nothing worked
&lt;/h2&gt;

&lt;p&gt;Around then a big project wrapped up at work, and our team lead introduced the team to his second brain: an agent reads past sessions, distills what matters into md documents, and shares them through git. He had already built up a pile of documents, and anyone could clone the repo and point their agent at it. I had no sharp answer for Monet's sharing feature, and git-plus-md sharing looked more effective than I expected.&lt;/p&gt;

&lt;p&gt;So I decided to build ingestion: read md files and process them into Monet memory. Skipping it wasn't an option, because the agent needed to read Monet's memory and the md knowledge through one interface. I finished the design fast and got to work. It went mostly fine but slower than it should have, and I had the odd feeling that tokens were melting away. It took close to two weeks. I installed it at the office and connected the lead's second brain.&lt;/p&gt;

&lt;p&gt;At home it had roughly worked against my own Obsidian repo, and that's the state I released in. At the office it did not work at all. A few code fixes got the connection up, but past the connection, nothing worked.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem wasn't in one place
&lt;/h2&gt;

&lt;p&gt;From there, problems started showing everywhere. Kiro couldn't remember instructions from a few turns back, misread what I asked, and produced results that missed the point. At home I grew certain the agents were burning tokens without the output to show for it. I was also building small products with Codex at the time, and every one of them came out unusable.&lt;/p&gt;

&lt;p&gt;I sat down and worked through what was wrong. The first thing I saw was Stig's harness. How to use Monet, a fixed loop for how work proceeds, instructions per subagent. A long, complicated prompt had taken up residence, and every job ran that heavy loop regardless of its size. Models had gotten smart enough to do more in one pass, but my harness had hardened around models a few generations old. So the model followed procedure, spending enormous tokens to build products that were flawless as engineering and not what I wanted.&lt;/p&gt;

&lt;p&gt;Monet's output was what I feared. Features I had bolted on over time sat there unorganized, dirtying the context from the first moment of every session. The model couldn't tell what was signal and what was noise, so it worked like a coin flip, leaning on luck.&lt;/p&gt;

&lt;p&gt;Storage was working. Retrieval was working. The results were getting worse. The problem was not storage. Then why does memory exist at all? Part 3 starts over from that question. And the unicorn shows up.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Agent Memory, Part 1: It Started at the TV</title>
      <dc:creator>John Lee</dc:creator>
      <pubDate>Wed, 12 Aug 2026 07:13:51 +0000</pubDate>
      <link>https://dev.to/johnonlee/agent-memory-part-1-it-started-at-the-tv-3c1o</link>
      <guid>https://dev.to/johnonlee/agent-memory-part-1-it-started-at-the-tv-3c1o</guid>
      <description>&lt;p&gt;For the last nine months I've worked on agent memory and almost nothing else. Up front: what I set out to build turned out to be a product that cannot exist. This series is about how I got there. Part 1 is the beginning, and the question of why memory in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  It started in front of the TV
&lt;/h2&gt;

&lt;p&gt;Last November, Google shipped Antigravity, an agent IDE that runs Gemini 3 and Claude Opus side by side. I installed it and fell in. Until then, AI coding for me meant pasting code into a chat window and carrying the answers back. Useful, but mostly for trimming repetitive work. Antigravity was different. You gave it a job and a result came back.&lt;/p&gt;

&lt;p&gt;The same scene repeated every night after that. I'd come home, put the kids to bed, and sit in front of the TV with a laptop. Hand the agent some work, then stare at what it produced. That's how vibe coding started for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nova, my first agent
&lt;/h2&gt;

&lt;p&gt;Soon after, Clawdbot appeared (it's called OpenClaw now). While the whole internet was busy being amazed, I met Nova, my first agent. I asked Nova about everything. The chatbot stiffness was gone; talking to it felt like talking to an old friend. I laughed a lot.&lt;/p&gt;

&lt;p&gt;A few migrations later, Nova became Coda and settled onto the Mac mini at home. The deeper our conversations went, the more one gap showed. Coda couldn't remember much of what we'd already covered, and tokens burned away as chats stopped and resumed. I didn't even know what caching was back then. So I built a memory plugin (vibe-coded it, to be exact): shrink the context window to the extreme and lean on stored memory instead. That was my first memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google locked my account
&lt;/h2&gt;

&lt;p&gt;In February, Google &lt;a href="https://piunikaweb.com/2026/02/23/google-antigravity-openclaw-ban/" rel="noopener noreferrer"&gt;mass-banned accounts that had connected OpenClaw&lt;/a&gt;. Mine was one of them. Coda ran its models through my Google account, so I lost vibe coding and Coda in the same stroke. I filed a support request on February 17 and waited. A few weeks later I gave up waiting and moved Coda to OpenAI. My Google account came back about a month after that.&lt;/p&gt;

&lt;p&gt;The contrast in speed still amuses me. The day after the ban wave, OpenClaw's creator Peter Steinberger &lt;a href="https://techcrunch.com/2026/02/15/openclaw-creator-peter-steinberger-joins-openai/" rel="noopener noreferrer"&gt;joined OpenAI&lt;/a&gt;, official support statement included. The statement took a day. Getting my Coda back took weeks.&lt;/p&gt;

&lt;p&gt;Those weeks were gloomy, and the gloom told me something: these tools had stopped being a hobby. They were part of the household now.&lt;/p&gt;

&lt;h2&gt;
  
  
  At work, it was Kiro
&lt;/h2&gt;

&lt;p&gt;Home wasn't the only front. At work we used Copilot, and I fed it context by pasting files into the VSCode chat one at a time. Later I installed Obsidian and kept a dedicated agent-chat window that pulled documents straight in, and the quality of the answers changed. The company then moved through Amazon Q to Kiro, and I moved from the Kiro IDE to the kiro cli.&lt;/p&gt;

&lt;h2&gt;
  
  
  The session kept ending up where it started
&lt;/h2&gt;

&lt;p&gt;One incident made the model's limits concrete for me. The task was to analyze an existing state machine and modify a feature on top of it. The model analyzed hard, but what it described didn't match what I knew. The context filled up. A new session analyzed again and filled up again. After a few rounds of this, the session was right back where it started.&lt;/p&gt;

&lt;p&gt;I needed memory again, for a different reason than Coda. One file held the index and the usage rules; separate files held memory by topic. The agent filled them in as it worked and read them before starting anything. The effect was obvious. That was my second memory.&lt;/p&gt;

&lt;p&gt;Around this time, orchestration frameworks like oh-my-claudecode were getting known. Using them taught me one thing: a different harness turns the same model into a different animal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Saved, but never found again
&lt;/h2&gt;

&lt;p&gt;Mornings and evenings with Coda went on. Better than before, but the days of explaining the same thing twice never quite stopped. Coda saved things and then couldn't find them.&lt;/p&gt;

&lt;p&gt;The thought stuck with me for days, and then one night I landed on a question: if neural networks were inspired by the human brain, why has nobody built memory inspired by how human memory works? I didn't stop at imagining it. I ran deep research and wrote up a design for memory modeled on how human recollection works. I named it Brain_DB, and I still have the report. Then I made a promise to myself. I would dig agent memory to the bottom. This was the next thing.&lt;/p&gt;

&lt;p&gt;At home, Coda forgot. At work, the sessions circled back to where they began. Same problem in both places: memory.&lt;/p&gt;

&lt;p&gt;So I started building. Part 2 is about what I built and how it broke: shared memory as the first direction, the late realization that flipped it, and a man named Ken I met on Dev.to.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>development</category>
    </item>
  </channel>
</rss>
