AI DevelopmentPlaybook11 min readPublished June 8, 2026

Managed settings · Local inference · explicit trust boundaries

Enterprise-Governed AI Coding Lands in VS Code Copilot

Managed plugins and BYOK without GitHub sign-in changed the June rollout options. The October update separates current managed settings, local inference, device controls and the precise FedRAMP boundary.

DA
Digital Applied Team
Senior strategists · Published Jun 8, 2026
PublishedJun 8, 2026
UpdatedOct 4, 2026
Read time11 min

Enterprise-governed AI coding arrived in VS Code on June 5, 2026, when GitHub put enterprise-managed Copilot plugins into public preview — and the quieter half of the story, an air-gapped bring-your-own-key path that no longer needs a GitHub sign-in, landed a week earlier in VS Code 1.122. Read together, they are less a feature drop than a change in who is allowed to deploy AI coding at all.

That opening describes the June release window: GitHub's June 5 preview announcement and the May 28 release notes establish the dates. A deployment decision still depends on the specific organization, client and network. None of these features establishes that a bank, hospital or government contractor can approve a particular workload.

Updated October 4, 2026: enterprise managed settings became generally available on July 1. The documented server-managed path is now .github-private/copilot/managed-settings.json. The April residency announcement authorizes the underlying model hosts and infrastructure; it describes Copilot's own FedRAMP authorization as future. This guide corrects that distinction, replaces the fixed thirteen-policy count with a scoped decision table, and adds a local-only preflight example. It does not report a customer rollout, compliance certification or measured cost saving.

Key takeaways
  1. 01
    Keep historical and current settings separate.The June preview used a settings.json path. The July GA announcement and current instructions use copilot/managed-settings.json in the enterprise .github-private repository.
  2. 02
    A local model is only one offline dependency.Select local utility models as well as the chat model, inventory tool endpoints, and verify outbound traffic. BYOK does not provide every Copilot service feature.
  3. 03
    Policy scope matters more than a policy count.Treat MCP selection, tool approval, terminal isolation and network access as separate controls. Test the actual client, operating system and delivery mechanism.
  4. 04
    Describe FedRAMP status precisely.The cited April announcement distinguishes authorized underlying hosts from Copilot's future authorization path. Residency does not certify an arbitrary local or BYOK deployment.
  5. 05
    Use a bounded pilot with observable rejection tests.An allowed server working is insufficient: also verify denied tools, unavailable utility models, account changes and policy refresh. Keep the previous configuration available for rollback.

01 — Trust boundariesSeparate the control planes.

An enterprise coding assistant has several independent trust boundaries. A plugin supplies instructions and tools. A managed setting distributes a baseline. An inference provider receives prompts. A sandbox constrains some command execution. Procurement evaluates the service and workload against the organization's requirements. Combining these into a single claim of "enterprise-ready" hides the decisions a reviewer needs to make.

Start with the data path rather than the model name. Write down where source code, prompts, terminal output, retrieved documents and session history can travel. Then identify who can change each route. The person who approves a plugin repository is not necessarily the person who approves the inference contract. A local endpoint does not make a remote MCP tool local, and a private registry does not make a server's returned instructions trustworthy.

The practical artifact is a workload-specific deployment record: client and extension versions, operating system, selected provider, enabled tools, configuration source and a named owner for changes. This is a recommended review method, not a statement that a particular regulator requires this exact format. The coding-agent data terms census supplies a separate lens on provider commitments; the configuration record explains what your own installation actually uses.

Distribution
Who supplies the baseline?
Policy

Record the repository or device-management source and who can modify it. Treat a repository permission change as a governance change.

Configuration ownership
Execution
What can the agent invoke?
Tools

List terminal commands, MCP endpoints and extension tools separately. A tool's name is not proof of its data access or side effects.

Approval and isolation
Inference
Where do prompts travel?
Route

Identify chat and utility-model providers, then check their endpoints, credentials and operating terms. Local inference is a deployment property to verify.

Data destination

02 — Release historyFrom June preview to July GA.

The June announcement located plugin marketplace settings at .github-private/.github/copilot/settings.json and described automatic application for users licensed through the enterprise with Copilot Business or Enterprise. That remains evidence of the launch, not the path to copy into a new deployment. The July 1 GA announcement describes enforcement through managed-settings.json in VS Code and Copilot CLI.

Current getting-started instructions place the file at copilot/managed-settings.json inside the designated .github-private repository. Settings apply to users receiving a license from the enterprise or its organizations even when they cannot access that repository. Restrict edit rights and review changes as code. Visibility to enterprise members can help developers understand the baseline without granting them permission to alter it.

Delivery is another boundary. GitHub documents server, MDM and file-based delivery. Server-managed settings depend on the signed-in account; device-delivered settings can apply before sign-in and remain when accounts change. In Copilot CLI, a server request failure with no cached policy leaves that server policy unavailable. A restriction that must survive loss of connectivity needs an appropriate device-delivery design and a tested failure case.

Do not assume every key has the same support in every client. The managed-settings schema carries a client-support matrix. A platform team should record the intended client for each control before approving a shared file. Reusing one logical configuration is useful; claiming identical enforcement everywhere needs evidence from each supported surface.

Plugin review
The plugin documentation says bundled MCP servers are implicitly trusted when a plugin is installed. Review the plugin's scripts, hooks and endpoints before distribution. Installation trust does not prove safe outputs, restrict data access, or replace tool approval.

03 — Control selectionChoose controls by failure mode.

The original article's thirteen-policy table was a selection, not a durable census. The current VS Code policy reference lists a broader surface. The table below is a decision aid: it connects selected controls to tests and deliberately avoids a claim that one setting provides complete security. Policy names are case-sensitive configuration identifiers, not interchangeable labels for a compliance objective.

Selected VS Code governance controls and suggested rejection tests
ControlBoundarySuggested test
ChatMCPMCP source access: all, registry or none.Try an unapproved source and an already configured server.
McpGalleryServiceUrlSelects the registry; review execution rules separately.Confirm the intended registry appears and inspect the running server identity.
ChatAllowedMcpServers / ChatDeniedMcpServersIndividual server matching; denial takes precedence.Give a fixture matching allow and deny entries; it should be blocked.
ChatToolsAutoApproveFalse disables global auto-approval; it is not an all-tools manual-approval rule.Check tool-specific eligibility and terminal rules as well.
ChatAgentSandboxEnabledTerminal isolation with platform and harness limits.Use a harmless denied file operation and record its actual rejection.
ChatAgentNetworkFilterDomain rules for covered agent tools; not a universal network firewall.Test browser/fetch and terminal paths independently.
Selected controls from VS Code's policy and AI-management references, checked October 4, 2026. Test suggestions are editorial recommendations, not measured results.

The AI-management reference distinguishes global auto-approval from tool eligibility and terminal rules. It also warns that managed MCP allow/deny values replace corresponding device-policy values rather than merging them. Review both delivered sources before concluding that a deny survives a second configuration channel. An empty allowlist, an omitted allowlist and a list containing one server should be treated as distinct test inputs.

Terminal sandboxing is not a restriction on every built-in file tool. Network behavior also differs by harness and platform; some shells use an outbound on/off boundary rather than domain filtering. Build tests around the selected surface instead of copying a screenshot from another operating system. A policy report can establish that a value arrived; an attempted forbidden operation establishes a different fact about its effect. Both belong in the acceptance record.

04 — Local inferenceConfigure chat and utilities.

VS Code 1.122 made BYOK available without GitHub sign-in. The release notes say configuring a BYOK model makes Chat available and directs requests to the provider; GitHub's May-release summary corroborates the release family. A provider can be a cloud service or a local endpoint. Only the latter can support an offline design, and tools must stay within the same intended boundary.

The June 18 BYOK explanation separates chat from other Copilot features and explains the utility settings. Set chat.utilityModel and chat.utilitySmallModel through the model picker to configured local models when utility features are needed while signed out. Selecting a local chat model alone does not select those background routes. Test a title or commit-message task explicitly rather than inferring support from a successful chat answer.

The current language-model reference says local models can work without a GitHub account or Copilot plan. Semantic search, inline suggestions and embeddings-dependent features remain outside offline BYOK. The built-in Ollama provider is now deprecated in favor of the official Ollama extension. Record that integration choice; do not treat the six providers named in May as a permanent compatibility guarantee.

The earlier guide said COPILOT_OFFLINE=true was a required VS Code telemetry switch. The sources checked for this refresh do not establish that instruction, so it is withdrawn. VS Code's telemetry documentation describes telemetry.telemetryLevel and notes that extensions can have their own controls. Inventory those controls and enforce the network boundary separately. A setting label cannot establish that no bytes leave a device.

Offline acceptance
Capture the network policy, provider address, tool endpoint inventory and a failed outbound fixture request in a controlled pilot. This article's offline example performs no network requests and cannot certify an air gap. DNS, proxies, extension behavior and the process listening at a loopback address require separate deployment checks.

05 — Procurement scopeRead the authorization boundary.

GitHub's April 13 announcement, clarified April 24 says the underlying model hosts and infrastructure are FedRAMP Moderate authorized for US government customers. It says Copilot itself will become authorized through GHEC-DR's authorization path. That wording does not support the original article's claim that Copilot obtained authorization in April. A future authorization path and a completed authorization are different procurement facts.

The same announcement describes US and EU inference residency, with the EU boundary including EU member states and EFTA countries as of May 1. It lists generally available Copilot features in scope. A buyer must still confirm the current offering, selected models and service terms with the vendor. Do not transfer the residency commitment to an independently configured BYOK provider, a plugin's third-party endpoint, or a local deployment simply because the editor is VS Code.

An evidence packet should separate the vendor statement, contract, organization configuration and workload approval. The article can establish what the dated announcement says; it cannot substitute for the buyer's approval process. Remove planned regions and promotional cost multipliers from a current decision unless their current eligibility is established. The useful question is which data types and services the selected commitment covers, including logs and tools, not whether a product page contains a familiar compliance acronym.

06 — Cost boundariesSeparate inference cost from seat governance.

The April Business and Enterprise BYOK announcement says usage is billed by the chosen provider and does not count against Copilot request quotas. That establishes the billing route, not a maximum bill. A contracted endpoint, hosted gateway or self-hosted model can still incur usage, infrastructure and operational costs. Keep those budgets separate from the Copilot allowance.

Current organization billing documentation describes pooled AI credits and additional paid usage. One AI credit equals $0.01. Additional usage is enabled by default; administrators must explicitly disable the paid-usage policy to prevent spending beyond included credits. User budgets can halt access even while a pool still has capacity, and budget exhaustion does not automatically route a task to a cheaper model.

The original June–August promotional allowances are historical and are not presented here as October entitlements. Check the current plan and billing entity before estimating available capacity. Likewise, selecting a utility model is a routing choice, not evidence of savings or unchanged quality. Measure representative utility tasks, record failures and retries, and compare actual provider charges before making a cost claim. A smaller model that repeatedly retries can change both cost and developer experience.

07 — Worked fixtureA local-only preflight.

Consider a fictional pilot that requires both utility routes to resolve to a tested loopback model. The function below checks an explicit fixture catalog and returns reasons a candidate cannot proceed. It does not read VS Code configuration, discover models, implement GitHub's policy engine or contact a provider. Its input model IDs are fixture identifiers; use the actual selector values produced by your installation when collecting a real configuration record.

The acceptance rule is intentionally narrower than "offline works." Both settings must name a catalog entry, its address must parse as HTTP(S) on a loopback hostname, and the fixture must record a successful utility-capability test. Duplicate model identifiers also fail. This catches a missing small-model route and an obvious cloud endpoint before a reviewer mistakes the chat-model choice for the whole deployment. It does not inspect the main chat route or any MCP server.

// Offline illustration: a local-only rollout requirement, not VS Code policy.
export function preflight(settings, models) {
  const failures = [];
  const catalog = new Map();
  for (const model of models) {
    if (!model.id || catalog.has(model.id)) {
      failures.push("duplicate or missing model id");
    }
    catalog.set(model.id, model);
  }
  for (const key of ["chat.utilityModel", "chat.utilitySmallModel"]) {
    const id = settings[key];
    if (typeof id !== "string" || !catalog.has(id)) {
      failures.push(`${key}: select a configured model`);
      continue;
    }
    const model = catalog.get(id);
    let endpoint;
    try {
      endpoint = new URL(model.endpoint);
    } catch {
      failures.push(`${key}: invalid endpoint`);
      continue;
    }
    const loopback = ["localhost", "127.0.0.1", "[::1]"];
    if (
      !(
        ["http:", "https:"].includes(endpoint.protocol) &&
        loopback.includes(endpoint.hostname)
      ) ||
      endpoint.username ||
      endpoint.password
    ) {
      failures.push(`${key}: endpoint is not plain loopback HTTP(S)`);
    }
    if (model.utilityTestPassed !== true) {
      failures.push(`${key}: utility capability not tested`);
    }
  }
  return { ready: failures.length === 0, failures };
}

In the isolated tests, a catalog entry named fixture-local at http://127.0.0.1:11434/v1/chat/completions, with utilityTestPassed: true, passes when both utility settings select it. Changing only the small-model selection to an absent ID fails with a targeted diagnostic. A cloud URL, malformed URL, credential-bearing URL, lookalike hostname or non-HTTP protocol fails. IPv4 and IPv6 loopback fixtures are included. No inference server was started and no real account was used.

The tests prove the displayed illustrative function's behavior on those inputs. They do not establish that a model supports the requested task, that the endpoint is safe, or that a remote service cannot be tunneled through localhost. The utilityTestPassed flag is supplied evidence, not a check performed by the function. Replace it with your own recorded fixture result in a real pilot and attach the client's effective configuration. Do not promote this small preflight into a compliance certificate.

08 — Acceptance testsPilot rejection and rollback.

Choose a low-risk repository and synthetic documents for the first pilot. A read-only internal documentation tool can establish retrieval behavior without introducing customer-record writes. Grant only the resources required for the task and review returned tool content as untrusted input. An initial CRM connector is not automatically the best baseline: its data sensitivity and action scope can make it a poor first fixture. Start with the smallest useful context boundary you can inspect.

Record positive and negative cases together. An approved documentation request should work; an unapproved MCP server should fail. A harmless forbidden terminal operation should remain blocked. A missing local utility model should produce a visible failure rather than an assumed fallback. Switching accounts, restarting the client and losing policy connectivity should produce the behavior your delivery design expects. Record exact versions, policy source and observable results instead of declaring success from a settings screenshot.

Prepare rollback before widening access. Retain the previous reviewed policy, identify who can publish a replacement, and confirm how the target client refreshes it. Include credential revocation and disabling the plugin or server when its behavior changes unexpectedly. Git history is useful evidence, but reverting a file alone does not prove that every running client has adopted the earlier state. Read back the effective settings and rerun the failed case after rollback.

The Cursor governance guide can frame a separate product evaluation, while the Copilot desktop-app analysis explains another client surface. Neither comparison supplies acceptance evidence for VS Code. Our AI transformation work connects workload selection with these implementation boundaries: the deliverable should be an inspectable deployment record, with a named owner and a tested rollback.

Decision rule
Widen a pilot when the intended workflow succeeds, prohibited actions fail, configuration ownership is clear, and the prior state can be restored. If one of those checks is unresolved, keep its scope bounded. This is a recommended rollout criterion, not a claim about measured enterprise adoption or failure rates.

09 — Operating choiceMake governance observable.

Governed coding

Approve a specific workload and its tested boundaries.

The June releases created useful distribution and local-inference options. The October decision is more specific: which settings reach which client, where each prompt and tool request goes, what happens when a restriction is challenged, and how the organization restores the previous state. Managed settings, BYOK and residency answer different parts of that question.

Treat the policy repository as production infrastructure, preserve the release history, and distinguish a vendor's documented scope from your own test results. A successful local preflight is one small piece of evidence. The deployment becomes reviewable when inference routing, tool access, operating limits and rollback are documented together for the actual workload.

Governed AI development

Build an inspectable rollout.

We help teams select bounded AI workflows, review data and tool access, and define pilot acceptance and rollback.

Workflow selectionGovernance reviewPilot planning
Pilot scope

Reviewable deployment

  • →Inference and tool routes
  • →Effective settings and ownership
  • →Positive and negative fixtures
  • →Rollback and read-back
FAQ · Governed coding

Deployment questions.

The current server-managed instructions place copilot/managed-settings.json in the selected enterprise .github-private repository. The .github/copilot/settings.json path described in the June preview is historical. Check the current deployment method and client support before publishing a configuration.
Digital Applied newsletter

Deep dives on AI, marketing and development.

Practical guides and fresh insights by email. No recycled takes.