{"id":100846,"date":"2026-06-02T00:03:12","date_gmt":"2026-06-01T22:03:12","guid":{"rendered":"https:\/\/dyb.eu\/blog\/?p=100846"},"modified":"2026-06-02T00:03:59","modified_gmt":"2026-06-01T22:03:59","slug":"claude-code-tmux-stop-losing-your-terminal-sessions-every-time-your-mac-sleeps","status":"publish","type":"post","link":"https:\/\/dyb.eu\/blog\/en\/claude-code-tmux-stop-losing-your-terminal-sessions-every-time-your-mac-sleeps\/","title":{"rendered":"Claude Code + tmux: Stop Losing Your Terminal Sessions Every Time Your Mac Sleeps"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">You launch a Claude Code session on your Mac.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>you close the lid,<\/li>\n\n\n\n<li>the terminal crashes,<\/li>\n\n\n\n<li>your SSH session disconnects,<\/li>\n\n\n\n<li>or VSCode restarts.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">And the entire session disappears.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Context gone. History gone. Work gone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The issue is not Claude Code itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The issue is that the agent is running directly inside your active terminal session.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When the terminal dies, the process dies with it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why tmux Completely Changes the Claude Code Experience<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>tmux<\/code> lets you detach terminal sessions from your current terminal window.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That means:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>your Claude session keeps running even if the terminal closes,<\/li>\n\n\n\n<li>you can reconnect later exactly where you left off,<\/li>\n\n\n\n<li>Claude keeps its loaded context,<\/li>\n\n\n\n<li>and long-running tasks continue in the background.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This is especially useful:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>over SSH on VPS instances,<\/li>\n\n\n\n<li>for long-running sessions,<\/li>\n\n\n\n<li>in multi-project workflows,<\/li>\n\n\n\n<li>with multiple Claude agents,<\/li>\n\n\n\n<li>on remote servers,<\/li>\n\n\n\n<li>or simply to avoid keeping a MacBook awake 24\/7.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The Setup: a <code>cc<\/code> Alias<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The goal:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>automatically create a tmux session,<\/li>\n\n\n\n<li>launch <code>claude remote-control<\/code>,<\/li>\n\n\n\n<li>instantly attach your terminal,<\/li>\n\n\n\n<li>generate a unique session name per project.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Quick Installation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Bash<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"alias cc='SESSION=claude-\\$(basename \\\"\\$PWD\\\")-\\$(date +%s); tmux new-session -d -s \\$SESSION \\\"cd \\\\\\\"\\$PWD\\\\\\\" &amp;&amp; claude remote-control\\\" &amp;&amp; tmux attach -t \\$SESSION'\" &gt;&gt; ~\/.bashrc &amp;&amp; source ~\/.bashrc\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Zsh<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"alias cc='SESSION=claude-\\$(basename \\\"\\$PWD\\\")-\\$(date +%s); tmux new-session -d -s \\$SESSION \\\"cd \\\\\\\"\\$PWD\\\\\\\" &amp;&amp; claude remote-control\\\" &amp;&amp; tmux attach -t \\$SESSION'\" &gt;&gt; ~\/.zshrc &amp;&amp; source ~\/.zshrc\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Usage<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">From any project directory:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The alias will:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>create a dedicated tmux session,<\/li>\n\n\n\n<li>launch Claude Code inside the current project,<\/li>\n\n\n\n<li>automatically attach your terminal to the session.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Reconnecting to a Claude Session<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Even after closing your terminal, the session remains active.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To list active sessions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tmux ls\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To reconnect to a session:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tmux attach -t session-name\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Why This Matters for Engineering Teams<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In real-world infrastructure and development environments, this approach helps:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>maintain persistent AI agents,<\/li>\n\n\n\n<li>reduce context loss,<\/li>\n\n\n\n<li>improve SSH workflows,<\/li>\n\n\n\n<li>streamline DevOps operations,<\/li>\n\n\n\n<li>run multiple Claude environments simultaneously,<\/li>\n\n\n\n<li>and avoid interruptions caused by user workstations.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">It is especially useful for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kubernetes,<\/li>\n\n\n\n<li>CI\/CD pipelines,<\/li>\n\n\n\n<li>Linux administration,<\/li>\n\n\n\n<li>backend development,<\/li>\n\n\n\n<li>automation,<\/li>\n\n\n\n<li>cybersecurity,<\/li>\n\n\n\n<li>and long-running operational tasks.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Bonus: Clean Multi-Project Isolation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because the session name automatically includes the current directory, every project gets its own isolated Claude environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>claude-api-1748812941\nfrontend-1748812958\ninfra-prod-1748812972\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can work across multiple projects simultaneously without conflicts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Most developers use Claude Code like an advanced terminal assistant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But once paired with <code>tmux<\/code>, it becomes a persistent AI workspace.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The difference is immediate:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>fewer interruptions,<\/li>\n\n\n\n<li>fewer lost sessions,<\/li>\n\n\n\n<li>less context rebuilding,<\/li>\n\n\n\n<li>and far more stable workflows.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For advanced engineering workflows, it quickly becomes difficult to work without it.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Need help designing secure Linux, DevOps, self-hosted, or AI-assisted infrastructure workflows?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/dyb.fr\/?utm_source=chatgpt.com\">DYB<\/a> helps companies with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>systems architecture,<\/li>\n\n\n\n<li>cybersecurity,<\/li>\n\n\n\n<li>automation,<\/li>\n\n\n\n<li>self-hosted infrastructure,<\/li>\n\n\n\n<li>hybrid\/cloud environments,<\/li>\n\n\n\n<li>and AI-powered engineering workflows.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>You launch a Claude Code session on your Mac. Then: And the entire session disappears. Context gone. History gone. Work gone. The issue is not Claude Code itself. The issue is that the agent is running directly inside your active terminal session. When the terminal dies, the process dies with it. Why tmux Completely Changes [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":100845,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-100846","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classe"],"_links":{"self":[{"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/posts\/100846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/comments?post=100846"}],"version-history":[{"count":1,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/posts\/100846\/revisions"}],"predecessor-version":[{"id":100847,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/posts\/100846\/revisions\/100847"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/media\/100845"}],"wp:attachment":[{"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/media?parent=100846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/categories?post=100846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/tags?post=100846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}