Copilot → Claude Code migration
Bring a user's GitHub Copilot conversation history into Claude Code in three steps:
extract the raw conversations from disk → document them as readable Markdown
plus an index → continue the most recent one.
GitHub Copilot stores chat history locally in VS Code's storage (two different
on-disk formats, see the reference). Nothing is fetched from the network.
When to use
- "extract / recover / export / back up my Copilot conversations or chat history"
- "I'm migrating from GitHub Copilot to Claude Code"
- "document / summarize what I did with Copilot"
- "continue my last Copilot conversation" / "pick up where Copilot left off"
What's bundled (resolve paths from this skill's directory)
scripts/extract_copilot.py — standalone, no-dependency extractor. Discovers
Copilot storage across editors/OSes, decodes both on-disk formats, dedupes
sessions resumed across windows, and writes one faithful Markdown transcript per
conversation + a manifest.json. Run it — do not re-implement the parsing.
references/storage-and-formats.md — exactly where Copilot stores chats per
OS/editor and how the two formats work. Read it if discovery finds nothing, or to
explain the mechanics to the user.
Procedure
1 — Extract (deterministic, read-only)
List first, then extract:
python3 <skill>/scripts/extract_copilot.py --list # discover + preview
python3 <skill>/scripts/extract_copilot.py --out <out-dir> # write transcripts
- Pick
<out-dir>: if the project has a docs/ directory, use
docs/copilot-history/; otherwise ./copilot-history/.
- To scope to one project, add
--filter <substring> (matches the workspace path
or conversation content). Use --no-reasoning to drop the model's "thinking".
- If
--list finds nothing: read references/storage-and-formats.md, check the
candidate paths it printed to stderr, and ask the user which editor/host they used
Copilot in (desktop vs. remote SSH/WSL/Cursor change the location).
- Output:
<out-dir>/transcripts/*.md (faithful, verbatim) + manifest.json.
Skim manifest.json (title/date/turns/files per conversation) to decide what
matters — don't blindly re-read every large transcript.
2 — Document (you write these)
In <out-dir>:
sessions/<same-filename>.md — a tight summary per conversation: title, date,
goal, what was done, files changed, key decisions, outcome, open threads. Read the
full transcript for large/important ones; the manifest + first/last turns suffice
for trivial ones. If there are many, fan out subagents (one per transcript).
README.md — an index: a 2–3 sentence intro, a chronological table
(date | linked conversation | one-line outcome), and a grouping by theme.
3 — Continue the most recent conversation
This is usually the user's real goal.
- The latest conversation is the last row of
manifest.json — it is sorted by
most-recent activity (last_ts), so the final row is the conversation the user
used most recently (each row also carries first_ts if you want start-date order).
- Read its full transcript. Cross-reference against the current repo state
(
git log, the files it touched) to separate what actually landed from what was
only discussed.
- Write
<out-dir>/CONTINUE_HERE.md: where it left off (exact stop point), what
landed vs. discussed, verified vs. unverified, open problems, and a prioritized
next-steps checklist referencing concrete files/commands.
- Then offer to do the next step.
Notes & guarantees
- The extractor is read-only on Copilot storage and writes only under
--out.
No network, no extra packages (standard library only). Safe to run anywhere.
- A conversation resumed across several editor windows is saved as multiple files
sharing one sessionId (later windows replay earlier turns); the script merges and
dedupes turns by prompt content, keeping the most complete copy.
- The division of labor is deliberate: the script does the exact, verbatim
extraction (no hallucination risk); you do the summarizing and judgement.
- This skill is distributable: it has no hard-coded paths or project assumptions —
discovery and
--filter are fully general.
Source: OxyFlax/AI — distributed by TomeVault.
1---2name: oxyflax-ai-copilot-migration3description: Copilot → Claude Code migration4---56# Copilot → Claude Code migration78Bring a user's GitHub Copilot conversation history into Claude Code in three steps:9**extract** the raw conversations from disk → **document** them as readable Markdown10plus an index → **continue** the most recent one.1112GitHub Copilot stores chat history locally in VS Code's storage (two different13on-disk formats, see the reference). Nothing is fetched from the network.1415## When to use16- "extract / recover / export / back up my Copilot conversations or chat history"17- "I'm migrating from GitHub Copilot to Claude Code"18- "document / summarize what I did with Copilot"19- "continue my last Copilot conversation" / "pick up where Copilot left off"2021## What's bundled (resolve paths from this skill's directory)22- `scripts/extract_copilot.py` — standalone, **no-dependency** extractor. Discovers23 Copilot storage across editors/OSes, decodes **both** on-disk formats, dedupes24 sessions resumed across windows, and writes one faithful Markdown transcript per25 conversation + a `manifest.json`. **Run it — do not re-implement the parsing.**26- `references/storage-and-formats.md` — exactly where Copilot stores chats per27 OS/editor and how the two formats work. Read it if discovery finds nothing, or to28 explain the mechanics to the user.2930## Procedure3132### 1 — Extract (deterministic, read-only)33List first, then extract:34```bash35python3 <skill>/scripts/extract_copilot.py --list # discover + preview36python3 <skill>/scripts/extract_copilot.py --out <out-dir> # write transcripts37```38- Pick `<out-dir>`: if the project has a `docs/` directory, use39 `docs/copilot-history/`; otherwise `./copilot-history/`.40- To scope to one project, add `--filter <substring>` (matches the workspace path41 or conversation content). Use `--no-reasoning` to drop the model's "thinking".42- If `--list` finds **nothing**: read `references/storage-and-formats.md`, check the43 candidate paths it printed to stderr, and ask the user which editor/host they used44 Copilot in (desktop vs. remote SSH/WSL/Cursor change the location).45- Output: `<out-dir>/transcripts/*.md` (faithful, verbatim) + `manifest.json`.46 **Skim `manifest.json`** (title/date/turns/files per conversation) to decide what47 matters — don't blindly re-read every large transcript.4849### 2 — Document (you write these)50In `<out-dir>`:51- `sessions/<same-filename>.md` — a tight summary per conversation: title, date,52 goal, what was done, files changed, key decisions, outcome, open threads. Read the53 full transcript for large/important ones; the manifest + first/last turns suffice54 for trivial ones. If there are many, fan out subagents (one per transcript).55- `README.md` — an index: a 2–3 sentence intro, a **chronological table**56 (date | linked conversation | one-line outcome), and a grouping **by theme**.5758### 3 — Continue the most recent conversation59This is usually the user's real goal.60- The latest conversation is the **last row of `manifest.json`** — it is sorted by61 most-recent activity (`last_ts`), so the final row is the conversation the user62 used most recently (each row also carries `first_ts` if you want start-date order).63- Read its full transcript. Cross-reference against the **current repo state**64 (`git log`, the files it touched) to separate what actually landed from what was65 only discussed.66- Write `<out-dir>/CONTINUE_HERE.md`: where it left off (exact stop point), what67 landed vs. discussed, verified vs. unverified, open problems, and a prioritized68 next-steps checklist referencing concrete files/commands.69- Then offer to do the next step.7071## Notes & guarantees72- The extractor is **read-only** on Copilot storage and writes only under `--out`.73 No network, no extra packages (standard library only). Safe to run anywhere.74- A conversation **resumed across several editor windows** is saved as multiple files75 sharing one sessionId (later windows replay earlier turns); the script merges and76 dedupes turns by prompt content, keeping the most complete copy.77- The division of labor is deliberate: the **script** does the exact, verbatim78 extraction (no hallucination risk); **you** do the summarizing and judgement.79- This skill is distributable: it has no hard-coded paths or project assumptions —80 discovery and `--filter` are fully general.8182---83> Source: [OxyFlax/AI](https://github.com/OxyFlax/AI) — distributed by [TomeVault](https://tomevault.io).84<!-- tomevault:4.0:skill_md:2026-06-16 -->