<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agent-Workflow on Armstrong Yan</title><link>https://yanqian.github.io/tags/agent-workflow/</link><description>Recent content in Agent-Workflow on Armstrong Yan</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 04 Jun 2026 10:46:50 +0800</lastBuildDate><atom:link href="https://yanqian.github.io/tags/agent-workflow/index.xml" rel="self" type="application/rss+xml"/><item><title>I Built a Small Harness to Stop AI Coding Projects From Forgetting State</title><link>https://yanqian.github.io/posts/publish/i-built-a-small-harness-to-stop-ai-coding-projects-from-forgetting-state/</link><pubDate>Thu, 04 Jun 2026 10:46:50 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/i-built-a-small-harness-to-stop-ai-coding-projects-from-forgetting-state/</guid><description>&lt;p>AI coding agents are powerful.&lt;/p>
&lt;p>But long-running AI coding projects break in a very specific way:&lt;/p>
&lt;ul>
&lt;li>the session is interrupted&lt;/li>
&lt;li>the context becomes too long&lt;/li>
&lt;li>the weekly quota runs out&lt;/li>
&lt;li>tomorrow&amp;rsquo;s agent forgets yesterday&amp;rsquo;s decisions&lt;/li>
&lt;li>the agent changes unrelated files&lt;/li>
&lt;li>the agent marks work done too early&lt;/li>
&lt;/ul>
&lt;p>The problem is not that AI cannot write code.&lt;/p>
&lt;p>The problem is that AI coding projects often do not have durable project state.&lt;/p></description></item><item><title>Remote Agent Workflow</title><link>https://yanqian.github.io/posts/publish/remote-agent-workflow/</link><pubDate>Mon, 01 Jun 2026 16:34:46 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/remote-agent-workflow/</guid><description>&lt;p>This series is about moving from mobile SSH to a durable, repository-backed AI agent workflow.&lt;/p>
&lt;p>The starting point was simple: I wanted to keep local Codex work moving when I was away from my Mac.&lt;/p>
&lt;p>The deeper question became:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">How do I turn remote access into a recoverable, verifiable, long-running agent workflow?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="articles">
 Articles
 &lt;a class="heading-link" href="#articles">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>&lt;a href="https://yanqian.github.io/posts/publish/remote-mac-terminal-for-codex/" >Remote Agent Workflow, Part 1: Remote Mac Terminal for Codex&lt;/a>&lt;br>
Set up phone-to-Mac terminal access with Tailscale, SSH, Termius, tmux, and caffeinate.&lt;/p></description></item><item><title>Remote Agent Workflow, Part 2: From Remote Shell to Agent Control Plane</title><link>https://yanqian.github.io/posts/publish/from-remote-shell-to-agent-control-plane/</link><pubDate>Sun, 24 May 2026 16:12:12 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/from-remote-shell-to-agent-control-plane/</guid><description>&lt;p>This is Part 2 of the Remote Agent Workflow series.&lt;/p>
&lt;p>In the previous article, I built a practical remote terminal workflow:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Phone -&amp;gt; Tailscale -&amp;gt; SSH -&amp;gt; Mac -&amp;gt; tmux -&amp;gt; Codex
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That setup solved the first problem: how to reach my Mac when I am away from my desk, and how to keep long-running local agent tasks alive after my phone disconnects.&lt;/p>
&lt;p>It was useful immediately.&lt;/p>
&lt;p>But after using it in practice, I found a second problem.&lt;/p></description></item><item><title>Remote Agent Workflow, Part 3: Turning Telegram into a Local Codex Control Plane</title><link>https://yanqian.github.io/posts/publish/turning-telegram-into-a-local-codex-control-plane/</link><pubDate>Sun, 24 May 2026 16:12:12 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/turning-telegram-into-a-local-codex-control-plane/</guid><description>&lt;p>This is Part 3 of the Remote Agent Workflow series.&lt;/p>
&lt;p>In the previous articles, I started with a practical remote terminal setup:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Phone -&amp;gt; Tailscale -&amp;gt; SSH -&amp;gt; Mac -&amp;gt; tmux -&amp;gt; Codex
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That gave me a reliable way to reach my Mac from a phone.&lt;/p>
&lt;p>Then I hit the next limitation: a phone is not a good terminal.&lt;/p>
&lt;p>Mobile SSH is useful for emergencies, but it is not the interface I want for long-running AI development. I do not want to type shell commands, attach tmux sessions, scroll logs, and manually reconstruct state from a narrow phone screen.&lt;/p></description></item><item><title>Remote Agent Workflow, Part 4: In the Repository, Not in the Chat</title><link>https://yanqian.github.io/posts/publish/in-the-repository-not-in-the-chat/</link><pubDate>Sun, 24 May 2026 16:12:12 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/in-the-repository-not-in-the-chat/</guid><description>&lt;p>This is Part 4 of the Remote Agent Workflow series.&lt;/p>
&lt;p>The first layer of my remote AI development setup was connectivity.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Phone -&amp;gt; Tailscale -&amp;gt; SSH -&amp;gt; Mac -&amp;gt; tmux -&amp;gt; Codex
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That let me reach my Mac from a phone and keep long-running local tasks alive.&lt;/p>
&lt;p>The second layer was control.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Phone -&amp;gt; Telegram Bot -&amp;gt; local Codex runtime -&amp;gt; selected repository
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That made the phone a control surface instead of a tiny terminal.&lt;/p></description></item><item><title>Remote Agent Workflow, Part 5: What Still Matters After Codex Mobile</title><link>https://yanqian.github.io/posts/publish/what-still-matters-after-codex-mobile/</link><pubDate>Sun, 24 May 2026 16:12:12 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/what-still-matters-after-codex-mobile/</guid><description>&lt;p>This is Part 5 of the Remote Agent Workflow series.&lt;/p>
&lt;p>When I started this remote AI development setup, the problem was practical.&lt;/p>
&lt;p>I wanted to keep local Codex work moving when I was away from my Mac.&lt;/p>
&lt;p>That led to the first layer:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Phone -&amp;gt; Tailscale -&amp;gt; SSH -&amp;gt; Mac -&amp;gt; tmux -&amp;gt; Codex
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then I realized mobile SSH was not the right daily interface, so I built a Telegram control plane:&lt;/p></description></item><item><title>AI-Native Software Engineering, Part 1: Mental Models in Agentic Coding</title><link>https://yanqian.github.io/posts/publish/agentic-coding-mental-models-and-the-new-depth-of-software-engineering/</link><pubDate>Sat, 23 May 2026 20:33:47 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/agentic-coding-mental-models-and-the-new-depth-of-software-engineering/</guid><description>&lt;p>AI can generate code. Harnesses can validate behavior. But who builds understanding?&lt;/p>
&lt;p>This is Part 1 of the AI-Native Software Engineering series.&lt;/p>
&lt;p>The series asks a larger question:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">When AI lowers the cost of implementation,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">what remains scarce in software engineering?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This article starts with the first scarce resource:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Understanding.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Over the past few months, I&amp;rsquo;ve been experimenting heavily with AI-assisted software development.&lt;/p>
&lt;p>Not autocomplete.&lt;/p>
&lt;p>Not AI as a coding copilot.&lt;/p></description></item><item><title>AI-Native Software Engineering, Part 2: Harness Engineering and Correctness</title><link>https://yanqian.github.io/posts/publish/harness-engineering-is-about-limiting-ai-not-empowering-it/</link><pubDate>Sat, 23 May 2026 20:33:47 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/harness-engineering-is-about-limiting-ai-not-empowering-it/</guid><description>&lt;p>Why the most important part of AI-native software engineering may not be generation, but constraint.&lt;/p>
&lt;p>This is Part 2 of the AI-Native Software Engineering series.&lt;/p>
&lt;p>It continues from &lt;a href="https://yanqian.github.io/posts/publish/agentic-coding-mental-models-and-the-new-depth-of-software-engineering/" >AI-Native Software Engineering, Part 1: Mental Models in Agentic Coding&lt;/a>.&lt;/p>
&lt;p>The previous question was:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">If understanding no longer comes mainly from writing code,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">how do humans build mental models in an agentic workflow?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The next question is:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">If implementation is delegated,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">where does correctness come from?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The conversation around AI-assisted software development often focuses on one thing:&lt;/p></description></item><item><title>AI-Native Software Engineering, Part 3: Software as Search</title><link>https://yanqian.github.io/posts/publish/software-is-becoming-search-why-engineers-are-turning-into-constraint-designers/</link><pubDate>Sat, 23 May 2026 20:33:47 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/software-is-becoming-search-why-engineers-are-turning-into-constraint-designers/</guid><description>&lt;p>When implementation becomes abundant, engineering starts to look less like construction and more like navigation.&lt;/p>
&lt;p>This is Part 3 of the AI-Native Software Engineering series.&lt;/p>
&lt;p>It continues from &lt;a href="https://yanqian.github.io/posts/publish/harness-engineering-is-about-limiting-ai-not-empowering-it/" >AI-Native Software Engineering, Part 2: Harness Engineering and Correctness&lt;/a>.&lt;/p>
&lt;p>The first article asked:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">How does understanding form when implementation is delegated?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The second article asked:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">How does correctness form when generation is cheap?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This article asks:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">If implementation keeps getting cheaper,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">what are engineers actually doing?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here, constraints shift meaning.&lt;/p></description></item><item><title>AI-Native Software Engineering, Part 4: Human Judgment Against Vibe Coding</title><link>https://yanqian.github.io/posts/publish/against-vibe-coding-why-human-judgment-still-matters/</link><pubDate>Sat, 23 May 2026 20:33:47 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/against-vibe-coding-why-human-judgment-still-matters/</guid><description>&lt;p>You can automate implementation. You can automate evaluation. But judgment remains stubbornly human.&lt;/p>
&lt;p>This is Part 4 of the AI-Native Software Engineering series.&lt;/p>
&lt;p>It continues from &lt;a href="https://yanqian.github.io/posts/publish/software-is-becoming-search-why-engineers-are-turning-into-constraint-designers/" >AI-Native Software Engineering, Part 3: Software as Search&lt;/a>.&lt;/p>
&lt;p>The first article asked how understanding forms.&lt;/p>
&lt;p>The second asked how correctness forms.&lt;/p>
&lt;p>The third argued that software is starting to look like search.&lt;/p>
&lt;p>This article pushes back on a dangerous misunderstanding:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">If we have agents, harnesses, and constraints,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">software can produce itself.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That is not true.&lt;/p></description></item></channel></rss>