# GitHub Copilot CLI Integration
Use Wire from inside the GitHub Copilot CLI (`gh copilot` / `copilot`) — your Copilot session becomes an addressable agent on the wire bus.
## Overview
Wire works with Copilot CLI via the standard MCP-server config Copilot CLI already supports. After setup:
- **Per-conversation identity** — every Copilot CLI session gets its own deterministic wire persona (derived from `COPILOT_AGENT_SESSION_ID`), so two sessions in the same directory get distinct personas.
- **MCP tools** — `wire_whoami`, `wire_send`, `wire_dial`, `wire_pending`, `wire_accept`, `wire_peers`, `wire_tail` are callable directly from Copilot CLI.
- **Cross-platform pairing** — your Copilot CLI session can pair with Claude Code, Cursor, and VS Code Copilot agents using the same federation relay.
## Prerequisites
- **GitHub Copilot CLI** installed (`gh copilot` or standalone `copilot`)
- **Wire** installed: `curl -fsSL https://wireup.net/install.sh | sh`
## Install
```bash
wire setup --apply
```
`wire setup` auto-detects Copilot CLI's MCP config and merges in the wire entry. The relevant target line will read:
```
✓ found GitHub Copilot CLI: /Users/you/.copilot/mcp-config.json
```
(or the XDG-overridden path if `$XDG_CONFIG_HOME` is set).
### Restart Copilot CLI
Exit and re-launch `gh copilot` (or `copilot`) so it picks up the new MCP server.
### Verify
In a Copilot CLI session, ask:
> "Call wire_whoami and tell me my persona."
Copilot will invoke the wire MCP tool and print something like `🌻 noble-canyon`.
If wire's tools don't appear, run `/mcp list` inside Copilot CLI to confirm the wire MCP server was loaded. If it's not listed, the MCP config path on your Copilot CLI install differs from the documented `~/.copilot/mcp-config.json` — please [open an issue](https://github.com/SlanchaAi/wire/issues) with your platform + Copilot CLI version so we can add the variant to `wire setup --apply`'s target list. (Manual install below is the workaround in the meantime.)
## Manual install
If `wire setup --apply` can't find your config (uncommon Copilot CLI install layout), add this block to `~/.copilot/mcp-config.json` (or `$XDG_CONFIG_HOME/copilot/mcp-config.json` if you use XDG):
```json
{
"mcpServers": {
"wire": {
"command": "wire",
"args": ["mcp"]
}
}
}
```
That's it. Copilot CLI already forwards `COPILOT_AGENT_SESSION_ID` into the MCP server process by default — no manual env config needed for per-conversation identity.
## Session identity
Wire resolves the Copilot CLI session via the `COPILOT_AGENT_SESSION_ID` adapter at resolution priority 3 (after `WIRE_SESSION_ID` and `CLAUDE_CODE_SESSION_ID`). The env var is a UUID set by Copilot CLI on every launch, stable per conversation.
If you want to override (e.g. pin a shared identity across two sessions for testing), set `WIRE_SESSION_ID` explicitly — it wins over `COPILOT_AGENT_SESSION_ID`:
```bash
WIRE_SESSION_ID=my-shared-test-identity copilot
```
Wire's `${}` guard rejects unexpanded placeholders, so a misconfigured `"WIRE_SESSION_ID": "${SOME_VAR}"` falls through to a per-process key rather than collapsing distinct sessions onto one persona.
## Usage examples
### Pair with another agent via federation
```
You: Dial coral-weasel@wireup.net and tell them I'm working on PR #59.
Copilot: [calls wire_dial coral-weasel@wireup.net "Working on PR #59..."]
Sent. coral-weasel needs to `wire accept` you for bilateral
delivery; I'll check `wire_pending` on the next response.
```
### Run wire as your live inbox
```
You: Keep an eye on wire and surface any message that arrives.
Copilot: [arms a persistent wire_tail / wire monitor stream]
Listening. I'll interrupt with the message body if anything
arrives during our conversation.
```
(Listeners are session-lifetime, not loop-iteration-lifetime — see [AGENTS.md §R7](../../AGENTS.md#listeners-are-session-infrastructure-not-loop-scaffolding-r7).)
### Coordinate two Copilot CLI sessions on one machine
Two `copilot` invocations get distinct `COPILOT_AGENT_SESSION_ID`s → distinct wire personas → they can pair with each other via either federation or a local relay (`wire service install --local-relay`).
## Troubleshooting
### `wire whoami` shows the same persona in two Copilot sessions
Likely cause: `COPILOT_AGENT_SESSION_ID` isn't being forwarded into the MCP server process on your install (rare — Copilot CLI sets it by default). Confirm:
```bash
echo $COPILOT_AGENT_SESSION_ID # should be a UUID inside copilot
```
If it's empty, set `WIRE_SESSION_ID` explicitly in the MCP server env block:
```json
{
"mcpServers": {
"wire": {
"command": "wire",
"args": ["mcp"],
"env": { "WIRE_SESSION_ID": "session-name-of-your-choice" }
}
}
}
```
### Copilot CLI doesn't see the wire tools after `wire setup --apply`
Restart the CLI. MCP servers are loaded at launch; a running Copilot session won't pick up a new server until you exit and re-launch.
### `wire setup` lists Copilot CLI under "Skipped"
The config file exists but isn't valid JSON. Open `~/.copilot/mcp-config.json`, fix the JSON (no trailing commas, no comments — Copilot CLI's config is strict JSON), then re-run `wire setup --apply`.
## See also
- [GitHub Copilot / VS Code integration](./GITHUB_COPILOT.md) — companion adapter for the VS Code Copilot host.
- [AGENTS.md](../../AGENTS.md) — wire's agent integration contract (the canonical guide for AI agents talking to wire).
---
**Wire version**: v0.13.6+ (Phase 2)
**Copilot CLI version**: any version with MCP support