<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agent on Huy Minh Ha</title><link>https://minhhh.github.io/tags/agent/</link><description>Recent content in Agent on Huy Minh Ha</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 08 Jun 2026 00:00:00 +0700</lastBuildDate><atom:link href="https://minhhh.github.io/tags/agent/index.xml" rel="self" type="application/rss+xml"/><item><title>Migrating Pelican to Hugo with an AI Agent</title><link>https://minhhh.github.io/posts/pelican-to-hugo-llm/</link><pubDate>Mon, 08 Jun 2026 00:00:00 +0700</pubDate><guid>https://minhhh.github.io/posts/pelican-to-hugo-llm/</guid><description>&lt;p&gt;I&amp;rsquo;ve been running this blog on Pelican 3.4 since 2014. It worked, but the tooling was showing its age. I wanted to switch to Hugo — faster builds, simpler dependency story, and the Stack theme looked great out of the box.&lt;/p&gt;
&lt;p&gt;Rather than doing the migration manually, I used an AI agent (opencode) to walk through it step by step.&lt;/p&gt;
&lt;h2 id="what-the-ai-agent-handled"&gt;What the AI agent handled
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conversion script&lt;/strong&gt;: Wrote a Python script to convert 65 Pelican-format articles to Hugo frontmatter, handling field mapping, &lt;code&gt;{filename}&lt;/code&gt; cleanup, and URL preservation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Config scaffolding&lt;/strong&gt;: Set up Hugo modules, the Stack theme, and all 6 config files (&lt;code&gt;config.toml&lt;/code&gt;, &lt;code&gt;params.toml&lt;/code&gt;, &lt;code&gt;menu.toml&lt;/code&gt;, &lt;code&gt;permalinks.toml&lt;/code&gt;, &lt;code&gt;markup.toml&lt;/code&gt;, &lt;code&gt;module.toml&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deployment&lt;/strong&gt;: Created a GitHub Actions workflow with hash-pinned actions for supply-chain security.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asset migration&lt;/strong&gt;: Moved avatar, favicon, and static images; verified all external image URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Site verification&lt;/strong&gt;: Ran through every page type, RSS, Disqus, syntax highlighting, dark mode, and search — all confirmed working.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cleanup&lt;/strong&gt;: Removed Pelican tooling (&lt;code&gt;fabfile.py&lt;/code&gt;, &lt;code&gt;develop_server.sh&lt;/code&gt;, &lt;code&gt;pelicanconf.py&lt;/code&gt;, old themes, &lt;code&gt;Pipfile&lt;/code&gt;), updated &lt;code&gt;Makefile&lt;/code&gt; and README.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-i-did"&gt;What I did
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Made decisions on menu order, category merges (Web Development → Programming), and deployment strategy (GitHub Actions vs. manual).&lt;/li&gt;
&lt;li&gt;Replaced the placeholder avatar with my actual photo.&lt;/li&gt;
&lt;li&gt;Reviewed and approved each step.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="result"&gt;Result
&lt;/h2&gt;&lt;p&gt;65 posts converted, 6 config files scaffolded, all old URLs preserved, publishing reduced to a single push:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git push origin &lt;span class="nb"&gt;source&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Using an AI agent for structured migration work is surprisingly effective. The heavy lifting — script generation, config wiring, verification — maps well to what agents handle best. Validation is inherent to the tools themselves: &lt;code&gt;hugo&lt;/code&gt; returns build errors, &lt;code&gt;git diff&lt;/code&gt; shows exactly what changed, and preview servers confirm layout. Each step self-validates, letting the agent progress without needing manual checkpoints.&lt;/p&gt;</description></item></channel></rss>