Dev.to AI 🤖 Ai 👁 0 📖 5 min read

Turning a Spare Mini PC into an Always-On Claude Code Machine (Remote Control + tmux + cron)

Hi, I'm Shu. I'm building Memotori, an on-device transcription and summary app, for both Mac and Windows. Almost all of the code is written by AI (Claude). To make it easier to hand that work off at any time, I installe

Hi, I'm Shu. I'm building Memotori, an on-device transcription and summary app, for both Mac and Windows. Almost all of the code is written by AI (Claude).

To make it easier to hand that work off at any time, I installed Ubuntu on a spare mini PC (ASUS VC65) and turned it into a dedicated, always-on Claude Code machine.

Now I can start Claude Code sessions against the Memotori folder on that box from the Claude mobile app or from a browser (claude.ai/code), at any time. I can ask it to fix a bug while I'm out and review the diff when I get home.

The key feature is Claude Code's Remote Control, which is available on the Pro and Max plans too.

This post walks through:

  1. Installing Claude Code and logging in
  2. Starting Remote Control (and choosing a spawn mode)
  3. Keeping it running with tmux
  4. Starting it automatically at boot with cron

Setup

  • Machine: ASUS VC65 mini PC
  • OS: Ubuntu Desktop
  • Claude Code (CLI)
  • tmux
  • cron (@reboot)

Remote Control vs. similar options

Option What it does Plans
Remote Control Drive Claude Code sessions running on your own machine from your phone or the web Includes Pro / Max
Claude desktop app Lets claude.ai chats reach your PC's folders and screen (Windows / Mac) All plans
Self-hosted runner Registers your own servers as the execution target for an organization's cloud sessions Team / Enterprise

For a personal always-on box, Remote Control is the simplest choice.

The CLI and the desktop app are not interchangeable:

  • CLI (Remote Control): remote shell, file, and coding work. Runs headless.
  • Desktop app: connects claude.ai chats to your PC, including computer use (seeing and operating the screen).

If your work is mostly coding, the CLI alone is enough. You can also run both.

How Memotori's folders are laid out

The Mac and Windows versions of Memotori live in separate git repositories. Above them sits a shared workspace (also a git repository) that holds the specs both versions follow and the working rules for the AI (CLAUDE.md).

Memotori/
├── Memotori-mac/   ← the Mac repository
├── Memotori-win/   ← the Windows repository
├── spec/           ← specs shared by both versions
├── promo/          ← promotion notes and drafts (including this post)
└── CLAUDE.md       ← working rules for the AI

I run Remote Control in that shared folder. Sessions started from my phone read CLAUDE.md too, so rules like "explain the plan and get my OK before changing code" still apply.

I wrote about this shared spec folder in detail in an earlier dev log.

1. Install Claude Code

curl -fsSL https://claude.ai/install.sh | bash
claude --version

If claude isn't found, open a new terminal or run source ~/.bashrc.

Then log in:

claude

Follow the browser login, then type /exit.

2. Start Remote Control

Go to your project folder and start it:

cd ~/develop/projects/myapp
claude remote-control

The first time, it asks:

Spawn mode for this project:
  [1] same-dir — sessions share the current directory (default)
  [2] worktree — each session gets an isolated git worktree

This setting decides which directory each new session works in when you start one from your phone or the web.

Mode Behavior Best for
same-dir All sessions share the current directory One task at a time, or folders without git
worktree Each session gets its own git worktree (an isolated working copy) Running several sessions in parallel

Pass the mode as a flag so you aren't prompted again:

claude remote-control --spawn=worktree

Notes on worktree mode

  • The folder must be a git repository with at least one commit:
  git init
  git add . && git commit -m "init"
  • Each session works on its own branch, so you (or Claude) merge the results.
  • Untracked files such as .env are not copied into worktrees.
  • Clean up occasionally: check with git worktree list, then run git worktree prune.

3. Keep it running with tmux

Run it inside tmux so it survives SSH disconnects:

sudo apt install -y tmux
tmux new -s claude
claude remote-control --spawn=worktree

Detach with Ctrl+B then D. Reattach with tmux attach -t claude.

4. Start automatically at boot

Startup script

First, find the full paths:

which claude   # e.g. /home/user/.local/bin/claude
which tmux     # e.g. /usr/bin/tmux

cron runs with a minimal PATH, so use full paths.

~/scripts/start-claude-myapp.sh

#!/bin/bash
sleep 20   # wait for the network to come up
cd /home/user/develop/projects/myapp
/usr/bin/tmux new -d -s claude-myapp "/home/user/.local/bin/claude remote-control --spawn=worktree 2>&1 | tee /home/user/claude-rc-myapp.log"

What each part does:

  • sleep 20: the network may not be ready right after boot.
  • tmux new -d -s <name>: starts a named, detached session.
  • tee ...log: keeps a log for troubleshooting.
  • When you add more projects, use a separate session name and log file for each so they don't overwrite each other.

Make it executable and test it:

chmod +x ~/scripts/start-claude-myapp.sh
~/scripts/start-claude-myapp.sh
tmux attach -t claude-myapp

Register it in crontab

crontab -e   # edit
crontab -l   # list
crontab -r   # remove ALL entries (no confirmation!)

Add this line at the bottom with crontab -e:

@reboot /home/user/scripts/start-claude-myapp.sh

Verify

sudo reboot
# after the reboot
tmux ls

If you see claude-myapp, you're done.

Tips

  • Disable sleep on an always-on machine:
  sudo systemctl mask sleep.target suspend.target
  • Be careful with auto-approval. At first, approve permission prompts from your phone as they come up.
  • If it doesn't start, check the log file. Answer any interactive prompts up front with flags so nothing blocks at boot.

Wrap-up

  • A spare PC plus Claude Code Remote Control gives you a personal AI work machine you can hand tasks to anytime.
  • Use worktree spawn mode for parallel work, or same-dir for simplicity.
  • tmux plus cron @reboot brings it back automatically after a reboot.

Firing off a quick request from my phone and just reviewing the diff later has turned out to be a pretty comfortable way to work. It's how I handle most small fixes to Memotori now.

The app I build on this machine

Finally, let me introduce Memotori, the app this machine works on.

It transcribes and summarizes meetings entirely on your device. Your audio and transcripts never leave it. It can also pull to-dos out of a meeting so you can check them off.

Version 1.2.0 adds a "Getting started" guide for first-time users and a reminder when you forget to stop recording.

Previous dev logs:

Thanks for reading.

References

Originally published on Medium.

📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.