v3 โ€” PLAIN ENGLISH ยท 2026-04-29 evening

The Migration, in Plain English (refined)

A friendly walk-through of every architectural decision for moving your work out of iCloud. Beginner-friendly explanations, jargon called out, with feedback boxes at each section so you can drop notes inline. Use the buttons in the top-right to switch theme or export your notes.

What changed since the v1 explainer (the FINAL one you didn't read yet):
The 30-second version. Move your work out of iCloud Documents. The new home is ~/dev/ โ€” an exact copy of how your VPS is laid out. Inside ~/dev/, the folder projects/ is just where projects live (one each for n8n, kdp, lever, praul, etc.). Other big-picture folders like handoffs/, ideas/, context/, and knowledge/ sit next to projects/ as siblings, not inside it. Your knowledge base (Karpathy wiki + future personal vaults) is its own thing under knowledge/, with its own security model. The migration only sets up the placeholder folder; the actual knowledge system gets its own handoff stack later.

Quick glossary (so the rest makes sense)

Symlink
A folder shortcut. Looks and acts like a folder, but actually points somewhere else. Like a Mac alias.
VPS
Your Hetzner server โ€” the always-on Linux machine where n8n and bots run.
iCloud eviction
When iCloud decides your file isn't being used and replaces it with a placeholder, forcing a re-download. The bug we're fixing.
MCP server
A tool that gives Claude Code extra capabilities โ€” like accessing your databases, APIs, or services. Each project can have a different set.
CLAUDE.md walk-up
When you start Claude in a folder, it looks for CLAUDE.md there, then in the parent, then the grandparent, and so on. This means a sub-project can inherit rules from its umbrella.
@import (in CLAUDE.md)
A way for one CLAUDE.md file to pull in another. Like @~/dev/shared/soul.md tells Claude "also read this file." Max 5 levels deep.
sed
A Unix tool that does find-and-replace across many files. Auditable, scriptable, fast.
Session JSONL
Claude Code's saved transcripts. Every conversation gets one. Stored at ~/.claude/projects/<project-id>/<session>.jsonl. We don't rewrite these โ€” we just symlink the directory.
Hidden dotfile
A file or folder starting with a dot (.claude/, .gemini/). Finder hides them by default. They sit at user root because the tools require it, but they don't visually clutter.

The new shape, all in one diagram

# Mac home โ€” macOS clutter ignored # Claude Code config (hidden, hardcoded location) # Gemini config (hidden) # Codex config (hidden) โ””โ”€โ”€ dev/ โ† MIRROR of /home/dev/ on your VPS. The new home. โ”‚ โ”œโ”€โ”€ .agents/ โ”‚ โ””โ”€โ”€ skills/ # cross-CLI skills (Claude/Gemini/Codex share these) โ”‚ โ”œโ”€โ”€ projects/ # ONLY project subfolders. No wrapper duty. โ”‚ โ”œโ”€โ”€ CLAUDE.md # umbrella rules for all projects โ”‚ โ”œโ”€โ”€ n8n/ # each project owns its .claude/, .gemini/, AGENTS.md โ”‚ โ”œโ”€โ”€ kdp/ โ”‚ โ”œโ”€โ”€ lever/ โ”‚ โ”œโ”€โ”€ praul/ # brain-dump router (NOT just personal โ€” see ยงB) โ”‚ โ”œโ”€โ”€ dev-environment/ โ”‚ โ””โ”€โ”€ hcyr/ โ”‚ โ”œโ”€โ”€ handoffs/ # sibling โ€” work-handoff files (active/done/parked) โ”œโ”€โ”€ ideas/ # 5-stage lifecycle โ”‚ โ”œโ”€โ”€ 1-parking-lot/ โ†“ raw ideas, not yet evaluated โ”‚ โ”œโ”€โ”€ 2-backburner/ โ†“ valid but not now โ”‚ โ”œโ”€โ”€ 3-frontburner/ โ†“ next up โ”‚ โ”œโ”€โ”€ 4-in-progress/ โ†“ actively building โ”‚ โ””โ”€โ”€ 5-done/ โ†’ shipped (with abandoned/ subfolder) โ”‚ โ”œโ”€โ”€ context/ # DEEP knowledge โ€” read on-demand (different from memory/) โ”‚ โ”œโ”€โ”€ businesses/ โ”‚ โ”œโ”€โ”€ people/family/ โ”‚ โ”œโ”€โ”€ clients/ # Casa Keepers, HCYR, etc. โ”‚ โ”œโ”€โ”€ decisions/ # numbered architecture decision logs โ”‚ โ””โ”€โ”€ goals.md โ”‚ โ”œโ”€โ”€ knowledge/ # Karpathy wiki + future vaults (own security model) โ”‚ โ””โ”€โ”€ wiki/ # ~/wiki symlinks here โ”‚ โ”œโ”€โ”€ questions/ # questions-by-recipient (josh/, hcyr/, โ€ฆ) โ”œโ”€โ”€ apps/ # BUILT/runnable things (tools/, games/) โ€” different from projects/ โ”œโ”€โ”€ reports/ # generated outputs โ”‚ โ””โ”€โ”€ session-summaries/ # per-session logs โ”œโ”€โ”€ scripts/ # automation, sync helpers โ”œโ”€โ”€ shared/ # BOOTSTRAP context (small files @imported into every CLAUDE.md) โ”‚ โ”œโ”€โ”€ soul.md โ”‚ โ”œโ”€โ”€ user.md โ”‚ โ””โ”€โ”€ priorities.md โ”œโ”€โ”€ downloads/ # curated subfolders (siteintel/, etc.) โ”œโ”€โ”€ _dev0/ # Dev 0 orchestrator (our addition) โ””โ”€โ”€ _resources/ # cross-project shared patterns (our addition) Plus a friendly shortcut so the wiki is reachable from anywhere: ~/wiki โ†’ ~/dev/knowledge/wiki/

Why this is better than v1. Your VPS at /home/dev/ already looks exactly like this. By mirroring it on Mac, the same skills, scripts, and habits work in both places โ€” no path translation needed. Plus projects/ stops doing double duty (it's just where projects live, nothing more).

Section A โ€” Where does everything live?

โœ“ HELD UP UNDER RESEARCH

Out of iCloud. New top-level home is ~/dev/.

What this means

Why ~/dev/ and not other options

Section B โ€” How are projects laid out?

โŸณ MAJOR REWRITE SINCE V1

No lovebuilt/ wrapper. Flat ~/dev/ with projects/ as one of many siblings. About 10 folders v1 missed are now part of the picture.

What changed and why

v1 โ€” the lovebuilt wrapper

~/projects/lovebuilt/
โ”œโ”€โ”€ CLAUDE.md
โ”œโ”€โ”€ memory/
โ”œโ”€โ”€ _handoffs/
โ”œโ”€โ”€ _dev0/
โ”œโ”€โ”€ _resources/
โ”œโ”€โ”€ wiki/
โ”œโ”€โ”€ n8n/
โ”œโ”€โ”€ kdp/
โ”œโ”€โ”€ lever/
โ””โ”€โ”€ praul/  โ† "personal/family"

v3 โ€” flat mirror of VPS

~/dev/
โ”œโ”€โ”€ .agents/skills/
โ”œโ”€โ”€ projects/
โ”‚   โ”œโ”€โ”€ CLAUDE.md
โ”‚   โ”œโ”€โ”€ n8n/, kdp/, lever/,
โ”‚   โ”‚   praul/, โ€ฆ
โ”œโ”€โ”€ handoffs/
โ”œโ”€โ”€ ideas/  (5-stage)
โ”œโ”€โ”€ context/  (deep knowledge)
โ”œโ”€โ”€ knowledge/  (wiki + vaults)
โ”œโ”€โ”€ questions/
โ”œโ”€โ”€ apps/
โ”œโ”€โ”€ reports/
โ”œโ”€โ”€ scripts/
โ”œโ”€โ”€ shared/  (bootstrap)
โ”œโ”€โ”€ _dev0/
โ””โ”€โ”€ _resources/

What pushed the change

How to decide if something gets its own project folder

  1. Does it need its own MCP servers (different from neighbors)? โ†’ Yes, own folder.
  2. Does it have 3+ active workflows or its own production system? โ†’ Yes, own folder.
  3. Just notes and research? โ†’ Subfolder under a parent project.

About PRAUL

Originally I framed praul/ as "personal/family." That's wrong.

Section C โ€” Renaming "coach" to "jonah"?

โธ STILL DEFERRED โ€” and that's the right call

Not part of this migration. Separate handoff later, after the new path home settles.

Why deferring is the right move

Section D โ€” How do Mac and VPS stay in sync?

โœ“ REINFORCED BY RESEARCH

Two-tier sync: a private GitHub repo for the canonical, versioned, browse-from-your-phone copy. The existing lsyncd mirror (Mac โ†’ VPS) for real-time scratch flow.

The two tiers

TierWhatCadenceWhy
๐Ÿข SlowGitHub private repoEnd of session/dayFull history, blame, mobile review UI, branch protection. .env always gitignored. Pre-commit secret-scan blocks accidental leaks.
๐Ÿ‡ FastExisting lsyncdReal-time inotifyMac โ†’ VPS one-way. Scoped to scratch folders (brainstorms/, memory/, handoffs/active/) so your VPS bots don't wait on commits.

What we ruled out

Your prior chat already locked git-based config sync as Decision 007.ADR 007 Aligned.

Section E โ€” Where does the Karpathy wiki live?

โŸณ MOVED OUT OF projects/ โ€” and finer placement deferred

Wiki home is ~/dev/knowledge/wiki/ (NOT under projects/). Friendly shortcut ~/wiki stays.

What's settled now

What's deferred to the knowledge-system handoff stack

All of that is real and important โ€” but it's a downstream project. The migration only commits to where the knowledge root lives, so future moves are cheap.

Forever rule: No script, skill, or CLAUDE.md may hardcode the wiki path other than via ~/wiki. The wiki is relocatable.

Section F โ€” The 647 paths to fix (and 1,864 to leave alone)

โš  NEEDS VERIFICATION BEFORE WE COMMIT

Manual sed for the 647 mutable refs is right. The session-history symlink trick is the right idea โ€” but the conventions research surfaced potential bugs in how Claude Code handles symlinked project-id directories.

The numbers

WhatCountPlan
Refs inside N8N-BUILDER (full path)82sed + manual review
Refs inside N8N-BUILDER (/Users/coach prefix)143sed + review
Refs in ~/.claude/skills/ + plans/~422sed + review
Session-history JSONL transcripts1,864DO NOT REWRITE. Symlink the old project-id directory to the new one.

The flag

The conventions research surfaced that Claude Code's path-keying for session history is not officially documented, and may be tied to open Anthropic issues #38469 / #40300 / #65. Before Migration 02 commits to the symlink approach, the architecture review must:

Why not LLM-rewrite? 647 mutable refs across well-defined file classes is squarely in sed-and-review territory. Volume doesn't justify the cost or review burden of LLM-driven rewriting, and sed is auditable.

Section G โ€” The "where do I start a chat?" folder

โœ“ HELD UP โ€” minimal version

Build ~/dev/_basecamp/ with a small CLAUDE.md and a one-page INDEX.md mapping "if you want to do X, open folder Y." The fancier auto-routing skill is v2.

What it is

A single folder you can cd into when you don't know where to start a chat. It loads only routing-friendly MCPs and an index page. The index reads:

~/dev/_basecamp/INDEX.md (roughly): Want to build a workflow? โ†’ cd ../projects/n8n Want to work on KDP keywords? โ†’ cd ../projects/kdp Want to dump a thought? โ†’ cd ../projects/praul Want to check the dev env? โ†’ cd ../projects/dev-environment Want to read the wiki? โ†’ cd ../knowledge/wiki โ€ฆ

v2 trigger

When the static INDEX.md hits ~15 entries and starts being hard to scan, build it into a real routing skill (the /basecamp command).

Section H โ€” iTerm vs VS Code โ€” pick a lane

โœ“ EVIDENCE STRONG

iTerm is the canonical Claude Code interface. VS Code is for editing files, not running Claude Code sessions.

Why this isn't preference

VS Code eagerly spawns every MCP server you've configured for every session โ€” measured at ~534 processes for 16 open sessions. iTerm lazy-loads only the MCPs the session asks for. Treating iTerm as the chat interface means you stop paying the MCP tax for every editor window.

The fresh-chat workflow

  1. Open iTerm
  2. cd ~/dev/projects/<sub-project>
  3. Run claude
  4. The session loads only that folder's CLAUDE.md and .mcp.json.

VS Code workspace files (*.code-workspace) live one-per-sub-project for multi-root editing. They don't spawn Claude sessions.

The 10 folders v1 forgot (now adopted)

Your VPS already has these. The Mac mirror inherits all of them. Here's what each one is for, in plain language.

FolderWhat it's for
ideas/5-stage lifecycle for ideas: parking-lot โ†’ backburner โ†’ frontburner โ†’ in-progress โ†’ done. "Parking lot" is your term, not "inbox" โ€” feels less like email stress.
context/Deep knowledge that gets read on-demand: businesses, people, family, clients, decisions, goals. Different from memory/, which is bootstrap (loaded into every chat โ€” small).
.agents/skills/Skills that work across all your AI CLIs (Claude, Gemini, Codex). One YAML+MD file, symlinked into each CLI's skill directory.
questions/Questions broken out by who you'd ask: josh/, publishing/, hcyr/, general/. With a TEMPLATE.md.
apps/Things you've built that run: tools/ (web UIs), games/ (family games). Different from projects, which are works-in-progress.
reports/Generated outputs โ€” maintenance reports, audits, session summaries. session-summaries/ is a subfolder.
scripts/Little automations and sync helpers. Not full apps.
shared/Tiny bootstrap files (soul.md, user.md, priorities.md) that get loaded into every CLAUDE.md via @import. Loaded everywhere because they're small.
downloads/Curated subfolders like siteintel/ for stuff you've grabbed from the web that needs organizing.
knowledge/The Karpathy wiki + future personal/business/relationship vaults. Own security model. Won't be implemented in this migration โ€” just placeholder.

What's still genuinely up for grabs

Things we haven't decided yet. Listed honestly so we don't pretend they're settled.

Open questionWhere it gets resolved
Does Claude Code's CLAUDE.md walk-up correctly inherit from ~/dev/projects/CLAUDE.md when you cd into a sub-project?Architecture review must test in 5 minutes. Fallback: explicit @import in each sub-project's CLAUDE.md.
Does Claude Code accept a symlinked project-id directory at ~/.claude/projects/?Architecture review must test. Verify Anthropic bugs #38469/#40300/#65 first.
Where exactly does session-summary logging live? Three patterns from research (Nate Herk overwrite, Paterson 4-layer, Claude Code Advanced hooks).Orchestrator picks based on 00b findings + your preference.
Wiki as a git submodule vs. regular subfolder?Subfolder for now. Promote only if a second consumer materializes.
Vault topology for the knowledge system (one vault with permissions vs. many separate vaults)?Knowledge research handoff (_dev0/migration/knowledge/01). Post-migration.
RAG vs. NotebookLM vs. Obsidian-only?Same handoff stack.
When does the static _basecamp/INDEX.md need to become a v2 routing skill?Trigger: ~15 entries.
Ship a "VS Code zombie reaper" script preemptively?Lean: yes, 10-line script. Cheap insurance.

What feeds the orchestrator (when you spawn it)

The orchestrator chat (handoff 00.1, drafted after you give final feedback) reads all of the following before locking the actual reviewer charters:

From all that, the orchestrator drafts the actual reviewer charters โ€” one for the architecture (ยงAโ€“H), one for the handoff section, and a synthesis chat that reconciles their findings.

Things I'd attack if I were a reviewer

Cold-eyes preview โ€” five things in this v3 that I'd push on, so you can decide whether any need flagging:

  1. Knowledge under ~/dev/? ยงE now puts it inside the dev mirror. Could argue knowledge isn't "dev" โ€” it's life context. Counter: keeping it inside ~/dev/ means it gets the same sync, secret-scan, and version control. Trade-off accepted.
  2. The .agents/skills/ convention is "emerging" โ€” fragile? Two tools (Mission Control, Praktor) cited. If those projects die, are we stranded? Counter: format is just YAML+MD. Worst case we copy files into each CLI's native skill dir.
  3. shared/ bootstrap via @import โ€” recursive depth? Max 5 hops per Anthropic docs. Our chain is 1โ€“2 hops. Headroom OK, but flag.
  4. PRAUL as a project peer (not under knowledge/) โ€” it's a tool that talks to vaults. Should it live under knowledge/? Counter: tool โ†” data separation justifies project peer.
  5. Two folders both named handoffs/ at different levels? ~/dev/handoffs/ (master) and _dev0/handoffs/ (migration-specific). Distinct paths, distinct purposes โ€” but worth a sticky note.

Reading order in the morning

  1. This explainer (you're here)
  2. _dev0/migration/architecture-decisions.md โ€” the source doc itself (still v1, NOT yet rewritten)
  3. _dev0/migration/review/pending-revisions.md โ€” P-1, P-2
  4. _dev0/migration/review/research/conventions/05-reference.md โ€” the synthesis the reviewers will cite
  5. Voices folder if you want the three chats' raw perspectives

When you're ready, hit "Export feedback" at the top โ€” it bundles everything you've written into markdown and copies it to your clipboard. Paste it back to me and I'll fold your notes into the orchestrator charter.