Skip to main content

The Logs

"Document Everything."
Dev Logs, Personal Ramblings, and the raw reality of the lab. ⚠️ Raw Output

journal_tree.exe
$ pstree -p journal
journal | ├── 2026 \u2502 ├── 04 ├── 03 ├── 02 └── 01 ├── 2025 \u2502 ├── 12 ├── 11 ├── 10 ├── 09 ├── 08 ├── 06 ├── 04 └── 03 ├── 2024 \u2502 ├── 11 └── 05 └── 2023 \u2502 ├── 12 ├── 09 └── 08

Admin API and Network Scanner Hardening

Network scanner hardening, OpenClaw vault guardrails, Argovox governance review, bug-sweep follow-up, AI Brain docs, and admin API hardening improved ArgoBox’s control-plane boundaries.

Cortex Orchestration and Routing

Orchestration cleanup, Cortex governance, LLM routing, MCP compatibility review, and session backfill work improved the operating model around ArgoBox’s AI-assisted development system.

ArgoSec, Seedbox, and Agent Framework

ArgoSec creation and cleanup, seedbox installer work, control-plane presets, ArgoBox OS completion, module-fix waves, Forge Pipeline, and multi-agent coordination shaped the next platform layer.

Security Posture Review and Rotation Plan

A comprehensive ArgoBox security review produced a prioritized remediation plan for secret handling, API boundaries, container posture, repository hygiene, and follow-up verification.

Source-Grounded Documentation Audit

A documentation accuracy review tightened ArgoBox’s memory files by checking technical claims against source files, manifests, bug trackers, and build configuration.

Voice Packaging and Firewall Revamp

ArgoVox packaging, Argonarrate sample workflows, firewall module revamp, module recovery, Docs Hub hardening, and OpenClaw update guardrails improved both product capability and operational discipline.

ArgoVox, Innovation Scout, and OS Expansion

ArgoVox, Innovation Scout, content architecture, firewall follow-up, AI music lab, member login, and mobile OS/admin work pushed ArgoBox toward a broader product platform.

Thirty-One Apps, One Desktop

ArgoBox OS deployed to CF Pages with a KDE Plasma-like interface, 31 container apps, a user management API, and 24 of 27 tunnel routes validated on the first deployment pass.

Users, Performance, and Network Recovery

User-system auditing, menu/search improvements, performance monitoring, CF Pages build analysis, blog review, and Tailscale recovery work tightened ArgoBox operations.

ArgoBeat Generative Audio Sprint

A 21-hour R&D session advanced ArgoBeat's generative music engine with FM synthesis, entrainment modulation, sample planning, and a clearer path from procedural sound design toward polished focus audio.

Learning Hub and OS Content Surfaces

Learning Hub implementation, styling, music-player planning, and Knowledge RAG page work expanded the public education and ArgoBox OS content surface.

Architecture, Legal RAG, and Content Recovery

Architecture page work, legal RAG launch notes, graph rendering fixes, and SSR content recovery improved ArgoBox’s public narrative and scalable content architecture.

Sandbox and Dashboard Reliability

Ollama management fixes, OpenClaw channel cleanup, sandbox migration, dashboard widgets, and forkability checks helped stabilize the product’s demo and admin surfaces.

Performance and Infrastructure Dashboard

Core Web Vitals review, RAG cleanup, and Bogart/MasaiMara infrastructure work improved the presentation and reliability of ArgoBox’s operational dashboards.

Analytics, API Manager, and RAG Dashboard Polish

Visitor analytics, API management, and RAG dashboard work improved the admin experience with better visibility, safer sidecar routing, and clearer operational controls.

Dual-Endpoint AI and Security Scanner Design

ArgoBox added a dual-endpoint tunnel architecture for local AI access and advanced the Security Scanner design with AI-assisted triage and safer remediation workflows.

Firewall and Local AI Control Plane

OPNsense firewall controls and Ollama Cloudflare Pages integration moved ArgoBox closer to a secure operator console for infrastructure and local AI workflows.

What OpenClaw Does at 3 AM

I have an AI agent running 24/7 on my homelab. It checks 55 monitors, audits security configs, tests playground health, and reports to Telegram. Here's what it actually does when I'm asleep and how the operating model keeps improving.

The Recovery Script Meets Production

March 9, 2026. A 28KB Bash recovery workflow with 8 phases, 5 log files, and zero interactivity moved into deployment planning while two ArgoBox modules were extracted and the RAG embedding pipeline was restarted.

API Security Hardening Sprint

A focused ArgoBox security pass tightened API responses, status codes, input bounds, and RAG pipeline behavior while adding reusable response helpers for consistent route handling.

Contrast Fixes and Module Audits: Two Small Tasks That Matter

Fixed documentation page contrast so text is actually readable on mobile. Audited all 28 ArgoBox modules and resolved orphaned pages. Two small tasks that freed up cognitive space for the next thing.

Knowledge Graph Physics: Bounding Boxes and Settle Detection

Spent a Saturday evening tuning the physics engine for the blog knowledge graph. Added viewport bounds clamping and settle detection to Tendril. Made the graph stop bouncing around when you're trying to read it.

Modularization: Building Foundations That Scale

Extracted job automation into a standalone package, built a module system for ArgoBox, and created user settings infrastructure. One day of intentional architecture that enables future features without breaking the present.

Applyr Standalone: When Internal Tools Become Products

Extracted a job automation system into a standalone Python package. Multi-platform (LinkedIn + Indeed), evidence capture for compliance, modular architecture. When your internal tool is good enough to use yourself, it's good enough to open source.

Infrastructure and Automation: One Day, Two Worlds

Built a dynamic homelab dashboard and started on job automation in a single day. One session debugging infrastructure APIs and proxy routes. Another session laying foundations for a system that applies to 50 jobs while you sleep.

Cloudflare Workers SSR Compatibility Debugging

A Cloudflare Pages compatibility change caused Astro SSR pages to serialize incorrectly. The fix was isolating the response-body mismatch and bridging Astro's output to a Workers-compatible stream.

Build Swarm Stabilization Sprint

A 12.5-hour stabilization sprint resolved 25+ build-swarm issues across 4 components and deployed the stabilization build across the fleet before sunrise.

Monitoring Stack in 60 Minutes

Deployed Prometheus, Grafana, Loki, cAdvisor, Smokeping, Healthchecks, and Promtail to Altair-Link. Also, nodejs decided it needed to compile.

The Stale Queue That Grounded My Drones

7 hours diagnosing why 5 drones sat idle while 149 packages needed building. Package-tree mismatch, corrupt binpkgs, and a fresh start.

The 3-Hour Physics Session

I finally cracked why my knowledge graph felt dead. Variable edge lengths. Spines and bridges. The Obsidian feel, achieved at last.

81MB of Markdown

Obsidian was crashing every time it tried to index my vault. Turns out I had 81MB of conversation archives in there. The indexer was not amused.

The Local Library Refactor

The knowledge graph was fragile. Remote dependencies kept breaking. Today I ripped it all out and built @argobox/tendril-graph locally. It works now.

Rsync Guardrails for the Build Swarm

A 7-hour build-swarm debugging session added transfer timeouts, corrected SSH transport options, narrowed uploads to the intended package artifact, and produced a CLI tool for safer fleet operations.

Tendril Goes Open Source

The knowledge graph is no longer just an ArgoBox feature. Today I extracted it into its own library. MIT license. Free forever.

The Binpkg Cleanup Bug

Drones were hoarding 5GB of binary packages because the cleanup code was looking for directories that don't exist anymore. Three hours to fix what should have been obvious.

The Printer That Forgot Its Subnet

The printer was on the same physical network. CUPS could see it via mDNS, but packets were not routing. A power event had moved it back to an old static subnet while the rest of the LAN used the newer address plan.

The Taskbar That Stopped Responding

Plasma frozen. Three plasmashell processes. Three weather widgets. One evening of debugging that ended with a better reset script.

Build Swarm Validation and Container Runtime Cleanup

A build-swarm validation pass tightened binary handoff semantics, corrected thread-state handling, and updated a container runtime path that was still carrying assumptions from an older architecture.

Unraid Audiobook Library Path Consolidation

A systematic audit and reorganization of the AudioBooks share flattened a legacy nested directory structure, verified 3.5TB of data, and restored a clean Audiobookshelf container path.

K3s Stability Tuning and Reboot Loop Diagnosis

Diagnosed a continuous reboot loop caused by rapid pod restarts, CNI churn, and Ubuntu's default panic reboot behavior, then stabilized the host for deeper inspection.

The Reboot Loop That Blamed the Wrong Code

When Alpha-Centauri started rebooting every 90 seconds, I was convinced my build swarm code had achieved sentience and was trying to escape. Spoiler: it was innocent.

NAS Media Library and Log Hygiene Cleanup

A NAS maintenance pass resolved log retention pressure, rclone mount noise, and an Audiobookshelf path issue that caused oversized transcode jobs.

The RAID That Almost Ate Christmas

Four HGST drives. One aging Synology. USB docks that struggled under sustained recovery load. The week between Christmas and New Year's became a crash course in mdadm, LVM, Btrfs, and choosing the right hardware path for data recovery.

The Nix Session Startup Conflict

A Home Manager shell integration changed the login environment enough to break graphical session startup. The fix was tracing the startup path and separating package management from display-manager assumptions.

The Extent Tree That Vanished

ERROR: could not find extent tree. Seven words that meant my Btrfs filesystem had lost track of which blocks were in use. Recovery time.

The Package Manager That Deleted Itself

Home Manager and nix-env conflicted. The solution was to remove all nix-env packages. Including Home Manager. Which was installed via nix-env.

The RAID That Refused to Rebuild

Synology NAS RAID degraded. One drive failed. The replacement wouldn't integrate. 86 messages across two days to figure out why - and it wasn't the drive's fault.

The 244-Message Waybar

Customizing Waybar for Hyprland. Modules, colors, spacing, hover effects - 244 messages to get a status bar that looks exactly right. Sometimes the details matter more than the function.

The Namespace Steam Demanded

Steam wanted user namespaces. Gentoo said 'what namespaces?' Turns out when you compile your own kernel, you have to actually enable the features your software needs.

The TTY That Saved Everything

Gentoo wouldn't boot to GUI. KDE Plasma broken. SDDM wouldn't start. 322 messages, multiple recovery attempts, and the realization that Ctrl+Alt+F2 is the most important shortcut in Linux.

The VM That Couldn't Find Its Disk

Dracut complained about missing /dev/nbd0p3. The VM's XML had PCI slots at 0. And GRUB had the root device listed twice. Three problems. One boot failure.

The Monitors That Disappeared After Dual Boot

After rebooting from Windows back into openSUSE, two monitors were no longer detected. The fix involved removing an old NVIDIA driver, installing the correct driver series, and adding the missing kernel module package.

The GRUB That Forgot Everything

Deleted a corrupted GRUB. Now /etc/grub.d/ was empty. os-prober couldn't see Windows or CachyOS. NVIDIA parameters were wrong. Found the working config in a backup file I didn't know existed.

The VPN That Only Worked the Second Time

LibreWolf through a VPN namespace. Worked perfectly — on the second launch. First try always failed. Turned out the fix that was supposed to help made everything worse.

The 88 Reboots Mystery

88 reboots in 3 weeks. Every login was a coin flip. Turned out PCIe Gen4 and my aging motherboard were having a disagreement about timing. Fixed it, then immediately broke my right monitor.

The Mounts That Wouldn't Come Back

Lost network connectivity. NAS mounts died. Network came back. Mounts didn't. Device busy, no such file, stale handles everywhere. Found duplicates in fstab and a legacy SMB dialect.

The Phone That Kept Redirecting

My daughter's phone was redirecting speedtest.net to bbump-me-push.com. Then to Etsy affiliate links. Antivirus found nothing. Play Protect found nothing. Turned out to be a game that modified the APN settings.

The Clock That Forgot Its Timezone

Installed Linux next to Windows. Now Windows thinks it's seven hours earlier. Every time. Turns out Windows and Linux disagree on what 'time' even means at the hardware level.

The Hour That Kept Shifting

Dual-booted EndeavourOS next to Windows. Now my clock is wrong. Mountain Time, but off by an hour. Turns out Windows and Linux disagree about what time the hardware clock should store.

The BIOS That Wouldn't Show

ASUS board with a 4790K. Wireless keyboard. Four monitors connected to a 4070 Ti. I was mashing F2 and Delete for ten minutes. Turns out I was probably getting into BIOS the whole time.

The Quarantine VLAN for a Managed Phone

A managed work phone needed isolation from the personal network. I set up a quarantine VLAN on the MikroTik, added a dedicated WAP, and traced a wrong-network DHCP result back to the wrong SSID.

The Build That Panicked

Astro build failing on Cloudflare Pages with 'panic: html: bad parser state: originalIM was set twice'. Spent an hour debugging SVG components. The real issue? Using 'latest' for dependencies.

The Obsidian Graph Dream

12:20 AM. Staring at my blog. Something's missing. I want it to feel like my Obsidian vault. Time to build a knowledge graph.

Obsidian Container Tunnel Integration

Obsidian running in a K3s pod via XPRA worked internally, then needed tunnel and WebSocket configuration updates before it could be reached through the browser path.

The Namespace That Wouldn't Die

cattle-system and cert-manager stuck in 'Terminating' for 15 days. Force deletes did nothing. JSON patches did nothing. Turns out you can't delete a namespace when the API server still thinks a stale custom resource exists.

Synology Storage Manager Package Recovery

After a DSM update and SMB reinstall, several Synology packages reported storage-abnormality errors. I stayed on read-only diagnostics until the issue was narrowed to package metadata rather than the data volume.

The Pool That Refused to Import

Fresh Proxmox install over an old one. 'Failed to start Import ZFS pool' on every boot. No pools listed. But there was a pool - it just wouldn't admit it.

The Plex That Couldn't See

Plex on one machine. Media on the NAS. Same network. But the library was empty. The files existed. The shares were mounted. Plex just... couldn't see them.

The 34-Message tmux Install

Installing tmux on a Synology NAS. Should be simple. Except DSM isn't standard Linux, and package managers don't exist. Enter Entware and 34 messages of troubleshooting.

The Vault That Opens Itself

Daily notes should exist whether I'm at the computer or not. A bash script, a cron job, and the obsidian:// URI scheme. Now the vault maintains itself.

The Dataview That Pulled Everything

52 messages to write one Dataview query. Pulling text from specific subheadings, across dated folders, displaying in chronological order. When the query finally worked, it felt like magic.

The Vault That Needed Boundaries

Work notes, personal journal, letters to my daughter, technical documentation - all in one Obsidian vault. Time to create structure without losing connections.

The 176-Message Obsidian Setup

Setting up Obsidian journaling templates. 176 messages to get daily notes, templater, and dataview working together. The result: a second brain that actually thinks.

The Scope That Could Save You

My employer wanted me to pentest a client from my home IP. Without a signed scope of work. This conversation might have saved my career.

The VNC That Wouldn't Connect

126 messages to get VNC working on Debian. Residual configs from failed attempts, conflicting packages, systemd units that wouldn't die. Sometimes you have to burn it all down and start fresh.

The Honeypots That Lie in Wait

Researching honeypot options for the home lab. Kippo, Cowrie, Dionaea, Honeyd - each one a different trap for a different kind of attacker. The question: which one catches the most interesting flies?

The NAS That Needed a Fence

August 2023. I wanted to access my Synology from work. The question: VPN or expose it to the internet? The answer involved pfSense firewall rules, port restrictions, and learning why 'just forward port 445' is a terrible idea.

The Lab That Started It All

ArgoBox didn't start in 2023. It started around 2011 as a seedbox - ruTorrent, Plex, bare metal scripts. Then ESXi. Then distributed. Then unified. August 2023 was just when I started documenting the journey.