@jachy/pi-git-sync
Sync Pi configuration across machines via GitHub Private Repository
Package details
Install @jachy/pi-git-sync from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@jachy/pi-git-sync- Package
@jachy/pi-git-sync- Version
0.6.2- Published
- Jul 30, 2026
- Downloads
- 3,065/mo · 3,065/wk
- Author
- jachy
- License
- MIT
- Types
- extension
- Size
- 294 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-git-sync
Keep the same Pi setup on every machine.
📖 中文文档
pi-git-sync stores Pi configuration in a private Git repository and synchronizes it across machines.
Machine A ── /pisync ──> Private Git repo <── /pisync ── Machine B
1. Quick Start
Requirements and setup
- Pi
0.82.1or newer (Node.js>=22.19.0) - Git installed, with SSH or HTTPS credentials configured for GitHub
On the first machine:
Create an empty private GitHub repository. Do not initialize it with a README.
Install the extension:
pi install npm:@jachy/pi-git-syncRun
/pisyncand enter the repository URL.
On another machine, install the extension and run /pisync with the same URL. The repository is user data, not a Pi package—do not run pi install inside it.
Daily use
| Command | Purpose |
|---|---|
/pisync |
Set up a machine or run a complete sync |
/pisync status |
Show Git and three-way sync status |
/pisync diff |
Preview pending differences |
Run /pisync after changing Pi configuration. Press Esc to cancel an active run and terminate its Git/SSH subprocesses.
Sync scope
| Content | Behavior |
|---|---|
| Extensions, skills, prompts, themes | Synced from their matching directories under sync/ |
settings.json |
Whole-file sync; machine-local file: packages stay on that device |
AGENTS.md, SYSTEM.md, APPEND_SYSTEM.md, keybindings.json |
Copied into the Pi agent directory |
| Third-party packages | Declared in settings.json; new or changed sources require approval |
These paths are always blocked:
auth.json sessions/** trust.json models-store.json npm/** git/**
node_modules/** **/node_modules/** .pi-sync/** **/.env **/*.pem
**/id_rsa **/id_ed25519
Hidden files are excluded except .gitignore. Symlinks are never followed.
2. Learn More
Synchronization model
agent files
│
├─ capture and commit local changes
├─ fetch the configured branch
├─ rebase local commits, or fast-forward remote-only changes
├─ apply the resulting configuration to Pi
└─ push the shared branch and this device's recovery branch
A failed step stops the run. Files are never silently overwritten when both sides changed.
Repository and configuration
The repository is cloned locally to:
~/.pi/config-repo/
├── pi-sync.json # Sync configuration
└── sync/ # Synced Pi files
├── settings.json
├── extensions/
├── skills/
├── prompts/
└── themes/
Default ~/.pi/config-repo/pi-sync.json:
{
"schemaVersion": 2,
"branch": "main",
"root": "sync",
"include": [
"settings.json",
"AGENTS.md",
"SYSTEM.md",
"APPEND_SYSTEM.md",
"keybindings.json",
"extensions/**",
"skills/**",
"prompts/**",
"themes/**"
],
"exclude": [
"**/.DS_Store",
"**/*.tmp",
"**/*.log",
"extensions/**/.cache/**",
"extensions/**/cache/**",
"extensions/**/coverage/**",
"extensions/**/logs/**",
"extensions/**/temp/**",
"extensions/**/tmp/**"
],
"delete": "tracked",
"pullTimeoutMs": 10000,
"security": { "scanSecretsBeforePush": true }
}
- Filtering priority: built-in hard deny >
exclude>include. delete: "tracked"propagates deletion only for managed files;"none"disables deletion.pullTimeoutMscontrols each pull, fetch, and rebase operation. A complete/pisyncrun stops after 60 seconds.- Secret scanning is enabled by default. Built-in hard deny remains active if scanning is disabled.
Conflicts and safety
changed on one side ──> continue automatically
baseline ────────┤
changed on both sides ─> ask before applying
For a content conflict, ask the current Pi agent to merge, choose local or remote content for the conflicted paths, or stop and merge manually. Non-conflicting changes and each device's recovery branch remain available.
Additional safeguards include atomic writes, pre-apply backups, operation locking, path-boundary checks, package approval, and rollback attempts after failed installs.
Development
# Load locally, then run /reload in Pi
ln -s $(pwd) ~/.pi/agent/extensions/pi-git-sync
# Or load temporarily
pi -e ./index.ts
npm install
npm test # complete suite, including E2E
npm run test:core # core suite without E2E
npm run test:e2e # two-device E2E suite
npm run test:smoke # quick glob and UI checks
npm run test:ci # typecheck, coverage gate, and E2E
After upgrading, run /pisync status, then /pisync. See the upgrade guide for migrations, conflict recovery, and rollback.
License
MIT