<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Beginners on Nick Liu - Software Engineer</title><link>https://nick-liu.com/tags/beginners/</link><description>Recent content in Beginners on Nick Liu - Software Engineer</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>nickboy@users.noreply.github.com (Nick Liu)</managingEditor><webMaster>nickboy@users.noreply.github.com (Nick Liu)</webMaster><copyright>2026 Nick Liu</copyright><lastBuildDate>Sat, 11 Jul 2026 15:08:00 -0700</lastBuildDate><atom:link href="https://nick-liu.com/tags/beginners/index.xml" rel="self" type="application/rss+xml"/><item><title>Make tmux Show What Each Window Is Doing</title><link>https://nick-liu.com/posts/tmux-window-titles/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate><author>nickboy@users.noreply.github.com (Nick Liu)</author><guid>https://nick-liu.com/posts/tmux-window-titles/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 
If you use tmux, you've hit this: ten windows open and they're all named `zsh` or `node`. Which one had your AI agent running? No idea. Let's make tmux label windows usefully.

&lt;/div&gt;

&lt;nav class="series-progress" aria-label="Series progress"&gt;
 &lt;span class="series-progress-label"&gt;Taming Claude Code Sessions · Part 3 of 6&lt;/span&gt;
 &lt;ol class="series-progress-dots"&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/find-claude-code-sessions/" title="Stop Losing Your Claude Code Conversations"&gt;1&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/first-claude-code-hook/" title="Your First Claude Code Hook: Auto-Name Every Session"&gt;2&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-current"&gt;
 &lt;a href="https://nick-liu.com/posts/tmux-window-titles/" title="Make tmux Show What Each Window Is Doing" aria-current="step"&gt;3&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/managing-many-ai-agents/" title="Running Several AI Coding Agents Without Losing Track"&gt;4&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/parallel-agents-git-worktrees/" title="Git worktrees gave each Claude agent its own sandbox. And scattered my sessions."&gt;5&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/claude-code-skills-hooks-subagents/" title="Hooks are guarantees, skills are knowledge, subagents are other people."&gt;6&lt;/a&gt;
 &lt;/li&gt;&lt;/ol&gt;
 &lt;/nav&gt;
&lt;div class="tested-with" role="note"&gt;
 &lt;span class="tested-with-icon" aria-hidden="true"&gt;🧪&lt;/span&gt;
 &lt;span&gt;Tested with &lt;strong&gt;Claude Code&lt;/strong&gt; &lt;code&gt;2.1.x&lt;/code&gt; · macOS / Linux&lt;/span&gt;
&lt;/div&gt;


 
 
 
 



&lt;div
 
 class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
 
 &gt;
 &lt;span
 
 class="text-primary-400 pe-3 flex items-center"
 
 &gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
 &lt;/span&gt;

 &lt;span
 
 class="dark:text-neutral-300"
 
 &gt;&lt;strong&gt;New to tmux?&lt;/strong&gt; It&amp;rsquo;s a &amp;ldquo;terminal multiplexer&amp;rdquo;: it splits one terminal into many windows and panes that survive disconnects. The only vocabulary you need here: a &lt;strong&gt;window&lt;/strong&gt; is like a browser tab inside tmux; the bar at the bottom lists them. The &lt;strong&gt;prefix&lt;/strong&gt; is the key you press before a tmux command, commonly &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;b&lt;/kbd&gt; (mine is &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;a&lt;/kbd&gt;).&lt;/span&gt;
&lt;/div&gt;


&lt;h2 class="relative group"&gt;Why everything is named &lt;code&gt;zsh&lt;/code&gt;
 &lt;div id="why-everything-is-named-zsh" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-everything-is-named-zsh" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;By default tmux has a setting called &lt;strong&gt;&lt;code&gt;automatic-rename&lt;/code&gt;&lt;/strong&gt; turned on. It
renames each window after whatever program is running in it. A shell? &lt;code&gt;zsh&lt;/code&gt;. A
Node program (like Claude Code)? &lt;code&gt;node&lt;/code&gt;. Helpful in theory, useless when
everything collapses to the same word.&lt;/p&gt;</description></item><item><title>Running Several AI Coding Agents Without Losing Track</title><link>https://nick-liu.com/posts/managing-many-ai-agents/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate><author>nickboy@users.noreply.github.com (Nick Liu)</author><guid>https://nick-liu.com/posts/managing-many-ai-agents/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 
Once you're comfortable with AI coding agents, you start running several at once: one refactoring here, one writing tests there, one stuck waiting for your approval. Keeping them straight is its own little skill.

&lt;/div&gt;

&lt;nav class="series-progress" aria-label="Series progress"&gt;
 &lt;span class="series-progress-label"&gt;Taming Claude Code Sessions · Part 4 of 6&lt;/span&gt;
 &lt;ol class="series-progress-dots"&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/find-claude-code-sessions/" title="Stop Losing Your Claude Code Conversations"&gt;1&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/first-claude-code-hook/" title="Your First Claude Code Hook: Auto-Name Every Session"&gt;2&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/tmux-window-titles/" title="Make tmux Show What Each Window Is Doing"&gt;3&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-current"&gt;
 &lt;a href="https://nick-liu.com/posts/managing-many-ai-agents/" title="Running Several AI Coding Agents Without Losing Track" aria-current="step"&gt;4&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/parallel-agents-git-worktrees/" title="Git worktrees gave each Claude agent its own sandbox. And scattered my sessions."&gt;5&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/claude-code-skills-hooks-subagents/" title="Hooks are guarantees, skills are knowledge, subagents are other people."&gt;6&lt;/a&gt;
 &lt;/li&gt;&lt;/ol&gt;
 &lt;/nav&gt;
&lt;div class="tested-with" role="note"&gt;
 &lt;span class="tested-with-icon" aria-hidden="true"&gt;🧪&lt;/span&gt;
 &lt;span&gt;Tested with &lt;strong&gt;Claude Code&lt;/strong&gt; &lt;code&gt;2.1.x&lt;/code&gt; · macOS / Linux&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;Here are two ways to do it: a lightweight tmux plugin, and (briefly) dedicated
&amp;ldquo;AI terminal&amp;rdquo; apps.&lt;/p&gt;</description></item><item><title>Stop Losing Your Claude Code Conversations</title><link>https://nick-liu.com/posts/find-claude-code-sessions/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate><author>nickboy@users.noreply.github.com (Nick Liu)</author><guid>https://nick-liu.com/posts/find-claude-code-sessions/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 
You're deep in a great Claude Code conversation. You close the terminal. The next day you want to pick up where you left off… and you can't find it. Sound familiar? Let's fix that.

&lt;/div&gt;

&lt;nav class="series-progress" aria-label="Series progress"&gt;
 &lt;span class="series-progress-label"&gt;Taming Claude Code Sessions · Part 1 of 6&lt;/span&gt;
 &lt;ol class="series-progress-dots"&gt;&lt;li class="series-progress-dot is-current"&gt;
 &lt;a href="https://nick-liu.com/posts/find-claude-code-sessions/" title="Stop Losing Your Claude Code Conversations" aria-current="step"&gt;1&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/first-claude-code-hook/" title="Your First Claude Code Hook: Auto-Name Every Session"&gt;2&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/tmux-window-titles/" title="Make tmux Show What Each Window Is Doing"&gt;3&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/managing-many-ai-agents/" title="Running Several AI Coding Agents Without Losing Track"&gt;4&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/parallel-agents-git-worktrees/" title="Git worktrees gave each Claude agent its own sandbox. And scattered my sessions."&gt;5&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/claude-code-skills-hooks-subagents/" title="Hooks are guarantees, skills are knowledge, subagents are other people."&gt;6&lt;/a&gt;
 &lt;/li&gt;&lt;/ol&gt;
 &lt;/nav&gt;
&lt;div class="tested-with" role="note"&gt;
 &lt;span class="tested-with-icon" aria-hidden="true"&gt;🧪&lt;/span&gt;
 &lt;span&gt;Tested with &lt;strong&gt;Claude Code&lt;/strong&gt; &lt;code&gt;2.1.x&lt;/code&gt; · macOS / Linux&lt;/span&gt;
&lt;/div&gt;


&lt;h2 class="relative group"&gt;What is a &amp;ldquo;session,&amp;rdquo; and where does it go?
 &lt;div id="what-is-a-session-and-where-does-it-go" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-a-session-and-where-does-it-go" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Every time you run &lt;code&gt;claude&lt;/code&gt;, you start a &lt;strong&gt;session&lt;/strong&gt;, one conversation, with
its full history. When you quit, that history doesn&amp;rsquo;t vanish. Claude Code saves
it to disk, organized &lt;strong&gt;per project folder&lt;/strong&gt;, here:&lt;/p&gt;</description></item><item><title>Your First Claude Code Hook: Auto-Name Every Session</title><link>https://nick-liu.com/posts/first-claude-code-hook/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate><author>nickboy@users.noreply.github.com (Nick Liu)</author><guid>https://nick-liu.com/posts/first-claude-code-hook/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 
In Part 1 we learned that named sessions are easy to find. Now let's make naming automatic with a hook. This is also a perfect first hook project, so I'll explain the whole idea from scratch.

&lt;/div&gt;

&lt;nav class="series-progress" aria-label="Series progress"&gt;
 &lt;span class="series-progress-label"&gt;Taming Claude Code Sessions · Part 2 of 6&lt;/span&gt;
 &lt;ol class="series-progress-dots"&gt;&lt;li class="series-progress-dot is-done"&gt;
 &lt;a href="https://nick-liu.com/posts/find-claude-code-sessions/" title="Stop Losing Your Claude Code Conversations"&gt;1&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot is-current"&gt;
 &lt;a href="https://nick-liu.com/posts/first-claude-code-hook/" title="Your First Claude Code Hook: Auto-Name Every Session" aria-current="step"&gt;2&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/tmux-window-titles/" title="Make tmux Show What Each Window Is Doing"&gt;3&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/managing-many-ai-agents/" title="Running Several AI Coding Agents Without Losing Track"&gt;4&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/parallel-agents-git-worktrees/" title="Git worktrees gave each Claude agent its own sandbox. And scattered my sessions."&gt;5&lt;/a&gt;
 &lt;/li&gt;&lt;li class="series-progress-dot"&gt;
 &lt;a href="https://nick-liu.com/posts/claude-code-skills-hooks-subagents/" title="Hooks are guarantees, skills are knowledge, subagents are other people."&gt;6&lt;/a&gt;
 &lt;/li&gt;&lt;/ol&gt;
 &lt;/nav&gt;
&lt;div class="tested-with" role="note"&gt;
 &lt;span class="tested-with-icon" aria-hidden="true"&gt;🧪&lt;/span&gt;
 &lt;span&gt;Tested with &lt;strong&gt;Claude Code&lt;/strong&gt; &lt;code&gt;2.1.x&lt;/code&gt; · macOS / Linux&lt;/span&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://nick-liu.com/posts/find-claude-code-sessions/" &gt;Part 1&lt;/a&gt; left us with one chore: you still
have to remember to name your sessions. Let&amp;rsquo;s delete that chore.&lt;/p&gt;</description></item></channel></rss>