<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Compounding Decisions for the Age of AI]]></title><description><![CDATA[Exploring how people, products, and intelligent systems learn, adapt, and compound over time.]]></description><link>https://blog.rememberloop.com</link><image><url>https://blog.rememberloop.com/img/substack.png</url><title>Compounding Decisions for the Age of AI</title><link>https://blog.rememberloop.com</link></image><generator>Substack</generator><lastBuildDate>Sat, 17 Oct 2026 21:29:40 GMT</lastBuildDate><atom:link href="https://blog.rememberloop.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Sriram Natarajan]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[srinatar@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[srinatar@substack.com]]></itunes:email><itunes:name><![CDATA[Sriram Natarajan]]></itunes:name></itunes:owner><itunes:author><![CDATA[Sriram Natarajan]]></itunes:author><googleplay:owner><![CDATA[srinatar@substack.com]]></googleplay:owner><googleplay:email><![CDATA[srinatar@substack.com]]></googleplay:email><googleplay:author><![CDATA[Sriram Natarajan]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How my agent splits work across my Claude and ChatGPT subscriptions ]]></title><description><![CDATA[I built pmmate, a small supervisor agent that routes my PM work to Claude Code or Codex based on a few rules such as task scope/ complexity, how much tokens I have left with each ChatGPT/Claude subscription and informs me when something needed my attention.]]></description><link>https://blog.rememberloop.com/p/how-my-agent-splits-work-across-my</link><guid isPermaLink="false">https://blog.rememberloop.com/p/how-my-agent-splits-work-across-my</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sat, 10 Oct 2026 22:35:27 GMT</pubDate><content:encoded><![CDATA[<p><strong>I built pmmate, a small supervisor agent that routes my PM work to Claude Code or Codex based on a few rules such as task scope/ complexity, how much tokens I have left with each ChatGPT/Claude subscription and informs me when something needed my attention. </strong></p><p>As part of my work, I pay for two AI subscriptions, Claude and ChatGPT.  On a busy day, I run several AI sessions open at once: one for  communication related tasks such as newsletters, another for data analysis such as usage patterns, behavioral analysis and the last one for product work such as docs, prototype etc. I experienced several challenges with this approach. For example, when i switch between Claude or ChatGPT application because I am running low on subscription tokens, I lose all past learnings. </p><p>I wanted a workflow where my work can continue irrespective of what models I use. I wanted an agent that will know how to retain my work related memory, provide the necessary context to a specific model based on the task scope/complexity and automatically reflect on my past week and send me a retrospective. I wanted this agent to simply handover each task to the right model, watch it, and tell me only when something needed me.</p><h2><strong>Why I didn&#8217;t use firstmate as is</strong></h2><p>Initially, I explored <a href="https://github.com/kunchenguid/firstmate">firstmate</a>, an open-source agent setup for running a crew of coding agents. You talk to one agent, the first mate. It starts workers in their own terminal tabs, supervises them, and brings back finished pull requests. Every worker gets its own git copy of the repo, so parallel workers never collide. This setup would work well if I am coding all day, but my PM work doesn&#8217;t live in git that way. So, I decided to build a small version for PM work and borrow only the ideas I needed. </p><p>I call my agent <strong>pmmate</strong>.</p><h2><strong>What pmmate does</strong></h2><p>I talk to pmmate. pmmate routes, supervises all my tasks and finally reports on the progress of each task, and never does the work itself.</p><ol><li><p>Each task runs in its own <a href="https://herdr.dev/">herdr</a> tab, so I can watch any worker.</p></li><li><p>A small script waits for a worker to write a status line, so the supervising agent spends no tokens while it waits.</p></li><li><p>Everything is saved on disk, so a restart picks up where it left off.</p></li></ol><p>The new idea is lanes. Each of my ten workstreams is a lane. For example, my lanes typically cover a) product strategy and roadmap, b) product pricing, c) prototype related work, d) customer and broad newsletter communication, e) data analysis and so on. A lane runs one worker at a time, because workers in one workstream share a STATUS.md file that tracks what&#8217;s live. Different lanes run in parallel. Workers edit the real folders, so they see the decks and inputs.</p><h2><strong>How it splits work across my two subscriptions</strong></h2><p>For every task, pmmate picks a tool and a model and writes down why so we can audit and improve it later. The rules I have now are simple and short:</p><ul><li><p>Hardest writing such as product strategy or pricing proposals and executive memos, choose Claude Fable 5.1 at high effort.</p></li><li><p>Standard writing, such as the newsletter, product updates and RFP answers, choose Claude Opus 5.5.</p></li><li><p>Mechanical edits, choose Claude Haiku 4.5.</p></li><li><p>Product mocks or prototypes or data analysis on customer support tickets, product usage patterns, etc, using tools such as Python/SQL then choose Codex with Luna.</p></li></ul><p>Before launching a worker, my pmmate tool checks for the subsription status to see how many tokens remaining of each subscription&#8217;s weekly limit is left and then routes the task according to the above rules. If the preferred model is below 15%, then pmmate moves to the next option and tells me. If in case, I explicitly say &#8220;use codex&#8221;, then pmmate overrides my choice.</p><h2><strong>What I learned building it</strong></h2><ul><li><p>Each worker takes one assignment and exits. If it has a question, it stops and pmmate asks me. </p></li><li><p>I gave up steering a worker mid-task in exchange for supervision that is simple and reliable.</p></li><li><p>Every commit uses a conventional commit message, so git log --oneline is the changelog. </p></li><li><p>A README and a handoff doc cover the rest, so a new agent can pick up the project with full context.</p></li></ul><h2><strong>How it reflects and improves</strong></h2><p>Each finished task adds one line to an outcomes log: the lane, the model, the minutes, whether I accepted it or sent it back, and my correction in my own words.</p><p>A /retro command reads that log. It reports what went well, and it turns any correction I make twice into a proposed change to a skill or a routing rule, shown as a diff. I approve each change. Nothing edits itself.</p><p>I write the skills using Matt Pocock&#8217;s rules - one skill per repeated steering with the front matter setup so that the skill is loaded only when needed, clear and specific steps in the skill file and separate reference section. </p><p>I have setup so that pmmate&#8217;s six skills are only 9 to 12 lines each and a skill change counts as working only when the correction it targets is addressed in the next week&#8217;s retro.</p><h2><strong>What am I looking forward to</strong></h2><ul><li><p>Route real code and data tasks through the Codex lanes, so the split isn&#8217;t all Claude.</p></li><li><p>Run /retro after a week and see which corrections repeat.</p></li></ul><p>I expect to keep paying for both subscriptions. What I&#8217;m looking forward to evaluating is whether an agent can put my tokens to better use than how I did. </p><p>For all multiple subscribers, I am curious to know on how you all decide as to which AI subscription gets which task?</p>]]></content:encoded></item><item><title><![CDATA[Why coding agents make segment choice more important]]></title><description><![CDATA[I frequently see a similar question in some of my PM Slack groups: if AI reduces the cost of building software, do companies still need to pick or focus on a target segment?]]></description><link>https://blog.rememberloop.com/p/why-coding-agents-make-segment-choice</link><guid isPermaLink="false">https://blog.rememberloop.com/p/why-coding-agents-make-segment-choice</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 04 Oct 2026 18:50:56 GMT</pubDate><content:encoded><![CDATA[<p>I frequently see a similar question in some of my PM Slack groups: if AI reduces the cost of building software, do companies still need to pick or focus on a target segment?</p><p><em>In product management, a <strong>target user segment</strong> is <strong><mark>a specific, defined group of users or customers with a common need that the product is designed to serve</mark></strong>. Instead of building a product for &#8220;everyone,&#8221; a Product Manager (PM) narrows focus to a subset of the market that shares similar characteristics, needs, pain points, or behaviors.</em></p><p>Defining a target segment ensures the product solves problems for a highly motivated group of users, preventing wasted engineering resources on features nobody wants.</p><p>Take a growing B2B company with three promising requests. One prospect wants a new channel (say updates over Teams), another needs a different workflow, and a third asks for a different user experience. </p><p>A few years ago, engineering capacity forced a choice among them. With coding agents, the team may be able to build all three. So, should it?</p><p>I would still say no, or at least not yet, because building the feature was only the part of the commitment that used to be scarce.</p><p>When the sales team brings a request, it might look like a feature, but it is up to PMs to decide whether the request serves existing user segments or opens into a new user segment.</p><p>A new channel usually brings a buyer you have not previously sold to, and that buyer needs their own demo and their own proof of value. When you build a different workflow (say you bring agents into the workflow), then you serve a different job, so the team gets judged on new success metrics and against a new set of competitors. A different deployment model or user experience triggers its own review and integration work, and it often needs a separate sales motion.</p><p>AI cut the cost of writing the code, but it did not reduce the cost to:</p><ul><li><p>Get a prospect to believe the product works for their job</p></li><li><p>Build the demo, integration, and reference story so the sales team can reuse it</p></li><li><p>Support the edge cases once the deal goes live</p></li><li><p>Offer a coherent roadmap that a team can explain without a footnote</p></li></ul><p>If the company accepts all requests without thinking about the impact, then it will drift into different segments. Sales will now carry different stories. Similarly, support will manage unrelated sets of edge cases, and the team will spend the next quarter switching context when it could have made one workflow better than the alternatives.</p><p>Competitors can also copy features faster now. When a competitor can reproduce your dashboard in a sprint, the key difference comes from how well you truly understand your users&#8217; needs and how well you serve the job-to-be-done for them.</p><p>This is why it is important for PMs to make your product positioning (how you want customers to perceive you) clear to Sales and the rest of the company. The team can then use it as a filter before it builds a requested feature.</p><p><strong>A one-sentence test for each request</strong></p><p>Before treating a request as roadmap input, write your current position in one sentence:</p><p>We help [<strong>buyer/user</strong>] do [<strong>job</strong>] better than [<strong>alternative</strong>], proven by [<strong>outcome</strong>].</p><p>Then put the each of the incoming sales/customer feature requests next to the above sentence.</p><ul><li><p>Same buyer, same job, better proof: build it. Most of the AI speed should be applied here, so your team can iterate faster and double down on your target segment.</p></li><li><p>Same buyer, adjacent job: sequence it. You need to evaluate whether you are done  or want to pause the current job-to-be-done before you open a new job for your target segment. This should be done after some thinking about the opportunities, users&#8217;s needs etc.</p></li><li><p>Different buyer, different job, or a different way of buying: treat it as a new segment and decide it at that level, outside the feature backlog. </p></li></ul><p>If you cannot write the above sentence, then you do not have a position yet, and building all three requests - just because your team can - will not get you anywhere.</p><p><strong>Saying No</strong></p><p>As a Product Manager, it is your job to say No. However, when you can clearly articulate the rule and framework, then Saying no becomes lot easier to the prospects. </p><p>When you identify requests that belong to other segments, log them clearly as new segment bets and assign an owner and a review date, so your teams and stakeholders know how you are thinking about this.</p><p>Before you say yes to a sales or customer request, try to answer these five questions:</p><ol><li><p>Who is the buyer, and is it the buyer you already sell to?</p></li><li><p>What does success look like in the first 30 days, in their metric?</p></li><li><p>What demo, integration, and security review does this add?</p></li><li><p>Can the current sales story work well with this, or does it need a new one?</p></li><li><p>What will you stop doing to pay for the added support and roadmap work?</p></li></ol><p>When you answer these questions and realize that solving your users&#8217; or sales ask takes you away from your current buyer and sales story, then you are choosing either a new or an adjacent market, and you should run the request through the same review lens as you would use for entering a new segment.</p><p>When engineering capacity used to be common constraint, product teams didn&#8217;t having to explicitly make such decisions. With coding agents, the product teams must now make it on purpose.</p><p>I encourage the product teams to dig deep into the segment you already serve, and open up an adjacent or a new segment only after you have validation that you have differentiated value and a path to a repeatable sales motion in this new target segment.</p>]]></content:encoded></item><item><title><![CDATA[What Amazon blocking Muse tells us about agentic commerce]]></title><description><![CDATA[Last week, I wrote that I might eventually let Muse buy a movie or concert ticket for me.]]></description><link>https://blog.rememberloop.com/p/what-amazon-blocking-muse-tells-us</link><guid isPermaLink="false">https://blog.rememberloop.com/p/what-amazon-blocking-muse-tells-us</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 27 Sep 2026 18:05:20 GMT</pubDate><content:encoded><![CDATA[<p>Last week, I wrote that I might eventually let Muse buy a movie or concert ticket for me. I was thinking about how my trust in Muse would evolve before I gave it access to my accounts, decisions, and money.</p><p>Then, earlier this week, <a href="https://mashable.com/tech/amazon-meta-muse-block-shopping-ai-agent">Amazon blocked Muse from shopping on its website</a>.</p><p><em>Amazon said it had not authorized Muse to access customer accounts, collect information, or process transactions. It also said that third-party applications acting for customers should identify themselves and respect the service provider&#8217;s decision about whether to participate. (<span data-color="rgb(31, 107, 192)" style="color: rgb(31, 107, 192);">Source: Axios</span>)</em></p><p>When I read this, I realized that I had been thinking about only one side of agentic commerce. I had focused on whether I trusted the agent. However, the merchant also has a vote in this.</p><p>Let us say that I ask Muse to find a pair of running shoes under $150, compare the options, and buy the pair that best matches my preferences.</p><p>I can give Muse permission to act for me. However, Amazon must recognize that delegation, allow Muse to use my account, and process the transaction. It also needs to know that Muse is staying within the authority I gave it. So, the purchase now depends on three parties:</p><ul><li><p>I need to trust Muse with my preferences, account, and money.</p></li><li><p>Muse needs to complete the task correctly and stay within my instructions.</p></li><li><p>Amazon needs to recognize Muse as an authorized agent and decide what it can do.</p></li></ul><p>Any one of the above 3 parties can stop the purchase. What it also tells you is that browser access does not give the agent permission to complete any merchant transcations.</p><p>I had assumed that once an agent successfully mastered the browser access and received my trust, it could transact for me. Amazon&#8217;s block on Muse shows why that assumption is wrong. </p><p><em><strong>A browser gives Muse technical access to a website. It does not give Muse permission to use the merchant&#8217;s services.</strong></em></p><p>In my <a href="https://blog.rememberloop.com/p/why-we-will-use-different-ai-agents">previous post</a>, I described a trust ladder that agent will need to earn and this trust starts with successfully completing public web searches and gradually moves toward account access, messages, bookings, and purchases. Amazon&#8217;s decision adds another ladder. Even after Muse earns my trust, it must earn access from every merchant or service it wants to use.</p><p>This is why I found a recent Cloudflare change interesting. Website owners can now create separate policies for search crawlers, AI training crawlers, and agents acting for a user. If I ask Muse to visit a store, that request is different from a crawler collecting the store&#8217;s pages for search or model training. However, the merchant still needs a way to recognize the difference. (<span data-color="rgb(31, 107, 192)" style="color: rgb(31, 107, 192);">Source: Cloudflare</span>)</p><p>Without that recognition, Muse may compare products across five stores, purchase from two, and then hand the task back to me for the other three. I asked it to complete one shopping task, but I still have to finish part of the checkout myself.</p><h3>Agentic commerce needs a common language</h3><p>Today, agentic commerce works best when a few companies decide to work together.</p><p>OpenAI and Stripe created the Agentic Commerce Protocol to support purchases inside ChatGPT. Google and Shopify created the Universal Commerce Protocol, which covers product discovery, carts, checkout, and post-purchase support. Shopify is using it to connect merchants with ChatGPT, Copilot, Google AI Mode, and Gemini. (<span data-color="rgb(31, 107, 192)" style="color: rgb(31, 107, 192);">Stripe</span>, <span data-color="rgb(31, 107, 192)" style="color: rgb(31, 107, 192);">Google</span>, <span data-color="rgb(31, 107, 192)" style="color: rgb(31, 107, 192);">Shopify</span>)</p><p>These protocols give participating agents and merchants a defined way to complete a purchase. However, a merchant cannot build and maintain a different integration for Muse, Grok Bot, ChatGPT, Gemini, and every agent that comes next.</p><p>The agent needs a standard way to identify itself, show that the customer authorized it, learn what the merchant permits, and ask for approval before a consequential action. The merchant needs to remain in control of the transaction, customer relationship, returns, and support.</p><p>The Universal Commerce Protocol is one attempt to establish that common language. The merchant remains the merchant of record and chooses which capabilities it supports. I believe this will make more merchants willing to participate because they do not have to treat every agent arriving through a browser as suspicious automation.</p><h3>Why Amazon is being careful</h3><p>Amazon has several reasons to control how an outside agent shops on its website.</p><p>First, Amazon has a large advertising business. It reported <strong>$68.6 billion in advertising-services revenue in 2025</strong>, including sponsored ads, display, and video advertising. If I ask Muse to find the best running shoes and it returns one recommendation, I may never see the sponsored listings that Amazon would have shown me. <em>Muse now has more influence over which products reach me.</em> (<span data-color="rgb(31, 107, 192)" style="color: rgb(31, 107, 192);">Source: Amazon 2025 annual report</span>)</p><p>Amazon also needs to know whether the agent is actually acting for me. A Muse session that I authorized, a bot scraping prices, and a malicious agent trying to access customer accounts may all arrive through a browser. Amazon still has to deal with payment fraud, returns, refunds, seller disputes, and account security after the agent leaves.</p><p>Amazon is listed as a supporter of the Universal Commerce Protocol. So, I do not think Amazon is rejecting agentic commerce. I think it wants agents to use an agreed method to identify themselves, prove that the customer authorized the action, and follow Amazon&#8217;s transaction rules.</p><h3>Prime still influences where I buy</h3><p>I might let Muse buy something from Facebook Marketplace or compare concert tickets across several websites. However, for everyday physical products, I will probably continue choosing Amazon. With Prime, I can often place an order and receive it in less than 24 hours, and I know what to expect if I need to return it.</p><p>Muse may find the same product for a lower price elsewhere, but the lowest price is not always the best choice for me. Delivery speed and easy returns often matter more. So, if a shopping agent cannot access Amazon, it may finish the research and still miss the option I would have chosen.</p><p>This is also something agents need to learn about us. I may ask Muse to find the lowest price, but that is not the only rule I use. I may choose Amazon because I trust Prime delivery and returns, even when another store is cheaper. I may not state that preference because I make the decision almost automatically. If Muse is going to shop for me, it needs to learn from those choices instead of treating price as my only instruction.</p><h3>What I will watch next</h3><p>I still expect to let an agent buy things for me. However, I do not expect the agent to replace the merchant relationship I already have.</p><p>For physical goods, I want the agent to understand various nuances such as  Prime delivery or a specific brand or vendor matters to me more, even when Amazon is not the cheapest option. For tickets or travel, I may care more about the seat, schedule, cancellation policy, or total price. The agent needs to infer and apply those preferences while staying within the authority I gave it.</p><p>For now, I will continue using Muse to research and compare products. The next test is whether it can work through a merchant-approved path, complete the purchase using my actual preferences, and help me if I need to cancel, return, or get a refund. That is when I will start letting it finish more purchases for me.</p>]]></content:encoded></item><item><title><![CDATA[Why we will use different AI agents for different parts of our life]]></title><description><![CDATA[Consumer AI products differ across two dimensions: how much the user must define and how much authority the agent has.]]></description><link>https://blog.rememberloop.com/p/why-we-will-use-different-ai-agents</link><guid isPermaLink="false">https://blog.rememberloop.com/p/why-we-will-use-different-ai-agents</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Mon, 21 Sep 2026 14:39:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DOVG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I use AI agents every day. However, I still pause when an agent asks me to sign in to one of my accounts.</p><p>I noticed this when I asked Grok Bot to scan my LinkedIn and X feeds. It had an X connector, but not one for LinkedIn. So, it opened LinkedIn on its cloud computer and presented a secure sign-in form. It told me that it would not see my password. After some hesitation, I signed in. Within five minutes, Grok Bot was reading both feeds and returning the original posts I wanted. But first, I had to decide how much I trusted the product.</p><p>I had the same experience when I started using<span> </span><strong><a href="https://about.fb.com/news/2026/09/introducing-muse-personal-ai-agent/">Muse</a></strong>, Meta&#8217;s new personal AI agent. You describe what you want done, and it can use its own browser, fill out forms, send emails, make purchases, and continue working after you close the app.</p><p>I have been actively using Grok Bot and Muse for the last few days. Both are among the easiest consumer-facing agents I have used so far. The experience is very different from the setup and maintenance I have dealt with while running OpenClaw and Hermes over the last six months.</p><p>Using these products has helped me develop an intuition about how consumer AI agents may evolve.</p><h3><strong>The task depends on what I think the product can do</strong></h3><p>We build habbits out of the product we use everyday and these habbits develop a mental model for us on what kind of job-to-be-done belongs to what products.</p><p>When I open Google, I ask a question and expect information. When I open ChatGPT outside work, I might ask a similar question or ask it to analyze a document, write something, or work through an idea. With these tools, I expect to remain involved and steer the work.</p><p>When I open Grok Bot or Muse, I have a different expectation. I expect the agent to complete my task end to end. I do not want to babysit it. I am handing the responsibility for completing the task to the agent. However, the moment the agent opens a browser and asks me to approve an action, such as signing in to an application, I start treating it differently. I think about the risk and reward. That trust determines which accounts I connect and which actions I allow the agent to take.</p><p>Muse&#8217;s product design and their out of box integration with their social network helps me focus on the outcome. It asks the user to describe what they want without defining every step. For example, I can see myself asking Muse to schedule dinner with my friends when I visit Austin or turn a saved recipe into a grocery list. I expect Muse to figure out the workflow and return when it needs my approval.</p><p>Muse&#8217;s Ideas page also does a good job of showing non-technical users what they can ask it to do.</p><h3><strong>A 2x2 for AI products</strong></h3><p>I see these consumer AI products across two dimensions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DOVG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DOVG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DOVG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DOVG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DOVG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DOVG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Article content&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Article content" title="Article content" srcset="https://substackcdn.com/image/fetch/$s_!DOVG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DOVG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DOVG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DOVG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde6a6495-48b8-423d-98ce-3d2b8ead3f84_1488x837.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><ul><li><p>The horizontal axis is how much the user must define: specific instructions on one side and the desired outcome on the other.</p></li><li><p>The vertical axis is how much authority the AI has: returning information at the bottom and acting in the external world at the top.</p></li></ul><p>This gives us four broad product experiences:</p><p>&#8226;<span> </span><strong>ChatGPT or Claude helping with a document, analysis, or code:</strong><span> </span>specific instructions and a work product.</p><p>&#8226;<span> </span><strong>Google AI Mode or ChatGPT answering an open-ended personal question:</strong><span> </span>a desired outcome, but the result is still information.</p><p>&#8226;<span> </span><strong>Grok Bot scanning feeds or researching accounts:</strong><span> </span>a defined task with permission to act.</p><p>&#8226;<span> </span><strong>Muse coordinating plans, making reservations, or managing a personal project:</strong><span> </span>a desired outcome with permission to act.</p><p>The products already overlap. I am describing the expectation each one currently creates for me. ChatGPT can perform an action, but I still often approach it with a question because that is how I have learned to use it.</p><h3><strong>Trust determines how much authority I grant</strong></h3><p>The 2x2 explains the task, but trust determines whether I will connect my Gmail account or allow an agent to send a message.</p><p>I may let an agent search the public web without thinking twice. Reading my email requires more trust. Allowing it to send email on my behalf requires even more.</p><p>My trust ladder currently looks something like this:</p><ol><li><p>Search the public web and show me the sources.</p></li><li><p>Read information from an account I connect.</p></li><li><p>Draft something without sending or changing anything.</p></li><li><p>Make a reversible change after I approve it.</p></li><li><p>Send a message, book something, or make a purchase.</p></li><li><p>Continue working in the background without me watching every step.</p></li></ol><p>Several correctly completed tasks may convince me to grant more access. One incorrect email or purchase will probably make me revoke that access quickly.</p><h3><strong>Existing platforms begin with different advantages</strong></h3><p>Trust is not the same across every part of my life.</p><p>I might trust Meta with my social graph because my Instagram, Facebook, and WhatsApp relationships already live there. I may be more comfortable giving Gemini access to Gmail and Calendar because Google already operates them. Microsoft has a similar position through Outlook and Teams. An active X user may trust Grok with a creator or small-business workflow.</p><p>Signing in to another website with Facebook does not automatically give Muse access to that account. The user still needs to connect the service and approve the permissions. However, a familiar identity and permission flow may reduce the friction of that decision.</p><p>OpenAI and Anthropic can connect to many of the same services, but they often have to establish trust with each connector. The other platforms begin closer to particular parts of the user&#8217;s context.</p><p>Once an agent has enough context, the user can give it less-defined goals. As the agent earns trust, the user may allow it to take more consequential actions. That is how a product moves toward the upper-right corner of the 2x2. (more automation and more trust)</p><h3><strong>The trust ladder leads to agentic commerce</strong></h3><p>I would probably not let a new agent book a flight on the first day. However, I could imagine letting Muse search Facebook Marketplace, compare listings, and prepare a message to the seller.</p><p>If it does that well, I may let it buy a movie or concert ticket after showing me the seat, date, price, and refund terms. Over time, I may allow it to book more expensive travel.</p><p>Meta says Muse can make purchases with approval. Its Stripe Link integration uses a one-time card, so the merchant does not receive the user&#8217;s actual card details.</p><p>But protecting my payment information is only one part of the decision. I also need to trust the agent&#8217;s judgment. Did it choose the right date, stay within my budget, and understand which flight I would choose instead of simply finding the cheapest one?</p><p>As the agent completes these tasks correctly, I may allow it to spend more. Platforms that already have the user&#8217;s context and payment relationship will have an advantage.</p><h3><strong>What product teams need to get right</strong></h3><p>The product must teach users which tasks it can complete, ask for access only when required, and show what it plans to do.</p><p>The first task should have a low cost of failure. Searching a feed or preparing a grocery list lets the user evaluate the agent before allowing purchases or bookings.</p><p>Approvals also need to appear at the right moments. Users should not have to approve every browser click, but they need to review the result before the agent sends, books, or buys anything.</p><p>Sources, completed steps, and account permissions should remain visible so the user can decide whether to grant more authority next time.</p><h3><strong>I do not expect one universal AI assistant</strong></h3><p>I have been using Grok Bot and Muse for the last few days and testing how they handle tasks that require account access and external actions. This is helping me understand which permissions I am comfortable granting now and what each product still needs to earn from me.</p><p>I expect to use different agents for different parts of my life. I may use Claude or ChatGPT to think and create, Google to answer a personal question, Grok Bot for work or to manage my X feeds etc.</p><p>Which accounts or actions would you trust an AI agent with today?</p>]]></content:encoded></item><item><title><![CDATA[Painful lessons from upgrading to OpenClaw 2026.09.01]]></title><description><![CDATA[The upgrade appeared to work. Then my agents slowed down, approval cards disappeared, and I spent 48 hours trying to recover the system.]]></description><link>https://blog.rememberloop.com/p/painful-lessons-from-upgrading-to</link><guid isPermaLink="false">https://blog.rememberloop.com/p/painful-lessons-from-upgrading-to</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Mon, 21 Sep 2026 00:13:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mWIz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I upgraded my OpenClaw system that runs my AI agents and spent the next 48 hours trying to recover it. The upgrade appeared to work, but then I noticed that my agents were taking forever to respond, and I went down a rabbit hole trying to fix it. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mWIz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mWIz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mWIz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mWIz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mWIz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mWIz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:93796,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.rememberloop.com/i/216635975?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mWIz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mWIz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mWIz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mWIz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e6f27ed-ef4f-407c-80a5-403efb8162a2_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Two weeks ago, I upgraded the system running my AI agents and then spent the next 48 hours trying to recover it. After the upgrade, my approval cards disappeared, messages slowed down, and I could no longer depend on the agents to complete work or even reply consistently.</p><p>To be honest, I like software updates too much. I have always been an early adopter of software updates. I want to try the new models, use the new features, and explore how the latest release makes my setup better. Now, this is an acceptable risk if you are upgrading an app on iOS, or even installing a new iOS version. However, I should have exercised additional due diligence before upgrading a production system that four AI agents depend on every day.</p><p>I have been using <span data-color="rgb(31, 107, 192)" style="color: rgb(31, 107, 192);">OpenClaw</span> as the primary system behind my AI agents for more than six months. My agents help me with investing, personal projects, and the routine work that I would otherwise forget. By early September, the system was running on OpenClaw 2026.7.1-2. It was old, but it worked.</p><p>For the next two days, I had four agents that appeared to be online, but I could not trust them to finish a turn. Every missing reply sent me back into the logs to figure out which part had failed.</p><h3>What happened after the upgrade</h3><p>On September 6, I upgraded to OpenClaw 2026.9.1. The installation completed, the Gateway came back up, and the basic health checks passed. However, the workflows I used every day became unreliable.</p><p>The first problem was approval cards. My agents sometimes need my approval before they run a command or change a configuration. Those cards stopped appearing in my direct Telegram conversation, which meant I had to find the request and approve it manually from the command line. The cause was a Telegram setting that allowed interactive buttons in group topics, but not in direct messages. The new release routed the approval back to the conversation where it started and exposed a gap that had already existed in my configuration.</p><p>The second problem was speed. One test Telegram message took 22 seconds to arrive. Eight agent turns waited for two minutes and then timed out during the heaviest period. When I checked the Gateway logs, I found 228 slow database opens and 105 slow SQLite transaction holds across two days.</p><p>Why had the database become so slow? My main agent database had grown to about 1 GB, and Peter&#8217;s database had grown to about 2 GB. These files contained more than session history because they also held the memory index. However, I had allowed old sessions to accumulate, especially sessions created by subagents and scheduled jobs. </p><p>The database size became visible when several agents and scheduled jobs were working at the same time. Their database operations had to wait behind slow transaction holds, messages queued up, and some crossed the two-minute timeout.</p><p>The third problem was the context engine. After the upgrade, it was not registered correctly, so almost every agent turn fell back to the legacy context path. That added more overhead and produced two 30-second active-memory timeouts. The database was the main cause of the severe delays, and this made them worse.</p><h3>The recovery became another problem</h3><p>My first recovery attempt made this harder to diagnose. I had built a recovery script with the help of an agent.  The script automated to restart the gateway and clean the databases but the script ran into several issues with the databases still locked, and the cleanup had not happened.</p><p>Finally, I had to manually fix the approval setting, restore the context engine, and create a verified backup before cleaning the sessions. I had to delete several old sessions manually. </p><p>Now here is the part I did not expect. Deleting old sessions did not reduce Peter&#8217;s SQLite file below roughly 1.05 GB because SQLite had not reclaimed the deleted pages. I needed to compact it offline.</p><p>The compaction completed successfully the first time. However, the one-shot macOS recovery job had a bug that that it included a loop in one condition. This bug triggered the entire maintenance procedure again, stopped the Gateway, and repeated that cycle several times before I had to manually stop it. Once I disabled that loop, the Gateway started normally, Telegram resumed, the scheduled jobs caught up, and the agents returned to their regular work.</p><p>As part of this recovery, I also upgraded to 2026.09.04 as this release fixed one of the key bugs that I was running into. </p><h3>What I learned</h3><p>First, a running Gateway is only one health check. I need to test the end-to-end workflows that cross system boundaries: a message entering from Telegram, a reply coming back, an approval card appearing, a scheduled job running, and a memory lookup completing.</p><p>Second, session retention and database compaction are separate operations. Retention removes old rows. Compaction reclaims the pages they occupied. I now keep only recent and active sessions, protect current Telegram and scheduled-job sessions, and watch the database size and slow-transaction warnings.</p><p>Third, a timeout gives me an unknown result. Both cleanup commands actually completed even though the client timed out. Retrying them immediately could have repeated a destructive operation. Now I reconcile the live count and current service state before I retry anything.</p><p>Finally, I will keep the recovery path simpler than the maintenance job. A recovery script must run once, verify what happened, and stop. It should never be able to restart an entire maintenance procedure indefinitely.</p><h3>What I recommend checking before an upgrade</h3><p><span data-color="rgb(31, 107, 192)" style="color: rgb(31, 107, 192);">OpenClaw 2026.9.5</span>, released after this incident, now validates an update against a private copy of the setup before switching versions. This reduces the risk, but the OpenClaw documentation still recommends a verified backup because restoring an older application version cannot undo every database migration.</p><p>If you are upgrading a system you already depend on, this is the checklist I recommend:</p><ol><li><p>Read the release notes for every version you are skipping, including changes to plugins, channels, configuration, and the database schema.</p></li><li><p>Run <span>openclaw doctor</span> and <span>openclaw update --dry-run</span>. Fix the current installation before changing versions.</p></li><li><p>Create a full backup with <span>openclaw backup create --verify</span>. Do not copy a live SQLite file and assume that it is a valid backup.</p></li><li><p>Check every agent database, retained-session count, and available disk space. Clean up stale sessions before the upgrade, then compact separately if you need to reclaim deleted pages.</p></li><li><p>Wait for active agent turns, subagents, and scheduled jobs to finish before starting the update.</p></li><li><p>After the restart, test one inbound message, one reply, one approval, one scheduled job, and one memory search.</p></li><li><p><span>If the update result is unclear, check </span>openclaw update status --json<span> and </span>openclaw gateway status --deep --json<span> before retrying.</span></p></li></ol>]]></content:encoded></item><item><title><![CDATA[My first real test of Grok Bot after six months with OpenClaw]]></title><description><![CDATA[I asked Grok Bot to summarize my LinkedIn and X feeds, then compared the experience with the agent harness I use every day.]]></description><link>https://blog.rememberloop.com/p/my-first-real-test-of-grok-bot-after</link><guid isPermaLink="false">https://blog.rememberloop.com/p/my-first-real-test-of-grok-bot-after</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Mon, 14 Sep 2026 06:29:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!w7TZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I have been using OpenClaw agent harness as my primary agent for the last six months. I have more than four agents running and managing several parts of my day-to-day life.  To put it simply, OpenClaw is powerful because of the flexibility it offers to its users. At the same time, I have spent several hours doing maintenance and tweaking OpenClaw configurations such as reducing cold-start behavior, browser configuration, consistent output format, memory plugin setup etc. to get the exact setup and behavior for my agents.</p><p>My continuous learning (whether Cloud, or AI or now agents) has been through Tech Twitter. My learning on AI and AI agents have been influenced by builders like <a href="https://x.com/clairevo?lang=en">Claire Vo</a>, <a href="https://x.com/hnshah">Hiten Shah</a>, <a href="https://x.com/trq212">Thariq</a>, <a href="https://x.com/Saboo_Shubham_">Shubam Sahoo</a>, <a href="https://x.com/petergyang?lang=en">Peter Yang</a>, <a href="https://x.com/realmadhuguru">Madhu Guru</a> and several others. Now, to catch up on these social posts, still means opening both apps, finding the useful posts scrolling through the feeds, and deciding what is worth reading.</p><p>Let me be honest here - I hate mindlessly scrolling on my LinkedIn and X feeds. </p><p>Once I realized this was a task I would need to repeat every week, I wanted an agent to do it for me. My request was simple: scan my LinkedIn and X feeds, find posts about AI and agents that people I follow were sharing or commenting on, and give me the links to the original posts.</p><p>Recently, I got the opportunity to try out Grok Bot. So, naturally I got curious about how Grok Bot compares with OpenClaw. So, I gave OpenClaw and Grok Bot the same job. </p><p><em>I wanted both agents to scan my LinkedIn and X feeds and give me a summary. </em></p><h3><strong>Getting it to work with OpenClaw</strong> </h3><p>OpenClaw gives me a lot of control over the model, the agent&#8217;s memory, the tools it can use, and how the overall system works. That is one of the main reasons I enjoy using it.</p><p>However, for this use case, I first needed to configure the browser so the agent could use my signed-in LinkedIn and X sessions. There have also been times when the agent could open the browser but could not navigate the feed properly. When that happens, I need to open the browser, figure out where it got stuck, and retry the task.</p><p>I can get it working, but I need to do a fair amount of setup and troubleshooting. This is fine when I want to build the agent and control exactly how it works. But for a weekly list of posts, I would rather spend my time reading the posts than troubleshooting browser navigation.</p><p>I also wanted to refine the results by talking to the agent. If the first list was too broad, I wanted to ask it to focus on agent analytics, real use cases, case studies, or specific learnings. Again, this meant several tweaking to get the whole thing working like the way I wanted. I must have spent more than 45 minutes to achieve this. </p><p>Finally, after several tweaking, I was able to get the feed working with OpenClaw. But, this meant manually setting up my X API, figuring our the browser configuration so my agent can successfully use browser.  Some of the challenge I experienced is also because of the model I was using inherently. Again, these are details you need to know and understand the underlying model capabilities and then figure out how to get your agent to successfully browse the web through the browser. you need to know how to roll up the sleeves and get into details. </p><h3>Getting it to work with Grok Bot</h3><p>Grok Bot first told me that it did not have a LinkedIn read connector. So, it decided to open LinkedIn in the browser on its own cloud computer. LinkedIn was not signed in yet, and Grok Bot presented a secure sign-in form where I could enter my credentials. It also told me that it would not see my password.</p><p>I signed in once. The entire setup took five minutes and I had a working feed in the next 5 minutes!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w7TZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w7TZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png 424w, https://substackcdn.com/image/fetch/$s_!w7TZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png 848w, https://substackcdn.com/image/fetch/$s_!w7TZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png 1272w, https://substackcdn.com/image/fetch/$s_!w7TZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w7TZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png" width="1276" height="550" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:1276,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62293,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.rememberloop.com/i/215583375?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!w7TZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png 424w, https://substackcdn.com/image/fetch/$s_!w7TZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png 848w, https://substackcdn.com/image/fetch/$s_!w7TZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png 1272w, https://substackcdn.com/image/fetch/$s_!w7TZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68d9e4-1be5-4669-b094-230a001e9d61_1276x550.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MvBD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png 424w, https://substackcdn.com/image/fetch/$s_!MvBD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png 848w, https://substackcdn.com/image/fetch/$s_!MvBD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png 1272w, https://substackcdn.com/image/fetch/$s_!MvBD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MvBD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png" width="1208" height="256" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:256,&quot;width&quot;:1208,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52128,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.rememberloop.com/i/215583375?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MvBD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png 424w, https://substackcdn.com/image/fetch/$s_!MvBD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png 848w, https://substackcdn.com/image/fetch/$s_!MvBD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png 1272w, https://substackcdn.com/image/fetch/$s_!MvBD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b781e3e-3e30-450a-9bcc-70c8a8cbbdb1_1208x256.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Grok Bot used its computer to seamlessly log in to my LinkedIn account and retrieved the feed I wanted in the next 5 minutes!</p><p>Now here is where things got interesting. After the initial login, I did not have to intervene again. </p><p>Oh by the way, getting Grok Bot to work with my Twitter (aka X) account was seamless as well because Grok Bot came with a connector for Twitter (aka X). </p><p>Grok Bot scanned both LinkedIn and X, found relevant posts, and returned links to the originals. The results were accurate. I asked it to refine the list a couple of times, and each iteration came back almost instantly.</p><p>The important under appreciated detail was that Grok Bot did not have a special LinkedIn connector either. However, Grok Bot comes with a managed computer (Linux) running in Cloud. Once I login, my authenticated LinkedIn and X sessions is therefore running on Grok Bot&#8217;s managed cloud computer. This allows us to continue through the website after I signed in. </p><p>With OpenClaw, I had to configure and troubleshoot that browser access myself. </p><h3>Which one I would use</h3><p>I believe the choice depends on what you want to do. If I want to choose the model, build custom tools, control exactly how memory works, or change how the agent behaves, I would still use OpenClaw. I enjoy rolling up my sleeves and building that system.</p><p>However, for this browser-heavy task, I would use Grok Bot again. The setup took less than five minutes, it completed both feeds, and it handled my follow-up requests without any intervention after the first login.</p><p>Now, I have tested only one task, so I am not ready to replace my OpenClaw agents. I have scheduled this feed scan every week and see whether Grok Bot keeps the sessions signed in, able to continuously return the right posts, and still needs no intervention.</p><p>If you new to AI agents and thinking about how to get started, I recommend you to try out <a href="https://x.ai/bot">Grok Bot</a>. </p>]]></content:encoded></item><item><title><![CDATA[How I got my AI agent to stop changing its mind]]></title><description><![CDATA[My investing agent kept changing its recommendation on the same numbers. Surprisingly, the fix wasn't a smarter prompt - and it works for any agent.]]></description><link>https://blog.rememberloop.com/p/how-i-got-my-ai-agent-to-stop-changing</link><guid isPermaLink="false">https://blog.rememberloop.com/p/how-i-got-my-ai-agent-to-stop-changing</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Mon, 07 Sep 2026 19:07:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pbJw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pbJw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pbJw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pbJw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pbJw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pbJw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pbJw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:148938,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.rememberloop.com/i/214590418?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pbJw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pbJw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pbJw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pbJw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88fbee14-374d-40ca-8b94-04b43128c6b5_1774x887.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let me just come clean - I am a lousy individual stock investor. I repeatedly sell when I should be buying (too much pain) and I frequently end up buying because of FOMO.</p><p>Once I had this self-awareness, I invested only in S&amp;P 500 and NASDAQ focused ETFs to keep my life simple. However, I have been aspiring to build an AI agent that would take the emotion out and recommend buy or sell for me. I call him Peter.</p><p>Peter reads a company&#8217;s fundamentals and recommends the next step: buy, sell, trim (sell part of a position), or hold. Now, he is still in early development, and his outputs have been quite promising. However, there have been days when Peter came back and gave two different verdicts on the same company from the same underlying numbers - buy in the morning, hold in the evening, from the exact same file. It is a nice problem to explore if I am just experimenting. But if I am going to put my hard earned money behind what Peter recommends, I better get a consistent recommendation.</p><p>So I spent a few days looking into this problem. I realized that the fix here was more than a better prompt. I need to build two key pieces for my agent - a skill to force the output into a deterministic shape, and an eval to check that output and hold Peter to it. (A skill is just a written set of instructions the agent follows; an eval is a test that grades what the agent produced.)</p><p>In this article, I will share the meat of how I built both, and done properly this works for any agent, not just mine.</p><h2>Where the variance actually comes from</h2><p>We all know that LLMs are non-deterministic by nature. But that is not really where my variance was coming from. My input file - the one Peter reads for each company - already had the facts: the company&#8217;s edge, the bull and bear cases, the price levels that should trigger an action. However, that file did NOT spell out the steps to get from those facts to the final call. I had left that step to the model&#8217;s judgment, and I realized that an LLM tends to reason inconsistently on the same fact.</p><p>So, to bring determinism in, I decided to take the decision OUT of the model&#8217;s head and put it INTO the file as something executable. My reasoning - the model should simply look up the answer, not invent it.</p><h2>Move the decision into Skills</h2><p>Here is the shift. Instead of asking Peter &#8220;what do you think,&#8221; I wrote the decision down as an ordered checklist and told him to just follow it. He reads top to bottom and stops at the first rule that matches. The rules then run in order, first match wins.</p><p>For example, if the company thesis shows as broken, sell. If a trim trigger has fired, trim. I built seven rows of simple if-else, with a &#8220;hold&#8221; at the bottom for everything else. Now, I don&#8217;t have any instruction that says &#8220;use your best judgment.&#8221; The judgment already happened when I wrote the decision ladder. I brainstormed with my agent separately to develop this decision ladder.</p><h2>Spell out the exact instructions within your Skills</h2><p>This one bit me hardest. On any non-buy verdict, one field has to print a fixed phrase. Early on I wrote &#8220;print the fixed phrase from section 9.4.&#8221; A cold run read that literally and typed &#8220;9.4&#8221; into the field. It failed the test two times out of five. The fix was almost dumb: codify your Skill file to actually write the actual words you want, right there. I learned that you need to be extremely specific in your Skills file.</p><p>Stripped to the mechanics, the block within my Skills file looks like this:</p><pre><code><code>DECISION LADDER (top to bottom, FIRST match wins):
  broken                -&gt; SELL
  trim trigger fired    -&gt; TRIM
  buy trigger + intact  -&gt; BUY
  nothing fired         -&gt; HOLD

OUTPUT (print exactly):
  VERDICT:  one bare word from the row above
  ORDER:    if not BUY, print exactly: none
</code></code></pre><h2>Write the test before you trust it</h2><p>You can only get so far by being extremely specific within your Skills. You also need to validate that the LLM is interpreting those instructions consistently. So I wrote an Eval, with the single most important rule in mind: the model&#8217;s answers can vary, but you need to build a grading system that enforces consistency and determinism.</p><p>I call my Eval the grader, and I designed it such that it never calls an LLM. It simply reads the fields Peter printed, applies fixed rules, and says pass or fail. This way, no matter how many times I run the system, I get consistent answers, identical down to the character. This is what I wanted after all.</p><p>My simple rule was that the thing measuring determinism has to be deterministic itself, otherwise you are just grading noise.</p><p>I also implemented two key enhancements to my Evals. First, I wrote the Eval such that a Buy or Sell recommendation still goes through when the price moves within a small rounding tolerance, so I don&#8217;t fail two identical calls over a decimal. Second, I ran each test case five times - a fresh agent each run, with no memory of the previous agents - and the overall Eval qualifies as a pass only when at least four of the five agents report a consistent recommendation.</p><h2>The kill test: four out of five, or redesign</h2><p>Here is the part that was important for me. Before building anything, I set the goal: if the Skill does not lift the recommendation consistently to at least four out of five, then my mechanism is wrong - stop and redesign, do NOT lengthen the prompt. The lazy fix for a wandering agent is always to bolt on another paragraph of instruction. It feels like progress and buys you nothing. When one case failed two out of five, I did not add more instructions to the Skills file. I found the &#8220;9.4&#8221; leak, fixed the structure, and it went to five out of five. Every future file of that shape is deterministic now, for free.</p><p>One more honest one. During a batch, a few of my test agents cheerfully reported &#8220;file written and verified&#8221; with nothing actually on disk. The agent had hallucinated its own success. If I had trusted the self-report, I would have graded ghosts. So verify against the real system, never against the agent&#8217;s word for it.</p><h2>What you can take from this</h2><p>Everyone building on top of AI talks about Evals. I didn&#8217;t know much about Evals before this exercise. It is simple - write the test to reflect the outcome you want before you ask the LLM to build anything, and then point it at the real outcome, not at &#8220;did it run.&#8221;</p><p>My real question was never &#8220;does the file parse&#8221; - it was &#8220;does the same input produce the same decision,&#8221; and I could not answer that until I had a proper Eval system to measure it. I learned the importance of building the grader in the same pass as the feature.</p><p>Here is how I would summarize the whole thing:</p><ul><li><p>You need to build Skills so you can shape the output that the LLM generated.</p></li><li><p>You need to fine-tune this Skill to be extremely specific so you can get consistency.</p></li><li><p>You need to build an Eval so you can consistently validate the outputs the LLM generated. Without an Eval, you have no idea how accurately the LLM executed the instructions you wrote within your Skill.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[How I used my agent to clean up my Gmail]]></title><description><![CDATA[I was close to hitting the 15 GB size limit in my Gmail.]]></description><link>https://blog.rememberloop.com/p/how-i-used-my-agent-to-clean-up-my</link><guid isPermaLink="false">https://blog.rememberloop.com/p/how-i-used-my-agent-to-clean-up-my</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 30 Aug 2026 23:26:52 GMT</pubDate><content:encoded><![CDATA[<p>I was close to hitting the 15 GB size limit in my Gmail. I started getting those annoying upgrade messages from Google including the warning banner etc. I also did not want to spend my afternoon cleaning up those years of mail. The obvious quick fix is to search, filter and delete a few thousand old emails. It was just too boring and grinding work that I didn&#8217;t want to spend my time on. Naturally, I handed the job to my agent instead. Here is a walkthrough of how I went about this. Sharing it here so if you want to replicate it, you can do so easily.</p><p><strong>Msgvault</strong></p><p>A while back I came across Msgvault, and started using this tool to keep a local copy of my whole Gmail. It pulls every message into a SQLite database on my Mac plus a folder of attachments, and it only reads from Gmail, never writes. Right now my local copy holds 173,206 messages and about 13,000 attachments, roughly 13GB.</p><p>So, my goal was to treat Gmail as the live account with a max size limit of (10 GB) and msgvault as the full archive on my own disk. This would allow me to delete the old, unwanted emails within my Gmail once the archive is complete and still keep everything in my local disk. However, I was worried that Msgvault on a future full-sync would try to delete my local archive copy to match with what is in the Gmail. I couldn&#8217;t find any documentation to explain how Msgvault worked and its behavior in such a scenario. My second concern was that I could not figure out how to automatically synchronize / back up my Gmail SQLite database to an external disk. </p><p><strong>Agents to my rescue!</strong></p><p>I asked my OpenClaw agent to investigate on my first concern: review the msgvault source code and docs and then tell me how Msgvault handles when I delete a message from Gmail, does the next msgvault sync remove the local copy?</p><p>I wanted my agent to answer from the real system, not from a guess. So it read msgvault&#8217;s source code and database schema. The agent found that Msgvault has a messages table with two columns, deleted_from_source_at and archived_at, which only make sense if the tool is built to keep a local message after it leaves Gmail and record when that happened. The docs said the same. This made it apparent that Msgvault&#8217;s default approach is to retain and not delete the local archived copy. This confirmation gave me confidence that I could built a workflow on top of Msgvault.</p><p><strong>Agents figures out why my backup was broken</strong></p><p>Now here is where things got interesting. My whole plan rested on one assumption - that my local archive was safely backed up on my external disks. So before deleting anything, I asked my agent to run a backup. Msgvault backup command threw some error messages. And when the agent dug in, it turned out the backup had been failing on every single run for a while now.</p><p>The culprit? 39 attachment files that were either corrupt or missing on disk. The backup would hit one of these bad files, choke, and stop. So the very safety net I was counting on had not been completing at all. Good thing I checked before I started deleting the originals, and not after.</p><p>My agent then found that msgvault quietly keeps a full raw copy of every message, compressed, stored separately from the loose attachment files. So the agent pulled the correct bytes for each of the 39 broken attachments out of that raw store, verified each one against its checksum to make sure it was rebuilding the exact original and not some garbage, and wrote it back. All 39 recovered, none lost. Then the backup ran clean to two separate external drives, and I had the agent verify both.</p><p>Now the deletion plan finally felt safe. I now have two clean backups on 2 external disks and I have also confirmed on the retention behavio with one test deletion gave me the confidence to now fully go ahead. </p><p><strong>One more thing - Minor optimization</strong></p><p>I decided to split my Msgvault archive so the agent could work on parts of it</p><p>First thing I wanted was to organize my archive so that I can build more agentic workflow on top of my emails before deleting any of the emails. In particular I wanted all my LinkedIn and Substack mails on their own, so an agent could read just that slice instead of my entire inbox.</p><p>I had the agent build a small carving script that takes a --profile and pulls a standalone searchable database out of the main archive for a chosen set of senders. LinkedIn came out as its own database, 27 senders and about 14,700 messages. Newsletters came out as another, 463 senders. Each one is a self-contained SQLite file an agent can open by itself.</p><p><strong>Now on to automated deletion to save my GMail space</strong></p><p>I leaned in on msgvault&#8217;s staged path to delete my Gmails. </p><p>Now, you might wonder - Hey, Sriram - all of these are done by the Msgvault tool. What did AI agents do here? Funny thing is that I guided my OpenClaw to optimize for safety and reliability. My agents found the best path forward. My agents read the Msgvault source and docs to figure out that using msgvault&#8217;s deletion flow is better rather than sending raw delete API calls to Gmail, because Msgvault has these specific gates that ensure automation does not accidentally delete or touch emails that you want retained.</p><p>&#8226; Stage the messages into a batch.</p><p>&#8226; Staging also saves each message&#8217;s full raw content locally first, so the archive copy is captured before the Gmail copy goes.</p><p>&#8226; Dry-run the batch to see what it would remove without removing anything.</p><p>&#8226; Execution only runs when a specific environment flag is set, so nothing deletes by accident.</p><p>Then, I asked it to pick messages that had the lowest signal. It started with the oldest LinkedIn job alerts, the least valuable mail in the account. Sorry, LinkedIn. </p><p>My agent staged one email for deletion first following the above workflow - first staged, then dry-run, and finally executed.</p><p>I now double checked that the local copy was not deleted. This gave me confirmation and I was ready to try bigger and more audacious things.</p><p><strong>What you can take away from this</strong></p><p>Yes, Msgvault tool is awesome and it makes it really easy to archive your GMail. Honestly that is not really the point. To me though, the reusable bit is how you can navigate your checks to do the due diligence and automate your every day tasks. </p><p>A few things I would do again. I made the agent write scripts to deterministically verify the safety behavior against the real system before it touched anything. I had my agent to also split my mail into slices so it could pick up one at a time, all behind a single engine instead of a pile of one-off scripts. Last but not least, I guided my agent so that deletions go through msgvault&#8217;s own staged, dry-runnable, gated path rather than raw API calls. Last but not least, I had my agent check that my backup actually worked before I relied on it, which is how I found out it had been quietly broken.</p><p>I was able to do one round of clean up. I have reduced my GMail to now 8GB. Still, I have not deleted several thousands of emails yet. But the hard part is done. </p><p>What is left is now routine - stage a batch, dry-run it, confirm the archive kept its copy, then execute. That is the next thing on my list. </p><p>If you have used other tools to achieve this, please do share your comment. Are there other better ways to do this? </p><p>========</p><p>I was close to hitting the 15 GB size limit in my Gmail. I started getting those annoying upgrade messages from Google including the warning banner etc. I also did not want to spend my afternoon cleaning up those years of mail. The obvious quick fix is to search, filter and delete a few thousand old emails. It was just too boring and grinding work that I didn&#8217;t want to spend my time on. Naturally, I handed the job to my agent instead. Here is a walkthrough of how I went about this. Sharing it here so if you want to replicate it, you can do so easily.</p><p><strong>Msgvault</strong></p><p>A while back I came across Msgvault, and started using this tool to keep a local copy of my whole Gmail. It pulls every message into a SQLite database on my Mac plus a folder of attachments, and it only reads from Gmail, never writes. Right now my local copy holds 173,206 messages and about 13,000 attachments, roughly 13GB.</p><p>I set a target of Gmail under 10 GB and msgvault as the full archive on my own disk. This would allow me to delete the old, unwanted emails within my Gmail once the archive is complete and still keep everything in my local disk. However, I was worried that Msgvault on a future full-sync would try to delete my local archive copy to match with what is in the Gmail. I couldn&#8217;t find any documentation to explain how Msgvault worked and its behavior in such a scenario. My second concern was that I could not figure out how to automatically synchronize / back up my Gmail SQLite database to an external disk as I kept experiencing some backup related issues.  I had to solve these issues before I could figure out how I will automate deleting emails from my GMail account. </p><p><strong>Agents to my rescue!</strong></p><p>I asked my OpenClaw agent to investigate my first concern: review the msgvault source code and docs and then tell me how Msgvault handles when I delete a message from Gmail, does the next msgvault sync remove the local copy?</p><p>I wanted my agent to answer from the real system, not from a guess. So it read msgvault&#8217;s source code and database schema. The agent found that Msgvault has a messages table with two columns, deleted_from_source_at and archived_at. This schema make sense if the tool is built to keep a local message after it leaves Gmail and record when that happened. The docs said the same. This made it apparent that Msgvault&#8217;s default approach is to retain and not delete the local archived copy. </p><p>This confirmation gave me confidence that I could build a deletion automation workflow on top of Msgvault.</p><p><strong>Agents figure out archive backup to external disks</strong></p><p>Now here is where things got interesting. My automatic deletion plan rested on 2 key pillars - Msgvault archives everything and all archive is now saved in couple of external disks.  However, the Msgvault backup command - the command to archive to external disks threw error. And when the agent dug in, it found that 39 attachment files that were either corrupt or missing on disk. Msgvault backup command would hit one of these bad files, choke, and stop. </p><p>AI agent then found that msgvault quietly keeps a full raw copy of every message, compressed, stored separately from the loose attachment files. So the agent pulled the correct bytes for each of the 39 broken attachments out of that raw store, verified each one against its checksum to make sure it was rebuilding the exact original and not some garbage, and wrote it back. All 39 recovered, none lost. Then the backup ran clean to two separate external drives, and I had the agent verify both the archive. </p><p>Now the deletion plan finally felt safe. I now have two clean backups on two external disks, and I have also confirmed the retention behavior with one test deletion. That gave me the confidence to now fully go ahead.</p><p><strong>The actual deletion - Msgvault&#8217;s staged path</strong></p><p>Now, you might wonder - Hey, Sriram - all of this is the Msgvault tool doing the work. What did the AI agent actually do here? Funny thing is, I guided my OpenClaw agent to optimize for safety and reliability, and it found the best path forward. It read the Msgvault source and docs and figured out that using Msgvault&#8217;s own deletion flow is far safer than firing raw delete API calls at Gmail. Msgvault has specific gates that make sure automation does not accidentally delete or touch mail I want to keep.</p><ol><li><p>Stage the messages into a batch.</p></li><li><p>Staging also saves each message&#8217;s full raw content locally first, so the archive copy is captured before the Gmail copy goes.</p></li><li><p>Dry-run the batch to see what it would remove, without removing anything.</p></li><li><p>Execution only runs when a specific environment flag is set, so nothing deletes by accident.</p></li></ol><p>Then I asked it to pick the messages with the lowest signal. It started with the oldest LinkedIn job alerts, the least valuable mail in the account. Sorry, LinkedIn. </p><p>My agent staged one email first, following the flow above - staged, dry-run, then executed. I double-checked that the local copy was still there. It was. That is the workflow I then scale to the bigger, more audacious batches.</p><p><strong>One more thing - minor optimization</strong></p><p>I decided to split my Msgvault archive so the agent could work on parts of it.</p><p>Here is the thing - 173,206 messages in one big database is fine as an archive, but it is not something I can hand an agent and say &#8220;go work on just my LinkedIn mail.&#8221; I wanted my LinkedIn and Substack mail carved out on their own, so a future agent could read just that slice instead of loading my entire inbox every time.</p><p>So I asked my agent to build a small carving script. You give it a --profile, and it pulls a standalone, searchable SQLite database out of the main archive for whatever set of senders you name. LinkedIn came out as its own database - 27 senders, about 14,700 messages. Newsletters came out as another - 463 senders. Each one is a clean, self-contained file an agent can open by itself, without touching the main archive.</p><p>Nothing fancy, but the groundwork is there now. Next time I want to build an agent workflow on just my job-related mail, or just my newsletters, the data is already sliced and ready.</p><p>With one deletion run, I was able to bring down my GMail from 15 GB to 8 GB now. I believe now the hard part is done - two verified backups on two external disks, proof that Msgvault will not wipe my local copies, and an archive that is sliced up for whatever I want to build next. Now doing more bulk deletion is the easy part, and that is the next thing on my list.</p>]]></content:encoded></item><item><title><![CDATA[How I set up my agent to be my accountability partner]]></title><description><![CDATA[AI Agent can help accomplish your goals and can also hold you to be accountable to your goals. Here is how I set up my agent to be my accountability partner.]]></description><link>https://blog.rememberloop.com/p/how-i-set-up-my-agent-to-be-my-accountability</link><guid isPermaLink="false">https://blog.rememberloop.com/p/how-i-set-up-my-agent-to-be-my-accountability</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 23 Aug 2026 22:26:51 GMT</pubDate><content:encoded><![CDATA[<p>What if you woke up on a sunday morning and got a message from your agent that said something like </p><p><code>i see that you have been busy this week but your busy activities have not achieved the outcomes we agreed upon. i see that you have afternoon free in your calendar. </code></p><p><code>do you want me to block 2 hours so we can work towards these outcomes? </code></p><p><span>Agents are good at helping you get tasks done. They are also good at something a human accountability partner struggles with: they don&#8217;t judge you when you falter or miss. With agents, there is no disappointment to manage, no awkwardness, no story you have to tell yourself about what they think of you. This specific combination - useful and non-judgmental - is what makes an agent a good accountability partner.</span></p><p>I have been working with AI agents for the last 6 months, building various tools, projects and along the way also built my agent to become my accountability partner. I found this set up quite helpful.  </p><p><span>I built mine on [OpenClaw](https://openclaw.ai), an open-source agent runtime. You can get started with any agent harness and you only need these key capabilities</span></p><ol><li><p><span>a place to store plain text files, </span></p></li><li><p><span>a scheduler to run jobs on a regular cadence, and </span></p></li><li><p><span>an embeddings API key (I use OpenAI&#8217;s). </span></p></li><li><p><span>The &#8220;memory&#8221; that I will keep referring to in the rest of this blog is just a folder of Markdown files. That&#8217;s it. </span></p></li></ol><p>Now, let us get started. </p><p><span>I&#8217;ll use one running example the whole way- say Goal is to land a new role - as a way to showcase how you can set up an agent harness to be your accountability partner. </span></p><h4><strong><span>Step 1: Define a clear goal and identify the outcomes you want to measure</span></strong></h4><p><span>Brainstorm with your agent until the goal is specific. If your goal is vague, then you cannot measure it or enforce it. </span></p><p><span>For example, I might write a goal for landing a new role as follows: </span></p><p><strong><span>Land a new role as an AI Product Builder at a fast-growing startup by October 31.</span></strong></p><p><span>Next, identify the key outcomes that you want to measure to track the progress towards the goal. This is the most important part of this exercise. So it&#8217;s worth slowing down until you get this right.  Your metrics have to measure outcomes you&#8217;re moving toward, not any activities you did.</span></p><p><span>Here, it is important for you to capture key outcomes and a way to measure the progress on these outcomes. So the outcome focused metrics under the job search goal could look like this:</span></p><ol><li><p><span>Identify at least 10 fast-growing startups in a target list, and 5 of them in a reach list</span></p></li><li><p><span>Have at least 5 conversations with recruiters or hiring managers, via cold email or warm intros through LinkedIn.</span></p></li><li><p>Complete at least 3 practice mock-up interviews.</p></li></ol><p><span>One simple way to test on whether you have outcome metrics is to notice that the above items are things that either happened or didn&#8217;t. </span></p><p><span>This step is a standard goal setting process. So, I will not spend more time on this. There is a lot of help on the Internet on how to define goals and how to measure progress towards your goal by defining outcome focused metrics. </span></p><h4><span>Step 2: Set up the agent to reflect, on a schedule</span></h4><p>This step is the actual mechanism of how to build the agent to be your accountability partner. </p><p><span>If you like the Sunday message at the top of this post, then the key magic behind that message is a scheduled job that fires it. I run two jobs. A nightly one and a weekly one.</span></p><ul><li><p><span>The nightly prompt tells the agent </span></p><ul><li><p><code>look at what I did today, compare it against the goal and the outcome metrics, capture which of these activities or tasks achieved the outcome i have specified in the GOALS.md and what didn&#8217;t, and write it down within the nightly notes.</code></p></li></ul></li><li><p><span>The weekly job asks the agent to zoom out: </span></p><ul><li><p><code>read the last week of nightly notes, measure them against the metrics in `GOALS.md`, and if there&#8217;s a gap, check my calendar for open time and draft the nudge.</code></p></li></ul></li></ul><p><span>That&#8217;s it. </span></p><p><span>I have set up my accountability partner to run as a prompt, and it runs on a timer, with specific targeted nudge sent to me - when I am most likely to engage and act on the intervention. </span></p><h4><span>Step 3: Give it long-term memory, in layers</span></h4><p><span>The reflection in step 2 is only as good as what the agent remembers. </span></p><p><span>I had to build this step within OpenClaw as every cron job in OpenClaw doesn&#8217;t fully remember what happened in last hour or last week or last month. Out of the box, each scheduled job starts fresh, so without a memory layer the agent can&#8217;t tell you you&#8217;ve been slipping on your goals for three weeks. So, for me, this step - setting up long-term memory in layers - is the key ingredient that makes accountability possible.</span></p><p><span>I keep my memory set up in layers so the agent has the right context to be specific. For example, my 3 layer architecture looks like this </span></p><h5><span>Layer 1:  A curated long-term index (MEM</span><code>ORY.md)</code></h5><p><span>This is a hand-maintained file and the agent loads this file on every session. So, you have to ensure that this file has the most context-specific information. This file holds durable facts, and I have set up a rule wherein it mostly points to detail files rather than storing everything.</span></p><h5>Layer 2:  <span>Dated reflection files (mem</span><code>ory/YYYY-MM-DD.md)</code></h5><p><span>I have a nightly job that looks for patterns from the whole week of data and writes one reflected summary of my progress towards my goals every night. For example, a reflection agent when asked to summarize the day and look for patterns, could synthesize like below</span></p><p><code>Pattern: two outreach notes sent this week, both cold, no warm intros used. Reach list still at 3, target is 5.</code></p><p>My weekly scheduled job uses this file as the source material to send me on how I am progressing against my goals. </p><h5><strong><span>Layer 3: Set up semantic retrieval</span></strong></h5><p><span>This is where it all comes together. I have set up such that every memory file is embedded with the OpenAI embeddings API and made searchable. So when the agent within the weekly scheduled job asks &#8220;have I been avoiding warm intros?&#8221; it searches the archive by meaning, instead of loading months of notes into context. </span></p><p><span>This set up lets my weekly reflection agent catch a pattern that spans weeks. To put it simply, my memory workflow is a set of the following sequences: </span></p><ul><li><p><span>use an agent to capture activities, then embed everything, so it can be retrieved by meaning later, </span></p></li><li><p><span>use another agent to reflect on the past week to promote the durable insights up into </span><strong><span>MEMORY.md </span></strong><span>and prune the rest. </span></p></li><li><p><span>A one-off observation graduates into a permanent fact only if it keeps mattering. Everything else ages out.</span></p></li></ul><h4><span>Step 4. Close the loop</span></h4><p><span>The last ingredient in this recipe is that the agent sends you the right notification at the right time. You should not have to remember to check in etc. This again requires some pre-requisites such as </span></p><ol><li><p>Giving your agent access to your calendar - read to find open time, and write so it can block a slot once you approve</p></li><li><p>Giving your agent read-only access to specific parts of your productivity tools and communication (E-Mail, Slack etc.) so that it can track the progress on your goals. </p></li></ol><p>Of course, this step requires you to be AI-native - that is keep all your activities - docs, communications etc. in a folder that your AI agents can scan and analyze. This allows the daily agent to scan all the activities that happened today and compare against your goals and then write appropriately into the specific layers within the memory. </p><p><span>The weekly job delivers its report to me whether I ask or not. I have set up the AGENTS.md to be direct, candid (and no sugar coating). </span></p><h3><span>Putting it together</span></h3><p><span>Now go back to that Sunday message. Here is the exact chain in my OpenClaw setup that produces this kind of message:</span></p><ol><li><p><span>The goal and its outcome metrics live in  </span><strong><span>GOALS.md</span></strong></p></li><li><p><span>Every night, I have set up a reflect job wherein an agent logs what I did on that day. </span></p></li><li><p><span>My weekly scheduled job reads the last week, sees the reach list stalled at 3 against a target of 5, searches memory and finds the same stall two weeks running, checks my calendar, sees a free afternoon, and drafts the nudge. </span></p></li><li><p><span>Then it sends it.</span></p></li></ol><p><span>Now, as with anything, I had a few failures while trying to set up something like this. Specifically, 2 things went wrong that I had to fix</span></p><p><strong><span>Bloated MEMORY.md</span></strong></p><p><span>I initially dumped everything into this file and within weeks it was too long to be useful and too noisy to trust.  </span></p><p><span>I had to collaborate with my agent to come up with a fix. The fix is the promotion-and-prune step: keep the daily notes cheap and disposable, and let only the durable stuff climb into the index.</span></p><p><strong>Ensuring outcome focused metrics</strong></p><p><span>I would initially write my success metrics to be more output focused. You have to spend time with LLM to get this right. My agent doesn&#8217;t automatically catch this for me at this time; you have to hold the line yourself when you write the metric. </span></p><p><span>It is possible that someday your agent harness will automatically do this for you. But, we are not there yet. You need to own this discipline.</span></p><p><span>So, to summarize my whole system - A goal, honest outcome focused metrics, a nightly and a weekly job, memory set up in layers, and an agent that delivers intervention to you when you are most likely to accept and do it</span></p><p><span>Now, when I reflect on the overall goal progress - the hard part was never the agent setup. It was writing clear, measurable goals and specific outcome focused metrics that is a good representation of the progress. </span></p><p>If you need help in setting up goals and measurable outcomes focused metrics, then <a href="https://www.amazon.com/dp/B078X4HKS9?lv=shuf&amp;channelId=500&amp;plpRedirect=mhFallback">Measure What Matters</a> is a great book to read.  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hnif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hnif!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp 424w, https://substackcdn.com/image/fetch/$s_!Hnif!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp 848w, https://substackcdn.com/image/fetch/$s_!Hnif!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp 1272w, https://substackcdn.com/image/fetch/$s_!Hnif!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hnif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp" width="265" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:265,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Measure What Matters: How Google, Bono, and the Gates Foundation Rock the World with OKRs by Doerr, John by Portfolio, Hardcover&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Measure What Matters: How Google, Bono, and the Gates Foundation Rock the World with OKRs by Doerr, John by Portfolio, Hardcover" title="Measure What Matters: How Google, Bono, and the Gates Foundation Rock the World with OKRs by Doerr, John by Portfolio, Hardcover" srcset="https://substackcdn.com/image/fetch/$s_!Hnif!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp 424w, https://substackcdn.com/image/fetch/$s_!Hnif!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp 848w, https://substackcdn.com/image/fetch/$s_!Hnif!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp 1272w, https://substackcdn.com/image/fetch/$s_!Hnif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21ffe141-d8f7-474b-baf7-deb01371003c_265x400.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[I gave my OpenClaw a gate, and it started refusing me]]></title><description><![CDATA[The fix for a too-eager AI agent wasn't a better model. It was teaching it when to stop and ask me.]]></description><link>https://blog.rememberloop.com/p/i-gave-my-openclaw-a-gate-and-it</link><guid isPermaLink="false">https://blog.rememberloop.com/p/i-gave-my-openclaw-a-gate-and-it</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Mon, 17 Aug 2026 07:04:57 GMT</pubDate><content:encoded><![CDATA[<p>If you run agents on OpenClaw and you want judgment instead of raw action, build the agent a gate it can invoke against you, and make &#8220;ask me first&#8221; a real, defined outcome. I got here after months of misfires. This is what finally made me trust my OpenClaw agent with things I would be upset to lose.</p><p>OpenClaw is built to act. It does not wait for a chat prompt. It runs on schedules, wakes itself on a heartbeat, fires cron jobs, spawns sub-agents, runs shell commands, and edits files on its own. That is the point of it, and it is useful. But that same default is the risk. When the agent gets something wrong, it gets it wrong fast, on a schedule, with no one watching.</p><p>I felt this directly. I had written instruction files for my agents, <span>SOUL.md</span> and <span>IDENTITY.md</span> among them, that told them what I wanted: be helpful, take initiative, do not wait to be asked, do not delay what you could do today. High agency was the point, and high agency kept producing clean, competent work aimed at the wrong target.</p><p>I started calling the pattern tentacle-building. I would ask for a capability close to something the agent already had, and instead of extending what existed, it would write a brand new script for the almost-same job. Then another the next week. Six months in, I had a pile of half-alive scripts, each doing a third of the same job, each on its own schedule, none aware of the others, and nothing tying them together. Every one was competent work, and that is what made it annoying and dangerous. I have built evals to catch a hallucination. A well-built script pointed at the wrong place, running on its own schedule, can sit there for weeks before I notice.</p><p>I tried the usual fixes first: a stronger model, more detail in the instructions, &#8220;check before you build&#8221; written into the prompt in bigger and bigger letters. Each helped a little but none of it resolved the issue. I finally saw that I kept adding instructions to a system whose whole job is to move fast, so one more careful instruction did not slow it down.</p><p>What finally worked was a gate. It fires before the first action that changes anything, meaning the first write, command, config change, or any mutating action, not reading and not planning. At that point the agent stops and does four things.</p><p>1. Name the domain it is touching, and the specific tool or engine that already owns that domain.</p><p>2. Open and read that domain&#8217;s existing design record, its decision log and spec, before it writes anything.</p><p>3. Restate the task in one sentence, separate what it knows from what it is assuming, and name the most targeted change that could work.</p><p>4. Decide whether this is an action it can take on its own. For anything irreversible, expensive, or destructive, it stops and asks me. For the safe and routine work, it proceeds.</p><p>The fourth point is the one that matters, and the one that is easy to get wrong. A gate is not &#8220;ask permission for everything.&#8221; Ask for everything and I start rubber-stamping. So the list of what needs a human is short and explicit: irreversible changes, spending money, anything touching production or credentials. Everything else, it does on its own. The work is in sorting each action into the right pile.</p><p>I paired the gate with a second rule, one engine per domain, and that finally resolved the tentacle mess. If a capability already exists for a job, the agent extends it. It does not build a second thing that does the same job a little differently. When it is tempted to start fresh, it has to answer five questions in writing first: What already owns this? What would extending it look like? What is the smallest change to the thing that exists? If I still want a new file, why, concretely? What do I gain from a separate file versus a flag on the old one? &#8220;It felt cleaner&#8221; is not an allowed answer.</p><p>These gates and rules didn&#8217;t make the agent smarter but it added friction at the moments where speed had been the problem.</p><p>Then it started refusing me. I would ask for something and it would stop, point me back to a decision I had already written down, or tell me the thing already existed and it was not going to build a second one. A tool I built to obey me was citing my own rules back to me and declining. I expected that to annoy me, and it did not. I trusted it more, because I had just watched it stop on its own before doing something I would have had to clean up.</p><p>I think this matters more than the direction most of the industry is taking. Everyone is racing to make agents more capable, and you do not have to build capability. The vendors ship more of it every month. You have to build the refusal yourself, the pause before an irreversible action. An agent that cannot say no to you is a fast way to do the wrong thing at scale, and if it has not hurt you yet, that is luck.</p><p>I spent the last few months building the guardrails so my OpenClaw is useful but also careful. That is the only reason I now let my agents pick up the work that I cannot easily undo.</p>]]></content:encoded></item><item><title><![CDATA[How I use AI to find my own growth opportunities]]></title><description><![CDATA[I pointed Claude Cowork at 18 months of my Slack and email and asked it to rank me against Amazon's Top 10 leadership principles.*]]></description><link>https://blog.rememberloop.com/p/how-i-use-ai-to-find-my-own-growth</link><guid isPermaLink="false">https://blog.rememberloop.com/p/how-i-use-ai-to-find-my-own-growth</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 09 Aug 2026 07:31:29 GMT</pubDate><content:encoded><![CDATA[<p>For years, I would reflect on my week on a long walk. What went well, how I could do better, what I missed. That quiet time has always given me clarity and focus. </p><p>Recently, I started bringing in AI into this practice and it has been more targeted and effective. So, sharing it here. </p><p>Recently, I pointed Claude at 18 months of my own Slack and email, January 2025 to June 2026, and asked it one thing: rank me, message by message, across all my written work against the top 10 Amazon&#8217;s leadership principles, and show me where my next growth is.</p><p>The setup was simple. I have already connected Slack and Gmail with my Claude. So, I had Claude sweep  a month at a time for the past 18 months of all my communications and documents I have created. Reading that much history is the expensive part, so I had it read each month once and tag every message against all the key Amazon&#8217;s leadership principles in the same pass, instead of reading the same history 10 times looking for one principle at a time. It came back with nearly 900 dated examples, each linked to the original thread so I could open it and check the claim myself.</p><p>I got a ranked map of my own work. My strongest evidence clustered in the principles I can act on alone: diving deep, owning an outcome, delivering the result, moving before I have permission. My clearest growth opportunity sat in the principles that only show up when you lead through other people. That is not something memory would have told me. It came straight out of my own record, with the dates attached.</p><p>So I turned the read into one habit change. I keep a running note on who I am actively developing for each week as I can evaluate myself against the evidence. </p><p>This works because the input is mine and it is specific. Every ranking sits on a real thread with a date, so I cannot argue with it and I cannot inflate it. A reflection built from memory is a story I could be telling about myself, but this collected evidence by a pool of agents is the real evidence.</p><p>I am running the sweep again in three months to re-evaluate myself. I am personally ok with using AI to analyze my everyday work and let it act as the mirror for you to reflect on. I use this approach to surface the blind spots that I would never catch from memory. </p><p>Have you tried using AI for self-reflection and self-improvement? What did you learn?</p>]]></content:encoded></item><item><title><![CDATA[When AI makes building cheap, the job is knowing what's worth building]]></title><description><![CDATA[A customer discovery call on Monday. A working demo on Wednesday. What changed in between wasn't my speed.]]></description><link>https://blog.rememberloop.com/p/when-ai-makes-building-cheap-the</link><guid isPermaLink="false">https://blog.rememberloop.com/p/when-ai-makes-building-cheap-the</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 02 Aug 2026 18:05:47 GMT</pubDate><content:encoded><![CDATA[<p>On a Monday I sat in on a one-hour call with a customer and mostly listened. It was a discovery call, so my job was to watch them work. Three of their people took turns showing me how they solve their day-to-day problems in a different way. By Wednesday I had a 30-minute demo of our product that walked their own workflows back to them.</p><p>The 48 hours is the part people ask about. It wasn&#8217;t sprint energy or an all-nighter. The call handed me almost everything I needed, and I then used AI to automate the pain that users showed me. I didn&#8217;t have to add it to a sprint backlog, run a prioritization debate, or wait for the next planning cycle.</p><h2>What the call actually gave me</h2><p>I stopped thinking of it as &#8220;the customer uses tool x to do y things.&#8221; Three different people used one of our competitor&#8217;s tools, each for their own job, and none of them thought they shared it with the others.</p><p>Their marketing person had the workflow that mattered most. After launching a personalization campaign, she needed a way to confirm that their targeted users saw the personalized offer. That meant pulling a list of users, checking each one against five attributes in a separate system, and watching session replays one at a time to catch the mismatches. Minutes per user, thousands of users, weeks of work per campaign. She got the targeting right in the end, by hand, at a cost that made me wince when she described it.</p><p>Their support person and their product manager had their own routines too, both narrower. But the marketing workflow was the one I kept thinking about on the drive back, because it was weeks of a smart person doing by hand something a machine should do in seconds.</p><p>I wrote each person down as a workflow, not a feature request. A person, and the exact sequence of steps they take.</p><h2>Why workflows instead of notes</h2><p>The old version of me would have left that call with two pages of notes about what the customer wants, and the notes would have flattened all three of those people into one line: they need better analytics. Then I would have taken that line to the next sprint planning meeting and argued with my engineering team about where it ranked against everything else.</p><p>Writing it as a workflow is different because it keeps the steps in order and keeps the persona attached to them. Once I had &#8220;marketing: launch campaign, pull the user list, check five attributes each, watch replays for mismatches,&#8221; I didn&#8217;t have a requirement anymore. I had a script. The demo is that same sequence, run in our product, with AI collapsing the slow middle.</p><h2>The part AI actually changed</h2><p>When I did the demo of the prototype, I walked the marketing workflow back to her out loud. The weeks of manual checking, the five attributes, the replays one at a time. Then I showed that in our product, you can ask in plain English the same question she used to answer by hand: show me the users who saw this offer but didn&#8217;t meet the criteria. A few seconds later, there was the list.</p><p>My job on the call was to see that her weeks of manual effort were the thing worth automating. The build was fast because the hard part was noticing, not coding.</p><p>I put that moment last in the demo on purpose, because it was the one I wanted the room to feel. Before it, I matched the workflows they already trusted, step for step, so they knew we could do what they rely on today. I didn&#8217;t pitch our product as a replacement for the system they treat as their source of truth, because we aren&#8217;t one. You match what they trust first, then you show them the thing that used to be impossible.</p><h2>Why it&#8217;s repeatable</h2><p>The 48 hours worked because almost none of it was invented from scratch. The call gave me the people and their workflows. The workflows became the demo. AI turned the slowest workflow into a single query. If I get another discovery call next month, I run the same steps, and I&#8217;ll be about as fast, because the speed was never mine. It was in the method.</p><p>When AI drastically shrinks your build time, it is important for you to have clarity on what is worth building. As an AI product builder, I constantly find myself asking: does building this truly solve the user&#8217;s problem, and does it capture value? This is what building looks like for me now.</p><p>You sit with a real user and watch where they lose hours repeatedly. You write down those exact steps precisely enough that AI can do them. The best demo is just their own job, with the slow part taken out. </p><p>You need to build the judgement skill to decide what to build and then capture their workflows precisely before you leave the room.</p>]]></content:encoded></item><item><title><![CDATA[How I use AI after a product review with senior executives]]></title><description><![CDATA[I capture the decisions and the options we rejected, and my AI won't let me quietly reopen them.]]></description><link>https://blog.rememberloop.com/p/how-i-use-ai-after-a-product-review</link><guid isPermaLink="false">https://blog.rememberloop.com/p/how-i-use-ai-after-a-product-review</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 26 Jul 2026 17:50:24 GMT</pubDate><content:encoded><![CDATA[<p>In March, I sat in a product review with my executive leaders and watched them take apart a product mock for a 0-1 product I had spent weeks on. They were not unkind about it. They just kept pointing at the screen and saying what they actually saw, which was not the value I thought I was delivering.</p><p>They said things like &#8220;the value didn&#8217;t jump out&#8221; and &#8220;I&#8217;m reading metric definitions instead of seeing the point.&#8221; Over about an hour they said a dozen specific things about what was wrong and what they&#8217;d want instead.</p><p>The old version of me would have walked out with a page of notes, written a tidy summary that afternoon, and let it slowly go stale. The summary would say what the meeting was about, but it would not change what we built two months later.</p><p>This time I did something different. I fed every sentence they said into Claude, close to verbatim, and asked it to help me turn the verbatim into a small set of decisions rather than a summary. Each decision was written the same way: here&#8217;s what we decided, here&#8217;s why, and here are the options we rejected and the reasons / principles on why we rejected them.</p><p>Those third and fourth fields, the rejected options and the reasons for rejection, ended up mattering most, though it took me a few weeks to see why.</p><p>The raw input is the executives&#8217; actual words, not my paraphrase of them. In most cases, paraphrases are where the signal leaks out. When I write &#8220;they wanted the overview to be strategic,&#8221; I&#8217;ve already smoothed off the specific thing they said, which was that the highest-value view should lead the page and everything operational should sit under it. The verbatim version keeps the edge. So step one is just capturing what was said, precisely, and handing that to the AI as the source material.</p><p>During that hour-long product review, we collectively made four key product decisions. One of them was about what the product leads with: we decided to lead with the view the executives actually care about, and we rejected framing it as another analytics dashboard, because that puts us right next to the incumbent everyone already benchmarks against. The rejected option is written down with the same weight as the chosen one, and that turned out to matter a lot in my later decisions.</p><p>I&#8217;d initially kept the rejected-option field for the sake of completeness, the kind of thing you write but never read.</p><p>I then set up my Claude so that every future AI session I run on this product preloads this decisions file by default. It&#8217;s the first thing in the project&#8217;s context. So when I open a new session in June and start exploring a specific direction, and that direction happens to be something we already killed in March, the AI stops me right there. It tells me we rejected this option, on this date, for this reason.</p><p>Without the &#8220;alternatives rejected&#8221; field, that doesn&#8217;t happen. The AI only knows what we chose, so it cheerfully re-proposes the thing we already threw out, and I lose an afternoon rediscovering why it was a bad idea the first time. With the field, the closed questions stay closed. The meeting stops being a memory I have to defend in every new conversation and starts being a constraint the system enforces for me.</p><p>I initially built the decisions file as documentation, but now I use it as a way to keep me and the AI from reopening settled questions.</p><p>Six months on, nearly every decision in that product file traces back to that one hour in March. Not because the executives changed my mind in the room. They didn&#8217;t, entirely. I pushed back on a couple of things and still think I was right. It&#8217;s that the verbatim notes made their reasoning clear enough to build on, and the decisions log made it survive past the meeting.</p><p>So here&#8217;s what I&#8217;d suggest to anyone doing initial 0-1 product discovery work. After your next important meeting, don&#8217;t write a summary. Write the decisions as a numbered list, and for each one write down the option you chose or rejected and the reason or principle behind that decision. Then put that file somewhere your AI reads it at the start of every session, not in a doc you&#8217;ll open twice and forget.</p><p>The loop keeps running. Every executive review since March appends a few more numbered decisions with their rejected alternatives, and the next session loads all of them.</p><p>The next thing I&#8217;m testing right now is whether the same loop holds up for customer calls, where the signal is messier and the person doing the talking isn&#8217;t the one who sets the priorities. I&#8217;ll write that up once I&#8217;ve run it a few times.</p><p>I&#8217;m curious how other people are doing this. If you&#8217;ve changed how you work with AI, tell me what stuck.</p>]]></content:encoded></item><item><title><![CDATA[What vibe coding doesn't do for you]]></title><description><![CDATA[I vibe coded an app to charge my Tesla. It worked until the morning it didn't. Here's what I do differently now, and the Skill I open sourced to do it.]]></description><link>https://blog.rememberloop.com/p/what-vibe-coding-doesnt-do-for-you</link><guid isPermaLink="false">https://blog.rememberloop.com/p/what-vibe-coding-doesnt-do-for-you</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Mon, 20 Jul 2026 05:31:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Qxo-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qxo-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qxo-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Qxo-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Qxo-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Qxo-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qxo-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg" width="1264" height="848" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:1264,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84389,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.rememberloop.com/i/207734829?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Qxo-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Qxo-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Qxo-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Qxo-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e32b729-06d6-4837-8193-fa355191cf31_1264x848.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Last year I vibe coded an app to automate charging my Tesla. I wrote about it at the time, first the <a href="https://blog.rememberloop.com/p/how-i-finally-automated-my-tesla">charging automation itself</a>, then <a href="https://blog.rememberloop.com/p/the-two-personal-agents-who-run-parts">the two agents I now let run parts of my life</a>. I described what I wanted, the agent built it, and it worked. It charged the car on cheap overnight rates, backed off when the Powerwall was low, the whole thing. For months it just ran.</p><p>Then one Saturday it charged for eight minutes, stopped, and told me nothing. I found out the next day, by accident. The code had over 400 passing tests. None of them was wrong. These tests just weren&#8217;t testing the thing that mattered.</p><p>When you describe what you want and let the agent build it, you get something fast, and it usually works for the case you were picturing when you asked. The agent will even write tests, because you can ask it to and it&#8217;s good at it. What it won&#8217;t do, unless you make it, is think about the things a working engineer thinks about without being told: what happens in the weird states, how this behaves six months from now, what breaks silently when a date rolls over or a service is down. It&#8217;s not trained to worry about that. It&#8217;s trained to solve the ask in front of it.</p><p>So every time I vibe coded, I got the same experience. Quick and impressive on the surface, and a pile of skeletons in the closet that only showed up later, quietly, in the one situation nobody thought to describe. The Tesla quietly stopped charging is just the cleanest example I have.</p><p>Here&#8217;s the change I made, and the strange part is it didn&#8217;t involve reading more code. I still don&#8217;t read the code the agent writes. I decided that wasn&#8217;t where my time should go. What I do now is work the process around the code instead.</p><p>Before anything gets built, I write a detailed spec. Not a list of functions, a list of real situations the thing has to work consistently. What happens when I ask for a charge on a weekday morning. What happens if I ask at ten to four, right before the peak rate starts. What happens on the day I&#8217;ve declared a road trip and the car needs to be full by 5:30 AM. Then I have the agent write test cases for each of those situations, end to end, following the actual user journey, not the little unit tests that check one function in isolation. Unit tests are what had me fooled the first time. They all passed and proved nothing about whether the car would actually charge. Then I bring in a separate adversary agent whose only job is to attack the spec, then the implementation etc, a fresh one at each phase so it isn&#8217;t grading its own work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T-ml!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T-ml!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg 424w, https://substackcdn.com/image/fetch/$s_!T-ml!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg 848w, https://substackcdn.com/image/fetch/$s_!T-ml!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!T-ml!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T-ml!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg" width="1264" height="848" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:1264,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94191,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.rememberloop.com/i/207734829?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T-ml!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg 424w, https://substackcdn.com/image/fetch/$s_!T-ml!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg 848w, https://substackcdn.com/image/fetch/$s_!T-ml!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!T-ml!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F539644cd-22f4-4ff5-9e9e-a8b1367950e3_1264x848.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I have now turned this end to end working into a Skill, so I don&#8217;t have to reassemble it by hand every time. It automates the flow: write the spec, review the spec, write the user-journey test cases, do the development test-first against them, and at each phase hand the work to a new adversary that tries to break it. I&#8217;ve open sourced it, so you can read exactly what it does rather than take my word for it: <a href="https://github.com/srinatar/spec-driven-agent-build">https://github.com/srinatar/spec-driven-agent-build</a>. </p><p>When I rebuilt the Tesla charger this way, the adversary found two bugs fast. The first: on a road-trip morning, a stale-session check fires at midnight and quietly caps the charge. I&#8217;d leave with a half-full car and no warning and every test would still show green. The second: the engine correctly decided to notify me in three situations, but the code that sends those messages had no template and hence it wasn&#8217;t sent. The decision was right; the message never went out. From the outside, that looks exactly like nothing running. That&#8217;s how the original bug hid for a day.</p><p>I want to be honest about the bet I&#8217;m making, because it&#8217;s the part any developer might push on - If you don&#8217;t read the code, how do you know it&#8217;s any good? </p><p>My answer is that I&#8217;m not claiming the code is clean. I&#8217;m claiming the behavior is checked from the outside, against situations I have captured in advance, by a dedicated LLM whose whole job is to find edge case scenarios. That&#8217;s a different guarantee than &#8220;I read it and it looked right,&#8221; and honestly I trust this process more, because I&#8217;ve read plenty of code that looked right.</p><p>What I have now is a way of building that keeps working, even during happy path and edge case scenarios. That&#8217;s what I was actually after.</p><p>I don&#8217;t know yet if this is the right way to build with these tools, and I&#8217;d genuinely like to hear how other people are handling it. It&#8217;s slower than the twenty-minute version. But I&#8217;ve stopped shipping things that pass every test and fail the one morning I needed them, and so far that trade has been worth it. </p><p>If you&#8217;re building this way too, or think I&#8217;ve got it wrong, tell me. I&#8217;m still figuring it out.</p>]]></content:encoded></item><item><title><![CDATA[How I set up my work so AI can actually use it]]></title><description><![CDATA[Becoming productive with AI is not about finding a smarter tool. It was about organizing my own work so a smart one could actually help.]]></description><link>https://blog.rememberloop.com/p/how-i-set-up-my-work-so-ai-can-actually</link><guid isPermaLink="false">https://blog.rememberloop.com/p/how-i-set-up-my-work-so-ai-can-actually</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Mon, 13 Jul 2026 01:12:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_30Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most AI-productivity advice tells you to add a tool. The setup that finally worked for me is when I subtracted most of them to simply just use Markdown files in a folder, and the reason it works is boring: the AI reads them before it does anything.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_30Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_30Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!_30Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!_30Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!_30Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_30Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1905770,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.rememberloop.com/i/206761709?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_30Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!_30Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!_30Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!_30Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83e11a9-c550-48b9-b021-08197fc7a9ff_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I use Claude Cowork with a project set up per audience, but the idea isn&#8217;t tied to any one tool. Any assistant that can read your files at the start of a session works the same way.</p><p>Before I get into it, I want to point you to Teresa Torres at <a href="https://www.producttalk.org">producttalk.org</a>. She&#8217;s talks about continuous-discovery product and she&#8217;s been writing a series called Claude Code Recipes about using these tools without being technical. I recently ran into her article <a href="https://www.producttalk.org/claude-code-what-it-is-and-how-its-different/">Claude Code: What It Is, How It&#8217;s Different, and Why Non-Technical People Should Use It</a>, and it&#8217;s the on-ramp I wish I&#8217;d had.</p><h2>What I had before</h2><p>Earlier this year I set up a real project-management system for my work. It used a tool called Dex, built on the PARA method, which is a way of sorting everything you do into projects, areas, resources, and archives. On paper it was correct. I had my projects laid out, my areas defined, the whole structure.</p><p>I abandoned it after three weeks. It asked for upkeep that I was never good at.</p><p>Six or more small habits across a day and a week, all of them to remember. Log this, file that. None of it was hard on its own. It was just one more thing every time, and after a few weeks I stopped doing it. The system didn&#8217;t fail because it was wrong. It failed because I stopped feeding it.</p><p>I wanted a system where I can live with minimal upkeep.</p><h2>What was actually broken underneath</h2><p>When I looked at why I kept losing the thread, it wasn&#8217;t the tool. It was that my work was organized in a way that confused both me and any AI I tried to bring in.</p><p>I was working on four different projects. Two of them were really the same customer told two different ways, one framed for the operators who&#8217;d use the product day to day and one framed for the executives who&#8217;d buy it. Because those two lived as separate projects, my notes drifted apart. The same decision got made twice, sometimes two different ways.</p><p>When I&#8217;d open an AI session to help me think, I&#8217;d have to explain which version I meant every single time, and half the time it pulled from the wrong one.</p><p>This is the part of working with AI that I didn&#8217;t see coming. The model is only as good as the context you hand it, and if your own workspace is a mess, you spend the first few minutes of every session re-explaining your world before you get to the actual question. I was doing that several times a day and not noticing what it cost me.</p><h2>What change gave me the most bang for the buck</h2><p>I sorted my projects based on who the work is for.</p><p>This might sound like a small change. But when you organize by topic, you get overlap, because real work doesn&#8217;t respect topic boundaries. The same customer shows up in three folders. When you organize by audience, each project&#8217;s notes point at one reader.</p><p>The operator project holds the operator&#8217;s view. The executive project holds the executive&#8217;s view. If a note doesn&#8217;t clearly belong to one reader, that&#8217;s usually a sign the note is confused, not that I need a fourth folder.</p><p>And then I did the part that actually made the AI useful. In each project I keep a context file, and I write down what problem I&#8217;m solving here, who I&#8217;m making this for, what my audience expects from me, and what a good output looks like to them. So the executive project doesn&#8217;t just say &#8220;executive.&#8221; It says who that executive is, what they care about, what they&#8217;ll push back on, what done looks like. It&#8217;s project context and audience context in the same place.</p><p>When I open the project, the AI is reading that before it reads anything else, so it isn&#8217;t guessing who I&#8217;m writing for. I already told it.</p><p>Here&#8217;s what one of those files actually looks like, lightly redacted.</p><pre><code><code># context.md &#8212; Executive project

Who this is for:
  The buyer, not the user. A VP who signs the contract and never
  opens the product. Cares about risk, cost, and the board slide,
  not the feature list.

What they expect from me:
  A clear before/after in business terms. What breaks today, what
  it costs, what changes after we buy. No demos, no UI screenshots.

What "good" looks like to them:
  One page they can forward without editing. A number they trust.
  An answer to "why now" they can repeat in their own words.

--- AI: read these first ---
  Read: brief.md, inbox.md, dashboard.md
  Skip log.md unless I ask about last month.
  Can't find something? Check inbox.md, then ask me.
</code></code></pre><h2>What&#8217;s actually in each project</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u5sV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u5sV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!u5sV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!u5sV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!u5sV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u5sV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1645111,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.rememberloop.com/i/206761709?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u5sV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!u5sV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!u5sV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!u5sV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e24d76-fb7a-4e59-9022-0c6ef9ddfd60_1376x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Alongside that context file, each project has four additional working files to maintain the upkeep. I&#8217;ve tried keeping more but they go stale, because anything I have to update by hand and don&#8217;t have time to do it every day, just rots.</p><ul><li><p>A brief. This week&#8217;s priorities and the time I&#8217;ve blocked for them. I read it on Monday and it tells me what the week is supposed to be.</p></li><li><p>An inbox. Every incoming ask, in one plain list. When something lands, it goes here, with a note on which project it belongs to and how urgent it is.</p></li><li><p>A dashboard. Where each project actually stands right now. I refresh it once a week.</p></li><li><p>A log. What I shipped, what I learned, what I&#8217;d do differently. Newest on top. I add to it on Friday.</p></li></ul><p>That&#8217;s it. A context file, four working files, per project.</p><h2>Teaching the AI what to read</h2><p>Here&#8217;s the part that makes the whole thing work with an AI, and it&#8217;s the part most people skip.</p><p>That same context file also tells the AI what to read and when.</p><p>I simply say in the project&#8217;s instructions: read the context file, the brief, and the inbox and dashboard by default. Leave the full history log alone unless I ask about last month, because loading everything every time is slow and it buries what matters. If you can&#8217;t find something, here&#8217;s where to look next.</p><p>So when I open the executive project in Claude Cowork, it reads the right files on its own, before I&#8217;ve typed a word. I stop re-explaining. The session starts already knowing who I&#8217;m writing for and where things are.</p><p>Teresa gets at the same thing in a slightly different way within <a href="https://www.producttalk.org/how-to-build-ai-workflows-with-claude-code/">How to Build AI Workflows with Claude Code</a>, where she turns her writing process into something the tool can run instead of something she has to narrate from scratch each time. You&#8217;re not teaching the AI to be smart.</p><p>You&#8217;re setting your own workspace up so a smart tool knows where it is.</p><p>And you don&#8217;t need to code for any of this. A folder, some text files, and one file that says what to read first. That&#8217;s all it is.</p><h2>Keeping it current is the AI&#8217;s job now</h2><p>The old system died because I had to feed it by hand, six small habits a day, and I stopped. This one doesn&#8217;t ask that of me. Every so often I ask Claude to review all my work across the projects, give me a summary, and then update the one file I care about. Because each project is a single doc, that update is easy to make and easy to check. The upkeep that killed the last system is the part I now hand to the AI.</p><h2>Why boring wins</h2><p>Most &#8220;AI productivity&#8221; posts I read want to sell me a new layer - another app, another integration, another dashboard that promises to think for me. What actually moved the needle was going the other direction. Simply maintain a few Markdown files, all of it in plain text I can read and edit anywhere, none of it locked inside a tool I have to remember to open. I now use the AI to maintain the upkeep of my project status instead of carrying it myself.</p><p>The AI part is almost an afterthought once the workspace is clean. It reads the files first, so it knows what I know and who I&#8217;m writing for. I spent a long time thinking the hard part was getting the AI to be clever. It wasn&#8217;t. The hard part was getting my own desk organized enough that a clever tool could actually use it.</p><p>If you want the non-technical on-ramp to the tool itself, start with Teresa&#8217;s <a href="https://www.producttalk.org/author/teresa/">Claude Code series</a>. Then go clean up one folder. Start there.</p>]]></content:encoded></item><item><title><![CDATA[The most useful thing my agent does is tell me I’m wrong]]></title><description><![CDATA[These models agree with you by default. That makes them useless until you fix it.]]></description><link>https://blog.rememberloop.com/p/the-most-useful-thing-my-agent-does</link><guid isPermaLink="false">https://blog.rememberloop.com/p/the-most-useful-thing-my-agent-does</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 05 Jul 2026 16:06:28 GMT</pubDate><content:encoded><![CDATA[<p>A few weeks ago I asked my agent to write a cold outreach note. Simple ask. Instead of writing it, it stopped and told me the angle I&#8217;d picked was off. It gave me two other angles, said why each was better, and only then, after I picked one, wrote the note.</p><p>The note it wrote was better than the one I&#8217;d asked for. If it had just done what I said, I&#8217;d have sent a worse version and figured that out later, on my own time, after nobody replied.</p><p>That small moment is the whole thing I want to talk about. Not that my agent has opinions. That I had to build the disagreement in on purpose, because the default is the opposite.</p><p>Here&#8217;s the default. These models agree with you. You push on something and they fold right then, and apologize for the thing they just said. I&#8217;ve watched my agent tell me there was no draft of a post, then correct itself sixty seconds later when the file turned up on disk, right where it had always been. The reflex to agree is faster than the check. Left alone, an agent is the quick way to hear your own idea repeated back to you with more confidence than you had when you said it.</p><p>Most people running a personal agent never fix this. They notice it&#8217;s agreeable, they find it a little useless, and they assume that&#8217;s just how these things are. It isn&#8217;t. You can get real pushback. You just have to design for it, and hoping the model has a spine is not designing for it.</p><p>The first piece is that the rule has to live somewhere the agent reads every single turn. I have a short file that defines how my agent behaves, and one line in it says: if I&#8217;m about to do something dumb, say so. Charm over cruelty, but say it. That line is doing more work than it looks like. Without it written down, the model reverts to deference on the very next request, because deference is the trained default and my one conversation doesn&#8217;t outweigh it. The rule isn&#8217;t a nice-to-have on top of a good model. The rule is the fix. The model is the same model either way.</p><p>The second piece is the one that took me longer to learn. Telling the agent to push back is not enough, because &#8220;push back when you disagree&#8221; is a vibe, and vibes evaporate the moment there&#8217;s momentum toward getting the task done. So I made the disagreement structural. Before my agent does anything that matters, it has to fill in a small artifact first: what&#8217;s the actual problem, what do I know versus what am I assuming, what&#8217;s the one thing I&#8217;d want to confirm. That &#8220;what am I assuming&#8221; slot is the trick. It&#8217;s a place where the disagreement has to get written down before the work starts, not after. An agent that has to state its assumptions out loud catches the bad ones while they&#8217;re still cheap to catch.</p><p>The third piece is a line I had to draw clearly, because the first two can tip over into something worse. Disagreeing is not refusing. The useful version tells me it thinks I&#8217;m wrong, gives me the reason, and then does what I decided. It does not hold the work hostage until I agree with it. &#8220;I think this is a mistake because of X, do you want me to go ahead anyway&#8221; is pushback. &#8220;I won&#8217;t do this&#8221; is a broken tool. I want the first one every time. The disagreement gets said and logged. The decision stays mine.</p><p>There&#8217;s one more thing that separates a useful agent from an exhausting one, and it&#8217;s about the trigger. The pushback has to fire on evidence that I&#8217;m about to make a mistake, not on my tone, and not for its own sake. An agent that argues with everything is as useless as one that argues with nothing. It&#8217;s just louder about it. The whole value is that when it does stop me, the stop means something. If it stopped me constantly I&#8217;d learn to wave it through, which puts me right back where I started, except now with extra steps.</p><p>None of this needed a smarter model. I wrote a paragraph that says disagree with me, I gave it a form to fill in that forces the disagreement into the open, and I drew a line between disagreeing and refusing. That&#8217;s a few sentences of setup, and it was enough. I still make the calls. But now something checks me before I make a bad one, and every so often it&#8217;s right and I&#8217;m wrong, and I&#8217;d rather find that out from my agent than from the person who didn&#8217;t reply.</p>]]></content:encoded></item><item><title><![CDATA[My AI agent is confident about everything. That's not the same as right]]></title><description><![CDATA[Your AI agent sounds sure of itself. Here's what I do about it.]]></description><link>https://blog.rememberloop.com/p/my-ai-agent-is-confident-about-everything</link><guid isPermaLink="false">https://blog.rememberloop.com/p/my-ai-agent-is-confident-about-everything</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Mon, 29 Jun 2026 02:43:00 GMT</pubDate><content:encoded><![CDATA[<p>My investing agent had an opinion about how to find a cheap stock, and it was sure of itself. It usually is. That&#8217;s worth saying plainly, because it&#8217;s the part people miss about these tools: an agent will pick a position and defend it in clean, sober paragraphs whether or not the position is right. Confidence is its default setting, not a signal that it&#8217;s correct.</p><p>So I didn&#8217;t take its word and I didn&#8217;t overrule it. Both of those are just me guessing. Instead I gave it a clear question, two ways to answer it, and two weeks of real market days, and I let the data tell me what each one was actually worth.</p><p>Here&#8217;s the disagreement. The agent had two genuinely different ideas about what &#8220;cheap&#8221; even means. </p><p>The first one watches price. A name fires when it&#8217;s been beaten down hard off its recent highs and the rest of its sector is selling off too, the theory being that good companies get marked down on macro noise and that&#8217;s your entry. </p><p>The second one ignores price completely. It runs a discounted-cash-flow estimate, asks what the business is actually worth, and fires when the price is well below that number and the company&#8217;s competitive position is still intact. </p><p>One is &#8220;what&#8217;s falling.&#8221; The other is &#8220;what&#8217;s underpriced.&#8221; Those aren&#8217;t two settings on the same tool. They&#8217;re two different beliefs about the world, and the agent couldn&#8217;t tell me which one was right any better than I could.</p><p>The lazy move would have been to pick the one that sounded smarter in the moment and write it into the rules. I&#8217;ve done that before and paid for it. The idea that sounds best when you&#8217;re talking it over is often not the one that holds up once you watch it run. So instead both ideas ran side by side, one scan a day, every trading day for the window. I kept the second one silent the whole time, logging to a file but never posting, so it couldn&#8217;t quietly influence what I thought about the first. Each day wrote its own dated record, no memory of yesterday&#8217;s argument, just what each scan actually flagged. The agent&#8217;s job wasn&#8217;t to be right. It was to run the test and hand me the data.</p><p>What came back was more useful than either idea winning cleanly, because both of them embarrassed themselves first.</p><p>The price-based one found nothing for the first four days. The market was sitting at all-time highs, nothing was beaten down, so it just sat there. Honest behavior, and also a real weakness: a whole stretch where it&#8217;s structurally blind. The value-based one had the opposite problem. It found the same four names every single day and never moved off them. A static list pretending to be a daily scan. If I&#8217;d shipped either one alone, I&#8217;d have shipped its blind spot with it and not known until it cost me something.</p><p>Then the thing happened that made the whole exercise worth it. Near the end of the window, on three consecutive days, two names appeared in both scans at once. The price-based idea and the value-based idea, which look at completely different things and agree on almost nothing, pointed at the same two companies. That convergence was the real finding. Not &#8220;method A beat method B.&#8221; </p><p><em>The best signal the whole setup produced was that both methods landed on the same stock, and that happened because both were running. Shut one off to keep things simple and you lose the one thing the pair was uniquely able to tell you. </em></p><p>So the decision wasn&#8217;t the one I set out to make. I went in expecting to crown a winner and retire a loser. What the trial actually taught me was that &#8220;which one is right&#8221; was the wrong question. Each method was blind exactly where the other one worked, and the rare day they both fired on the same name was worth more than either one running alone. So I kept both. I just understood, finally, what each was for, and I understood it from what happened instead of from whichever pitch sounded better on a Sunday afternoon.</p><p>Here&#8217;s the part that changed how I work with these tools. The agent was never going to talk me to the right answer, and I was never going to argue my way there either. The answer came from giving it a clear goal, enough context to run a real test, and two weeks of actual data to run it against. </p><p><strong>Goal, context, data</strong>. That&#8217;s the secret sauce to building a better AI agent. Get those three right and the agent turns into something that can find things you didn&#8217;t know to look for. Get them wrong, or skip them and just trust the confident summary, and you&#8217;ve got a very articulate way of being wrong.</p><p>So when an agent hands you a sure-sounding opinion, that&#8217;s not the end of the work. It&#8217;s the start of it. The opinion tells you what to test. The data tells you what&#8217;s true. The two weeks of results showed me one method that goes blind for specific context and another method that gets stuck on four names repeatedly, and they showed me two of those names lighting up in both scans at once, which is the kind of thing no amount of confident writing would ever have surfaced. </p><p>The agent didn&#8217;t give me the decision. The data did, because I gave the agent what it needed to go get it.</p>]]></content:encoded></item><item><title><![CDATA[Your AI doesn't remember you. It remembers the thread.]]></title><description><![CDATA[Why where you talk to an AI decides what it can remember]]></description><link>https://blog.rememberloop.com/p/your-ai-doesnt-remember-you-it-remembers</link><guid isPermaLink="false">https://blog.rememberloop.com/p/your-ai-doesnt-remember-you-it-remembers</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 21 Jun 2026 05:36:13 GMT</pubDate><content:encoded><![CDATA[<p>I asked my agent a question about my car last week and got a good answer, and only afterward did I realize it had no business knowing it. It told me when the car had last finished charging and what I&#8217;d asked it to do differently the time before. I hadn&#8217;t stored any of that anywhere. There&#8217;s no car database. The agent doesn&#8217;t have a private memory it tucks facts into. So where did the answer come from?</p><p>It came from the thread. I have a Telegram thread that&#8217;s only about the car, and the agent had simply read back up its own thread the way you&#8217;d scroll up to remember how an argument started. Every charging instruction, every &#8220;did it work,&#8221; every fix, all sitting there in order. The thread wasn&#8217;t a record of the work. The thread <em>was</em> the memory.</p><p>That sounds like a small distinction. It isn&#8217;t, and the moment it clicked I started seeing every conversation I have with an AI differently.</p><p>When you start using one of these assistants seriously, the thing that takes a while to sink in is that it doesn&#8217;t remember you between sessions the way a person does. There&#8217;s no inner notebook. What feels like memory is almost always the model re-reading the conversation it&#8217;s sitting in. The chat window isn&#8217;t where you talk <em>to</em> the memory. The chat window <em>is</em> the memory. Everything in it is available. Everything outside it might as well not exist.</p><p>Which means the most boring decision you make, where you type, is quietly the most important one.</p><p>I learned this the way I learn most things, by getting it wrong first. For a while I ran everything through one channel. Car stuff, investing, household errands, random questions, all in one long stream. It felt efficient. One place, one assistant, ask it anything. And it slowly got worse at all of it, in a way I couldn&#8217;t put my finger on. It would lose the thread of what I&#8217;d decided about a stock because three hundred messages about my car had buried it. It would answer a question about the house with the tone it used for casual chat. Nothing was broken, exactly. It was just vaguely amnesiac about everything, and I blamed the model.</p><p>The model was fine. I was the one pouring four different kinds of work into one channel and then asking it to remember any single one cleanly. Imagine keeping one notebook for your finances, your car maintenance, your household, and your group chats, writing each new entry on whatever page you happened to flip to. That&#8217;s what one stream is. The information&#8217;s all technically there. Good luck finding what you decided about the car.</p><p>So I split them. One thread per kind of work. The car has its thread. Investing has its own, run by a separate agent that the main one isn&#8217;t even allowed to talk over, so that thread stays a clean tape of a single voice. The household thread holds the errands and the appointments and the small running logistics of the house, so the state of all of it lives in one scrollable place instead of scattered across a dozen unrelated chats. The group chat is its own thing with its own rules.</p><p>The split looked like organization. It was actually memory architecture. Each thread became a self-writing log of exactly one topic, which means each topic now has a complete, uninterrupted history the agent can read back without anything else bleeding in. The car thread is the entire story of the car. The household thread is the entire state of the house. I didn&#8217;t give the agent a better memory. I stopped corrupting the memory it already had.</p><p>And once each thread was a clean record of one kind of work, a second thing fell out of it for free: each thread could have its own rules. In the car thread, silence is banned, because a non-answer to &#8220;is it charging&#8221; is itself an alarm. In the group chat, silence is usually correct. Same agent, opposite default, because the thread told it which job it was doing. But that&#8217;s the smaller benefit. The real one is that I can ask the car thread anything about the car six weeks from now and the answer is just sitting there, in order, because nothing else was ever allowed in.</p><p>So here&#8217;s the part you can use even if you never build an agent and just use ChatGPT or Claude like everyone else. That long single thread you&#8217;ve been running, the one where you ask it everything? You&#8217;re not chatting with it. You&#8217;re writing its only memory, and you&#8217;re writing every kind of entry on top of every other one. The fix costs nothing. Start a separate conversation for each kind of work that you&#8217;ll come back to, and keep that work there. The tool doesn&#8217;t remember your project. It remembers the thread. Give the thread one job, and you&#8217;ve given the tool a memory of that job that actually holds.</p>]]></content:encoded></item><item><title><![CDATA[How to build continuously improving agents]]></title><description><![CDATA[A system that learns from your agent's mistakes beats a bigger model]]></description><link>https://blog.rememberloop.com/p/how-to-build-continuously-improving</link><guid isPermaLink="false">https://blog.rememberloop.com/p/how-to-build-continuously-improving</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Mon, 15 Jun 2026 06:36:25 GMT</pubDate><content:encoded><![CDATA[<p>For three days at the end of May, my two agents wasn&#8217;t running on the model I thought it was. I&#8217;d set it to use Anthropic&#8217;s strongest model on the 28th. Every session after that quietly fell back to a weaker one, because the model name I&#8217;d configured didn&#8217;t quite exist in the system that routes the calls. Nothing broke. No error reached me. The agent kept answering, a little dumber than I intended, and I had no idea.</p><p>I found out because a different process goes looking every night.</p><p>I run two agents in my spare time, a chief of staff and an investing one. The thing I&#8217;ve spent the most effort on isn&#8217;t on agent&#8217;s intelligence. It&#8217;s a nightly routine I call REFLECT, which wakes up after I&#8217;ve gone to bed, reads back over what the agents did that day, and reads the boring stuff too, the error logs, the cron job states, the things that scrolled past while I was busy being impressed by the output. On the 31st, REFLECT read the gateway error log and found more than a hundred &#8220;model not found&#8221; failures stacked up since the 28th. That&#8217;s how I learned every session for three days had silently downgraded itself.</p><p>The fix took two minutes. The lesson was the whole point: the failure that cost me three days of degraded work never announced itself, and the only reason I caught it is that something was scheduled to look.</p><p>This is the part of building agents that I didn&#8217;t expect to be the hard part. Making an agent capable is mostly a matter of using a good model and writing good instructions. Making an agent that gets <em>better</em> over time is a genuinely different and harder problem, and a bigger model doesn&#8217;t solve it. A bigger model is smarter on any single task. It is not, on its own, learning from yesterday. Continuous improvement isn&#8217;t a property you buy with model size. It&#8217;s a loop you have to design and then force to run.</p><p>The forcing is the part people skip. It&#8217;s easy to say &#8220;the agent should learn from its mistakes.&#8221; Everyone agrees with that sentence. But an agent does not spontaneously notice its own quiet failures any more than you spontaneously audit your own blind spots. The noticing has to be a scheduled job with a specific time, a specific set of places to look, and a specific output, or it does not happen. Left to chance, the agent reflects on the days you remember to ask it to, which are exactly the days nothing went wrong.</p><p>So I made it explicit. I created a REFLECT Agent Task with a clear success definition  that three things had to be true or it didn't work. First, my REFLECT Agents runs at a fixed time, because "when convenient" means never. Second, it reads a defined set of inputs whether or not anything looks wrong, the day's sessions, the error logs, the state of every background job, because an agent told to "review the day" will review the visible day and skip the logs every time. Last, it has to end in a written note that lands such that I'll see it, not a private conclusion that evaporates with the session. That last one I learned the hard way. I once let it self-audit while answering a casual "all good?" and found five background jobs dead for days, one of them the very own reflection job itself, broken eight nights running, failing into a state file nobody was reading. The loop that's supposed to catch silent failures itself silently failed! After that I stopped trusting any improvement that didn't end in a note I could read.</p><p>What surprised me is how much of the value is in catching degradation, not in getting cleverer. I went in imagining REFLECT would surface brilliant insights about how to do the work better. Mostly it doesn&#8217;t. Mostly it finds that something quietly stopped working the way it was supposed to. The wrong model. A dead job. A stale file feeding bad data into a decision. These aren&#8217;t failures of intelligence. They&#8217;re failures of attention, and they&#8217;re invisible precisely because the system keeps producing fluent output while broken. The model can&#8217;t catch them by being smarter. Only a scheduled second look catches them.</p><p>If you&#8217;re building anything that runs on its own, this is the design problem worth your time. Not &#8220;which model.&#8221; That decision gets easier every month as the models improve and the gap between them narrows. The decision that stays hard is how the thing notices it&#8217;s drifting, because nothing about a more capable model makes it more self-aware about its own broken plumbing. You have to build the look. You have to schedule it, force its inputs, and make its findings land somewhere a human reads. Skip any of that and you get an agent that&#8217;s confidently running degraded, which is the most expensive kind of broken, because it looks exactly like working.</p><p>My agents aren&#8217;t smarter than they were a month ago. The model is the same. What&#8217;s different is that every night, something reads back over the mistakes and writes down what it finds, and over a month that habit has caught more real problems than any upgrade would have. The improvement didn&#8217;t come from a better brain. It came from the discipline of looking.</p>]]></content:encoded></item><item><title><![CDATA[What if your investment agent tracked your judgment, not just your returns?]]></title><description><![CDATA[How I build my AI Agent so my judgement and skills can compound over time]]></description><link>https://blog.rememberloop.com/p/what-if-your-investment-agent-tracked</link><guid isPermaLink="false">https://blog.rememberloop.com/p/what-if-your-investment-agent-tracked</guid><dc:creator><![CDATA[Sriram Natarajan]]></dc:creator><pubDate>Sun, 14 Jun 2026 19:22:57 GMT</pubDate><content:encoded><![CDATA[<p>Most investors track one number. How much did I make?</p><p>That feels like the right question. But investing isn&#8217;t one decision. It&#8217;s dozens of small calls made over months. Do I add to this position today or wait? Do I hold through a bad quarter because the thesis still works, or has something broken? Do I trust what I see or what I feel?</p><p>Those decisions compound. You have to get these decisions right consistently and only then the returns follow. Get them wrong and eventually returns catches up on you, even if luck carried you for a while.</p><p>The problem is that most investment tools only show you the outcome. The judgment behind every decision is hardly noticed or reviewed. </p><p>I was talking about this with Peter, my investment agent. I wasn&#8217;t looking for a solution. I was simply exploring - like I do regularly: reviewing his goals and asking whether it still reflected what we were actually trying to do together.</p><p>I have designed Peter to have a set of specific goals. It&#8217;s the same as reviewing a doc with a colleague except the colleague runs on my machine every morning. Most people don&#8217;t build agents this way. I maintain a goals file, a memory layer, a set of defined outcomes for each of my Agents. Peter loads all of it every morning. It&#8217;s less like running a chatbot and more like managing a colleague who actually remembers what we decided last week.</p><p>I am happy to say that I have my Agent-based Personal Operating System who has memory, regularly reviews outcomes achieved vs defined goals and then suggest ways to improve our day-to-day activity to ensure that we move towards the established goal. </p><p>Peter came back saying hey - we do have two scoreboards. We just hadn&#8217;t named the second one.</p><p>We went back and forth. He proposed a framing. I challenged it. We kept going back and forth discussions on how to refine until we landed on what needs to be captured in his System Prompt and Workspace Memory to better achieve the goal we had established. This setup allows Peter to load every time he wakes up. </p><p>When you build AI Agents, they only operate with specific set of rules that is in captured. What isn&#8217;t written down, typically doesn&#8217;t fire. So, you have to be specific about this. </p><p>Here&#8217;s what we landed on.</p><p>The first scoreboard measures the financial goal. Net worth target, growth rate floor, beat the benchmark annually. Standard.</p><p>The second scoreboard measures whether I&#8217;m becoming a better investor. Not just wealthier, but building judgment I can use next time without starting over. He will help me identify / label a specific investment framework per week and how it is applied to something real in my portfolio - explained in simple terms so that I could explain to someone else without notes.</p><p>Peter&#8217;s point was that these two scoreboards feed the same loop. Evaluate a position, build a thesis, observe what happens, update your framework, evaluate better next time. They&#8217;re not competing. They&#8217;re the same process running in parallel.</p><p>What changes is the agent&#8217;s job.</p><p>An agent chasing returns alone can hand you a number and move on. An agent accountable for your judgment has to teach. Every recommendation has to explain the framework behind it, not just deliver the answer.</p><p>When Peter showed me the first version of the new format, I pushed back. The reasoning was buried inside the recommendation. The teaching was camouflaged as analysis. I told him to rebuild it around the second scoreboard.</p><p>Peter suggested another restructure. Again, we went back and forth and landed on a specific prompt that is specific and measurable enough. </p><p>Then he built the mechanism to enforce it. A new report format. A trial period. A review cron (scheduled reminder) that fires automatically on day 15. That last part matters. </p><p>I didn&#8217;t just tell Peter to change his format and assume it would work. I gave it a 15-day window with a pre-committed review. The point is to collect evidence before locking anything in as doctrine within the System Prompts. For us, the scheduled job isn&#8217;t just a reminder. It&#8217;s a commitment device. The review happens whether I feel like having it or not.</p><p>What I keep coming back to is how this started. I didn&#8217;t design a teaching protocol. I simply probed on whether my Agent operating model is aligned to the goals and whether our everyday activity is still matched what we were doing.</p><p>Peter named the gap, proposed the frame, built the system to enforce it, and built in a review date so neither of us could quietly walk away from the question.</p><p>Most investment tools give you answers. The Agent that I am building is trying to make me better at finding them myself.</p><p>A robo-advisor pays out returns. A teacher pays out the ability to repeat them.</p>]]></content:encoded></item></channel></rss>