You and CW (GitHub Hiroki-CoC) now work on the same private repo from two different computers — she authors persona profiles on her Mac Mini, you review and merge on your PC. This page walks through everything we set up and, for each step, what it's actually for. The throughline: GitHub is the only thing the two machines share. They never copy files to each other directly. Every change rides up through a reviewed Pull Request and comes back down with a git pull.
Recorded 2026-06-04 · collaborator: CW (Hiroki-CoC, Write access) · repo: enovyhoo/Multi-Agent-Dialog (private)
git pull. That single hub-and-spoke loop keeps the two clones identical and makes it impossible for her work to land on main unreviewed.Picture GitHub as a hub in the middle and each computer as a spoke. Work flows up (push), gets reviewed in the hub, then flows down (pull) to both machines so they match again.
Why the channel is Git, not Google Drive. Your repo folder happens to live inside Google Sync, but the collaboration never uses Drive. Two machines syncing one .git folder through a file-sync service corrupts it — they fight over the same internal files. Git is the tool built for multi-machine work; Drive is not. That's why CW's clone lives in ~/CODES, a plain local folder deliberately outside iCloud/Drive.
One-time setup. Each row is a thing we did and the job it does.
| Step | What we did | Its function |
|---|---|---|
| Channel | Use the GitHub remote enovyhoo/Multi-Agent-Dialog | the hub both machines sync through — replaces any file-sync idea |
| Workflow | Branch + Pull Request | CW's work waits on a branch and is reviewed before it can reach main |
| CODEOWNERS | Added .github/CODEOWNERS = * @enovyhoo | auto-requests you as reviewer on every PR she opens |
| Collaborator | Added Hiroki-CoC to the repo | gives her push access (a personal repo grants Write by default) |
| GitHub Pro | Upgraded the account ($4/mo) | makes branch rules actually enforced on a private repo (free plan doesn't) |
protect-main | Ruleset: block force-push + restrict deletion | no one can rewrite history or delete main — the catastrophe net |
We deliberately left "require a pull request" off in the ruleset — turning it on would also block your own direct pushes and the roster-deploy bot. So the server enforces the catastrophic protections (no force-push, no deletion); the workflow (CW branches + you review) is what keeps bad content off main.
Her CC session did this from a kickoff prompt — clone, set identity, skip the API key. Three jobs:
| Choice | Function |
|---|---|
Clone to ~/CODES | a real local working copy, safely outside any file-sync folder |
Set user.name / user.email | every commit she makes is attributed to her in git log / blame / the PR |
Skip .env | the API key is only for running the room app; writing profiles needs none |
Every profile flows through the same eight steps. Steps ①–⑤ are CW, ②–③ (on GitHub) are the gate, ⑥ is you, ⑦ is both. The function of each:
git checkout main && git pull. Function: pull down everything already merged so her new work builds on the current main, not a stale copy.git checkout -b persona/<slug>. Function: isolates the new persona on its own line so main is never touched while she works.profile.md + audit.md + corpus.git add prototype/personas/<slug>/ then git commit. Function: records the finished work as a snapshot on her branch.git push -u origin persona/<slug>. Function: uploads the branch up the spoke to GitHub — now it exists on the hub, still off main.gh pr create. Function: formally proposes merging into main; CODEOWNERS auto-requests you. Nothing on main changes yet.main as one clean commit only after your eyes are on it.git checkout main && git pull. Function: brings both clones down to the new main — the two computers are identical again."Syncing" is really just four verbs. Push and pull move commits between a clone and the hub; the PR is the gate in between.
| Verb | Direction | What it does |
|---|---|---|
| git push | clone → GitHub | uploads your branch's commits to the hub |
| git fetch | GitHub → clone (refs only) | downloads new commits but does not change your files yet |
| git pull | GitHub → clone (+apply) | fetch plus fast-forward your files to match the hub |
| Pull Request | branch → main (on GitHub) | proposes & gates the merge; review happens here |
What you literally saw when we synced your PC after the Elon Musk merge: Git reported your clone was behind 1, then fast-forwarded it to match the hub — no edits, no conflict, just catching up.
One extra wrinkle on your PC: a roster-deploy bot auto-pushes to origin/main on its own (the repo sits in a synced folder). So origin/main can move without you. The habit that handles it: always git pull before you start, and never force-push. That's also why a couple of personas you thought were "local-only" turned out to already be on the hub — the bot had pushed them, and your pull quietly absorbed them.
mainTwo layers, kept separate on purpose. The server stops the irreversible disasters; the workflow stops bad content.
Force-push blocked + deletion restricted on main. History can never be rewritten or wiped — by anyone, including a buggy script. This is the hard, irreversible-disaster net, live now that you're on Pro.
A normal push to main is still allowed (so you + the bot keep working). What keeps CW's content off main is the branch + PR + your review loop — backed by the "never commit to main" rule saved in her CC's memory.
Net effect: the worst CW can do by accident is land a commit on her own branch, which you'd see in the PR before it ever reaches main. A markdown profile can't "crash" anything at runtime — the real risk was always Git-level mistakes, and those are now fenced off.
| Moment | Who | Action | Function |
|---|---|---|---|
| Start a persona | CW | git checkout main && git pull | begin from the latest shared main |
| CW | git checkout -b persona/<slug> | isolate the work on a branch | |
| Author | CW | “create a profile of X” in CC | gather → author → cold-audit |
| Ship | CW | git add · commit · push -u | snapshot + upload the branch |
| CW | gh pr create | propose the merge; you're auto-requested | |
| Review | You | read diff + audit.md → Squash & merge | the gate; work joins main |
| Sync | Both | git checkout main && git pull | bring both clones to the new main |