Twinport is the successor name for what was briefly published as
copilot-config-sync. The package id is now focusquest.twinport and
all command and configuration namespaces have moved from
copilotConfigSync.* to twinport.*. The old copilotConfigSync.*
command ids and globalState keys remain wired as hidden aliases for one
release so existing keybindings and tasks keep working; see the
migration notes in CHANGELOG.md for the v1.0.0 entry.
Twinport
A VS Code extension that provisions and weekly-refreshes your ~/.copilot/
folder (agents, skills, instructions, MCP servers) from a GitHub repo of
your choice.
If you keep your Copilot CLI customizations in a Git repository - agents,
skills, path-specific instructions, MCP server definitions - this extension
takes care of pulling that repo into ~/.copilot/ automatically and on
demand, without ever touching your personal databases, OAuth tokens, or
local settings.
What it does
- First-run walkthrough. Walks you through pointing the extension at
the GitHub repo that owns your Copilot config, then runs the first sync.
Twinport: Sync Now. Pulls origin/<branch> from the
configured repo and copies the whitelisted categories into ~/.copilot/.
- Weekly auto-sync. Runs once every 7 days in the background. Toggle
with
twinport.autoSyncWeekly.
- MCP translation. Reads
mcp-config.json (CLI format) from the source
repo and writes mcp.json (VS Code format) into your user profile.
- Protected paths. Refuses to write over your personal state - dtwin
databases, session state, OAuth tokens,
settings.json,
permissions-config.json, config.json, and logs.
60-second quick start
- Install the extension.
- On first run, accept the walkthrough. It asks for your source repository
in
owner/repo form (no default - you must set this before the first
sync).
- Click Sync Now. The extension clones the source, copies the agents,
skills, instructions, and rules into
~/.copilot/, and translates your
MCP config into the VS Code-format mcp.json.
- Run
Twinport: Open ~/.copilot Folder to confirm the layout.
Configuration reference
| Setting |
Type |
Default |
Purpose |
twinport.sourceRepo |
string |
(none - must be configured) |
GitHub repo to sync from (owner/repo). |
twinport.sourceBranch |
string |
main |
Branch to sync from. |
twinport.categories |
array |
["agents","skills","instructions","rules","copilot-instructions"] |
Subfolders under .github/ in the source repo to copy into ~/.copilot/. |
twinport.translateMcpConfig |
boolean |
true |
Translate mcp-config.json (CLI format) into VS Code's mcp.json. |
twinport.autoSyncWeekly |
boolean |
true |
Run a sync once every 7 days. |
twinport.dryRun |
boolean |
false |
Log what would change without writing files. |
Commands
| Command |
Action |
Twinport: Sync Now |
Run a sync immediately. |
Twinport: Configure Source Repository |
Change the source repo / branch. |
Twinport: Open ~/.copilot Folder |
Reveal ~/.copilot/ in your OS file explorer. |
Twinport: Show Sync Log |
Show the extension's output channel. |
Twinport: Migrate from copilot-config-sync |
Re-run the one-shot legacy-namespace migration. Idempotent. |
Privacy and data
This extension reads only the GitHub repository you configure and writes
only into ~/.copilot/ - minus a strict allow-list of paths it will never
touch (PROTECTED_PATHS):
- Personal databases (
dtwin-notes.db, session-store.db, and their WAL/SHM siblings)
session-state/** (per-session state)
mcp-oauth-config/** (OAuth tokens and credentials)
logs/**, pkg/** (logs and runtime artifacts)
settings.json, permissions-config.json, config.json (user-owned config)
No telemetry. No network traffic beyond the git fetch of the configured
repository. The extension runs entirely on your machine.
Default source repository
twinport.sourceRepo ships with no default. You must point
it at your own fork or team repository (in <your-org>/<your-repo> form)
before running the first sync. The walkthrough and the
Twinport: Configure Source Repository command both prompt
for this value.
Publishing (maintainer)
This extension is published using Azure AD federated authentication. No PAT is required.
az login (one-time per machine, refreshed roughly every 90 days)
npm run publish
To bump the patch version and publish in one step, use npm run publish:patch.
If az login is not available, fall back to a Personal Access Token:
npx @vscode/vsce login tosao # PAT prompt
npx @vscode/vsce publish
See docs/publishing.md for the full release flow
(version bump, changelog, smoke test, rollback).
Architecture
See docs/architecture.md for the sync flow,
protected-paths model, and MCP translator design. See
docs/extending.md to add a new sync category.
License
MIT. See LICENSE.