Skip to content

Roaming Copilot CLI — Multi-Device Setup

Last updated: 2026-04-20 Status: ✅ M23 deployed on W365 (2026-04-20), M24-M26 pending

Overview

Sutheesh runs Copilot CLI across multiple devices with a shared "brain" — same personality, same memory, same context — regardless of which device he's on.

💻 Laptop (Corp, Primary)  ──┐
☁️ W365 (Corp, Background)  ──┼──→  OneDrive Personal  ──→  🧠 Same brain
🍎 Mac (Personal, Mobile)   ──┘      (symlink sync)          Same memory
📱 iPad → W365 (Remote)     ──┘                               Same context

Architecture

What makes Copilot CLI "the same"

The CLI's personality, rules, and memory come from local files, not from the GitHub account:

Component Source Synced?
Personality & rules copilot-instructions.md ✅ OneDrive sync
Project knowledge copilot-instructions-reference.md ✅ OneDrive sync
Session memory session-journal.md ✅ OneDrive sync
Secrets (PAT, GA keys) ~/.copilot/secrets/ ✅ OneDrive sync
Model (Opus 4.6) Selected per session (/model) Manual per device
MCP servers mcp-config.json + local installs Machine-local
Session history DB session-store.db ❌ Not synced (SQLite)
Plugins/skills Auto-installed per device Machine-local
Config paths config.json Machine-local (different usernames)

Sync Strategy — OneDrive Personal Profile Script

Deployed 2026-04-20 — zero corp dependencies

Symlinks were abandoned (need admin/Developer Mode on W365). Instead, a bidirectional copy-on-open script runs from the PowerShell profile. The sync logic lives entirely in personal OneDrive.

Architecture:

📁 OneDrive Personal (CopilotCLI_Sync/)    ← source of truth, syncs everywhere
├── copilot-instructions.md                 ← personality & rules
├── copilot-instructions-reference.md       ← project knowledge
├── session-journal.md                      ← session memory
├── sync-brain.ps1                          ← the sync engine
└── starter-prompts/                        ← cert content prompts (14 files)

💻 Laptop  → PS profile calls sync-brain.ps1 → copies newer files ↔ ~/.copilot/
☁️ W365    → PS profile calls sync-brain.ps1 → copies newer files ↔ ~/.copilot/
🍎 Mac     → PS profile calls sync-brain.ps1 → auto-detects macOS OneDrive path

How it works:

  1. sync-brain.ps1 lives in OneDrive\CopilotCLI_Sync\ (personal OneDrive — syncs to all devices)
  2. Each device has ONE line in its PowerShell $PROFILE:
    . "$env:USERPROFILE\OneDrive\CopilotCLI_Sync\sync-brain.ps1" 2>$null
    
  3. On every terminal open, the script compares timestamps:
    • If OneDrive version is newer → copies to ~/.copilot/
    • If local version is newer → copies to OneDrive
  4. Auto-detects OS — handles Windows, macOS, and Linux OneDrive paths

Mac setup (one-liner):

. "$HOME/Library/CloudStorage/OneDrive-Personal/CopilotCLI_Sync/sync-brain.ps1" 2>$null

Why not symlinks?

Approach Why rejected
File symlinks Require admin or Developer Mode — W365 has neither
Hard links Break when OneDrive replaces files during sync
Directory junctions Only work for directories, not individual files
Copy-on-open ✅ No admin, no special permissions, works everywhere

What stays machine-local

File Why not synced
config.json Contains machine-specific paths (C:\Users\ssutheesh vs W365 username)
mcp-config.json Contains machine-specific paths to MCP server installs
session-store.db SQLite + cloud sync = corruption risk
session-state/ Per-session artifacts, not needed across devices
mcp-servers/ Locally installed server code + node_modules
skills/, installed-plugins/ Auto-installed when CLI starts
secrets/ Security best practice — kept local-only. Re-copy when PAT rotates via setup package.

Device Comparison

Feature 💻 Laptop (Enterprise) ☁️ W365 (Enterprise) 🍎 Mac (Personal susanthgit)
GitHub account ssutheesh_microsoft (EMU) ssutheesh_microsoft (EMU) susanthgit (personal)
Brain/memory ✅ Full ✅ Full (synced) ✅ Full (synced)
Model (Opus 4.6) ✅ Enterprise ✅ Enterprise ⚠️ Check Copilot Individual
WorkIQ ❌ Needs corp auth
ATK / Agent skills ❌ Needs corp auth
YouTube MCP ✅ (OAuth, not GitHub-tied)
m365-admin-graph MCP ✅ (tenant creds, not GitHub-tied)
Azure MCP ✅ (separate az login)
Learn Docs MCP ✅ (public HTTP)
Pipeline ops (gh CLI) ✅ via PAT ✅ via PAT ✅ via same PAT
Site building (Hugo)
Always on ❌ (laptop) ✅ (cloud PC) ❌ (personal device)

Setup Package (M23)

Files

Location Purpose
C:\ssClawy\w365-setup\prepare-package.ps1 Runs on LAPTOP — bundles everything into a ZIP
C:\ssClawy\w365-setup\setup-w365.ps1 Runs on W365 — installs everything from the ZIP
C:\ssClawy\w365-setup\w365-copilot-package.zip 15.7 MB transfer package

What the setup script installs (via Scoop — no admin needed)

No admin rights on W365

Corp policy blocks winget/MSI installs. The setup script was updated to use Scoop, which installs everything to ~/scoop/ in user space.

Tool Scoop ID Version (Apr 2026) Purpose
Node.js 24.x LTS nodejs-lts 24.15.0 MCP servers, npm packages
Git git 2.53.0 Version control
GitHub CLI gh 2.90.0 Pipeline operations, auth
Hugo Extended hugo-extended 0.160.1 Site building
Python python 3.14.4 OG generators, pipeline scripts
Windows Terminal windows-terminal Latest Better terminal experience
Azure CLI azure-cli (optional) Azure deploys — install when needed

What the package includes

  • 3 instruction files (instructions, reference, journal)
  • 3 secret files (GitHub PAT, GA service account, GA key)
  • m365-admin-graph MCP server (with full node_modules)
  • YouTube MCP OAuth credentials (credentials.json + tokens.json)
  • config.json and permissions-config.json (auto-adapted for W365 paths)
  • mcp-config.json (auto-adapted for W365 paths)

Setup flow

Scoop installs are more reliable one at a time

The automated setup script can stall during Scoop downloads. Running scoop install <tool> individually is more reliable. Long pasted PowerShell commands also break in W365 RDP — keep commands short.

  1. On laptop: pwsh prepare-package.ps1 → creates ZIP
  2. Copy ZIP to OneDrive Personal\W365-Setup\ → auto-syncs to W365
  3. On W365: Install Scoop first: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force then irm get.scoop.sh | iex
  4. Install tools one by one: scoop install git, scoop install nodejs-lts, scoop install gh, scoop install hugo-extended, scoop install python, scoop install windows-terminal
  5. Extract package: Expand-Archive .\w365-copilot-package.zip -DestinationPath .\package -Force
  6. Run config setup (Phase 3-7 commands — copies configs, adapts paths, sets GH_TOKEN)
  7. Fix Copilot CLI PATH: add $env:LOCALAPPDATA\GitHub CLI\copilot to user PATH
  8. Clone repos: git clone aguidetocloud-revamp + guided into C:\ssClawy
  9. Close/reopen terminal → gh auth login (susanthgit, susanth.ss@gmail.com) → copilot
  10. Delete the OneDrive\W365-Setup folder (contains secrets!)

Use Cases

W365 as background runner

  • Kick off long builds/deploys → disconnect → come back to results
  • Trigger pipeline runs across all 5 repos → go do customer calls → check later
  • Run bulk operations (YouTube description updates, data refreshes)
  • Access from iPad/Mac via Remote Desktop when away from laptop

Mac as mobile workstation

  • Site building and content creation on the go
  • Learning sessions (same context as laptop)
  • Use personal susanthgit account — avoids enterprise policy/CA blocks
  • 95% identical experience (loses WorkIQ + ATK only)

Conflict Prevention

  • Laptop is the journal master — primary machine for session journal updates
  • If W365 session updates the journal, laptop picks it up via OneDrive sync
  • Avoid running sessions on BOTH machines simultaneously (OneDrive conflict risk)
  • If a conflict occurs, OneDrive creates a (conflict) copy — manually merge

YouTube Automation Capabilities

Researched 2026-04-17. Capabilities via YouTube MCP + Data API v3:

Action Can do? How
Update descriptions ✅ Yes update_video_seo tool — batch across all videos
Update titles ✅ Yes update_video_seo tool
Update tags ✅ Yes update_video_seo tool
Add timestamps to description ⚠️ Manual timestamps needed Can format + insert, but can't watch video to generate timestamps
Post a comment as channel owner ❌ Not in current MCP YouTube API supports commentThreads.insert, but MCP server doesn't expose it
Pin a comment ❌ Impossible YouTube has NO API for pinning — manual in YouTube Studio only
Auto-generate chapters ❌ No YouTube's own auto-chapters do this, can't be triggered via API

High-value YouTube ops available now

  1. Bulk description footer — add standardised promo links (tools, certs, Ko-fi, socials) to all 74 videos
  2. Tag standardisation — consistent tag taxonomy across all videos
  3. Title optimisation — SEO improvements based on analytics data
  4. Analytics-driven decisions — top performers, traffic sources, topic suggestions

Task Board References

Task Description Status
M23 Set up Copilot CLI on W365 ✅ Deployed 2026-04-20
M24 OneDrive Personal brain sync ✅ Deployed 2026-04-20
M25 Mac setup (personal account) ⬜ Pending
M26 Validate enterprise licence on non-corp device ⬜ Pending

Lessons Learned (2026-04-20 deployment)

  1. No admin on W365 — corp policy blocks winget/MSI installs. Scoop (irm get.scoop.sh | iex) is the zero-admin solution.
  2. Scoop's automated script can stall — running scoop install <tool> one at a time is more reliable than a loop in a script.
  3. Long PowerShell commands break in W365 RDP — multi-line commands get split at wrong points when pasted. Keep commands short.
  4. OneDrive Personal is the sync backbone — Google Drive can't be installed (corp policy). OneDrive Personal works perfectly.
  5. copilot binary needs PATH fix — installs to AppData\Local\GitHub CLI\copilot\ which isn't auto-added to PATH.
  6. Git Credential Manager — select "manager" + "always use". Auth with susanthgit (susanth.ss@gmail.com).
  7. Symlinks abandoned — file symlinks need admin/Developer Mode (W365 has neither). Hard links break with OneDrive sync. Copy-on-open profile script is the practical solution.
  8. Secrets stay local — syncing credentials through personal cloud storage is a security/compliance risk. Keep secrets local-only; use the setup package to distribute when needed.
  9. Corp PS profile auto-syncs to W365 — Documents folder is redirected to corp OneDrive, so the one-liner in $PROFILE appears on W365 automatically. Non-corp devices add the same one-liner manually.