<?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: Sachchit</title>
    <description>The latest articles on DEV Community by Sachchit (@sachchit_8b1872f00e860791).</description>
    <link>https://dev.to/sachchit_8b1872f00e860791</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%2F3040937%2F2fbd905c-7236-4c4a-9df5-0e9fd36841cc.jpg</url>
      <title>DEV Community: Sachchit</title>
      <link>https://dev.to/sachchit_8b1872f00e860791</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sachchit_8b1872f00e860791"/>
    <language>en</language>
    <item>
      <title>TouchGrass — AI That Gets You Off Your Screen</title>
      <dc:creator>Sachchit</dc:creator>
      <pubDate>Mon, 12 Oct 2026 06:25:37 +0000</pubDate>
      <link>https://dev.to/sachchit_8b1872f00e860791/touchgrass-ai-that-gets-you-off-your-screen-2gd6</link>
      <guid>https://dev.to/sachchit_8b1872f00e860791/touchgrass-ai-that-gets-you-off-your-screen-2gd6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built with Gemma by Google · Powered by Hugging Face · Deployed on Render · Open source on GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if AI didn't try to keep you online, but helped you step away?&lt;/p&gt;

&lt;p&gt;Introducing &lt;strong&gt;TouchGrass&lt;/strong&gt; — a lightweight, AI-powered micro-mission generator designed to turn spare time into real-world action.&lt;/p&gt;

&lt;p&gt;Instead of another productivity dashboard, endless feed, or chatbot conversation, TouchGrass gives you one simple thing to do offline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it live:&lt;/strong&gt; &lt;a href="https://t0uchgrass.onrender.com/" rel="noopener noreferrer"&gt;https://t0uchgrass.onrender.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/SachchitNesarikar/hacktober-26" rel="noopener noreferrer"&gt;https://github.com/SachchitNesarikar/hacktober-26&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;We use technology to learn, build, work, and organize our lives. But sometimes, we get stuck consuming more content instead of acting on what matters.&lt;/p&gt;

&lt;p&gt;I wanted to experiment with a different kind of AI product: one that helps you spend &lt;em&gt;less&lt;/em&gt; time interacting with the product itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet TouchGrass
&lt;/h2&gt;

&lt;p&gt;Choose one of three focuses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Move:&lt;/strong&gt; Take a walk, stretch gently, or change your surroundings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn:&lt;/strong&gt; Solve a problem on paper, read something meaningful, or explain a concept from memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore:&lt;/strong&gt; Discover a new route, notice details around you, or make something by hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choose whether you have 5, 15, or 30 minutes, optionally add a personal goal, and generate a micro-mission tailored to your situation.&lt;/p&gt;

&lt;p&gt;Complete it, record a small reflection, and build a history of your wins — without needing to create an account.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technology behind it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gemma + Hugging Face&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
TouchGrass uses Google's Gemma 3 4B Instruct through Hugging Face's inference API to generate personalized, structured missions. The model receives the selected focus, available time, and optional personal goal, then returns a concise mission.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Render&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The application is deployed as a Node.js web service on Render, serving the frontend and handling API requests. Model credentials stay in server-side environment variables rather than being exposed in browser code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The project is open source, with the implementation available for others to inspect, learn from, and extend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resilient by design&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If inference is unavailable or the model returns an unusable response, TouchGrass can fall back to a curated library of missions. The core experience doesn't have to disappear just because an external AI service fails.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it different?
&lt;/h2&gt;

&lt;p&gt;Most AI products encourage you to ask another question, generate another response, or stay for another session.&lt;/p&gt;

&lt;p&gt;TouchGrass explores the opposite approach:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generate one useful idea. Take it into the real world. Close the tab.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's a small experiment in making AI useful beyond the screen, with lightweight personalization and a deliberately simple interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;I'd love to explore knowledge-graph-based personalization, where interests, learning goals, and completed missions connect to produce more relevant suggestions over time — without requiring a complicated user profile.&lt;/p&gt;

&lt;p&gt;Other possibilities include better mission-quality evaluation, more personalized recommendations, and measuring whether people actually complete the activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it. Build on it. Touch grass.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://t0uchgrass.onrender.com/" rel="noopener noreferrer"&gt;https://t0uchgrass.onrender.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/SachchitNesarikar/hacktober-26" rel="noopener noreferrer"&gt;https://github.com/SachchitNesarikar/hacktober-26&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built as an open-AI experiment with Gemma, Hugging Face, Render, and GitHub.&lt;/p&gt;

&lt;p&gt;The goal isn't to keep you here longer.&lt;/p&gt;

&lt;p&gt;It's to help you find something worth doing out there.&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Built a Memory for My Friend</title>
      <dc:creator>Sachchit</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:56:14 +0000</pubDate>
      <link>https://dev.to/sachchit_8b1872f00e860791/i-built-a-memory-for-my-friend-aj0</link>
      <guid>https://dev.to/sachchit_8b1872f00e860791/i-built-a-memory-for-my-friend-aj0</guid>
      <description>&lt;p&gt;I was excited for the &lt;strong&gt;HacktoberFest Weekend Challenge&lt;/strong&gt;, but there was one problem: &lt;em&gt;I didn't have a friend to build for.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;So I messaged my GPT for some good projects. I picked one, developed the idea with GPT, and then passed it over to Claude to actually build. A few prompts later, broke me hit the free-tier rate limit.&lt;/p&gt;

&lt;p&gt;And suddenly, &lt;strong&gt;my "friend" couldn't continue.&lt;/strong&gt; If I switched to another AI, I had to explain everything again: what we were building, why we made certain decisions, what we'd already tried, what had failed, and what I had explicitly asked it not to change. And when Claude became available again, I'd have to bring all of that context back.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I didn't need another AI.&lt;br&gt;
I needed my AI friend to remember.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  So I built Baton.
&lt;/h2&gt;

&lt;h4&gt;
  
  
  What I lost when the chat ended
&lt;/h4&gt;

&lt;p&gt;I wasn't really losing a conversation. I was losing the project's &lt;em&gt;state&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decisions, and why&lt;/strong&gt; — why we chose one approach over another&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dead ends&lt;/strong&gt; — approaches we'd already tried and abandoned&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rules&lt;/strong&gt; — constraints and conventions that shouldn't be changed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The half-finished task&lt;/strong&gt; — and the bug I'd deliberately postponed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A new assistant doesn't know any of that.Pasting the entire transcript is slow and noisy. The new AI can cheerfully retry the failed idea, or "improve" the one thing I explicitly said to leave alone. Existing tools mostly move the &lt;em&gt;transcript&lt;/em&gt; between assistants.&lt;/p&gt;

&lt;p&gt;I wanted to move the &lt;em&gt;state&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conversation
      ↓
local open-weight model
      ↓
structured project state
      ↓
handoff for any AI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Baton reads a conversation and fills a fixed schema instead of producing another generic summary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"goal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"architecture"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"decisions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nl"&gt;"what"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"why"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"constraints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user_preferences"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"note"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"recent_changes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"failed_attempts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nl"&gt;"what"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"why_failed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"known_bugs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"open_tasks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"do_not_change"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"current_state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"next_action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The split between &lt;code&gt;decisions&lt;/code&gt;, &lt;code&gt;failed_attempts&lt;/code&gt; and &lt;code&gt;do_not_change&lt;/code&gt; is the heart of it.&lt;/p&gt;

&lt;p&gt;Those are exactly the things a new AI can get wrong if it only sees a transcript. If a later message reverses an earlier decision, only the latest truth is kept. Baton then renders a handoff tuned for the target: XML sections for Claude, Markdown for Gemini and GPT, a compact format for small local models, or an &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Every handoff ends with rules for the receiving AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Treat &lt;code&gt;do_not_change&lt;/code&gt; as binding.&lt;/li&gt;
&lt;li&gt;Don't repeat failed attempts.&lt;/li&gt;
&lt;li&gt;Ask instead of guessing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to make another summary. It's to make the next AI feel like it was there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why open-weight and local is the point
&lt;/h2&gt;

&lt;p&gt;Your project history contains your architecture, your mistakes, and sometimes your secrets. It seems wrong to send that to yet another service just to keep your own context.&lt;/p&gt;

&lt;p&gt;So Baton is designed around local extraction using an open-weight model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default: &lt;strong&gt;Gemma 4 E4B (Q4_K_M)&lt;/strong&gt; through &lt;strong&gt;llama.cpp&lt;/strong&gt;, downloaded from Hugging Face on first start.&lt;/li&gt;
&lt;li&gt;Ollama, LM Studio, llamafile or any OpenAI-compatible server can also be used.&lt;/li&gt;
&lt;li&gt;The model is instructed to produce the JSON schema, and the output is repaired and validated before reaching the UI.&lt;/li&gt;
&lt;li&gt;Long chats are processed in chunks, with the running state fed back into subsequent extraction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A hosted open-weight API is supported too, but the trade-off is simple: it stops being local-first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-agent mode for small models
&lt;/h2&gt;

&lt;p&gt;A 4B model asked to fill 13 fields at once can miss things. So Baton has an optional multi-agent mode: four specialists each own a subset of the fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Archivist&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rules Keeper&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decision Analyst&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Work Tracker&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A &lt;strong&gt;Reconciler&lt;/strong&gt; then fixes misfiled and duplicate items. There are also two safeguards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the Reconciler drops more than 30% of items, its output is discarded.&lt;/li&gt;
&lt;li&gt;A deterministic check removes any filename that never appears in the conversation or git history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also assign larger models to individual jobs using &lt;code&gt;BATON_AGENT_MODELS&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[ADD YOUR ACTUAL EVALUATION RESULT HERE.]&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Using it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;bash scripts/run.sh&lt;/code&gt; to start llama.cpp, wait for the model, and open Baton. Docker is also supported with &lt;code&gt;docker compose up -d --build&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Paste a conversation, or capture it with the browser extension.&lt;/li&gt;
&lt;li&gt;Inspect the memory panel: decisions, constraints, failed attempts, do-not-change rules and open tasks.&lt;/li&gt;
&lt;li&gt;Pick a target and generate the handoff.&lt;/li&gt;
&lt;li&gt;Paste it into a fresh AI conversation and ask what the next task is and what must not be changed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's also Git awareness: point Baton at a local repository and recent commits and uncommitted changes can be included, so "recent changes" can come from repository facts rather than memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's inside
&lt;/h2&gt;

&lt;p&gt;Baton is intentionally small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plain Python with no pip dependencies&lt;/li&gt;
&lt;li&gt;One static HTML page&lt;/li&gt;
&lt;li&gt;A Manifest V3 browser extension&lt;/li&gt;
&lt;li&gt;Support for Claude, ChatGPT and Gemini&lt;/li&gt;
&lt;li&gt;24 tests against mock model servers&lt;/li&gt;
&lt;li&gt;MIT licensed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Originality and credit
&lt;/h2&gt;

&lt;p&gt;The space already has good tools.&lt;/p&gt;

&lt;p&gt;Context-Bridge, for example, compresses transcripts into structured blocks through cloud providers. Other tools move raw sessions between coding agents or summarize conversations using your own API key.&lt;/p&gt;

&lt;p&gt;Baton shares the broad problem, but not their code.&lt;/p&gt;

&lt;p&gt;It's an independent implementation, and &lt;code&gt;NOTICE.md&lt;/code&gt; lists related projects.&lt;/p&gt;

&lt;p&gt;What I find most interesting about Baton's approach is the combination of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the &lt;code&gt;decision / failed-attempt / do-not-change&lt;/code&gt; split&lt;/li&gt;
&lt;li&gt;local-first extraction&lt;/li&gt;
&lt;li&gt;grounding checks against the conversation and git history&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;p&gt;I built Baton because I needed it, but that doesn't mean every part of it is solved.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I haven't run a rigorous benchmark across models; &lt;code&gt;scripts/eval_models.py&lt;/code&gt; provides a rough keyword-overlap score rather than a full extraction-quality benchmark.&lt;/li&gt;
&lt;li&gt;The browser extension's page selectors are fragile and will need maintenance when the target sites change.&lt;/li&gt;
&lt;li&gt;The hosted demo is static and loads a reference state. Live analysis requires a local model.&lt;/li&gt;
&lt;li&gt;Small models still miss items. The memory panel should be checked before handing the state to another AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;This is only the beginning.&lt;/p&gt;

&lt;p&gt;I'd like to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Importers for Claude Code and Codex session files&lt;/li&gt;
&lt;li&gt;In-browser inference with WebGPU, so there is no local server at all&lt;/li&gt;
&lt;li&gt;A verification step where the receiving AI restates the recovered state for the user to confirm&lt;/li&gt;
&lt;li&gt;Better evaluation of extraction quality across different model sizes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And maybe, by the end of this challenge, my AI friends won't need me to introduce them to the project every time we switch between them. For now, Baton is my attempt to make project context portable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; : &lt;a href="https://github.com/SachchitNesarikar/hacktober-26" rel="noopener noreferrer"&gt;https://github.com/SachchitNesarikar/hacktober-26&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hf26challenge</category>
      <category>weekendchallenge</category>
      <category>devchallenge</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
