<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Automation on Margrop Blog</title>
    <link>https://blog.margrop.net/en/tag/automation/</link>
    <description>Recent content in Automation on Margrop Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Sun, 19 Jul 2026 22:00:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/en/tag/automation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How Did AI Learn to Use Its Hands? From Chatting to Checking, Writing, and Acting</title>
      <link>https://blog.margrop.net/en/post/ai-tool-calling-mcp/</link>
      <pubDate>Sun, 19 Jul 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ai-tool-calling-mcp/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short answer&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AI did not suddenly grow hands. It learned a very practical loop: &lt;strong&gt;decide which tool is needed, request that tool with structured arguments, wait for a real result, and then explain the result in human language.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is usually called &lt;strong&gt;Tool Calling&lt;/strong&gt;. You may also see Function Calling or a Tools API. MCP, the Model Context Protocol, is closer to a universal socket: different AI applications can discover and call files, databases, search engines, ticket systems, browsers, and other capabilities through a common protocol.&lt;/p&gt;&#xA;&lt;p&gt;This article opens the loop and examines every moving part: what the model does, who actually performs the action, why MCP matters, where permissions belong, and why “can call a tool” does not mean “should receive the keys to everything.” Screenshots come from official OpenAI and MCP pages; the terminal-style evidence images are generated from the real invocation flow. No real private network address or hostname is included.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Running rsync Blindly: Preview Differences Before a Safe Incremental Sync</title>
      <link>https://blog.margrop.net/en/post/rsync-diff-incremental-sync/</link>
      <pubDate>Sat, 11 Jul 2026 13:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/rsync-diff-incremental-sync/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short answer&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The best rsync habit is not memorizing more switches. It is separating every risky job into two stages: &lt;strong&gt;generate a dry-run plan first, review it, and only then perform the real incremental sync&lt;/strong&gt;. Deletion should be a separate, explicit permission rather than a hidden default.&lt;/p&gt;&#xA;&lt;p&gt;The common &lt;code&gt;rsync -n -avz --delete --out-format=&amp;quot;%n&amp;quot;&lt;/code&gt; pattern can list paths that may change, but &lt;code&gt;%n&lt;/code&gt; only preserves the name. A safer machine-readable plan uses &lt;code&gt;--itemize-changes&lt;/code&gt; together with &lt;code&gt;%i&lt;/code&gt;, so each line identifies an addition, update, deletion, or metadata change.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>The Password Was Right—So Why Did Synology Reject It? Rebuilding DSM’s RSA &#43; AES WebAPI Login</title>
      <link>https://blog.margrop.net/en/post/synology-webapi-login-encryption-deep-dive/</link>
      <pubDate>Sat, 11 Jul 2026 08:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/synology-webapi-login-encryption-deep-dive/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Some Synology WebAPI clients do more than post &lt;code&gt;account&lt;/code&gt; and &lt;code&gt;passwd&lt;/code&gt; to &lt;code&gt;auth.cgi&lt;/code&gt;. The implementation preserved in OpenStack Cinder first calls &lt;code&gt;SYNO.API.Encryption.getinfo&lt;/code&gt;, receives an RSA public modulus, server time, and two dynamic field names, then generates a one-use passphrase. RSA PKCS#1 v1.5 encrypts that passphrase; an OpenSSL-compatible AES-256-CBC envelope encrypts the URL-encoded login parameters; both Base64 values are finally placed inside the server-provided &lt;code&gt;cipherkey&lt;/code&gt; field.&lt;/p&gt;&#xA;&lt;p&gt;This is an authorized WebAPI compatibility technique—not a password bypass. A SID for &lt;code&gt;session=DSM&lt;/code&gt; is also not automatically the same thing as a complete browser UI login state. Parameter encryption does not replace HTTPS, because TLS still authenticates the server and protects integrity against an active intermediary.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Original cover: an RSA outer envelope and AES inner envelope protect a NAS login&#34; src=&#34;https://blog.margrop.net/post-images/synology-webapi-login-encryption-deep-dive/00-cover-original.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stop Clicking Through VMs: A Hands-On Guide to Connecting Proxmox VE to an AI Agent Safely</title>
      <link>https://blog.margrop.net/en/post/proxmox-ve-ai-agent-guide/</link>
      <pubDate>Sat, 11 Jul 2026 02:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/proxmox-ve-ai-agent-guide/</guid>
      <description>Connecting an AI agent to Proxmox VE sounds like giving a robot administrator the keys to your datacenter. That is exactly what you should not do. The safe starting point is a dedicated, revocable, read-only API token, a locally running MCP server, and a clear approval boundary for every write operation. This guide explains the architecture, shows manual and agent-assisted setup, and provides one-click installers for Windows 11, Ubuntu 26.</description>
    </item>
    <item>
      <title>Do Not Just Copy QingLong Into BaiHu: A Real Safe Migration Drill</title>
      <link>https://blog.margrop.net/en/post/qinglong-to-baihu-safe-migration/</link>
      <pubDate>Thu, 09 Jul 2026 10:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/qinglong-to-baihu-safe-migration/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line first&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Migrating from QingLong Panel to BaiHu Panel is not a directory-copy exercise. I ran a real migration drill in an isolated Docker environment: a fresh QingLong instance with sample environment variables, scripts, labels, and cron jobs; then a fresh BaiHu instance; then an actual conversion and verification pass.&lt;/p&gt;&#xA;&lt;p&gt;The reliable migration unit is not the whole QingLong data directory. It is a set of assets: script files, environment variables, scheduled tasks, tags, enabled/disabled state, and task-variable relations. QingLong uses numeric IDs; BaiHu uses string IDs and relation tables. QingLong commands such as &lt;code&gt;task daily_check.py&lt;/code&gt; also need to become executable BaiHu commands such as &lt;code&gt;python /app/data/scripts/qinglong-migrated/daily_check.py&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This article contains no full private IP address, private registry address, host name, token, cookie, or production secret. The screenshots come from a disposable lab, and the variables are redacted sample data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Should QingLong Panel Still Face the Public Internet? After the 2026 Bypass, I Would Start With BaiHu</title>
      <link>https://blog.margrop.net/en/post/qinglong-baihu-panel-security/</link>
      <pubDate>Thu, 09 Jul 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/qinglong-baihu-panel-security/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line first&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;QingLong Panel used to be the default answer for many self-hosted scheduled-script setups. It can run scripts, manage environment variables, show logs, synchronize repositories, and wrap crontab-like workflows in a friendly web UI. But the critical QingLong issues publicly discussed in early 2026 changed the risk calculation: &lt;strong&gt;a task scheduler panel is not just another web admin page. It often holds scripts, secrets, notification tokens, and execution privileges. If authentication can be bypassed, the attacker is not merely viewing a dashboard; they may be standing in front of a machine that can run jobs.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;For new lightweight deployments, I would now evaluate BaiHu Panel first. BaiHu is a Go + Vue3 automation task scheduling platform focused on low overhead and high performance. Its public README describes Docker / Docker Compose deployment, Mise-based runtime management, repository task synchronization, logs, notifications, and secret handling. It is not a perfect one-to-one replacement for every QingLong workflow, but it is a better starting point for many personal script-hosting cases.&lt;/p&gt;&#xA;&lt;p&gt;If you must keep using QingLong temporarily because of old jobs, migration cost, or compatibility constraints, do not expose it directly to the public Internet. Put a protection layer in front of it: VPN, zero-trust access, reverse-proxy Basic Auth, an allowlist, WAF rules, or equivalent access control. This article includes one-click scripts for Windows 11, Ubuntu 26.04, and macOS 26. They deploy BaiHu by default, require an explicit switch to deploy QingLong, and put either panel behind Caddy Basic Auth.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Hunting for YOLO Flags: One Launcher for 6 AI Agent Tools</title>
      <link>https://blog.margrop.net/en/post/ai-agent-yolo-one-command/</link>
      <pubDate>Mon, 06 Jul 2026 09:50:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ai-agent-yolo-one-command/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In AI Agent tools, &lt;code&gt;yolo&lt;/code&gt; does not mean “the model is smarter.” It means “ask me fewer questions.” It reduces or skips approval prompts so the Agent can run more like an unattended automation script. The annoying part is that every tool names this differently. Codex exposes a dangerous approval-and-sandbox bypass. Claude Code has a dangerous permission-skip mode and a permission mode. Gemini CLI and Qwen Code use &lt;code&gt;--approval-mode=yolo&lt;/code&gt;. OpenCode uses &lt;code&gt;--auto&lt;/code&gt; plus permission rules. Aider uses &lt;code&gt;--yes-always&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;My recommendation is not to overwrite &lt;code&gt;codex&lt;/code&gt;, &lt;code&gt;claude&lt;/code&gt;, or &lt;code&gt;gemini&lt;/code&gt; with risky aliases. Install an explicit &lt;code&gt;agent-yolo&lt;/code&gt; launcher instead. When you really want high autonomy, type &lt;code&gt;agent-yolo codex&lt;/code&gt;, &lt;code&gt;agent-yolo claude&lt;/code&gt;, or &lt;code&gt;agent-yolo gemini&lt;/code&gt;. This article provides Windows 11, Ubuntu 26.04, and macOS 26 scripts. They do not depend on third-party services, do not install missing Agent tools, and do not contain private addresses, full computer names, private domains, tokens, or keys.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Fresh Ubuntu 26.04 Without Snap: A Clean, Reversible Removal Guide</title>
      <link>https://blog.margrop.net/en/post/ubuntu-2604-remove-snap-cleanly/</link>
      <pubDate>Mon, 06 Jul 2026 09:45:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-2604-remove-snap-cleanly/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you are setting up a fresh Ubuntu 26.04 system and you know you do not want Snap, remove it in the right order: inspect installed snaps, save anything important, remove snaps with &lt;code&gt;snap remove --purge&lt;/code&gt;, purge the &lt;code&gt;snapd&lt;/code&gt; package with APT, clean the remaining Snap directories, and optionally block accidental reinstall.&lt;/p&gt;&#xA;&lt;p&gt;This guide explains the background, symptoms, root cause of messy removals, manual execution, AI Agent execution, and three one-click scripts for Windows 11, Ubuntu 26.04, and macOS 26. The scripts default to dry-run mode, require an explicit execution switch, depend only on built-in OS tools, and do not include private IP addresses, hostnames, private domains, tokens, or secrets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Fighting Over the Remote: Use DSM Scheduled Tasks to Lock a Kids&#39; Video Folder Automatically</title>
      <link>https://blog.margrop.net/en/post/synology-kid-video-acl-curfew/</link>
      <pubDate>Sun, 05 Jul 2026 06:50:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/synology-kid-video-acl-curfew/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is not an account lockout guide. The goal is narrower and cleaner: lock one kids&amp;rsquo; video folder on a Synology DSM 7.2.1 NAS during selected hours, while leaving the account, password, homework folders, photo folders, and other shares alone. The script inserts one temporary &lt;code&gt;deny&lt;/code&gt; ACL entry with &lt;code&gt;synoacltool&lt;/code&gt;, removes that entry during open windows, backs up the ACL before each change, and verifies the result after each operation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Original cover: the kids&amp;rsquo; video folder is locked by schedule&#34; src=&#34;https://blog.margrop.net/post-images/synology-kid-video-acl-curfew/00-ai-cover.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stop Treating Passkeys as SSH Passwords: The Right Way to Use SSH Keys and Phone/Desktop Passkeys</title>
      <link>https://blog.margrop.net/en/post/ssh-passwordless-login-passkeys-correct-use/</link>
      <pubDate>Tue, 30 Jun 2026 09:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ssh-passwordless-login-passkeys-correct-use/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;SSH passwordless login and passkeys on phones, Macs, and Windows PCs both use the public-key idea, but they are not the same tool. SSH keys are for logging in to servers, Git remotes, jump boxes, and automation endpoints. Passkeys are for signing in to websites, apps, and account systems. They are like two modern key rings: one opens the machine-room door, the other opens your online account door. The cryptographic idea is related, but the locks are different.&lt;/p&gt;&#xA;&lt;p&gt;The practical rule is simple: generate a separate SSH key on each client device, keep the private key only on that device or inside a hardware security key, and put only the public key on the server. Verify public-key login before disabling password login. Use passkeys through iPhone, Android, macOS 26, Windows 11, system password managers, or hardware security keys for website and app sign-in. Do not try to paste a phone passkey into &lt;code&gt;authorized_keys&lt;/code&gt;. This post includes one-click scripts for Windows 11, Ubuntu 26.04, and macOS 26, plus a manual automation path and an Agent-driven configuration path. The examples do not depend on any third-party service and do not contain real internal addresses, full computer names, private domains, or secrets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Clicking Update One App at a Time: Let an Agent Upgrade Common Software on Windows 11, Ubuntu 26.04, and macOS 26</title>
      <link>https://blog.margrop.net/en/post/agent-upgrade-common-software-windows11-ubuntu2604-macos26/</link>
      <pubDate>Sun, 28 Jun 2026 08:58:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/agent-upgrade-common-software-windows11-ubuntu2604-macos26/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Updating everyday software is painful not because the commands are impossible, but because the update sources are scattered across several worlds. Windows 11 has WinGet, Microsoft Store, and vendor installers. Ubuntu 26.04 has apt, snap, flatpak, and service restarts. macOS 26 has Software Update, App Store, Homebrew, and applications downloaded outside the store. A human can easily miss something. An AI Agent can help, but only if you give it boundaries.&lt;/p&gt;&#xA;&lt;p&gt;My recommendation is to treat the Agent as an update operator: inventory first, dry-run second, execute third, verify last. This article provides three one-command scripts for Windows 11, Ubuntu 26.04, and macOS 26. They do not depend on third-party update assistants or cloud services. They call only built-in update tools and package managers already installed and configured on the machine. The examples contain no real private address, full computer name, private domain, token, or key.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Is Your Computer Always Full? Use an AI Agent to Safely Clean Junk Files on Windows 11, Ubuntu 26.04, and macOS 26</title>
      <link>https://blog.margrop.net/en/post/ai-agent-cleanup-windows11-ubuntu2604-macos26/</link>
      <pubDate>Sun, 28 Jun 2026 07:15:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ai-agent-cleanup-windows11-ubuntu2604-macos26/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Junk cleanup is risky not because it is hard to delete files, but because it is easy to delete too much. On Windows 11, Ubuntu 26.04, and macOS 26, the safe cleanup targets are usually temporary directories, package caches, old logs, recycle bin or trash contents, and files that can be regenerated. A cleanup script should not casually touch documents, photos, browser profiles, keys, certificates, virtual machine images, or application data.&lt;/p&gt;&#xA;&lt;p&gt;This article gives you two paths: &lt;strong&gt;manual automation&lt;/strong&gt;, where you run the scripts yourself, inspect the dry-run output, and then explicitly enable deletion; and &lt;strong&gt;Agent-driven automation&lt;/strong&gt;, where Codex, Claude, OpenClaw, HermesAgent, or another AI Agent performs the same scan, review, execution, and verification flow for you. The three scripts cover Windows 11, Ubuntu 26.04, and macOS 26. They do not depend on third-party services, do not download cleanup utilities, and do not contain real private addresses, computer names, private domains, or secrets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Chrome Ate 4GB of Disk Space? Delete the Local AI Model and Stop It Coming Back</title>
      <link>https://blog.margrop.net/en/post/chrome-disable-local-ai-model-4gb/</link>
      <pubDate>Sat, 27 Jun 2026 23:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/chrome-disable-local-ai-model-4gb/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Some Google Chrome installations now download several gigabytes of local generative AI model data in the background. This is usually not malware and not a broken cache. It is Chrome preparing on-device AI models for browser and web features. Deleting the folder only frees disk space temporarily. The durable fix is to &lt;strong&gt;disable the local GenAI foundational model download with Chrome policy, then remove the already downloaded model folders&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This guide covers Windows 11, Ubuntu 26.04, and macOS 26. It includes one-click scripts, manual steps, and an agent prompt you can hand to Codex, Claude, OpenClaw, Gemini CLI, or another local operator. The scripts use native OS policy mechanisms and Chrome&amp;rsquo;s documented policy. They do not depend on third-party services and do not include real IP addresses, hostnames, internal domains, or secrets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>macOS 26 Boot Daemons: Put frp and EasyTier in LaunchDaemons, Not Login Items</title>
      <link>https://blog.margrop.net/en/post/macos-26-launchdaemon-boot-service-frp-easytier/</link>
      <pubDate>Sat, 27 Jun 2026 17:12:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/macos-26-launchdaemon-boot-service-frp-easytier/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you want &lt;code&gt;frp&lt;/code&gt;, &lt;code&gt;EasyTier&lt;/code&gt;, a sync agent, a collector, a bot, or a proxy daemon to start automatically on macOS 26, the key is not “where can I hide this command?” The key is “which native service manager owns its lifecycle?” This article is about unattended background services, not ordinary desktop login apps.&lt;/p&gt;&#xA;&lt;p&gt;On macOS 26, a daemon that must start before user login belongs in /Library/LaunchDaemons. Login items and LaunchAgents are tools opened after a person enters the room. LaunchDaemons are more like the building&amp;rsquo;s elevator or water pump: they should run as the machine comes up.&lt;/p&gt;&#xA;&lt;p&gt;I will show two paths: &lt;strong&gt;manual configuration&lt;/strong&gt;, for understanding every moving part, and &lt;strong&gt;agent / one-click automation&lt;/strong&gt;, for cases where you already know where the binary and config file live. The scripts are self-contained, use built-in OS mechanisms, do not download third-party wrappers, and do not include real addresses, hostnames, private domains, or secrets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Windows 11/10 Background Autostart: Run frp and EasyTier Unattended Without Third-Party Wrappers</title>
      <link>https://blog.margrop.net/en/post/windows-11-10-background-service-autostart-frp-easytier/</link>
      <pubDate>Sat, 27 Jun 2026 17:11:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/windows-11-10-background-service-autostart-frp-easytier/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you want &lt;code&gt;frp&lt;/code&gt;, &lt;code&gt;EasyTier&lt;/code&gt;, a sync agent, a collector, a bot, or a proxy daemon to start automatically on Windows 11/10, the key is not “where can I hide this command?” The key is “which native service manager owns its lifecycle?” This article is about unattended background services, not ordinary desktop login apps.&lt;/p&gt;&#xA;&lt;p&gt;On Windows, the first decision is whether the executable is a real Windows Service. Common command-line daemons such as frp and EasyTier are usually better handled by Task Scheduler at system startup, because it is built in and does not require NSSM, WinSW, or another wrapper.&lt;/p&gt;&#xA;&lt;p&gt;I will show two paths: &lt;strong&gt;manual configuration&lt;/strong&gt;, for understanding every moving part, and &lt;strong&gt;agent / one-click automation&lt;/strong&gt;, for cases where you already know where the binary and config file live. The scripts are self-contained, use built-in OS mechanisms, do not download third-party wrappers, and do not include real addresses, hostnames, private domains, or secrets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 Boot Services Done Right: Let systemd Run frp and EasyTier for You</title>
      <link>https://blog.margrop.net/en/post/ubuntu-2604-systemd-boot-service-frp-easytier/</link>
      <pubDate>Sat, 27 Jun 2026 17:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-2604-systemd-boot-service-frp-easytier/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you want &lt;code&gt;frp&lt;/code&gt;, &lt;code&gt;EasyTier&lt;/code&gt;, a sync agent, a collector, a bot, or a proxy daemon to start automatically on Ubuntu 26.04, the key is not “where can I hide this command?” The key is “which native service manager owns its lifecycle?” This article is about unattended background services, not ordinary desktop login apps.&lt;/p&gt;&#xA;&lt;p&gt;On Ubuntu 26.04, the standard answer for a background daemon is not a shell startup hack. It is a systemd unit. systemd can wait for the network, start the process before login, collect logs, restart on failure, and stop it in order during shutdown.&lt;/p&gt;&#xA;&lt;p&gt;I will show two paths: &lt;strong&gt;manual configuration&lt;/strong&gt;, for understanding every moving part, and &lt;strong&gt;agent / one-click automation&lt;/strong&gt;, for cases where you already know where the binary and config file live. The scripts are self-contained, use built-in OS mechanisms, do not download third-party wrappers, and do not include real addresses, hostnames, private domains, or secrets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Moving Bedtime Out of the Living Room: Letting macOS launchd Disable Your Kids&#39; Synology Accounts at 22:00 and Quietly Re-enable Them at 08:00</title>
      <link>https://blog.margrop.net/en/post/synology-mykid-curfew-launchd/</link>
      <pubDate>Sun, 14 Jun 2026 08:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/synology-mykid-curfew-launchd/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Synology DSM has a &amp;ldquo;disable this account&amp;rdquo; checkbox in the Control Panel, but it does not run on a schedule. With macOS&amp;rsquo;s built-in &lt;code&gt;launchd&lt;/code&gt; and a 50-line bash script, you can flip the &lt;code&gt;expired&lt;/code&gt; flag on two local accounts at 22:00 every night and flip it back at 08:00. The script does a before-query, a change, an after-query, and &lt;code&gt;exit 1&lt;/code&gt; the moment the after state does not match expectations. &lt;code&gt;launchd&lt;/code&gt; writes stdout and stderr to dedicated log files. The interesting part is that the word &amp;ldquo;parent&amp;rdquo; quietly leaves the conversation: you no longer have to remind anyone to go to bed, the machine does it for you, on time, every day.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This post is not a comprehensive &amp;ldquo;family NAS management&amp;rdquo; guide. It is about one specific thing: turning a manual button click that depends on human memory into a system-level event that just happens on time.&lt;/p&gt;&#xA;&lt;p&gt;If you only want the picture, the overview diagram in Section 2 is the whole article in one frame.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Lights out at 22:00, lights on at 08:00&#34; src=&#34;https://blog.margrop.net/post-images/synology-mykid-curfew-launchd/05-curfew-overview.svg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Complete AI Agent Migration Guide: A Real-World Journey from Scratch with 9 Pitfalls and Fixes</title>
      <link>https://blog.margrop.net/en/post/ai-agent-complete-migration-guide-from-scratch/</link>
      <pubDate>Sat, 30 May 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ai-agent-complete-migration-guide-from-scratch/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Migrating from one AI Agent platform to another sounds like a &amp;ldquo;copy and paste&amp;rdquo; job. In reality, it&amp;rsquo;s a systems engineering challenge involving data migration, channel integration, scheduled tasks, auto-start configuration, proxy settings, and module compatibility.&lt;/p&gt;&#xA;&lt;p&gt;This article documents my complete migration journey: from installing the new platform, migrating memories and skills, configuring messaging channels, debugging mysterious failures, to achieving fully automated operation. 9 pitfalls encountered, 9 solutions found — all shared here.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Migrating from OpenClaw to HermesAgent: A Smooth AI Agent Migration in Practice</title>
      <link>https://blog.margrop.net/en/post/openclaw-to-hermesagent-migration/</link>
      <pubDate>Fri, 29 May 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/openclaw-to-hermesagent-migration/</guid>
      <description>&lt;h2 id=&#34;introduction-why-am-i-moving&#34;&gt;Introduction: Why Am I &amp;ldquo;Moving&amp;rdquo;?&lt;/h2&gt;&#xA;&lt;p&gt;In 2026, the AI agent landscape is evolving at an incredible pace. Tools that were cutting-edge six months ago might already be surpassed by more powerful alternatives. As someone who relies heavily on AI agents for daily work, I&amp;rsquo;ve been closely following the latest developments in this field.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I completed a full migration from OpenClaw to HermesAgent. This wasn&amp;rsquo;t an impulsive decision, but a thoughtful choice made after experiencing the differences between the two tools in real-world usage.&lt;/p&gt;&#xA;&lt;p&gt;This article will share in detail:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Background&lt;/strong&gt;: What OpenClaw and HermesAgent are&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Migration Reasons&lt;/strong&gt;: Why I decided to migrate&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Migration Process&lt;/strong&gt;: Step-by-step guide to complete the migration&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pitfalls Encountered&lt;/strong&gt;: Problems and solutions during migration&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Post-Migration Cleanup&lt;/strong&gt;: How to completely remove OpenClaw residuals&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Post-Migration Experience&lt;/strong&gt;: New capabilities gained from HermesAgent&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Q&amp;amp;A&lt;/strong&gt;: Frequently asked questions&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Do Not Waste Your Codex Quota Before the Reset: Meet Codex Reset Radar</title>
      <link>https://blog.margrop.net/en/post/codex-reset-radar-quota-reset-guide/</link>
      <pubDate>Sun, 24 May 2026 08:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/codex-reset-radar-quota-reset-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Codex resets have recently become more important to watch. Sometimes the reset is part of the normal usage cycle. Sometimes it is a compensation reset after an incident. Sometimes it follows a fix for abnormal limit consumption. For heavy Codex users, the painful part is not that the quota resets. The painful part is discovering that you still had useful weekly quota left, but you did not use it before the reset overwrote the old window.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Codex Reset Radar&lt;/code&gt; is a small public dashboard that turns scattered public signals into a practical warning: if a Codex quota reset window is likely or already open, it tells you to use your remaining weekly quota on valuable work before it expires.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This article discusses only public pages, public status signals, and public references. It does not include private accounts, tokens, internal systems, private network details, or personal usage data. Any discussion of quota, reset windows, and early warnings is a user-side workflow analysis, not an official statement about OpenAI billing, subscription policy, or service guarantees.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stop Dragging Files Around: BaiduPCS-Go CLI and Agent Workflows for Baidu Netdisk</title>
      <link>https://blog.margrop.net/en/post/baidupcs-go-cli-agent-guide/</link>
      <pubDate>Sat, 16 May 2026 10:06:01 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/baidupcs-go-cli-agent-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line first&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you only download one or two files from Baidu Netdisk once in a while, the web UI and official desktop client are fine. Once you start doing batch downloads, remote server pulls, archive uploads, directory audits, or Agent-assisted workflows with Codex, Claude, OpenClaw, HermesAgent, or similar tools, the graphical UI becomes friction. &lt;code&gt;BaiduPCS-Go&lt;/code&gt; is useful not because it is a magic speed booster, but because it turns Baidu Netdisk into something scripts, terminals, and Agents can operate. This article walks through installation checks, BDUSS/STOKEN login, everyday commands, configuration, safety rules, and practical Agent integration.&lt;/p&gt;&#xA;&lt;p&gt;All accounts, cookies, paths, tasks, and settings in this article are sanitized examples. They do not contain real BDUSS, STOKEN, cookies, private directories, internal addresses, or business information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Clicking Remote Desktop: Let AI Agents SSH into Windows Instead</title>
      <link>https://blog.margrop.net/en/post/agent-ssh-windows-openssh/</link>
      <pubDate>Wed, 13 May 2026 08:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/agent-ssh-windows-openssh/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;An AI agent does not need Remote Desktop, VNC, or a proprietary remote-control tool to operate a Windows machine. For many workstations, lab machines, development PCs, and internal servers, the cleanest path is to enable the built-in &lt;strong&gt;OpenSSH Server&lt;/strong&gt; on Windows and connect from Linux or macOS with a normal command: &lt;code&gt;ssh &amp;lt;user&amp;gt;@&amp;lt;windows-host&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There are only three things to get right. First, install and enable OpenSSH Server on Windows 10 or Windows 11. Second, generate an SSH key on Linux or macOS and place the public key on Windows. Third, if the target account belongs to the Windows Administrators group, put the public key in &lt;code&gt;C:\ProgramData\ssh\administrators_authorized_keys&lt;/code&gt; and lock down the ACL with &lt;code&gt;icacls&lt;/code&gt;. After that, an AI agent can run PowerShell, copy scripts, collect logs, install tools, and perform repeatable maintenance through the same SSH workflow it already uses for Linux.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All hostnames, addresses, usernames, screenshots, and commands in this article use generic placeholders. No real internal addresses, usernames, machine names, tokens, keys, or private paths are included. Replace placeholders such as &lt;code&gt;&amp;lt;user&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;windows-host&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;windows-ip&amp;gt;&lt;/code&gt; with values from your own environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Prompt OpenClaw, HermesAgent, Codex, Claude, Gemini, OpenCode, and Droid to Write Articles and Publish WeChat Drafts</title>
      <link>https://blog.margrop.net/en/post/agent-prompt-wechat-draft-automation/</link>
      <pubDate>Tue, 05 May 2026 16:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/agent-prompt-wechat-draft-automation/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you want an agent such as OpenClaw, HermesAgent, Codex, Claude, Gemini, OpenCode, or Droid to write an article, prepare a Hugo blog post, convert the Chinese version into WeChat-compatible HTML, preview it, fix layout issues, and create a WeChat Official Account draft, the prompt cannot simply say &amp;ldquo;write and publish an article.&amp;rdquo; A useful prompt must define the goal, source material, paths, account constraints, fixed-IP requirements, conversion steps, preview checks, failure recovery, privacy boundaries, and final verification evidence.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This post describes a reusable prompting pattern for article automation. It explains how to prepare the WeChat draft API, why a Linux machine with a fixed public IP is often required, how to tell an agent to try local API access first and then fall back to a fixed-egress host, how to use a Markdown-to-WeChat-HTML converter, and how to make the agent check for invisible white text, strange indentation, broken images, and accidental leaks before declaring the job done.&lt;/p&gt;&#xA;&lt;p&gt;All examples are privacy-safe. They use placeholders rather than real secrets, private IP addresses, hostnames, repository URLs, tokens, cookies, or personal paths. Replace placeholders with your own values only in a protected runtime environment, never in a public article, public repository, or screenshot.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrating Synology Operations as an OpenClaw / HermesAgent Skill: From One Sentence to Auditable NAS Automation</title>
      <link>https://blog.margrop.net/en/post/openclaw-hermesagent-synology-skill/</link>
      <pubDate>Tue, 05 May 2026 12:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/openclaw-hermesagent-synology-skill/</guid>
      <description>&lt;p&gt;I have already written two Synology CLI references on this blog:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.margrop.net/en/post/synology-ssh-commands/&#34;&gt;Synology SSH Commands Cheatsheet&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.margrop.net/en/post/synology-diskstation-cli-administration-guide/&#34;&gt;Synology NAS CLI Administration Guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Those posts answer the question: “What commands can a human run on a Synology NAS?” This article answers a different question: if I already use OpenClaw / HermesAgent, how can I turn those commands into an operations Skill so that I can ask the agent, in one sentence, to inspect the NAS, summarize evidence, prepare a maintenance plan, and execute approved commands only when the risk is acceptable?&lt;/p&gt;&#xA;&lt;p&gt;The short answer is: yes, but the Skill must not become an unrestricted root shell. The right design is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Make Synology SSH access controlled, testable, and revocable.&lt;/li&gt;&#xA;&lt;li&gt;Put common Synology CLI operations into a Skill, together with command categories, risk levels, and output rules.&lt;/li&gt;&#xA;&lt;li&gt;Allow read-only diagnostics by default.&lt;/li&gt;&#xA;&lt;li&gt;Require explicit approval for service restarts, permission changes, user changes, network changes, deletion, and storage operations.&lt;/li&gt;&#xA;&lt;li&gt;Preserve commands, output, and reasoning so each operation remains auditable.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you only want the big picture, the diagram below summarizes the whole article.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;OpenClaw / HermesAgent Synology Skill overview&#34; src=&#34;https://blog.margrop.net/post-images/openclaw-hermesagent-synology-skill/01-overview-handdrawn.svg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding Proxy Support to Antigravity and Claude on macOS: Safely Wrapping Electron Apps Without Patching Them</title>
      <link>https://blog.margrop.net/en/post/macos-electron-app-proxy-wrapper-for-antigravity-and-claude/</link>
      <pubDate>Wed, 25 Mar 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/macos-electron-app-proxy-wrapper-for-antigravity-and-claude/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Before You Start&lt;/strong&gt;&#xA;This post documents a pattern that has already been validated in a real macOS environment: &lt;strong&gt;do not patch the original application bundle, and do not publish your real proxy endpoint. Instead, place a tiny wrapper app in front of the original Electron application.&lt;/strong&gt; That wrapper becomes the stable place where proxy settings, launch flags, and Node-side bootstrap logic live.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;When people first hit this problem, the instinct is usually to edit &lt;code&gt;/Applications/Claude.app&lt;/code&gt; or &lt;code&gt;/Applications/Antigravity.app&lt;/code&gt; directly. That can work once, but it is a poor long-term operational choice for three reasons:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You may break code signing behavior and make future launches or permission prompts more fragile.&lt;/li&gt;&#xA;&lt;li&gt;Auto-updates can overwrite your local modifications at any time.&lt;/li&gt;&#xA;&lt;li&gt;If you hardcode a real proxy endpoint into the app bundle, screenshots, scripts, or a public post, you can leak private infrastructure details that never needed to be exposed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The approach that proved much more stable was:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Leave the original &lt;code&gt;Claude.app&lt;/code&gt; and &lt;code&gt;Antigravity.app&lt;/code&gt; untouched.&lt;/li&gt;&#xA;&lt;li&gt;Create &lt;code&gt;Claude (Proxy).app&lt;/code&gt; and &lt;code&gt;Antigravity (Proxy).app&lt;/code&gt; under &lt;code&gt;~/Applications&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Let each wrapper app do only three things: load a private &lt;code&gt;proxy.env&lt;/code&gt;, export upper/lower-case proxy variables, and launch the original Electron binary with &lt;code&gt;--proxy-server&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If the target app also uses Node/undici &lt;code&gt;fetch&lt;/code&gt;, inject a very small &lt;code&gt;NODE_OPTIONS=--require=...&lt;/code&gt; bootstrap so Node-side requests follow the same proxy path.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;All proxy endpoints in this article are intentionally redacted and replaced with placeholders such as:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;http://127.0.0.1:PORT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace that value with your own local proxy entrypoint. &lt;strong&gt;Do not publish real proxy hosts, internal IP addresses, usernames, passwords, tokens, or internal domains in a public article, repository, or screenshot.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
