The blog
Writing
37 posts on cloud, automation, AI agents, and the homelab.
How I Give Claude Code Agents Real Autonomy (And Stop 3am Disasters)
Running Claude Code agents unsupervised is only scary if you haven’t drawn the lines. I’ve had agents push to the wrong branch, draft content I didn’t want published, and retry failed jobs in loops that burned rate limits at 2am. All of those were solvable — not by adding more rules, but by categorizing what…
How to Use Claude Code Subagents to Run Parallel Tasks
I’ve been using Claude Code subagents daily for the past few months. They’re the feature that turned Claude Code from a useful assistant into something that actually scales — running multiple tasks at once without losing context or focus. Here’s how they work, when to reach for them, and the patterns that actually matter in…
Build a Custom MCP Server in Python in 2026
Building tools that Claude Code can call directly from your terminal changes how you work with AI. Instead of copy-pasting data into prompts, you give Claude direct access to your systems through MCP servers. I’ve built several MCP servers in Python — for WordPress publishing, Skool community management, and YouTube analytics. Every one follows the…
Sync Notion to WordPress: Keep Your Content in Sync Automatically
You write in Notion. Your blog runs on WordPress. The gap between them is where you lose 15-30 minutes per post — copy-pasting content, re-uploading images, setting SEO fields, fixing formatting that breaks in Gutenberg. There are several ways to publish from Notion to WordPress automatically. This guide covers the main options, when each one…
Build a Sales Follow-Up Agent With the Claude Agent SDK
A Norwegian sales manager just told VG his team closed 1,000+ deals in three months using AI agents. He called it “going from cycling to flying a jet.” He didn’t say which tools. So I’ll show you how to build one yourself with the Claude Agent SDK — the same SDK I use to run…
Set Up OpenClaw as Your Personal AI Agent in 2026
OpenClaw is the open-source AI agent that hit 356,000 GitHub stars in three months. It connects any LLM — Claude, GPT, Kimi K2.5, local models via Ollama — to your messaging apps and runs as a persistent daemon on your machine. No vendor lock-in, no subscription beyond API costs. This is a practical OpenClaw setup…
Claude Code Hooks (2026): Setup Guide with Working Examples
Claude Code hooks are shell commands that fire automatically when specific events happen during your coding session. Format code after every edit. Block dangerous commands before they run. Send a notification when Claude finishes a task. All without relying on the LLM to remember to do it. Hooks give you deterministic control over Claude Code’s…
Write Claude Code Agent Skills That Actually Work
My agent Koda has 18 Claude Code agent skills. Each one is a markdown file in ~/.koda/skills/. No framework, no plugin system, no YAML config. A skill is a numbered list of steps the agent reads and follows using its normal tools. This is the part of running a Claude Code agent in production that…
Run a Claude Code Agent in Production Without Losing Your Mind
I’ve been running a Claude Code agent named Koda as a 24/7 daemon on my MacBook Pro for about two weeks. It posts to X and Bluesky, drafts blog posts, syncs Skool members to Airtable, analyses YouTube performance, and publishes videos through a Discord approval gate. It runs under pm2, wakes up on cron, and…
Build a Self-Healing AI Content Agent with Claude Agent SDK
I got tired of the content grind. Write a post, format it for X, reformat for Bluesky, render a video, upload to YouTube, cross-post to Instagram — repeat daily. It was eating 2-3 hours every day. So I built a self-healing AI content agent that does all of it. It runs 24/7 on a Mac…
Run a Claude Agent on a Schedule: Cron Jobs, Persistent Memory, and Error Recovery
Building an AI agent is the easy part. Making it run a Claude agent on a schedule reliably every day without babysitting — that’s where most tutorials stop. I run an autonomous Claude agent called Koda. It executes 15+ scheduled tasks daily: pulling analytics from YouTube, Google Search Console, and Instagram, scanning X for viral…
Automate Your Blog Publishing in 2026: From Draft to Live in One Command
Blog automation saved me 15-20 minutes per post. That’s the manual workflow: write in your editor, open WordPress, paste and reformat, upload a featured image, configure SEO metadata, hit publish. Multiply that by 3-4 posts per week and you’re losing hours to busywork that adds zero value. I built a system that takes a markdown…
Give Your AI Agent Persistent Memory in 2026
Most AI agents forget everything between sessions. They start fresh every time — no context, no history, no lessons learned. That makes them useful for one-shot tasks but useless for anything that compounds over time. I run an autonomous AI agent that handles my content pipeline, social media, and analytics. It operates 24/7 as a…
Docker Containers with Unraid NFS: Fix Stale File Handle Errors
If you’re running Docker containers with Unraid NFS shares, or any server serving NFS shares, you’ve probably encountered the “stale file handle” problem. I’m running Proxmox as my hypervisor with multiple VMs: one running Unraid as my NAS, and another running my media stack (Plex, Radarr, Sonarr, etc.) in Docker containers. The Docker VM pulls…
How I Deploy n8n to Hetzner Cloud with OpenTofu
I wanted to deploy n8n to Hetzner Cloud with OpenTofu with proper security, SSL certificates, and infrastructure-as-code—because the manual process was eating hours of my time. Spinning up a new self-hosted n8n instance used to take me about an hour of clicking through interfaces and running commands. Now I do it in under 5 minutes…
Adding Bluesky Rich Link Preview cards to Postiz
Rich link preview cards make a real difference on Bluesky—the clickable previews that show a title, description, and image when you share a URL. Same thing Twitter does with Open Graph cards. They get more engagement than plain text links. The problem? Postiz doesn’t support this yet for Bluesky. Hillary Torn has a pull request…
Automate WordPress Blog Publishing with Airtable and n8n
I wanted to automate WordPress blog publishing because the manual process was killing my productivity. Between writing content, make featured images, uploading to WordPress, configuring SEO settings, and double-checking everything looks right—publishing a single post used to take me 15-20 minutes of clicking through different interfaces. Now I do it in 30 seconds with 5…
How I Automatically Sync My Skool Members to Airtable Every Day
Keeping a daily list of my Skool members in Airtable has become a cornerstone of how I run automations, track subscriptions, and trigger workflows based on real membership state. Skool doesn’t currently offer a public API for member exports, and manual CSV downloads don’t scale. So I built a daily automated sync that: Exports my…
Automate Blog Image using Python and n8n
A while back I wrote about how I automate blog image creation using Python. It worked, but I had to open a CSV file, type in the title, and then open the terminal to run the script. Now using Airtable or nocoDB, I’ve automated the process completely. Here’s how to automate blog image using Python…
Automate Proxmox VMs with Cloud-Init
In my previous post, I showed how to provision VMs with NoCloud. That works great, but there’s an even faster approach: storing your cloud-init config directly in Proxmox’s snippets folder and referencing it with –cicustom. Automate Proxmox VMs with Cloud-Init method is cleaner, more manageable, and scales better when you’re provisioning multiple VMs with similar…
Docker Compose NFS Bind Mount: Fix .env Conflicts & Permissions
Recently while setting up a Docker Compose-based media stack, I ran into a tricky issue. It looked like everything was working, the containers were up, the mounts were in place, and the files were visible, yet I couldn’t write to my NFS share from inside the containers. Here’s what happened, and how I fixed it….
How I Manage My SSH Keys Across Multiple Servers and GitHub
Managing SSH keys across multiple servers and platforms can get messy fast — especially when you have a homelab, VPS, GitHub repos, and more. I used to juggle one or two keys across everything… until I hit name collisions, agent confusion, and “wrong key” errors. Now I generate one key per service or server, store…
Build a Voice-Enabled AI Agent in n8n
When I started playing with AI Agents inside n8n, I wanted to go beyond just asking questions. I wanted a real assistant—something I could talk to (literally), that could respond, take action, and help automate everyday tasks like sending emails or booking meetings. The result was a self-hosted AI Agent that works entirely through Telegram….
n8n + Cloudflare Tunnel: Self-Host Without Open Ports (2026)
When I decided to host n8n at home, I knew I didn’t want to expose it directly to the internet.I wanted a clean, secure setup — something scalable, easy to maintain, and protected without needing to open up ports on my home firewall. After testing a few approaches, I ended up building a simple and…
How to Deploy Fonts on macOS Using Microsoft Intune
Microsoft Intune allows IT admins to remotely deploy fonts without requiring manual installation. In this post, I’ll walk through how to install fonts on macOS via Intune using a Bash script. Why Deploy Fonts via Intune Prerequisites Before proceeding, ensure you have: Step 1: Prepare the Deployment Script This guide can be used to deploy…
Automate Blog to Social Media Using AI and Make
Every time I finished writing a new blog post, the same routine followed: summarize it, write captions for each platform, grab the featured image, and publish it manually to LinkedIn, X (Twitter), and Facebook. It worked — but it quickly became a chore. As the pace of my publishing increased, I wanted to stop repeating…
Fix Adobe Creative Cloud Conditional Access SSO Issues
Recently, I helped a customer troubleshoot a frustrating issue with Adobe Creative Cloud. The app was deployed, the user was licensed, and SSO was enabled — yet when launching the app, an embedded browser window popped up asking the user to sign in. This wasn’t expected behavior, especially on a compliant and Entra ID-joined device….
Provision Ubuntu VMs with NoCloud on Proxmox
Creating repeatable and secure VM templates in Proxmox has been a game-changer in refining and scaling my homelab environment. In this post, I’ll show you how to: Let’s walk through the whole process—from image preparation to SSH-ready VM deployment. For the latest Ubuntu Cloud images, you can check Ubuntu Cloud Images. Step 1: Download the Ubuntu…
Automate Blog Image Creation Using Python
Creating a featured image for every blog post used to be the most tedious part of publishing for me. I wanted consistent, branded visuals — but manually designing them in Canva, copying over titles, tweaking layouts, and exporting each one quickly became a chore. So I automated the entire process. Now I generate 1200×628px featured…
Automate Certificates with Azure Arc & Azure Key Vault
Managing certificates across hybrid environments can be a complex challenge for IT administrators. Azure Arc, combined with Azure Key Vault, provides a seamless solution for managing certificates on hybrid servers without requiring full migration to Azure. In this post, we will learn how to automate certificate management using Azure Arc & Azure Key Vault for…
Forgot Windows Admin Password? Fix it Now [2025]
In this blog post, I’ll walk you through the steps to regain access to your local admin account using Windows’ built-in tools. If your computer is BitLocker-protected, this guide will show you how to unlock it and regain access. However, the method also works for systems without BitLocker, so you can follow along regardless of…
How to List All Team Owners in Microsoft Teams
Managing Microsoft Teams can feel overwhelming, especially when you can’t see who’s in charge. By default, the Teams Management Portal hides owner information when you export data. This makes it tough to keep track of who controls each team. But don’t worry—there’s an easy way to list all team owners using PowerShell. In this article,…
Custom Marking Colors in Microsoft Purview
When working with sensitivity labels in Microsoft Purview, customizing header and footer content markings is key to maintaining your organization’s branding and visual standards. These markings highlight sensitive information, helping users identify the security level of a document at a glance. However, the Microsoft Purview portal has limitations, especially when it comes to setting custom…
Securing Tier-0 Systems in Azure Arc: A Comprehensive Guide [2024]
Are you focused on securing Tier-0 systems in Azure Arc? Look no further. In this blog post, I will explore several key topics, including: Potential Security Risks of the Azure Connected Machine Agent How to Limit Access to the RunCommandHandler And more! Let’s dive in! Introduction For businesses using Azure Arc to manage their hybrid…
Enable AUTOPROTECT with Bicep: A Step-by-Step Guide
In today’s tutorial, I’m excited to show you exactly how to enable AUTOPROTECT with Bicep. I will give you all my code snippets to get this up and running: Deploy SQL Servers running Windows Deploy a Recovery Services Vault Create a SQL Server Backup Policy Register the SQL Servers to the Vault Enabling the AUTOPROTECT…
Vidnoz AI Review: Text-to-Video That Skips the Camera
Vidnoz is an AI video creation platform that turns text into talking-head videos. No camera, no editing software, no recording setup. I tested it to see how the output compares to building your own video pipeline. What Vidnoz Does You write a script, pick an AI avatar, choose a voice, and Vidnoz generates a complete…
TensorPix Review 2026: Is It Safe, Free Tier, Pricing & Topaz Alternative
I tested TensorPix to see if AI video upscaling actually delivers usable results. Not marketing demos — real footage, real use cases. Here’s what I found. What TensorPix Does TensorPix is a cloud-based AI tool that upscales and enhances video quality. You upload a low-resolution video, pick an AI model, and it processes the file…