<?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:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Malik Chohra on Medium]]></title>
        <description><![CDATA[Stories by Malik Chohra on Medium]]></description>
        <link>https://medium.com/@malikchohra?source=rss-f200b7d94bbc------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*xZ-cGtOQh4Rid9C6rWrlxQ.jpeg</url>
            <title>Stories by Malik Chohra on Medium</title>
            <link>https://medium.com/@malikchohra?source=rss-f200b7d94bbc------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 04:15:51 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@malikchohra/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[4 easy tricks to structure your project for AI agent]]></title>
            <link>https://medium.com/@malikchohra/4-easy-tricks-to-structure-your-project-for-ai-agent-1751a4c51d5c?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/1751a4c51d5c</guid>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[ai-coding]]></category>
            <category><![CDATA[ai-agent]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Wed, 11 Nov 2026 17:42:35 GMT</pubDate>
            <atom:updated>2026-11-11T17:42:35.522Z</atom:updated>
            <content:encoded><![CDATA[<p>Four small files answer what an agent would ask, so every session starts from the same answers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ghUvFhPcWTqzaogm.png" /></figure><p>TL;DR: Your coding agent guesses whatever your project leaves unsaid: the test command, the folders it may change, which of two prices is current. You pay for each guess in review time. Four small files give most of those answers once, for every agent. The free Second Brain Starter ships the first three files. You add the fourth yourself.</p><p>I write <a href="https://codemeetai.substack.com/p/how-to-stop-your-coding-agent-guessing?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">Code Meet AI</a>, the newsletter where I document how I actually use AI to ship real products, receipts included. New guides land there first.</p><p>If you run a coding agent on a project most days, this is the setup that ends the same correction every session. The last piece, <a href="https://codemeetai.substack.com/p/how-to-brief-an-ai-agent-in-six-lines?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">How to brief an AI agent in six lines</a>, gave every task six questions to answer before an agent starts: context, owner, effects, evidence, continuity and learning. This one moves most of those answers into the project itself, so you write them once.</p><h3>Your agent forgets everything between sessions</h3><p>Every session starts from zero. A project that is ready for an agent writes the answers down where the agent looks first: what the project is, how to prove a change works, what is off limits, and where each fact lives.</p><p>The method behind this is ICM, the Interpretable Context Methodology: small files point to the next file, so the agent reads only what the task needs. Jake Van Clief and David McDermott wrote it up (<a href="https://arxiv.org/abs/2603.16021?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">arXiv:2603.16021</a>). My own second brain runs on it, and here it moves from a folder of notes to a code project.</p><h3>Four small files are enough to start</h3><p>Say you have a small app. It keeps its data in Supabase and takes payments with Stripe. Four files make it agent-ready.</p><ol><li>One main file that every coding agent reads first, with the commands that prove a change works.</li><li>A one-line file for Claude Code that sends it to the main file.</li><li>A facts file, where each price, plan name and setting has one home.</li><li>A short file inside the payments folder, with stricter rules for the Stripe code.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*DhmdCEme2_bnbQ0H.gif" /></figure><p>The main file follows an open format called AGENTS.md, “used by over 60k open-source projects” according to <a href="https://agents.md/?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">its site</a>. Recent versions of Claude Code read it when a project has no CLAUDE.md of its own, and when it has one, a single import line pulls it in (<a href="https://code.claude.com/docs/en/memory?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">Claude Code docs</a>).</p><h3>1. Send every agent to the same file first</h3><p>One front door saves every agent the search. My own second brain’s Claude file holds exactly one line, and so does the one in Spec Harness, my open-source kit for code projects:</p><pre>@AGENTS.md</pre><p>Anything only Claude needs goes below the import. Say the only Claude habit you want is a planning step before changes to the payments folder. The whole file then reads:</p><pre>@AGENTS.md</pre><pre>Before you change anything in the payments folder, show me a plan first.</pre><p>Looking after it takes almost no work. Every rule that all agents need goes in the main file, and the Claude file gains a line only when a habit applies to Claude alone. When it grows past a few lines, move the extra lines into the main file. Keep the main file short. The same Claude Code docs say “target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence.”</p><h3>2. Give each fact one home</h3><p>Two prices in two files is one price too many. The agent picks one, and you find out which in review. Name the one home, and tell the agent to check any copy against it.</p><pre>Facts live in docs/facts.md. If you find a value anywhere else, check it against that file and tell me.</pre><h3>3. Fence what breaks quietly</h3><p>Some parts of a project fail without noise: the payment webhook, the database schema, anything that emails your users. Put a written fence around them, and a rule that says stop and ask. The line below does three jobs. The two names are the places where a mistake costs the most and shows up latest. “Without my yes” makes you the gate. “Stop and show me the plan” makes the agent list what it would change before it touches anything, so you review a plan and skip the diff afterwards.</p><pre>Never change the payments folder or the database schema without my yes. Stop and show me the plan.</pre><p>Swap in your own folders, such as auth, migrations or billing settings, and keep the list short, because a long list gets skimmed. Say the agent is fixing a bug and finds a payment helper that looks wrong. With the fence it stops and asks you first.</p><p>The agents.md site says how a second file works: “The closest AGENTS.md to the edited file wins.” So the file inside the payments folder can be stricter than the main one. One catch for Claude Code. The docs say “By default, Claude reads AGENTS.md only when you have no CLAUDE.md in your working directory or above it”, and this project has one. I tested it: with a CLAUDE.md at the root, Claude read a file in the payments folder and never loaded that folder’s AGENTS.md. The fix is a one-line CLAUDE.md in the payments folder, and then both files load when Claude works there.</p><p>The payments folder holds two files. The first is the stricter rule:</p><pre>payments/AGENTS.md<br>Never change a webhook handler or a price ID. Show me the plan and wait for my yes.</pre><p>The second is the one-line import that makes Claude Code load it:</p><pre>payments/CLAUDE.md<br>@AGENTS.md</pre><h3>4. Say what done means</h3><p>An agent that guesses the test command runs the wrong one, or none, and reports done. Write the exact commands and what done looks like.</p><pre>Done means: the tests pass and the app starts. Run both commands from the Commands section and paste their last lines.</pre><h3>5. Write down what is in flight</h3><p>The next session starts blind again. One short file with the work in progress and the open questions lets the next agent pick up where this one stopped.</p><pre>Before you stop, update docs/now.md: what changed, what is left, what is waiting for me.</pre><h3>6. Turn a repeated miss into a rule</h3><p>Correcting the agent in chat fixes one session. When the same mistake comes back, write the fix into the file, with the date and the reason. My own global file has one from 3 August: read the project’s own rules before you touch it. It started as one line, added after a real violation.</p><pre>When a mistake repeats, add one dated rule to this file with the reason. Leave one-off mistakes out.</pre><h3>How I run agentic coding: Spec Harness</h3><p>Spec Harness is what I use for coding with agents. It is spec-driven development wrapped in a harness: the spec comes first, and every step after it leaves a record the next session can read. It is free and open source.</p><p>Six roles do the core work, one job each. The repo holds more agent files for other jobs. The split exists because the agent that writes the code should never be the one that checks it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*hRoJI2YjXswcc-hg.gif" /></figure><p>The researcher and planner prepare the work, the implementer and tester build and run it, and the reviewer checks style and scope. The verifier matters most. It is a separate agent that did not write the code, it checks the result against the goal, and its only answer is PASS or FAIL. A FAIL sends the work back to the implementer.</p><p>The files from this article sit around those roles. Rules only tighten, and a failure does not become policy automatically: when something breaks, the cause is logged first.</p><h3>Spec Harness adds the same front door, a rules index and a memory folder</h3><p>The four files cover the first four of the six answers: context, owner, effects and evidence. Continuity and learning need a place to write too, and a growing project needs a map of where everything lives. Spec Harness installs all of that in a code project, using other file names for the same jobs.</p><p>Install it and you get the same front door and a rules index that says where each kind of fact lives. It also adds a memory folder whose active file every session reads, and a learning log for misses. Its <a href="https://github.com/chohra-med/spec-harness-oss/blob/main/AGENTS.md?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">own AGENTS.md</a> states that it adds no dependency and never edits your application code during install. Every rule stays marked PENDING, which means not yet written from your own code and checked, until that work is done.</p><pre>your-project/<br>├── CLAUDE.md               @AGENTS.md, then the startup order<br>├── AGENTS.md               hard limits, and what done means<br>├── RULES.md                rules for one folder; the nearest one wins<br>├── ai_rules/<br>│   ├── globalRules.md      where each kind of fact lives<br>│   ├── context_map.md      the real modules, mapped after install<br>│   └── rules/frequent_rules.md<br>├── .memory/<br>│   ├── 40-active.md        what is in flight, read every session<br>│   ├── 50-progress.md<br>│   └── 60-decisions.md     one home for each decision<br>└── learning/NOTES.md       misses, before they become rules</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*VAdsRaLB5kw9QmmV.gif" /></figure><p>One line from the main file it installs is worth copying into any project, harness or not:</p><blockquote>Never invent an import, function, type, or component. Confirm it exists (grep/Read/index) before you call it.</blockquote><h3>Four checks, written before any code</h3><p>Say you ask for a button that lets users register with Gmail. You first write the goal as checks that are either true or false: tapping the button opens Google sign-in, a new user gets an account, an existing user is signed in, and a cancelled sign-in changes nothing.</p><ol><li>The researcher finds where sign-up lives and sees that the auth folder is fenced, so the work will stop and ask. The planner splits the goal into tasks: add the button, connect Google sign-in, create or find the user, handle a cancelled sign-in.</li><li>The implementer writes the button with its tests, one task at a time, and the tester runs the suite.</li><li>The verifier goes through the four checks. If a cancelled sign-in still creates an account, that check fails and the work returns to the implementer.</li><li>The reviewer checks that the change touches sign-up and nothing else, and the cause of any miss goes into the learning log. A failure does not become policy automatically.</li></ol><h3>Keep the README, and give the agent a shorter file</h3><p>The fair objection: your README already explains the project. It does, for a person who can ask a colleague when a step is unclear. An agent acts on what it reads first. So its file is shorter and gives orders: run this, never touch that, stop here. Keep both, and let the agent file point to the README for the long story.</p><h3>These files ask, and a hook enforces</h3><p>A hook is a small script the tool runs before or after an action. The <a href="https://code.claude.com/docs/en/memory?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">Claude Code docs</a> put the limit plainly: “To block an action regardless of what Claude decides, use a PreToolUse hook.” So write the rule in the file, and if breaking it would cost you money or data, add a hook as well.</p><p>A file asks nicely. A hook just says no.</p><h3>Make one project agent-ready this week</h3><p>Pick the project you open most often with an agent, then:</p><ul><li>Write the main file: what the project is, the two commands that prove a change works, and the folders that need your yes.</li><li>Add the one-line Claude file that imports it.</li><li>Next time the agent guesses wrong, add one dated line to the file instead of typing the correction again.</li></ul><p>The free <a href="https://github.com/chohra-med/second-brain-starter?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">Second Brain Starter</a> gives you the main file, the Claude import and a facts file for each project. <a href="https://choumed.gumroad.com/l/builder-ai-os?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">Builder AI OS</a> is the paid layer for later, once one project runs well.</p><p>Start of the series: <a href="https://codemeetai.substack.com/p/how-to-scale-a-second-brain-into?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">How to scale a Second Brain into a Company Brain</a>.</p><p>The full series lives in <a href="https://codemeetai.substack.com/p/how-to-stop-your-coding-agent-guessing?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=agent-ready-projects">Code Meet AI</a>, my newsletter. The next piece goes there first.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1751a4c51d5c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[More context will not fix your AI handoffs]]></title>
            <link>https://medium.com/@malikchohra/more-context-will-not-fix-your-ai-handoffs-e59cffc1629f?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/e59cffc1629f</guid>
            <category><![CDATA[second-brain]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Wed, 04 Nov 2026 22:17:15 GMT</pubDate>
            <atom:updated>2026-11-04T22:17:15.701Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*_31tdxan6PT4oLqZ.png" /></figure><p>I write <a href="https://codemeetai.substack.com/p/how-to-brief-an-ai-agent-in-six-lines?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines">Code Meet AI</a>, the newsletter where I document how I actually use AI to ship real products, receipts included. New guides land there first.</p><p>You hand an agent a task and plenty of context, and the handoff still goes wrong. Six short questions, answered before the task starts, close the gap I kept hitting: the agent had the files and still did not know who owned a fact, what it could change, or how to prove the work. They sit on top of a method called ICM, so that comes first.</p><h3>Part 1: ICM lets your folders do the navigating</h3><p>ICM stands for Interpretable Context Methodology. It is how you arrange files so an AI can find its way.</p><p>My second brain fits in four files: a top file routes each task to one folder, and each folder holds one short file that says what to read and what to do. The smallest version looks like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*wHVWI-dQ5ke87YIA.png" /></figure><p>Ask for an article and the agent starts at the top file, moves to the writing folder, reads one short file and begins. It never opens the code folder. Nobody pasted the whole project into the prompt.</p><p>The method comes from Jake Van Clief, who teaches it for free in his <a href="https://www.skool.com/cliefnotes?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines">Clief Notes community on Skool</a> and in his posts, which is where I follow it. He wrote it up with David McDermott in a March 2026 paper (<a href="https://arxiv.org/abs/2603.16021?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines">arXiv:2603.16021</a>). Their claim is that, for work that runs in steps, a folder structure can do the job of an agent framework (the extra code that coordinates several agents). You keep one agent, and the folders tell it what to read. In the paper’s abstract: “You need one orchestrating agent that reads the right files at the right moment.”</p><h3>Part 2: six questions cover what folders leave out</h3><p>Folders tell the agent where to go, and stop there. Nothing in them says what it may change, how to check the work, or what to leave for the next agent. Six short questions fill that gap. I made them up myself, and ICM does not include them. Each one becomes a single line you can paste into an AGENTS.md (the instruction file an agent reads first), a rule or a skill (a saved instruction the agent loads when it needs it).</p><h3>1. Owner: who has the real copy?</h3><p>Every fact should live in one place. When two files hold the same fact, the agent has to guess which one is right. Pick the file that owns each fact the task touches, and tell the agent to read it there.</p><pre>Owner: every fact has one home. Name it before editing. If a copy exists, check it against the home.</pre><h3>2. Context: what must it read first?</h3><p>More files in the prompt mostly add noise. Give the agent one file to read first, and let it search wider only if the answer is not there.</p><pre>Context: read FACTS.md first, the one file that holds names, links and handles. Search wider only if the answer is not there.</pre><h3>3. Effects: what may it change?</h3><p>An agent that can press Publish will press it. Write down what the task may change, and what needs your yes before it happens.</p><pre>Effects: fill drafts only. Never press Publish or Send. Stop and show me a screenshot.</pre><h3>4. Evidence: how do you know it worked?</h3><p>One passing check can be luck. Write down the check that proves the work, and a case that should make it fail, so you know the check can fail at all.</p><pre>Evidence: three readers score it and I use the average (each reader is a fresh model that did not write the draft). Show the check failing a bad sample first.</pre><h3>5. Continuity: what does the next agent need?</h3><p>A question that is answered but still marked open gets asked again by the next session. Close it in the same edit that answers it, with the date and the source.</p><pre>Continuity: when a question is answered, mark it closed in the same edit, with the date and the source.</pre><h3>6. Learning: what changes after a miss?</h3><p>Telling the agent to try harder fixes nothing, and neither does apologising to it. After a miss, change the tool or the rule, then check it again on the next few tasks.</p><pre>Learning: when a miss repeats, fix the tool or the rule. Re-check on the next three tasks.</pre><h3>All six as one block</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oxaaoPhI5MqO1s3V.gif" /></figure><p>The lines above are mine, filled in. Here is the blank version. Paste it at the top of a task folder, or into the AGENTS.md that routes to it, and fill in one line per question.</p><pre>Before any task, six lines:<br>Owner: &lt;the file that owns each fact this task touches&gt;<br>Context: &lt;the one file to read first&gt;<br>Effects: &lt;what it may change, and what needs my yes&gt;<br>Evidence: &lt;the check that proves it worked, and a case that should fail&gt;<br>Continuity: &lt;what to close, link or date when done&gt;<br>Learning: &lt;what to change if it goes wrong&gt;</pre><h3>Six lines are cheaper than one bad handoff</h3><p>Six lines take me about two minutes per task, which is the whole cost of what looks like paperwork for a solo builder. When a question does not apply, I write N/A and the reason, and move on. A one-line pointer edit needs no review, and the payoff is a task the next agent, or the next you, can pick up without reading the whole history.</p><p>The free <a href="https://github.com/chohra-med/second-brain-starter?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines">Second Brain Starter</a> ships <a href="https://github.com/RinDig/icm-architect?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines">icm-architect</a>, Jake Van Clief’s own skill for the method (MIT licence, bundled unmodified), and second-brain-icm, the skill that asks for these six lines whenever you change your own rules, skills or workflows. <a href="https://choumed.gumroad.com/l/builder-ai-os?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines">Builder AI OS</a> is the paid layer for later, once one project is working.</p><h3>Three earlier pieces set up this one</h3><ul><li><a href="https://codemeetai.substack.com/p/why-are-builders-building-company?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines">Why are builders building Company Brains now?</a></li><li><a href="https://codemeetai.substack.com/p/the-four-parts-of-a-company-brain?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines">The four parts of a Company Brain</a></li><li><a href="https://codemeetai.substack.com/p/how-to-scale-a-second-brain-into?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines">How to scale a Second Brain into a Company Brain</a></li></ul><h3>Write the six lines for one task</h3><p>Pick one AI task you run every week, then:</p><ul><li>Paste the blank block into its folder and fill it in.</li><li>Hand the task to your agent with that note as the brief.</li><li>Compare the result with last week’s run, and write down what changed.</li></ul><p><em>This one came from </em><a href="https://codemeetai.substack.com/p/how-to-brief-an-ai-agent-in-six-lines?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-brief-an-ai-agent-in-six-lines"><em>Code Meet AI</em></a><em>, the newsletter where I write up the setups I actually run on my own projects.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e59cffc1629f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to scale a Second Brain into a Company Brain]]></title>
            <link>https://medium.com/@malikchohra/how-to-scale-a-second-brain-into-a-company-brain-9a60747a74b5?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/9a60747a74b5</guid>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[second-brain]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Fri, 30 Oct 2026 12:14:29 GMT</pubDate>
            <atom:updated>2026-10-30T12:14:29.952Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*jkFxupL9idGK6vRy.png" /></figure><p>I write <a href="https://codemeetai.substack.com/p/how-to-scale-a-second-brain-into?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-scale-a-second-brain-into-a-company-brain">Code Meet AI</a>, the newsletter where I document how I actually use AI to ship real products, receipts included. The full article is free there, and this page has the first half.</p><p>Your Second Brain works because one person trusts it. Add a second person and nobody checks the notes.</p><p>Alone, you know which note is old and which file is the real one. A teammate knows neither, and neither does their agent. <a href="https://developer.box.com/tutorials/company-brain?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-scale-a-second-brain-into-a-company-brain">Box</a>, the file storage company, says in its Company Brain tutorial that a team needs “a shared source of truth that multiple people and multiple agents can use safely.”</p><p>My vault is the folder of notes my AI works from. I am its only reader and only owner. I have not run it with a team yet.</p><h3>A folder that works for one person has no owner</h3><p>With two people, each of you can believe the other one updates the pricing page.</p><p>In my vault each project keeps its facts in one file, FACTS.md, and nowhere else. A skill, my saved instructions for the AI, points to that file and never copies a fact out of it.</p><p>For a team, put a name next to each area of work. Box puts it as “assign every domain an accountable owner.”</p><h3>A shared login lets the agent read what the asker may not</h3><p>I have no reader rule yet.</p><p>Picture a new hire asking the company chat for the wifi password. The example is made up. The chat’s agent was set up with one shared login to all the documents, so it can read the salary sheet too.</p><p><a href="https://maxicontieri.substack.com/p/ai-coding-tip-028-build-a-company?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-scale-a-second-brain-into-a-company-brain">Maxi Contieri</a>, a developer who writes about AI coding, named this in July 2026. Naive integrations, he writes, “flatten access control when they index everything under one service account.” Access control means who may see what. Indexing reads every document in advance so the agent can search it. A service account is a program’s login.</p><p>His fix is that the step which finds documents for an answer “checks permissions against the requester’s own identity.” The agent answers only from what the person asking may see.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xWwf8Nodzkq-Dy8w.gif" /></figure><h3>The other two answers are in the full article</h3><p>New facts should wait before agents read them, and approved facts still age. Those two parts, plus the one step to take this week, are in the full article on my newsletter. It is free: <a href="https://codemeetai.substack.com/p/how-to-scale-a-second-brain-into?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-scale-a-second-brain-into-a-company-brain">read the full article on Code Meet AI</a>.</p><p><em>This one came from </em><a href="https://codemeetai.substack.com/p/how-to-scale-a-second-brain-into?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=how-to-scale-a-second-brain-into-a-company-brain"><em>Code Meet AI</em></a><em>, the newsletter where I write up the setups I actually run on my own projects.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9a60747a74b5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What is a Company Brain?]]></title>
            <link>https://medium.com/@malikchohra/what-is-a-company-brain-217884683df9?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/217884683df9</guid>
            <category><![CDATA[building-with-ai]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[second-brain]]></category>
            <category><![CDATA[company-brain]]></category>
            <category><![CDATA[context-engineering]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Sun, 25 Oct 2026 20:03:00 GMT</pubDate>
            <atom:updated>2026-10-25T20:03:00.867Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*MNOGoGWR-qhAMVm2.png" /></figure><p>I write <a href="https://codemeetai.substack.com/p/what-is-a-company-brain?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=what-is-a-company-brain">Code Meet AI</a>, the newsletter where I document how I actually use AI to ship real products, receipts included. New guides land there first.</p><p>Last time, in <a href="https://codemeetai.substack.com/p/how-gstack-superpowers-claude-mem?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=what-is-a-company-brain">How gstack, Superpowers, claude-mem and ECC handle memory</a>, I compared four ways to give one AI agent a memory. All four, and my own Second Brain, are built for one person. The next question is what happens when a team and its agents have to share that knowledge.</p><h3>When context is missing, people ask and agents guess</h3><p>Say your team moved from Firebase to Supabase in March. The decision, and the reason for it, went into a Slack thread. The code still says Firebase. A README is a file at the top of a project that holds some of its decisions and rules, such as “we use Firebase for the database and sign-in”, and nobody updated it. A rule file in the codebase says the same old thing. So the team has two answers, and they disagree.</p><p>A new developer joins, reads the README and asks in the team chat. Someone answers in two minutes: “We moved to Supabase, the README is old.”</p><p>An AI agent gets the same task. It reads the README and the rule file, writes Firebase code and reports the job as done. It has no colleague to ask, and nothing it read tells it those files are out of date.</p><blockquote>People work around missing context. An agent only knows what you hand it.</blockquote><p>The gap itself is old. Information was always spread across tools, people left and took what they knew with them, and documents went stale without anyone noticing. A person could live with that. Once you hand real work to agents, it decides whether the work comes back right.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*qMQnQN8vU-pHRNVj.gif" /></figure><h3>What a Company Brain is</h3><p>Slite, a company that builds a knowledge base product, defines it in <a href="https://slite.com/learn/company-brain?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=what-is-a-company-brain">its guide</a>: a company brain is “a persistent context layer” that “gathers knowledge from wherever a company creates it, and it makes that context usable by both people and AI agents.”</p><p>In plain words: one place where the team’s knowledge is kept current, so a new person and a new agent session start from the same facts.</p><p>That makes it something other than search. Search finds a document. A Company Brain keeps the current answer, and the date it replaced the old one.</p><h3>Second Brain and Company Brain</h3><ol><li><strong>Whose knowledge.</strong> A Second Brain holds what you know about your projects. A Company Brain holds what the team knows.</li><li><strong>Who reads it.</strong> Yours is read by you and your AI tools. A Company Brain is read by everyone on the team and every agent they run.</li><li><strong>Who can change it.</strong> In a Second Brain you are the only editor. In a Company Brain each fact needs an owner, one person whose job is to keep it true.</li><li><strong>What breaks first.</strong> A Second Brain breaks when you stop updating it. A Company Brain breaks when nobody knows who should.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*aHm7cd3JNxG0WqEM.gif" /></figure><h3>What goes into it</h3><p>Four kinds of records do most of the work:</p><ol><li><strong>Decisions, with the reason.</strong> “We use Supabase since March, because the auth and the database live in one place.” The reason is what stops the next person, or the next agent, from undoing it.</li><li><strong>How work is done.</strong> How you ship a release, how you handle a refund in Stripe, how a new client gets set up.</li><li><strong>Who owns what.</strong> One name per area, so every question has somewhere to go.</li><li><strong>What is true right now.</strong> Prices, versions, the current plan. Each one with a date, so a reader can see how old it is.</li></ol><p>Most teams already have all four. They are spread across Slack threads, email chains, docs and people’s heads.</p><h3>What changes when more than one person uses it</h3><p>Slite <a href="https://www.sciencepressreleases.com/agp-article/937823387-slite-survey-finds-accuracy-is-biggest-barrier-to-company-brain-adoption?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=what-is-a-company-brain">surveyed 149 AI-forward teams</a> in July 2026. The numbers are theirs: 70% knew the term “company brain”, and 19.6% said they had one that works. 56% said company knowledge lives in Slack and Teams threads. The top worry about adopting one was accuracy, named by 77%.</p><p>The same survey points at the fix, in my reading: 78% said a named human owner is what makes documentation trustworthy.</p><p>Four things change once a second person reads the record:</p><ol><li><strong>Owners.</strong> Every fact has a person responsible for keeping it true.</li><li><strong>Permissions.</strong> Some records are for the whole team, some for one project, some for one person.</li><li><strong>Keeping it current.</strong> Old facts get a date and a review, or they turn into the confident wrong answer an agent repeats.</li><li><strong>Private and shared.</strong> Your notes stay yours. The team gets what the team needs.</li></ol><h3>Where to start</h3><p>You don’t start with the whole company. You start with one person’s record, kept the way a team would need it.</p><p>I run my own Second Brain like that. Each project has one facts file. Every fact in it lives in one place and carries a date, and when a fact changes, the old line moves to a history file instead of being deleted. None of that changes when a second person reads it. The habits a Company Brain needs are habits you can build alone.</p><p>So the first step is the one from <a href="https://codemeetai.substack.com/p/why-every-builder-needs-a-second?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=what-is-a-company-brain">Why every builder needs a Second Brain</a>: give each project one record that every tool reads before it starts. Then give each fact an owner and a date. That record is layer one of a Company Brain.</p><p>The free <a href="https://github.com/chohra-med/second-brain-starter?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=what-is-a-company-brain">Second Brain Starter</a> has the files to copy. Open it in Claude Code or Codex and type Set this up for me.</p><p>Next week: why builders are building Company Brains now.</p><p><em>This one came from </em><a href="https://codemeetai.substack.com/p/what-is-a-company-brain?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=what-is-a-company-brain"><em>Code Meet AI</em></a><em>, the newsletter where I write up the setups I actually run on my own projects.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=217884683df9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How gstack, Superpowers, claude-mem and ECC Handle Memory, Compared]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@malikchohra/how-gstack-superpowers-claude-mem-and-ecc-handle-memory-compared-e3232a355576?source=rss-f200b7d94bbc------2"><img src="https://cdn-images-1.medium.com/max/1400/0*934D6Ff_m0s-X_DB.png" width="1400"></a></p><p class="medium-feed-snippet">I write Code Meet AI, the newsletter where I write about how I actually use AI to ship real products, receipts included. The full article&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@malikchohra/how-gstack-superpowers-claude-mem-and-ecc-handle-memory-compared-e3232a355576?source=rss-f200b7d94bbc------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@malikchohra/how-gstack-superpowers-claude-mem-and-ecc-handle-memory-compared-e3232a355576?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/e3232a355576</guid>
            <category><![CDATA[context-engineering]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[second-brain]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[developer-tools]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Sat, 24 Oct 2026 18:00:49 GMT</pubDate>
            <atom:updated>2026-10-28T18:58:16.102Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Why I have a Second Brain for my AI, and why you should too]]></title>
            <link>https://medium.com/@malikchohra/why-i-have-a-second-brain-for-my-ai-and-why-you-should-too-be71fe416cbb?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/be71fe416cbb</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[second-brain]]></category>
            <category><![CDATA[context-engineering]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Fri, 23 Oct 2026 15:38:22 GMT</pubDate>
            <atom:updated>2026-10-23T15:38:22.762Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1BCXUHvq50wXn9zM.png" /></figure><p>I write <a href="https://codemeetai.substack.com/p/why-every-builder-needs-a-second?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=second-brain-article-1">Code Meet AI</a>, the newsletter where I document how I actually use AI to ship real products, receipts included. New guides land there first.</p><p>I run my work through a Second Brain: plain files that my AI tools read before they start. Counted on 22 October 2026, it holds 645 memory files, 119 skills, 41 commands and 640 session reports. Here is why I have one, and why you should too. Six things go wrong when AI works across several projects, and each has a small file that fixes it.</p><p>AI started as <a href="https://codemeetai.substack.com/p/using-ai-properly-01-the-art-of-prompting?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=second-brain-article-1">prompting</a>. You typed a question, it typed back, and the whole skill was in how you asked.</p><p>Then it became <a href="https://codemeetai.substack.com/p/using-ai-properly-04-context-engineering?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=second-brain-article-1">context engineering</a>. Same model, but now you decide what it reads before it answers: your files, your rules, your examples.</p><p>Then came tools. With <a href="https://codemeetai.substack.com/p/using-ai-properly-05-get-started?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=second-brain-article-1">MCP</a> the model stopped only talking. It could open your inbox, read your calendar, run a command, and react to what came back.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*bNUEdUPRMW4q1eRG.gif" /></figure><p>Prompting, then context, then tools. The one thing missing is a place where the project lives.</p><p>That is a good place to be. AI is better than it has ever been, and every week a new tool does something that looked impossible last year.</p><p>So why does it still go wrong when you have more than one project?</p><p>One thing did not come with the upgrade: a place where the project lives. The model can read whatever you point it at, but it does not know what to point at. With three or four projects it forgets what you told it last week, it cannot find the file that holds the answer, and it fills the gap with something that sounds right.</p><h3>The AI forgets too</h3><p>When a team forgets why a project works the way it does, we call it a communication problem. With AI the same thing happens in three ways.</p><ol><li><strong>It forgets.</strong> Every new chat starts from zero, so last week’s work is gone.</li><li><strong>It has no access.</strong> The answer sits in a note, a call or someone’s head, and the model never sees it.</li><li><strong>It is confident anyway.</strong> This is the one that hurts.</li></ol><p>A person who does not know says “I do not know”. The AI says the wrong thing in the same calm voice it uses when it is right. You read a clean answer, you think it is 100% true, and you have no way to check. Worse, the wrong part goes into the chat and becomes context, so the next answer builds on it. One dumb thing, said once, gets repeated as if it was settled.</p><h3>You explain the same project again and again</h3><p>Say it is Monday. You open a chat to get help with your app, and you spend twenty minutes saying what the product is, who it is for, what you built last week and what must be left alone. The answers are good.</p><p>On Wednesday you switch to another tool for another job, and it knows nothing. You type the whole thing again from memory, and the detail that mattered most, the one that would have stopped the bug, is the one you forget.</p><p>The easy fix is one project record. A single file at the root of the project that says what it is, who it is for, the current state and the next action. Every tool reads it before it does anything. You write the explanation once, and each chat starts where the last one stopped.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*68A1e_LQU5QLoP4B.gif" /></figure><p>Before, three chats each hold half a copy of the project. After, one project record is read first by every chat.</p><h3>Decisions get made and then vanish</h3><p>Suppose you decide to use A instead of B. A is the payment provider with the fees you can live with, and B is the one your partner liked. You agree on a call, you hang up, and nobody writes it down.</p><p>Three weeks later the AI suggests B, politely, with good reasons. Your partner says “see?”, and you spend an hour on a decision you already made.</p><p>So keep a decision file. One line per decision: what you chose, what you turned down, why, who decided and the date. Write it right after the call, in the file the next session reads.</p><blockquote><em>The reason is the part people drop first, and it is the part that stops the argument from coming back.</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*u9We3KrkbmQwW-7q.gif" /></figure><p>A decision line: what you chose, what you turned down, why, who decided and when.</p><h3>The AI reopens what you already settled</h3><p>Take the other side. You did write the decision down, in a notes app, in a doc, in a chat from last month. The AI never saw it, so it treats the question as open and argues for B again.</p><p>Writing it down is half the job. The other half is telling the model it is settled. Keep a short list of closed decisions inside the project record, each with its reason, in the part that is read first. A decision with a reason attached is much harder to reopen by accident.</p><h3>Context leaves with the person</h3><p>This version costs money. Take one client account. The account lead knows the client was promised a faster turnaround last spring. They know the client said no to one format, and that approvals go through one person on Fridays. None of it is in the CRM, which keeps deal values, dates and activity but has no field for the promise or the reason behind it.</p><p>Then the account lead goes on holiday, or leaves. The next person meets the client without the history, and the AI helps them no more than it helps anyone else, because it cannot read what was never written.</p><p>The fix is one client record per account. It holds the brief, the dated decisions with reasons, what the client said no to, the promises made and the next action. Whoever covers the account, person or AI, reads it first. The record outlives the person.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*RsVvdDKmaVOTWC0w.gif" /></figure><p>Before, each person and tool keeps its own copy. After, all of them read one client record.</p><h3>Each tool keeps its own copy, and the copies drift</h3><p>Claude, Cursor, Codex and Gemini each want their own rules file. You change a rule in one of them on Tuesday. A month later two of the four disagree, and the AI follows the old one without telling you.</p><p>Keep one rules file as the source. Give each tool a one-line file that points to it, and link one shared <a href="https://codemeetai.substack.com/p/use-ai-properly-07-skills-101?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=second-brain-article-1">skills</a> folder into each tool’s own path. The copies stop existing, so they cannot drift.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*qnbRE2pHpCHVg3oX.gif" /></figure><p>Four tool files point to one source file, so the copies cannot drift apart.</p><h3>Files go stale, and the AI trusts them</h3><p>Last month you moved the project from Firebase to Supabase. The record still says Firebase. The AI reads it, writes for the old database with full confidence, and the result breaks in a way that looks like a bug in your own work.</p><p>A wrong file is worse than no file, because nobody doubts it. Put a last-checked date on each section, and check the record whenever the project changes: you swap a tool, a client leaves, a decision is reversed. A rule that a script can test becomes a <a href="https://codemeetai.substack.com/p/using-ai-properly-06-what-are-hooks?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=second-brain-article-1">hook</a>, which runs at a fixed point whether the model agrees or not. A rule that needs judgement stays in the record, as a request.</p><h3>What a Second Brain is, in one sentence</h3><p>A Second Brain is a set of plain files, one record per project and one per client, that every AI tool and every person reads before work starts, and that gets written back after each decision. It is a folder with a discipline attached.</p><p>The layout follows ICM, the Interpretable Context Methodology: a small routing file points the AI to the one file it needs, so it does not have to load everything.</p><p>This is mine, drawn as a graph. Every dot is a note, and the lines are the links between them. When the AI starts a session, this is what it can walk through instead of starting from zero.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*sCHdVhEy9SYR2Pad.png" /></figure><p>My Second Brain as a graph. Each dot is a note, and each line is a link between two notes.</p><h3>What to do this week</h3><ol><li><strong>Count the repeats.</strong> For five working days, note each time you explain the same thing to an AI tool, and which tool it was. The count tells you which record to build first.</li><li><strong>Write the decision line.</strong> After each call or chat where something gets decided, add one dated line to the project file: the decision, the reason, the owner.</li><li><strong>Run the leave test on one account.</strong> Pick one client. Ask whether the next person could open one file and find the promises, the no’s and the next action. If not, that file is your first client record.</li></ol><p>A plain Markdown starting point for all of it is in the free <a href="https://github.com/chohra-med/second-brain-starter?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=second-brain-article-1">Second Brain Starter</a>. For how to sort the folders once you have a few records, see <a href="https://codemeetai.substack.com/p/using-ai-properly-11-how-to-organise?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=second-brain-article-1">how to organise your files for AI</a>, Episode 11 of Using AI, properly.</p><p><em>This one came from </em><a href="https://codemeetai.substack.com/p/why-every-builder-needs-a-second?utm_source=medium&amp;utm_medium=referral&amp;utm_campaign=second-brain-article-1"><em>Code Meet AI</em></a><em>, the newsletter where I write up the setups I actually run on my own projects.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=be71fe416cbb" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Wire AI is live: how I run AI-driven Growth Engineer in a React Native app]]></title>
            <link>https://blog.stackademic.com/wire-ai-is-live-how-i-run-ai-driven-growth-engineer-in-a-react-native-app-45d5f0738a28?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/45d5f0738a28</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[cross-platform]]></category>
            <category><![CDATA[expo]]></category>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Thu, 30 Jul 2026 16:28:16 GMT</pubDate>
            <atom:updated>2026-08-07T07:02:21.917Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*3CjTbG8b_tkD-Z1k.png" /></figure><p>Wire AI is live and early access is open. It’s an AI-native growth engineer for mobile apps: your React Native app embeds an SDK, a LangGraph backend decides what to ask each user next, and deterministic code owns the routing while the model only generates content. On one live app, activation went from 69% to 93%. 15 early-access seats, 3 taken, free and installed by hand.</p><p>Wire AI is live today, and early access is open.</p><p>It’s the AI-native growth engineer for mobile apps: AI that replaces your growth team. It runs four versions of every step of your users’ journey, live at once, and keeps what makes them stay.</p><p>On the first app it ran on, activation went from 69% to 93%.</p><p>15 seats. 3 are already gone. Free, installed by me personally, and there’s no price attached because I haven’t set one yet.</p><p>Below: what it does, what already shipped, what’s still rough, and how to claim one of the 12 that are left.</p><h3>How it works</h3><p>Your users’ journey has stages. They onboard, they get a plan, they hit their first real win, they get asked for a review. Wire AI runs four versions of each of those stages, live, at the same time. Users are assigned to a version and stay in it, the funnel says which version keeps more of them, and the winner gets promoted.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*BjGqTvGmoPyPvazk.png" /></figure><p>Then the part a testing tool doesn’t do. Every finished journey feeds back in: Wire reads what happened and writes a sharper variant for the next round.</p><blockquote>It isn’t a dashboard that tells you to go run a test. It’s the loop, already running.</blockquote><h3>What that looks like in your codebase</h3><p>Your React Native app embeds a small SDK. When a user opens the app, the SDK talks to a backend I run, and that backend decides, one screen at a time, what to ask that specific person next. It renders as native cards. Not a webview, not a chat window bolted onto your product.</p><p>At the end it hands your app a structured plan you can save and act on, and every step streams into a funnel you can read.</p><p>So instead of writing an onboarding once and guessing for the next two years, you write a config and the AI runs it.</p><p>The part that makes it work is boring on purpose. Deterministic code controls the flow and the model only generates content. Routing is a pure function of where the session is, how many questions are left, whether the user is bailing, so the whole flow is testable without a model in the loop.</p><p>The AI writes the next question, grounded in every answer the person already gave, and writes the final plan. Everything it emits gets validated against a fixed vocabulary of components before it’s allowed anywhere near a screen.</p><p>That’s the difference between a generative UI demo and something you can put in front of paying users. Most AI UI demos let the model draw whatever it wants and hope. This one gives the model a small, checked job and keeps the state machine in code where it belongs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*NiK5uoirGOGobtWS.png" /></figure><h3>What that gets you</h3><ol><li><strong>A journey that adapts per user.</strong> The static onboarding asks everybody the same seven questions in the same order. Wire AI asks what follows from what the person just said, stops when it has enough, and skips what it can already infer.</li><li><strong>Experiments that run without you.</strong> A/B/C/D variants across the journey, five stages, four arms, twenty combinations, without anybody sitting in a meeting deciding which to try next. This is the direction the product is built toward and I’ll be straight about where it sits today, further down.</li><li><strong>A funnel you can actually read.</strong> Completion, drop by step, time per screen, and the transcript of any individual session so you can read exactly what the AI asked and what the person answered. Most apps at this stage are guessing about where users give up.</li><li><strong>You find out who your users actually are.</strong> Wire AI reads every session and hands you the patterns: what people came for, which question makes them hesitate, which wording converts. Most founders are still running on a persona doc written before launch.</li></ol><h3>Our pilot client, and what actually happened</h3><p>I can’t name the app, that’s a client boundary I hold. What I can tell you is what it does: it helps people find spots to hang out. Live React Native app, real users, and an onboarding people were quietly dropping out of.</p><p>Here’s the run, in the order it happened.</p><ol><li><strong>We started with an experiment, not a redesign.</strong> Three versions of the onboarding running live at the same time, users assigned stickily so nobody got a different flow on their second open, every version chasing the same goal event. Nobody sat in a room deciding which one was better.</li><li><strong>The first read was wrong, and the loop is what caught it.</strong> One arm came back looking like a 17 point winner. At around fifty sessions that feels like a result, and it’s exactly the moment a human growth team ships it and builds the next quarter on top. At scale it was worth about three and a half points. Mostly noise wearing a nice hat.</li><li><strong>The version that actually won was the short one.</strong> The deep, thorough discovery flow lost to a fast one of about eight screens. On a flow with no real leak in it, where every individual question converts in the high nineties, length turned out to be the only lever that moved anything.</li><li><strong>Then the part I didn’t expect: we found out who the users actually were.</strong> The product context we had written assumed one kind of person, someone new to the city looking for places. The answers said something else. Younger, local, born there, social, budget conscious. My actual reaction, reading the answers: wait, these people already live here. We had spent months onboarding a user who didn’t exist.</li><li><strong>So we rewrote the messaging to the real one.</strong> New product context, questions rewritten for the person who actually shows up, one question cut completely because it was seasonal noise nobody cared about, and a guard added so the AI stops asking the same thing twice in different words.</li><li><strong>Three learning loops in, activation had gone from 69% to 93%</strong>, and the first movement showed up inside the first week of running live.</li></ol><p>Two honest caveats on that number, because it’s the one people will quote. It’s activation on one app, in one category, over one window, so it isn’t a portfolio of case studies and I won’t dress it up as one.</p><p>And the winning arm’s completion rate moved by about thirteen points between generations of the experiment, which is a reminder that you read these numbers per run, never all-time. That lesson cost me a re-read of my own dashboard.</p><h3>What already shipped</h3><p>Not a landing page and a waitlist. These pieces exist and run.</p><ol><li><strong>The SDK is open source.</strong> wireai-rn on npm, MIT licensed, eleven built in components with validated schemas, six adapters for different model providers. Swapping providers is one environment variable, so you&#39;re not married to whoever is winning this quarter.</li><li><strong>The transport is an open standard.</strong> The device and the backend speak Google’s A2A over JSON-RPC 2.0, the same contract implemented on both ends. That’s how a Python agent graph ends up driving a native React Native screen. One call, one turn, one card.</li><li><strong>The backend is a real service.</strong> Python, FastAPI, LangGraph. Multi tenant, per app keys with scoped access, session state living outside the process so it scales sideways, data in eu-central-1 because GDPR isn&#39;t a Q3 problem.</li><li><strong>There’s a console.</strong> Register an app, edit the config without cutting a release, read the funnel, open any session and read the transcript.</li><li><strong>It’s tested like something people depend on.</strong> The drop in kit runs 630 tests on every merge, and the agent routing has its own eval suite with an accuracy gate, so “the agent got worse” shows up as a failing build instead of a feeling.</li></ol><p>First card lands in about 130 milliseconds, against roughly three and a half seconds when I started. Onboarding is the one screen where a spinner costs you the user permanently.</p><h3>What a seat gets you</h3><blockquote>If Wire AI doesn’t lift your activation, you’ve paid nothing and you still keep the teardown.</blockquote><p>That’s the deal in one sentence. Here’s everything inside it.</p><ol><li><strong>The Activation Teardown, before you commit to anything.</strong> I put your existing onboarding through the analysis and send you a report: where people drop, which step leaks, what I would change first and why. It’s yours whether you take a seat or walk away, and you don’t need to install a single line of code to get it.</li><li><strong>The install, done by me, by hand.</strong> Up to four hours on a call, in your codebase, together. Not a docs link and good luck. This is the part that doesn’t scale, and it’s exactly why there are 15 seats and not 500.</li><li><strong>Your bugs jump the queue.</strong> When you hit something broken, and you will, it gets fixed that day instead of queueing behind everything else. That stops being possible the moment this cohort is full.</li><li><strong>A direct line to the roadmap.</strong> What gets built next is what early-access apps need next. At this stage that isn’t landing-page language, it’s just how the queue works, because there is nobody in front of you.</li><li><strong>Analytics free to 1 million events a month.</strong> Any app, not only early access, and it doesn’t expire when the beta does.</li></ol><p>No price, and that’s deliberate. I’m not deciding what Wire AI costs until early access tells me what it’s worth, so nobody in these 15 seats gets priced by a guess.</p><h3>What I want back</h3><p>One thing: the truth, while you use it.</p><p>When a question the AI asks is stupid, say so. When the console confuses you, say so. When a number looks wrong, say so, and that one is worth more to me than any testimonial you could write.</p><p>That’s the whole trade. You get the teardown, the install, the queue and the roadmap line. I get the thing I can’t buy, which is honest reactions from a real app with real users in it.</p><h3>If it isn’t you, it might be someone you know</h3><p>All three seats that are gone came warm. Somebody knew somebody. Not one came from a cold email, and I have sent a lot of cold emails, so I’ve stopped pretending that’s the channel.</p><p>So if your own app doesn’t fit but a name came to mind while you were reading, that’s the ask. Forward this to them, or drop the name in a comment and I’ll reach out and tell them you sent me.</p><p>Anyone arriving through a referral skips the queue and goes straight to a call. And I’ll run the Activation Teardown on your app too, even if you never install anything.</p><h3>Before you say yes, two things you should know</h3><ol><li><strong>Only the onboarding stage is live and proven.</strong> The journey wide experimentation I described up there is the roadmap, not a shipped feature. I’d rather you hear that now than find it out in week two.</li><li><strong>I have an open number I can’t explain yet.</strong> This week my own dashboard read 23% completion on an app that had been finishing north of ninety. I spent a morning on it and I still don’t have a clean answer. Best guess is the dashboard, there are two honest ways to compute a completion rate and my headline tile looks like it’s reading the wrong one, but I haven’t proven it and I’m not going to pretend I have.</li></ol><p>Both of those are in a launch post on purpose. The product is deliberately incomplete at this stage, and the fastest way to harden it is with a few real apps inside it rather than a year of me polishing it alone. If that reads as a red flag, this isn’t the right moment for you and that’s a fair call.</p><h3>Who this is for</h3><p>You’re a fit if you have a React Native or Expo app that’s live, with real users going through an onboarding right now, and you’re a solo founder or a tiny team where the person who feels the activation problem is also the person who decides.</p><p>It helps if your app already has AI or personalization in it, because then I don’t have to sell you the idea and we can go straight to the mechanics.</p><p>You’re not a fit if you already have a growth team running experiments every week. Genuinely. A larger company passed on this recently for exactly that reason and they were right to. The value here is removing a person from a loop you don’t have. If you have the person, you don’t need me.</p><p>Pre launch is also a bad fit, and I say that with some regret because those are usually the most fun conversations. Without traffic there’s nothing for the loop to learn from.</p><h3>How to claim a seat</h3><p>Reply to this email. That’s the whole process, there’s no form and no demo request.</p><p>Tell me what your app does and roughly how many people go through onboarding in a week. Two sentences is plenty. If it’s a fit I’ll send you a time this week. If it isn’t, I’ll tell you straight instead of quietly moving you into a nurture sequence.</p><p>Not sure you qualify? Ask for the teardown anyway. Worst case, you get a report on your own funnel and we both move on.</p><p>12 seats left of 15. The cap is real, because the install is manual and I’m the one doing it.</p><h3>How I make this</h3><p>I draft with AI. I’ve written about my workflow more than once and it’d be strange to hide it here. The receipts, the numbers, the decisions and the opinions are mine, the sentences get a drafting partner and then a lot of editing from me. If that disqualifies me for you, fair enough. If it interests you, that’s most of what this newsletter is about.</p><p><em>I’m Malik, 9 years building mobile apps, React Native and Expo. I write Code Meet AI, where I show what I’m building with AI and what it costs me. Wire AI lives at </em><a href="https://getwireai.com/"><em>getwireai.com</em></a><em>, and the SDK is open source.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45d5f0738a28" width="1" height="1" alt=""><hr><p><a href="https://blog.stackademic.com/wire-ai-is-live-how-i-run-ai-driven-growth-engineer-in-a-react-native-app-45d5f0738a28">Wire AI is live: how I run AI-driven Growth Engineer in a React Native app</a> was originally published in <a href="https://blog.stackademic.com/">Stackademic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to create an MCP Server for your product]]></title>
            <link>https://javascript.plainenglish.io/how-to-create-an-mcp-server-for-your-product-cdf546adc54e?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/cdf546adc54e</guid>
            <category><![CDATA[getwireai]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[mcp-server]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Tue, 28 Jul 2026 13:23:04 GMT</pubDate>
            <atom:updated>2026-07-28T13:23:04.874Z</atom:updated>
            <content:encoded><![CDATA[<p>A walkthrough of a production MCP server for a real SaaS: the tool surface, the two-scope auth model, why every tool returns Markdown instead of JSON, and the decisions that only show up once real traffic hits it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QsTG0cF9XCfqU11I.png" /></figure><p>This is the builder’s half of episode 05. The plain-language version, where i wire Gmail and Google Calendar and the whole point is that they teach opposite lessons, is over at <a href="https://medium.com/[SUBSTACK-URL]">Code Meet AI</a>.</p><h3>the part nobody warns you about</h3><p>Everyone’s first MCP experience is the good one. You paste four lines into a config file, restart your client, and suddenly your AI can read your inbox. It feels like magic and it takes about ninety seconds.</p><p>Then you decide your own product should have one, and you find out the protocol was never the hard part. MCP is a thin, pleasant spec. What it does is force you to answer a question you have been avoiding: <em>what is my product, expressed as verbs a stranger’s AI is allowed to call?</em></p><p>That question has teeth. Every tool you expose is a promise about blast radius.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iLWQw7JdIL4xuOxR.png" /></figure><p>The starting problem, same for every product: the data exists and nothing that could reason about it can reach it.</p><h3>why a funnel is worth the trouble</h3><p>Quick justification before the code, because “make your product agent-reachable” is the kind of sentence that means nothing on its own.</p><ul><li><strong>8 in 10 people have deleted an app because they couldn’t figure out how to use it</strong> (Wyzowl’s onboarding survey, 2020).</li><li><strong>The average app loses most of its users in the first few days</strong> (Andrew Chen’s widely-cited Quettra data, 2015 numbers, but the <em>shape</em> hasn’t moved).</li><li><strong>A 5% lift in retention raises profit somewhere between 25% and 95%</strong> (the Bain finding Harvard Business Review keeps citing, 2014).</li><li><strong>80% of features are rarely or never used</strong> (Pendo, 2019).</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*IFDIayQeHDvkvq5f.png" /></figure><p>The data almost always exists. The reaching is what’s missing.</p><p>Onboarding is where that gets decided, which is what Wire AI does: it generates the onboarding flow per user instead of shipping one static carousel to everybody. On the app I tuned hardest, activation went from 69% to 93%. That number is the reason the MCP exists at all, because you cannot tune what your AI cannot look at.</p><h3>what I actually exposed</h3><p>Twenty tools. I counted the registrations rather than trusting my own README, and I recommend you do the same to yours at some point.</p><p>They group into five jobs:</p><ol><li><strong>Learn the product</strong> (2 tools, no auth). wireai_get_integration_guide returns the integration recipe an agent reads before it writes a line of code. wireai_list_components returns the 13 device components the flow is allowed to render.</li><li><strong>Read the funnel</strong> (tenant). wireai_get_insights, the one tool most users ever touch.</li><li><strong>Manage apps</strong> (admin). Register, list, get, and patch an app’s config.</li><li><strong>Run experiments</strong> (admin). Split onboarding, the review gate, or a questionnaire into A/B/C/D arms and read the results.</li><li><strong>Close the loop</strong> (mixed). Submit a learning report, list them, mark one applied.</li></ol><p>The shape that matters: this is a <strong>control plane</strong>, not a Q&amp;A bot. The AI does not “ask Wire AI a question.” It reads state, changes config, splits traffic, and reads results. That’s the whole product, expressed as verbs.</p><p>Connecting is the boring part, and it should be:</p><pre>claude mcp add --transport http wireai https://wireai-mcp.fly.dev/mcp \<br>  --header &quot;Authorization: Bearer &lt;your-token&gt;&quot;</pre><p>Or the config-file form, if your client prefers it:</p><pre>{<br>  &quot;mcpServers&quot;: {<br>    &quot;wireai&quot;: {<br>      &quot;type&quot;: &quot;http&quot;,<br>      &quot;url&quot;: &quot;https://wireai-mcp.fly.dev/mcp&quot;,<br>      &quot;headers&quot;: { &quot;Authorization&quot;: &quot;Bearer &lt;your-token&gt;&quot; }<br>    }<br>  }<br>}</pre><p>Honest note while I’m here: there is no one-click “add MCP” button in my console yet. You copy your key from the Set Up tab and run the connect command once. I’d rather write that sentence than pretend the button exists.</p><h3>the auth model, which is most of the work</h3><p>I’ll say the uncomfortable thing first. A remote MCP server is an authenticated API where the client is a language model that decides on its own when to call you. Every auth shortcut you have ever taken gets more expensive under that sentence.</p><p>Two scopes, and the split is not cosmetic:</p><p>ScopeMinted fromReachestenantyour wai_ keyread your own app&#39;s insights, submit and flag learning reportsadminthe operator keyapp management, config, analytics, experiments, cross-tenant reports</p><p>Four properties, and each one exists because the alternative bit somebody:</p><p><strong>The raw key is used once, then never again.</strong> You POST /v1/auth/mcp-token with your key and get back a short-lived scoped token. That token is what rides in the Authorization header. Your actual key does not travel with every tool call, so it is not sitting in a request log somewhere waiting to be grepped.</p><p><strong>Tokens expire in about 24 hours.</strong> When one dies the tools return a plain “run login again” message instead of a stack trace. Expiry that produces a confusing error is expiry people route around.</p><p><strong>Rotation is the revocation story.</strong> Each token is bound to its parent key’s fingerprint. Rotate the key and every token derived from it dies instantly, with no server-side token store to purge. I like this one a lot, because “how do I revoke it” is the question that usually gets answered with a shrug and a database table.</p><p><strong>The server refuses, not the docs.</strong> A tenant token hitting an admin route gets rejected by the backend. Not filtered in the client, not discouraged in the tool description. The description is a suggestion to a model that is free to ignore it.</p><p>For local development the fallback is stdio: node dist/index.js login writes a derived token to ~/.wireai/credentials.json, chmod 600 inside a 0700 directory. Never the raw key. And there&#39;s an env-var path for CI that I documented while saying plainly that it puts a long-lived secret in plaintext, so prefer the token.</p><p>One more, since people ask: @wireai/mcp is repo-local and deliberately not on npm. The kit&#39;s files allowlist excludes it. There is no npx wireai-mcp to typo-squat, and the hosted URL is the path I actually support.</p><h3>five design decisions, four of which I got wrong first</h3><h3>Markdown, not JSON</h3><p>wireai_get_insights doesn&#39;t return a funnel object. It hits GET /v1/insights.md and passes through a Markdown brief: the steps, the advance rate at each one, where people stall.</p><p>This felt lazy when I did it. It isn’t. A model reads a written brief the way it reads any document, and it reasons over prose considerably better than it reasons over four levels of nested keys. Raw JSON also burns your context window on punctuation. If you write exactly one MCP tool this year, make it return a page.</p><h3>an empty funnel is a valid answer</h3><p>A brand-new app has no data. The obvious implementation throws, or 404s, and then your AI reports that the integration is broken when it is simply new.</p><p>So an empty funnel returns HTTP 200 with a “no data yet” brief. Same shape, no numbers. A missing credential degrades the same way. The rule I ended up with: <strong>a half-configured MCP server should be inert, not loud.</strong> An angry server teaches the model to stop calling the tool.</p><h3>the default that misled a real analysis</h3><p>This is the one I’d want to read.</p><p>wireai_get_onboarding_analytics returns the funnel. Originally it defaulted to everything, all-time. Which is a reasonable default and also completely wrong, because an onboarding flow that has been through three experiment generations does not have &quot;a&quot; funnel. It has an era per generation, and pooling them averages a winning arm together with the losing arm it replaced.</p><p>The numbers were never incorrect. They were unscoped, and unscoped numbers are worse than missing ones, because they look like answers. It threw off a real analysis before I caught it.</p><p>The fix was a second tool. wireai_list_analytics_runs returns the app&#39;s eras, each experiment window plus the static and winner eras, with a default_run_id. You read the timeline first, then feed a run id back as the run param to scope every metric to one era. The tool description tells the agent to read the timeline first.</p><p>The general lesson: when your data has generations, an unscoped read is a bug, even when every number in it is accurate.</p><h3>config writes, without a release</h3><p>wireai_update_onboarding_app patches an app&#39;s configuration and only the fields you send. Question script, goal, product context, screen budget, the length_band (5-8, 8-13, 13-18, 18-25), allowed components, locale, the in-app review prompt, and the per-module feature switches.</p><p>That last one includes the kill switch, features.onboarding.mode: ai runs the generated flow, static serves a stored flow with zero LLM calls, off suppresses it. An agent can turn my own product off for a tenant without shipping a build. That is intentional and it is exactly why the write tools live behind the admin scope.</p><p>The thing that makes this usable at all is that none of it needs an app release. Config-only, live.</p><h3>the gotcha I’d have flagged in review</h3><p>Per-arm min_sessions does not inherit from the parent experiment. An arm that omits it has no min-sessions gate, so it fires immediately while its siblings wait.</p><p>It is documented, in the README and in the tool description, because a footgun a model can step on has to be written where the model reads. That’s a genuinely different documentation target than a human developer. Your tool descriptions <em>are</em> the API docs now.</p><h3>the loop, end to end</h3><p>Where it stops being a tool list and starts being useful:</p><ol><li>Agent reads wireai_get_integration_guide, then writes the integration.</li><li>wireai_register_onboarding_app, then wireai_update_onboarding_app to seed the question script and context.</li><li>wireai_set_onboarding_experiment splits the flow into arms.</li><li>Traffic runs for a week.</li><li>wireai_list_analytics_runs, then wireai_get_experiments scoped to that run.</li><li>The learning-report skill turns the raw funnel into an aggregate analysis plus a proposed context change, and wireai_submit_learning_report stores it. summary_md is aggregates only, no user rows, no PII. share_ok defaults to false.</li><li>Apply the change, wireai_mark_learning_applied, repeat.</li></ol><p>Steps 1 through 7 are one conversation. That is the actual product: not “AI generates onboarding” but a loop where the improving is reachable.</p><p>Worth separating the two halves. The <strong>skills</strong> carry the judgment: how to design a question script, how to read a funnel, what a good learning report says. The <strong>MCP</strong> carries the reach. Knowledge on disk, hand into production. Neither one is useful alone, and people building agent products keep trying to make one of them do both jobs.</p><h3>the security posture, briefly</h3><p>Nothing exotic, it’s the posture you already take with a service token:</p><ul><li>Least privilege by default. The read loop is entirely tenant-scoped. Most users never mint an admin token.</li><li>Aggregates, never raw user rows. This is enforced in the learning-report payload shape, not left to the caller’s conscience.</li><li>No key in any tool output. Whatever a tool returns lands in a context window you do not control, and may end up in a transcript, a log, or a screenshot in an article like this one.</li><li>Nothing logged. Raw keys and tokens never reach the logs.</li><li>Hosted mode stores nothing. The Fly app is stateless, single region.</li></ul><p>Deploy is a manual fly deploy from the mcp/ folder after a merge. No auto-deploy on this package, on purpose: an accidental push should not reconfigure a live control plane.</p><h3>what it does not do</h3><p>Same honest limit as the rest of this series. The MCP lifts nothing. It does not improve activation, it does not fix a bad question script, and it will happily give your AI a perfect view of an onboarding flow that deserves to be deleted.</p><p>What it removes is the gap between noticing and acting. “Why do people quit at step two, and what should I try” stops being a question you answer alone in front of a dashboard, and becomes one you ask a system that can look, split the traffic, and read the result back to you.</p><p>Reachable is not good. Reachable is where good becomes possible.</p><h3>grade your own app first</h3><p>Before you write a server, find out whether your product has anything worth exposing. I put the checker in a pack and open-sourced it.</p><p>The mcp-readiness-audit skill runs seven checks: analytics, onboarding measurement, monetization, crash reporting, MCP-reachability, whether your AI has the context to act, and whether a reachable server is actually safe or quietly leaking. Four grades, from <strong>Flying Blind</strong> to <strong>Agent-Ready</strong>, plus the top three things to fix. A section 7 failure, a committed key, a write tool with no scope, raw PII in a response, caps you below Agent-Ready no matter how good your analytics are.</p><p>It graded my own open-source boilerplate <strong>“Instrumented but Blind.”</strong> Great data, blind AI. So it won’t flatter you either.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*IDoNnn2633CF4-s8.png" /></figure><p>Seven checks, four grades, and it failed my own repo on reachability.</p><p>The second skill, mcp-server-blueprint, builds the server: read-only by default, field allowlists, no secrets in tool output, aggregates not rows, Markdown not JSON, 2 to 4 well-named tools instead of 20 vague ones, and a pre-ship checklist.</p><p>Both are here, take them: <a href="https://github.com/chohra-med/mcp-for-your-app">github.com/chohra-med/mcp-for-your-app</a></p><p>And if you want the server this article is about, it’s part of <a href="https://getwireai.com/?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap05mcp">Wire AI</a>.</p><p>Written by Malik at <a href="https://codemeetai.substack.com/?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap05mcp">Code Meet AI</a>. This is the builder’s cut of episode 05 of Using AI, properly. The plain-language cut, Gmail and Google Calendar and why they teach opposite lessons, is <a href="https://medium.com/[SUBSTACK-URL]">here</a>. Episode 04 was <a href="https://codemeetai.substack.com/p/using-ai-properly-04-context-engineering?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap05mcp">context engineering</a>.</p><p><em>i’m Malik, i’ve been a mobile engineer for 9 years, and everything above is running in production. The 20-tool count is counted from the registrations in </em><em>src/index.ts. My own notes had it at 19, which is the kind of drift you get the moment a tool surface stops being small.</em></p><p><em>i’m Malik, i’ve been a mobile engineer for 9 years, and everything above is running in production. The 20-tool count is counted from the registrations in </em><em>src/index.ts. My own notes had it at 19, which is the kind of drift you get the moment a tool surface stops being small.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cdf546adc54e" width="1" height="1" alt=""><hr><p><a href="https://javascript.plainenglish.io/how-to-create-an-mcp-server-for-your-product-cdf546adc54e">How to create an MCP Server for your product</a> was originally published in <a href="https://javascript.plainenglish.io/">JavaScript in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Context engineering for Mobile founder, simplified]]></title>
            <link>https://blog.stackademic.com/context-engineering-for-mobile-founder-simplified-8b23a5f4baf9?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/8b23a5f4baf9</guid>
            <category><![CDATA[mobile-development]]></category>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[expo]]></category>
            <category><![CDATA[context-engineering]]></category>
            <category><![CDATA[react-native]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Mon, 20 Jul 2026 14:30:27 GMT</pubDate>
            <atom:updated>2026-08-07T07:14:43.759Z</atom:updated>
            <content:encoded><![CDATA[<p>A prompt is the ask. Context is everything the AI needs to answer it well, and dumping in more is not the fix. Here is the four-line context i write before a task, and the files that make it stick to a repo.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ES0cnQD5G1xxP9fU.png" /></figure><p>This piece is from <a href="https://codemeetai.substack.com/?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap04">Code Meet AI</a>, my newsletter where i document how i actually use AI to ship real mobile work, receipts included. New guides land there first.</p><p>A few weeks ago an AI i built into an app asked a real user to name a beach-party plan. First thirty seconds in the product. The app can technically make a plan called that, so it wasn’t a hallucination exactly, it was worse: a real feature dragged to the front because the model had nothing better to go on. i had handed it a one-line description of the app and told it to get the user to a concrete first action. A one-line description is an invitation to guess. So it guessed, confidently, in front of someone i was trying to keep.</p><p>That was the moment context engineering stopped being a phrase i skimmed past and became a bug with a name. And if you ship React Native, you already own the instinct that fixes it. You just point it at code today, not at prompts. You scope a token to the one thing it needs. You write a PR description that says what changed and why. You tell the AI “wire it through the auth service, don’t touch the generated files.” That last move, telling it what to read and what to leave alone, is context engineering. This is the same muscle, aimed at a different target.</p><h3>A prompt is the ask, context is the ground</h3><p>The prompt is what you want. “Add the token-refresh retry.” “Draft the paywall copy.” “Clean up this feature folder.” Short, and you already know how to write one. The context is everything the model needs to answer that well and doesn’t have unless you hand it over: which auth service, which files are generated and sacred, what the app actually does and who is standing on the other side of that onboarding. The prompt points at a target. Context is whether the model can see the target or is throwing in the dark.</p><p>Most bad AI output is not a bad prompt. It is a fine prompt fired into an empty room. The model fills the empty room with the most statistically average thing, and average is exactly what makes you close the tab and call it overhyped.</p><h3>The four things you are actually feeding it</h3><p>When people say “context,” they mean four different things stacked together. It helps to see them apart.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*c6er5ZRm8GRJjK1k.png" /></figure><p>A prompt is the arrow. These four are the ground it lands on.</p><p><strong>The goal.</strong> Not the task, the outcome. “Turn this screen into a reusable component” is a task. “so the paywall and the settings row can share it without a prop-drilling mess” is the goal. Give the model the why and it makes better calls on the hundred small things you didn’t specify.</p><p><strong>The ground truth.</strong> The real material, not a description of it. This is the one people skip. Don’t tell the AI “match our house style,” paste two components that already look the way you mean. Examples beat adjectives every time. A model shown three real things you like will out-perform any paragraph describing them.</p><p><strong>The constraints.</strong> What good looks like and what to never do. The library you’re standing on. The generated files it must not edit. The RN version you can’t break. Constraints are not the AI’s handcuffs, they are how it knows it succeeded instead of guessing at your taste.</p><p><strong>The boundary.</strong> What to leave out and what not to touch. This is the half nobody talks about, and it is the one that separates people who are good at this from people who just paste more.</p><h3>More context is not better context</h3><p>Here is the counter-move, and it is the part that surprised me.</p><p>Once you learn that thin context causes bad output, the obvious next step is to feed it everything. The whole feature folder. The entire git history. Every doc, in case it helps. It feels thorough. It is the exact opposite of thorough.</p><p>A model has a working memory, and past a point, adding more doesn’t inform it, it distracts it. The signal you actually needed gets buried under fifty files of nearly-relevant noise, and the answer gets vaguer, not sharper. i have watched a model give a worse answer to the same question after i “helpfully” pasted three more files. The good lines were in there. It just couldn’t find them anymore. It is the prompt equivalent of importing the whole SDK to use one function.</p><p>So context engineering is not “add context until it works.” It is “give it exactly what this task needs, and nothing that competes with that.” Curation, not accumulation. The test i use now is embarrassingly simple. Before i paste something in, i ask: does the model need this to answer, or am i adding it to feel safe? The second kind is the noise.</p><h3>How to actually do it</h3><p>You don’t need a framework. You need four sentences before the task, roughly in this order.</p><ol><li><strong>State the goal, not just the task.</strong> One line on the outcome you’re actually after. “so that…” is the most useful phrase in the whole practice, and you already write PR descriptions this way.</li><li><strong>Show, don’t describe.</strong> Paste two or three real examples of what good looks like. A component you’d be happy to merge, a before, an after. This single move fixes most “it sounds generic” complaints.</li><li><strong>Name the constraints and the anti-goals.</strong> The library, the version, the hard limits, and the one or two files it must never touch. Short bullets are fine.</li><li><strong>Draw the boundary.</strong> Say what to use and what to ignore. “Only this feature folder.” “Don’t touch the generated types.” “The old screen is background, not a template.”</li></ol><p>That’s it. Four sentences turns “draft the paywall copy” from a coin flip into something you’d actually ship.</p><h3>Write it down once: the six files</h3><p>The last move is what makes this compound instead of repeat. The first time you assemble the context for a recurring job, don’t throw it away. Put it in the repo, next to the code it describes. Next time, you point the AI at the folder and add one line for today’s task. You’ve turned a five-minute setup into a five-second one, and the output stays consistent because the ground under it stopped moving.</p><p>On a real project this is not one file, it is a few, and the names are becoming a standard any agent already reads:</p><ul><li>PROJECT.md: what the app is and why it exists.</li><li>CONTEXT.md: what you are working on right now, this sprint.</li><li>CLAUDE.md and AGENTS.md: the rules you want the AI to follow, the conventions, the files to never touch.</li><li>README.md: for the human who lands cold.</li><li>progress.md: the memory file from <a href="https://codemeetai.substack.com/p/using-ai-properly-02-give-the-ai?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap04">episode 02</a>, for what happened last.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oZ8A4KtzMuQdDyFO.png" /></figure><p>the context lives in the repo, not in your head. any AI you point at the folder reads it and knows where it is.</p><p>If <a href="https://codemeetai.substack.com/p/using-ai-properly-02-give-the-ai?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap04">episode 02</a> sounds like it is happening again, that is because it is. A memory folder is context that persists across sessions. A context file is the same instinct pointed at a single repo. The AI that invented a beach-party plan does not do that anymore, and the fix was never a cleverer prompt. It was a page of real product context, written once, that told it what the app is actually for and who is on the other side.</p><h3>Where this breaks</h3><p>Two ways, both worth knowing.</p><p>Stale context is worse than no context. A CONTEXT.md that still describes last quarter&#39;s screen flow will make the AI confidently wrong, and confidently wrong is the expensive kind. When the thing changes, change the file. It is a living note, not a monument. Treat it like a dependency you keep on the latest version.</p><p>And context is not a substitute for the check. Grounding the model dramatically raises the floor, it does not remove your job of reading the diff before you trust it. That check is its own episode later in this series, and it is the one that never gets automated away.</p><p>The punchline is small and annoying and true: most of the time the AI wasn’t wrong because it is dumb. It was wrong because it was guessing, and it was guessing because you didn’t tell it the thing you assumed was obvious. Context engineering is just the discipline of saying the obvious thing out loud, once, and then reusing it.</p><p>I put together a context starter pack: the four-line context you write before a task, the six files that give any AI your whole repo’s context (PROJECT, CONTEXT, CLAUDE, AGENTS, README, and the progress.md memory file from episode 02, each explained), and the one prompt that sets them all up for you. Comment <strong>CONTEXT</strong> and i’ll send it over. If you ship mobile and want the way i bake this into the starter i build apps from, that lives in <a href="https://aimobilelauncher.com/?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap04">AI Mobile Launcher</a>.</p><p>Written by Malik at <a href="https://codemeetai.substack.com/?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap04">Code Meet AI</a>. This is episode 04 of Using AI, properly. Episode 02 was <a href="https://codemeetai.substack.com/p/using-ai-properly-02-give-the-ai?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap04">give the AI a memory</a>, episode 03 was <a href="https://codemeetai.substack.com/?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap04">put the AI on the work around work</a>. New guides land there first, subscribe if this was useful.</p><p><em>i’m Malik, i’ve been a mobile engineer for 9 years, and i run my work and this newsletter on the system these episodes describe. Next up: how to make the AI check its own work, before you do.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8b23a5f4baf9" width="1" height="1" alt=""><hr><p><a href="https://blog.stackademic.com/context-engineering-for-mobile-founder-simplified-8b23a5f4baf9">Context engineering for Mobile founder, simplified</a> was originally published in <a href="https://blog.stackademic.com/">Stackademic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[React Native taught you to delegate to AI. Claude Cowork is the other 90%]]></title>
            <link>https://javascript.plainenglish.io/react-native-taught-you-to-delegate-to-ai-claude-cowork-is-the-other-90-f0c60af18f56?source=rss-f200b7d94bbc------2</link>
            <guid isPermaLink="false">https://medium.com/p/f0c60af18f56</guid>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[claude-cowork]]></category>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Malik Chohra]]></dc:creator>
            <pubDate>Mon, 13 Jul 2026 16:16:44 GMT</pubDate>
            <atom:updated>2026-09-16T12:48:43.572Z</atom:updated>
            <content:encoded><![CDATA[<p>You have run Claude Code in the terminal for a year. This week Anthropic pointed the same delegation engine at everyone else’s work, and 90% of it isn’t code.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*zSmus__3hs1GaRYQ.png" /></figure><p>This piece is from <a href="https://codemeetai.substack.com/?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap03">Code Meet AI</a>, my newsletter where i document how i actually use AI to ship real mobile work, receipts included. New guides land there first.</p><p>If you build React Native, you already know the delegation move. You open Claude Code in the terminal, you say “add the token-refresh retry, wire it through the auth service, don’t touch the generated files,” and you go make coffee. You are not typing every step. You are handing over an outcome and reviewing what comes back. That has been your daily reality for about a year.</p><p>This Monday, Anthropic pointed that exact engine at everyone who does not open a terminal. They expanded <a href="https://anthropic.skilljar.com/introduction-to-claude-cowork">Claude Cowork</a> to web and mobile, and they put a number on what people run on it: more than 90% of usage is not software development. Not code. The biggest categories were business operations and content work. Reconciling the quarter’s spend and drafting the memo about it. Turning a folder of contracts into a renewals tracker with the risks flagged. Building tomorrow’s client deck from call transcripts.</p><p>They call it “the work around work.” Good name. It is the layer of the job that is real work, takes real hours, and somehow is nobody’s actual job. As an engineer you have automated your half of it. This is the same automation, aimed at the half you have been doing by hand: the filing, the status updates, the weekly report you rebuild every Monday.</p><h3>what Cowork is, in one honest paragraph</h3><p>You already know chat: you ask, it answers, you ask again. You are the project manager of every tiny step, same as a REPL.</p><p>Cowork is the same Claude with a different job description, and it is the terminal agent you already trust, minus the terminal. You hand it an outcome: “turn this folder of contracts into a renewals tracker, flag anything risky.” It makes a plan, breaks it into steps, works across the files and apps you have connected, and comes back with the finished thing. While it runs, you do something else. Since this week it follows you: start a task at your desk, check the status on your phone, pick up the result later with the laptop closed. Scheduled tasks run even with no device online.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*t1bu5xnyi-gRWpRv.png" /></figure><p>Chat: you drive. Cowork: you describe, then review.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Hg97yIUbuw6E2jpO.png" /></figure><p>my actual Claude home. one toggle flips chat into Cowork, and “send me a daily briefing” is already sitting there as a suggestion.</p><p>One tool, two jobs, and for most people the second job is their whole day. You got the code half first because you happened to work in a terminal. Now the rest of your team gets it too.</p><h3>what people actually run on it</h3><p>Not moonshots. Chores. The patterns showing up again and again in the early write-ups:</p><p><strong>Folder archaeology.</strong> Sort, rename, and deduplicate a cluttered folder. Rename 400 photos to match the product list. The task you have postponed for a year because it is three hours of mind-numbing clicking. This is the non-code version of the codemod you would happily write a script for, except now the person next to you can ask for it in a sentence.</p><p><strong>Pile of documents, should be a list.</strong> A folder of contracts becomes a renewals tracker with dates and risk flags. A stack of receipts becomes an expense sheet. Dense PDFs in, structured table out.</p><p><strong>The recurring report.</strong> The weekly status, the morning brief, the numbers pulled into the same format every Monday. You describe it once as a routine, in plain language: what to gather, what format, where to deliver it. It runs every morning without you. Think cron, described in English.</p><p><strong>First drafts from your own material.</strong> Tomorrow’s client deck from the call transcripts. The variance memo from the spreadsheet. Not “write me something generic,” but “turn my raw material into my draft.”</p><p>The common shape: high effort, repeatable, and the source material already sits in your files. That is the delegation sweet spot, and it is the same sweet spot you learned to spot in your codebase.</p><h3>how to start: one resented task</h3><p>Don’t tour the features. Pick the one task you flinched at while reading the last section. Then:</p><ol><li><strong>Give it context first.</strong> This is the same rule i wrote a whole episode on last week: before the task, point Cowork at a short context file about what this project is, what good output looks like, what to leave alone. If you gave your AI a <a href="https://codemeetai.substack.com/p/using-ai-properly-02-give-the-ai?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap03">memory folder</a>, you already have this muscle. Two minutes, and the difference in output quality is not subtle.</li><li><strong>Describe the outcome, not the steps.</strong> “Make this folder make sense: group by client, newest first, flag anything duplicated” beats a 12-message back-and-forth. You already write PR descriptions this way.</li><li><strong>Review like a manager, not a believer.</strong> It hands you a deliverable, not a truth. Open the tracker, spot-check five rows against the source. This is a code review with different file types.</li><li><strong>If it worked twice, make it a routine.</strong> The scheduled kind is where the real hours come back: describe it once, in plain language, and stop doing it forever.</li></ol><h3>where this breaks</h3><p>It has access to what you give it. That is the feature and the risk: connect the folders and tools the job needs, not everything you own. Same rule as the memory file, and the same rule as any token you scope in an app: least privilege, nothing it does not need.</p><p>And it is confident, including when it is wrong. A tracker with one silently wrong date is worse than no tracker. You know this from AI-generated code that compiles and still lies. The review step is not optional politeness, it is the job you keep.</p><h3>the punchline</h3><p>The AI didn’t take the work. It took the work around the work. You felt this first, in the terminal, when the boilerplate stopped being your problem. What’s left over is the part that needed you all along: deciding.</p><p>I am putting together a routines starter pack: three plain-language routine templates (the folder cleanup, the pile-to-tracker, the morning brief) you can adapt in five minutes. It goes out through the newsletter first. If you ship mobile and want the way i package this delegation habit into the starter i build apps from, that lives in <a href="https://aimobilelauncher.com/?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap03">AI Mobile Launcher</a>.</p><p>Written by Malik at <a href="https://codemeetai.substack.com/?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap03">Code Meet AI</a>. This is episode 03 of Using AI, properly. Episode 02 was <a href="https://codemeetai.substack.com/p/using-ai-properly-02-give-the-ai?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap03">give the AI a memory</a>, episode 01 was <a href="https://codemeetai.substack.com/p/using-ai-properly-01-the-art-of-prompting?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap03">the art of prompting</a>. New guides land there first, subscribe if this was useful.</p><p><em>i’m Malik, i have been a mobile engineer for 9 years, and i run my work and this newsletter on the system these episodes describe. The delegation habit started in the terminal, moved to my </em><a href="https://codemeetai.substack.com/p/how-to-build-a-second-brain-with?utm_source=medium&amp;utm_medium=social&amp;utm_campaign=uap03"><em>second brain</em></a><em>, and now it does the work around the work. Next up: where a single sentence stops helping, and context begins.</em></p><h3>Before you go</h3><ul><li>Please take a moment to like the post and follow the writer!</li><li>Did you know that over 400,000 developers share what they’re building, learning, and discovering across our platforms every month? Learn how you can contribute <a href="https://plainenglish.io/write-for-us">here</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f0c60af18f56" width="1" height="1" alt=""><hr><p><a href="https://javascript.plainenglish.io/react-native-taught-you-to-delegate-to-ai-claude-cowork-is-the-other-90-f0c60af18f56">React Native taught you to delegate to AI. Claude Cowork is the other 90%</a> was originally published in <a href="https://javascript.plainenglish.io/">JavaScript in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>