๐ŸŠ ๐Ÿ‡ ๐Ÿ“ ๐Ÿ

PROJECT ORCHARD

One Rig ยท Cloud-Hosted AI ยท Remote Development
Turn a $100 fruit-named single-board computer into an always-on AI dev machine.

Cloud models do the thinking.
Spare Macs do the building.
You connect from anywhere.
orange pi 5 raspberry pi 5 tailscale claude code nextcloud + obsidian fastlane
field guide ยท v2.8 ยท july 2026
works with any cloud AI CLI โ€” examples use claude code
share freely ๐ŸŒฑ grow your own

ยงContents

1How it works
2Pick a track
โ†‘The Ladder โ€” start free, climb as needed
3Builds by persona
4Hardware
5Choosing a distro
6Flash & first boot
7Harden the box
8Tailscale
9tmux
10The AI client
11GitHub
12Notes sync (Nextcloud โ‡„ Obsidian)
13Mac build & simulator nodes
14Wiring the agent to the Macs
15Voice input (optional)
16Privacy & security
17Costs
18Maintenance
19Substitutions (laptops, free clouds)
20The Heirloom build (local models)
โ˜…Side quest: the everywhere PC
โ˜…Side quest: chat mode (no terminal)
21Agent best practices โ€” the Trellis
22Glossary

1How it works

AI coding agents like Claude Code are terminal programs. Inference โ€” the actual thinking โ€” runs on the provider's servers. The client just needs a shell, a filesystem, and a network connection. So the machine you "work on" can be a small, silent, 5-watt ARM board, as long as it's always on and reachable.

ORCHARD splits your workstation into three roles:

โ˜๏ธ AI provider

All inference. The Pi sends prompts, gets diffs and answers back.

โ˜๏ธ GitHub

Source of truth for code.

โ˜๏ธ Nextcloud

Source of truth for notes (plain Markdown).

๐ŸŠ grove ยท the Pi

Claude Code ยท tmux ยท git ยท notes sync ยท whisper.cpp. Always on, ~5 W.

๐Ÿ mac-build

Xcode ยท fastlane ยท signing. Ships to App Store / Play.

๐Ÿ mac-sim

iOS simulators ยท Android device via adb.

๐Ÿ“ฑ you

Any device. SSH in, attach tmux, type or talk.

Lose any single device and you lose hardware, not data โ€” everything stateful lives in GitHub, Nextcloud, or your provider account. That's the whole security and recovery model.

project orchard๐ŸŠ 02

2Pick a track

Each track is a complete, working build. Later tracks add capability and effort. AI subscription cost is the same on every track (see ยง17) and excluded here. Below Seedling there's also a $0 on-ramp โ€” the ๐ŸŒฐ Pip rungs on the next page.

TrackWhat you getSetupUpkeepCost ฮ”
๐ŸŒฑ Seedling
beginner
Pi + Tailscale + AI client + notes sync. Chat with a frontier model from anywhere, write code and notes. No mobile builds. 1 evening
(2โ€“4 h)
~15 min/mo $140โ€“220 (the Pi kit)
๐ŸŠ Grafted
intermediate
Seedling + Mac build/simulator nodes running your existing fastlane lanes. Full Flutter โ†’ App Store / Play pipeline. This guide's main path. 1 weekend
(6โ€“10 h)
~30 min/mo + Xcode updates +$0 with spare Macs; used M-series mini $350โ€“600
๐Ÿ’ง Hydroponic
intermediate
Seedling + no Macs: iOS/Android builds run on Codemagic or GitHub Actions macOS runners; fastlane publishes from CI. 1 weekend
(mostly CI config)
~20 min/mo $0 hardware; CI $0โ€“95/mo by usage
๐Ÿก Greenhouse
advanced
Grafted + self-hosted everything: Headscale instead of Tailscale's control plane, self-hosted Nextcloud, Gitea mirror. Maximum data sovereignty. 2โ€“3 weekends 2โ€“4 h/mo (you are now an ops team) +$5โ€“15/mo VPS or +$100 second board
๐ŸŒฒ Wild
advanced
Any track + local fallback models on the Pi itself via llama.cpp โ€” "usable offline assistant," not frontier. +1 weekend as desired +$0 (get the 16 GB board)
๐ŸŽ Heirloom
advanced
Any track + a dedicated local-model box: a GPU PC or big-RAM Mac on the tailnet serving open-weight models via llama.cpp. Prompts never leave home. Details in ยง20. 1โ€“2 weekends ~1 h/mo (models, drivers) +$0 with an owned gaming PC; used 24 GB GPU $600โ€“900
honest adviceStart at Seedling even if you're heading further โ€” every later track is additive. Skip Greenhouse unless self-hosting is the hobby; plain Tailscale + managed Nextcloud is the right trade for most people.
project orchard๐ŸŒฑ 03

โ†‘The Ladder โ€” start free, climb as needed

Every rung is a price tag โ€” spend nothing until something actually pinches. And note the bottom rung: AI is optional. This build works as a pure shared docs-and-notes system for $0, with AI added per-person, later or never.

You spendThe buildYou get / what pinches
$0
nothing, ever
Notes only โ€” no AI at all. Any machine you own (retired laptop, ยง19) + free hosted Nextcloud (The Good Cloud, 2 GB) + Tailscale + Obsidian on your devices. Skip ยง10 entirely. A complete private docs/notes system, synced everywhere โ€” for one person or several (share the vault, ยง12). Nothing pinches. This can be the whole build.
$0
still nothing
Add free AI โ€” when, and only if, someone wants it: Ollama Cloud or Gemini CLI free tier. Vault-sharers who don't want AI never touch it. AI chat, notes help, light writing and code. Pinches: rate limits and model quality.
$150
once
A dedicated board (Pi kit, ยง4) โ€” when the borrowed machine gets reclaimed or its fan noise outstays its welcome. Same capability, now silent, always-on, 5 W.
$50โ€“150
per year
Paid fixes for whichever pinch arrived first: a bigger vault tier (~$30โ€“60/yr) ยท occasional pay-per-token credits for harder tasks ($5โ€“15/mo light use). Covers most notes-and-assistant lives indefinitely. Many people never climb past here.
$240โ€“2,400
per year
A frontier subscription (Claude Pro โ†’ Max) โ€” when the agent becomes a daily coworker and free-tier quality starts costing you time. The Field Guide's main path: quality that compounds (ยง17, ยง19).
+$0โ€“600
once ยท +$99/yr
Build nodes โ€” spare Macs (ยง13) or CI (Hydroponic), plus Apple's developer fee, for shipping real apps. The full orchard (ยง17 has the complete math).
NOTES-ONLY BUILD = $0, forever โ€” no AI required, shareable with the whole household
LIGHT-AI BUILD   = $0โ€“150 once ยท $0โ€“150 each year after
no lock-in, either directionThe rungs work downward too: let a subscription lapse and the free tier still answers; the Pi dies and the old laptop steps back in. Because state lives in the Sky (ยง1), moving between rungs is an afternoon, never a migration.

more: thegood.cloud ยท nextcloud.com/sign-up ยท ollama.com ยท openrouter.ai

project orchard๐ŸŒฐ 04

3Builds by persona

This build isn't just for developers. Each card names the track (ยง2), the hardware and software that fit, and the realistic cost.

๐ŸŽ“ The Student

A frontier model on tap for problem sets, papers, and side projects, plus a synced vault of lecture notes. Dorm-cheap, and running it is a Linux course. Check the GitHub Student Pack for freebies.

๐ŸŒฐ pip โ†’ ๐ŸŒฑ seedling ยท any spare machine or rpi 5 ยท free tiers โ†’ claude pro build $0โ€“150 ยท run $0โ€“250/yr (climb the ladder as needed)

๐Ÿ™‚ The Everyday Person

A private assistant for life admin: journaling, drafting emails, trip planning, budgets, and a notes vault that follows you everywhere. No developer parts โ€” stop at ยง12 and you're done.

๐ŸŒฐ pip ยท any spare machine ยท dietpi ยท ollama cloud free + thegood.cloud build $0โ€“150 ยท run $0โ€“150/yr (free tiers โ†’ paid vault later)

๐Ÿง‘โ€๐Ÿ’ป The Developer

The full guide: agent HQ on the Pi, spare Macs building and shipping via fastlane, simulators on demand. Ship an app to TestFlight from a phone on a train.

๐ŸŠ grafted ยท opi 5 16gb ยท armbian ยท claude pro โ†’ max as usage grows build โ‰ˆ $220 (+$0 with spare macs) ยท run โ‰ˆ $400โ€“2,600/yr incl. apple $99

๐ŸŽจ The Designer

Prototype without owning the toolchain: describe screens, get running Flutter/web previews on a simulator, pull screenshots back to critique. The vault holds specs, copy decks, and design notes.

๐ŸŒฑ seedling + one mac-sim node ยท rpi 5 8gb ยท claude pro build โ‰ˆ $150 (+used m1 mini $350 if no spare mac) ยท run โ‰ˆ $250/yr

๐Ÿช The Local Business Owner

Website tweaks, marketing copy, spreadsheet questions answered in plain English, and a synced binder of SOPs, supplier notes, and prices โ€” without hiring out every small change.

๐ŸŒฑ seedling ยท rpi 5 8gb ยท dietpi ยท claude pro + managed nextcloud build โ‰ˆ $180 ยท run โ‰ˆ $300โ€“350/yr

๐Ÿ‘ฏ The Friend Group

One always-on box for the crew: shared repos, a communal wiki-vault, game-night tooling. Everyone SSHes in with their own Linux account; AI is per-person and optional (subscriptions are individual by ToS) โ€” split only the hardware.

๐ŸŒฑ seedling ยท opi 5 16gb (headroom for n users) ยท armbian build โ‰ˆ $220 รท n friends ยท each โ‰ˆ $240/yr for their own ai plan

๐Ÿ˜ The Community Org

A tiny ops hub for a nonprofit or club: grant and newsletter drafting, meeting-minute summaries, and a shared knowledge base volunteers can actually search. When data must stay in-house, step up to self-hosted Nextcloud on the same board โ€” the Greenhouse track's gentler half.

๐ŸŒฑ seedling โ†’ ๐Ÿก greenhouse-lite ยท opi 5 16gb ยท armbian ยท self-hosted nextcloud on-board or small vps ยท tailscale free โ‰ค3 users, ~$6/user/mo beyond build โ‰ˆ $220 ยท run โ‰ˆ $250โ€“500/yr depending on users + vps
common threadEvery persona's cost is dominated by the AI subscription; hardware is a one-time $0โ€“220. If $20/mo is too steep, start on the ๐ŸŒฐ Pip rungs of the Ladder โ€” free tiers, same build (ยง19 for the providers).
project orchard๐Ÿ‡ 05

4Hardware

PartPickPrice
BoardOrange Pi 5, 8 GB minimum (16 GB for the Wild track). The RK3588S runs this workload at single-digit watts. No Pi? A retired laptop works โ€” see ยง19.$90โ€“150
Storage256 GB+ NVMe SSD (M.2 2242). Boot from NVMe, not SD โ€” worn-out SD cards are the #1 killer of always-on boards. Keep an SD only as the installer.$25โ€“40
PowerQuality 5 V/4 A USB-C supply. Cheap supplies cause random crashes you'll blame on software.$12โ€“15
CasePassive aluminum heatsink case โ€” no fan, no noise, no dust maintenance.$15โ€“25
NetworkEthernet to your router. Wi-Fi works; wired is boring, and boring is the goal.$5
TotalOne complete Groveโ‰ˆ $150โ€“235
๐Ÿ“ raspberry pi lane Raspberry Pi 5 (8 GB) $80 + official 27 W USB-C PD supply $12 (the Pi 5 is picky about power) + M.2 NVMe HAT (official HAT+ or Pimoroni NVMe Base, $12โ€“25) + 2230/2242 NVMe drive + Active Cooler $5. Lands in the same $150โ€“200 window. A Pi 4 survives the Seedling track but feels slow โ€” get the 5.

5Choosing a distro

You areโ€ฆOrange Pi 5Raspberry Pi 5Why
New to Linux
beginner
DietPi (RK3588 image) Raspberry Pi OS Lite (64-bit) Menu-driven setup, sane defaults, big communities. DietPi installs Tailscale in two keystrokes.
Comfortable in a terminal
intermediate
Armbian (Ubuntu 24.04) โ€” this guide's default Ubuntu Server 24.04 LTS Armbian is the gold standard for non-Raspberry boards: proper kernel support, armbian-config handles NVMe boot.
Ops person
advanced
Ubuntu Rockchip (Joshua-Riek) or NixOS NixOS NixOS makes the whole box one declarative config file โ€” the ultimate rebuild-from-nothing story.
rule of thumbPick the boring option one notch below your ceiling. This machine's job is to never be interesting. All commands below are written for Armbian/Ubuntu and work on Raspberry Pi OS unless flagged ๐Ÿ“.

more: armbian.com ยท dietpi.com ยท raspberrypi.com/software ยท nixos.org

project orchard๐ŸŠ 06

6Flash & first boot

  1. Download the Armbian minimal/server image (Ubuntu 24.04) for Orange Pi 5 from armbian.com.
  2. Flash it to a microSD with balenaEtcher or Raspberry Pi Imager ("Use custom image").
  3. Insert the SD, connect Ethernet, power on. Find the Pi's IP in your router's client list:
ssh root@<pi-ip>          # Armbian first-boot wizard: set passwords, create your user
  1. Move the OS to NVMe so the SD card can retire:
sudo armbian-config       # System โ†’ Install โ†’ boot from NVMe โ†’ follow prompts
sudo reboot               # then pull the SD card
๐Ÿ“ raspberry pi lane Use Raspberry Pi Imager with Raspberry Pi OS Lite (64-bit), and open the โš™๏ธ settings before flashing: set hostname, username, and SSH public key. It boots headless and ready. NVMe boot: boot from SD once, sudo raspi-config โ†’ Advanced โ†’ Boot Order โ†’ NVMe first, clone with sudo rpi-clone nvme0n1, reboot without the SD.

more: etcher.balena.io ยท armbian.com/orange-pi-5

7Harden the box (15 minutes, once)

sudo apt update && sudo apt full-upgrade -y
sudo apt install -y unattended-upgrades tmux git curl htop
sudo dpkg-reconfigure -plow unattended-upgrades   # auto security patches: YES

Switch SSH to keys only. (After ยง8, Tailscale can own SSH auth entirely.)

# from your laptop โ€” copy your key onto the pi
ssh-copy-id you@<pi-ip>
# on the pi โ€” turn off password logins
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart ssh
project orchard๐Ÿ“ 07

8Tailscale

Tailscale builds an encrypted WireGuard mesh between your devices โ€” zero open ports, zero router config. The free Personal plan covers this entire build.

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh          # --ssh: tailscale handles SSH auth via your identity

Then in the admin console at login.tailscale.com:

extra creditOnce Tailscale SSH works, block LAN port 22 entirely: sudo ufw allow in on tailscale0 && sudo ufw enable. The box is now unreachable except through your tailnet identity.

more: tailscale.com/kb ยท tailscale.com/kb/1193/tailscale-ssh

9tmux

tmux keeps terminal sessions alive when you disconnect โ€” that's what makes "start a task from the couch, check it from the train" work.

# ~/.tmux.conf
set -g mouse on
set -g history-limit 100000
set -g default-terminal "tmux-256color"
# daily-driver alias (~/.bashrc or ~/.zshrc)
alias work='tmux new -A -s main'   # attach if it exists, create if not

Every login becomes ssh grove โ†’ work โ†’ exactly where you left off, agent mid-task and all. On flaky mobile connections add mosh (sudo apt install mosh) for lag-free roaming.

Rather not SSH at all? The โ˜… chat mode side quest turns the agent into a contact in the Claude app or your group chat.

more: github.com/tmux/tmux/wiki ยท mosh.org

project orchard๐Ÿ‡ 08

10The AI client

Examples use Claude Code; the pattern is identical for Codex CLI, Gemini CLI, or aider โ€” all run on ARM64 Linux.

# Node 22 LTS via nvm (survives distro upgrades better than apt's node)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc && nvm install 22
npm install -g @anthropic-ai/claude-code
claude               # first run: browser-based login
cost tipFor daily use, a flat subscription (Claude Pro/Max) is far cheaper and more predictable than per-token API billing. Log in with your account, not an API key, and each session's marginal cost is zero. This one decision dominates the build's economics โ€” see ยง17. Free routes exist too โ€” see ยง19.

Headless login: the login flow wants a browser. Either paste the printed URL into any browser and copy the code back, or port-forward: ssh -L 54545:localhost:54545 grove and open the URL locally.

more: docs.claude.com/en/docs/claude-code ยท github.com/nvm-sh/nvm ยท aider.chat

11GitHub

sudo apt install -y gh
gh auth login        # choose SSH, let it generate + upload a key
git config --global user.name  "Your Name"
git config --global user.email "you@example.com"
mkdir -p ~/lazy-agent/projects && cd ~/lazy-agent/projects && gh repo clone you/your-app

Keep every active repo under ~/lazy-agent/projects โ€” the agent workspace (ยง21). The agent works in these clones. GitHub is the bridge to the Macs: they pull what the Pi pushes.

more: cli.github.com

project orchard๐Ÿ 09

12Notes sync โ€” Nextcloud โ‡„ Obsidian

Each Obsidian vault is a folder of Markdown files โ€” Obsidian never runs on the Pi. Keep every vault under one parent, ~/lazy-agent/vaults/ (ยง21), and a single sync covers them all: personal, shared, per-project.

sudo apt install -y nextcloud-desktop-cmd
mkdir -p ~/lazy-agent/vaults
# use an APP PASSWORD: Nextcloud โ†’ Settings โ†’ Security โ†’ Devices & sessions

Create a service + timer so sync runs every 5 minutes, forever:

# /etc/systemd/system/vaultsync.service
[Unit]
Description=Nextcloud vault sync
[Service]
Type=oneshot
User=you
ExecStart=/usr/bin/nextcloudcmd --non-interactive \
  --user you --password-from-env \
  /home/you/lazy-agent/vaults https://cloud.example.com/remote.php/webdav/Vaults
EnvironmentFile=/home/you/.config/vaultsync.env   # NC_PASSWORD=app-password ยท chmod 600

# /etc/systemd/system/vaultsync.timer
[Unit]
Description=Sync vault every 5 min
[Timer]
OnBootSec=2min
OnUnitActiveSec=5min
[Install]
WantedBy=timers.target
sudo systemctl enable --now vaultsync.timer
systemctl list-timers | grep vault     # verify

Now "take notes in my Obsidian" is just the agent writing Markdown into a vault โ€” add a vault by adding a directory. Each vault carries an AGENTS.md telling agents how to treat it; layout and ready-made files in ยง21.

conflict hygieneAvoid editing the same note on two devices inside the same 5-minute window and you'll essentially never see a conflict. If one appears it's named *_conflict-* โ€” ask the agent to merge it; it's good at that. Chat mode (โ˜…) avoids conflicts entirely โ€” the agent becomes the vault's only writer.
sharing the vaultNextcloud folder sharing turns this into a group notes system: share an individual vault (say vaults/shared) with other accounts and each person syncs it to their devices โ€” a free, private, multi-user docs system, no AI required. AI stays per-person and opt-in.

more: docs.nextcloud.com ยท obsidian.md

project orchard๐ŸŠ 10

13Mac build & simulator nodes

About 10 minutes per Mac:

  1. Install Tailscale and sign in. Name machines by role, not hardware โ€” mac-build, mac-sim โ€” so lanes and docs survive hardware swaps.
  2. System Settings โ†’ General โ†’ Sharing โ†’ Remote Login: ON (your user only).
  3. Keep it awake: sudo pmset -a sleep 0 disablesleep 1. Laptops: keep the lid open or add a dummy HDMI plug โ€” simulators want a "display."
  4. Install Xcode. Pin the same version on every Mac with xcodes; then sudo xcodebuild -license accept.
  5. Clone your repos to the same path on every Mac, e.g. ~/src/your-app.
  6. fastlane: your lanes are already in-repo. Use match so signing certs live in an encrypted private repo โ€” any Mac becomes build-capable with one fastlane match development. Keep MATCH_PASSWORD and the App Store Connect API key in ~/.zshenv (chmod 600), never in the repo.
  7. Android: plug a real device into mac-sim (or the Pi) โ€” adb devices over USB, or Wi-Fi adb across the tailnet. Google ships no Android emulator for ARM Linux; real devices are better for end-to-end testing anyway.
๐Ÿ’ง no spare macs? โ€” hydroponic track Skip this page. Add a codemagic.yaml or a GitHub Actions workflow on macos-latest that runs your existing fastlane lanes on push or tag. The Pi's job ends at git push; TestFlight and Play uploads happen in CI. Free tiers cover light use; heavy shipping runs $30โ€“95/mo.

more: docs.fastlane.tools ยท docs.fastlane.tools/actions/match ยท github.com/XcodesOrg/xcodes ยท codemagic.io

project orchard๐Ÿ 11

14Wiring the agent to the Macs

The part that feels like magic: the agent on the Pi treats the Macs as tools. Because fastlane already encodes your signing and release logic, the agent never needs to understand Xcode โ€” it runs lanes over SSH and reads the output.

# things the agent (or you) run from the pi
ssh mac-build 'cd ~/src/your-app && git pull && fastlane ios beta'
ssh mac-sim   'xcrun simctl boot "iPhone 16"; cd ~/src/your-app && flutter run -d iPhone'
ssh mac-sim   'xcrun simctl io booted screenshot /tmp/s.png' && scp mac-sim:/tmp/s.png .

Teach every repo the topology with a CLAUDE.md (or AGENTS.md) block:

# CLAUDE.md (excerpt)
## Build topology
- This machine (grove) is ARM Linux: edit, test pure-Dart, git. No Xcode here.
- iOS build/publish:   ssh mac-build 'cd ~/src/your-app && fastlane ios beta'
- iOS simulator runs:  ssh mac-sim 'โ€ฆ' โ€” screenshot via simctl, scp back to inspect
- Android device tests: adb over the tailnet on mac-sim
- Always commit + push before triggering remote lanes (Macs build from git)

Allow-list the pattern once in the project's .claude/settings.json so remote builds don't prompt every time:

{ "permissions": { "allow": [ "Bash(ssh mac-build *)", "Bash(ssh mac-sim *)" ] } }
the golden ruleGit is the only way code moves between the Pi and the Macs. No rsync, no scp of source trees. Every build is reproducible from a commit hash, and "what's on the Mac?" is never a question.

more: docs.claude.com/en/docs/claude-code/settings

project orchard๐Ÿ‡ 12

15Voice input (optional)

git clone https://github.com/ggerganov/whisper.cpp && cd whisper.cpp
cmake -B build && cmake --build build -j
./build/bin/whisper-cli -m models/ggml-small.bin -f memo.wav -otxt

16Privacy & security

Be clear-eyed about one thing: cloud inference and anonymity are at odds. The provider sees your prompts, code, and notes, attached to a paying account. The realistic posture is trusted provider + minimized exposure, not anonymity theater.

LayerPosture
ProviderPick one with no-training-on-your-data terms for your plan, and verify the current policy. Keep secrets out of prompts and out of repo files โ€” agents read files. Env files, not code.
NetworkTailscale is WireGuard: end-to-end encrypted, no inbound ports. Coordination metadata does pass through Tailscale Inc. โ€” if that's unacceptable, Headscale (Greenhouse track) self-hosts it at real ops cost.
The PiKey/Tailscale-identity SSH only ยท unattended-upgrades ยท secrets in chmod-600 env files ยท LUKS-encrypt the NVMe if other people can physically reach the device.
VaultNextcloud is as private as its host โ€” self-host it or use end-to-end-encrypted folders for sensitive areas. Keep truly private notes in folders outside the agent's working directory, with deny rules so it can't wander in.
Blast radiusMacs hold only clones + signing certs (recoverable via match). The Pi holds clones + a vault copy (recoverable from GitHub/Nextcloud). Any device can be wiped and rebuilt from this guide in an afternoon โ€” that is the security model.
project orchard๐Ÿ“ 13

17Costs

Build (one-time)

BUILD = board + NVMe + PSU + case โ‰ˆ $150โ€“235
  + used M-series Mac mini if you own none: $350โ€“600 (Grafted only)

Running (annual)

POWER = watts ร— 24 ร— 365 รท 1000 ร— $/kWh
        Pi โ‰ˆ 5 W โ†’ 44 kWh โ†’ ~$7/yr @ $0.16/kWh ยท each always-on Mac mini +$25โ€“40/yr
AI    = subscription ร— 12   ($20/mo Pro โ†’ $240/yr ยท $100โ€“200/mo Max โ†’ $1,200โ€“2,400/yr)
SHIP  = Apple Developer $99/yr + Google Play $25 once
CLOUD = Nextcloud (self-host ~$0 ยท managed ~$40โ€“60/yr) + Tailscale $0 (Personal)
CI    = $0 (Grafted, your Macs) ยท $0โ€“95/mo (Hydroponic, by usage)

TOTAL/yr โ‰ˆ POWER + AI + SHIP + CLOUD + CI

Worked example โ€” Grafted ยท Claude Pro ยท owned Macs ยท managed Nextcloud

Year 1 : $190 build + $7 + $240 + $99 + $50 + $30 Mac power โ‰ˆ $616
Year 2+: โ‰ˆ $426/yr โ€” about $35/month for a frontier-model dev HQ reachable from anywhere.

The AI subscription dominates everything else. The hardware is a rounding error next to a year of inference โ€” which is exactly why the client belongs on a $150 board instead of a $2,000 laptop.

18Maintenance

CadenceTaskTime
AutomaticSecurity patches (unattended-upgrades) ยท vault sync (systemd timer) ยท Tailscale self-updates on most installs0
Monthlyssh grove โ†’ sudo apt full-upgrade && sudo reboot ยท glance at systemctl --failed and disk space10 min
When Apple shipsUpdate Xcode on the Macs (pin with xcodes), run one fastlane ios beta to confirm the pipeline30 min, ~quarterly
Twice a yearCheck NVMe health (smartctl) ยท confirm you could still rebuild: is this guide + your dotfiles repo current?20 min

Plant once, water monthly, harvest daily. ๐ŸŠ

project orchard๐ŸŒฑ 14

19Substitutions (and why the design is what it is)

The two most common "couldn't I justโ€ฆ?" swaps: what you gain, what you give up, and why the main path is prescribed anyway.

๐Ÿ’ป The rig: a retired laptop instead of a Pi

Any x86-64 laptop that still boots can be the Grove. Flash Ubuntu Server 24.04 from a USB stick (DietPi ships x86 images too), set HandleLidSwitch=ignore in /etc/systemd/logind.conf, and every command in this guide runs unchanged. What you gain:

Why the guide leads with the Pi anyway:

Verdict: if the spare laptop already exists, it's the best $0 Seedling hardware there is. The architecture doesn't care which rig you pick โ€” state lives in the Sky either way.

โ˜๏ธ The Sky: free inference โ€” OpenRouter, Ollama Cloud, free tiers

Why the guide prescribes a paid frontier plan anyway: agentic coding compounds โ€” a model that's 20% weaker doesn't cost 20% more time; it fails tasks you then finish yourself. Flat-rate billing is predictable, and paid plans carry the clearest no-training terms (ยง16). The honest free path: prove the build free, then pay once it earns its keep. Want the model fully in-house instead? That's the ๐ŸŽ Heirloom build โ€” ยง20.

more: openrouter.ai ยท ollama.com ยท github.com/google-gemini/gemini-cli

why the architecture holdsSwapping either piece touches almost nothing: a different rig is the same Ubuntu + Tailscale + tmux; a different model is one program and one API key on the Grove. Everything stateful stays in the Sky โ€” which is exactly why the design is shaped this way.
project orchard๐Ÿ‡ 15

โ˜…Side quest โ€” the everywhere PC

So far the Grove has been a terminal. Give it a desktop and it becomes something better: one personal computer that lives in one place and appears on any screen you're near โ€” same files, same apps, same half-finished document, whether you're on a tablet in a cafรฉ or a borrowed laptop on another continent. Tailscale already makes it reachable; a desktop makes it feel plugged in.

The spell (10 minutes)

sudo apt install -y xfce4 xrdp     # lightweight desktop + RDP server
sudo systemctl enable --now xrdp
# if you enabled ufw in ยง8, RDP is already tailnet-only โ€” nothing else to open

From any device, open an RDP client โ€” Windows App (macOS/iOS), Microsoft Remote Desktop (Windows/Android), Remmina (Linux) โ€” point it at grove, and log in with your Pi user. A full desktop appears, riding the tailnet like everything else: zero ports open to the internet.

๐Ÿ“ raspberry pi lane โ€” easy mode Raspberry Pi OS ships Raspberry Pi Connect: browser-based remote desktop with nothing to install on the client side. Enable it (rpi-connect on, or Preferences โ†’ Raspberry Pi Connect), then open connect.raspberrypi.com from any browser, anywhere. The easiest possible version of this quest.

What the quest unlocks

Field notes

๐Ÿ† quest rewardYou now own one computer that follows you everywhere. Every other device you touch quietly becomes just a screen โ€” and the machine that matters is a silent $150 board at home, rebuildable by design (ยง1).

more: github.com/neutrinolabs/xrdp ยท xfce.org ยท raspberrypi.com/software/connect ยท octave.org

project orchard๐Ÿ’ 16

โ˜…Side quest โ€” chat mode (no terminal)

Everything so far assumes you like terminals. Not everyone does โ€” and not everyone you share the orchard with will. Chat mode turns the Grove into a contact in apps people already use: no Tailscale client on the phone, no SSH app, no tmux. Two flavors:

Option A โ€” hand your session to your phone (/rc)

ssh grove && work        # tmux, as usual
claude                   # start the agent
/rc                      # remote control: continue this session in the Claude app

The same session now appears as a live chat in the Claude mobile/web app โ€” same repo, same vault, permission prompts included (you approve writes with a tap). Back at a keyboard later? It's still running in tmux, right where the conversation left off. Commands evolve โ€” run /help for the current remote-control syntax.

Option B โ€” Hermes: the Grove as a group-chat bot

Hermes (Nous Research's open-source agent) runs on the Pi as an always-on service, uses your cloud provider for inference, and shows up as a bot in Discord, Slack, Telegram, WhatsApp, or Signal. Anyone you allow can message it โ€” ask questions, request notes updates, kick off tasks. For the Friend Group and Community Org personas this is the natural interface: vault-sharers chat with the bot and never need a Pi account, a terminal, or even Obsidian.

๐Ÿ† the single-writer bonusChat mode quietly solves ยง12's one headache: sync conflicts. Conflicts happen when two devices edit the same note inside one sync window. In chat flow, humans don't edit files โ€” they ask, and the agent is the vault's only writer, applying every change in order. "Add milk to the list" can arrive from three phones at once and merge cleanly. For shared vaults, a good split: the agent owns the shared folders; humans with Obsidian keep to personal ones.
โš ๏ธ keep the leash onA chat bot is a new front door. Allowlist exactly who may talk to it (user IDs, not whole servers), treat inbound messages as untrusted text โ€” the Cellar annex's prompt-injection rules apply verbatim โ€” and keep write confirmations on. With /rc they surface right in the app for you to approve.

more: hermes-agent.ai ยท github.com/0xNyk/awesome-hermes-agent ยท docs.claude.com/en/docs/claude-code

project orchard๐Ÿ‡ 17

20The Heirloom build โ€” local models

For the skilled โ€” or anyone who wants to become skilled. The ๐ŸŽ Heirloom track moves inference itself in-house: one strong machine on your tailnet serves an open-weight model through llama.cpp, and your prompts never leave the building. Everything else in the architecture stays exactly where it was.

The Mill โ€” one more tailnet node

Join the strong box to the mesh like every other node and name it by role: mill. The Grove remains the brain-client; only the "inference" arrow moves โ€” from the Sky to the Mill. GitHub and Nextcloud keep their jobs, and the Mill holds no unique state: models re-download, configs live in your dotfiles repo. Blast radius intact.

HardwareWhat it runsCost
Gaming PC you already own (12 GB+ GPU)7โ€“14B models, snappy โ€” solid chat, notes, and light code.$0 + power
Used 24 GB GPU (RTX 3090-class) in any PC30B-class quantized models โ€” the local sweet spot right now.$600โ€“900
Mac with 32โ€“128 GB unified memoryBig models via llama.cpp's Metal backend โ€” simple and silent, somewhat slower.$0 if owned

A GPU box idles at 30โ€“80 W (โ‰ˆ $40โ€“110/yr) โ€” let it sleep and wake-on-LAN it from the Grove when needed.

The software (one evening)

# on the mill โ€” build llama.cpp, grab a GGUF model from Hugging Face
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build -DGGML_CUDA=ON && cmake --build build -j   # Macs: no flag, Metal is automatic
./build/bin/llama-server -m model-q4.gguf --host 0.0.0.0 --port 8080
# on the grove โ€” point any OpenAI-compatible agent at it
aider --openai-api-base http://mill:8080/v1

Expose port 8080 to the tailnet only (the same ufw pattern as ยง8). Ollama is the low-friction alternative โ€” same idea, one command per model. Note that Claude Code speaks Anthropic's API only: for this lane use OpenAI-compatible agents (aider, or Hermes pointed at the Mill). Many Heirloom builders run both โ€” a cloud agent for the hard work, the Mill for private or offline work.

honest expectationsOpen-weight models are genuinely good and improving fast, but frontier models still outrun them on long agentic coding (ยง19's compounding argument applies). Where the Mill shines: chat, notes, drafting, summarization, anything privacy-critical โ€” and learning how all of this actually works, which is half the point of the track. The Ladder runs both directions; keep a cloud rung as your escape hatch.

This is the one build where "private AI" is literal โ€” prompts, notes, and code never cross your tailnet boundary. Pair it with Greenhouse (self-hosted Headscale + Nextcloud) for a fully sovereign orchard.

more: github.com/ggml-org/llama.cpp ยท huggingface.co (GGUF models) ยท ollama.com

project orchard๐ŸŽ 18

21Agent best practices โ€” the Trellis

Agents work best โ€” and feel safest to live with โ€” inside a structure that tells them what everything is. The ๐ŸŒฟ Trellis is ORCHARD's workspace layout: two folders with hard rules, everything else invisible. It ships as a copy-ready starter (lazy-agent-starter/, beside this guide) and gets a full deep-dive in Annex 02: The Trellis.

~/  (home on the grove)
โ”œโ”€ lazy-agent/ โ€” the agent's entire worldFULL ACCESS
โ”‚   โ”œโ”€ AGENTS.md ยท CLAUDE.md ยท .claude/ (permissions + skills)
โ”‚   โ”œโ”€ vaults/ โ†’ personal/ ยท shared/ โ€ฆ (every Obsidian vault, ยง12)
โ”‚   โ”œโ”€ projects/ โ†’ git clones (ยง11)
โ”‚   โ””โ”€ scratch/ โ†’ temporary work, safe to empty
โ”œโ”€ read-space/ โ€” drop a file here to let the agent read itREAD-ONLY
โ””โ”€ everything else โ€” Documents, photos, dotfiles, downloadsโ€ฆINVISIBLE
why this mattersThe everywhere-PC and chat-mode side quests (โ˜…) mean sharing one machine with an agent. The Trellis is what makes that comfortable: write your journal, taxes, and letters on the same desktop, knowing the agent sees a file when you place it in the trellis โ€” and not before.

The starter also ships working .claude folders with four skills (daily-note, inbox-triage, vault-gardener, new-plot) and the permission rules above. Annex 02 goes deeper: context management, session hygiene, and durable agent memory.

more: agents.md ยท docs.claude.com/en/docs/claude-code/skills

project orchard๐ŸŒฟ 19

22Glossary

SBC
Single-board computer โ€” a full Linux machine on one palm-sized board (Orange Pi, Raspberry Pi).
ARM64
The CPU architecture these boards use. Most Linux dev tools ship builds for it; a few don't (see emulator).
NVMe / M.2
Fast SSD storage on a small plug-in card. Far more reliable than SD cards for 24/7 duty.
headless
Running with no monitor or keyboard โ€” managed entirely over the network.
SSH
Encrypted remote-terminal protocol; how you operate the Pi and the Macs.
SSH key
A cryptographic keypair that replaces passwords for SSH logins. Safer and script-friendly.
Tailscale
Zero-config VPN that joins your devices into a private encrypted network. Free for personal use.
WireGuard
The fast, modern VPN protocol Tailscale is built on.
tailnet
Your private Tailscale network of devices.
MagicDNS
Tailscale feature that gives each device a stable name, e.g. ssh grove.
Headscale
Open-source, self-hosted replacement for Tailscale's coordination server.
tmux
Terminal multiplexer โ€” keeps sessions (and running agents) alive after you disconnect.
mosh
"Mobile shell" โ€” an SSH-like terminal that tolerates bad networks and switching between Wi-Fi and cellular.
systemd / timer
Linux's service manager. A timer unit runs a job on a schedule โ€” used here for note sync.
unattended-upgrades
Ubuntu/Debian tool that installs security updates automatically.
LUKS
Linux full-disk encryption.
Nextcloud
Self-hostable file-sync service โ€” think private Dropbox.
app password
Per-device password issued by Nextcloud so your real password never sits in a config file.
Obsidian / vault
Note-taking app; a vault is just a folder of Markdown files, which is why a sync daemon is all the Pi needs.
CLI agent
An AI coding assistant that runs in the terminal: Claude Code, Codex CLI, Gemini CLI, aider.
inference
Running the AI model to produce output. In this build it happens on the provider's servers, never on the Pi.
git / repo
Version control; a repo holds your project and its history. Push/pull moves commits between machines.
gh
GitHub's official command-line tool โ€” handles auth, cloning, and PRs.
CI
Continuous integration โ€” rented machines (GitHub Actions, Codemagic) that build, test, and ship your code on push.
fastlane / lane
Automation tool for app builds and store releases. A lane is one scripted task, e.g. ios beta.
match
fastlane's system for keeping iOS signing certificates in an encrypted git repo, so any Mac can build.
simulator vs emulator
iOS simulators run on Macs via Xcode. Android's emulator doesn't ship for ARM Linux โ€” use a real device instead.
adb
Android Debug Bridge โ€” controls a real Android device over USB or Wi-Fi.
TestFlight
Apple's beta-distribution service; where fastlane ios beta uploads to.
whisper.cpp
Local speech-to-text engine; runs comfortably on these boards.
quantized model
A compressed AI model small enough for modest hardware, at lower quality โ€” the Wild track's fallback.
dummy HDMI plug
Cheap adapter that convinces a headless Mac a display is attached, which simulators need.
dotfiles
Your personal config files (.tmux.conf, .zshrcโ€ฆ), ideally kept in a git repo so any machine can be re-personalized fast.

Project ORCHARD Field Guide v2.8 ยท July 2026 ยท Assembled with Claude Code. Prices are July-2026 US ballparks โ€” verify current pricing and provider data-use policies before relying on them. Commands target Armbian/Ubuntu 24.04 (๐ŸŠ) and Raspberry Pi OS Bookworm (๐Ÿ“). Share this guide with anyone who wants to grow their own.

project orchard๐ŸŠ 20
๐Ÿ‡ Open the Grapevine โ€” the interactive map