<?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>Origlyph — Decoding the Places Behind Culture</title>
      <dc:creator>Sachchit</dc:creator>
      <pubDate>Sun, 01 Nov 2026 05:13:07 +0000</pubDate>
      <link>https://dev.to/sachchit_8b1872f00e860791/origlyph-decoding-the-places-behind-culture-117o</link>
      <guid>https://dev.to/sachchit_8b1872f00e860791/origlyph-decoding-the-places-behind-culture-117o</guid>
      <description>&lt;h3&gt;
  
  
  What if you could explore the world through the objects its people left behind?
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Hacktoberfest Open-Source AI Challenge — Week 4: Ghost in the Machine&lt;/em&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  What if geography could be explored through history?
&lt;/h2&gt;

&lt;p&gt;Most geography games test how well you recognize a place. A street, a building, a road sign, perhaps a landscape.&lt;/p&gt;

&lt;p&gt;I wanted to experiment with a different question.&lt;/p&gt;

&lt;p&gt;What if, instead of showing someone a photograph of a place, we showed them something that came from that place?&lt;/p&gt;

&lt;p&gt;An ancient textile. A traditional musical instrument. A manuscript. An intricately carved doorway.&lt;/p&gt;

&lt;p&gt;Could someone trace its origins simply by looking at the artifact?&lt;/p&gt;

&lt;p&gt;That question became &lt;strong&gt;Origlyph&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Origlyph is a cultural heritage geo-guessing game where players explore artifacts from around the world and attempt to identify their geographical origins. Players drop a pin on an interactive map, submit their guesses, and receive a score based on how close they are to the actual location.&lt;/p&gt;

&lt;p&gt;But getting the location right isn't really the point.&lt;/p&gt;

&lt;p&gt;The interesting part begins after the guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond the Guess: Discovering Provenance
&lt;/h2&gt;

&lt;p&gt;The reveal is where Origlyph differentiates itself from conventional geography games.&lt;/p&gt;

&lt;p&gt;Instead of displaying just the correct answer and distance, it introduces the artifact's &lt;strong&gt;provenance graph&lt;/strong&gt;: a network of relationships connecting the object to its makers, geographical origins, historical context, collections, trade routes, and references.&lt;/p&gt;

&lt;p&gt;The idea is to turn a simple guessing interaction into an opportunity for exploration.&lt;/p&gt;

&lt;p&gt;An artifact is rarely just an isolated object. It carries traces of the people who created it, the communities that preserved it, and the journeys it made across time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Theme: Ghost in the Machine
&lt;/h2&gt;

&lt;p&gt;For Week 4, the challenge revolved around the theme &lt;em&gt;Ghost in the Machine&lt;/em&gt;, with an opportunity to interpret it through something spooky or through the remembrance and cultural traditions associated with Día de los Muertos.&lt;/p&gt;

&lt;p&gt;I chose to approach it through cultural memory.&lt;/p&gt;

&lt;p&gt;The concept of an &lt;em&gt;ofrenda&lt;/em&gt; is about remembering people through the objects, traditions, and memories they leave behind.&lt;/p&gt;

&lt;p&gt;Origlyph takes inspiration from that idea.&lt;/p&gt;

&lt;p&gt;Every artifact has a human story embedded within it. The people who made it might be long gone, but their craftsmanship, traditions, and influence continue to exist through the objects they created.&lt;/p&gt;

&lt;p&gt;The provenance reveal is designed to make those connections visible.&lt;/p&gt;

&lt;p&gt;The ghost isn't necessarily something supernatural. It is the human story that remains inside an object long after its creator is gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the System
&lt;/h2&gt;

&lt;p&gt;From an engineering perspective, I wanted Origlyph to remain relatively lightweight while keeping its different components independent.&lt;/p&gt;

&lt;p&gt;The application is built around a React frontend, a FastAPI backend, a persistent artifact database, and an optional AI-powered hint layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  System Architecture
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A[React + Vite + TypeScript] --&amp;gt; B[FastAPI]
    B --&amp;gt; C[Game Engine]
    B --&amp;gt; D[Artifact Repository]
    B --&amp;gt; E[Hint Generation]
    B --&amp;gt; F[Provenance Explorer]
    C --&amp;gt; G[Distance Scoring]
    D --&amp;gt; H[MongoDB Atlas]
    E --&amp;gt; I[Deterministic Hints]
    E --&amp;gt; J[Gemma]
    F --&amp;gt; H&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  The Frontend
&lt;/h3&gt;

&lt;p&gt;The frontend uses React, Vite, and TypeScript.&lt;/p&gt;

&lt;p&gt;Leaflet, alongside OpenStreetMap tiles, powers the geographical guessing interface. This was a deliberate choice: I wanted an interactive map without introducing unnecessary dependence on paid map APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Backend
&lt;/h3&gt;

&lt;p&gt;FastAPI handles the application logic and communication between the frontend and data layer.&lt;/p&gt;

&lt;p&gt;One of the core mechanics is geographical distance scoring. Once a player submits a guess, the backend calculates the distance between the predicted coordinates and the artifact's actual location using the Haversine formula.&lt;/p&gt;

&lt;p&gt;This provides a consistent basis for evaluating guesses regardless of where on the planet the player is guessing.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Data Layer
&lt;/h3&gt;

&lt;p&gt;The initial version uses locally available JSON seed data to keep the core experience functional without requiring external APIs during gameplay.&lt;/p&gt;

&lt;p&gt;The data model draws inspiration from open cultural resources such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internet Archive&lt;/li&gt;
&lt;li&gt;Europeana&lt;/li&gt;
&lt;li&gt;Wikimedia Commons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Artifact records retain their source and licensing information, making attribution and traceability part of the data model rather than an afterthought.&lt;/p&gt;

&lt;p&gt;MongoDB Atlas provides persistent storage for artifact and provenance records.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI Fits In
&lt;/h2&gt;

&lt;p&gt;I didn't want AI to become a mandatory dependency for something as fundamental as a game hint.&lt;/p&gt;

&lt;p&gt;Instead, I approached it as an enhancement layer.&lt;/p&gt;

&lt;p&gt;Origlyph uses structured artifact metadata to generate deterministic hints based on attributes such as geographical region, historical period, and material.&lt;/p&gt;

&lt;p&gt;Gemma adds a natural-language layer, turning these structured clues into more engaging hints.&lt;/p&gt;

&lt;p&gt;This separation has a practical advantage: the application remains playable without model inference.&lt;/p&gt;

&lt;p&gt;It also gives the project room to evolve. The hint-generation interface can support different open-weight models without coupling the rest of the application to a particular provider.&lt;/p&gt;

&lt;p&gt;The broader engineering principle here is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI should improve the experience, not become a single point of failure.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the Open-Source Approach Matters
&lt;/h2&gt;

&lt;p&gt;For a project centred on cultural preservation, openness felt like a natural architectural choice.&lt;/p&gt;

&lt;p&gt;There are four aspects I particularly wanted to explore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model flexibility:&lt;/strong&gt; Gemma sits behind a separate interface, allowing experimentation with different models and inference environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Graceful degradation:&lt;/strong&gt; Deterministic hints keep the gameplay functional even when AI inference is unavailable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost-conscious inference:&lt;/strong&gt; Short, contextual hints can be cached per artifact, reducing unnecessary model calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data transparency:&lt;/strong&gt; Cultural records should retain their sources and licensing information. The provenance of the information itself matters just as much as the provenance of the artifact.&lt;/p&gt;

&lt;p&gt;This is where the open-source ecosystem becomes more than a collection of tools. It becomes part of the product philosophy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technology Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React, Vite, TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maps&lt;/td&gt;
&lt;td&gt;Leaflet, OpenStreetMap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;FastAPI, Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;MongoDB Atlas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI&lt;/td&gt;
&lt;td&gt;Gemma&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;Render&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Development workflow&lt;/td&gt;
&lt;td&gt;DevRelay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optional narration&lt;/td&gt;
&lt;td&gt;ElevenLabs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Was Challenging?
&lt;/h2&gt;

&lt;p&gt;The most interesting engineering challenge was thinking about how to represent provenance.&lt;/p&gt;

&lt;p&gt;A conventional database record can describe an artifact, but its history is more complicated. An object might have multiple creators, uncertain geographical origins, different ownership records, and connections to several historical events.&lt;/p&gt;

&lt;p&gt;Representing these relationships in a way that is both technically manageable and understandable to someone playing a game is an interesting problem.&lt;/p&gt;

&lt;p&gt;Another consideration was the boundary between AI-generated information and historical facts.&lt;/p&gt;

&lt;p&gt;A model can make a hint more natural, but it shouldn't be treated as an authoritative historical source. Keeping structured metadata as the foundation helps maintain that distinction.&lt;/p&gt;

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

&lt;p&gt;Origlyph is an initial exploration of how games and AI can make cultural heritage more approachable.&lt;/p&gt;

&lt;p&gt;There are several directions I'd like to take it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A daily artifact challenge with leaderboards.&lt;/li&gt;
&lt;li&gt;A much larger catalogue of geographically diverse artifacts.&lt;/li&gt;
&lt;li&gt;A richer provenance explorer with interconnected historical relationships.&lt;/li&gt;
&lt;li&gt;Multilingual and narrated artifact discoveries.&lt;/li&gt;
&lt;li&gt;Community contributions with source verification and attribution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, I'd like Origlyph to become more than a guessing game. It could be a way to explore the connections between geography, history, craftsmanship, and culture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explore the Project
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/SachchitNesarikar/origlyph.ai" rel="noopener noreferrer"&gt;https://github.com/SachchitNesarikar/origlyph.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo Video:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1e8nKQydXeQTLoWMzdRrW9N-YWAZLZfb3/" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1e8nKQydXeQTLoWMzdRrW9N-YWAZLZfb3/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Past Hasn't Disappeared. It Has Just Changed Form.
&lt;/h2&gt;

&lt;p&gt;Technology is usually associated with creating something new. But I think it can also help us rediscover things that already exist.&lt;/p&gt;

&lt;p&gt;An artifact can outlive its creator, travel across continents, pass through generations, and eventually find its way into a digital archive.&lt;/p&gt;

&lt;p&gt;Its story doesn't end when it enters a database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Origlyph, I wanted to make those stories something people could actively discover rather than simply scroll past.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>weekendchallenge</category>
      <category>devchallenge</category>
      <category>gemma</category>
    </item>
    <item>
      <title>LazyDesk: Let AI Clean Up Your Digital Mess While You Do Absolutely Nothing</title>
      <dc:creator>Sachchit</dc:creator>
      <pubDate>Mon, 26 Oct 2026 06:19:50 +0000</pubDate>
      <link>https://dev.to/sachchit_8b1872f00e860791/lazydesk-let-ai-clean-up-your-digital-mess-while-you-do-absolutely-nothing-n4n</link>
      <guid>https://dev.to/sachchit_8b1872f00e860791/lazydesk-let-ai-clean-up-your-digital-mess-while-you-do-absolutely-nothing-n4n</guid>
      <description>&lt;p&gt;An open-source AI project for people who have better things to do than organize files.&lt;/p&gt;

&lt;p&gt;Have you ever opened your Downloads folder looking for one important PDF, only to find hundreds of files named things like "final_v2.pdf", "final_final_revised.pdf", and "document(17).pdf"?&lt;/p&gt;

&lt;p&gt;Same problem, different day.&lt;/p&gt;

&lt;p&gt;We all know we should organize our files. We create folders, promise ourselves we'll keep everything tidy, and occasionally spend ten minutes renaming documents. Then life gets busy, the mess returns, and we start searching for files all over again.&lt;/p&gt;

&lt;p&gt;What if your computer could handle that boring work for you?&lt;/p&gt;

&lt;p&gt;That's the idea behind LazyDesk: a local AI-powered file organization assistant designed to turn digital clutter into a clean, manageable workspace.&lt;/p&gt;

&lt;p&gt;And for the Hacktoberfest Open-Source AI Challenge Week 3 theme, Slow and Steady, it explores a simple philosophy:&lt;/p&gt;

&lt;p&gt;Why spend your energy on repetitive tasks when an AI assistant can help you do them more efficiently?&lt;/p&gt;

&lt;p&gt;The Problem: Digital Clutter Is Still Clutter&lt;/p&gt;

&lt;p&gt;Our computers have quietly become storage rooms.&lt;/p&gt;

&lt;p&gt;Screenshots pile up. PDFs get downloaded and forgotten. Project files end up in random folders. Documents receive filenames that make sense for approximately five seconds.&lt;/p&gt;

&lt;p&gt;Traditional file organization tools can move files based on rules, extensions, or predefined patterns. But they don't always understand what a file is actually about.&lt;/p&gt;

&lt;p&gt;For example, consider these files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"IMG_20261012_091233.jpg"&lt;/li&gt;
&lt;li&gt;"report_final_v3.pdf"&lt;/li&gt;
&lt;li&gt;"notes_new.txt"&lt;/li&gt;
&lt;li&gt;"download (8).pdf"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A basic script can identify their extensions. An AI model could help infer that one image might be a receipt, a PDF might be a project report, and a text file might contain meeting notes.&lt;/p&gt;

&lt;p&gt;That contextual understanding is what makes LazyDesk interesting.&lt;/p&gt;

&lt;p&gt;Instead of manually opening every file and deciding where it belongs, users could review AI-generated suggestions and approve the changes they want.&lt;/p&gt;

&lt;p&gt;The Idea: Meet LazyDesk&lt;/p&gt;

&lt;p&gt;LazyDesk is a proposed desktop-friendly application that uses open-weight AI to assist with file organization.&lt;/p&gt;

&lt;p&gt;The goal isn't to give an AI unrestricted access to your computer. It's to give you a useful assistant that handles the tedious thinking while keeping you in control.&lt;/p&gt;

&lt;p&gt;The initial version is designed around four capabilities.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Smart File Categorization&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;LazyDesk scans a user-selected folder and collects basic file information, such as filenames, extensions, and metadata.&lt;/p&gt;

&lt;p&gt;An AI model then helps categorize files into useful groups, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documents and reports&lt;/li&gt;
&lt;li&gt;Images and screenshots&lt;/li&gt;
&lt;li&gt;Receipts and invoices&lt;/li&gt;
&lt;li&gt;Study materials&lt;/li&gt;
&lt;li&gt;Project files&lt;/li&gt;
&lt;li&gt;Miscellaneous downloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These categories can be customized to fit the user's workflow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Meaningful Filename Suggestions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of keeping "document(17).pdf", LazyDesk could suggest a clearer filename based on the available information.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;"document(17).pdf" → "project-meeting-notes.pdf"&lt;/p&gt;

&lt;p&gt;These suggestions would be generated only when there is enough context to justify them. A filename alone cannot reliably reveal the contents of every document, so uncertain cases should be flagged for review.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Duplicate Detection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Duplicate files waste storage and make it harder to find the right version.&lt;/p&gt;

&lt;p&gt;LazyDesk could calculate file hashes to identify exact duplicates, then show the user which files appear identical.&lt;/p&gt;

&lt;p&gt;This part doesn't require AI at all. A deterministic hashing algorithm is faster and more reliable for exact duplicate detection than asking a language model to make the decision.&lt;/p&gt;

&lt;p&gt;That's an important design principle: use AI where it adds value, and conventional software where it works better.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Review Before Cleanup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The assistant prepares a proposed organization plan before changing anything.&lt;/p&gt;

&lt;p&gt;Users can review the original filename, suggested filename, destination folder, and reason for the suggestion.&lt;/p&gt;

&lt;p&gt;Only after approval would LazyDesk apply the selected changes.&lt;/p&gt;

&lt;p&gt;This makes the assistant useful without making it unnecessarily risky.&lt;/p&gt;

&lt;p&gt;The Technology Behind LazyDesk&lt;/p&gt;

&lt;p&gt;The project is intended to demonstrate how open-weight AI can support a practical, everyday workflow.&lt;/p&gt;

&lt;p&gt;The proposed technology stack is deliberately simple:&lt;/p&gt;

&lt;p&gt;Component| Technology| Purpose&lt;br&gt;
Programming language| Python| File processing and application logic&lt;br&gt;
AI model| Gemma through Ollama| Contextual classification and naming suggestions&lt;br&gt;
User interface| Streamlit| A simple interactive dashboard&lt;br&gt;
Duplicate detection| SHA-256 hashing| Reliable identification of identical files&lt;br&gt;
File operations| Python standard library| Previewing and applying approved changes&lt;/p&gt;

&lt;p&gt;Gemma is an open-weight model family, while Ollama provides a convenient way to run supported models locally. The exact model variant should be chosen according to the available hardware and the quality of its output.&lt;/p&gt;

&lt;p&gt;The application would follow a straightforward workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user selects a folder.&lt;/li&gt;
&lt;li&gt;Python scans its files and collects relevant metadata.&lt;/li&gt;
&lt;li&gt;The local model generates structured categorization and naming suggestions.&lt;/li&gt;
&lt;li&gt;The application validates those suggestions and displays a preview.&lt;/li&gt;
&lt;li&gt;The user approves the changes.&lt;/li&gt;
&lt;li&gt;Python applies the approved operations and records a change log.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The language model would not be responsible for executing arbitrary shell commands or deciding independently to delete files. Its role would be limited to generating suggestions that the application validates.&lt;/p&gt;

&lt;p&gt;This separation keeps the design easier to test, understand, and maintain.&lt;/p&gt;

&lt;p&gt;Why Open-Source AI Matters&lt;/p&gt;

&lt;p&gt;For LazyDesk, using an open-weight model isn't simply a way to add AI to a project. It affects how the application can be used and trusted.&lt;/p&gt;

&lt;p&gt;Your files can stay on your computer&lt;/p&gt;

&lt;p&gt;A folder organizer may encounter financial documents, personal photographs, academic work, or private business records.&lt;/p&gt;

&lt;p&gt;Sending all of that information to an external AI service can create unnecessary privacy concerns.&lt;/p&gt;

&lt;p&gt;A locally configured model can process information on the user's machine without sending prompts to a hosted inference API. That said, complete offline operation must be verified for the entire application, including model downloads, updates, and any optional integrations.&lt;/p&gt;

&lt;p&gt;You have more control over the model&lt;/p&gt;

&lt;p&gt;Different computers have different hardware limitations. Different users also have different expectations around speed, quality, and resource consumption.&lt;/p&gt;

&lt;p&gt;An open-weight approach makes it possible to experiment with alternative supported models, compare their outputs, and select an appropriate model for the task.&lt;/p&gt;

&lt;p&gt;If a smaller model is sufficient for basic categorization, users may not need a much larger model for every operation.&lt;/p&gt;

&lt;p&gt;You can inspect and improve the implementation&lt;/p&gt;

&lt;p&gt;A project built with open-source components can invite contributions from developers who want to improve classification rules, add categories, strengthen file-operation safeguards, or support additional model backends.&lt;/p&gt;

&lt;p&gt;The project can also be extended without making every feature dependent on a single proprietary AI service.&lt;/p&gt;

&lt;p&gt;You can reduce recurring inference costs&lt;/p&gt;

&lt;p&gt;Once a compatible model has been downloaded, local inference can avoid per-request API charges.&lt;/p&gt;

&lt;p&gt;It is not literally free in every sense: users still need suitable hardware, electricity, disk space, and time for setup. Nevertheless, local execution can make repeated use more economical and predictable.&lt;/p&gt;

&lt;p&gt;For a personal utility that runs frequently, this trade-off is worth exploring.&lt;/p&gt;

&lt;p&gt;Designing for Safety, Not Just Convenience&lt;/p&gt;

&lt;p&gt;An AI file organizer should not be allowed to turn a messy folder into a missing-files problem.&lt;/p&gt;

&lt;p&gt;That's why LazyDesk should include several safeguards from the beginning.&lt;/p&gt;

&lt;p&gt;No automatic deletion. Duplicate detection should identify candidates, not silently remove them.&lt;/p&gt;

&lt;p&gt;Preview before changes. Users should see every proposed move or rename before it happens.&lt;/p&gt;

&lt;p&gt;Conflict handling. If a destination filename already exists, the application should stop and ask the user how to proceed rather than overwrite the file.&lt;/p&gt;

&lt;p&gt;Undo support. A change log should record the original and new paths so completed operations can be reversed where possible.&lt;/p&gt;

&lt;p&gt;Restricted access. The application should operate only on folders explicitly selected by the user.&lt;/p&gt;

&lt;p&gt;Structured model output. Model responses should be validated against an expected schema. Invalid or ambiguous suggestions should not trigger file operations.&lt;/p&gt;

&lt;p&gt;These safeguards aren't optional extras. They are part of making an AI agent dependable.&lt;/p&gt;

&lt;p&gt;What the First Version Should Include&lt;/p&gt;

&lt;p&gt;The initial release should focus on doing a few things well instead of attempting to become a complete desktop automation platform.&lt;/p&gt;

&lt;p&gt;The minimum viable product would include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A folder-selection interface.&lt;/li&gt;
&lt;li&gt;A file scanner that collects metadata.&lt;/li&gt;
&lt;li&gt;Local AI-based categorization.&lt;/li&gt;
&lt;li&gt;Suggested filenames and destination folders.&lt;/li&gt;
&lt;li&gt;A preview screen for reviewing proposed changes.&lt;/li&gt;
&lt;li&gt;Approval-based file operations.&lt;/li&gt;
&lt;li&gt;A log of completed changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Later versions could introduce content-aware document classification, configurable folder rules, natural-language organization commands, and more advanced duplicate management.&lt;/p&gt;

&lt;p&gt;The first goal is straightforward: demonstrate that a small local AI application can save users time on an annoying, repetitive task.&lt;/p&gt;

&lt;p&gt;📊 How I Would Evaluate It&lt;/p&gt;

&lt;p&gt;A useful project needs more than a convincing screenshot.&lt;/p&gt;

&lt;p&gt;To evaluate LazyDesk, I would measure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Classification quality: How often do suggested categories match a manually reviewed reference set?&lt;/li&gt;
&lt;li&gt;Time saved: How long does organizing a folder take manually compared with using the assistant?&lt;/li&gt;
&lt;li&gt;Latency: How long does the model take to generate suggestions for each file?&lt;/li&gt;
&lt;li&gt;Resource usage: How much memory and disk space does the chosen model require?&lt;/li&gt;
&lt;li&gt;Safety: Can the application avoid overwrites, prevent unapproved operations, and recover from errors?&lt;/li&gt;
&lt;li&gt;Privacy: Can the complete core workflow run without sending file information to an external service?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These measurements would help determine whether the AI genuinely improves the experience over a conventional rule-based organizer.&lt;/p&gt;

&lt;p&gt;I would also compare AI-generated categorization with simple extension-based rules. If a rule is sufficient, the application should use the rule rather than spend inference time on a task that doesn't need a model.&lt;/p&gt;

&lt;p&gt;The Bigger Picture&lt;/p&gt;

&lt;p&gt;LazyDesk is about more than tidying up a Downloads folder.&lt;/p&gt;

&lt;p&gt;It represents a broader idea: useful AI doesn't always need to be a chatbot, a massive cloud service, or a complicated autonomous agent.&lt;/p&gt;

&lt;p&gt;Sometimes the best application of AI is an unobtrusive assistant that handles a small amount of annoying work, asks for approval when necessary, and gets out of the way.&lt;/p&gt;

&lt;p&gt;Open-weight models make that approach especially interesting because developers can experiment locally, choose their own model, and build tools that respect the user's control over their data.&lt;/p&gt;

&lt;p&gt;That's what I find compelling about the Slow and Steady theme.&lt;/p&gt;

&lt;p&gt;The goal isn't to make people work faster at everything. It's to remove the repetitive work that doesn't deserve their attention in the first place.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;LazyDesk is a proposed experiment in building a practical AI assistant with open-weight models and familiar open-source tools.&lt;/p&gt;

&lt;p&gt;Its central idea is simple: let the computer handle the tedious parts of file organization while the user remains in control of the final decisions.&lt;/p&gt;

&lt;p&gt;If implemented well, it could become a small but genuinely useful tool for students, developers, freelancers, and anyone whose Downloads folder has become a digital junk drawer.&lt;/p&gt;

&lt;p&gt;And perhaps that's the real promise of open-source AI: making intelligent automation accessible, adaptable, and private enough to be useful in everyday life.&lt;/p&gt;

&lt;p&gt;Build less busywork. Keep control. Embrace your inner sloth. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <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>
