<?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: Marco Sbragi</title>
    <description>The latest articles on DEV Community by Marco Sbragi (@marcobblk).</description>
    <link>https://dev.to/marcobblk</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%2F3819596%2F19259001-0460-4a19-8b99-0eec2a10ca17.jpg</url>
      <title>DEV Community: Marco Sbragi</title>
      <link>https://dev.to/marcobblk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcobblk"/>
    <language>en</language>
    <item>
      <title>Thalamus: LLM Cognitive Exoskeleton</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Thu, 20 Aug 2026 04:08:17 +0000</pubDate>
      <link>https://dev.to/marcobblk/thalamus-llm-cognitive-exoskeleton-5aah</link>
      <guid>https://dev.to/marcobblk/thalamus-llm-cognitive-exoskeleton-5aah</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;English version of Thalamus: &lt;a href="https://dev.to/marcobblk/thalamus-designing-an-llm-context-orchestrator-cognitive-exoskeleton-3ie9"&gt;Esoscheletro Cognitivo Per LLM&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. The Biological Origin: Why the "LLM Cortex" is Collapse
&lt;/h2&gt;

&lt;p&gt;In the human brain, the thalamus is not a simple passive cable pass-through. It is the mind's central relay station, sensory filter, and gating mechanism. It processes, prioritises, and routes incoming sensory information before it reaches the cerebral cortex. Without this active filter, the cortex would be inundated with endless ambient noise, leading to immediate cognitive collapse.&lt;/p&gt;

&lt;p&gt;Current AI development integrations (like VS Code Copilot or OpenWebUI) suffer from exactly the same problem. Every time the IDE interacts with a model, it sends a chaotic mass of unstructured context: proprietary system prompts, giant directory trees, static skill declarations, and entire unfiltered chat histories.&lt;/p&gt;

&lt;p&gt;We find ourselves feeding our "LLM cortex" a 150+KB "Token Soup" to answer trivial questions like "Where is this function defined?" This crude approach results in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Huge Computational Waste:&lt;/strong&gt; Biblical prefill times on local inference engines (Ollama, Llama.cpp), saturating VRAM and chip bandwidth (a critical issue when working locally on unified-memory hardware).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Drift &amp;amp; Entropy:&lt;/strong&gt; Models lose focus ("Lost in the Middle") due to contradictory instructions accumulated in previous rounds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idempotency Loss:&lt;/strong&gt; Duplicate or failed requests resend the same mass of tokens without maintaining a clean state.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. The Paradigm Shift: "Context Window as RAM, not Storage"
&lt;/h2&gt;

&lt;p&gt;LLM application builders are making a fundamental mistake: treating the context window like a hard disk.&lt;/p&gt;

&lt;p&gt;Recent research (formalized by projects like &lt;a href="https://mem0.ai/" rel="noopener noreferrer"&gt;&lt;em&gt;Mem0&lt;/em&gt; in 2026&lt;/a&gt;) demonstrates that the context window behaves exactly like system RAM: it is volatile, extremely computationally expensive, and its performance degrades exponentially as the number of input tokens increases.&lt;/p&gt;

&lt;p&gt;Furthermore, the most recent scientific literature &lt;a href="https://arxiv.org/abs/2603.27116,%20arXiv%202026" rel="noopener noreferrer"&gt;(&lt;em&gt;"The Price of Meaning: Why Every Semantic Memory System Forgets"&lt;/em&gt;&lt;/a&gt; has mathematically demonstrated an intrinsic limitation of systems based purely on semantic search (classical vector RAG): &lt;strong&gt;organizing information based solely on geometric meaning inevitably generates interference, false recalls, and amnesia under load.&lt;/strong&gt; Vector search is not sufficient for software development, where pinpoint precision is required.&lt;/p&gt;

&lt;p&gt;For this reason, &lt;strong&gt;Thalamus&lt;/strong&gt; introduces a hybrid, deterministic memory architecture:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The State Blackboard (Postgres JSONB):&lt;/strong&gt; AA persistent, centralized registry that tracks active "Dependency Contracts" (real DB schemas, API contracts, current task, and existing components). The LLM does not need to infer the project's state by rereading the history; it receives it as a deterministic snapshot.&lt;/li&gt;
&lt;li&gt;Episodic Memory (Qdrant Vector DB): Used exclusively to retrieve relevant historical fragments via Topic Routing (e.g., isolating vectors tagged &lt;code&gt;#database&lt;/code&gt; when working on the backend, preventing CSS noise from contaminating the SQL logic).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  3. The Evolution of Middleware: The "Tabula Rasa" Pattern
&lt;/h2&gt;

&lt;p&gt;In its first conceptual implementation, Thalamus operated passively via an n8n orchestrator, intercepting payloads and applying complex Regex to "scrub" the client's XML tags. This approach proved to be fragile and partial: it forced the need to constantly chase boilerplate changes from various providers.&lt;/p&gt;

&lt;p&gt;We then refined the architecture by switching to the &lt;strong&gt;Tabula Rasa (Active Reconstruction)&lt;/strong&gt; pattern.&lt;/p&gt;

&lt;p&gt;Thalamus now acts as a standalone &lt;strong&gt;Cognitive Middleware&lt;/strong&gt; written in FastAPI and placed behind a standardization gateway (&lt;strong&gt;LiteLLM&lt;/strong&gt;). When the client sends a request:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tabula Rasa:&lt;/strong&gt; Thalamus intercepts the call and discards the client's proprietary system prompt to avoid "token soup".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optional (Non-Mandatory) Degreaser:&lt;/strong&gt; The microservice includes a flexible degreaser module to clean up client tags and extract useful information (e.g., selected code or file references). However, &lt;strong&gt;it is not a blocking constraint&lt;/strong&gt;: if the degreaser fails or the client format changes, the pipeline does not stop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata Extraction:&lt;/strong&gt; Isolates the &lt;code&gt;message_id&lt;/code&gt; (to ensure idempotence on Postgres) and the &lt;code&gt;session_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active Reconstruction:&lt;/strong&gt; Build a dense and structured prompt from scratch by combining the Blackboard snapshot, the sliding window of the Postgres chat logs, and the last raw message from the user.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Why Thalamus?&lt;/p&gt;

&lt;p&gt;Before delving into the architecture, a brief reflection on how I came up with this idea (Italian only).&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.nospace.net/it/pillole/il-pappagallo-stocastico-oltre-la-metafora-verso-unintelligenza-aliena" rel="noopener noreferrer"&gt;The Stochastic Parrot: Beyond Metaphor, Toward an "Alien" Intelligence&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Pipeline Operation Flow v2
&lt;/h2&gt;

&lt;p&gt;The lifecycle of each interaction in Thalamus is divided into two asynchronous hooks:&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%2F5n28rjlnrfdydzo0pk94.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%2F5n28rjlnrfdydzo0pk94.png" alt="Thalamus Operation Flow v2" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pre-Hook (Context Summary)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Idempotency Check:&lt;/strong&gt; Checks whether the &lt;code&gt;message_id&lt;/code&gt; is already present in Postgres. If so, immediately returns the cached response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State &amp;amp; Vector Fusion:&lt;/strong&gt; Extracts the active &lt;code&gt;state_blackboard&lt;/code&gt; and queries Qdrant, filtering on the current &lt;code&gt;topic_tag&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Assembly:&lt;/strong&gt; Generates the final prompt by inserting structured update rules using the XML &lt;code&gt;&amp;lt;thalamus_update&amp;gt;&lt;/code&gt; tags.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Post-Hook (Learning and Writing State)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contract Parsing:&lt;/strong&gt; Intercepts the LLM output before it reaches the client, looking for the &lt;code&gt;&amp;lt;thalamus_update&amp;gt;&lt;/code&gt; block.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blackboard Patch:&lt;/strong&gt; Performs an atomic update (JSONB patch) on Postgres to record new architectural changes (e.g., newly created files or modified schemas).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Episodic Logging:&lt;/strong&gt; Saves the degreased chat turn (pure user/assistant only) in Postgres for future calls.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  5. Call for Collaboration: Get on Board
&lt;/h4&gt;

&lt;p&gt;Thalamus is an experimental open-source project and is currently a work in progress.&lt;/p&gt;

&lt;p&gt;I want to be extremely clear and transparent to avoid false expectations: currently, the infrastructure stack (Postgres + Qdrant + LiteLLM + FastAPI Core) is ready and executable in Docker, but only the logic and communication flow between the components has been tested. We've validated the interception infrastructure, persistence, and payload passing, but we're not yet looking at a turnkey assistant ready for daily use in production. The agent's deep logic and the stability of state changes on Blackboard are actively being developed.&lt;/p&gt;

&lt;p&gt;We're in the most exciting phase of the project: the one where theory collides with practice and there are many "open avenues" to explore. We're looking for developers, software architects, and local AI enthusiasts to collaborate on these open challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gravity RAG Algorithms:&lt;/strong&gt; Implement the logical time decay formula of the &lt;code&gt;gravity_score&lt;/code&gt; in conversational logs to mathematically decide when a message should "fade" to avoid saturating episodic memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blackboard Conflict Management:&lt;/strong&gt; Design resolution algorithms when the LLM proposes state changes that contradict active contracts or the database schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Multi-Model DB Tuning:&lt;/strong&gt; Optimize system prompt templates (hot-stored in Postgres in &lt;code&gt;system_config&lt;/code&gt;) to map different behaviors to different models (e.g., DeepSeek-R1 vs. local Llama-3).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to get your hands dirty with an architecture that challenges the limits of contest management.&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/msbragi" rel="noopener noreferrer"&gt;
        msbragi
      &lt;/a&gt; / &lt;a href="https://github.com/msbragi/thalamus" rel="noopener noreferrer"&gt;
        thalamus
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;🧠 Thalamus: LLM Context Orchestrator &amp;amp; Cognitive Exoskeleton&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Stop sending the "token soup." Start orchestrating high-density cognitive flows based on Active Prompt Reconstruction.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;
⚠️ Project Status: Work In Progress (Flow-Tested Concept)&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Thalamus is currently a highly experimental, open-source concept. &lt;strong&gt;The orchestration infrastructure (FastAPI, Postgres, Qdrant, and LiteLLM) is fully scaffolded and containerized via Docker, but currently only the logical communication flow has been validated.&lt;/strong&gt; It is not yet a plug-and-play production assistant. We are actively developing the core agentic reasoning loops and state blackboard patch synchronization.&lt;/em&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 The Problem: Context Overflow &amp;amp; "Lost in the Middle"&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Current LLM-IDE integrations (VS Code Copilot, Continue, OpenWebUI) suffer from a structural flaw: they treat the LLM's context window as an hard disk rather than RAM. Every single query sends up to &lt;strong&gt;150KB+ of unformatted "Token Soup"&lt;/strong&gt; (redundant system prompts, static tool definitions, full unstructured chat histories, and massive directory trees).&lt;/p&gt;
&lt;p&gt;This approach causes:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;…&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/msbragi/thalamus" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;💬 &lt;em&gt;Leave a comment below with your thoughts or open an issue in the repository to start discussing the design!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Thalamus: Esoscheletro cognitivo per LLM</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Thu, 13 Aug 2026 07:47:19 +0000</pubDate>
      <link>https://dev.to/marcobblk/thalamus-designing-an-llm-context-orchestrator-cognitive-exoskeleton-3ie9</link>
      <guid>https://dev.to/marcobblk/thalamus-designing-an-llm-context-orchestrator-cognitive-exoskeleton-3ie9</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;For English version &lt;a href="https://dev.to/marcobblk/thalamus-llm-cognitive-exoskeleton-5aah"&gt;Thalamus: LLM Cognitive Exoskeleton&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. L'Origine Biologica: Perché la "Corteccia LLM" sta collassando
&lt;/h2&gt;

&lt;p&gt;Nel cervello umano, il &lt;strong&gt;talamo&lt;/strong&gt; non è un semplice passacavo passivo. È la stazione di rilancio centrale, il filtro sensoriale e il meccanismo di gating della mente. Elabora, prioritizza e instrada le informazioni sensoriali in entrata prima che raggiungano la corteccia cerebrale. Senza questo filtro attivo, la corteccia verrebbe sommersa da un rumore ambientale infinito, portando al collasso cognitivo immediato.&lt;/p&gt;

&lt;p&gt;Le attuali integrazioni AI per lo sviluppo (come VS Code Copilot o OpenWebUI) soffrono esattamente dello stesso problema. Ogni volta che l'IDE interagisce con un modello, invia una massa caotica di contesto non strutturato: system prompt proprietari, alberi di directory giganti, dichiarazioni di skill statiche e intere cronologie di chat non filtrate. &lt;/p&gt;

&lt;p&gt;Ci troviamo a nutrire la nostra "corteccia LLM" con una &lt;strong&gt;"Token Soup" un minestrone da oltre 150KB&lt;/strong&gt; per rispondere a domande banali come &lt;em&gt;"Dove è definita questa funzione?"&lt;/em&gt;. Questo approccio rozzo comporta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Spreco Computazionale enorme:&lt;/strong&gt; Tempi di prefill biblici sui motori di inferenza locali (Ollama, Llama.cpp), saturando la VRAM e la larghezza di banda del chip (un problema critico quando si lavora in locale su hardware a memoria unificata).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Context Drift &amp;amp; Entropia:&lt;/strong&gt; I modelli perdono focus ("Lost in the Middle") a causa di istruzioni contraddittorie accumulatesi nei turni precedenti.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Perdita di Idempotenza:&lt;/strong&gt; Richieste duplicate o fallite rinviano la stessa massa di token senza mantenere uno stato pulito.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Il Cambio di Paradigma: "Context Window as RAM, not Storage"
&lt;/h2&gt;

&lt;p&gt;I builder di applicazioni LLM stanno commettendo un errore fondamentale: &lt;strong&gt;trattare la context window come un hard disk&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;La ricerca recente (formalizzata da progetti come &lt;a href="https://mem0.ai/" rel="noopener noreferrer"&gt;&lt;em&gt;Mem0&lt;/em&gt; nel 2026&lt;/a&gt;) dimostra che la context window si comporta esattamente come la &lt;strong&gt;RAM di sistema&lt;/strong&gt;: è volatile, estremamente costosa in termini di calcolo e le sue prestazioni degradano esponenzialmente all'aumentare dei token in input. &lt;/p&gt;

&lt;p&gt;Inoltre, la letteratura scientifica più recente &lt;a href="https://arxiv.org/abs/2603.27116" rel="noopener noreferrer"&gt;(&lt;em&gt;"The Price of Meaning: Why Every Semantic Memory System Forgets"&lt;/em&gt;&lt;/a&gt;, arXiv 2026) ha dimostrato matematicamente un limite intrinseco dei sistemi basati puramente sulla ricerca semantica (RAG vettoriale classico): &lt;strong&gt;l'organizzazione delle informazioni basata solo sul significato geometrico genera inevitabilmente interferenze, falsi richiami e amnesia sotto carico.&lt;/strong&gt; La ricerca vettoriale non basta per lo sviluppo software, dove serve precisione millimetrica.&lt;/p&gt;

&lt;p&gt;Per questo &lt;strong&gt;Thalamus&lt;/strong&gt; introduce un'architettura di memoria ibrida e deterministica:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;La Lavagna di Stato (State Blackboard in Postgres JSONB):&lt;/strong&gt; Un registro persistente e centralizzato che traccia i "Contratti di Dipendenza" attivi (schemi DB reali, contratti API, task corrente e componenti esistenti). L'LLM non deve dedurre lo stato del progetto rileggendo la cronologia; lo riceve come snapshot deterministico.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Memoria Episodica (Qdrant Vector DB):&lt;/strong&gt; Utilizzata esclusivamente per recuperare frammenti storici pertinenti tramite &lt;strong&gt;Topic Routing&lt;/strong&gt; (es. isolando i vettori taggati &lt;code&gt;#database&lt;/code&gt; quando si lavora sul backend, evitando che il rumore del CSS contamini la logica SQL).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  3. L'Evoluzione del Middleware: Il Pattern "Tabula Rasa"
&lt;/h2&gt;

&lt;p&gt;Nella prima implementazione concettuale, Thalamus agiva in modalità passiva tramite un orchestratore n8n, intercettando i payload e applicando Regex complesse per "sgrassare" i tag XML del client. Questo approccio si è rivelato fragile e parziale: costringeva a rincorrere continuamente i cambi di boilerplate dei vari provider.&lt;/p&gt;

&lt;p&gt;Abbiamo quindi ridefinito l'architettura passando al pattern &lt;strong&gt;Tabula Rasa (Ricostruzione Attiva)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Thalamus ora agisce come un &lt;strong&gt;Cognitive Middleware autonomo&lt;/strong&gt; scritto in FastAPI e posizionato dietro un gateway di standardizzazione (&lt;strong&gt;LiteLLM&lt;/strong&gt;). Quando il client invia una richiesta:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Tabula Rasa:&lt;/strong&gt; Thalamus intercetta la chiamata e scarta il system prompt proprietario del client per evitare la "token soup".&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Sgrassatore Opzionale (Non-Mandatory):&lt;/strong&gt; Il microservizio include un modulo di sgrassaggio flessibile per ripulire i tag del client ed estrarre informazioni utili (es. codice selezionato o riferimenti ai file). Tuttavia, &lt;strong&gt;non è un vincolo bloccante&lt;/strong&gt;: se lo sgrassatore fallisce o il formato del client cambia, la pipeline non si interrompe.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Estrazione dei Metadati:&lt;/strong&gt; Isola il &lt;code&gt;message_id&lt;/code&gt; (per garantire l'idempotenza su Postgres) e il &lt;code&gt;session_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Ricostruzione Attiva:&lt;/strong&gt; Compila da zero un prompt denso e strutturato unendo lo snapshot della Blackboard, la sliding window dei log di chat in Postgres e l'ultimo messaggio puro dell'utente.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Perché Thalamus?&lt;/p&gt;

&lt;p&gt;Prima di entrare nell'architettura, una breve riflessione sul perché sono arrivato a questa idea.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.nospace.net/it/pillole/il-pappagallo-stocastico-oltre-la-metafora-verso-unintelligenza-aliena" rel="noopener noreferrer"&gt;Il pappagallo stocastico: oltre la metafora, verso un'intelligenza “aliena”&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Flusso Operativo della Pipeline v2
&lt;/h2&gt;

&lt;p&gt;Il ciclo di vita di ogni interazione su Thalamus si divide in due hook asincroni:&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%2F5n28rjlnrfdydzo0pk94.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%2F5n28rjlnrfdydzo0pk94.png" alt="Flusso Operativo Thalamus v2" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pre-Hook (Sintesi del Contesto)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Idempotency Check:&lt;/strong&gt; Verifica se il &lt;code&gt;message_id&lt;/code&gt; è già presente in Postgres. Se sì, restituisce immediatamente la risposta memorizzata nella cache.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;State &amp;amp; Vector Fusion:&lt;/strong&gt; Estrae la &lt;code&gt;state_blackboard&lt;/code&gt; attiva e interroga Qdrant applicando il filtro sul &lt;code&gt;topic_tag&lt;/code&gt; corrente.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Prompt Assembly:&lt;/strong&gt; Genera il prompt finale inserendo le regole di aggiornamento strutturate tramite i tag XML &lt;code&gt;&amp;lt;thalamus_update&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Post-Hook (Apprendimento e Scrittura dello Stato)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Contract Parsing:&lt;/strong&gt; Intercetta l'output dell'LLM prima che raggiunga il client, cercando il blocco &lt;code&gt;&amp;lt;thalamus_update&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Blackboard Patch:&lt;/strong&gt; Esegue un aggiornamento atomico (patch JSONB) su Postgres per registrare i nuovi fatti architettonici (es. nuovi file creati o schemi modificati).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Episodic Logging:&lt;/strong&gt; Salva il turno di chat sgrassato (solo user/assistant puri) in Postgres per le chiamate future.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  5. Call for Collaboration: Sali a Bordo
&lt;/h4&gt;

&lt;p&gt;Thalamus è un progetto sperimentale open-source ed è attualmente un &lt;strong&gt;work in progress&lt;/strong&gt; a tutti gli effetti. &lt;/p&gt;

&lt;p&gt;Ci tengo a essere estremamente chiaro e trasparente per evitare false aspettative: &lt;strong&gt;al momento lo stack infrastrutturale (Postgres + Qdrant + LiteLLM + FastAPI Core) è pronto ed eseguibile in Docker, ma è stato testato esclusivamente il flusso (flow) logico e di comunicazione tra i componenti&lt;/strong&gt;. Abbiamo validato l'infrastruttura di intercettazione, la persistenza e il passaggio dei payload, ma non siamo ancora di fronte a un assistente "chiavi in mano" pronto per l'uso quotidiano in produzione. La logica profonda dell'agente e la stabilità delle modifiche di stato sulla Blackboard sono in fase di sviluppo attivo.&lt;/p&gt;

&lt;p&gt;Siamo nella fase più entusiasmante del progetto: quella in cui la teoria si scontra con la pratica e le "strade aperte" da esplorare sono moltissime. Stiamo cercando sviluppatori, software architect ed entusiasti di IA locale per collaborare su queste sfide aperte:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Algoritmi di Gravity RAG:&lt;/strong&gt; Implementare la formula logica di decadimento temporale del &lt;code&gt;gravity_score&lt;/code&gt; nei log conversazionali, per decidere matematicamente quando un messaggio deve "svanire" per non saturare la memoria episodica.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Gestione dei Conflitti della Blackboard:&lt;/strong&gt; Progettare algoritmi di risoluzione quando l'LLM propone modifiche allo stato che contraddicono i contratti attivi o lo schema database.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Prompt Tuning Multi-Modello su DB:&lt;/strong&gt; Ottimizzare i template del system prompt (salvati a caldo su Postgres in &lt;code&gt;system_config&lt;/code&gt;) per mappare comportamenti diversi su modelli diversi (es. DeepSeek-R1 vs Llama-3 locali).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se vuoi sporcarti le mani su un'architettura che sfida i limiti della gestione del contest.&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/msbragi" rel="noopener noreferrer"&gt;
        msbragi
      &lt;/a&gt; / &lt;a href="https://github.com/msbragi/thalamus" rel="noopener noreferrer"&gt;
        thalamus
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;🧠 Thalamus: LLM Context Orchestrator &amp;amp; Cognitive Exoskeleton&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Stop sending the "token soup." Start orchestrating high-density cognitive flows based on Active Prompt Reconstruction.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;
⚠️ Project Status: Work In Progress (Flow-Tested Concept)&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Thalamus is currently a highly experimental, open-source concept. &lt;strong&gt;The orchestration infrastructure (FastAPI, Postgres, Qdrant, and LiteLLM) is fully scaffolded and containerized via Docker, but currently only the logical communication flow has been validated.&lt;/strong&gt; It is not yet a plug-and-play production assistant. We are actively developing the core agentic reasoning loops and state blackboard patch synchronization.&lt;/em&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 The Problem: Context Overflow &amp;amp; "Lost in the Middle"&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Current LLM-IDE integrations (VS Code Copilot, Continue, OpenWebUI) suffer from a structural flaw: they treat the LLM's context window as an hard disk rather than RAM. Every single query sends up to &lt;strong&gt;150KB+ of unformatted "Token Soup"&lt;/strong&gt; (redundant system prompts, static tool definitions, full unstructured chat histories, and massive directory trees).&lt;/p&gt;
&lt;p&gt;This approach causes:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;…&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/msbragi/thalamus" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;💬 &lt;em&gt;Lascia un commento qui sotto con le tue riflessioni o apri una Issue sul repository per iniziare a discutere del design!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>opensource</category>
      <category>python</category>
    </item>
    <item>
      <title>Beyond AI: The Solitude of the Developer and the Search for True Human Connection</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Sat, 11 Jul 2026 09:20:35 +0000</pubDate>
      <link>https://dev.to/marcobblk/beyond-ai-the-solitude-of-the-developer-and-the-search-for-true-human-connection-22i3</link>
      <guid>https://dev.to/marcobblk/beyond-ai-the-solitude-of-the-developer-and-the-search-for-true-human-connection-22i3</guid>
      <description>&lt;p&gt;Lately, I've been doing some deep personal reflection. I'm talking about myself, I hope no one misunderstands, on how pervasive the use of AI has become in my daily development workflow.&lt;/p&gt;

&lt;p&gt;Through a bit of self-analysis, I've discovered some interesting dynamics. Dependencies often arise from the desire to fill a void. But what kind of void does an experienced developer like me face?&lt;/p&gt;

&lt;p&gt;As a professional, I have the skills. Sure, AI helps me get things done faster, but the final product is always the translation of my vision; if I don't fully understand the solution, I discard it. I'm not looking for "magic," I'm looking for efficiency. Yet, I realize I've used AI to fill a specific void: the need for discussion.&lt;/p&gt;

&lt;p&gt;Software development is inherently solitary. The satisfaction of a successful "execution" after hours of discussions, refinements, and clashes over an architecture is an experience I miss today. The chat interface is always there, ready to respond. But there's a problem: it's a "yes-man." Even when I force it to be critical or provocative via the system's prompts, I know it's just reciting a script to please me. There's no conviction, no risk of error, none of the friction that arises when a colleague courageously defends their vision, perhaps one that conflicts with mine.&lt;/p&gt;

&lt;p&gt;We are part of a huge community, but debate often remains superficial. One might argue that posts and comments are enough, but anyone who has tried knows it doesn't work very well: a debate is truly alive only when there is no latency. In comments, the time between thinking, writing, and waiting for a response diminishes the energy of the exchange, turning it into a series of monologues rather than a dialogue.&lt;/p&gt;

&lt;p&gt;Why don't we try creating "virtual tables" where we can discuss projects, architectures, and technical choices with the natural rhythm of a conversation? Direct, real-time discussions, in person or remotely, where the exchange of ideas can spark sparks, without the filter (and delay) of a keyboard used in deferred mode.&lt;/p&gt;

&lt;p&gt;But if the benefits are so clear, why aren't we doing this already? The main obstacle is trust. We are still so reluctant to create open spaces for discussion because the fear that our ideas might be "stolen" is still strong—perhaps a relic of an era when value resided in secrecy. Today, however, value no longer lies in how we implement, but in the depth of why we make certain choices.&lt;/p&gt;

&lt;p&gt;Overcoming this barrier means more than simply opening up to debate; it means rediscovering the potential of true collaboration. How many times have we abandoned an ambitious project because, alone, we lacked the time, the complementary vision, or the drive needed to take it beyond the prototype stage? Together, we could not only solve complex bugs or validate architectures, but also generate synergies that currently remain trapped in our own minds. Collaboration means multiplying perspectives, not sharing credit.&lt;/p&gt;

&lt;p&gt;I know it's difficult. We must break down established barriers, but the opportunities for professional and personal growth, in an industry increasingly dominated by depersonalization, are enormous.&lt;/p&gt;

&lt;p&gt;I'm not looking for someone who agrees with me. I'm looking for someone with the courage of their convictions to challenge my ideas. Who else is tired of the "convenience" of AI and wants to return to peer-to-peer debate?&lt;/p&gt;

&lt;p&gt;I'm very curious to hear your thoughts. Have you ever experienced this form of "technological isolation"? Do you ever seek interaction in AI that isn't purely technical? I look forward to your thoughts and reactions.&lt;/p&gt;




&lt;p&gt;🇮🇹 Nota di Trasparenza dell'Autore&lt;/p&gt;

&lt;p&gt;Ho pensato e scritto il post in italiano ed ho ho utilizzato un LLM esclusivamente per la traduzione in inglese, per rendere il contenuto accessibile alla community internazionale.&lt;/p&gt;

&lt;p&gt;🇬🇧 Author's Transparency Note&lt;/p&gt;

&lt;p&gt;I conceptualized and wrote the entire piece in my native language, Italian. I used an LLM strictly as a translation tool to adapt the content into English, to make it accessible to the global community.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>development</category>
      <category>brainstorming</category>
      <category>collaboration</category>
    </item>
    <item>
      <title>Code Is Craft</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Fri, 10 Jul 2026 05:38:12 +0000</pubDate>
      <link>https://dev.to/marcobblk/code-is-craft-19fb</link>
      <guid>https://dev.to/marcobblk/code-is-craft-19fb</guid>
      <description>&lt;p&gt;I've been reading several posts on Dev.to lately that struck a chord with me, confirming that I’m not alone in my perspective. IT professionals have long been viewed as purely rational beings, relying solely on logic and reason as their only tools—and often carrying that same mindset into their daily lives. I would like to challenge this belief, at least from my perspective and for those who share it.&lt;/p&gt;

&lt;p&gt;After 40 years in IT, analyzing problems and writing software, I have come to a conclusion that no framework, no language, and no AI has changed: building something that truly works—simple or complex—is not just about technical skill. It is craftsmanship. And craftsmanship is art.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond the Syntax
&lt;/h2&gt;

&lt;p&gt;An artisan and a technician can both build a chair. The technician follows the manual. The artisan understands why each joint is cut at that specific angle, feels when the wood requires a different approach, and leaves a part of themselves in the finished object.&lt;/p&gt;

&lt;p&gt;Software is no different. Syntax can be learned in a week. Design patterns can be memorized in a month. But knowing when to break a pattern, why a certain abstraction fits a specific problem, and making a system elegant rather than merely functional—this is the part that isn't taught in a course. This is the touch of the artist and the artisan.&lt;/p&gt;

&lt;p&gt;I have always believed that the best code reads like well-written prose: clear, intentional, with nothing wasted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forty Years of Learning: From Mentors to Machine Intelligence
&lt;/h2&gt;

&lt;p&gt;Tools and technology have changed more radically than the craft itself. When I started in 1985, knowledge came from people—true mentors, colleagues who had already made every mistake worth making. Then came books and manuals, almost exclusively in English, as that was the language of computing. If you couldn't read and understand English, you were lost.&lt;/p&gt;

&lt;p&gt;Then came the internet. Google and Stack Overflow became the collective memory of every developer on the planet. Suddenly, the answer to almost any technical question was a search away. Our ability to find answers increased significantly.&lt;/p&gt;

&lt;p&gt;Today, we have AI. And with AI came "Vibe Coding"—a phenomenon where the barrier to entry has lowered to the point where almost anyone can generate working code by describing what they want in natural language. Everyone is a developer now. Or so it seems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Only Thing AI Cannot Replace
&lt;/h2&gt;

&lt;p&gt;In music, two musicians can play the same score note for note. One executes it. The other interprets it. The difference isn't in the notes—it's in what the performer brings from within. Those who, like me, love the guitar know very well that David Gilmour, Mark Knopfler, John Mayer, and Jimi Hendrix don't just "play"; they express themselves through the instrument.&lt;/p&gt;

&lt;p&gt;The same applies to software. Two developers given the same brief will build two completely different systems. One will be technically correct. The other will be elegant, extensible, and a pleasure to maintain ten years later. The difference isn't in the requirements—it's in the mind (the feeling) that shapes the solution.&lt;/p&gt;

&lt;p&gt;Creativity cannot be automated. The ability to look at an existing solution and see how it could be improved, to invent a new abstraction that simplifies everything, to know when the right answer is less code rather than more lines—these are human qualities. The "machine" works from what already exists. The human works from what could exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vibe Coding: Everyone is a Developer Now. Or Maybe Not?
&lt;/h2&gt;

&lt;p&gt;I don't dismiss Vibe Coding. It is a genuine evolution, just like Google was. It has broken down a barrier that has always existed in IT: the wall between an idea and a functional solution. Today, you no longer need a specialized intermediary; any person can perform this transformation. This is fantastic for those who don't want to make programming their profession.&lt;/p&gt;

&lt;p&gt;To these individuals, I would offer a suggestion, and I invite my colleagues, instructors, and mentors to share this thought if they agree: "Questions are more important than answers." Ask why that code was written in that specific way. You don't need to understand every detail, but you should strive to grasp the big picture.&lt;/p&gt;

&lt;p&gt;For those who want to make this a profession, there is a fundamental difference between generating code and understanding it. A generated solution that you cannot read, test, or extend is not a solution—it is a dependency. You haven't built something; you’ve borrowed something that doesn't belong to you.&lt;/p&gt;

&lt;p&gt;An artisan using a tool is still an artisan. Someone who uses the tool but doesn't understand the "wood" is not. The instrument doesn't make the artist or the artisan. Knowledge, experience, and judgment do.&lt;/p&gt;

&lt;p&gt;The programmer is not disappearing. The role is splitting in two: the AI generates, the human validates and designs. The latter requires a deeper level of understanding.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Workflow: AI as a Thought Partner
&lt;/h2&gt;

&lt;p&gt;As I have written on my blog in the &lt;a href="https://www.nospace.net/en/blog-en/code-is-craft" rel="noopener noreferrer"&gt;Code Is Craft&lt;/a&gt; series, I use AI in my work every day. But not as a ghostwriter. Not as a code generator from which I blindly copy and paste.&lt;/p&gt;

&lt;p&gt;I use AI because I want it to think like me. I want it to follow my mental processes in designing a solution, to use my architectural patterns, and to reflect my way of tackling problems. When I ask it to generate something, I read every line. I challenge every choice. I make it my own before moving forward.&lt;/p&gt;

&lt;p&gt;If there is a technique or concept I don't yet know, I use AI to understand it—not to bypass the learning process. The goal is always that by the next session, that knowledge belongs to me. AI has helped me grow; it hasn't helped me avoid growing.&lt;/p&gt;

&lt;p&gt;That distinction is everything. AI is not here to replace what I don't know. It is here to help me become someone who knows more.&lt;/p&gt;

&lt;p&gt;This is the only workflow I trust.&lt;/p&gt;




&lt;p&gt;If you are interested in how I have lived my work over these many years, visit my website at &lt;a href="https://www.nospace.net" rel="noopener noreferrer"&gt;https://www.nospace.net&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And you, colleagues—both the "old-school" like me and the newcomers—what do you think? Leave a comment below. Critical reflection is what we need most right now.&lt;/p&gt;




&lt;p&gt;🇮🇹 Nota di Trasparenza dell'Autore&lt;/p&gt;

&lt;p&gt;Ho concepito e scritto l'intero pezzo nella mia lingua madre, l'italiano. Ho utilizzato un LLM esclusivamente come mero strumento di traduzione verso l'inglese, per rrendere il contenuto accessibile alla community internazionale.&lt;/p&gt;

&lt;p&gt;🇬🇧 Author's Transparency Note&lt;/p&gt;

&lt;p&gt;I conceptualized and wrote the entire piece in my native language, Italian. I used an LLM strictly as a translation tool to adapt the content into English, to make it accessible to the global community.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>career</category>
      <category>development</category>
    </item>
    <item>
      <title>Docker on WSL2: Why I Ditched Docker Desktop for a Linux "Sandbox"</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Tue, 30 Jun 2026 09:04:48 +0000</pubDate>
      <link>https://dev.to/marcobblk/docker-on-wsl2-why-i-ditched-docker-desktop-for-a-linux-sandbox-3a39</link>
      <guid>https://dev.to/marcobblk/docker-on-wsl2-why-i-ditched-docker-desktop-for-a-linux-sandbox-3a39</guid>
      <description>&lt;p&gt;I've always developed in a Windows environment, but I've always been fascinated by the Linux world, so much so that most of my projects were then deployed on Linux. What's always disappointed me, however, is how Windows handles the file system with heavy loads related to databases or uncompiled runtime code. For this reason, despite developing in Windows for many years, I've used Linux virtual machines (VMWare or VirtualBox) only for database servers.&lt;/p&gt;

&lt;p&gt;I've used many IDEs, moving from simple Notepad to the Visual Basic IDE to Eclipse to NetBeans, and finally landing on Visual Studio Code. VSCode is the perfect environment for what I'm doing now, using the most modern languages ​​and development tools. In particular, I believe Docker was a turning point, not just for me but for the entire developer community. So I installed Docker Desktop and started developing my first projects. I created my own stacks, using vscode with remote devcontainers, but I quickly realized that the system was slow and unreliable, with crashes, slowdowns, and excessive memory usage. I was envious of other developers using Linux or Mac, where everything "seemed" to work perfectly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsiveness&lt;/li&gt;
&lt;li&gt;Very fast file system volumes&lt;/li&gt;
&lt;li&gt;Very few crashes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Switching to Linux wasn't an option, so I decided to use wsl2 and rethought my entire strategy. I uninstalled Docker Desktop, installed a Debian Trixie wsl distro for development, and an Ubuntu distro. I installed docker on Debian, installed all the tools I needed—git, npm, etc.—and created my own project folder and integration with vscode. Like magic, you move to the workspace and type "code .". And voilà, if you've installed the right extensions on VSCode, everything works perfectly.&lt;/p&gt;

&lt;p&gt;So far, nothing new. Now many of you will say: well done, you've discovered hot water (an Italian idiom for stating the obvious). Was there any need to write a post about things we expert developers have been doing for years? Sorry guys, I know I haven't discovered anything new, but maybe there's something from this point on that might be of interest—maybe not to everyone, but I believe and hope to many of you who develop on WSL2 in a Windows environment.&lt;/p&gt;

&lt;p&gt;As I was saying, everything's perfect, or maybe not. I started having some doubts when I realized my development distro had grown to 60GB. Oh yes, because Docker is no joke; with images, layers, and caches, it fills up quickly.&lt;/p&gt;

&lt;p&gt;Solutions? Not many. The first that came to mind was having multiple distros, one for each project. Hmm! That's not my style. I prefer to have a nice environment with everything I need. Let's analyze the problem...&lt;/p&gt;

&lt;p&gt;Who "bloats" the filesystem?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker data&lt;/li&gt;
&lt;li&gt;Data volumes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a "bare-metal" Linux environment, we can separate the disks and mount them to achieve context separation. Well, that was my solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The distro that contains only the OS and development tools&lt;/li&gt;
&lt;li&gt;An external disk for Docker data and work (images, layers, cache, etc.)&lt;/li&gt;
&lt;li&gt;A possible external disk for storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Easy! No, or at least not that easy, because Docker data is on &lt;code&gt;/var/lib/containerd&lt;/code&gt; or &lt;code&gt;/var/lib/docker&lt;/code&gt;, so we need to create a VHDX disk, move the data from the original distro, delete the data from &lt;code&gt;/var/lib/containerd&lt;/code&gt;, and create the mount point to host the newly created external disk. And the solution is less simple than you might assume from these simple points.&lt;/p&gt;

&lt;p&gt;Okay, you're probably tired of all this chatter, so let's get to the solution. Let's define the operational steps for maximum security and then see how to implement them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Export the original distro so as not to operate on our existing system (obviously, this isn't necessary if you're starting on a new distro).&lt;/li&gt;
&lt;li&gt; Import the distro with a different tag to recognize it.&lt;/li&gt;
&lt;li&gt; Create an empty vhdx disk (ext4) from Windows.&lt;/li&gt;
&lt;li&gt; Mount the disk from Windows (&lt;code&gt;wsl --mount&lt;/code&gt;) to make it visible to the distro.&lt;/li&gt;
&lt;li&gt; Log into the distro and temporarily mount the new disk (e.g., on &lt;code&gt;/mnt/containerd&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; Stop the &lt;code&gt;containerd&lt;/code&gt;, &lt;code&gt;docker&lt;/code&gt;, and &lt;code&gt;docker.socket&lt;/code&gt; services if they are running.&lt;/li&gt;
&lt;li&gt; Copy &lt;code&gt;/var/lib/containerd&lt;/code&gt; to &lt;code&gt;/mnt/containerd&lt;/code&gt; with &lt;code&gt;rsync&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; Rename &lt;code&gt;/var/lib/containerd&lt;/code&gt; to &lt;code&gt;/var/lib/containerd.bak&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; Create the mount point &lt;code&gt;/var/lib/containerd&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANT!!!&lt;/strong&gt; Before proceeding further, you need to disable the autostart of the &lt;code&gt;containerd&lt;/code&gt;, &lt;code&gt;docker&lt;/code&gt;, and &lt;code&gt;docker.socket&lt;/code&gt; services. You'll understand why, though many of you may already be guessing. At this point, you can close the distro with &lt;code&gt;exit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We have our separate OS and large data on an external VHDX. Now we need to test that everything works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log into the distro&lt;/li&gt;
&lt;li&gt;Mount the disk&lt;/li&gt;
&lt;li&gt;Run some docker commands&lt;/li&gt;
&lt;li&gt;If everything works, delete &lt;code&gt;/var/lib/containerd.bak&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Automate the process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below are step-by-step instructions based on my system, easily adaptable to your needs.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1: Preparation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. View existing distros
&lt;/h4&gt;

&lt;p&gt;wsl --list -v&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Shut down WSL to ensure data consistency
&lt;/h4&gt;

&lt;p&gt;wsl --shutdown&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Export your current distro (e.g., Debian) as a backup
&lt;/h4&gt;

&lt;p&gt;wsl --export Debian C:\wsl\debian_backup.tar&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Import the distro into a new folder to create the "Sandbox" environment
&lt;/h4&gt;

&lt;p&gt;wsl --import DebianDev C:\wsl\DebianDev C:\wsl\debian_backup.tar&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create the VHDX Disk (PowerShell)
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Create the 64GB dynamic virtual disk.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Warning: New-VHD is only available if Hyper-V is enabled. Alternatively, use diskpart or qemu-img.exe.
&lt;/h4&gt;

&lt;p&gt;New-VHD -Path "C:\wsl\debian\docker-data.vhdx" -SizeBytes 64GB -Dynamic&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Mount the disk on WSL as a bare device (without mounting it in the Windows filesystem)
&lt;/h4&gt;

&lt;p&gt;wsl --mount "C:\wsl\debian\docker-data.vhdx" --bare&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Migration (Within the WSL Distro)
&lt;/h3&gt;

&lt;p&gt;wsl -d DebianDev&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Identify the new disk (usually /dev/sdc or sdd)
&lt;/h4&gt;

&lt;p&gt;lsblk&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Format the disk in ext4 (WARNING: Verify the correct device)
&lt;/h4&gt;

&lt;p&gt;sudo mkfs.ext4 /dev/sdc&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Create a temporary mount point and mount the disk
&lt;/h4&gt;

&lt;p&gt;sudo mkdir /mnt/containerd&lt;br&gt;
sudo mount /dev/sdc /mnt/containerd&lt;/p&gt;
&lt;h4&gt;
  
  
  4. Stop Docker services and disable autostart (essential!)
&lt;/h4&gt;

&lt;p&gt;sudo systemctl stop docker.socket docker containerd&lt;br&gt;
sudo systemctl disable docker.socket docker containerd&lt;/p&gt;
&lt;h4&gt;
  
  
  5. Move data with rsync to preserve permissions and links
&lt;/h4&gt;
&lt;h4&gt;
  
  
  In newer Docker and containerd installations, use /var/lib/containerd/
&lt;/h4&gt;

&lt;p&gt;sudo rsync -avPH /var/lib/containerd/ /mnt/containerd/&lt;/p&gt;
&lt;h4&gt;
  
  
  6. Rename the old folder for security
&lt;/h4&gt;

&lt;p&gt;sudo mv /var/lib/docker /var/lib/containerd.bak&lt;/p&gt;
&lt;h4&gt;
  
  
  7. Create the final mount point
&lt;/h4&gt;

&lt;p&gt;sudo mkdir /var/lib/containerd&lt;br&gt;
sudo umount /mnt/containerd&lt;br&gt;
exit&lt;/p&gt;

&lt;p&gt;At this point we can test it from the terminal as administrator:&lt;/p&gt;

&lt;p&gt;wsl --list -v # check that DebianDev is present.&lt;br&gt;
wsl --shutdown # for safety, not necessary if everything stopped.&lt;br&gt;
wsl --mount --vhd C:\wsl\debian\docker-data.vhdx --bare&lt;br&gt;
wsl -d DebianDev&lt;br&gt;
sudo mount /dev/sd(x) /var/lib/containerd # where x is the 64 GB disk device.&lt;br&gt;
sudo systemctl start containerd&lt;br&gt;
sudo systemctl start docker&lt;br&gt;
docker ps&lt;br&gt;
docker images # if the images are visible, everything is fine.&lt;br&gt;
sudo rm -rf /var/lib/containerd.bak # (we still have 2 backups)&lt;br&gt;
exit&lt;/p&gt;


&lt;h3&gt;
  
  
  Automating the Mount
&lt;/h3&gt;

&lt;p&gt;Now for the part that gave me a headache. Automate everything with a simple click. It seems easy at first glance, but unfortunately, after many failed attempts due to race conditions on the services that started before the disk was mounted, I adopted this solution. There are others, but this is mine. I created a bash script.&lt;/p&gt;

&lt;p&gt;Before creating the script, you need to find the exact UUID of your newly created ext4 disk. You can do this by running blkid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;blkid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for the UUID associated with your disk (e.g., /dev/sdc). Keep this UUID handy, as you will need it to replace  in the script below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# /usr/local/bin/mount-containerd.sh&lt;/span&gt;

&lt;span class="nv"&gt;LOGFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/log/mount-containerd.log
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Starting mount-containerd"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;

&lt;span class="c"&gt;# 1. Stop services first&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Stopping services"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
systemctl stop docker.socket
systemctl stop docker
systemctl stop containerd

&lt;span class="c"&gt;# 2. Clean the mount directory&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Cleaning /var/lib/containerd"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/containerd/&lt;span class="k"&gt;*&lt;/span&gt;

&lt;span class="c"&gt;# 3. Mount the VHDX&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;1 15&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nv"&gt;DEVICE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;blkid &lt;span class="nt"&gt;-U&lt;/span&gt; &amp;lt;YOUR-UUID-HERE&amp;gt; 2&amp;gt;/dev/null&lt;span class="si"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DEVICE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Device found: &lt;/span&gt;&lt;span class="nv"&gt;$DEVICE&lt;/span&gt;&lt;span class="s2"&gt; at attempt &lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
        mount &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DEVICE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; /var/lib/containerd
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Mount done"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;

        &lt;span class="c"&gt;# 4. Restore services&lt;/span&gt;
        systemctl start containerd
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Services started"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
        &lt;span class="nb"&gt;exit &lt;/span&gt;0
    &lt;span class="k"&gt;fi
    &lt;/span&gt;&lt;span class="nb"&gt;sleep &lt;/span&gt;2
&lt;span class="k"&gt;done

&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - ERROR: device not found after 30 seconds"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
&lt;span class="nb"&gt;exit &lt;/span&gt;1

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I chose &lt;code&gt;/usr/local/bin&lt;/code&gt;, but you can put it wherever you want.&lt;/p&gt;

&lt;p&gt;Edit &lt;code&gt;/etc/wsl.conf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[boot]&lt;/span&gt;
&lt;span class="py"&gt;systemd&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/usr/local/bin/mount-containerd.sh"&lt;/span&gt;

&lt;span class="nn"&gt;[interop]&lt;/span&gt;
&lt;span class="py"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="py"&gt;appendWindowsPath&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;

&lt;span class="nn"&gt;[user]&lt;/span&gt;
&lt;span class="py"&gt;default&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;node # change with your work user, or comment if you're running as root.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Exit WSL and create the file &lt;code&gt;C:\wsl\debian\start-dev.bat&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;@echo &lt;span class="na"&gt;off&lt;/span&gt;

&lt;span class="c"&gt;:: Execute as administrator or wsl --mount doesn't work&lt;/span&gt;

&lt;span class="c"&gt;:: Mount the VHDX&lt;/span&gt;
&lt;span class="kd"&gt;wsl&lt;/span&gt; &lt;span class="na"&gt;--mount --vhd &lt;/span&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\wsl\debian\docker&lt;span class="na"&gt;-data&lt;/span&gt;.vhdx &lt;span class="na"&gt;--bare &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kr"&gt;nul&lt;/span&gt;

&lt;span class="c"&gt;:: Open the distro&lt;/span&gt;
&lt;span class="kd"&gt;wsl&lt;/span&gt; &lt;span class="na"&gt;-d &lt;/span&gt;&lt;span class="kd"&gt;Debian&lt;/span&gt;&lt;span class="na"&gt;-Dev --cd &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Right-click and run as administrator.&lt;/p&gt;

&lt;p&gt;Important: With this method, you won't be able to launch &lt;code&gt;wsl -d DebianDev&lt;/code&gt; from the terminal without first mounting the disk. This is an acceptable solution for me, but if it isn't for you, there's a workaround. Create a task in Task Scheduler that, when the system or your user starts, runs the &lt;code&gt;wsl --mount&lt;/code&gt; of the vhdx, at which point the distro will behave like all the other WSL distros because it will find the disk already available without using &lt;code&gt;start-dev.bat&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For added security, I added this simple block to the shell start script (in my case, &lt;code&gt;zsh&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# --- CONTAINERD MOUNT CHECK ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; mountpoint &lt;span class="nt"&gt;-q&lt;/span&gt; /var/lib/containerd&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"⚠️ WARNING: docker-data.vhdx not mounted!"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;N.B.&lt;/strong&gt; In addition to the docker data, we could also create an external disk for storage volumes using the same procedure. Just add the mount to &lt;code&gt;/usr/local/bin/mount-containerd.sh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Last but not least, to recover space on the main disk, you'll need to compact it with &lt;code&gt;diskpart&lt;/code&gt; because the space deleted from &lt;code&gt;/var/lib/containerd.bak&lt;/code&gt; is not automatically recovered. I've tried to make this guide as simple and clear as possible, but I understand there are a lot of steps involved; I hope I haven't made any mistakes. If you have found different solutions, write it in the comments, or let's discuss it together.&lt;/p&gt;




&lt;p&gt;Side notes: pre requisites based on my current implementetion &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WSL version &amp;gt;=0.67.6 o native support to systemd, enbled by /etc/wsl.conf.&lt;/li&gt;
&lt;li&gt;Docker Engine latest version to have native containerd instead of traditional /var/lib/docker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have different versions the logic remains the same.&lt;/p&gt;




&lt;p&gt;🇮🇹 Nota di Trasparenza dell'Autore&lt;/p&gt;

&lt;p&gt;L'architettura, gli script e le strategie presentate in questo articolo sono originali al 100%, frutto della mia esperienza diretta. Ho concepito e scritto l'intero pezzo nella mia lingua madre, l'italiano. Ho utilizzato un LLM esclusivamente come mero strumento di traduzione verso l'inglese, per rifinire la terminologia tecnica e rendere il contenuto accessibile alla community internazionale.&lt;/p&gt;

&lt;p&gt;🇬🇧 Author's Transparency Note&lt;/p&gt;

&lt;p&gt;The architecture, scripts, and strategies presented in this article are 100% original, born from my direct field experience. I conceptualized and wrote the entire piece in my native language, Italian. I used an LLM strictly as a translation tool to adapt the content into English, refining the technical terminology to make it accessible to the global community.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>linux</category>
      <category>microsoft</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>"Dead Man's Float" Approach To Surviving the Wave</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Tue, 16 Jun 2026 05:58:28 +0000</pubDate>
      <link>https://dev.to/marcobblk/dead-mans-float-approach-to-surviving-the-wave-2f99</link>
      <guid>https://dev.to/marcobblk/dead-mans-float-approach-to-surviving-the-wave-2f99</guid>
      <description>&lt;p&gt;Today, I want to talk about something that has absolutely nothing to do with code, system engineering, or software architecture. Or maybe, if we look closely enough, it has everything to do with it.&lt;/p&gt;

&lt;p&gt;We live and work in chaotic times. Sure, today’s modern toolsets and AI assistants allow us to offload some of the tedious, day-to-day syntax, making the core technical work slightly more relaxed. Yet, anyone in our industry knows the harsh truth: burnout is always lurking just around the corner. The screen stays on, the backlog grows, and the cognitive load compounds.&lt;/p&gt;

&lt;p&gt;There is a song by an Italian songwriter, Luciano Ligabue, called &lt;em&gt;&lt;a href="https://www.youtube.com/watch?v=wBEDjLACn_U" rel="noopener noreferrer"&gt;"Metti in circolo il tuo amore"&lt;/a&gt;&lt;/em&gt; (Circulate Your Love). A specific stanza has stayed with me for years:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“E ti sei opposto all'onda / Ed è lì che hai capito / Che più ti opponi e più ti tira giù / E ti senti ad una festa / Per cui non hai l'invito / Per cui gli inviti adesso falli tu”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In English it sounds more or less like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“And you fought the wave / And that's when you realized / That the more you fight it, the more it pulls you down / And you feel like you're at a party / To which you have no invitation / So from now on, you make the invitations yourself”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These few words triggered a deep reflection in me, and they eventually shaped my personal survival philosophy: &lt;strong&gt;"Fare il morto a galla"&lt;/strong&gt;—doing the &lt;strong&gt;dead man's float&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you are far out at sea, exhausted, and the currents take over, fighting the water is a mathematical error. The more you thrash, the more oxygen you burn, the denser your body becomes, and the faster you sink. The only scientifically and existentially correct strategy is to stop kicking. You flip onto your back, offer your maximum surface area to the water, and let the sea hold you up. &lt;/p&gt;

&lt;p&gt;In our profession, doing the float is the only real way to catch your breath when you are drowning in inputs. It is a strategic timeout. It’s not giving up; it’s an extreme optimization of your remaining energy when the system is in thermal throttling.&lt;/p&gt;

&lt;p&gt;But Ligabue’s lyrics go further: &lt;em&gt;“So from now on, you make the invitations yourself.”&lt;/em&gt; That line carries a profound, almost architectural weight. It’s about shifting from a purely reactive state to an active one. It means stopping the constant scramble to meet external expectations, and instead, redefining the rules of your own space. I could spend paragraphs explaining exactly what this means to me, but I prefer to leave it open. In engineering, we value clean abstraction; in life, some concepts are best left for the reader to implement in their own way.&lt;/p&gt;

&lt;p&gt;I know this is incredibly difficult to practice. The external inputs—the notifications, the metrics, the pressure to always perform—are overwhelming. The world demands constant computation.&lt;/p&gt;

&lt;p&gt;But sometimes, the most productive thing a senior mind can do is to drop the frequency to zero, lie back, and float. &lt;/p&gt;

&lt;p&gt;And you? When the waves get too high and the current is strong, how do you catch your breath?&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>burnout</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Software Development as a Philosophical Act: Beyond Syntactic Sugar</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Fri, 12 Jun 2026 05:49:46 +0000</pubDate>
      <link>https://dev.to/marcobblk/software-development-as-a-philosophical-act-beyond-syntactic-sugar-2n32</link>
      <guid>https://dev.to/marcobblk/software-development-as-a-philosophical-act-beyond-syntactic-sugar-2n32</guid>
      <description>&lt;p&gt;Recently, a reader Alton &lt;a href="https://dev.to/alton_zheng_15fb4bf0d73a3/comment/39b0p"&gt;left a comment&lt;/a&gt; on my &lt;a href="https://dev.to/bumbulik0/700-followers-800-reads-in-3-months-maybe-old-school-engineering-still-resonates-4jb5"&gt;previous post&lt;/a&gt;, asking a challenging question: &lt;em&gt;How do you approach teaching or mentoring others to maintain an "old school" engineering mindset in today’s AI-driven environment?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This made me reflect deeply on my years as an instructor. Long before the advent of Large Language Models, I always operated under a core principle: &lt;strong&gt;software development — when understood not merely as typing syntax, but as architecting solutions — is fundamentally rooted in philosophy.&lt;/strong&gt; I am not talking about textbook academic philosophy, though perhaps that would help too. I am talking about a structural mindset. Of course, as engineers, we must eventually translate thought into practice and deliver a concrete, working result. But the philosophical approach to a problem is what wins the long game.&lt;/p&gt;




&lt;p&gt;Years ago, when I was teaching Visual Basic, I constantly drilled into my students that searching for a solution is entirely independent of the programming language. The language itself is just an implementation detail, a tool to be studied. &lt;/p&gt;

&lt;p&gt;During the first week or two, some students would actually protest. They would look at me and say, &lt;em&gt;"You aren't teaching us."&lt;/em&gt; They expected predefined standards, snippets to copy, and rote memorization. But I refused to give them the answers. I enforced boundaries, models, and constraints. Over time, as they realized that the solutions to complex bugs and logic loops were suddenly originating from their own reasoning without my intervention, they finally understood.&lt;/p&gt;

&lt;p&gt;They weren't just learning to code; they were learning how to think.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core: Seeing the Forest, Not Just the Trees
&lt;/h2&gt;

&lt;p&gt;In my career, the time spent typing code has always been a fraction of the time spent analyzing the problem and exploring potential paths. A trained engineering mind doesn't just fix the immediate bug or implement the current feature request; it looks at how the system will evolve over time. It anticipates the client's next needs by looking at the whole forest, not just the single tree. It requires freeing your imagination to find non-conventional solutions or to refine existing ones.&lt;/p&gt;

&lt;p&gt;This is the exact opposite of how modern AI operates. LLMs predict the next token or the next line of code based on a statistical distribution derived from existing literature. By definition, AI operates within the boundaries of the statistically probable. But in real-world engineering, the standard, 'statistically probable' solution is rarely the elegant, tailor-made architecture your specific context demands.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One might argue that AI's randomness can sometimes mimic human intuition, occasionally assembling existing pieces into a novel puzzle no one has thought of before. But there is a fundamental difference: AI's randomness is a blind statistical roll of the dice. Human intuition, on the other hand, is a purposeful leap driven by an understanding of constraints. AI can generate a thousand unpredictable combinations, but it lacks the contextual judgment to know which puzzle actually makes engineering sense. It can suggest the pieces, but the architect must still design the picture.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Analyzing and verifying requirements is a continuous mental exercise. Even if your reasoning ultimately leads you to rewrite standard, well-known patterns, the process itself is invaluable. It is the mental gym that keeps your brain flexible, disciplined, and ready for the unexpected.&lt;/p&gt;




&lt;h2&gt;
  
  
  Language is a Detail, Autonomy is the Goal
&lt;/h2&gt;

&lt;p&gt;If you focus solely on the syntax of a language—whether it was Visual Basic decades ago, a trendy JavaScript framework last week, or an AI prompt today—you are trapping yourself in a commodity skill. When you look at a problem from a high architectural level, the language becomes a mere deployment detail.&lt;/p&gt;

&lt;p&gt;As a mentor, my goal has never been to hand out ready-made snippets. It is to force the developer to step back and look at the structural layout. That "click" moment—when a junior developer realizes they solved a complex architecture loop entirely on their own—is the moment they transition from being a simple executor to a true professional. &lt;/p&gt;

&lt;p&gt;In the AI era, this shift is critical. If you only know syntax, you are letting the AI do the thinking, which makes you obsolete. If you master structural reasoning, you learn how to learn. The AI becomes your high-speed compiler, but you remain the sole custodian of the system design.&lt;/p&gt;




&lt;h2&gt;
  
  
  Case Study: GemmaLink – Architecture Wins Over Syntax
&lt;/h2&gt;

&lt;p&gt;I had a chance to put this philosophy to the test during a recent challenge on DEV.to. The goal was to build an application leveraging Google's lightweight Gemma models. &lt;/p&gt;

&lt;p&gt;Instead of getting hypnotized by the AI model itself, I started with an architectural question: &lt;em&gt;What would be genuinely useful, fun, and capable of running entirely local—respecting privacy with zero cloud dependencies?&lt;/em&gt; That is how the idea for &lt;a href="https://dev.to/bumbulik0/gemmalink-your-private-eye-assistant-3fgg"&gt;GemmaLink&lt;/a&gt; was born.&lt;/p&gt;

&lt;p&gt;Then came the engineering constraints. I knew the target user shouldn't have to deal with installing Docker, configuring Python environments, or setting up complex LLM studios. The app needed to be a single, lightweight, zero-dependency binary that could run anywhere. &lt;/p&gt;

&lt;p&gt;The ideal architectural fit for this was Go—a language I only knew at a basic level. &lt;/p&gt;

&lt;p&gt;Did I let that stop me? No. Because the language is just a detail. I used AI extensively to generate the Go syntax, acting as a tireless assistant. But the core architecture, the strict definition of requirements, the data layout, the testing, and the debugging? That was entirely mine. Without a structured engineering mindset setting the boundaries, the AI would have just generated generic Python scripts completely useless for my deployment constraints. Architecture won over syntax.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: The Human Element of Mentoring
&lt;/h2&gt;

&lt;p&gt;At the end of the day, passing down an "old school" mindset cannot be compressed into a rigid set of mathematical rules. Mentoring isn't something you can automate because it is built entirely on empathy, active listening, and human communication. A good mentor must first know how to listen, setting aside their own biases to understand how the student thinks.&lt;/p&gt;

&lt;p&gt;My goal is to instill rigor and structure, but the curiosity, the drive, and the final decisions must always belong to the developer. It took me years of practice, experimentation, and trial to shape this mindset—and truth be told, even I struggle to fully rationalize it sometimes. But that is exactly how it should be. We are not all wired the same way, and each of us connects with others differently.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;More of my thoughts and technical articles can be found at &lt;a href="https://www.nospace.net" rel="noopener noreferrer"&gt;nospace.net&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;What do you think? Does this "learning to learn" approach make sense in your current AI-driven context? Let's discuss in the comments below.&lt;/p&gt;




</description>
      <category>discuss</category>
      <category>mentorship</category>
      <category>programming</category>
      <category>architecture</category>
    </item>
    <item>
      <title>700+ Followers, 800+ Reads in 3 Months: Maybe "Old School" Engineering Still Resonates</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Thu, 11 Jun 2026 04:59:38 +0000</pubDate>
      <link>https://dev.to/marcobblk/700-followers-800-reads-in-3-months-maybe-old-school-engineering-still-resonates-4jb5</link>
      <guid>https://dev.to/marcobblk/700-followers-800-reads-in-3-months-maybe-old-school-engineering-still-resonates-4jb5</guid>
      <description>&lt;p&gt;I was looking at my &lt;strong&gt;DEV dashboard&lt;/strong&gt; recently, and I am genuinely moved. In the last three months, I’ve recorded approximately &lt;strong&gt;800+ reads&lt;/strong&gt;, and &lt;strong&gt;700+ of you&lt;/strong&gt; have decided to follow my journey. That is a nearly &lt;strong&gt;1:1 ratio&lt;/strong&gt; between readers and followers—a statistic I never expected.&lt;/p&gt;

&lt;p&gt;In an industry often obsessed with the "next big thing," seeing that a traditional, &lt;strong&gt;"old school"&lt;/strong&gt; approach to engineering resonates so strongly is both surprising and deeply rewarding.&lt;/p&gt;

&lt;h3&gt;
  
  
  It’s Not About the Tool, It’s About the Mindset
&lt;/h3&gt;

&lt;p&gt;Throughout my &lt;strong&gt;40-year career&lt;/strong&gt;, I’ve seen countless "revolutionary" technologies come and go. I’ve transitioned from manual memory management to high-level frameworks, and from monolithic architectures to Dockerized environments.&lt;/p&gt;

&lt;p&gt;Today, the conversation is dominated by &lt;strong&gt;AI&lt;/strong&gt;. But for someone who has witnessed the evolution of compilers and the birth of modern IDEs, I see it for what it is: &lt;strong&gt;another powerful tool at our disposal.&lt;/strong&gt; Tools change, as they always have, but the &lt;strong&gt;engineering mindset&lt;/strong&gt; remains constant. Whether you are writing a Bash script, designing a RAG system, or refactoring a legacy Java monolith, what matters is the discipline behind the work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Understanding the "why"&lt;/strong&gt; before the "how."&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Treating code as a long-term asset&lt;/strong&gt;, not a disposable snippet.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Prioritizing architecture and maintainability&lt;/strong&gt; over raw speed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quality Over Quantity
&lt;/h3&gt;

&lt;p&gt;What strikes me most isn't just the number of followers, but the quality of the time you spend with my words. My data shows peaks of &lt;strong&gt;908 seconds (over 15 minutes)&lt;/strong&gt; of average reading time on March 27th and April 2nd. Even recently, on June 9th, you spent an average of nearly &lt;strong&gt;8 minutes (477 seconds)&lt;/strong&gt; per post.&lt;/p&gt;

&lt;p&gt;In a world of skim-reading and short attention spans, &lt;strong&gt;you are studying&lt;/strong&gt;. You are looking for depth, and that gives me great hope and strength to continue writing for the future of our industry.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Now?
&lt;/h3&gt;

&lt;p&gt;Now that I am retired, I am no longer obsessed with production deadlines or the need to satisfy executives and clients. I finally have the time to look back and share what I've learned.&lt;/p&gt;

&lt;p&gt;As a &lt;strong&gt;self-taught developer&lt;/strong&gt; who has "broken and fixed" systems for four decades, I feel my role now is to help maintain this focus on craftsmanship. It is easy to get lost in automation, but automation is only as good as the engineer directing it. I want to share the &lt;strong&gt;rigor and "maestria"&lt;/strong&gt; that allow a developer to remain calm when a migration fails or a system crashes—moments where no tool can substitute for experience and a solid mental framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Lesson That Always Works
&lt;/h3&gt;

&lt;p&gt;I’ve learned one thing above all: &lt;strong&gt;"Questions" are more important than "answers."&lt;/strong&gt; This applies not only to code development but to general design and every aspect of life.&lt;/p&gt;

&lt;p&gt;As long as you keep asking questions—to yourselves, to a mentor, to a colleague, or to an AI—your curiosity to learn and improve will lead you to exceptional results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank You
&lt;/h3&gt;

&lt;p&gt;To the 700+ of you who have joined me: &lt;strong&gt;thank you&lt;/strong&gt;. You are proving that "old school" values—analysis, architecture, and engineering integrity—are far from obsolete. They are, in fact, the very foundation upon which all new technologies must be built.&lt;/p&gt;

&lt;p&gt;I am excited to continue this conversation in my series: &lt;strong&gt;"Beyond the Prompt: Why Experience Still Matters."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Let’s keep building with the right mindset.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;You can also find me here:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Blog:&lt;/strong&gt; &lt;a href="https://www.nospace.net" rel="noopener noreferrer"&gt;nospace.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/msbragi?tab=repositories" rel="noopener noreferrer"&gt;msbragi repositories&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>community</category>
      <category>learning</category>
      <category>discuss</category>
      <category>developers</category>
    </item>
    <item>
      <title>Beyond the Prompt: Why Experience Still Matters</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Mon, 08 Jun 2026 05:21:59 +0000</pubDate>
      <link>https://dev.to/marcobblk/beyond-the-prompt-why-experience-still-matters-39kp</link>
      <guid>https://dev.to/marcobblk/beyond-the-prompt-why-experience-still-matters-39kp</guid>
      <description>&lt;h2&gt;
  
  
  My profile: 40 years of IT evolution
&lt;/h2&gt;

&lt;p&gt;My name is Marco and I am an IT professional with 40 years of experience spent across software development, analysis, and architecture. Technically I am retired, but I continue to dedicate myself to code to keep my mind active and to give back to a community that has given me so much. Today, I do not look at innovation with suspicion, but with the method of someone who can distinguish a passing trend from a paradigm shift. Now I am dedicating a large part of my time to studying Artificial Intelligence systems and RAG (Retrieval-Augmented Generation), developing a privacy-oriented Agnostic RAG System. I am not a "Luddite": I am a craftsman learning to use a new chisel, fully aware however that the hand guiding it must know the grain of the wood better than the tool itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core: The engineering as craft
&lt;/h2&gt;

&lt;p&gt;This series of articles was born to reaffirm a concept that AI marketing is trying to obscure: software engineering is a craft, not a simple sequence of instructions dictated to a machine. We are sliding dangerously toward "Vibe Coding", where the important thing is that the code "looks" like it works at first glance. However, a vast gulf exists between coding speed and architectural solidity.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Vibe Coding:&lt;/strong&gt; It relies on the illusion of speed and the myth of an 8x increased productivity. It often ignores technical debt and complexity, limiting itself to pasting generated snippets that no one truly understands under the hood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Senior Architect Mindset:&lt;/strong&gt; It considers code as a long-term asset. Here, productivity is measured in maintainability and the capacity to prevent structural failures. An architect does not stop at "it works now", but evaluates architectural patterns and the total cost of ownership of the software.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The true danger of the 8x myth is &lt;strong&gt;Recursive AI&lt;/strong&gt;: the concrete risk of feeding models mediocre code generated by other models, creating a spiral of quality degradation that only an experienced human eye can interrupt.&lt;/p&gt;




&lt;h2&gt;
  
  
  Serie's roadmap: The first 5 stages of awareness
&lt;/h2&gt;

&lt;p&gt;Through five fundamental stages, with a bit of ironic salt, I will accompany you into my "old craftsman" workshop to explore how to remain engineers in a world of prompts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/beyond-the-8x-productivity-myth-a-40-year-perspective-on-recursive-ai-and-the-craft-of-bk8"&gt;Beyond the 8x Productivity Myth&lt;/a&gt;:&lt;/strong&gt; A cold shower on real productivity. We will analyze the dangers of Recursive AI and why pure speed, without architectural control, is the fastest way to destroy a project.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/ai-coding-philosophy-2eoj"&gt;AI coding philosophy&lt;/a&gt;:&lt;/strong&gt; How to integrate LLMs into the workflow without losing your soul. A reflection on how to delegate the fatigue, but never the responsibility for quality.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/clean-ai-development-3e51"&gt;Clean AI Development&lt;/a&gt;:&lt;/strong&gt; We apply the principles of Clean Code to automated generation. If the AI writes dirty code and you accept it, the problem is not the machine, it's you.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/the-senior-architect-simulator-how-i-hacked-copilot-to-hate-my-code-36ib"&gt;The Senior Architect Simulator&lt;/a&gt;:&lt;/strong&gt; A provocative challenge. I will show you how I "hacked" Copilot to force it to hate mediocre code, forcing it to respect exceptionally high standards.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/ai-or-not-ai-19k1"&gt;AI, or not AI&lt;/a&gt;:&lt;/strong&gt; The final dilemma. Learning to understand when AI is a valuable ally and when instead it is necessary to turn off the prompt and return to pure, "Old School" logic.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The real value of experience for new devs generation
&lt;/h2&gt;

&lt;p&gt;To you, young colleagues: AI is a formidable tool, but do not let it become your cognitive crutch. The true differentiator of your career will never be the speed in generating a function, but the capacity to understand what happens "under the hood".&lt;br&gt;
I have seen languages born and die, but the logic of a Docker container or the structure of a database remain constant. Remember: AI will not save you at 3 AM when a corrupted database migration crashes production. In those moments, the "pain" of experience — that visceral awareness of how data moves — is the only thing that matters. Master the basics, study architectures, and use AI to noble your professionalism, not to replace it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion and debates
&lt;/h2&gt;

&lt;p&gt;I look forward to seeing you on DEV.to for the next chapters of this series. My virtual office is always open: I am available to discuss anything I know — from Java to NestJS — or to explore together the new frontiers I am studying. The comparison between my past and your future is the engine that keeps our profession alive.&lt;br&gt;
Always keep one thing in mind: quality code is the only currency that never depreciates, regardless of the technological paradigm of the moment. We will read each other soon.&lt;/p&gt;

</description>
      <category>development</category>
      <category>ai</category>
      <category>discuss</category>
      <category>learning</category>
    </item>
    <item>
      <title>Beyond the 8x Productivity Myth: A 40-Year Perspective on Recursive AI and the "Craft" of Engineering</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Sun, 07 Jun 2026 08:44:35 +0000</pubDate>
      <link>https://dev.to/marcobblk/beyond-the-8x-productivity-myth-a-40-year-perspective-on-recursive-ai-and-the-craft-of-bk8</link>
      <guid>https://dev.to/marcobblk/beyond-the-8x-productivity-myth-a-40-year-perspective-on-recursive-ai-and-the-craft-of-bk8</guid>
      <description>&lt;h3&gt;
  
  
  Introduction: The Ghost in the Codebase
&lt;/h3&gt;

&lt;p&gt;I started my professional journey in &lt;strong&gt;1986&lt;/strong&gt;. It was the era of Honeywell systems, Commodore 64s, and developing management software in &lt;strong&gt;DataFlex&lt;/strong&gt; on Concurrent-CPM. Back then, "compute" was a luxury; we planned every line of code because a single compilation could take enough time to grab a coffee—or two. &lt;/p&gt;

&lt;p&gt;Fast forward to 2026. I am reading the latest Anthropic paper, &lt;strong&gt;&lt;a href="https://www.anthropic.com/institute/recursive-self-improvement" rel="noopener noreferrer"&gt;"When AI builds itself"&lt;/a&gt;&lt;/strong&gt;. It describes a world where the "doing"—writing code, running experiments, and identifying bugs—is being delegated to autonomous agents. As a retired architect who still keeps his mind active by building, I see a fascinating but dangerous gap between the productivity metrics of big labs and the reality of sustainable, professional engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The "8x Productivity" Illusion
&lt;/h3&gt;

&lt;p&gt;The Anthropic report makes a staggering claim: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Today, Anthropic engineers on average ship 8x as much code per quarter as they did from 2021-2025"&lt;/em&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Furthermore, as of May 2026, more than &lt;strong&gt;80% of the code&lt;/strong&gt; merged into their codebase is authored by Claude. To a manager, this sounds like a dream. To a Senior Architect, it looks like a potential nightmare of technical debt. &lt;/p&gt;

&lt;p&gt;Anthropic themselves admit a crucial limitation: while AI is superhuman at optimizing code (achieving up to a &lt;strong&gt;52x speedup&lt;/strong&gt; in specific tests), there are still &lt;em&gt;"large performance gaps when it comes to Claude exercising judgement in choosing goals"&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;In my 40 years, I’ve learned that "choosing the goal" &lt;em&gt;is&lt;/em&gt; the job. Writing the syntax is just the clerical work. If we automate the clerical part but lose the "judgment," we aren't 8x more productive—we are just 8x faster at creating complexity we don't fully understand.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Economic Barrier: $18,000 for a "Thought"
&lt;/h3&gt;

&lt;p&gt;One passage in the paper highlights the massive infrastructure gap facing freelancers and small shops:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The agents recovered 97% of the gap [in a research project] over 800 cumulative hours and used roughly $18,000 in compute"&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most independent developers cannot afford an &lt;strong&gt;$18,000 "experimental loop"&lt;/strong&gt; for a single feature. This is why I built &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/llm-manager-orchestrating-ollama-and-llamacpp-with-pure-bash-181p"&gt;LLM-Manager&lt;/a&gt;&lt;/strong&gt; using &lt;strong&gt;Pure Bash&lt;/strong&gt;. My goal is the opposite of a recursive loop that burns through thousands of dollars in cloud tokens. I want &lt;strong&gt;zero-overhead&lt;/strong&gt;, OS-level access, and hardware-aware orchestration that allows a developer to run local models (Ollama/Llama.cpp) with the efficiency of a 1980s engineer but the power of 2026 AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The "Vibe Coding" Trap and the Need for Determinism
&lt;/h3&gt;

&lt;p&gt;We are seeing a trend called &lt;strong&gt;"Vibe Coding"&lt;/strong&gt;—the idea that you can just "talk" to an AI, trust the output, and let it build. But "vibes" don't catch critical bugs. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Moonwell DeFi Hack:&lt;/strong&gt; In February 2026, a basic miscalculation in an AI-generated smart contract (authored by Claude Code) led to a &lt;strong&gt;$1.7 million loss&lt;/strong&gt; in four minutes.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Responsibility Gap:&lt;/strong&gt; AI does not feel the weight of a system downtime. It simply continues to generate "statistically plausible" answers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why my project, &lt;strong&gt;&lt;a href="https://github.com/msbragi/RAG-System-Dist" rel="noopener noreferrer"&gt;RAG-System-Dist&lt;/a&gt;&lt;/strong&gt;, prioritizes &lt;strong&gt;determinism and traceability&lt;/strong&gt; over opaque automation. I don't want an AI that "vibes" its way to an answer. I want a system where every response is linked to a source that I, the human expert, can verify with a single "Point-and-Click".&lt;/p&gt;

&lt;h3&gt;
  
  
  4. My Philosophy: Code is Craft
&lt;/h3&gt;

&lt;p&gt;On my site, &lt;a href="https://www.nospace.net" rel="noopener noreferrer"&gt;nospace.net&lt;/a&gt;, I advocate for a simple principle: &lt;strong&gt;Code is Craft&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;To me, being a developer in the age of LLMs isn't about knowing the syntax of C++, Python, or Java—the AI has already "saturated" those benchmarks. It is about the &lt;strong&gt;Architecture of Intent&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;I even created a &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/the-senior-architect-simulator-how-i-hacked-copilot-to-hate-my-code-36ib"&gt;Hostile Architect Configuration&lt;/a&gt;&lt;/strong&gt; for GitHub Copilot as a joke (but not too much). Why? Because AI is often too polite; it tells you your bad ideas are good ones. Real engineers need a reality check. They need to understand the &lt;em&gt;why&lt;/em&gt; before the &lt;em&gt;how&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The Path for the Next Generation
&lt;/h3&gt;

&lt;p&gt;My fear for junior developers is that they might get trapped in an "addictive" cycle of AI-dependency, losing the ability to think through architectural trade-offs. &lt;/p&gt;

&lt;p&gt;If you want to survive the next 40 years in IT:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Master the Patterns:&lt;/strong&gt; Understand the redundancies.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Maintain Control:&lt;/strong&gt; Use the AI to speed up the &lt;em&gt;writing&lt;/em&gt;, but never delegate the &lt;em&gt;thinking&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Stay Deterministic:&lt;/strong&gt; Build systems that are verifiable and auditable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There isn't a single "right" way to implement a solution, but there is a way that follows &lt;strong&gt;your&lt;/strong&gt; mind. If the code is part of your thinking, it will still be clear to you a year from now.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Thoughts: Responsibility and Ownership
&lt;/h3&gt;

&lt;p&gt;Only an experienced engineer can evaluate architectural trade-offs, check if a solution fits the real business context, and take responsibility for the final product. Today, AI is not the brain of development, but its hands. It makes the process faster, but direction and meaning must still come from a human.&lt;/p&gt;

&lt;p&gt;If the code is part of your thinking, it will still be clear to you a year from now. If it’s just a "vibe," it will be a ghost in your codebase.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;P.S. Maybe I’m just "old-school"? Or perhaps 40 years in the trenches have given me a different perspective on what "craft" really means. What do you think? Are we gaining productivity or just losing control?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the Author:&lt;/strong&gt; I am an IT operator with 40 years of experience. I’ve seen the world move from floppy disks to recursive AI agents, and I still believe that the most important "compute" happens between the ears of the engineer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: This post was originally written in Italian my native language and refined to English with the assistance of an LLM to ensure technical clarity.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>vibecoding</category>
      <category>discuss</category>
    </item>
    <item>
      <title>LLM-Manager: Orchestrating Ollama and Llama.cpp with Pure Bash</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Fri, 29 May 2026 08:16:54 +0000</pubDate>
      <link>https://dev.to/marcobblk/llm-manager-orchestrating-ollama-and-llamacpp-with-pure-bash-181p</link>
      <guid>https://dev.to/marcobblk/llm-manager-orchestrating-ollama-and-llamacpp-with-pure-bash-181p</guid>
      <description>&lt;p&gt;&lt;strong&gt;LLM-Manager&lt;/strong&gt; is a lightweight, modular Bash suite with a dual JSON/Interactive interface designed to manage local and remote inference engines across Linux and WSL2.&lt;/p&gt;

&lt;p&gt;When I started experimenting with Large Language Models (LLMs) to build an On-Premise RAG (Retrieval-Augmented Generation) application, I hit a massive roadblock: &lt;strong&gt;environment fragmentation&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Managing multiple inference engines like Ollama and Llama.cpp meant memorizing different command-line flags, environment variables, and configurations. Once my frontend and backend prototypes were ready for testing, I realized I was spending too much time manually starting, stopping, loading, and unloading models.&lt;/p&gt;

&lt;p&gt;I looked online for solutions. Most people suggested complex Python scripts, heavy Docker setups, n8n workflows, or complicated web dashboards. &lt;/p&gt;

&lt;p&gt;I didn't want the bloat. I wanted something lightweight that executed commands as if I were doing them manually, but with zero cognitive load. &lt;/p&gt;

&lt;p&gt;That is why I built &lt;strong&gt;LLM-Manager&lt;/strong&gt;: a modular orchestration suite written entirely in pure Bash.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Bash?
&lt;/h2&gt;

&lt;p&gt;Choosing Bash wasn't about being old-school; it was a pragmatic engineering decision:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero Overhead:&lt;/strong&gt; No python virtual environments, no &lt;code&gt;npm install&lt;/code&gt;, no runtime dependencies. It’s native and lightning-fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OS-Level Access:&lt;/strong&gt; It can natively probe hardware metrics (CPU load, RAM, Disk, GPU VRAM) and manage OS processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform via WSL2:&lt;/strong&gt; By utilizing minor PowerShell bridges only when necessary (like starting a server on the Windows host side), the exact same Bash scripts run flawlessly across both native Linux and Windows/WSL2 environments.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;The system is designed with a strict plug-and-play modular layout. At the center sits a single entry-point orchestrator (&lt;code&gt;engine-run.sh&lt;/code&gt;) that validates arguments against whitelists and routes actions to engine-specific scripts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├── engine.conf               # Global configuration constants
├── engine-models.json        # Model registry with per-engine metadata
├── engine-templates.json     # Prompt/Model templates by family
├── engine-run.sh             # Main orchestrator &amp;amp; entry-point
├── engine-common.sh          # Shared utilities (OS detection, JSON formatting)
├── engine-status.sh          # Cross-engine status aggregation
├── engine-system.sh          # Hardware metric probing
├── logs/                     # Centralized logs
├── llama/                    # Llama.cpp backend scripts
└── ollama/                   # Ollama backend scripts

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Every engine directory implements a consistent interface (&lt;code&gt;start.sh&lt;/code&gt;, &lt;code&gt;stop.sh&lt;/code&gt;, &lt;code&gt;status.sh&lt;/code&gt;, &lt;code&gt;load.sh&lt;/code&gt;, &lt;code&gt;unload.sh&lt;/code&gt;, &lt;code&gt;show.sh&lt;/code&gt;, &lt;code&gt;remove.sh&lt;/code&gt;). If an engine doesn't support a specific action, a simple stub script that exits with &lt;code&gt;0&lt;/code&gt; keeps the pipeline happy.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Dual-Output Contract (Human + Machine)
&lt;/h2&gt;

&lt;p&gt;One of the core features of LLM-Manager is how it handles output.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive text (Logs, Help, Errors)&lt;/strong&gt; is routed to &lt;code&gt;stderr&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured JSON data&lt;/strong&gt; is routed to &lt;code&gt;stdout&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This dual nature makes it perfect for local interactive use, but also means it acts as a local proxy. You can run it over &lt;strong&gt;Remote SSH&lt;/strong&gt; and pipe the clean JSON straight into another monitoring script, custom Web UI, or automation tool.&lt;/p&gt;
&lt;h3&gt;
  
  
  Example 1: Global Status Check
&lt;/h3&gt;

&lt;p&gt;Running &lt;code&gt;./engine-run.sh status&lt;/code&gt; probes the system metrics and queries active network ports, spitting out a comprehensive payload:&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;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-05-29T06:38:30Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"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;"status"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&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;"system"&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;"os_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"wsl"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"memory"&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;"total_mb"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5927&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"available_mb"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4555&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;"gpu"&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;"detected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AMD Radeon(TM) Graphics"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"vram_total_mb"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;512&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;"cpu"&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;"cores"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"load_1m"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.11&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="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"engines"&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;"ollama"&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;"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;"stopped"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1234&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;"llama"&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;"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;"stopped"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12345&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="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="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Example 2: Interactive Help Interface
&lt;/h3&gt;

&lt;p&gt;If a command fails or is called without parameters, the machine gets the JSON error contract, and the human operator gets a clean, human-readable usage menu:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: LLM Manager
Usage: engine-run.sh &amp;lt;action&amp;gt; [engine] [args...]
actions:
    config                           Global config
    models [-h]                      List available models (-h human readable)
    status &amp;lt;engine&amp;gt;                  Show global or engine status
    start &amp;lt;engine&amp;gt; [model] [users]   Start an engine
    stop &amp;lt;engine&amp;gt;                    Stop an engine
...

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Dynamic Modelfile Generation
&lt;/h2&gt;

&lt;p&gt;Managing raw &lt;code&gt;.gguf&lt;/code&gt; files on Ollama can be a chore since it requires a &lt;code&gt;Modelfile&lt;/code&gt;. LLM-Manager abstracts this entirely in the backend via model loading strategies in &lt;code&gt;engine-models.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If a model is configured with a &lt;code&gt;gguf&lt;/code&gt; loader, the &lt;code&gt;load.sh&lt;/code&gt; script &lt;strong&gt;dynamically generates the required Modelfile on the fly&lt;/strong&gt;, injecting correct prompt templates based on the model family, and loading it into Ollama seamlessly. It also supports &lt;code&gt;native&lt;/code&gt; strategies to pull directly from the official Ollama registry, or &lt;code&gt;auto&lt;/code&gt; to fallback if the local file is missing.&lt;/p&gt;


&lt;h2&gt;
  
  
  Check out the Code
&lt;/h2&gt;

&lt;p&gt;The project is fully open-source. If you want to see how the WSL2/PowerShell bridges are handled, how the dynamic Modelfiles are generated, or if you want to use it to clean up your own local LLM testing environment, check out the repository:&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/msbragi" rel="noopener noreferrer"&gt;
        msbragi
      &lt;/a&gt; / &lt;a href="https://github.com/msbragi/LLM-Manager" rel="noopener noreferrer"&gt;
        LLM-Manager
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Large Language Model management for on-premise installation
    &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;LLM-Manager&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A lightweight, modular Bash orchestration suite to manage, start, stop, and monitor local and remote LLM inference engines (Ollama, Llama.cpp) with a dual interactive/JSON interface.&lt;/p&gt;

&lt;p&gt;Developed primarily to solve the complexity of managing ibrid environments (like Windows hosts from WSL2) and remote deployments via SSH without the overhead of heavy Python or dashboard solutions.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Prerequisites&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Before running the orchestrator, ensure your environment has the following tools installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bash&lt;/strong&gt; (v4.0 or higher recommended)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;jq&lt;/code&gt;&lt;/strong&gt; — Crucial for parsing and formatting JSON outputs (&lt;code&gt;sudo apt install jq&lt;/code&gt; on Debian/Ubuntu).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;curl&lt;/code&gt;&lt;/strong&gt; — Used for engine health checks and API interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PowerShell&lt;/strong&gt; (Windows/WSL2 host setups only) — Required strictly for launching/stopping engine services on the Windows host side when managed from WSL2.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Key Features&lt;/h2&gt;
&lt;/div&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;strong&gt;Multi-Engine Support:&lt;/strong&gt; Native orchestration for &lt;code&gt;ollama&lt;/code&gt; and &lt;code&gt;llama.cpp&lt;/code&gt; (with &lt;code&gt;vLLM&lt;/code&gt; planned).&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Cross-Platform &amp;amp; Hybrid Environments:&lt;/strong&gt; Supports native Linux, WSL2, and Windows hosts (orchestrating Windows processes from WSL2 using…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/msbragi/LLM-Manager" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;I am currently working on completing the &lt;code&gt;vLLM&lt;/code&gt; engine integration and refining the startup health-checks into proactive retry loops.&lt;/p&gt;

&lt;p&gt;Let me know what you think or if you've built similar lightweight alternatives for your AI workflows!&lt;/p&gt;

</description>
      <category>bash</category>
      <category>ai</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>GemmaLink: Your Private Eye Assistant</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Sun, 17 May 2026 13:57:22 +0000</pubDate>
      <link>https://dev.to/marcobblk/gemmalink-your-private-eye-assistant-3fgg</link>
      <guid>https://dev.to/marcobblk/gemmalink-your-private-eye-assistant-3fgg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Most local AI setups are currently a dependency nightmare, forcing users into heavy Python environments, massive CUDA toolkits, or complex Docker configurations. I built &lt;strong&gt;GemmaLink&lt;/strong&gt; to achieve the exact opposite: a "Zero-Cloud", local-first assistant that turns your smartphone into a targeted vision sensor for local VLMs, running entirely on a standard PC with a single-file, plug-and-play binary.&lt;/p&gt;

&lt;p&gt;GemmaLink allows you to open a web interface on your smartphone, point it at an object, capture a precise crop via an interactive on-screen viewfinder, and chat about what the camera sees with a local model running on your machine. &lt;/p&gt;

&lt;p&gt;Unlike general-purpose tools like Google Lens, which index data on remote servers for commercial classification, GemmaLink is a strictly confidential sandbox. Because it streams data exclusively over your local network, it enables critical use cases where third-party data exposure is unacceptable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Financial Confidentiality:&lt;/strong&gt; Point your phone at bank statements or invoices to extract line items or analyze balances safely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private Medical Insights:&lt;/strong&gt; Process the layout of localized medical data or blood test terminology without uploading your health history to the cloud.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Built-in Guardrails
&lt;/h3&gt;

&lt;p&gt;Handling sensitive, real-world data requires architectural responsibility. GemmaLink enforces explicit notifications regarding the system's inherent fallibility, prompting the user to always consult certified professionals when validating critical financial or medical outputs.&lt;/p&gt;




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

&lt;p&gt;I have recorded a comprehensive video walkthrough showcasing the complete lifecycle: the adaptive dual-mode interface initialization, the network handshake, the high-precision viewport cropping, and the real-time Server-Sent Events (SSE) token streaming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the full demo on YouTube:&lt;/strong&gt; &lt;a href="https://youtu.be/VH5NG9PvsKQ" rel="noopener noreferrer"&gt;GemmaLink Walkthrough &amp;amp; Architecture Demo&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;The project is fully modular, featuring a decoupled network layout where firewall rules and port-forwarding scripts (&lt;code&gt;.ps1&lt;/code&gt; and &lt;code&gt;.sh&lt;/code&gt;) remain external for maximum user transparency and maintenance efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source Code &amp;amp; Binary Assets (v1.0.0):&lt;/strong&gt; &lt;a href="https://github.com/msbragi/eye-assistant" rel="noopener noreferrer"&gt;GitHub Repository - eye-assistant&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Used Gemma 4
&lt;/h2&gt;

&lt;p&gt;GemmaLink is deliberately optimized for the &lt;strong&gt;Gemma 4&lt;/strong&gt; lightweight vision family. Choosing an ultra-lightweight, efficient vision-capable model was a strategic architectural choice for two main reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Low-Latency Edge Performance:&lt;/strong&gt; The primary objective was to guarantee a fast Time-To-First-Token in constrained local environments (pure CPU or Vulkan fallback) without demanding enterprise-grade hardware. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual Token Efficiency:&lt;/strong&gt; Blasting full-resolution mobile snapshots kills local inference speed and pollutes the attention matrix. The frontend computes the exact scale ratios ($videoWidth / videoRect.width$) relative to the CSS viewfinder crosshair, dynamically cropping only the targeted pixels. This surgical payload reduction matches the Gemma 4 vision sensor bounds perfectly, resulting in lightning-fast processing loops.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Driving AI without "Vibecoding"
&lt;/h3&gt;

&lt;p&gt;With over 40 years of experience writing software, Go was not part of my traditional stack. I chose it because its high-concurrency model and clean cross-compilation were required for true single-binary deployment. &lt;/p&gt;

&lt;p&gt;While I utilized an AI assistant to accelerate the implementation of the Go backend, &lt;strong&gt;this was absolutely not "vibecoding".&lt;/strong&gt; The AI served as a syntax compiler and fast writer, but the technical steering wheel remained firmly in my hands. The deterministic state machine (&lt;code&gt;preview&lt;/code&gt; -&amp;gt; &lt;code&gt;ask&lt;/code&gt; -&amp;gt; &lt;code&gt;response&lt;/code&gt;), the memory management (explicit &lt;code&gt;URL.revokeObjectURL&lt;/code&gt; cleanups to prevent mobile memory leaks), and the streaming chunk buffer that prevents incomplete Markdown strings from flickering during SSE delivery were entirely engineered under my tight architectural directives.&lt;/p&gt;




&lt;h3&gt;
  
  
  Troubleshooting: Windows + AMD Ryzen AI (Strix Halo) Edge-Case
&lt;/h3&gt;

&lt;p&gt;After testing the application on an EVO X2 mini PC equipped with unified memory and Radeon 8060S Graphics, a specific issue was identified during image processing.&lt;/p&gt;

&lt;p&gt;If you run the application on Windows using latest-generation AMD APUs (Strix Halo / Ryzen AI Max architecture) and experience an indefinite hang at the "processing image..." log during multimodal upload, the issue stems from a memory allocation lockup within the Vulkan/AMD driver stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Download a CPU-Only release of llama.cpp and place it in the bin directory where you extracted GemmaLink. Thanks to the processing power of Zen 5 and its native AVX512 / AVX512_VNNI instruction sets, vision token inference remains extremely fast while completely bypassing the graphics stack bug.&lt;/p&gt;

&lt;p&gt;Swapping to the CPU-only release serves as a reliable workaround for most image processing issues encountered on this hardware configuration, ensuring everyone can test the application. A more streamlined solution for end users will be investigated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updated 2026/05/22: To fix the problem you can download the specific release for gfx1151 from the &lt;a href="https://github.com/lemonade-sdk/llamacpp-rocm/releases" rel="noopener noreferrer"&gt;lemonade-sdk/llamacpp-rocm&lt;/a&gt; and replace the binaries in the bin folder.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next? (Community-Driven Roadmap)
&lt;/h2&gt;

&lt;p&gt;The core release (&lt;strong&gt;v1.0.0&lt;/strong&gt;) is tagged and stable. I have a backlog of advanced features mapped out, which I will implement if the project gains traction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multilingual Smartphone UI:&lt;/strong&gt; Dynamic localization driven by browser headers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON-Driven Context Chips:&lt;/strong&gt; Offloading the quick-question preset chips to an external, customizable &lt;code&gt;chips.json&lt;/code&gt; for manual user tuning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Hardware Dispatching:&lt;/strong&gt; Orchestrating automatic matching of specialized &lt;code&gt;llama.cpp&lt;/code&gt; libraries based on real-time instruction set detections directly from the Go launcher.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
    </item>
  </channel>
</rss>
