flowchart TD
DEV([👤 Developer]) -->|"types in
Copilot Chat
or /prompt"| VSCODE
subgraph VSCODE ["💻 VS CODE — Local, Interactive, Synchronous"]
direction TB
AGM["Agent Mode
single session
sequential only
user present"]
AGM -->|"subagent
invocation"| SA1["Subagent A
(builder)
own context
sequential"]
SA1 -.->|"result
report back"| AGM
AGM -->|"subagent
invocation"| SA2["Subagent B
(validator)
own context
sequential"]
SA2 -.->|"result
report back"| AGM
SA1 -.-|"❌ HARD SEAM
no peer messaging
no shared state
sequential only"| SA2
end
subgraph BKGD ["🌿 BACKGROUND AGENTS — Local, Async, Worktree-isolated"]
direction TB
BG1["Background Agent 1
auto worktree
own branch
no user present"]
BG2["Background Agent 2
auto worktree
own branch
no user present"]
BG1 -.-|"❌ HARD SEAM
no agent-to-agent
communication
git merge only"| BG2
BG1 -.-|"⚠️ SOFT SEAM
no context bridge
back to VS Code
session"| AGM
end
subgraph CLOUD ["☁️ CODING AGENT — Cloud, Async, GitHub Actions"]
direction TB
GHA["GitHub Actions
runner
isolated env
no user present
no terminal"]
CCA["Copilot Coding Agent
reads repo + issue
writes code
runs tests
self-reviews"]
GHA --> CCA
CCA -->|"self-review
1 pass before
PR open"| CCA
end
subgraph PR ["📋 PULL REQUEST — Handoff artifact"]
PR_NODE["Pull Request
code diff
CI status
review comments
the unit of output"]
end
VSCODE -->|"developer
commits + pushes"| PR_NODE
CLOUD -->|"Copilot opens
PR automatically"| PR_NODE
PR_NODE -.-|"❌ HARD SEAM
CI fail has no
native path back
to VS Code session"| VSCODE
PR_NODE -.-|"⚠️ SOFT SEAM
@copilot comment
triggers new
Cloud session
(no context from
previous session)"| CLOUD
DEV -->|"issue/PR event
triggers async"| CLOUD
DEV -->|"⚠️ human must
approve CI run
(GitHub policy)"| HUMAN_CI["⚠ Human CI Gate
required by GitHub
for Copilot PRs"]
HUMAN_CI -->|"approved"| CI["CI Pipeline"]
CI -->|"✅ pass"| MERGE["Merge"]
CI -->|"❌ fail"| PR_NODE
OBS(["🔭 Observability Plane
OTel insertion point"])
AGM -->|"session logs
no OTel native"| OBS
CCA -->|"Actions logs
no OTel native"| OBS
CI -->|"CI results"| OBS
style VSCODE fill:#edf2fb,stroke:#2a5fa5,color:#1a1a1a
style BKGD fill:#e8eef8,stroke:#2a5fa5,color:#1a1a1a
style CLOUD fill:#edf2fb,stroke:#2a5fa5,color:#1a1a1a
style PR fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
style AGM fill:#edf2fb,stroke:#2a5fa5,color:#1a1a1a
style SA1 fill:#edf2fb,stroke:#2a5fa5,color:#7a7468
style SA2 fill:#edf2fb,stroke:#2a5fa5,color:#7a7468
style BG1 fill:#e8eef8,stroke:#2a5fa5,color:#7a7468
style BG2 fill:#e8eef8,stroke:#2a5fa5,color:#7a7468
style GHA fill:#edf2fb,stroke:#2a5fa5,color:#1a1a1a
style CCA fill:#edf2fb,stroke:#2a5fa5,color:#1a1a1a
style PR_NODE fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
style HUMAN_CI fill:#fdf6e3,stroke:#b08a2e,color:#1a1a1a
style CI fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
style MERGE fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
style OBS fill:#f3f0fa,stroke:#6450b4,color:#1a1a1a
style DEV fill:#f3f0fa,stroke:#6450b4,color:#1a1a1a
Sequential subagents — no peer layer
Unlike Claude Code Agent Teams, Copilot subagents in VS Code agent mode cannot communicate with each other. All coordination routes through the orchestrating session. Builder finishes → orchestrator reads result → orchestrator prompts validator. There is no direct builder ↔ validator channel.
Cloud agent context isolation
Each Copilot coding agent session in GitHub Actions starts fresh. When a CI failure triggers a new agent session via @copilot comment, that session has no memory of what the previous session tried, what it thought, or why it made its decisions. It reconstructs from the PR diff and repo state only.
The mandatory human CI gate
GitHub requires a human to approve CI workflow runs on Copilot PRs. This is a deliberate security policy — not a bug — to prevent autonomous agents from running arbitrary code in CI environments. It means fully unattended agent-to-CI-to-merge flows are architecturally impossible in Copilot today.
Observability Plane insertion
Copilot emits session logs (GitHub Actions) but no OTel. The Observability Plane must ingest these logs and correlate them with structured events to reconstruct a trace. Unlike Claude Code, there is no native OTLP endpoint — the insertion requires a webhook or log-scraping adapter at the CI boundary.