Set up the GitHub mirror

For Brady — one-time setup. Claude Code has already run git init inside company-os/ and written .gitignore. Your working tree is clean and committable. The remaining steps create the GitHub repo and push.


Prerequisites

  • GitHub account with the email on the Cloudflare Access allow-list
  • gh CLI installed (brew install gh) and authenticated (gh auth login)
  • You’re in the OS folder: cd ~/Library/Mobile\ Documents/com~apple~CloudDocs/company-os

Step 1 — Create the private repo

gh repo create bradyshearer/company-os \
  --private \
  --description "Pro Church Tools — Company OS (source for pctos.com)" \
  --source=. \
  --remote=origin \
  --push=false

--push=false because we’ll do the first commit + push manually so you can verify what’s getting committed.

If you prefer the dashboard: github.com/new → Name: company-os → Private → Create repository (no README, no .gitignore, no license — we already have those locally) → then run:

git remote add origin git@github.com:bradyshearer/company-os.git

Step 2 — Verify the working tree before the first commit

git status

Expected:

  • Untracked: all OS files (AGENTS.md, INDEX.md, context/, methodology/, etc.)
  • Ignored (won’t show by default; check with git status --ignored): .fuse_hidden*, .DS_Store, .claude/, .quartz/node_modules/, .quartz/public/

If anything looks off — e.g., node_modules/ is showing as untracked — fix .gitignore first.


Step 3 — Stage and commit

git add -A
git status --short    # one more eyeball pass before committing
git commit -m "Initial Company OS commit + Quartz publishing pipeline"

The commit message can be whatever — this is the seed commit.


Step 4 — Push to GitHub

git push -u origin main

If your local branch is master instead of main, either rename (git branch -M main) or push to master and update Cloudflare Pages’ production branch in setup-cloudflare.


Step 5 — Verify on GitHub

gh repo view bradyshearer/company-os --web

Confirm:

  • The repo is private (top of page should show a 🔒)
  • The file count is reasonable (~70 .md files + .gitignore + .quartz/)
  • .quartz/node_modules/ is NOT in the repo (this would be a multi-MB mistake)
  • context/10-year-plan.md IS in the repo (it’s mirrored to GitHub even though it’s not published to pctos.com — publish: false filters at build time, not at git time)

Step 6 — Hand off to Cloudflare

Continue with setup-cloudflare to wire the repo to Cloudflare Pages and configure Access.


What the launchd job will do later

Once Cloudflare Pages is live, the hourly launchd job at ~/Library/LaunchAgents/com.bradyshearer.company-os-sync.plist will:

  1. git add -A
  2. If there’s a diff: git commit -m "Auto-sync ..." and git push origin main
  3. Cloudflare Pages picks up the push, runs Quartz, deploys

You can install the plist any time after the repo exists (see runbook → “How to (re)install the sync job”).