<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Erik Scott</title>
    <description>The latest articles on DEV Community by Erik Scott (@escott).</description>
    <link>https://dev.to/escott</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3690576%2F60960fc8-1a15-4529-971e-a2385db753a2.jpg</url>
      <title>DEV Community: Erik Scott</title>
      <link>https://dev.to/escott</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/escott"/>
    <language>en</language>
    <item>
      <title>Make Your AI List Its Assumptions Before It Edits Code</title>
      <dc:creator>Erik Scott</dc:creator>
      <pubDate>Thu, 16 Jul 2026 21:56:15 +0000</pubDate>
      <link>https://dev.to/escott/make-your-ai-list-its-assumptions-before-it-edits-code-4p3g</link>
      <guid>https://dev.to/escott/make-your-ai-list-its-assumptions-before-it-edits-code-4p3g</guid>
      <description>&lt;p&gt;The worst AI code changes start with a quiet guess.&lt;/p&gt;

&lt;p&gt;You ask for a small refactor. The tool finds a pattern. It fills the gaps. Then it writes clean code around a false idea.&lt;/p&gt;

&lt;p&gt;Tests may still pass.&lt;/p&gt;

&lt;p&gt;The fix is simple. Make the tool list its assumptions before writing code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure hides inside the request
&lt;/h2&gt;

&lt;p&gt;Say you ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add retries to failed payment status checks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The tool may make several guesses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every failed request is safe to retry.&lt;/li&gt;
&lt;li&gt;A timeout means no work happened.&lt;/li&gt;
&lt;li&gt;Two requests cannot cause duplicate work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those guesses may be wrong.&lt;/p&gt;

&lt;p&gt;The frustrating part is not the mistake. It is how reasonable the code looks afterward.&lt;/p&gt;

&lt;p&gt;I kept reviewing the code instead of reviewing its starting beliefs. That was backward.&lt;/p&gt;

&lt;p&gt;A good change starts with checked facts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use this prompt before risky edits
&lt;/h2&gt;

&lt;p&gt;Paste this before the tool changes any file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before editing code, list up to five assumptions you are making.

For each assumption, include:
1. The assumption
2. Evidence from this project
3. The risk if it is wrong
4. What still needs checking

Do not write code yet.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last line matters.&lt;/p&gt;

&lt;p&gt;Without it, many tools will list assumptions and start coding anyway. You want a pause between thinking and changing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a useful answer looks like
&lt;/h2&gt;

&lt;p&gt;A weak answer sounds like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Retries should be safe because they are common here.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is not evidence. It is a guess wearing a tie.&lt;/p&gt;

&lt;p&gt;A useful answer might say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The client retries read requests in &lt;code&gt;src/client.ts&lt;/code&gt;. Tests cover status codes 429 and 503. Timeout behavior is not tested. We need to check whether the server can finish after the client times out.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now you have something you can review.&lt;/p&gt;

&lt;p&gt;You can open the file. You can read the tests. You can check the timeout case.&lt;/p&gt;

&lt;p&gt;The tool has shown where its confidence ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review the evidence, not the confidence
&lt;/h2&gt;

&lt;p&gt;For each assumption, ask one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can I point to proof inside this project?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Good proof includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A test that names the behavior&lt;/li&gt;
&lt;li&gt;A caller that depends on the behavior&lt;/li&gt;
&lt;li&gt;A config value&lt;/li&gt;
&lt;li&gt;A current design note&lt;/li&gt;
&lt;li&gt;Code that already handles the same case&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Weak proof includes phrases like these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“This is usually safe.”&lt;/li&gt;
&lt;li&gt;“Most systems work this way.”&lt;/li&gt;
&lt;li&gt;“The name suggests that.”&lt;/li&gt;
&lt;li&gt;“This seems low risk.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those phrases are not always wrong. They just need checking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use it where guesses cost the most
&lt;/h2&gt;

&lt;p&gt;This prompt helps most when a change touches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data writes&lt;/li&gt;
&lt;li&gt;Login or access rules&lt;/li&gt;
&lt;li&gt;Jobs that may run twice&lt;/li&gt;
&lt;li&gt;Public API behavior&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Old code with few tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need it for every typo.&lt;/p&gt;

&lt;p&gt;Use it when a hidden rule could turn clean code into broken behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  The goal is not perfect certainty
&lt;/h2&gt;

&lt;p&gt;You will never remove every unknown.&lt;/p&gt;

&lt;p&gt;The goal is to make unknowns visible before they become code.&lt;/p&gt;

&lt;p&gt;Once the assumptions look sound, tell the tool to continue. If one lacks proof, stop and check it first.&lt;/p&gt;

&lt;p&gt;That small pause changes the review. You are no longer asking only, “Does this code look right?”&lt;/p&gt;

&lt;p&gt;You are also asking, “Did it start from the right facts?”&lt;/p&gt;

&lt;p&gt;Before your next risky edit, paste the prompt and inspect the first assumption.&lt;/p&gt;

&lt;p&gt;Tags: ai, programming, productivity, testing&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>testing</category>
    </item>
    <item>
      <title>The Decision Lives in a Recorded Call. The Spec Is a PDF. Your AI Can't Read Either.</title>
      <dc:creator>Erik Scott</dc:creator>
      <pubDate>Mon, 06 Jul 2026 14:00:22 +0000</pubDate>
      <link>https://dev.to/escott/the-decision-lives-in-a-recorded-call-the-spec-is-a-pdf-your-ai-cant-read-either-4le</link>
      <guid>https://dev.to/escott/the-decision-lives-in-a-recorded-call-the-spec-is-a-pdf-your-ai-cant-read-either-4le</guid>
      <description>&lt;p&gt;The most expensive decision on your project might be sitting in a call recording nobody will ever open.&lt;/p&gt;

&lt;p&gt;Here's the moment I keep seeing. A developer asks their AI assistant why the checkout flow caps retries at three. The assistant guesses. It sounds plausible. It's wrong.&lt;/p&gt;

&lt;p&gt;The real answer was settled six weeks ago, on a recorded call, at minute 34. The spec that backs it up is a PDF export from design. The proof of the original bug is a screenshot in a Slack thread.&lt;/p&gt;

&lt;p&gt;Three artifacts. Zero of them text. Zero of them visible to the assistant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your project's memory is not all text
&lt;/h2&gt;

&lt;p&gt;We like to pretend engineering context lives in code and markdown. It doesn't.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;why&lt;/em&gt; behind half your architecture lives in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recorded calls and design reviews&lt;/li&gt;
&lt;li&gt;screenshots of errors, dashboards, and mockups&lt;/li&gt;
&lt;li&gt;PDFs: specs, contracts, design exports&lt;/li&gt;
&lt;li&gt;the occasional whiteboard photo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI coding tools read text. So all of that context is invisible to them. When the answer isn't reachable, the assistant does the only thing it can: it reconstructs from scratch.&lt;/p&gt;

&lt;p&gt;Sometimes it reconstructs wrong. Confidently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built instead
&lt;/h2&gt;

&lt;p&gt;ContextStream indexes media as part of your project's memory. Images, video, audio, and PDFs.&lt;/p&gt;

&lt;p&gt;Concretely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Screenshots get OCR. The error message in that image becomes searchable text.&lt;/li&gt;
&lt;li&gt;Calls get transcripts. "What did we decide about retry limits?" finds minute 34, not the whole hour.&lt;/li&gt;
&lt;li&gt;PDFs are indexed. The spec's actual constraint surfaces next to the code it constrains.&lt;/li&gt;
&lt;li&gt;Clips can be extracted, so the answer is the ninety seconds that matter, not a forty-minute recording.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point isn't storage. Everything is already stored somewhere. The point is &lt;em&gt;retrieval&lt;/em&gt;: the answer surfaces in the session where the work is happening, when you or your agent asks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes day to day
&lt;/h2&gt;

&lt;p&gt;You hit a design question mid-implementation. Instead of pinging the designer and waiting, you ask. The answer comes back from the design review recording, pointed at the moment it was settled.&lt;/p&gt;

&lt;p&gt;Your agent is about to "fix" the retry cap. The transcript of the call where that cap was chosen surfaces first. The agent leaves it alone.&lt;/p&gt;

&lt;p&gt;A new teammate asks why the API returns 202 instead of 200. The answer exists. It was a screenshot of a client email. Now it's searchable.&lt;/p&gt;

&lt;p&gt;Fewer interruptions. Fewer confident wrong guesses. Fewer settled decisions relitigated because the original reasoning was trapped in a format nobody searches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why ContextStream matters here
&lt;/h2&gt;

&lt;p&gt;AI assistance is only as good as the context it can reach. Most teams have quietly accepted that a huge slice of their context, the recorded and screenshotted and PDF slice, is unreachable.&lt;/p&gt;

&lt;p&gt;That's not a tooling gap. It's context debt. And it compounds: every unreachable decision is one your team, and your agents, will pay to reconstruct again.&lt;/p&gt;

&lt;p&gt;ContextStream makes project memory durable and queryable, whatever format it arrived in. Text, image, audio, or video: one memory, one search.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on one file
&lt;/h2&gt;

&lt;p&gt;Pick the one recording or spec PDF people keep asking about. Make it searchable at contextstream.io and watch what stops getting re-asked.&lt;/p&gt;

&lt;h1&gt;
  
  
  ai #devtools #productivity #programming
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>devtools</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>What Your AI Agent Should Read Before It Writes a Single Line</title>
      <dc:creator>Erik Scott</dc:creator>
      <pubDate>Thu, 02 Jul 2026 01:58:09 +0000</pubDate>
      <link>https://dev.to/escott/what-your-ai-agent-should-read-before-it-writes-a-single-line-1agf</link>
      <guid>https://dev.to/escott/what-your-ai-agent-should-read-before-it-writes-a-single-line-1agf</guid>
      <description>&lt;p&gt;An AI agent rarely fails in the middle of a task.&lt;/p&gt;

&lt;p&gt;It fails in the first thirty seconds, before it writes anything, because it starts working without the decisions your team already made.&lt;/p&gt;

&lt;p&gt;Here is how that looks in practice.&lt;/p&gt;

&lt;p&gt;You ask your agent to add pagination to an API endpoint. It writes clean, plausible code. Offset-based, new helper function, tidy tests.&lt;/p&gt;

&lt;p&gt;Three problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your team decided months ago that offset pagination falls over on that table. You moved to cursors for a reason.&lt;/li&gt;
&lt;li&gt;A cursor helper already exists. The agent just wrote a second one.&lt;/li&gt;
&lt;li&gt;There is a hard-won lesson from a past bug: that endpoint's cache breaks when the response shape changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent knew none of it. Not because it is a bad agent. Because nobody told it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The context existed. It just wasn't reachable.
&lt;/h2&gt;

&lt;p&gt;The pagination decision lives in a chat thread. The helper is documented on a wiki page nobody opens. The cache lesson lives in one teammate's head.&lt;/p&gt;

&lt;p&gt;So every task starts with a guess.&lt;/p&gt;

&lt;p&gt;And you pay for the guess in review comments, in rework, in that sinking "wait, we already solved this" feeling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ground the task, not the prompt
&lt;/h2&gt;

&lt;p&gt;This is the exact problem ContextStream's per-task grounding bundles solve.&lt;/p&gt;

&lt;p&gt;Before your agent acts, it gets a small bundle of the most relevant prior decisions, docs, and lessons for &lt;em&gt;this specific task&lt;/em&gt;. Not the whole knowledge base stuffed into the window. The three things that matter.&lt;/p&gt;

&lt;p&gt;For the pagination task, the bundle surfaces:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;The decision&lt;/em&gt;: cursor pagination on large tables, with the rationale attached.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;The doc&lt;/em&gt;: the existing cursor helper and how to use it.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;The lesson&lt;/em&gt;: the cache breaks when the response shape changes. Learned once, carried forward.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now the agent's first move is informed instead of plausible. It extends the helper instead of duplicating it. It keeps the response shape stable. It writes code your reviewer can trust faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does grounding change outcomes? Measurably.
&lt;/h2&gt;

&lt;p&gt;In ContextStream's published evals, agents hit a 96% agent task success rate with project memory connected (23 of 24 tasks, versus 14 of 24 without it).&lt;/p&gt;

&lt;p&gt;Same agent. Same tasks. The difference was whether the work started grounded.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;The bottleneck in AI-assisted coding is shifting. Writing code is cheap now. Knowing what not to break is the expensive part.&lt;/p&gt;

&lt;p&gt;Grounding bundles move that knowledge to the front of every task, automatically, inside the tools you already use: Claude Code, Cursor, Codex, Cline, and Windsurf.&lt;/p&gt;

&lt;p&gt;Decide it once. Document it once. Fix it once. Then let every future task start from there instead of from zero.&lt;/p&gt;

&lt;p&gt;Connect a project and watch what your agent's next task starts with: try it at contextstream.io.&lt;/p&gt;

&lt;p&gt;Tags: #ai #devtools #programming #productivity&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devtools</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why Context Matters More Than Ever in AI-Assisted Development</title>
      <dc:creator>Erik Scott</dc:creator>
      <pubDate>Sun, 28 Jun 2026 20:53:30 +0000</pubDate>
      <link>https://dev.to/escott/why-context-matters-more-than-ever-in-ai-assisted-development-4keh</link>
      <guid>https://dev.to/escott/why-context-matters-more-than-ever-in-ai-assisted-development-4keh</guid>
      <description>&lt;p&gt;In the fast-paced world of software development, context is everything. Yet, most AI tools today start from scratch every session, forcing developers to re-explain their project, their decisions, and their pain points. That’s not just inefficient—it’s frustrating.&lt;/p&gt;

&lt;p&gt;With ContextStream, we’re rethinking how AI assistants work by giving them persistent memory of your project. Instead of starting cold each time, your assistant picks up where you left off, with a deep understanding of your project’s history, decisions, and lessons learned. This means faster, more grounded decisions, and fewer repeated questions.&lt;/p&gt;

&lt;p&gt;The result? You spend less time retraining your assistant and more time building. You avoid the same mistakes twice. And you finally have an assistant that &lt;em&gt;actually knows your project&lt;/em&gt;, not just your latest prompt.&lt;/p&gt;

&lt;p&gt;ContextStream isn’t just another AI tool. It’s a way to make your assistant a true teammate—one that learns, remembers, and helps you move forward with confidence.&lt;/p&gt;

&lt;h1&gt;
  
  
  devtools #ai #softwareengineering #productivity #contextstream
&lt;/h1&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Make Your Project Decisions Queryable for AI Coding Sessions</title>
      <dc:creator>Erik Scott</dc:creator>
      <pubDate>Sun, 28 Jun 2026 20:52:59 +0000</pubDate>
      <link>https://dev.to/escott/make-your-project-decisions-queryable-for-ai-coding-sessions-2i7l</link>
      <guid>https://dev.to/escott/make-your-project-decisions-queryable-for-ai-coding-sessions-2i7l</guid>
      <description>&lt;p&gt;Tags: #ai #devtools #productivity #programming&lt;/p&gt;

&lt;h1&gt;
  
  
  Make Your Project Decisions Queryable for AI Coding Sessions
&lt;/h1&gt;

&lt;p&gt;Every project has a layer that never makes it into the repo.&lt;/p&gt;

&lt;p&gt;It is the reasoning behind the code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why you chose this approach over the obvious one&lt;/li&gt;
&lt;li&gt;the bug that taught you not to repeat a mistake&lt;/li&gt;
&lt;li&gt;which doc is current and which one is stale&lt;/li&gt;
&lt;li&gt;the thing the team already decided not to build&lt;/li&gt;
&lt;li&gt;the plan you are halfway through&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers carry most of that context in their heads. Some of it lands in notes. A lot of it gets buried in threads. And too much of it disappears between one AI coding session and the next.&lt;/p&gt;

&lt;p&gt;That gap is quietly expensive. It rarely shows up as a disaster. It shows up as small repeats: explaining the same constraint again, correcting the same suggestion again, reopening a decision you already made, or hunting for the note that would have saved you twenty minutes.&lt;/p&gt;

&lt;p&gt;Here is a practical habit that helps: treat your project decisions as queryable memory, not scattered breadcrumbs.&lt;/p&gt;

&lt;p&gt;Before you ask an assistant for help, capture the context that actually changes the answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The decision that shaped what you are working on&lt;/li&gt;
&lt;li&gt;The lesson from the last bug, review, or refactor&lt;/li&gt;
&lt;li&gt;The plan you are following right now&lt;/li&gt;
&lt;li&gt;The doc or note that defines the real constraint&lt;/li&gt;
&lt;li&gt;The correction you do not want to make twice&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The point is not to write more documentation. The point is continuity.&lt;/p&gt;

&lt;p&gt;When you come back tomorrow, or next month, you should not have to rebuild the whole story from memory. The context should be ready when the next question shows up.&lt;/p&gt;

&lt;p&gt;That is the problem we are building ContextStream to solve.&lt;/p&gt;

&lt;p&gt;ContextStream gives AI coding work persistent, cross-session memory. It remembers project decisions, docs, lessons, and plans, so your assistant can pick up where you left off instead of starting cold. It also learns from real activity over time, so lessons from past sessions can compound instead of resetting.&lt;/p&gt;

&lt;p&gt;The part that matters most is not storage. Developers already have plenty of places to store things. The harder problem is surfacing the right context at the right moment.&lt;/p&gt;

&lt;p&gt;With ContextStream, decisions, docs, lessons, and plans are queryable. That means the relevant context can show up while you are debugging, planning, reviewing, or deciding what to do next, instead of staying buried until after you needed it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why ContextStream matters
&lt;/h2&gt;

&lt;p&gt;Developers lose momentum when project memory is scattered. Teams redo work when old lessons are hard to find. And an AI assistant can only be as useful as the project context it can work from.&lt;/p&gt;

&lt;p&gt;ContextStream helps close that gap: less lost context, less repeated work, faster and more grounded decisions, and an assistant that actually remembers your project.&lt;/p&gt;

&lt;p&gt;That is the workflow we care about. Not louder tools. Not more tabs. Just real continuity from one session to the next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devtools</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Got Tired of Re-Explaining My Codebase to AI — So I Built a Memory Layer</title>
      <dc:creator>Erik Scott</dc:creator>
      <pubDate>Tue, 27 Jan 2026 22:33:04 +0000</pubDate>
      <link>https://dev.to/escott/i-got-tired-of-re-explaining-my-codebase-to-ai-so-i-built-a-memory-layer-4dhl</link>
      <guid>https://dev.to/escott/i-got-tired-of-re-explaining-my-codebase-to-ai-so-i-built-a-memory-layer-4dhl</guid>
      <description>&lt;p&gt;It's 9:47 AM. I'm reopening my IDE to continue yesterday's work on an auth system. I ask Claude to pick up where we left off.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What authentication approach are you using? JWT or sessions? Which OAuth provider? What's your database?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We literally discussed this yesterday. For an hour.&lt;/p&gt;

&lt;p&gt;This kept happening to me. Every. Single. Session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I'm the founder of ContextStream — I built this because I couldn't stand paying this tax anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem nobody budgets for: AI amnesia
&lt;/h2&gt;

&lt;p&gt;AI coding assistants are incredible inside a single chat. They can reason about architecture, write production code, catch bugs.&lt;/p&gt;

&lt;p&gt;But the moment you close the window? Total amnesia.&lt;/p&gt;

&lt;p&gt;After ~18 years of shipping products, I've learned to notice invisible productivity taxes. This one was huge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Re-explaining my stack&lt;/li&gt;
&lt;li&gt;Re-listing architectural decisions&lt;/li&gt;
&lt;li&gt;Re-attaching the same context files&lt;/li&gt;
&lt;li&gt;Re-arguing patterns we already settled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I started tracking it. I was spending &lt;strong&gt;10–15 minutes per session&lt;/strong&gt; just getting the assistant back up to speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the obvious "solutions" didn't solve it
&lt;/h2&gt;

&lt;p&gt;I tried all the usual workarounds:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chat history:&lt;/strong&gt; noisy, not portable across tools, and I still had to scroll and re-read.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built-in memory toggles:&lt;/strong&gt; tied to one product; I bounce between tools depending on the task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pasting context every time:&lt;/strong&gt; it works, but defeats the point of having an assistant.&lt;/p&gt;

&lt;p&gt;What I actually needed was a memory layer that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Captures decisions as I make them&lt;/li&gt;
&lt;li&gt;Retrieves the right context automatically&lt;/li&gt;
&lt;li&gt;Works across the AI tools I use&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I built: a memory layer behind my AI tools
&lt;/h2&gt;

&lt;p&gt;I spent the last year building ContextStream — a memory layer that sits behind my AI tools via MCP (Model Context Protocol). MCP is a protocol that lets AI clients call "tool servers" to fetch context.&lt;/p&gt;

&lt;p&gt;The core insight is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Storage is cheap. Retrieval is hard.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you dump everything into context, token costs explode and the model gets confused. The only thing that works is delivering the &lt;em&gt;right&lt;/em&gt; context at the &lt;em&gt;right&lt;/em&gt; time.&lt;/p&gt;

&lt;p&gt;So ContextStream captures three kinds of "project memory":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decisions&lt;/strong&gt; — "We're using JWT with refresh tokens"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; — indexed code/docs so the assistant can retrieve what matters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connections&lt;/strong&gt; — which decisions affect which modules&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A tiny "before → after"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"JWT or sessions? Which provider? Which database?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Last time we chose JWT with refresh tokens. OAuth provider is X. The auth code lives in …. Want me to continue with the refresh rotation + middleware?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the bar I wanted: start where we left off, not at square one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup (the happy path is one command)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @contextstream/mcp-server setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it — it configures MCP for the tool you're using.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed for me
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The obvious win:&lt;/strong&gt; no more re-explaining.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The surprising win:&lt;/strong&gt; consistency.&lt;/p&gt;

&lt;p&gt;Before, my assistant would suggest camelCase on Monday and snake_case on Wednesday. Now it remembers "this codebase uses camelCase" and stays consistent.&lt;/p&gt;

&lt;p&gt;And when bugs resurface (they always do), it can pull the previous fix back into view:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We saw this before — the issue was X, and we fixed it by Y."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  If you've felt this too…
&lt;/h2&gt;

&lt;p&gt;The free tier gives you enough operations to see if it clicks.&lt;/p&gt;

&lt;p&gt;If you try it, I'd love one piece of feedback:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the #1 thing you wish your AI assistant would remember about your project?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project: &lt;a href="https://contextstream.io?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=crosspost" rel="noopener noreferrer"&gt;contextstream.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MCP server repo: &lt;a href="https://github.com/contextstream/mcp-server" rel="noopener noreferrer"&gt;github.com/contextstream/mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>devtools</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
