Skip to content

COMPARISONS

Claude Code vs Copilot CLI: 22 Launches, Zero Sessions

Claude code vs copilot cli on a machine where both run: one ships a 233 MB binary you can type, the other a 9 KB shim that cannot find the engine it fronts.

Claude code vs copilot cli usually gets argued as two terminal agents. On the machine this was written on they are not the same kind of object at all. Claude Code is a 235 MB binary you can type the name of. Copilot CLI is a headless JSON-RPC server the editor starts, and the copilot on this PATH is 9,104 bytes of bootstrapper that reports it cannot find the CLI it fronts — while that CLI launched 22 times in eight days. This is a structural comparison of how each one is installed and invoked, measured on 2026-09-18. For the wider choice, our best AI coding assistant comparison is the pillar this sits under.

Key takeaways

  • The copilot on PATH is a three-file chain totalling 9,104 bytes, ending in a Microsoft PowerShell bootstrapper that searches for the real binary and finds none.
  • The real CLI ran 22 times in 8 days — always in server mode (stdio), never as a command.
  • Every shutdown logged Destroying 0 active sessions. 194 log lines, nine distinct shapes, zero prompts.
  • VS Code's agent host config has 51 top-level keys, five of which name Anthropic's and OpenAI's agents.
  • Copilot's shipped Explore subagent lists Claude Haiku 4.5 first, and is not user-invocable, so that is the default.

Claude code vs copilot cli: the command and the engine

This site already audited what a configured repository carries between the two. Claude Code vs Copilot CLI: What Actually Transfers scored six configuration concepts on 2026-08-15 and found Copilot the cheapest target we had measured: .mcp.json kept as-is, .claude/skills listed among Copilot's own skill directories, one rename doing the rest.

That article said plainly that Copilot CLI was not installed on the machine it was written on. This one is the opposite case and a different axis. Copilot CLI is running here — it has a home directory, a session store and eight days of logs — and it still is not installable as a command. That gap is the article.

The 9 KB standing in the CLI's place

copilot resolves inside the VS Code Copilot Chat extension's global storage, not to anything in a package manager. Three files:

FileBytesWhat it does
copilot120sh one-liner, execs the .bat
copilot.bat154runs powershell -ExecutionPolicy Bypass
copilot.ps18,830Microsoft bootstrapper that locates the real CLI

Running it produces the whole story in one line:

Terminal
copilot --version
# → Cannot find GitHub Copilot CLI
# →   (https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli)

The bootstrapper's comments say what it is for: locate the real binary, avoid recursion if this file shadows it, offer to install if missing, enforce a minimum version, exec it. The recursion guard is the interesting part — it drops its own directory out of PATH and searches again, precisely because it expects to be the thing PATH finds first.

copilot.ps1, excerpt
$RequiredVersion = "0.0.394"
$PackageName = "@github/copilot"

On this machine the second search returns nothing: the npm global root holds @openai and @shopify and no @github. So the bootstrapper does exactly what it was written to do — asks whether to install @github/copilot, with winget install GitHub.Copilot as the fallback.

22 launches, 194 lines, zero sessions

And yet ~/.copilot/ exists, dated firstLaunchAt: 2026-08-06. Its logs/ directory holds 22 process logs spanning 2026-09-11 to 2026-09-18. All 22 are the same five or nine lines:

~/.copilot/logs/process-*.log
[INFO] Shell completions: no supported shell detected, skipping
[INFO] Starting CLI in server mode (stdio)
[INFO] Starting CLI in stdio mode (Rust JSON-RPC engine)
[INFO] CLI server ready (stdio mode, Rust JSON-RPC engine)
[INFO] Server started, waiting for requests
[INFO] Starting graceful shutdown of CLI server
[INFO] Preparing runtime for graceful shutdown
[INFO] Destroying 0 active sessions
[INFO] CLI server prepared for shutdown; transport remains open for RPC response

194 lines across 22 files, and exactly nine distinct line shapes between them. Not one prompt, not one version string, not one model name, not one warning, not one error.

Two things fall out of that. First, every launch is server mode (stdio) — the CLI is being started as a JSON-RPC engine by something else, never run as a command by a person, which is consistent with the shim in front of it being unusable. Second, Destroying 0 active sessions appears on all 21 clean shutdowns. Twenty-one graceful exits, zero sessions between them: the engine is being started and stopped without ever being asked to do anything.

That is what makes it a census rather than a story. We know how often it ran and we know it did nothing; the logs are not instrumented to say more.

The database that was never checkpointed

The session store is the same shape of evidence.

Terminal
ls -l ~/.copilot/session-store.db*
# → session-store.db       4,096 B
# → session-store.db-wal   1,104,192 B   last written 2026-08-21

4,096 bytes is one empty SQLite page. The 1.1 MB write-ahead log has never been checkpointed into it, and nothing has been appended to it since 21 August — three weeks before the oldest log file. So whatever sessions this install ever had, they happened in August, they still live entirely in a WAL, and the 22 launches since have added nothing.

Claude Code's equivalent state is a directory of JSONL transcripts that this site has measured across 17 versions and 159 of them — every assistant turn stamping its own version and usage. Both are local files. Only one of them answers a question afterwards.

The agent host names its rivals

VS Code keeps an agent-host-config.json next to the Copilot Chat storage: 9,071 bytes, 51 top-level keys, with a 53 KB SQLite file beside it. Most are what you would expect — sandbox rules, auto-approve patterns, telemetry, a default shell. Five are not:

KeyWhat it implies
codexAgentEnabledOpenAI's agent is a host-level toggle
claudeMultiRootEnabledso is Anthropic's, per workspace root
codexMultiRootEnabledand OpenAI's
claudeAdvisora named Claude role in GitHub's own config
opus48Prompta key named after an Anthropic model

copilotMultiRootEnabled sits in the same list as claudeMultiRootEnabled and codexMultiRootEnabled — three peers, one of which belongs to the vendor. The editor surface this comparison is usually argued over has stopped being a single-vendor product, and the config file is where that shows first.

That reframes "which CLI" as a smaller question than it looks. If the host runs all three, the thing you are choosing between is less the agent and more the terminal you reach it from.

Copilot's own subagent runs on Claude

Three agent definitions ship on disk, written by the extension and rewritten on update:

AgentBytesToolsUser-invocable
Ask.agent.md2,39410yes
Explore.agent.md2,0648no
Plan.agent.md5,25011yes

They are markdown with YAML frontmatter — name, description, tools, agents — which is the same shape as a Claude Code subagent under .claude/agents/. That is why #50 scored the subagent row as a rename rather than a rewrite, and holding the files confirms it.

Explore.agent.md carries one key the others do not:

Explore.agent.md, frontmatter
model: ['Claude Haiku 4.5 (copilot)', 'Gemini 3 Flash (Preview) (copilot)', 'Auto (copilot)']
user-invocable: false

GitHub's built-in exploration subagent lists an Anthropic model first, and because it is not user-invocable, that first entry is what runs when the main agent delegates to it. Whether it is a fixed default or a preference order we cannot tell from the file, and we do not claim to know — but the ordering is the shipped one, and we read it off disk rather than from a blog post.

Two ways to ship a CLI inside an editor

Set this beside what the Cline teardown measured on 2026-09-17, and the contrast is the cleanest structural result in this comparison.

Claude CodeCopilot CLI
What the extension shipsclaude.exe, 233,691,808 Bcopilot, 120 B
Relationship to the CLIbyte-identical, same SHA-256a search for one, often unsuccessful
How the editor runs itthe same binaryJSON-RPC over stdio
Reachable from a shellyesnot on this machine

The Claude Code figure is the 2.1.274 extension measured a day earlier, which is why it differs from the 235,169,440-byte 2.1.276 binary on this PATH today — the binary grows with each release, and the identity that matters is that the bundled copy and the PATH copy match within a version. On 2.1.276 they still do, a863895d829a246d… twice.

Claude Code's VS Code extension bundles the CLI: one artifact, two front doors, verified by hashing both. Copilot's extension bundles a bootstrapper that goes looking for an artifact somebody else was supposed to install.

Neither is obviously wrong. Bundling costs 233 MB per extension version; shimming costs nothing until the search fails. But the failure modes are not symmetric — a bundled binary cannot be missing, and a 120-byte shim can always be pointing at nothing.

Copilot cli or Claude Code: which to run

  • You want to type the agent's name and have it start. Claude Code. That is the whole finding, and on this install it is not close.
  • You already pay for Copilot and work in VS Code. Copilot, and mostly ignore the CLI question — the engine runs regardless, and #50 found the configuration cost of adopting it near zero.
  • You are searching for gh copilot terminal. Check which product you mean. The gh extension that explains shell commands and the agent that edits files are different things with the same brand.
  • You want a state you can audit later. Claude Code. Its transcripts answer questions about past sessions; this Copilot install's logs record only that a server started and stopped.
  • You want migration tooling from the other side. Neither, from Claude Code: claude import copilot exits 1 with a usage line naming codex, gemini and cursor.

What we could not measure

We never ran Copilot CLI. We could not — the shim will not start it. Every Copilot figure here is a file on disk, a log line or a JSON key, and no claim is made about how the agent behaves in use.

The shim was not executed by the check script either. Its failure path is an interactive prompt offering to install @github/copilot, and a check that can hang waiting for a keystroke is worse than one quoting a recorded line. The line is quoted; the file sizes are re-read live on every run.

We do not know where the engine is launched from. The logs carry no path and no version. Something starts it 22 times; we can see that it is a JSON-RPC server and not where its binary lives.

No output-quality, latency or cost comparison appears here, and none is possible from this install. npm run check:copilot-engine asserts that through a guard so no later edit can quietly add one.

opus48Prompt is a key name, not a behaviour. We read it from a config file. We did not observe what it does.

Common mistakes

  • Treating which copilot as proof of an install. It resolved to 120 bytes that report they cannot find the CLI.
  • Confusing the gh copilot extension with the agent. Different products, overlapping names, different answers to every question in this article.
  • Assuming a quiet log means nothing ran. Twenty-two launches produced 194 lines and no content. Absence of prompts in the log is not absence of use — it is absence of logging.
  • Reading the WAL size as current activity. 1.1 MB of write-ahead log last touched in August, in front of an empty 4 KB database.
  • Expecting a bundled CLI because the other one bundles. Claude Code ships the binary; Copilot ships a search for it.

Conclusion

For claude code vs copilot cli, the honest answer on this machine is that only one of them is a CLI you can use, and it is Claude Code. If you are on Copilot and want the terminal agent, install @github/copilot yourself and do not assume the extension's shim did it for you — check copilot --version before you plan a workflow around it. Then read what a Claude Code repository actually carries into Copilot, which is the cheapest migration this site has measured and is unaffected by any of this.

Frequently asked questions

Why does the copilot command say it cannot find GitHub Copilot CLI?
Because the copilot on your PATH may not be the CLI. On this machine it is a 120-byte shell script written by the VS Code Copilot Chat extension, which calls a 154-byte batch file, which calls an 8,830-byte PowerShell bootstrapper whose job is to locate the real binary. When no npm-global @github/copilot is installed, that search returns nothing and the bootstrapper offers to install it.
Is Copilot CLI the same thing as gh copilot?
No, and the distinction matters when you search. gh copilot was a gh extension for suggesting and explaining shell commands. Copilot CLI is a standalone terminal agent that edits files and runs commands. The gh copilot terminal helper and the agent are different products with overlapping names, which is the most common mix-up in comparisons of this pair.
What is the difference between Claude Code and Copilot CLI?
Structurally, on this machine: Claude Code ships one 233 MB binary that the terminal and the VS Code extension both run, byte-identical. Copilot CLI runs as a headless JSON-RPC server launched by the editor and is not reachable from the shell at all. One is a command an editor also uses; the other is an engine with an editor in front of it.
Can Claude Code import my Copilot CLI configuration?
No. claude import copilot exits 1 and prints a usage line naming codex, gemini and cursor as the only supported sources. What does transfer is measured separately: Copilot CLI reads a project-scoped .mcp.json under the same mcpServers key and lists .claude/skills among its own skill directories, so much of a Claude Code repository is already legible to it.
Which model does GitHub Copilot's Explore agent use?
Its shipped definition lists three, in order: Claude Haiku 4.5, Gemini 3 Flash Preview, and Auto. The agent is marked not user-invocable, so the first entry is what actually runs when the main agent delegates. GitHub's built-in exploration subagent defaults to an Anthropic model.

Muhammad Kashif

Founder and editor of Devventa, covering AI coding assistants, Next.js and the modern AI development stack.