Parallelize Your Development with GitHub Copilot

Pamela Fox

Principal Cloud Advocate
Microsoft / GitHub

About me

Pamela Fox

Principal Cloud Advocate at Microsoft / GitHub

Formerly: UC Berkeley, Coursera,
Khan Academy, Google

Pamela Fox smiling with an Olaf statue

Before AI coding

One active feature was our limit

ACTIVE
Design ABuild ATest A
FEATURE B
Not started
FEATURE C
Not started

We worked sequentially because parallel work was hard: branch collisions, shared environments, and the effort of keeping multiple feature-sized mental models active at once.

After AI coding

We are engineering managers for agents

FEATURE A
Agent workingReview
FEATURE B
Agent workingBlocked
FEATURE C
ScopeAgent working
SpecifyStartObserveUnblockReview

🔗 Related reading: Five software engineering roles for working with AI

Today’s agenda

Three dimensions of parallelization

01

Environment

Active workspace, worktree, another repository, or cloud?

02

Timing

Now, lightly supervised, on an event, or while you are away?

03

Ownership

Developer, one agent, independent agents, or subagents?

Environment

Where should the work happen?

Different Copilot surfaces unlock different forms of parallel work.

Choose a surface

Match the surface to the parallel work

Less parallelMore parallel
Local session

Direct control

VS CodeCopilot CLI

One active focus on one machine.

Parallel session UI

See and steer many

VS Code Agents windowCopilot app

View and manage concurrent agent sessions.

Cloud execution

Scale the work

Copilot cloud agents

Isolated cloud compute for each task.

VS Code keeps you in the inner loop

VS Code with source code, GitHub Copilot Chat, and a terminal visible alongside another application
Edit alongside CopilotThe easiest surface when you want to inspect, change, and run the code yourself.
Parallelize around itRun other agent sessions in additional VS Code windows or other Copilot apps.

Copilot CLI works where your terminal does

GitHub Copilot CLI working on code and tests in a terminal session
Stay in the terminalInspect, edit, run, and validate without switching tools.
Parallelize by sessionGive separate tabs, windows, or worktrees independent tasks.

VS Code Agents window keeps code close

VS Code Agents window showing agent sessions across workspaces, an active conversation, and its code changes
Manage parallel sessionsTrack status and changes across workspaces from one window.
Drop into the codeOpen files and diffs beside chat, with the session’s terminal, tasks, and browser close by.

Copilot App puts parallel sessions in one UI

GitHub Copilot App showing multiple projects, an active agent session, its plan, and pull request changes
See every sessionTrack concurrent work across projects from one interface.
Steer without hoveringReview plans, progress, artifacts, and pull requests when attention is needed.

Cloud agents add remote execution capacity

GitHub dashboard showing multiple cloud agent sessions with completed, queued, and idle states
Add capacityEach task gets remote execution instead of competing for local processes.
Work asynchronouslyStart well-scoped tasks, monitor their state, and review completed results.

Isolation strategies

Local agents can collide on shared resources

FEATURE A
FEATURE B
FEATURE C

One shared machine

PORT 3000OCCUPIED
DATABASELOCKED
.ENVOVERWRITTEN
BRANCHCHANGED

Parallel tasks need separate source, processes, state, and credentials.

Agent isolation

Git worktrees give each agent its own workspace

A worktree is a branch checked out into a different folder. Git creates the folder and checks out tracked files there.

MAIN WORKTREE

Main

~/projects/my-project/
BRANCH=main
LINKED WORKTREE

Agent A

~/projects/my-project.worktrees/feature-a/
BRANCH=feature-a
LINKED WORKTREE

Agent B

~/projects/my-project.worktrees/feature-b/
BRANCH=feature-b

🔗 Further reading: A gentle introduction to Git worktrees

Agent isolation

Start GitHub Copilot agents in a new worktree

VS Code Agents window

Check New Worktree before sending the task.

VS Code Agents window prompt showing the New Worktree checkbox

Copilot App

Choose New worktree beside the repository and branch.

Copilot App prompt showing the New worktree control

🔗 Further reading: What are Git worktrees and why should I use them?

Agent isolation

Make your project worktree-ready

MAIN WORKTREEmy-project/
GIT CHECKOUT
LINKED WORKTREEfeature-a/
|-- src/
----->
|-- src/
|-- package.json
----->
|-- package.json
|-- README.md
----->
|-- README.md
|-- .env
----X
`-- node_modules/
----X

Tracked files are checked out.
Ignored and untracked local state must be restored explicitly.

Agent isolation

Give agents a worktree setup prompt

One example: link a shared .env from the main worktree.

COPILOT APP PROMPT

When a session starts in a Git worktree, find .env in the main worktree. If it exists and this worktree has no .env, symlink it here. Never overwrite an existing .env file.

SHELL VERSION
TOP=$(git rev-parse --show-toplevel)
GD=$(git rev-parse --git-dir)
CD=$(git rev-parse --git-common-dir)

if [[ "$GD" == *"/worktrees/"* ]]; then
	SHARED="$(cd "$CD/.." && pwd)/.env"
	if [[ -f "$SHARED" && ! -e "$TOP/.env" ]]; then
		ln -s "$SHARED" "$TOP/.env"
  fi
fi

🔗 View my full worktree setup prompt

Agent isolation

Each agent needs its own port

PREREQUISITE

Make the app read its port from the environment

PORT=${PORT:-50505}

Then use either approach, or combine both:

AUTOMATE

Custom startup script

  • Check whether the selected port is available.
  • Export PORT.
  • Start the application.

Enforced by tooling

INSTRUCT

AGENTS.md

  • Choose a task-specific PORT.
  • Check whether it is occupied.
  • Choose another when needed.

Enforced by guidance

🔗 Example: configurable local ports in azure-search-openai-demo

Agent isolation

Local agents can still collide in staging

FEATURE A
FEATURE B

One staging environment

DEPLOYMENTOVERWRITTEN
DATABASESHARED
TEST RESULTSINVALIDATED

Agent isolation

Give each agent its own staging environment

1

Derive a stable name

staging-
${BRANCH_SLUG}

→
2

Isolate mutable state

Deployment, database, and configuration

→
3

Deploy and validate

Test only this branch's environment

→
4 / OPTIONAL

Clean up

Remove resources when the task ends

Agent isolation

Example: Give each agent separate Azure settings

Environment variables point Azure’s command-line tools, az and azd, to separate configuration and authentication.

HELPER SCRIPT: az-azd.py
child_env = os.environ.copy()
# ...remove inherited AZURE_* and AZD_* settings...
child_env["AZURE_CONFIG_DIR"] = str(paths.azure_config_dir)
child_env["AZD_CONFIG_DIR"] = str(paths.azd_config_dir)
child_env["AZURE_ENV_NAME"] = environment

Clears inherited Azure settings, then gives the agent separate CLI configuration and a deployment environment.

WHAT AGENT RUNS
python3 ./az-azd.py \
  --profile contoso-feature-a \
  --tenant contoso.onmicrosoft.com \
  --environment feature-a \
  azd deploy

The agent invokes az-azd.py before running the standard deployment command, azd deploy.

Agent isolation

Package the technique as a reusable agent skill

A skill lets Copilot discover and reuse the same isolation setup in future tasks.

SKILL PACKAGE

.github/skills/az-azd/

SKILL.mdDiscovery metadata and operating instructions
az-azd.pyAssign separate Azure settings to each agent
SKILL.md
---
name: az-azd
description: Use for Azure CLI (az) or Azure Developer CLI
  (azd) commands that need isolated configuration and
  authentication across projects and agent sessions.
---

# Isolated Azure CLI sessions

Run commands through the adjacent `az-azd.py` wrapper.

🔗 Example: az-azd agent skill

Timing

When should the work happen?

Parallel work can be active, lightly supervised, event-driven, or scheduled.

Agent monitoring

Let agents tell you when they need attention

Start the agentGive it bounded work
→
Work elsewhereAnother window or app on the same machine
→
GITHUB COPILOT now
Feature A is ready for review

Tests passed · 4 files changed

You should not need to watch an agent work.

Agent monitoring

Customize agent notifications with hooks

Hooks run commands across VS Code, Copilot CLI, and Copilot coding agent sessions.

HOOK CONFIG
{
  "hooks": {
    "Stop": [{
      "type": "command",
      "command": "/bin/zsh ~/.copilot/hooks/agent-complete-sound.sh",
      "timeout": 30
    }]
  }
}
COMMAND
/usr/bin/afplay "$HOME/Documents/sound.m4a"

# Check if the user has been idle for 60 seconds.
idle_ns=$(
	/usr/sbin/ioreg -c IOHIDSystem |
	/usr/bin/awk '/HIDIdleTime/ { print $NF; exit }'
)
(( idle_ns < 60000000000 )) && exit 0

# ...find title in the session transcript...
/usr/bin/say "${title:-Agent finished}"

🔗 Full agent completion hook   🔗 VS Code hooks documentation   🔗 Automating with hooks

Agent monitoring

Use the agent inbox to route your attention

GitHub Copilot App project list showing agent sessions and their current states
Ready for reviewOpen the result when judgment is needed.
Needs inputAnswer, then let the work continue.
Merged PRThe session's pull request was merged.
Closed PRThe session's pull request is closed.

Scan the states.
Open only what needs you.

Background Agents

Autonomous agents can start their own work

On a schedule

MON9 AMTUES9 AMWED9 AM

Example uses:

  • Daily issue triage
  • Morning review summary
  • Weekly repository health check

Predictable, recurring work

On a trigger

EVENTCI FAILS
→
AGENT STARTS

Example uses:

  • CI failure analysis
  • Issue label applied
  • Documentation freshness check

Reactive repository work

Background Agents

Automations in GitHub Copilot App

New automation
New automation dialog with manual, scheduled, and repository event triggers
Automations
GitHub Copilot App Automations showing agent tasks, schedules, and latest run status

Background Agents

Agentic Workflows for GitHub Actions

issue-triage.mdOne workflow file

YAML for guardrailsFrontmatter

---
description: Triages new and reopened issues
on:
  issues:
    types: [opened, reopened]
permissions:
	contents: read
	issues: read
safe-outputs:
  add-labels:
    allowed: [bug, feature, question,
      needs-info, duplicate]
    max: 4
  add-comment:
    max: 1
timeout-minutes: 10
---

Markdown for instructionsBody

# Issue Triage Assistant

Analyze issue #${{ github.event.issue.number }}.
Base conclusions on repository context.
Do not invent missing details.

## Gather context
- Read the issue and comments.
- Inspect labels and issue types.
- Search for duplicates.

## Report
- Apply only supported labels.
- Post one concise triage comment.

🔗 Example: issue-triage.md   🔗 Agentic Workflows documentation

Ownership

Who should do the work?

The amount of supervision a task needs determines how it should be delegated.

Supervision spectrum

Match autonomy to uncertainty

Developer-led

Ambiguous requirements, architecture, UX, high risk.

Light supervision

Clear feature, occasional decisions, inspectable preview.

Hands-off

Bounded task with reliable automated validation.

Automated

Repeatable work with guarded, reviewable outputs.

As ambiguity and blast radius rise, human attention should rise with them.

Human involvement

Where is the human in the loop?

Plan

Edit the planSet direction and constraints

Build

Edit codeImplement alongside the agent

Review

Review codeInspect and request changes

Deploy

ApproveHandle exceptions

The human involvement needed at each stage shapes your approach.

Subagents

An agent can delegate work to subagents

1 · PARENT AGENTDelegateSplit one goal into bounded tasks.
→
2 · WORK IN PARALLEL
SUBAGENT 1
SUBAGENT 2
SUBAGENT 3
→
3 · PARENT AGENTIntegrateCheck results and combine one outcome.

Subagents return focused results. The parent still owns the final answer.

Subagents

Use /review to launch reviewer subagents

1 · Ask for independent perspectives
Copilot review prompt requesting reviews from three different models
2 · Parallel reviews, synthesized result
Copilot showing three completed code review subagents followed by a consensus finding

Subagents

Use /fleet to run independent work

1 · Give each subagent a clear boundary
Copilot fleet prompt assigning independent audits of the README, manual test script, and environment sample
2 · Three subagents run in parallel
Copilot showing three file-scoped audit subagents running in parallel
3 · One validated summary returns
Copilot fleet validation results across all three audits

Subagents

Prompt Copilot to use subagents for any workflow

For example, this prompt fans out research, then verifies independently.

Add support for a new model provider to this sample repo.

Before editing, fan out research to three read-only
subagents in parallel:
- Integration mapper: trace configuration and authentication.
- Compatibility analyst: find provider-specific risks.
- Test strategist: define the required validation matrix.

Synthesize their findings, then implement the smallest change.

Then ask a QA subagent with fresh context to verify the
existing providers still work, the new path is covered, and
the docs and manual test matrix agree.

Fix confirmed failures and report the validation evidence.

Research · 3 subagents

Subagent 1Config map
Subagent 2Provider risks
Subagent 3Test matrix
ImplementParent agent
QA1 subagent · fresh context

🔗 Agents and Subagents guide

Subagents

Delegated work can cross sessions and repositories

PARENT SESSION

web-app

Owns the overall goal and integrates the results.

→
SAME SESSIONweb-appInspect the frontend
NEW SESSIONauth-sdkUpdate the package
NEW SESSIONdocsUpdate the guide

The parent coordinates the goal; delegated subagents can own separate context, execution, and repositories.

Wrapping up

All together now

Ready, set, parallel!

BOUNDED WORKClear scope and finish line
ISOLATIONSeparate workspace and state
VISIBILITYObservable progress and results

Bound the work, isolate execution, and make progress visible.

Thank you

Questions?