<?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: Josh Adler</title>
    <description>The latest articles on DEV Community by Josh Adler (@joshadler).</description>
    <link>https://dev.to/joshadler</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3944731%2Fe44b0ae9-8382-4ac3-b365-98ac4b99c5ee.png</url>
      <title>DEV Community: Josh Adler</title>
      <link>https://dev.to/joshadler</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joshadler"/>
    <language>en</language>
    <item>
      <title>Everyone's Launching Wrappers. Nobody's Going Deep.</title>
      <dc:creator>Josh Adler</dc:creator>
      <pubDate>Thu, 04 Jun 2026 22:45:17 +0000</pubDate>
      <link>https://dev.to/joshadler/everyones-launching-wrappers-nobodys-going-deep-ifk</link>
      <guid>https://dev.to/joshadler/everyones-launching-wrappers-nobodys-going-deep-ifk</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuipj6b0wmg6q2y0ms1ah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuipj6b0wmg6q2y0ms1ah.png" alt="everyone's building a wrapper" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You know that feeling when you open someone's "AI-powered" product, view source, and realize the entire intelligence layer is a single API call with a system prompt? I get that feeling about four times a week now.&lt;/p&gt;

&lt;p&gt;I'm building memory for AI agents. Not the kind where you shove conversation logs into a vector database and run similarity search, which is what every tutorial teaches and every wrapper product ships. The kind where you actually measure whether retrieval works, find out it doesn't, and spend three months fixing it instead of launching.&lt;/p&gt;

&lt;p&gt;Here's what "going deep" looks like day to day, because I think people romanticize it and the reality is mostly spreadsheets and DoorDash at 2am.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boring part nobody shows you
&lt;/h2&gt;

&lt;p&gt;The first thing I did was run a benchmark against my own retrieval pipeline. Ground-truth questions, known correct answers. The results were bad. Not "needs tuning" bad. The system was confidently retrieving wrong memories and missing obvious temporal references, confusing things said last week with things said six months ago, mixing up which person said what in multi-party conversations.&lt;/p&gt;

&lt;p&gt;I categorized 357 failures by hand. Two weeks of reading each failed retrieval and classifying why. The finding: 92% of failures were retrieval failures, not reasoning failures. The data was in the database. The search couldn't find it.&lt;/p&gt;

&lt;p&gt;I confirmed with an oracle test. Bypassed retrieval, gave the model the full conversation as context. Accuracy jumped to 93.8%. The information was always there. The search layer was broken. The entire field was focused on improving the reasoning layer while the retrieval layer underneath was silently failing, and nobody had checked because the failures are invisible. The system returns results. They just happen to be the wrong results.&lt;/p&gt;

&lt;p&gt;So then I needed to understand how much the embedding model and reranker choice mattered. I built a test rig: 7 embedding models crossed with 8 rerankers, 56 combinations, each evaluated against 1,540 ground-truth questions. About 26,000 total evaluations.&lt;/p&gt;

&lt;p&gt;Nobody had published this comparison before. The reason is simple: it's tedious work with no shortcut. You configure, run, wait, record, repeat. For weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the data showed
&lt;/h2&gt;

&lt;p&gt;The spread across all 56 combinations was 3.2 percentage points (89.9% to 93.1%). Most products never test a single combination. They use whatever the tutorial picked.&lt;/p&gt;

&lt;p&gt;The finding that broke my brain: a $0.40 per million token model with 100 retrieved memories beat a $15 per million token model with 15 retrieved memories. The cheap model with better retrieval recovered 82% of errors. The expensive model with worse retrieval recovered 54%. Retrieval quality dominated model quality completely. Optimizing your search pipeline was worth more than a model upgrade costing 37 times as much.&lt;/p&gt;

&lt;p&gt;I also found a silent bug in my own code during this process. A script was loading MiniLM instead of the GTE ModernBERT reranker I'd configured. No error, no warning. Just quietly wrong. If I hadn't been running ground-truth benchmarks I never would have caught it. This exact type of misconfiguration is sitting in production systems that have never been tested against known correct answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "going deep" actually means in practice
&lt;/h2&gt;

&lt;p&gt;It means choosing SQLite over Pinecone and everyone thinking you're not serious. But the constraint forced a hybrid search pipeline (sparse FTS5 plus dense vector search, reciprocal rank fusion, cross-encoder reranking) that runs on a Raspberry Pi for $12/month. The whole system scores within 3 points of setups requiring $150 to $400/month in GPU infrastructure. One file, no cluster, no excuses. If retrieval breaks, the architecture broke, and you fix the actual problem instead of blaming infrastructure.&lt;/p&gt;

&lt;p&gt;It means reading neuroscience papers about how the hippocampus filters incoming memories and building a three-signal encoding gate (novelty, salience, prediction error) instead of just storing everything and hoping retrieval sorts it out. Your brain doesn't record everything, it runs a filter first, and that's not a limitation, it's the mechanism that makes retrieval work. Less noise going in means better results coming out. The benchmarks supported this approach.&lt;/p&gt;

&lt;p&gt;It means writing a research paper and getting it on arXiv instead of shipping the next feature. The paper (arXiv:2605.04897) has methodology, controlled benchmarks, and reproducible results. If the claims were going to hold up, the data had to be public.&lt;/p&gt;

&lt;p&gt;That's the foundation TrueMemory is built on. Research first, product second.&lt;/p&gt;

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

&lt;p&gt;Anthropic is shipping native memory for Claude. OpenAI is building memory into ChatGPT. Google's Gemini remembers conversations. Every platform is adding memory as a checkbox feature.&lt;/p&gt;

&lt;p&gt;When the platform ships a native version of your wrapper, you die. Not because their version is better but because it's already installed and free. Meeting summarizers learned this last year when Zoom, Meet, and Teams all shipped native summarization within months of each other. The platform doesn't need a good version, just a good enough version with better distribution than you'll ever have. The bar for survival is high.&lt;/p&gt;

&lt;p&gt;If you're building an AI product, here's my suggestion: run a benchmark. A real one, with ground-truth answers. Measure whether your retrieval actually returns correct results or just plausible-looking ones. You might not like what you find, but at least you'll know what you're shipping.&lt;/p&gt;

&lt;p&gt;Everyone's launching wrappers. The ones that survive will be the ones that went deep enough to own something real.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Josh Adler is a researcher at &lt;a href="https://truememory.net" rel="noopener noreferrer"&gt;TrueMemory&lt;/a&gt;, a &lt;a href="https://sauron.network" rel="noopener noreferrer"&gt;Sauron&lt;/a&gt; company. Research: &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;arXiv:2605.04897&lt;/a&gt;. More at &lt;a href="https://joshadler.com" rel="noopener noreferrer"&gt;joshadler.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>Your Brain Doesn't Have a Paste Button</title>
      <dc:creator>Josh Adler</dc:creator>
      <pubDate>Tue, 02 Jun 2026 08:08:32 +0000</pubDate>
      <link>https://dev.to/joshadler/your-brain-doesnt-have-a-paste-button-1djb</link>
      <guid>https://dev.to/joshadler/your-brain-doesnt-have-a-paste-button-1djb</guid>
      <description>&lt;p&gt;I maintained a file called &lt;code&gt;skippy-context-may.md&lt;/code&gt; for months. Four hundred lines of project state, architectural decisions, tool versions, things that broke, things I fixed. Every new AI session started the same way: open the file, select all, paste, then fill in whatever happened since my last edit. It was fifteen minutes of overhead every single day and I told myself it was just part of the workflow.&lt;/p&gt;

&lt;p&gt;Then I automated it away and realized how much time I'd been wasting. Six hours a month, minimum, on a ritual that felt productive but was really just me being my AI's secretary.&lt;/p&gt;

&lt;h2&gt;
  
  
  How automatic ingestion works in practice
&lt;/h2&gt;

&lt;p&gt;The system runs four hooks during normal Claude Code usage. One fires at session start, one on prompt submission, one on stop, one on compaction. The stop hook is the one that does the heavy lifting. After a session ends, it grabs the full conversation transcript and runs an extraction pipeline against it.&lt;/p&gt;

&lt;p&gt;The extraction pulls seven categories of information out of the raw text:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personal facts&lt;/strong&gt; (stable things about the user)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preferences&lt;/strong&gt; (choices you've expressed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decisions&lt;/strong&gt; (conclusions you reached during a session)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Corrections&lt;/strong&gt; (moments you changed a prior answer)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporal events&lt;/strong&gt; (dates, deadlines, things tied to specific days)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical context&lt;/strong&gt; (configs, architecture choices, tool versions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project state&lt;/strong&gt; (what's working, what's broken, what's next)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each category matters because it serves a different retrieval pattern later. When the system needs to know what tools you use, it pulls preferences and technical context. When you're about to make an architecture decision, it surfaces prior decisions. When you corrected yourself three weeks ago, the correction overrides the old answer instead of competing with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The encoding gate: what gets stored and what gets dropped
&lt;/h2&gt;

&lt;p&gt;Raw extraction produces too many candidates. Fifteen sessions a day across three projects means hundreds of potential memories, most of which are noise. "Fix the indentation on line 47" is not worth storing. "The indentation convention for this project is tabs" probably is.&lt;/p&gt;

&lt;p&gt;The encoding gate handles the filtering. Three signals score each candidate memory:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Novelty&lt;/strong&gt; - how different is this from what we already know?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salience&lt;/strong&gt; - how important is this information?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prediction error&lt;/strong&gt; - does this contradict something we already stored?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The scores combine into a threshold decision. Clear the gate, you get stored. Don't clear it, you get dropped. Not archived, dropped. Because storing everything makes retrieval worse, not better. Every stored memory competes with every other memory during search.&lt;/p&gt;

&lt;p&gt;The prediction error signal does something counterintuitive with contradictions. When a new memory contradicts an existing one, the prediction error spikes and actually lowers the storage threshold. Contradictions get stored more easily because they mean the user changed their mind. I said I preferred npm in March. By May I was using Bun and never explicitly said "I switched." The system caught the behavioral shift and encoded the new preference without me having to announce it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this looks like after a month
&lt;/h2&gt;

&lt;p&gt;By day three I had over two hundred extracted memories from about a dozen sessions. Zero saved manually. The &lt;code&gt;skippy-context-may.md&lt;/code&gt; file was already stale and I kept opening it out of habit before realizing the system already knew everything in there plus a hundred things I never wrote down.&lt;/p&gt;

&lt;p&gt;The real proof came around week three. I was debugging a Pi node that kept dropping its NAS connection every two hours. Couldn't figure it out. Before I'd even finished describing the problem, the system surfaced a memory from eleven days earlier: during an unrelated router configuration session, I'd mentioned I changed the DHCP lease time from 24 hours to 2 hours. One throwaway sentence. The system stored it as technical context, and eleven days later it turned out to be the root cause.&lt;/p&gt;

&lt;p&gt;By week four the system was flagging contradictions in my own decisions. I'd said I wanted SQLite for everything early on, then started quietly exploring Postgres for one specific use case. When I was making a related architecture decision, the system surfaced both positions and asked if I wanted to update the earlier one. A context file can't do that. It doesn't know the difference between you changing your mind and you forgetting what you decided.&lt;/p&gt;

&lt;p&gt;Cross-project connections are the other thing you can't replicate manually. A debugging insight from one project showed up as relevant context in a different project weeks later because the underlying pattern was the same. That only works because &lt;a href="https://truememory.net" rel="noopener noreferrer"&gt;TrueMemory&lt;/a&gt; stores memories without scoping them to a single project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why most products skip ingestion
&lt;/h2&gt;

&lt;p&gt;Honestly, it's because search is easier. Vector embeddings, reranking, RAG pipelines, these are well-understood problems with a dozen open-source implementations. You can get 86% on LoCoMo with off-the-shelf tools.&lt;/p&gt;

&lt;p&gt;Ingestion is a judgment problem. You're deciding what's worth keeping before you know what future query will need it. That's architecturally harder than matching queries to documents. It requires real-time evaluation of novelty, salience, and contradiction state, plus scale handling as the memory store grows.&lt;/p&gt;

&lt;p&gt;Most companies skip the hard part and build better search on top of whatever the user manually saves. It works, but it's not memory, it's a notebook with good search. The full architecture, including the encoding gate design and benchmark results, is in the &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;arXiv paper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Your brain doesn't have a paste button. It doesn't need one. And after a month of running a system that actually handles ingestion automatically, I can't go back to the old way.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Josh Adler is a researcher at &lt;a href="https://truememory.net" rel="noopener noreferrer"&gt;TrueMemory&lt;/a&gt;, a &lt;a href="https://sauron.network" rel="noopener noreferrer"&gt;Sauron&lt;/a&gt; company. Research: &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;arXiv:2605.04897&lt;/a&gt;. More at &lt;a href="https://joshadler.com" rel="noopener noreferrer"&gt;joshadler.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Best Technology Disappears</title>
      <dc:creator>Josh Adler</dc:creator>
      <pubDate>Sun, 31 May 2026 05:56:08 +0000</pubDate>
      <link>https://dev.to/joshadler/the-best-technology-disappears-2kjg</link>
      <guid>https://dev.to/joshadler/the-best-technology-disappears-2kjg</guid>
      <description>&lt;p&gt;Your keyboard app is the most important app on your phone and you have never once thought about it. You don't know what version it's on. You've never read its changelog. You couldn't name a single feature it shipped in the last year. It just works, and that's the whole point, and also that's the highest bar any piece of technology can clear.&lt;/p&gt;

&lt;p&gt;The technologies that actually changed how people live all share one trait: they disappeared. Not failed, not faded. They got so good at solving their problem that users stopped noticing them entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  The progression every technology follows
&lt;/h2&gt;

&lt;p&gt;Every category that truly won followed the same four-stage path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visible.&lt;/strong&gt; You notice it. You learn it. You fight with it. Early GPS was like this. Staring at the screen, second-guessing routes, squinting at maps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Useful.&lt;/strong&gt; You start relying on it but you're still aware. You trust the GPS but you glance at the route before driving.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Habitual.&lt;/strong&gt; You stop questioning it. You follow the blue line without thinking. You click the first Google result without scanning alternatives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invisible.&lt;/strong&gt; You stop experiencing the technology entirely. You experience the outcome. Not GPS but the turn. Not Google but the answer. Not autocorrect but a correct text message.&lt;/p&gt;

&lt;p&gt;That last step is where the value is. Google didn't become a $1.7 trillion company because it had a clean UI. It got there because the first result was usually right, which meant you never thought about search. You typed, got your answer, moved on. The entire valuation traces back to the experience of not thinking about Google while using Google.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why most products never get there
&lt;/h2&gt;

&lt;p&gt;Most products don't even try to disappear. They actively resist it. Every notification is the system saying "remember me." Every loading screen, onboarding tooltip, rating prompt, and "what's new" modal is the product waving its hand at you when the ideal outcome would be you forgetting it exists.&lt;/p&gt;

&lt;p&gt;Every one of those moments is a design failure. Not a marketing opportunity. A failure. Because in that instant the user became conscious they're using a tool instead of just doing the thing they wanted to do.&lt;/p&gt;

&lt;p&gt;Disappearing requires solving every edge case. Not most, all. One bad autocorrect pulls you out. One wrong reroute makes you aware of satellites. One buffering spinner breaks the spell. The tech has to be right every time or close enough that the misses feel like flukes. That is an absurdly high bar, which is why the products that clear it tend to be worth hundreds of billions of dollars.&lt;/p&gt;

&lt;h2&gt;
  
  
  As a builder, this changes how you think
&lt;/h2&gt;

&lt;p&gt;The key insight for anyone shipping product: invisibility is not polish. It's not a thing you add after engineering is done. It's the design philosophy from the first commit.&lt;/p&gt;

&lt;p&gt;You have to architect for disappearance. You have to solve the problem so completely that there's nothing left for the user to think about. TikTok's recommendation engine is one of the most sophisticated ML systems in production anywhere, transformer models, reinforcement learning, multi-armed bandits, and they never show you any of it. Because showing it would break the experience. The magic requires the magician to vanish.&lt;/p&gt;

&lt;p&gt;If you're building developer tools, this applies directly. The best CLI is the one nobody notices running. The best CI pipeline is the one developers forget exists because it just catches things. The best monitoring is the alert you never see because the system healed itself. The best linter is the one that fixed the problem before you knew there was a problem.&lt;/p&gt;

&lt;p&gt;Think about &lt;code&gt;git&lt;/code&gt; for a second. You probably use it fifty times a day and never think about distributed hash graphs or Merkle trees or content-addressable storage. It disappeared. The technology is invisible and all you experience is: my code is saved, my changes are tracked, I can go back if something breaks. That's the invisible stack doing its job.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI hasn't disappeared yet, and that's the gap
&lt;/h2&gt;

&lt;p&gt;Every AI product right now is stuck firmly in the "visible" stage. Chatbots. Prompts. Copy-paste workflows. Context windows you manage manually. System prompts you write and rewrite. Every interaction announces: you are using AI.&lt;/p&gt;

&lt;p&gt;Some are approaching useful. A few are getting habitual. None have vanished. And the reason is telling. Most AI tools are built around the chat interface, which is the technology making itself visible by design. The prompt box is a loading screen. The conversation thread is a changelog you didn't ask for. Every "how can I help you" is the system reminding you it exists.&lt;/p&gt;

&lt;p&gt;This is what drives the work at &lt;a href="https://truememory.net" rel="noopener noreferrer"&gt;TrueMemory&lt;/a&gt;. The question isn't "how do we build a better memory tool" but "how do we build a memory system the user forgets about." The architecture follows biological memory patterns: an encoding gate that filters before storage, automatic novelty and salience scoring, natural decay that keeps things manageable. The full system is detailed in the &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;research paper&lt;/a&gt; but honestly the thesis is one sentence: if you notice the memory system, it failed.&lt;/p&gt;

&lt;p&gt;Every feature gets one test. Does this make the system more visible or less? If the user has to remember to save something, the design isn't done. If they have to open an app to store context that should have been captured automatically, the design isn't done. Every manual step is the technology announcing itself.&lt;/p&gt;

&lt;p&gt;The trajectory is the same one GPS and search and autocorrect followed. The first personal AI system that crosses from habitual to invisible wins everything.&lt;/p&gt;

&lt;p&gt;That's the only step that matters.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Josh Adler is a researcher at &lt;a href="https://truememory.net" rel="noopener noreferrer"&gt;TrueMemory&lt;/a&gt;, a &lt;a href="https://sauron.network" rel="noopener noreferrer"&gt;Sauron&lt;/a&gt; company. Research: &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;arXiv:2605.04897&lt;/a&gt;. More at &lt;a href="https://joshadler.com" rel="noopener noreferrer"&gt;joshadler.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>design</category>
      <category>discuss</category>
      <category>product</category>
      <category>ux</category>
    </item>
    <item>
      <title>The Real Moat Isn't Software</title>
      <dc:creator>Josh Adler</dc:creator>
      <pubDate>Sat, 30 May 2026 02:00:39 +0000</pubDate>
      <link>https://dev.to/joshadler/the-real-moat-isnt-software-5eoo</link>
      <guid>https://dev.to/joshadler/the-real-moat-isnt-software-5eoo</guid>
      <description>&lt;p&gt;Last month I ripped five 64MP cameras out of a wall-mounted sensor network and replaced them with 12MP ones. Downgrade on paper. Best decision I made all year.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Nobody Is Solving
&lt;/h2&gt;

&lt;p&gt;Your AI knows what you type. That's it. Every piece of context, every preference, every behavioral pattern your AI has about you came through a text box. You manually told it, during a conversation you chose to have, about a topic you remembered to bring up.&lt;/p&gt;

&lt;p&gt;Meanwhile the stuff that actually defines your behavior is invisible to you. You don't notice that you pace when you're anxious. You don't track how long you actually sit at your desk versus how long you think you do. You tell your AI you work out four times a week when you go twice.&lt;/p&gt;

&lt;p&gt;The models are smart enough. The input layer is broken.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built: Paradox
&lt;/h2&gt;

&lt;p&gt;Five nodes. Each one is a Raspberry Pi Zero 2W ($15), an ArduCam IMX708 12MP camera with 120-degree FOV, and a WM8960 audio HAT for microphone capture. About $100 per node, $500 total.&lt;/p&gt;

&lt;p&gt;Each node runs a custom Python daemon that handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Motion detection&lt;/strong&gt; on a low-res 320x240 stream&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio detection&lt;/strong&gt; via the WM8960&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Triggered recording&lt;/strong&gt; at 1280x720 @ 15fps when motion or audio fires&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MJPEG and H.264 streaming&lt;/strong&gt; to a NAS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inference runs on an RTX 5090 on my local network. The whole thing fits on a desk.. well kinda, minus the cameras on the walls.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Camera Saga
&lt;/h3&gt;

&lt;p&gt;I started with OwlSight 64MP sensors using the &lt;code&gt;ov64a40&lt;/code&gt; driver. On paper, incredible. In practice, a nightmare.&lt;/p&gt;

&lt;p&gt;The Pi Zero 2W would thermal throttle within twenty minutes. I'm talking 80C+ temps on a board that draws 4W under camera load. The dtoverlay configuration needed a specific &lt;code&gt;link-frequency&lt;/code&gt; parameter (&lt;code&gt;link-frequency=360000000&lt;/code&gt;) that I spent entire nights debugging. One node would initialize fine, an identical SD card image on the next node would fail. The answer was always something dumb: a loose ribbon cable, a kernel version mismatch, a PSU that couldn't sustain the current draw.&lt;/p&gt;

&lt;p&gt;I eventually switched everything to the IMX708 with a simple &lt;code&gt;dtoverlay=imx708&lt;/code&gt; config. Less flashy specs, dramatically more stable. The boring choice was the right choice.&lt;/p&gt;

&lt;p&gt;If you're building hardware: optimize for "does it actually work at 3am when nobody's watching," not for the spec sheet.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the Data Showed
&lt;/h3&gt;

&lt;p&gt;Within the first week, the system captured patterns I never would have typed into a chat window. Movement patterns through my apartment, actual sleep schedule versus what I'd report, real desk time versus perceived desk time. One hour of physical observation generates more behavioral data than a year of chat transcripts.&lt;/p&gt;

&lt;p&gt;That's not an exaggeration. That's the gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three-Layer Stack
&lt;/h2&gt;

&lt;p&gt;Here's the framework that I keep coming back to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 1: Observation.&lt;/strong&gt; Getting data from the physical world into a format AI can process. Cameras, microphones, sensors, wearables. This is what Paradox does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 2: Memory.&lt;/strong&gt; Taking raw observational data plus conversational data and encoding it intelligently. Deciding what matters, letting stale information decay, surfacing the right context at the right time. This is what I built &lt;a href="https://truememory.net" rel="noopener noreferrer"&gt;TrueMemory&lt;/a&gt; to solve. The architecture is in my &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;arXiv paper&lt;/a&gt;, and it's based on how biological memory actually works: encoding gates, salience scoring, temporal decay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 3: Reasoning.&lt;/strong&gt; The LLM. Claude, GPT, whatever comes next.&lt;/p&gt;

&lt;p&gt;Right now, billions of dollars are flowing into Layer 3. Anthropic, OpenAI, Google, all building better reasoning engines. And they're getting incredible. But Layer 3 is reasoning on top of almost nothing because Layers 1 and 2 barely exist.&lt;/p&gt;

&lt;p&gt;It's like building the most powerful engine in the world and putting it in a car with no windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Developers Should Take Away
&lt;/h2&gt;

&lt;p&gt;Software wrappers get replicated in a weekend. A better RAG pipeline, a smarter reranking algorithm, a novel encoding gate, those are all real innovations but they're also all just code. Somebody reads your paper, understands the approach, ships their own version.&lt;/p&gt;

&lt;p&gt;Hardware can't be replicated like that. The physical deployment, sensor calibration, months of debugging driver conflicts and thermal issues and network topology, that's a different kind of moat entirely.&lt;/p&gt;

&lt;p&gt;If you're looking for an interesting project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with a single Pi Zero 2W and an IMX708.&lt;/strong&gt; Total cost under $50. Get motion detection working with picamera2 and a basic frame-differencing algorithm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ship the data somewhere useful.&lt;/strong&gt; A NAS, a cloud bucket, even a local SSD. The storage pipeline matters more than the capture quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build the memory layer.&lt;/strong&gt; Don't just store raw footage. Extract behavioral patterns, encode them, make them searchable. This is the hard part and the interesting part.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The observation layer is the missing piece in AI. Everyone is building smarter reasoning on top of the same garbage input. Nobody is fixing the input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;p&gt;The Pi Zero 2W draws about 1.5W idle but spikes to nearly 4W under camera load. Battery operation is not Realistic. These need to be plugged in.&lt;/p&gt;

&lt;p&gt;Five cameras at 15fps generates a lot of data. Even with motion-triggered recording, my NAS fills up faster than I'd like. I spent a week building a cleanup pipeline just to keep storage from overflowing.&lt;/p&gt;

&lt;p&gt;And there's the social cost. My girlfriend didn't talk to me for two days after I installed the cameras. We worked it out, there are zones now, rooms where the cameras don't run. But social acceptability is a constraint as hard as any engineering limitation. You can't debug your way out of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Point
&lt;/h2&gt;

&lt;p&gt;Nobody is going to win the AI race by building a better chat interface. The chat interface is a temporary artifact of the fact that we haven't figured out how to get AI into the room with you.&lt;/p&gt;

&lt;p&gt;I don't have this figured out. I have five cameras generating data I'm still learning to process, a NAS that fills up too fast, and a lot of 2am debugging sessions behind me. But I know the moat isn't who builds the cleverest wrapper. It's who gets AI into the physical world first.&lt;/p&gt;

&lt;p&gt;That's a hardware problem. And it's a lot harder than fine-tuning a prompt template.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Josh Adler is a researcher at &lt;a href="https://truememory.net" rel="noopener noreferrer"&gt;TrueMemory&lt;/a&gt;, a &lt;a href="https://sauron.network" rel="noopener noreferrer"&gt;Sauron&lt;/a&gt; company. Research: &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;arXiv:2605.04897&lt;/a&gt;. More at &lt;a href="https://joshadler.com" rel="noopener noreferrer"&gt;joshadler.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>machinelearning</category>
      <category>computervision</category>
    </item>
    <item>
      <title>Everyone's Building Jarvis. Nobody's Even Close.</title>
      <dc:creator>Josh Adler</dc:creator>
      <pubDate>Tue, 26 May 2026 02:07:11 +0000</pubDate>
      <link>https://dev.to/joshadler/everyones-building-jarvis-nobodys-even-close-4jo9</link>
      <guid>https://dev.to/joshadler/everyones-building-jarvis-nobodys-even-close-4jo9</guid>
      <description>&lt;p&gt;A Swiss Army knife is a terrible knife.&lt;/p&gt;

&lt;p&gt;It's a terrible screwdriver, a terrible bottle opener, and a terrible saw. The only thing a Swiss Army knife is genuinely good at is being small enough to carry around, and the reality of "small enough to carry" is not a strong engineering thesis.&lt;/p&gt;

&lt;p&gt;But that's exactly what everyone in AI is building right now.. the everything assistant. The one that reads your email, manages your calendar, writes your code, books your flights, and files your taxes. The pitch sounds incredible but the product is a mediocre version of six different tools duct-taped together.&lt;/p&gt;

&lt;p&gt;I know because I built one.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Built the Swiss Army Knife
&lt;/h2&gt;

&lt;p&gt;I spent about three months on a product called Skippy. It leveraged OCR screen capture, email ingestion, calendar sync, and pattern recognition to become an AI assistant that understood your whole digital life. It attracted a scary amount of interest from investors and Reddit before I'd even launched, people were just asking for beta access non-stop.&lt;/p&gt;

&lt;p&gt;And I shelved it. Not because it failed, but because the more I used it the more I realized that a tool trying to do everything just ends up doing nothing well enough to actually rely on. I was playing with automations, making reservations, ordering food on DoorDash, and every single integration felt like a worse version of the thing it was replacing. You sacrifice everything for the benefit of having everything, and the benefit isn't actually that great.&lt;/p&gt;

&lt;p&gt;If you don't believe me, go look at Killed by Google sometime. Google Inbox. Google Allo. Google Hangouts. Google Wave. Google Stadia. Products backed by billions of dollars and thousands of engineers. Dead. If Google with functionally infinite resources can't sustain multi-feature products, what makes a solo dev stitching 15 libraries together in Bali think they're going to pull it off?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc67onzb6oahp6o9u0x11.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc67onzb6oahp6o9u0x11.png" alt="Killed by Google" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tools that actually win do one thing exceptionally well, so well you stop noticing they exist. That's the product thesis nobody in the personal AI space seems to accept, and honestly I think it's because the Jarvis fantasy is just too seductive to let go of.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local Models Are Not the Answer
&lt;/h2&gt;

&lt;p&gt;And while we're on the topic of things people don't want to hear, quick reality check for the r/LocalLLaMA crowd: your MacBook is not a datacenter.&lt;/p&gt;

&lt;p&gt;Open-source models are genuinely impressive for what they are, I'm not going to pretend otherwise. But the gap between a 70B open model and frontier production models from Anthropic or OpenAI is not a crack, it's a chasm. There's a reason the GPU shortage exists and there's a reason inference at scale costs what it costs.&lt;/p&gt;

&lt;p&gt;I actually went through a phase where I thought there had to be models you could run locally that would be comparable. So I built a home lab, RTX 5090, RTX 6000 PRO, 256GB DDR5, 128TB NAS, 42U rack, the whole setup. I use local models for experimentation and fine-tuning constantly but what I don't do is pretend they're competitive with frontier intelligence at tasks where output quality actually matters. That's not pessimism, that's just what the benchmarks say. If it were actually possible to match frontier quality on consumer hardware, companies like Anthropic wouldn't exist and NVIDIA wouldn't have the market cap it does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vibe Coders vs. Orchestrators
&lt;/h2&gt;

&lt;p&gt;This one's going to piss some people off, but it needs saying.&lt;/p&gt;

&lt;p&gt;Most developers using AI to write code are getting worse at their jobs, not better. And that's coming from someone who uses AI to write code every single day.&lt;/p&gt;

&lt;p&gt;What good AI-assisted development looks like is basically pair programming, which has been around since the beginning of time. You direct, you review, you push back when the model suggests something dumb. You understand every line that ships and the AI just accelerates your judgment rather than replacing it.&lt;/p&gt;

&lt;p&gt;What's actually happening is people type "build me a todo app with auth" into Cursor, tab-accept whatever comes out, run &lt;code&gt;npm run dev&lt;/code&gt;, take a screenshot, and post it to Reddit as something they "built."&lt;/p&gt;

&lt;p&gt;That's not engineering. That's pulling on a slot machine lever and hoping for 7's.&lt;/p&gt;

&lt;p&gt;These vibe coders, use the term loosely, can't debug their own code because it was never their code. They don't understand the architecture, they can't explain the state management pattern, and when production breaks at 2 AM they're completely lost because they vibed with the output and never actually directed it. Go on Reddit for fifteen minutes and you'll see people pushing AI slop for days, they didn't even change the default Claude color scheme, you click buttons and they don't work, and they can't fix it because they don't even understand the causality of the bug.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI is meant to speed up your pace of development. Not replace the need to understand what you built.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The orchestrators are the ones who will still have jobs in five years. They use AI more aggressively than the vibe coders actually, but they understand every line. They refactor. They question the model's choices. They treat AI as a power tool, not a replacement for skill. Prompt engineering is a skill of its own, and leveraging other skills to prompt engineer more effectively is a skill of its own too. People underestimate this hard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Everything Breaks Without Memory
&lt;/h2&gt;

&lt;p&gt;And here's the thing that ties all of this together, the part that nobody's really talking about.&lt;/p&gt;

&lt;p&gt;There's a book series called Expeditionary Forces where an alien elder AI named Skippy can literally manipulate wormholes. Omniscient-level intelligence. But it has a fatal design flaw: it only answers exactly what you ask.&lt;/p&gt;

&lt;p&gt;Ask "is there danger ahead?" and Skippy says no. Because you didn't ask about danger to the left, or danger arriving in thirty seconds. The answer was technically correct and also catastrophically incomplete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmoc6ywyc4l97jzvm6j0u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmoc6ywyc4l97jzvm6j0u.png" alt="Expeditionary Forces, book cover" width="666" height="962"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sound familiar?&lt;/p&gt;

&lt;p&gt;Ask Claude a question and you'll get a brilliant answer, scoped precisely to what you asked. But it won't mention the related problem from last week, it won't connect the dots to the bug you introduced three months ago, it won't anticipate what you actually need versus what you literally typed. And that's not because the model is bad at reasoning, it's because it has no memory. No continuity. No accumulated understanding of you or your work. Every session starts completely from zero. Real reasoning isn't just answering your question, it's answering the pieces surrounding it too, and AI can't do that without knowing what you've been working on, what's gone wrong before, what you actually care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  TrueMemory
&lt;/h2&gt;

&lt;p&gt;That's what I built &lt;a href="https://truememory.net" rel="noopener noreferrer"&gt;TrueMemory&lt;/a&gt; to fix, by enabling persistent memory that survives across sessions. It has an encoding gate inspired by how biological memory works by that evaluating the novelty, salience, and prediction error before deciding what to store. It's not a vector dump or a conversation log, it's a system that watches your workflow and decides what matters the same way a brain does.&lt;/p&gt;

&lt;p&gt;The architecture and benchmarks are in my &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;arXiv paper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The bottleneck in AI right now isn't intelligence. It's that your model forgets you exist every time you close the tab. Everyone's building Jarvis and nobody's even close, because they keep building the mouth and the hands and nobody's building the brain.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Josh Adler builds persistent memory systems for AI. Research: &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;arXiv:2605.04897&lt;/a&gt;. More at &lt;a href="https://joshadler.com" rel="noopener noreferrer"&gt;joshadler.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>machinelearning</category>
      <category>programming</category>
    </item>
    <item>
      <title>There Are Cameras in Every Room of My House. I Put Them There.</title>
      <dc:creator>Josh Adler</dc:creator>
      <pubDate>Sat, 23 May 2026 01:29:45 +0000</pubDate>
      <link>https://dev.to/joshadler/there-are-cameras-in-every-room-of-my-house-i-put-them-there-4p8i</link>
      <guid>https://dev.to/joshadler/there-are-cameras-in-every-room-of-my-house-i-put-them-there-4p8i</guid>
      <description>&lt;p&gt;My girlfriend asked why there's a red light blinking in the bedroom at 3 AM. I told her it's for the AI. She didn't talk to me for two days.&lt;/p&gt;

&lt;p&gt;I know how that sounds. But I'm trying to solve a problem that nobody else seems to want to touch: giving AI access to the physical world.&lt;/p&gt;

&lt;p&gt;Every AI product right now knows you through text or voice. What you type into a prompt. What you paste into a context window. Maybe your calendar, your emails, your screen. But your actual life? The one that happens in physical space? Your AI knows nothing about it.&lt;/p&gt;

&lt;p&gt;Last year I built a product that used OCR to grab my screen, pulled in emails, tried to understand patterns. Investors loved it. Reddit loved it. And it was still fundamentally blind. It could see my screen but it couldn't see me. It knew what I typed but not what I did.&lt;/p&gt;

&lt;p&gt;That gap bothered me for months. Then I did something about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hardware
&lt;/h2&gt;

&lt;p&gt;I built a network of cameras and microphones in my house and wired them into a pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5x Raspberry Pi Zero 2W ($15 each)&lt;/li&gt;
&lt;li&gt;5x ArduCam IMX708 12MP 120° wide-angle cameras&lt;/li&gt;
&lt;li&gt;5x WM8960 audio HATs for ambient sound capture&lt;/li&gt;
&lt;li&gt;1x Ugreen NAS for storage&lt;/li&gt;
&lt;li&gt;Custom Python daemon: motion detection, triggered recording, sleep when idle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total hardware cost: under $500. I spent more on the camera modules I threw away than the ones that worked.&lt;/p&gt;

&lt;p&gt;I spent weeks debugging device tree overlays. Swapped camera modules three times before finding ones that actually performed. Burned through two Pi Zeros that couldn't handle the thermal load. This wasn't a weekend project someone vibed together. This was real infrastructure.&lt;/p&gt;

&lt;p&gt;The cameras have been recording for months. Writing to SD cards. Capturing fragments of my daily life. Motion clips. Audio snippets. And I won't be analyzing it manually. Claude will.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why physical-world data matters more than prompts
&lt;/h2&gt;

&lt;p&gt;Nobody tells their AI "I've been pacing around my office for 20 minutes." Nobody types "I skipped lunch again today." Nobody prompts "I've been staring at the same file for an hour without making a single edit."&lt;/p&gt;

&lt;p&gt;But a camera sees all of that. And that context is worth more than a thousand carefully worded prompts.&lt;/p&gt;

&lt;p&gt;Think about the people who actually know you. Not your boss. Your boss knows nothing about you other than your output. The people who really know you. They know your tells. They know you fidget when you're nervous, that you pace the room when you're stuck. That stuff isn't in any context window. But it's the difference between software that assists you and something that actually understands you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack nobody's building
&lt;/h2&gt;

&lt;p&gt;The whole industry is trying to make AI feel more human by tweaking the output. "Don't say awesome." "Match the user's tone." But the problem isn't the output. It's the input. They're training on polished, sanitized datasets and then wondering why it still feels like AI.&lt;/p&gt;

&lt;p&gt;Making AI more human isn't about adjusting personality settings or temperature. It goes deeper than tone. Who you are. What you value. How you think. Everyone has different values and a generalized AI is never going to capture that.&lt;/p&gt;

&lt;p&gt;Here's what I think the real stack looks like for AI that actually knows you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Observation layer&lt;/strong&gt; - cameras, mics, sensors, the physical world&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory layer&lt;/strong&gt; — persistent, cross-session, not just a context window&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning layer&lt;/strong&gt; — the model, which is already good enough&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Everyone is pouring billions into layer 3. Almost nobody is building layers 1 and 2. The models are smart enough. That's not the bottleneck anymore. The bottleneck is that your AI has never seen you. It's never been in the room. It's a hyper-intelligent entity trapped behind a text box.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://truememory.net" rel="noopener noreferrer"&gt;TrueMemory&lt;/a&gt; to solve layer 2 — persistent memory that follows you across AI sessions. My research on cognitive memory architectures is &lt;a href="https://arxiv.org/abs/2605.04897" rel="noopener noreferrer"&gt;published on arXiv&lt;/a&gt;. Now I'm working on layer 1.&lt;/p&gt;

&lt;p&gt;I'm not asking for permission. I'm just showing you what's coming.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Josh Adler is a researcher and builder. More at &lt;a href="https://joshadler.com" rel="noopener noreferrer"&gt;joshadler.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>raspberrypi</category>
      <category>machinelearning</category>
      <category>python</category>
    </item>
  </channel>
</rss>
