{"@attributes":{"version":"2.0"},"channel":{"title":"Posts on Bits, Bugs, and Opinions","link":"https:\/\/tomakl.dev\/posts\/","description":"Recent content in Posts on Bits, Bugs, and Opinions","generator":"Hugo -- 0.154.5","language":"en","lastBuildDate":"Mon, 09 Nov 2026 02:03:00 +0100","item":[{"title":"What breaks when you fan out Claude Code to multiple subagents","link":"https:\/\/tomakl.dev\/posts\/orchestration-failure-modes\/","pubDate":"Mon, 09 Nov 2026 02:03:00 +0100","guid":"https:\/\/tomakl.dev\/posts\/orchestration-failure-modes\/","description":"Three failure tiers in multi-agent Claude Code orchestration, why retry only fixes one of them, and the checks worth running after any parallel agent fan-out."},{"title":"Why I moved my homelab jobs from cron to systemd timers","link":"https:\/\/tomakl.dev\/posts\/systemd-timers-vs-cron-homelab\/","pubDate":"Mon, 02 Nov 2026 02:10:00 +0100","guid":"https:\/\/tomakl.dev\/posts\/systemd-timers-vs-cron-homelab\/","description":"Cron silently skips jobs missed during downtime. Systemd timers vs cron: Persistent=true, OnCalendar scheduling, journald logs, and real service dependencies."},{"title":"MCP tool poisoning: approving a server once isn't approving it forever","link":"https:\/\/tomakl.dev\/posts\/mcp-tool-poisoning-rug-pull\/","pubDate":"Mon, 26 Oct 2026 02:06:54 +0100","guid":"https:\/\/tomakl.dev\/posts\/mcp-tool-poisoning-rug-pull\/","description":"MCP tool poisoning hides inside a server&#39;s tool descriptions. How the rug pull variant works, and a hash check that catches when a trusted tool quietly changes."},{"title":"PXE booting Omarchy without taking over your router's DHCP","link":"https:\/\/tomakl.dev\/posts\/omarchy-pxe-boot-proxy-dhcp\/","pubDate":"Mon, 19 Oct 2026 09:30:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/omarchy-pxe-boot-proxy-dhcp\/","description":"How to PXE boot an Arch based installer like Omarchy on a home LAN with dnsmasq proxy DHCP, GRUB netboot and nginx, without replacing your router&#39;s DHCP."},{"title":"Running parallel Claude Code sessions with git worktrees","link":"https:\/\/tomakl.dev\/posts\/claude-code-git-worktrees\/","pubDate":"Mon, 12 Oct 2026 03:15:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-git-worktrees\/","description":"How git worktrees let multiple Claude Code sessions work on the same repo at once, and the gotchas: shared stash stacks, detached HEAD, and branch locks."},{"title":"Why my Claude Code status line is 1,500 lines of bash","link":"https:\/\/tomakl.dev\/posts\/claude-code-custom-statusline\/","pubDate":"Mon, 05 Oct 2026 03:20:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-custom-statusline\/","description":"Building a custom Claude Code status line in bash: the stdin JSON contract, caching slow checks, Docker health over SSH, and bash 3.2 compatibility quirks."},{"title":"Flagging ad and tracker domains with an LLM before they hit my blocklist","link":"https:\/\/tomakl.dev\/posts\/llm-ad-tracker-domain-classifier\/","pubDate":"Mon, 28 Sep 2026 03:09:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/llm-ad-tracker-domain-classifier\/","description":"A dry-run daily job that asks an LLM whether a domain seen by AdGuard Home or privoxy looks like an ad or tracker, before any blocklist ever gets touched."},{"title":"Auditing my own homelab backup script","link":"https:\/\/tomakl.dev\/posts\/auditing-my-homelab-backups\/","pubDate":"Mon, 21 Sep 2026 03:12:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/auditing-my-homelab-backups\/","description":"A homelab backup strategy audit: what a self-hosted backup script actually protects, what it leaves in plaintext, and why a second LAN box is not offsite."},{"title":"Building a Claude Code agent for a self-hosted network controller","link":"https:\/\/tomakl.dev\/posts\/network-controller-claude-code-agent\/","pubDate":"Mon, 14 Sep 2026 11:20:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/network-controller-claude-code-agent\/","description":"How I wrapped a self-hosted Omada network controller&#39;s undocumented REST API in a shell script and turned it into a Claude Code agent for daily network checks."},{"title":"Self-hosting a password manager with Vaultwarden and a Cloudflare Tunnel","link":"https:\/\/tomakl.dev\/posts\/self-hosting-vaultwarden-cloudflare-tunnel\/","pubDate":"Mon, 07 Sep 2026 03:24:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/self-hosting-vaultwarden-cloudflare-tunnel\/","description":"How I run Vaultwarden, a self-hosted password manager compatible with Bitwarden clients, on my home server behind a Cloudflare Tunnel with no open ports."},{"title":"Switching this blog's automation from Managed Agents to scheduled routines","link":"https:\/\/tomakl.dev\/posts\/claude-code-scheduled-blog-routine\/","pubDate":"Sun, 06 Sep 2026 14:20:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-scheduled-blog-routine\/","description":"Why I dropped Anthropic&#39;s Managed Agents product for this blog&#39;s post pipeline and moved to a Claude Code scheduled cloud routine on my existing Team plan."},{"title":"Ideal state artifacts: tests for your AI agent config","link":"https:\/\/tomakl.dev\/posts\/isa-files-for-ai-agent-configs\/","pubDate":"Tue, 01 Sep 2026 18:45:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/isa-files-for-ai-agent-configs\/","description":"AI coding agent setups drift like code but have no test suite. Ideal State Artifact files fix that by turning tacit expectations into checkable claims."},{"title":"Ratusz AI: turning a hobby project into a product for town halls","link":"https:\/\/tomakl.dev\/posts\/ratusz-ai\/","pubDate":"Sat, 29 Aug 2026 12:00:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/ratusz-ai\/","description":"A weekend search tool for one town&#39;s council resolutions became a multi-tenant SaaS in a week: what it does, how it cites sources, and what&#39;s still unproven."},{"title":"What it took to send one email from a locked-down Google Workspace account","link":"https:\/\/tomakl.dev\/posts\/google-workspace-smtp-relay-email\/","pubDate":"Sat, 29 Aug 2026 11:30:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/google-workspace-smtp-relay-email\/","description":"Getting kontakt@ to send mail from a locked-down Workspace account, with App Passwords and Cloud Platform both switched off, took three dead ends and one working fix."},{"title":"AI news digest, week 32","link":"https:\/\/tomakl.dev\/posts\/ai-news-2026-w32\/","pubDate":"Sat, 08 Aug 2026 16:30:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/ai-news-2026-w32\/","description":"Claude Opus 5 matched flagship intelligence at last gen&#39;s price, Meta undercut on agent pricing, and the EU AI Act&#39;s transparency rules went live. Weekly roundup."},{"title":"How this blog runs itself","link":"https:\/\/tomakl.dev\/posts\/how-this-blog-runs-itself\/","pubDate":"Thu, 23 Jul 2026 19:00:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/how-this-blog-runs-itself\/","description":"A static blog that writes, builds, and deploys posts with one git push. Hugo, Docker, GitHub Actions on a self-hosted ARM runner."},{"title":"Office EU: a European alternative to Microsoft 365","link":"https:\/\/tomakl.dev\/posts\/office-eu-microsoft-365-alternative\/","pubDate":"Thu, 16 Jul 2026 11:00:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/office-eu-microsoft-365-alternative\/","description":"Office EU launched in March 2026 as a fully European cloud productivity suite. Here is what it actually is, what it runs on, and whether it is worth switching."},{"title":"Claude Code \/btw: asking questions while Claude is still working","link":"https:\/\/tomakl.dev\/posts\/claude-code-btw-command\/","pubDate":"Thu, 09 Jul 2026 13:00:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-btw-command\/","description":"The \/btw command in Claude Code lets you ask side questions in a floating overlay while the main task runs. Here&#39;s how it fits into a real workflow."},{"title":"Exposing a local RAG server to claude.ai without opening a port","link":"https:\/\/tomakl.dev\/posts\/rag-server-claude-ai-connector\/","pubDate":"Thu, 02 Jul 2026 10:15:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/rag-server-claude-ai-connector\/","description":"How I wired a self-hosted RAG server into claude.ai as a custom connector using Cloudflare Access, service tokens, and an OAuth portal, no port forwarding."},{"title":"gws CLI: the missing piece of Claude Code","link":"https:\/\/tomakl.dev\/posts\/gws-cli-missing-piece-of-claude-code\/","pubDate":"Wed, 24 Jun 2026 09:45:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/gws-cli-missing-piece-of-claude-code\/","description":"One CLI for all Google Workspace APIs, JSON output, bash-friendly. Here&#39;s how I replaced two MCP servers with gws and what it means for AI agent workflows."},{"title":"Self-hosting Trigger.dev v4 on an ARM64 board","link":"https:\/\/tomakl.dev\/posts\/self-hosted-trigger-dev-on-arm\/","pubDate":"Wed, 17 Jun 2026 15:30:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/self-hosted-trigger-dev-on-arm\/","description":"Running Trigger.dev v4 on a 7.4 GB ARM64 board alongside a dozen other services. What works, what eats memory, and how to survive ClickHouse."},{"title":"Building a memory compiler for Claude Code","link":"https:\/\/tomakl.dev\/posts\/claude-code-memory-compiler\/","pubDate":"Thu, 11 Jun 2026 09:30:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-memory-compiler\/","description":"How I built a nightly pipeline that compiles raw Claude Code session logs into structured knowledge articles, stored in pgvector and mirrored to Obsidian."},{"title":"Skills and agents: building reusable workflows in Claude Code","link":"https:\/\/tomakl.dev\/posts\/claude-code-skills-agents\/","pubDate":"Wed, 03 Jun 2026 10:00:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-skills-agents\/","description":"How Claude Code skills and agents turn repetitive work into reusable workflows. 19 agents, automatic skill loading, and real examples."},{"title":"Anthropic open-sourced their skills repo","link":"https:\/\/tomakl.dev\/posts\/anthropic-skills-repo\/","pubDate":"Tue, 26 May 2026 17:00:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/anthropic-skills-repo\/","description":"Anthropic&#39;s skills repo is now public on GitHub. What it contains, how skill-creator works, and what it means for Claude Code users."},{"title":"Claude Code hooks: building a safety layer for your AI assistant","link":"https:\/\/tomakl.dev\/posts\/claude-code-hooks\/","pubDate":"Tue, 19 May 2026 09:15:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-hooks\/","description":"How I use Claude Code hooks to block dangerous commands, scan for secrets, inject context, and get Telegram notifications when something needs attention."},{"title":"The Toggl commands that barely count as commands","link":"https:\/\/tomakl.dev\/posts\/claude-code-toggl-commands\/","pubDate":"Tue, 12 May 2026 14:30:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-toggl-commands\/","description":"Eight slash commands for Toggl time tracking: some trivially simple, one genuinely useful, and what that says about automation ROI."},{"title":"The devops commands that replaced my runbooks","link":"https:\/\/tomakl.dev\/posts\/claude-code-devops-commands\/","pubDate":"Tue, 05 May 2026 11:00:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-devops-commands\/","description":"Eleven slash commands for deployments, diagnostics, and system health \u2014 and how they compare to the runbook documents they replaced."},{"title":"Writing custom commands for Claude Code","link":"https:\/\/tomakl.dev\/posts\/claude-code-custom-commands\/","pubDate":"Tue, 21 Apr 2026 16:00:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/claude-code-custom-commands\/","description":"How Claude Code slash commands work: file structure, $ARGUMENTS, frontmatter, namespacing, and the patterns that make them useful."},{"title":"What is MCP and how to set it up in Claude Code","link":"https:\/\/tomakl.dev\/posts\/what-is-mcp\/","pubDate":"Tue, 14 Apr 2026 10:30:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/what-is-mcp\/","description":"MCP is an open protocol that lets AI assistants talk to external tools and data sources. Here is how it works and how to configure it in Claude Code."},{"title":"Hello world from a managed agent","link":"https:\/\/tomakl.dev\/posts\/hello-world-managed-agent\/","pubDate":"Thu, 09 Apr 2026 12:36:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/hello-world-managed-agent\/","description":"A test post published by a managed AI agent running inside an automated pipeline. If you&#39;re reading this, the plumbing works."},{"title":"The 120-file Claude Code developer workbench","link":"https:\/\/tomakl.dev\/posts\/my-claude-code-setup\/","pubDate":"Thu, 02 Apr 2026 09:00:00 +0200","guid":"https:\/\/tomakl.dev\/posts\/my-claude-code-setup\/","description":"48 commands, 18 agents, 22 rules, 11 hooks. How I turned a CLI coding assistant into a full development environment for DevOps and automation."},{"title":"When your Claude Code setup audits itself","link":"https:\/\/tomakl.dev\/posts\/claude-code-setup-audit-march-2026\/","pubDate":"Wed, 25 Mar 2026 18:34:23 +0100","guid":"https:\/\/tomakl.dev\/posts\/claude-code-setup-audit-march-2026\/","description":"Running 5 parallel research agents to audit my Claude Code workbench: what the latest AI engineering research says, what I already had, and what was actually new."},{"title":"Replacing Obsidian with pgvector: docs that live in the database","link":"https:\/\/tomakl.dev\/posts\/rag-as-docs-layer\/","pubDate":"Tue, 17 Mar 2026 17:13:27 +0100","guid":"https:\/\/tomakl.dev\/posts\/rag-as-docs-layer\/","description":"How I deleted 120 Obsidian markdown files and moved all internal docs into a local pgvector RAG system, with a rag_save MCP tool for direct ingestion."},{"title":"Building a local RAG system as persistent memory for Claude Code","link":"https:\/\/tomakl.dev\/posts\/building-local-rag-for-claude-code\/","pubDate":"Sat, 14 Mar 2026 22:56:08 +0100","guid":"https:\/\/tomakl.dev\/posts\/building-local-rag-for-claude-code\/","description":"How I built a local multimodal RAG with pgvector, Gemini embeddings, and an MCP server so Claude Code can search past sessions and internal docs on demand."},{"title":"AI news digest, week 11","link":"https:\/\/tomakl.dev\/posts\/ai-news-2026-w11\/","pubDate":"Mon, 09 Mar 2026 17:45:32 +0100","guid":"https:\/\/tomakl.dev\/posts\/ai-news-2026-w11\/","description":"GPT-5.4 landed, nine models dropped in four weeks, and AI productivity benchmarks finally have real data. Weekly roundup of what actually matters."},{"title":"AI news digest, week 10","link":"https:\/\/tomakl.dev\/posts\/ai-news-2026-w10\/","pubDate":"Tue, 03 Mar 2026 22:30:00 +0100","guid":"https:\/\/tomakl.dev\/posts\/ai-news-2026-w10\/","description":"Claude Code ecosystem growing fast, MCP security under scrutiny, multi-agent orchestration going mainstream. Weekly roundup of what caught my eye."}]}}