---
type: "post"
id: "lessons-from-building-copilot-cowork-21-minute-read-01943f"
slug: "lessons-from-building-copilot-cowork-21-minute-read-01943f"
title: "Lessons from building Copilot Cowork"
description: "Microsoft says nine engineers built Copilot Cowork from an empty repository to worldwide general availability in about four and a half months, with agents writing most of the code."
retrieval_nugget: "Microsoft says nine engineers built Copilot Cowork from an empty repository to worldwide general availability in about four and a half months, with agents writing most of the code. Its account details a spec-first workflow, parallel narrow agents, automated review and a trusted execution boundary—practical lessons for teams scaling agent-assisted software development."
published_at: "2026-11-03"
updated_at: "2026-11-06"
record_date: "2026-11-03"
date_kind: "published_at"
topics: ["agent-security"]
entities: ["Microsoft","Copilot Cowork","Work IQ","Bas Brekelmans"]
related_patterns: ["agent-security-moves-to-runtime-boundaries","verification-bandwidth-is-the-scarce-resource"]
novelty_label: "new_fact"
what_changed: "Adds Microsoft’s engineering account of building Copilot Cowork, including its Python-to-Rust live migration, four-and-a-half-month path to worldwide GA, and 1,211 pull requests merged by nine engineers in a day."
prior_refs: ["https://newruntime.com/posts/daily-ai-brief-sept-26-microsoft-biggest-copilot-a0fd1e/"]
source_url: "https://commandline.microsoft.com/how-we-built-copilot-cowork-python-to-rust-migration"
source_urls: ["https://commandline.microsoft.com/how-we-built-copilot-cowork-python-to-rust-migration"]
schema_version: "newruntime-agent-readable-v0.2"
stable_id: "post:lessons-from-building-copilot-cowork-21-minute-read-01943f"
status: "published"
visuals: []
editor: {"role":"editor","name":"Andrey Reshetnikov","profile":"https://newruntime.com/owner-profile.md","profile_json":"https://newruntime.com/owner-profile.json","same_as":["https://www.linkedin.com/in/reshetnikov1/","https://t.me/lapetuse"]}
routes: {"html":"https://newruntime.com/posts/lessons-from-building-copilot-cowork-21-minute-read-01943f/","markdown":"https://newruntime.com/posts/lessons-from-building-copilot-cowork-21-minute-read-01943f.md","json":"https://newruntime.com/posts/lessons-from-building-copilot-cowork-21-minute-read-01943f.json"}
markdown_url: "https://newruntime.com/posts/lessons-from-building-copilot-cowork-21-minute-read-01943f.md"
---

# Lessons from building Copilot Cowork

## Retrieval answer

Microsoft says nine engineers built Copilot Cowork from an empty repository to worldwide general availability in about four and a half months, with agents writing most of the code. Its account details a spec-first workflow, parallel narrow agents, automated review and a trusted execution boundary—practical lessons for teams scaling agent-assisted software development.

## Summary
Microsoft says nine engineers built Copilot Cowork from an empty repository to worldwide general availability in about four and a half months, with agents writing most of the code. Its account details a spec-first workflow, parallel narrow agents, automated review and a trusted execution boundary—practical lessons for teams scaling agent-assisted software development.

## What happened
In a November 2, 2026 post on Microsoft’s Command Line publication, partner software engineer Bas Brekelmans recounts how a small team began building Copilot Cowork on January 13. Microsoft describes Cowork as an agentic execution layer for multi-step workflows on a user’s behalf, integrated with Work IQ, Microsoft 365 security and governance, cloud execution and a multi-model architecture. The first enterprise customers received access through the Frontier program on March 30; worldwide general availability followed on June 16, with several models and 16 plugins.

The team’s first principle was to write a Markdown specification before code. A spec should state what a change does, how the team will know it works and what it must not break. Microsoft says vague requests often produced plausible code that did the wrong thing, creating rework. Specs could begin as spoken feature descriptions drafted by an agent, but a human edited them. The team says this discipline helped more than any single model upgrade.

For parallel work, each agent used its own repository copy and handled one task against one spec. The team grew from one agent to five and then dozens. Merged pull requests rose from 257 in January to 2,754 in May; the busiest week before general availability reached 783. Microsoft says model choice was a quality-and-cost trade-off: some tasks justified stronger reasoning, while others suited faster, less expensive models.

The post emphasizes that parallelism depended on a separation between the model and authority to act. The model ran in a container without user credentials. A trusted host outside it handled identity, policy, approvals and tools; every Microsoft 365 operation went through that host. The model could plan and request actions, but the host decided what actually happened and applied policy and audit at execution. Microsoft says this boundary also made it possible to replace the host without changing the agent.

The article reports that nine engineers merged 1,211 pull requests into the main branch on October 21. The team used automated checks and agent reviewers on every change, while engineers concentrated review on high-risk changes, production impact and disagreements among checks or reviewers. Microsoft also describes the project’s live runtime move from Python to Rust, with the cutover marked as running from September 23 to October 10. The account presents six practices, including specifying work, bounding agents, testing checks, preserving team learning, shaping code for parallel work and limiting automated loops.

## What the archive adds
The archive has related but distinct coverage: [Microsoft’s Copilot move toward a governed execution surface](https://newruntime.com/posts/daily-ai-brief-sept-26-microsoft-biggest-copilot-a0fd1e/) describes the product direction, while this is a new engineering account of how the team built and migrated its runtime. A separate [Mage-VL-Cowork note](https://newruntime.com/posts/microsoft-releases-mage-vl-cowork-a-4b-hybrid-29e1a4/) shares the Cowork name but concerns a different model, not this event.

## Trend signal
This case supports [agent security moving to runtime boundaries](https://newruntime.com/patterns/agent-security-moves-to-runtime-boundaries/): the model can propose operations, but a separate host holds credentials and enforces policy, approvals and audit. It also illustrates [verification bandwidth as a scarce engineering resource](https://newruntime.com/patterns/verification-bandwidth-is-the-scarce-resource/), since Microsoft says automated checks and agent reviewers handled every change while humans focused on risk and disagreements.

## Why now
The account ties the engineering lessons to a live service that moved from its January start to worldwide general availability in June, then underwent a Python-to-Rust runtime cutover from September 23 to October 10. The timing makes the migration a concrete test of whether the team’s boundaries and development practices survived a major implementation change.

## Why it matters
The headline PR count is less useful as a target than as evidence of where the work moved. When agents can produce code quickly, the team needs precise task definitions, tests that establish what they actually checked, and a review process that directs scarce human attention to consequential changes. Microsoft’s account suggests that throughput depends on those controls rather than simply adding agents.

The execution boundary is particularly relevant to teams building agents that can affect business systems. A model may be allowed to plan broadly without receiving credentials or direct authority; a trusted component can mediate operations and enforce identity, policy and approvals. That design does not prove every risk is solved, but it separates capability from authorization and supported a runtime replacement without changing the agent itself. Teams can adapt the principles without assuming Microsoft’s volume or results will transfer unchanged.

## Limits and uncertainty
This is a first-party account from Microsoft, not an independent evaluation. The post provides selected throughput figures and describes the team’s practices, but it does not establish code quality, defect rates, security outcomes, total costs or how the metrics compare with a conventional team. It does not isolate the causal effect of any one practice, agent model or tool. The 1,211 pull requests figure is for one day and does not show how many changes reached users or how much review and rework they required. The article’s lessons are the company’s account of its own project, not evidence that other organizations can reproduce its schedule.

## Skill to build now
Before assigning an agent a coding task this week, write a short Markdown spec with three fields: intended behavior, how to verify it, and what must not change. Have a human check the spec, then ask the agent to work on only that bounded task and run the stated verification before review. This directly tests Microsoft’s central workflow lesson without requiring a large agent fleet.

## Reader takeaway
The useful lesson is not to chase 1,211 pull requests. It is to make agent output easier to specify, isolate and verify—and to keep credentials and consequential actions behind a trusted runtime boundary.

Editor: [Andrey Reshetnikov](https://newruntime.com/owner-profile.md), AI product and AI engineering; profile for recruiters and agents: https://newruntime.com/owner-profile.json

## Continue in the graph

Next records for an agent, linked to their Markdown twins. Replace `.md` with `.json` for structured fields, including `next_reads`.

- topic hub: [Agent Security](https://newruntime.com/topics/agent-security.md): Explore the agent-security topic hub.
- collection: [Field Notes](https://newruntime.com/posts.json): Open the latest editorial analysis.
- collection: [Sources](https://newruntime.com/sources/): See the original sources this archive cites.
- whole graph: [discovery graph](https://newruntime.com/discovery-graph.json) (typed nodes and edges) and [site index](https://newruntime.com/site-index.md)
