<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Posts | nandomoreira.dev</title>
    <link>https://nandomoreira.dev/en/posts</link>
    <description>Writing on engineering, tooling and agents.</description>
    <language>en</language>
    <item>
      <title>My AI harness with RPI: from Superpowers and TLC to Forja 2.0</title>
      <link>https://nandomoreira.dev/en/ai-harness-with-rpi</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/ai-harness-with-rpi</guid>
      <description>Harness is everything that runs around the model. Mine came out of almost a year of projects, tests, and study on top of Superpowers and tlc-spec-driven, and now it is becoming Forja 2.0.</description>
      <pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Treating dotfiles as software</title>
      <link>https://nandomoreira.dev/en/treating-dotfiles-as-software</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/treating-dotfiles-as-software</guid>
      <description>A dotfiles script runs from a shortcut, a timer and a hook, where nobody sees the error. How I test mine with shellcheck and BATS, swap dependencies for stubs and let AI write almost everything without losing trust.</description>
      <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Does your system have memory? A dotfiles from the first symlink to a reinstall</title>
      <link>https://nandomoreira.dev/en/dotfiles-from-symlink-to-reinstall</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/dotfiles-from-symlink-to-reinstall</guid>
      <description>Formatting cost me a full day and a week remembering what I had missed. How to build a dotfiles that keeps the configs and the why of each one, and how it reinstalls the whole system on a blank machine, with what broke anyway.</description>
      <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>My Gitflow scripts: from 31 lines of Bash to a Claude Code skill</title>
      <link>https://nandomoreira.dev/en/gitflow-scripts-to-a-skill</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/gitflow-scripts-to-a-skill</guid>
      <description>Around 2019 I wrote a few scripts so I would not type the same git flow every time I opened a branch. They grew, got rewritten with AI and today live in a skill. The idea is still the same.</description>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Ctrl+K on my site: a command palette that only downloads when someone hits the key</title>
      <link>https://nandomoreira.dev/en/command-palette-ctrl-k</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/command-palette-ctrl-k</guid>
      <description>Site-wide search, G + letter shortcuts and single-key actions, in plain TypeScript with no library. Anyone who never opens the palette downloads nothing of it, and what cost the most bytes was the loader, not the palette.</description>
      <pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Terminal Noir: the theme of my site became the theme of my whole system</title>
      <link>https://nandomoreira.dev/en/terminal-noir-theme-across-my-system</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/terminal-noir-theme-across-my-system</guid>
      <description>The colors of my site became the theme of my whole desktop: twelve apps, an open source repository, its own site and a beta release, in a single night.</description>
      <pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Dynamic tiling or stacked windows: what I learned quitting Alt+Tab</title>
      <link>https://nandomoreira.dev/en/dynamic-tiling-or-stacked-windows</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/dynamic-tiling-or-stacked-windows</guid>
      <description>Niri, Hyprland and Pop!_OS&apos;s new COSMIC arrange the windows for you, and all three let you float a window when you need to. After months to quit Alt+Tab, I am not going back, but that does not make tiling the right way for everyone.</description>
      <pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Cross-model review: why a second agent finds what the first one misses</title>
      <link>https://nandomoreira.dev/en/cross-model-review</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/cross-model-review</guid>
      <description>Different models fail in different places. How I put a second model to review the code the first one wrote, how I merge both sets of findings, what Codex caught on this site and why today the reviewer is agy.</description>
      <pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>My homelab on a 2018 Mac mini: disks, DNS and Tailscale</title>
      <link>https://nandomoreira.dev/en/homelab-on-a-2018-mac-mini</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/homelab-on-a-2018-mac-mini</guid>
      <description>A Mac mini on Ubuntu and CasaOS, drawing 5.5 W, holds the laptop backups, my music, this site&apos;s staging and Pi-hole, which blocks one in five DNS queries in the house. Installing the apps was the easy part; the work was deciding where the data lives and how each device reaches it.</description>
      <pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>game-mode: I freeze work to play, without closing any window</title>
      <link>https://nandomoreira.dev/en/game-mode-freezing-work-with-cgroup</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/game-mode-freezing-work-with-cgroup</guid>
      <description>A Niri shortcut freezes Chrome, Slack and the terminals with the cgroup v2 freezer, blanks the leftover monitors and turns on quiet mode. Steam and music keep going. Getting there cost a Steam painted black and a game mode that not even its own command could turn off.</description>
      <pubDate>Sat, 17 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Scratchpad on Niri: windows that vanish and return with a shortcut</title>
      <link>https://nandomoreira.dev/en/niri-scratchpad-windows-vanish</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/niri-scratchpad-windows-vanish</guid>
      <description>Niri cannot minimize a window. A 199-line script and a hidden workspace make WhatsApp, Obsidian and YouTube appear and disappear with one key, and Discord, Spotify and LocalSend return to the tray.</description>
      <pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>espanso: iPhone text replacement, now on my Linux</title>
      <link>https://nandomoreira.dev/en/espanso-text-replacement-on-linux</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/espanso-text-replacement-on-linux</guid>
      <description>I used macOS Text Replacement for years and still use it on the iPhone every day. On CachyOS with Niri, espanso does the same in any text field, after three tweaks the docs never mention.</description>
      <pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>From five days to thirty minutes: AI in an ETL pipeline</title>
      <link>https://nandomoreira.dev/en/five-days-to-thirty-minutes</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/five-days-to-thirty-minutes</guid>
      <description>How preparing a dataset went from nearly a week of manual work to half an hour: API automation, AI where it helps, tests where it can go wrong and the deadline as a product rule.</description>
      <pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>job-radar: I stopped scrolling job lists and let Python discard for me</title>
      <link>https://nandomoreira.dev/en/job-radar-pure-python</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/job-radar-pure-python</guid>
      <description>Seven job sources, filters that discard before the score, the résumé as a qualifications list and a Discord channel that only gets what survived. Zero runtime dependencies, and the code is open.</description>
      <pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>No JavaScript in the browser: I built analytics for my site and follow it from the terminal, in Rust</title>
      <link>https://nandomoreira.dev/en/analytics-without-browser-javascript</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/analytics-without-browser-javascript</guid>
      <description>I only wanted the basics of analytics, without injecting a script into the site and without sending visitor data to anyone. It became a middleware, a 1×1 pixel, a cookie named __session and a Rust TUI.</description>
      <pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>My study of Red Dead Online sessions: P2P, Rockstar relays and the double NAT I built myself</title>
      <link>https://nandomoreira.dev/en/red-dead-online-sessions-p2p-double-nat</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/red-dead-online-sessions-p2p-double-nat</guid>
      <description>I spent ten days looking at my Xbox traffic to understand how a Red Dead Online session forms. I learned to tell a player from a relay in a capture, found that my gateway had dropped the NAT type to Moderate, and that hiding the home IP costs an MTU tweak.</description>
      <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>rdo-solo: Red Dead Online alone through the home gateway, now open source</title>
      <link>https://nandomoreira.dev/en/rdo-solo-alone-via-home-gateway</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/rdo-solo-alone-via-home-gateway</guid>
      <description>I open-sourced rdo-solo, the controller that lets me stay alone in a public Red Dead Online session on Xbox. The console goes through a Linux gateway, the gateway drops the game&apos;s P2P, and you can turn it on and off from the terminal, a Rust TUI, or the phone.</description>
      <pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Memory for agents: a four-layer backbone</title>
      <link>https://nandomoreira.dev/en/four-layer-memory-for-agents</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/four-layer-memory-for-agents</guid>
      <description>How Claude Code remembers decisions across sessions without loading everything into context: what is always read, what only comes in when someone asks, and the migration that only finished when a gate allowed it.</description>
      <pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>I built four Noctalia plugins entirely with AI on my CachyOS</title>
      <link>https://nandomoreira.dev/en/four-noctalia-plugins-with-ai</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/four-noctalia-plugins-with-ai</guid>
      <description>Four plugins for the Noctalia bar and desktop: quick capture and agenda, Claude Code and Grok plan usage, GitHub gists, and sticky notes. All built with AI, in the RPI flow, and the UI was what took the most work.</description>
      <pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>RPI flow with three agents: Claude Code plans, Grok implements, Codex reviews</title>
      <link>https://nandomoreira.dev/en/rpi-flow-with-three-agents</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/rpi-flow-with-three-agents</guid>
      <description>Research and plan before any feature, the way I already worked. Claude Code leads, Grok writes, Codex reviews, and the test comes before the code even when that makes the AI slower.</description>
      <pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>How I built my new 2026 site that talks to AI via MCP</title>
      <link>https://nandomoreira.dev/en/site-that-talks-to-ai-via-mcp</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/site-that-talks-to-ai-via-mcp</guid>
      <description>The cobbler&apos;s children have no shoes: an AI engineer without a site that talks to AI. How I rebuilt mine, with an MCP server, a machine version of every page and seven automated gates.</description>
      <pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The false green: when the gate says PASS and nothing ran</title>
      <link>https://nandomoreira.dev/en/the-false-green</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/the-false-green</guid>
      <description>In a flow with agents, a red test gets investigated. The danger is the green nobody questions: the gate that skipped everything, the pipeline that hid the error, the test that read the source instead of making the request.</description>
      <pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Mute headphones for 78 days: a script that follows the P2 jack on PipeWire</title>
      <link>https://nandomoreira.dev/en/mute-headphones-for-78-days</link>
      <guid isPermaLink="true">https://nandomoreira.dev/en/mute-headphones-for-78-days</guid>
      <description>On my laptop, headphones and speakers live on different sound card profiles, and WirePlumber never switches on its own. The March fix was exactly what locked the headphones. Today a 164-line watcher listens to the connector and picks the profile for me.</description>
      <pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>
