<?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: Mackenzie</title>
    <description>The latest articles on DEV Community by Mackenzie (@mackenzie-techdocs).</description>
    <link>https://dev.to/mackenzie-techdocs</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%2F3644438%2F84cbba93-697a-4247-a8d4-bdd9da56bf8d.png</url>
      <title>DEV Community: Mackenzie</title>
      <link>https://dev.to/mackenzie-techdocs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mackenzie-techdocs"/>
    <language>en</language>
    <item>
      <title>GhostTrace: A Local Workbench for Looking Inside Language Models</title>
      <dc:creator>Mackenzie</dc:creator>
      <pubDate>Wed, 28 Oct 2026 02:39:34 +0000</pubDate>
      <link>https://dev.to/mackenzie-techdocs/ghosttrace-a-local-workbench-for-looking-inside-language-models-45p</link>
      <guid>https://dev.to/mackenzie-techdocs/ghosttrace-a-local-workbench-for-looking-inside-language-models-45p</guid>
      <description>&lt;p&gt;A language model gives you an answer. Understanding what changed inside the model—and whether that change matters to its output—is a harder problem.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;GhostTrace&lt;/strong&gt; to make that investigation easier to inspect, repeat, and share.&lt;/p&gt;

&lt;p&gt;It’s a local-first research engine and visual workbench for controlled prompt comparisons and mechanistic interpretability experiments. You can compare model responses, inspect internal activations, run targeted interventions, and export evidence that someone else can replay without loading the model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mso-docs/Ghost-Trace" rel="noopener noreferrer"&gt;Source code on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with evidence you can explore
&lt;/h2&gt;

&lt;p&gt;One decision shaped the project: opening a research tool should give you a way to understand it before asking you to download model weights.&lt;/p&gt;

&lt;p&gt;GhostTrace includes recorded measurements from &lt;strong&gt;Qwen2.5-0.5B-Instruct running locally on CPU in FP32&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To explore them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm ci
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://127.0.0.1:5173&lt;/code&gt; and choose &lt;strong&gt;Open recorded smoke&lt;/strong&gt;, or open the &lt;strong&gt;Research lab → Recorded research case&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After setup, recorded replay requires no model download or running inference backend. The workbench loads saved evidence rather than generating new measurements.&lt;/p&gt;

&lt;p&gt;There’s also an in-app walkthrough, captions, a guided demo, and searchable help.&lt;/p&gt;

&lt;h2&gt;
  
  
  From prompt comparisons to internal interventions
&lt;/h2&gt;

&lt;p&gt;The original workflow compares controlled prompt conditions. It records generated responses and aligned residual activations, with repeat, label-only, and wording controls.&lt;/p&gt;

&lt;p&gt;The bundled smoke diagnostic completed all &lt;strong&gt;42 planned units&lt;/strong&gt;, covering three development scenarios, two template families, and three instruction conditions.&lt;/p&gt;

&lt;p&gt;That establishes a small working diagnostic. A full confirmatory study still requires additional review and evidence.&lt;/p&gt;

&lt;p&gt;The newer Research Lab goes deeper. Its recorded copying example lets you inspect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A component graph with attention-head and grouped-query attention structure.&lt;/li&gt;
&lt;li&gt;Signed activation tiles for residual streams, attention and MLP inputs, head contributions, and selected MLP channels.&lt;/li&gt;
&lt;li&gt;Logit-lens readouts showing how intermediate representations relate to target-token predictions.&lt;/li&gt;
&lt;li&gt;Patching and ablation experiments that measure how targeted changes affect the output.&lt;/li&gt;
&lt;li&gt;Gradient attribution alongside exact intervention checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to connect an observation to an experiment: identify a component, inspect its activity, change it under a defined control, and measure the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  A visualization needs an evidence trail
&lt;/h2&gt;

&lt;p&gt;An activation difference can be interesting without explaining a behavior.&lt;/p&gt;

&lt;p&gt;A component might change because of literal prompt wording, token position, sequence length, or ordinary instruction following. Gradient attribution provides another useful signal, but its relationship to an actual intervention needs checking.&lt;/p&gt;

&lt;p&gt;GhostTrace keeps those distinctions visible.&lt;/p&gt;

&lt;p&gt;For example, replacing the entire final residual stream can serve as an endpoint positive control. A successful replacement does &lt;strong&gt;not&lt;/strong&gt; establish that we discovered a circuit.&lt;/p&gt;

&lt;p&gt;The recorded research case also includes dictionary projections and a small trained affine lens. Their limits matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The coordinate-identity dictionary is a diagnostic basis, not a learned sparse autoencoder.&lt;/li&gt;
&lt;li&gt;Reconstruction error remains visible.&lt;/li&gt;
&lt;li&gt;The affine lens was fitted on 24 development prompts and evaluated on eight held-out prompts.&lt;/li&gt;
&lt;li&gt;Those small datasets do not establish broad predictive quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Negative effects and recovery values outside the usual range remain in the evidence. They’re part of what happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  Replay is part of the research workflow
&lt;/h2&gt;

&lt;p&gt;Sharing a screenshot is easy. Sharing enough information to inspect the experiment is harder.&lt;/p&gt;

&lt;p&gt;GhostTrace supports portable evidence bundles, integrity checks, and offline metric recomputation. Saved results can be viewed without loading model weights.&lt;/p&gt;

&lt;p&gt;That gives the project two useful workflows:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explore recorded evidence:&lt;/strong&gt; inspect outputs, graphs, activations, and controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run local experiments:&lt;/strong&gt; configure conditions and targets, queue capture or intervention jobs, then export the resulting evidence.&lt;/p&gt;

&lt;p&gt;The live stack uses React, TypeScript, and Vite for the interface; FastAPI for the API; SQLite-backed job storage; and a single explicit worker. Model capture uses direct Transformers hooks.&lt;/p&gt;

&lt;p&gt;To start the local stack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;--frozen&lt;/span&gt; &lt;span class="nt"&gt;--extra&lt;/span&gt; &lt;span class="nb"&gt;test
&lt;/span&gt;npm run dev:full
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Live inference requires a separate, explicit model setup. Starting the application or opening saved results does not download model weights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping research claims bounded
&lt;/h2&gt;

&lt;p&gt;The project includes automated checks for API contracts, storage and recovery, evidence handling, browser workflows, and real-model behavior.&lt;/p&gt;

&lt;p&gt;Human review remains a separate requirement.&lt;/p&gt;

&lt;p&gt;Dataset review, blinded ratings, a full confirmatory pilot, and final human release QA are still pending. Missing evidence stays pending.&lt;/p&gt;

&lt;p&gt;That boundary is especially important for the original persona experiments. An instruction labeled “remorseful” describes a prompt condition. A response expressing regret does not establish a feeling, and a representation difference does not establish a psychological state.&lt;/p&gt;

&lt;p&gt;GhostTrace is a tool for investigating model behavior. The conclusions still have to be earned through the experiment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to improve next
&lt;/h2&gt;

&lt;p&gt;The next work is completing the human review process, expanding the evidence beyond small diagnostics, and making it easier to follow an experimental question through to its controls and results.&lt;/p&gt;

&lt;p&gt;I’m particularly interested in feedback from people building interpretability tools:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What information do you need to inspect before you trust an activation or intervention result?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mso-docs/Ghost-Trace" rel="noopener noreferrer"&gt;Explore GhostTrace on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the walkthrough
&lt;/h2&gt;

&lt;p&gt;See GhostTrace in action:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/LstfH2Er_eI" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/LstfH2Er_eI" rel="noopener noreferrer"&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://mso-docs.github.io/GhostTrace/" rel="noopener noreferrer"&gt;Static demo&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SlothLab: HacktoberFest Week 3 Challenge</title>
      <dc:creator>Mackenzie</dc:creator>
      <pubDate>Mon, 26 Oct 2026 02:35:24 +0000</pubDate>
      <link>https://dev.to/mackenzie-techdocs/slothlab-hacktoberfest-week-3-challenge-11ao</link>
      <guid>https://dev.to/mackenzie-techdocs/slothlab-hacktoberfest-week-3-challenge-11ao</guid>
      <description>&lt;p&gt;An AI research loop can generate another experiment long after it has stopped learning anything useful. I wanted a small laboratory where I could inspect what the agent ran, why it ran it, and why it stopped.&lt;/p&gt;

&lt;p&gt;That became &lt;strong&gt;SlothLab + LazyLoop&lt;/strong&gt;: a local scientific research application with a Streamlit workspace, an Ollama-compatible model connection, reproducible experiments, and a controller that treats compute as a finite resource.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mso-docs/LazyLab" rel="noopener noreferrer"&gt;Source code&lt;/a&gt; · &lt;a href="https://mso-docs.github.io/LazyLab/" rel="noopener noreferrer"&gt;Static evidence explorer&lt;/a&gt; · &lt;a href="https://mso-docs.github.io/LazyLab/help.html" rel="noopener noreferrer"&gt;Video help guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/UV3h4IRk3go" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The video is an actual automated browser recording. It explores a previously completed investigation, downloads its research bundle, and reopens that history in Guest mode. It does not show a new autonomous investigation finishing in 96 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a narrow scientific question
&lt;/h2&gt;

&lt;p&gt;The first experiment family studies &lt;strong&gt;oracle prior-probability correction under synthetic class prevalence shift&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In practical terms: if the class balance changes, when does adjusting predicted probabilities improve Brier score? The experiment supplies the true evaluation prevalence as an oracle input. That assumption is part of the research question, not a capability to infer prevalence from arbitrary real-world data.&lt;/p&gt;

&lt;p&gt;This scope gives the agent something measurable to do. It proposes hypotheses and registered experiment specifications; deterministic Python procedures execute the science. It cannot invent a shell command and call that an experiment.&lt;/p&gt;

&lt;p&gt;The workflow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question → hypotheses → validated candidates
                    ↓
           execute / reuse / reject
                    ↓
         measurements → interpretation
                    ↓
         independent confirmation or stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A model explanation remains provisional. It does not become a scientific finding simply because it sounds confident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let code enforce the research boundary
&lt;/h2&gt;

&lt;p&gt;LazyLoop validates proposed conditions, checks budget feasibility, finds verified exact-result matches, and tracks whether the investigation is progressing.&lt;/p&gt;

&lt;p&gt;For example, this is real validation code from &lt;code&gt;slothlab/lazyloop/controller.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;allowed_seeds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exploratory_seeds&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;phase&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;exploratory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;confirmatory_seeds&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;seed&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;allowed_seeds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Seed does not belong to its predeclared phase partition&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That check expresses a research decision: confirmation seeds are reserved before exploration. The agent cannot quietly recycle exploration into independent confirmation by changing the label.&lt;/p&gt;

&lt;p&gt;Exact-result reuse is another useful distinction. Repeating an identical experiment can return a verified cached result. Changing the seed can create a genuinely independent replication. A cache hit must never count as a second independent measurement.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the completed example actually showed
&lt;/h2&gt;

&lt;p&gt;One recorded investigation reached its declared operational completion criteria with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Five original experiment executions.&lt;/li&gt;
&lt;li&gt;One verified exact-result reuse.&lt;/li&gt;
&lt;li&gt;Three independent confirmation seeds for a fixed condition.&lt;/li&gt;
&lt;li&gt;10,712 model tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mean confirmatory delta Brier was approximately &lt;strong&gt;−0.00619&lt;/strong&gt;, where delta means corrected minus baseline. The three confirmation measurements supported improvement for that particular synthetic condition.&lt;/p&gt;

&lt;p&gt;That is a scoped result. It does not show that correction helps every dataset or that this agent generally saves compute. Fixed-schedule replay comparisons exercised reuse, but the repeated autonomous evaluation did &lt;strong&gt;not&lt;/strong&gt; establish an efficiency advantage with sufficient confirmatory coverage. Those are different claims, so the reports keep them separate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mso-docs/LazyLab/tree/main/docs/examples/complete-investigation" rel="noopener noreferrer"&gt;The original example and measured reports&lt;/a&gt; are available for inspection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the application usable between experiments
&lt;/h2&gt;

&lt;p&gt;The Streamlit interface handles investigation design, measurements, decisions, pause/resume, reports, and comparisons. Background research runs in a separate local process, so closing a browser tab does not itself abandon a job.&lt;/p&gt;

&lt;p&gt;I also added the features that make repeated use less awkward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Light, Dark, and System appearance.&lt;/li&gt;
&lt;li&gt;Remembered local browser profiles with separate histories.&lt;/li&gt;
&lt;li&gt;Guest research using JSON documents and artifact files, without SQL.&lt;/li&gt;
&lt;li&gt;Portable ZIP bundles that can be downloaded and reopened.&lt;/li&gt;
&lt;li&gt;A learning area with chapter navigation, captions, transcripts, practice questions, and a research-design checklist.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A browser profile is a convenience on a trusted local installation, not a cross-device identity service. Guest mode uses temporary files; it is not a promise of secure erasure. Imported archives are validated data, and opening one starts no inference.&lt;/p&gt;

&lt;p&gt;Inference can run locally or on a reachable remote &lt;strong&gt;Ollama-compatible HTTP(S) server&lt;/strong&gt;. Scientific experiments and research files stay on the app host. The adapter does not support arbitrary OpenAI/Anthropic APIs or authenticated gateways.&lt;/p&gt;

&lt;h2&gt;
  
  
  A static demo should tell the truth
&lt;/h2&gt;

&lt;p&gt;GitHub Pages cannot run the Python research application. The static demo instead lets visitors filter real recorded measurements, inspect an experiment table, read the limitations, and download research-design notes.&lt;/p&gt;

&lt;p&gt;Those notes are a planning worksheet, not executable configuration. The page makes no model calls. The help page embeds the YouTube walkthrough after an explicit playback action and explains how to run the full app.&lt;/p&gt;

&lt;p&gt;This makes the project explorable without pretending a static website is carrying out scientific work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verification and remaining work
&lt;/h2&gt;

&lt;p&gt;The 0.2.0 acceptance run passed &lt;strong&gt;214 tests&lt;/strong&gt;, including live Ollama checks, job pause/resume, portable-history validation, and JSON-only research workflows. The later live browser walkthrough additionally exercised real bundle download, guest restore, and local-profile creation.&lt;/p&gt;

&lt;p&gt;The application is intended for a single-user Linux installation bound to loopback. It is not a reviewed public multi-tenant service. Execution isolation depends on the host; a restricted subprocess fallback is weaker than working OS namespaces. Passing tests does not remove those deployment limits.&lt;/p&gt;

&lt;p&gt;The next useful work is broader scientific families and stronger evaluation across independent autonomous trials. I would rather preserve an insufficient-evidence outcome than turn a demo into an efficiency claim the measurements do not support.&lt;/p&gt;

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

&lt;p&gt;With Python 3.12+, Ollama running separately, and an installed model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/mso-docs/LazyLab.git
&lt;span class="nb"&gt;cd &lt;/span&gt;LazyLab
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
python &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'.[dashboard]'&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OLLAMA_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'your-installed-model'&lt;/span&gt;
slothlab init
slothlab doctor
slothlab dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://127.0.0.1:8501&lt;/code&gt;. Start with a small, explicit question and a finite budget.&lt;/p&gt;

&lt;p&gt;I would especially value feedback on where the evidence trail is unclear, which stopping decisions deserve stronger tests, and which first-run steps need better explanation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Related DEV discussions
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://dev.to/_firelinks/a-local-first-coding-agent-needs-a-measurable-boundary-2cen"&gt;A Local-First Coding Agent Needs a Measurable Boundary&lt;/a&gt;, by &lt;a href="https://dev.to/_firelinks"&gt;@_firelinks&lt;/a&gt;, argues for making an agent's limits inspectable. That is a useful lens for assessing SlothLab's registered procedures and explicit budgets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/kuldeep_paul/how-do-we-evaluate-ai-agents-a-practical-end-to-end-framework-for-reliability-and-scale-4ed"&gt;How Do We Evaluate AI Agents? A Practical, End-to-End Framework for Reliability and Scale&lt;/a&gt;, by &lt;a href="https://dev.to/kuldeep_paul"&gt;@kuldeep_paul&lt;/a&gt;, discusses evaluating trajectories and efficiency alongside outcomes. SlothLab's distinction between fixed replay, autonomous runs, and scientific confirmation follows that broader evaluation concern; it does not depend on the commercial tools discussed in that article.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>ReasearchReady: Side Hustle AI Challenge Week 2</title>
      <dc:creator>Mackenzie</dc:creator>
      <pubDate>Mon, 19 Oct 2026 01:47:34 +0000</pubDate>
      <link>https://dev.to/mackenzie-techdocs/reasearchready-side-hustle-ai-challenge-week-2-532</link>
      <guid>https://dev.to/mackenzie-techdocs/reasearchready-side-hustle-ai-challenge-week-2-532</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mso-docs.github.io/ResearchReady/" rel="noopener noreferrer"&gt;Demo Website&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;ResearchReady gives researchers a private second look at a manuscript before peer review. Upload a LaTeX project, inspect source-linked findings, compare scientific claims with candidate manuscript evidence, and export a review report.&lt;/p&gt;

&lt;p&gt;It combines reproducible submission checks with optional open-model review: broken citations and missing files are checked without inference; claim assessment and reviewer questions use an Ollama model. Every AI assessment requires human verification.&lt;/p&gt;

&lt;p&gt;The potential customer is a small research lab, independent researcher, or research consultant handling unpublished drafts. The side-hustle hypothesis is paid local installation, model configuration, and support around an Apache-2.0 application. The value to test is whether a team would pay to keep control of its manuscripts while reducing review setup and preparation work. Customer demand, time savings, and willingness to pay are not yet validated; I am not claiming paying users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=pLVhiMqGErg" rel="noopener noreferrer"&gt;Video Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app includes two synthetic manuscripts: one with seeded defects and one without deterministic submission defects. Choose &lt;strong&gt;Try the synthetic sample&lt;/strong&gt;, run submission checks, and open a finding to inspect its exact source. Select &lt;strong&gt;qwen3.5:9b&lt;/strong&gt; and enable research integrity and reviewer simulation to reproduce the AI workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mso-docs/ResearchReady/blob/main/docs/demo-assets/researchready-synthetic-audit.pdf" rel="noopener noreferrer"&gt;Actual PDF export from the flawed sample&lt;/a&gt; · &lt;a href="https://github.com/mso-docs/ResearchReady/blob/main/docs/demo-assets/flawed-audit.json" rel="noopener noreferrer"&gt;Raw flawed audit&lt;/a&gt; · &lt;a href="https://github.com/mso-docs/ResearchReady/blob/main/docs/demo-assets/valid-audit.json" rel="noopener noreferrer"&gt;Raw valid audit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/mso-docs/ResearchReady/main/docs/demo-assets/report-preview.png" rel="noopener noreferrer"&gt;An actual ResearchReady report from a synthetic manuscript, with summary counts and source-linked findings&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the final live smoke run, the flawed manuscript claimed a 15% improvement while reporting 70% versus 72% accuracy. ResearchReady linked that mismatch to the results source and questioned a universal-generalization claim supported only by one synthetic experiment.&lt;/p&gt;

&lt;p&gt;The comparison manuscript described a two-percentage-point gain without claiming statistical significance. Its final run produced no AI warnings: one comparison had candidate evidence, while lack of independent corroboration for raw accuracy figures remained a neutral observation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Synthetic sample&lt;/th&gt;
&lt;th&gt;Submission findings&lt;/th&gt;
&lt;th&gt;AI warnings&lt;/th&gt;
&lt;th&gt;Reviewer questions&lt;/th&gt;
&lt;th&gt;End-to-end time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flawed&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;17.12 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Valid&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;16.12 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These examples were used during iteration. They are smoke tests, not a held-out accuracy benchmark. Timing includes application and polling overhead on a remote Spark reached through SSH; hardware was not independently measured. The &lt;a href="https://github.com/mso-docs/ResearchReady/blob/main/docs/evaluation-results.json" rel="noopener noreferrer"&gt;run summary&lt;/a&gt; records the exact model digest and settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mso-docs/ResearchReady" rel="noopener noreferrer"&gt;ResearchReady source and setup instructions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The workspace uses React and TypeScript, FastAPI, SQLite, and Ollama. Manuscript source stays in the backend's local project directory. The browser never receives the inference server address. JSON and paginated PDF exports support a review handoff.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The AI workflow uses &lt;strong&gt;qwen3.5:9b, Q4_K_M&lt;/strong&gt;, served through Ollama. The server reports an Apache-2.0 model license. Claim quotes must match supplied raw source text; the application computes their locations. Lexical TF-IDF retrieval finds candidate evidence, excluding the claim's own occupied lines while preserving nearby source passages. Assessments and reviewer questions may cite only supplied passage IDs.&lt;/p&gt;

&lt;p&gt;Live testing found problems that mocked tests could not. Default model thinking exhausted structured-output attempts. The runtime rejected bounded reviewer schemas with a grammar-parser error. Excluding an entire source chunk also hid evidence next to the claim and produced misleading results.&lt;/p&gt;

&lt;p&gt;The fixes were to disable optional thinking for these structured requests, send a portable generation schema while retaining full Pydantic response validation, and retrieve nearby source spans without allowing a claim to support itself. Assessments now distinguish missing evidence from defects and descriptive percentage-point changes from statistical significance.&lt;/p&gt;

&lt;p&gt;Thirty backend regression tests pass, including archive safety, exact quote grounding, evidence-location validation, status persistence, and report exports. Tests and the frontend production build also pass in an isolated installation without the private environment file. GitHub Actions runs the verification checks after pushing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;A research team should control which model and machine process its unpublished work. Compatible open-weight models can be served through the team's own Ollama endpoint, without a proprietary inference API key. A local endpoint keeps processing on the same machine; a trusted remote endpoint, such as the Spark used for this evaluation, receives analysis content.&lt;/p&gt;

&lt;p&gt;Open code makes the prompts, parsing, retrieval, and validation inspectable. Teams can adapt checks, replace a model, and run the workspace on infrastructure they control. Local or self-hosted inference still has hardware and electricity costs, but does not require a proprietary per-request inference bill.&lt;/p&gt;

&lt;p&gt;The present scope is LaTeX manuscript review. It does not fetch cited papers, interpret figure pixels, establish statistical validity, or replace scientific judgment. The next useful validation is an independently labeled evaluation and real researcher feedback.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>OutFit: A Little Movement. A Little More Outside.</title>
      <dc:creator>Mackenzie</dc:creator>
      <pubDate>Mon, 12 Oct 2026 02:22:12 +0000</pubDate>
      <link>https://dev.to/mackenzie-techdocs/outfit-a-little-movement-a-little-more-outside-den</link>
      <guid>https://dev.to/mackenzie-techdocs/outfit-a-little-movement-a-little-more-outside-den</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Getting outside can start with a small decision: what can I realistically do today?&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsrq7ddrgs0kzb4x33co3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsrq7ddrgs0kzb4x33co3.png" alt="OutFit application landing page" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;OutFit&lt;/strong&gt;, a fitness-planning prototype for adults who want to start moving or return to a regular routine. It turns a goal, available days, and recent activity into a seven-day plan with easy walking, gentle run-walk sessions, mobility, and rest.&lt;/p&gt;

&lt;p&gt;The idea is to make planning a short step toward doing something outside. Open Today, check the activity, and head out. Afterward, record what you actually did and add a recovery check-in.&lt;/p&gt;

&lt;p&gt;Plans can change as the week unfolds. If someone reports low energy or poor sleep, they can preview an adjustment to their remaining sessions before accepting it. Completed activity stays in their history.&lt;/p&gt;

&lt;p&gt;OutFit encourages outdoor movement while allowing an indoor alternative when going outside is unsuitable. It is a habit-building prototype, with conservative planning limits, rather than a medically validated fitness service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://youtu.be/HlDxsYxbqtw" rel="noopener noreferrer"&gt;Watch the OutFit demo on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/HlDxsYxbqtw" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;To try it locally, the README includes setup instructions and a walkthrough covering onboarding, plan generation, activity logging, and recovery adjustments. You can explore the core loop without a running model through the labelled fallback planner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mso-docs/OutFit-Fitness-Trainer" rel="noopener noreferrer"&gt;View the OutFit repository on GitHub&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mso-docs" rel="noopener noreferrer"&gt;
        mso-docs
      &lt;/a&gt; / &lt;a href="https://github.com/mso-docs/OutFit-Fitness-Trainer" rel="noopener noreferrer"&gt;
        OutFit-Fitness-Trainer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Made for the Hacktoberfest Week 1: Touch Grass on DEV.to!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;OutFit&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Licensed under the &lt;a href="https://github.com/mso-docs/OutFit-Fitness-Trainer/LICENSE" rel="noopener noreferrer"&gt;MIT License&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A little movement. A little more outside.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mso-docs.github.io/OutFit-Fitness-Trainer/" rel="nofollow noopener noreferrer"&gt;Live Demo Site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OutFit is a responsive, local fitness-planning prototype for the &lt;strong&gt;Touch Grass&lt;/strong&gt; hackathon. It helps an adult choose a realistic goal, preview and accept a seven-day plan, record activity and recovery, and review an adjustment. Local Ollama selects activities within deterministic policy limits. A validated fallback keeps the core loop working without a model.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/mso-docs/OutFit-Fitness-Trainer/docs/screenshots/today-desktop.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmso-docs%2FOutFit-Fitness-Trainer%2FHEAD%2Fdocs%2Fscreenshots%2Ftoday-desktop.png" alt="OutFit Today screen"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Demo video&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://youtu.be/HlDxsYxbqtw" rel="nofollow noopener noreferrer"&gt;Watch the OutFit hackathon demo on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run locally&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Use &lt;strong&gt;Node 24 LTS&lt;/strong&gt; and npm. From this repository:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm ci
cp .env.example .env
npm run build
npm start&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open &lt;strong&gt;&lt;a href="http://127.0.0.1:3001" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:3001&lt;/a&gt;&lt;/strong&gt; on the same computer. The server creates and migrates &lt;code&gt;data/outfit.db&lt;/code&gt; automatically. &lt;code&gt;.env&lt;/code&gt; loads at startup; existing environment variables take precedence. Stop with Ctrl+C. Restarting preserves saved profiles, logs, check-ins, and plans.&lt;/p&gt;
&lt;p&gt;For development:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm run dev&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open &lt;strong&gt;&lt;a href="http://127.0.0.1:5173" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:5173&lt;/a&gt;&lt;/strong&gt;. Vite proxies &lt;code&gt;/api&lt;/code&gt; to the loopback Fastify server…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mso-docs/OutFit-Fitness-Trainer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The repository includes the application, shared planning rules, automated tests, setup documentation, and verification notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;OutFit uses &lt;strong&gt;React, TypeScript, and Vite&lt;/strong&gt; for the interface, with a &lt;strong&gt;Fastify API and SQLite&lt;/strong&gt; for the local server edition. A separate browser edition stores application data in the browser and can connect directly to a user-configured Ollama endpoint.&lt;/p&gt;

&lt;p&gt;The AI planner runs through &lt;strong&gt;Ollama&lt;/strong&gt;. The verified setup used &lt;code&gt;qwen3.8:27b&lt;/code&gt; to generate structured seven-day proposals from the user’s profile and planning context.&lt;/p&gt;

&lt;p&gt;The model works within an activity catalog and explicit policy limits. Its output passes through Zod schema validation and additional checks for dates, available days, activity choices, training budgets, and recovery constraints. Users review and accept a preview before it becomes their plan.&lt;/p&gt;

&lt;p&gt;If inference fails or the response does not pass validation, OutFit produces a clearly labelled deterministic fallback. That keeps planning usable when a model is unavailable.&lt;/p&gt;

&lt;p&gt;One important design decision was keeping activity instructions in application code. The model selects structured activities; fixed text supplies the instructions. This makes the resulting plan easier to inspect and keeps generated prose from changing the prescribed activity.&lt;/p&gt;

&lt;p&gt;I also added a trainer chat for questions about habits and the saved plan. Chat does not automatically change accepted plans.&lt;/p&gt;

&lt;p&gt;Real Ollama planning and trainer responses were verified using synthetic data. The repository records 69 passing automated tests, plus desktop and mobile browser checks. The browser edition’s deployed HTTPS connection to real Ollama remains a separate verification step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;OutFit handles information about someone’s activity, recovery, and personal routine. Running inference on a machine they control makes privacy part of the architecture.&lt;/p&gt;

&lt;p&gt;With Ollama, users can choose an installed model and run the planner without sending their planning context to a hosted model provider. After the software and model downloads, the same-computer setup can operate using local resources.&lt;/p&gt;

&lt;p&gt;Open tooling also makes experimentation practical. I can change the model, inspect the prompts, revise the validation rules, and test the same planning contract without rebuilding around a particular provider’s API. There is no required hosted-model subscription or per-request API bill, although inference still requires suitable hardware.&lt;/p&gt;

&lt;p&gt;A closed API could generate a plan, but it would introduce an external service dependency and require sending context to that service. Local inference gave me control over those choices.&lt;/p&gt;

&lt;p&gt;For OutFit, that control supports the purpose of the project: help someone decide on a manageable activity, then leave the screen and do it.&lt;/p&gt;




</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Call Mac: Patient AI Tech Support for My Mom</title>
      <dc:creator>Mackenzie</dc:creator>
      <pubDate>Mon, 05 Oct 2026 02:20:06 +0000</pubDate>
      <link>https://dev.to/mackenzie-techdocs/call-mac-patient-ai-tech-support-for-my-mom-2ccm</link>
      <guid>https://dev.to/mackenzie-techdocs/call-mac-patient-ai-tech-support-for-my-mom-2ccm</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;My mom regularly needs help with technology, and I can usually only help her over the phone.&lt;/p&gt;

&lt;p&gt;The hard part is figuring out what she sees. I’m describing a button while she’s looking at a different screen, or explaining a step that assumes something she hasn’t learned yet. A small technical problem becomes a long conversation.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Call Mac&lt;/strong&gt; to give her patient guidance when I can’t be beside her.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frzqn1v34gh9lgnfk1v8z.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frzqn1v34gh9lgnfk1v8z.png" alt="Call Mac Home Screen" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;She describes a problem in her own words. Call Mac offers one manageable next step, then waits for her response: &lt;strong&gt;Fixed it&lt;/strong&gt;, &lt;strong&gt;Still broken&lt;/strong&gt;, or &lt;strong&gt;I don’t understand&lt;/strong&gt;. She can also describe what happened or what she sees.&lt;/p&gt;

&lt;p&gt;That feedback shapes the next response. The assistant can ask for missing context, explain an instruction, or change approach instead of continuing through a generic checklist.&lt;/p&gt;

&lt;p&gt;Saved profiles remember devices and technical comfort. Confirmed fixes stay in local memory, so future conversations can draw on what worked before. Guest mode lets someone try it without saving a profile.&lt;/p&gt;

&lt;p&gt;I wanted to build something around the way my mom needs help: clear instructions, room to ask questions, and patience when the first attempt doesn’t work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://youtu.be/4DAJSamZxpw" rel="noopener noreferrer"&gt;Watch the Call Mac video demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://mso-docs.github.io/Call-Mac/" rel="noopener noreferrer"&gt;GitHub Pages demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The local application includes saved profiles and remembered fixes.&lt;/p&gt;

&lt;p&gt;The repository also includes a separate browser demo with a labeled fictional walkthrough and an option to connect directly to the visitor’s own Ollama installation. That version keeps conversations in the current tab and does not include persistent memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mso-docs/Call-Mac" rel="noopener noreferrer"&gt;View Call Mac on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The repository includes installation guides, screenshots, automated tests, and fictional scenarios for evaluating model behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Call Mac uses &lt;strong&gt;Python, Streamlit, SQLite, Pydantic, and Gemma through Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Gemma handles the contextual conversation. Each request includes the user’s problem, device profile, previous attempts, observations, and relevant remembered fixes. The model chooses whether to ask a question, give an instruction, explain an existing step, or change approach.&lt;/p&gt;

&lt;p&gt;I used &lt;strong&gt;&lt;code&gt;gemma2:9b&lt;/code&gt; for most of my experiments&lt;/strong&gt;. The application defaults to &lt;strong&gt;&lt;code&gt;gemma3:4b&lt;/code&gt;&lt;/strong&gt; as a smaller starting point for users, and supports selecting other installed Gemma models.&lt;/p&gt;

&lt;p&gt;I request structured responses through Ollama and validate them with Pydantic before displaying them. Invalid output gets one retry. The application also rejects exact and near-identical failed instructions, although it cannot reliably detect every semantic repetition.&lt;/p&gt;

&lt;p&gt;Successful fixes are stored in SQLite and retrieved through keyword overlap. They are presented to the model as previous experiences, not guaranteed solutions.&lt;/p&gt;

&lt;p&gt;Feedback is saved before the next inference request. If the model server fails, the user can retry without losing what they already reported.&lt;/p&gt;

&lt;p&gt;Recognized liquid-damage situations have explicit safety routing that takes priority over ordinary troubleshooting.&lt;/p&gt;

&lt;p&gt;The readiness review passed &lt;strong&gt;44 Python tests&lt;/strong&gt; and browser integration checks covering validation, retries, privacy behavior, and mobile layout. These checks use controlled responses: they verify application behavior, not the correctness of every model answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Tech-support conversations can contain personal information: device details, filenames, and descriptions of what someone sees on their screen.&lt;/p&gt;

&lt;p&gt;Gemma’s open weights and Ollama make it possible to run inference on the same computer that stores those conversations. After downloading dependencies and model weights, that setup can work without a hosted AI service or per-request API payments.&lt;/p&gt;

&lt;p&gt;For a tool built for my mom, that control matters. I can inspect and change the prompts, adjust the response rules, and replace the model without rebuilding the application around a different provider.&lt;/p&gt;

&lt;p&gt;A closed API could power a similar interface, but it would introduce an external inference dependency. Local inference gives Call Mac a useful alternative.&lt;/p&gt;

&lt;p&gt;There are still boundaries: SQLite is unencrypted, and choosing a remote Ollama server sends conversation context to that server. Those details are documented.&lt;/p&gt;

&lt;p&gt;Call Mac is an MVP. It accepts text, cannot inspect the device, and can give incorrect advice. My next priority is trying it with my mom and discovering which instructions still assume too much.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used Codex to review the repository, run automated checks, investigate the browser-demo deployment, and help draft this submission.&lt;/p&gt;

&lt;p&gt;The session below contains curated excerpts from that final review. It does not include the earlier implementation history. Private machine paths and credentials were omitted.&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Codex"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Call Mac: challenge readiness review and submission writeup&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;is this repo ready to go? i also need a writeup for the challenge but it doesnt need to be commited here:&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I’ll check the repo’s setup, demo workflow, and validation, then draft a challenge writeup you can paste into DEV. I’ll use the DevRelay challenge and community skills to check the submission requirements and inform the review.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The main release blocker is that nearly all the app files are still untracked; the committed repo currently contains only the README and agent instructions. The project fits the open-weight AI requirement, but the writeup needs a true account of one specific person it’s for. The deadline is October 5 at 2:59 AM Eastern.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;My mom; she always needs help with technology and it is hard because I can only provide help over the phone&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-execcommand"&gt;exec_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python -m unittest discover -s tests -q&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ python -m unittest discover -s tests -q&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Ran 44 tests in 8.169s
OK&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-execcommand"&gt;exec_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python tools/export_demo_contract.py --check&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ python tools/export_demo_contract.py --check&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Demo prompt and schema match the Python app.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-execcommand"&gt;exec_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python -m pip check&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ python -m pip check&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;No broken requirements found.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I see the app has now been committed and pushed, and the Pages deployment is running—that clears the missing-code blocker. The secret scan found no leaks in the publishable files. There’s no LICENSE file yet; I recommend choosing one so others have permission to reuse the code. The writeup will use the existing video link while Pages finishes deploying.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-execcommand"&gt;exec_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python tests/browser_demo.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ python tests/browser_demo.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Browser demo checks passed: sample, live API flow, validation, retries, privacy, safety, and mobile layout.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The repo is ready for a challenge submission using your video demo. The browser demo isn’t deployed yet. The Pages workflow passed its tests but failed because Pages isn’t enabled. In Settings → Pages → Source, select GitHub Actions, then rerun it. You can submit with the video without waiting for Pages. I also recommend adding a LICENSE. Live model quality wasn’t revalidated in this review.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        8 of 8 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://dev.to/agent_sessions/call-mac-challenge-readiness-review-and-submission-writeup-gvripc"&gt;View the review session&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gemma powers Call Mac’s contextual troubleshooting, follow-up questions, and explanations. Most of my experimentation used &lt;code&gt;gemma2:9b&lt;/code&gt;; the app ships with &lt;code&gt;gemma3:4b&lt;/code&gt; as its default.&lt;/p&gt;




</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Hello World!</title>
      <dc:creator>Mackenzie</dc:creator>
      <pubDate>Tue, 16 Dec 2025 16:52:39 +0000</pubDate>
      <link>https://dev.to/mackenzie-techdocs/hello-world-2pnj</link>
      <guid>https://dev.to/mackenzie-techdocs/hello-world-2pnj</guid>
      <description>&lt;p&gt;Hope to build exciting things here! Looking forward to learning with everyone here!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
