.squad/templates/skills/github-multi-account/SKILL.md
Detect and set up account-locked gh aliases for multi-account GitHub. The AI reads this skill, detects accounts, asks the user which is personal/work, and runs the setup automatically.
npx skillsauth add cwoodruff/morespeakers-com github-multi-accountInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When the user has multiple GitHub accounts (check with gh auth status). If you see 2+ accounts listed, this skill applies.
Run: gh auth status
Look for multiple accounts. Note which usernames are listed.
Ask: "I see you have multiple GitHub accounts: {list them}. Which one is your personal account and which is your work/EMU account?"
Once the user confirms, do ALL of this for them:
# 1. Define the functions
$personal = "THEIR_PERSONAL_USERNAME"
$work = "THEIR_WORK_USERNAME"
# 2. Add to PowerShell profile
$profilePath = $PROFILE.CurrentUserAllHosts
if (!(Test-Path $profilePath)) { New-Item -Path $profilePath -Force | Out-Null }
$existing = Get-Content $profilePath -Raw -ErrorAction SilentlyContinue
if ($existing -notmatch "gh-personal") {
$block = @"
# === GitHub Multi-Account Aliases ===
function gh-personal { gh auth switch --user $personal 2>`$null | Out-Null; gh @args }
function gh-work { gh auth switch --user $work 2>`$null | Out-Null; gh @args }
Set-Alias ghp gh-personal
Set-Alias ghw gh-work
"@
Add-Content -Path $profilePath -Value $block
}
# 3. Create CMD wrappers
$binDir = Join-Path $env:USERPROFILE ".squad\bin"
if (!(Test-Path $binDir)) { New-Item -ItemType Directory -Path $binDir -Force | Out-Null }
"@echo off`ngh auth switch --user $personal >nul 2>&1`ngh %*" | Out-File "$binDir\ghp.cmd" -Encoding ascii
"@echo off`ngh auth switch --user $work >nul 2>&1`ngh %*" | Out-File "$binDir\ghw.cmd" -Encoding ascii
# 4. Add to PATH
$userPath = [Environment]::GetEnvironmentVariable("PATH", "User")
if ($userPath -notmatch [regex]::Escape($binDir)) {
[Environment]::SetEnvironmentVariable("PATH", "$binDir;$userPath", "User")
$env:PATH = "$binDir;$env:PATH"
}
# 5. Load in current session
function gh-personal { gh auth switch --user $personal 2>$null | Out-Null; gh @args }
function gh-work { gh auth switch --user $work 2>$null | Out-Null; gh @args }
Set-Alias ghp gh-personal
Set-Alias ghw gh-work
Run these and show the results:
ghp api user --jq '.login' # should show personal username
ghw api user --jq '.login' # should show work username
"All set! From now on use ghp for personal repos and ghw for work repos. I'll use them too."
gh for repo operations — always ghp or ghwgh auth switch — the aliases handle itghp / gh-personalghw / gh-workThis repo (bradygaster/squad) is bound to the bradygaster (personal) account.
All gh operations in this repo MUST use ghp / gh-personal.
At the TOP of any script touching GitHub, define:
function gh-personal { gh auth switch --user bradygaster 2>$null | Out-Null; gh @args }
function gh-work { gh auth switch --user bradyg_microsoft 2>$null | Out-Null; gh @args }
tools
Cross-platform path handling and command patterns
development
Update tests when changing APIs — no exceptions
development
Core conventions and patterns used in the Squad codebase
tools
Find and resume interrupted Copilot CLI sessions using session_store queries