If you use any of these tokens, we encourage you to reset them now. This will give you additional security benefits and allow Secret Scanning to detect the tokens.
-
Notably, the token formats now include the following updates:
-
-
The character set changed from [a-f0-9] to [A-Za-z0-9_]
-
The format now includes a prefix for each token type:
-
-
ghp_ for Personal Access Tokens
-
gho_ for OAuth Access tokens
-
ghu_ for GitHub App user-to-server tokens
-
ghs_ for GitHub App server-to-server tokens
-
ghr_ for GitHub App refresh tokens
-
-
-
-
The length of our tokens is remaining the same for now. However, GitHub tokens will likely increase in length in future updates, so integrators should plan to support tokens up to 255 characters after June 1, 2021.
-]]>
-
-
-
- 57117
-
- Compare REST API now supports pagination
- https://github.blog/changelog/2021-03-22-compare-rest-api-now-supports-pagination
-
-
- Tue, 23 Mar 2021 02:49:54 +0000
- https://github.blog/changelog/2021-03-22-compare-rest-api-now-supports-pagination
-
-
- The "Compare two commits" REST API, which returns a list of commits reachable from one commit (or branch) but not reachable from another, now supports pagination. It can also now return the results for comparisons over 250 commits.
-
-]]>
-
-
-
- 56979
-
- GitHub Discussions GraphQL API public beta
- https://github.blog/changelog/2021-02-23-github-discussions-graphql-api-public-beta
-
-
- Tue, 23 Feb 2021 18:21:40 +0000
- https://github.blog/changelog/2021-02-23-github-discussions-graphql-api-public-beta
-
-
- The GitHub Discussions GraphQL API public beta is now available. Get started with the GitHub Discussions API.
-
diff --git a/src/landings/components/shared/LandingArticleGridWithFilter.tsx b/src/landings/components/shared/LandingArticleGridWithFilter.tsx
index d3f08647f627..48d4cf4b8a5f 100644
--- a/src/landings/components/shared/LandingArticleGridWithFilter.tsx
+++ b/src/landings/components/shared/LandingArticleGridWithFilter.tsx
@@ -272,6 +272,7 @@ export const ArticleGrid = ({
) => {
diff --git a/src/landings/context/LandingContext.tsx b/src/landings/context/LandingContext.tsx
index 7f4258c2a910..a74647f0d07a 100644
--- a/src/landings/context/LandingContext.tsx
+++ b/src/landings/context/LandingContext.tsx
@@ -1,10 +1,9 @@
import { createContext, useContext } from 'react'
-import { getFeaturedLinksFromReq } from '@/landings/components/ProductLandingContext'
+import { getFeaturedLinksFromReq } from '@/landings/lib/featured-links'
import { mapRawTocItemToTocItem } from '@/landings/types'
-import type { TocItem } from '@/landings/types'
+import type { TocItem, FeaturedLink } from '@/landings/types'
import type { ExtendedRequest, Context } from '@/types'
import type { JourneyTrack } from '@/journeys/lib/journey-path-resolver'
-import type { FeaturedLink } from '@/landings/components/ProductLandingContext'
export type LandingType = 'bespoke' | 'discovery' | 'journey'
diff --git a/src/landings/lib/featured-links.ts b/src/landings/lib/featured-links.ts
new file mode 100644
index 000000000000..d024a02ce482
--- /dev/null
+++ b/src/landings/lib/featured-links.ts
@@ -0,0 +1,36 @@
+import type { FeaturedLink } from '@/landings/types'
+
+type FeaturedLinkEntry = {
+ href: string
+ title: string
+ intro?: string | null
+ fullTitle?: string | null
+ page?: { authors?: string[] }
+}
+
+type ReqWithFeaturedLinks = {
+ context: {
+ featuredLinks?: Record
+ }
+}
+
+// Helper that reshapes the resolved featured-link data placed on the request
+// by the `featuredLinks` middleware into the FeaturedLink shape consumed by
+// landing page contexts (toc, category, discovery, journey, bespoke).
+export const getFeaturedLinksFromReq = (req: unknown): Record> => {
+ const { context } = req as ReqWithFeaturedLinks
+ return Object.fromEntries(
+ Object.entries(context.featuredLinks || {}).map(([key, entries]) => {
+ return [
+ key,
+ (entries || []).map((entry) => ({
+ href: entry.href,
+ title: entry.title,
+ intro: entry.intro || undefined,
+ authors: entry.page?.authors || [],
+ fullTitle: entry.fullTitle || undefined,
+ })),
+ ]
+ }),
+ )
+}
diff --git a/src/landings/middleware/featured-links.ts b/src/landings/middleware/featured-links.ts
index 5b392600fd1e..d8eae6d4097b 100644
--- a/src/landings/middleware/featured-links.ts
+++ b/src/landings/middleware/featured-links.ts
@@ -5,7 +5,7 @@ import getLinkData from '@/frame/lib/get-link-data'
/**
* This is the max. number of featured links, by any category, that we
- * display on the product landing pages.
+ * display on index landing pages (homepage and TOC landings).
* The reason it's variable is that some featured links are conditional.
* For example:
*
@@ -20,12 +20,15 @@ import getLinkData from '@/frame/lib/get-link-data'
* would end up being blank and thus omitted.
*
* The reason we don't want to display too many is because it might
- * make the product landing page columns that lists links far too
+ * make the landing page columns that lists links far too
* long ("high").
*/
const MAX_FEATURED_LINKS = 4
-// this middleware adds properties to the context object
+// This middleware resolves `featuredLinks` from the page's frontmatter into
+// a `req.context.featuredLinks` object consumed by the homepage and toc
+// landing renderers. It runs for any `index.md` page that defines
+// `featuredLinks` in frontmatter.
export default async function featuredLinks(
req: ExtendedRequest,
res: Response,
@@ -34,13 +37,7 @@ export default async function featuredLinks(
if (!req.context) throw new Error('request is not contextualized')
if (!req.context.page) return next()
- if (
- !(
- req.context.page.relativePath.endsWith('index.md') ||
- req.context.page.layout === 'product-landing'
- )
- )
- return next()
+ if (!req.context.page.relativePath.endsWith('index.md')) return next()
if (!req.context.page.featuredLinks) return next()
diff --git a/src/landings/pages/product.tsx b/src/landings/pages/product.tsx
index 038c7b2b8c03..5f4eb31f8b84 100644
--- a/src/landings/pages/product.tsx
+++ b/src/landings/pages/product.tsx
@@ -15,12 +15,6 @@ import {
addUINamespaces,
} from '@/frame/components/context/MainContext'
-import {
- getProductLandingContextFromRequest,
- ProductLandingContextT,
- ProductLandingContext,
-} from '@/landings/components/ProductLandingContext'
-
import {
getArticleContextFromRequest,
ArticleContextT,
@@ -28,7 +22,6 @@ import {
} from '@/frame/components/context/ArticleContext'
import { ArticlePage } from '@/frame/components/article/ArticlePage'
-import { ProductLanding } from '@/landings/components/ProductLanding'
import { TocLanding } from '@/landings/components/TocLanding'
import { CategoryLanding } from '@/landings/components/CategoryLanding'
import {
@@ -58,7 +51,6 @@ function initiateArticleScripts() {
type Props = {
mainContext: MainContextT
- productLandingContext?: ProductLandingContextT
tocLandingContext?: TocLandingContextT
articleContext?: ArticleContextT
categoryLandingContext?: CategoryLandingContextT
@@ -68,7 +60,6 @@ type Props = {
}
const GlobalPage = ({
mainContext,
- productLandingContext,
tocLandingContext,
articleContext,
categoryLandingContext,
@@ -106,12 +97,6 @@ const GlobalPage = ({
)
- } else if (productLandingContext) {
- content = (
-
-
-
- )
} else if (categoryLandingContext) {
content = (
@@ -174,9 +159,6 @@ export const getServerSideProps: GetServerSideProps = async (context) =>
} else if (currentLayoutName === 'discovery-landing') {
props.discoveryContext = await getLandingContextFromRequest(req, 'discovery')
additionalUINamespaces.push('product_landing', 'carousels')
- } else if (currentLayoutName === 'product-landing') {
- props.productLandingContext = await getProductLandingContextFromRequest(req)
- additionalUINamespaces.push('product_landing')
} else if (relativePath?.endsWith('index.md')) {
if (currentLayoutName === 'category-landing') {
props.categoryLandingContext = getCategoryLandingContextFromRequest(req)
diff --git a/src/landings/tests/featured-links.ts b/src/landings/tests/featured-links.ts
index 02f638790138..75ee4203a7ba 100644
--- a/src/landings/tests/featured-links.ts
+++ b/src/landings/tests/featured-links.ts
@@ -1,7 +1,6 @@
import { describe, expect, test, vi } from 'vitest'
import { getDOM } from '@/tests/helpers/e2etest'
-import enterpriseServerReleases from '@/versions/lib/enterprise-server-releases'
describe('featuredLinks', () => {
vi.setConfig({ testTimeout: 60 * 1000 })
@@ -24,21 +23,10 @@ describe('featuredLinks', () => {
)
})
- test('Enterprise intro links have expected values', async () => {
+ test('Enterprise get-started landing renders', async () => {
const $ = await getDOM('/en/enterprise-server@latest/get-started')
- const $featuredLinks = $('[data-testid=article-list] a')
- expect($featuredLinks.length).toBeGreaterThan(0)
-
- // Fixture content expectations (CI environment)
- expect($featuredLinks.eq(0).attr('href')).toBe(
- `/en/enterprise-server@${enterpriseServerReleases.latestStable}/get-started/foo/bar`,
- )
- expect($featuredLinks.eq(0).find('[data-testid=link-with-intro-title]').text()).toMatch(
- 'Bar Usually Comes After Foo',
- )
- expect($featuredLinks.eq(0).find('[data-testid=link-with-intro-intro]').text()).toMatch(
- "This page doesn't really have an intro",
- )
+ // get-started uses discovery-landing, so it has hero/spotlight, not article-list.
+ expect($('h1').text()).toMatch(/Getting started/)
})
// This is an important test because one of the popular links,
diff --git a/src/landings/types.ts b/src/landings/types.ts
index f6e0ddcfb763..8fa25ec196e7 100644
--- a/src/landings/types.ts
+++ b/src/landings/types.ts
@@ -4,6 +4,15 @@ import { ValidOcticon, isValidOcticon } from './lib/octicons'
export type { ValidOcticon }
export { isValidOcticon }
+export type FeaturedLink = {
+ title: string
+ href: string
+ intro?: string
+ authors?: Array
+ date?: string
+ fullTitle?: string
+}
+
// Base type for all TOC items with core properties
export type BaseTocItem = {
fullPath: string
diff --git a/src/tests/README.md b/src/tests/README.md
index f4d6402976ee..8fd2cfb9d25d 100644
--- a/src/tests/README.md
+++ b/src/tests/README.md
@@ -57,7 +57,6 @@ Some suites require environment variables or tests will fail with 404s or conten
```bash
npm run test:article-api
-npm run test:changelogs
npm run test:fixtures
npm run test:landings
npm run test:languages # requires Elasticsearch running
diff --git a/src/types/types.ts b/src/types/types.ts
index 896237334f2c..ced06419308a 100644
--- a/src/types/types.ts
+++ b/src/types/types.ts
@@ -155,7 +155,6 @@ export type Context = {
redirectNotFound?: string
earlyAccessPageLinks?: string
changelogUrl?: string
- whatsNewChangelog?: ChangelogItem[]
secretScanningData?: SecretScanningData[]
ghesReleases?: GHESRelease[]
ghesReleaseNotes?: GHESReleasePatch[]
@@ -173,8 +172,6 @@ export type Context = {
breadcrumbs?: Breadcrumb[]
glossaries?: Glossary[]
currentProductName?: string
- productCommunityExamples?: ProductExample[]
- productUserExamples?: ProductExample[]
productGroups?: ProductGroup[]
featuredLinks?: FeaturedLinksExpanded
renderedPage?: string
@@ -270,12 +267,6 @@ export type ReleaseNotes = {
}
}
-export type ChangelogItem = {
- title: string
- date: string
- href: string
-}
-
export type SecretScanningData = {
provider: string
supportedSecret: string
@@ -437,12 +428,6 @@ export type AllVersions = {
// is not possible to happen at runtime.
export type URLSearchParamsTypes = string | string[][] | Record | URLSearchParams
-export type ProductExample = {
- repo?: string
- user?: string
- description: string
-}
-
export type FeatureData = {
[key: string]: Versions
}
From b8982900b6723f374ff68df3d9bd778546d80dc9 Mon Sep 17 00:00:00 2001
From: hubwriter
Date: Wed, 6 May 2026 10:31:33 +0100
Subject: [PATCH 09/13] Copilot CLI: Add rubber duck conceptual article
(#60992)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---
.../agents/copilot-cli/about-custom-agents.md | 2 +
.../copilot-cli/comparing-cli-features.md | 2 +-
.../concepts/agents/copilot-cli/index.md | 1 +
.../agents/copilot-cli/rubber-duck.md | 97 +++++++++++++++++++
content/copilot/how-tos/copilot-cli/index.md | 2 +
.../copilot-cli/use-copilot-cli/overview.md | 14 ++-
.../cli-command-reference.md | 2 +-
7 files changed, 116 insertions(+), 4 deletions(-)
create mode 100644 content/copilot/concepts/agents/copilot-cli/rubber-duck.md
diff --git a/content/copilot/concepts/agents/copilot-cli/about-custom-agents.md b/content/copilot/concepts/agents/copilot-cli/about-custom-agents.md
index 80eb99f5a364..2d0a9dd27737 100644
--- a/content/copilot/concepts/agents/copilot-cli/about-custom-agents.md
+++ b/content/copilot/concepts/agents/copilot-cli/about-custom-agents.md
@@ -33,6 +33,8 @@ In addition to the main {% data variables.product.prodname_copilot_short %} agen
* **research** — This agent operates as a staff-level software engineer and research specialist. It provides exhaustive, meticulously researched answers about codebases, APIs, libraries, and software architecture. It uses {% data variables.product.github %} search/exploration tools, web fetch/search, and local tools. Unlike the other agents, the research agent can only be invoked by using the `/research` slash command. It cannot be automatically triggered by the main agent.
+* **rubber-duck** — A constructive critic that gives {% data variables.product.prodname_copilot_short %} a second opinion on its own plans, code, and tests. It runs on a different model from the one driving your session, so it brings a complementary perspective. It is designed to review proposed changes, not to make file changes itself. For more information, see [AUTOTITLE](/copilot/concepts/agents/copilot-cli/rubber-duck).
+
## Running agents as subagents
One of the benefits of using custom agents you have defined yourself—or the built-in agents—is that the main {% data variables.product.prodname_copilot_short %} agent can run them as subagents with a separate context window. This means that your custom agent, or built-in agent, can focus on a specific subtask without cluttering the context window of the main agent.
diff --git a/content/copilot/concepts/agents/copilot-cli/comparing-cli-features.md b/content/copilot/concepts/agents/copilot-cli/comparing-cli-features.md
index 68cf236cd539..6f9f7ba7c228 100644
--- a/content/copilot/concepts/agents/copilot-cli/comparing-cli-features.md
+++ b/content/copilot/concepts/agents/copilot-cli/comparing-cli-features.md
@@ -320,7 +320,7 @@ Subagents help {% data variables.product.prodname_copilot_short %}:
**Custom agents** provide {% data variables.product.prodname_copilot_short %} with specialist knowledge about a particular subject, and define a particular approach that {% data variables.product.prodname_copilot_short %} should use when working in that area. You can think of a custom agent as a "persona" that {% data variables.product.prodname_copilot_short %} can adopt when working on certain tasks.
-{% data variables.copilot.copilot_cli_short %} has several built-in custom agents. For example, the `explore`, `task`, `research`, `code-review`, and `general-purpose` agents. You can also define your own custom agents, to meet your specific needs.
+{% data variables.copilot.copilot_cli_short %} has several built-in custom agents. For example, the `explore`, `task`, `research`, `code-review`, `rubber-duck`, and `general-purpose` agents. You can also define your own custom agents, to meet your specific needs.
You define a custom agent in a Markdown file with YAML frontmatter. The file contains:
diff --git a/content/copilot/concepts/agents/copilot-cli/index.md b/content/copilot/concepts/agents/copilot-cli/index.md
index 4fb6f7c59556..27249ba410c0 100644
--- a/content/copilot/concepts/agents/copilot-cli/index.md
+++ b/content/copilot/concepts/agents/copilot-cli/index.md
@@ -16,6 +16,7 @@ children:
- /fleet
- /research
- /chronicle
+ - /rubber-duck
- /lsp-servers
- /context-management
contentType: concepts
diff --git a/content/copilot/concepts/agents/copilot-cli/rubber-duck.md b/content/copilot/concepts/agents/copilot-cli/rubber-duck.md
new file mode 100644
index 000000000000..d958a5fb0fd4
--- /dev/null
+++ b/content/copilot/concepts/agents/copilot-cli/rubber-duck.md
@@ -0,0 +1,97 @@
+---
+title: About the rubber duck agent
+shortTitle: About rubber duck
+allowTitleToDifferFromFilename: true
+intro: 'The rubber duck agent is a built-in critic that gives {% data variables.product.prodname_copilot_short %} a constructive second opinion on its own plans, code, and tests—using a different AI model from the one driving your session.'
+product: '{% data reusables.gated-features.copilot-cli %}'
+versions:
+ feature: copilot
+contentType: concepts
+category:
+ - Learn about Copilot # Copilot discovery page
+ - Learn about Copilot CLI # Copilot CLI bespoke page
+docsTeamMetrics:
+ - copilot-cli
+---
+
+## Introduction
+
+Rubber duck is a built-in agent in {% data variables.copilot.copilot_cli %} that acts as a constructive critic. While working on a task, the main CLI agent for a session can pass its current plan, design, implementation, or tests over to the rubber duck agent for review. The rubber duck agent looks for blind spots, design flaws, and substantive issues, and reports back with concrete, actionable feedback. {% data variables.product.prodname_copilot_short %} then takes that critique into account before continuing.
+
+The rubber duck agent is designed to review proposed changes, not to make file changes itself. The main agent for the session decides what to do with the feedback.
+
+> [!NOTE]
+> The rubber duck agent is currently only available if the main agent is using a Claude or GPT large language model.
+
+## Why "rubber duck"?
+
+The name comes from a long-standing technique in software engineering called **rubber ducking** in which you explain your code, or proposed solution, to an inanimate object—traditionally a rubber duck. The idea is that by articulating your thinking, you often uncover mistakes, misunderstandings, or logical flaws.
+
+The rubber duck agent applies a similar idea to {% data variables.product.prodname_copilot_short %}. Before moving ahead with a non-trivial change, {% data variables.product.prodname_copilot_short %} can stop, articulate its current thinking, and have it scrutinized by an independent reviewer. Unlike a real rubber duck, this one talks back: it returns a structured critique that {% data variables.product.prodname_copilot_short %} can act on.
+
+## Second opinion from another model
+
+A key design feature of the rubber duck agent is that it deliberately runs on a **different AI model from the one driving your session**. {% data variables.copilot.copilot_cli %} picks a critic model that contrasts with the current session model. For example, if you have chosen to use a Claude model for your session, the rubber duck agent may use a GPT model as the critic. {% data variables.copilot.copilot_cli_short %} only uses the rubber duck agent if a suitable model is available to provide a useful critique.
+
+The benefit of using a different model is that the critic is less likely to share the same blind spots, biases, or failure modes as the model that produced the work. You effectively get two independent perspectives on the same problem.
+
+The appropriate critic model is selected automatically each time the rubber duck agent is invoked, based on your current session model. If you switch session models mid-session (for example, with the `/model` command), the next invocation of the rubber duck agent picks the appropriate critic for the new session model.
+
+## What the rubber duck agent does
+
+When the rubber duck agent is consulted, it:
+
+1. **Reads the work in context.** It understands what the code, design, or proposal is trying to accomplish, how it integrates with the rest of the system, and what assumptions exist.
+1. **Identifies real issues.** It looks for bugs, logic errors, security vulnerabilities, design flaws, anti-patterns, performance bottlenecks, and other problems that genuinely matter to the success of the task.
+1. **Recommends specific fixes.** For each issue it finds, it states the issue, its impact, and a concrete suggested change.
+1. **Categorizes its feedback** by severity:
+ * **Blocking issues**—must be fixed for the work to succeed.
+ * **Non-blocking issues**—should be fixed to improve quality, but won't prevent success.
+ * **Suggestions**—lower-priority improvements that still have a real impact on the outcome.
+1. **Only reports findings that matter.** If it finds no issues, it says so explicitly. The rubber duck agent is configured not to comment on style, formatting, naming conventions, grammar in comments, minor refactors, or best practices that don't prevent actual problems.
+
+The rubber duck agent has read-only access to your codebase via the standard exploration tools. It cannot edit files or run commands that change your environment.
+
+## When {% data variables.product.prodname_copilot_short %} consults the rubber duck agent
+
+When the rubber duck agent is enabled, {% data variables.product.prodname_copilot_short %} is instructed to consult it at high-leverage moments rather than only when stuck. Typical situations include:
+
+* **After planning a non-trivial change, but before implementing it.** This is the highest-leverage moment to catch design flaws, while course corrections are still cheap.
+* **Mid-implementation,** to check for blind spots in a complex piece of work.
+* **After writing tests,** to validate that test coverage is comprehensive and that the behavior actually satisfies your original request.
+* **Reactively, when {% data variables.product.prodname_copilot_short %} hits repeated failures or unexpected results,** to get an independent analysis of the problem rather than retrying the same approach.
+
+For small, well-understood changes {% data variables.product.prodname_copilot_short %} typically skips the rubber duck agent.
+
+When {% data variables.product.prodname_copilot_short %} consults the rubber duck agent, it summarizes the resulting critique for you in the timeline output rather than repeating it verbatim—for example, "The critique pointed out a blind spot in my plan around X, so I updated my plan to address that."
+
+## Manually invoking the rubber duck agent
+
+Typically {% data variables.copilot.copilot_cli_short %} consults the rubber duck agent automatically. You don't need to do anything. The timeline output shows when the main agent is getting a rubber duck critique. However, sometimes the CLI will not use the rubber duck agent. For example, it may decide that the changes are not extensive enough to warrant a critique.
+
+You can use a natural language prompt to explicitly ask {% data variables.product.prodname_copilot_short %} to get a second opinion. For example, after asking {% data variables.product.prodname_copilot_short %} to produce a plan of work, you could enter a prompt such as:
+
+```copilot
+Rubber duck your plan.
+```
+
+Or part way through a series of changes, you could prompt:
+
+```copilot
+Get a critique of the changes you've made so far.
+```
+
+## Benefits of using the rubber duck agent
+
+* **Catches issues early.** Most non-trivial tasks that fail have problems that a critique could have caught at the planning stage. Getting feedback before code is written is preferable to fixing problems later in the process.
+
+ > [!NOTE]
+ > Consulting the rubber duck agent runs an additional reasoning pass on a separate model, so it adds some latency and involves additional model usage. The upside is that spending a little more time and resources up front can save you time and model usage overall by catching issues early and by reducing the number of failed attempts to complete a task.
+
+* **Reduces single-model blind spots.** Because the agent uses a model from a different family, it brings a genuinely different perspective rather than re-running the same reasoning that produced the original work.
+* **Improves quality of complex changes.** Architectural decisions, multi-file changes, and unfamiliar codebases all benefit from a second opinion before {% data variables.product.prodname_copilot_short %} commits to an approach.
+* **Stays out of the way for simple tasks.** {% data variables.product.prodname_copilot_short %} only consults the rubber duck agent when the work is non-trivial, so it doesn't slow down quick edits and obvious fixes.
+
+## Further reading
+
+* [AUTOTITLE](/copilot/concepts/agents/copilot-cli/about-custom-agents#built-in-agents)
diff --git a/content/copilot/how-tos/copilot-cli/index.md b/content/copilot/how-tos/copilot-cli/index.md
index 74170d029236..222aa795c285 100644
--- a/content/copilot/how-tos/copilot-cli/index.md
+++ b/content/copilot/how-tos/copilot-cli/index.md
@@ -27,6 +27,7 @@ children:
- /content/copilot/concepts/agents/about-agent-skills
- /content/copilot/concepts/agents/copilot-cli/about-cli-plugins
- /content/copilot/concepts/agents/copilot-cli/about-copilot-cli
+ - /content/copilot/concepts/agents/copilot-cli/about-custom-agents
- /content/copilot/concepts/agents/copilot-cli/about-remote-access
- /content/copilot/concepts/agents/copilot-cli/autopilot
- /content/copilot/concepts/agents/copilot-cli/cancel-and-roll-back
@@ -36,6 +37,7 @@ children:
- /content/copilot/concepts/agents/copilot-cli/fleet
- /content/copilot/concepts/agents/copilot-cli/lsp-servers
- /content/copilot/concepts/agents/copilot-cli/research
+ - /content/copilot/concepts/agents/copilot-cli/rubber-duck
- /content/copilot/reference/copilot-cli-reference/acp-server
- /content/copilot/reference/copilot-cli-reference/cli-command-reference
- /content/copilot/reference/copilot-cli-reference/cli-plugin-reference
diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/overview.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/overview.md
index 6ca5cae91661..52431400eb7a 100644
--- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/overview.md
+++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/overview.md
@@ -163,18 +163,28 @@ A {% data variables.copilot.copilot_custom_agent_short %} is a specialized versi
Executes commands such as tests and builds, providing brief summaries on success and full output on failure.
-
General-purpose
+
General purpose
Handles complex, multi-step tasks that require the full toolset and high-quality reasoning, running in a separate context to keep your main conversation clearly focused.
-
Code-review
+
Code review
Reviews changes with a focus on surfacing only genuine issues, minimizing noise.
+
+
Research
+
Performs deep research across your codebase, relevant repositories, and the web, producing a detailed report with citations.
+
+
+
Rubber duck
+
Acts as a constructive critic to provide feedback on some non-trivial tasks. Used automatically by {% data variables.copilot.copilot_cli_short %}.
+
The AI model being used by the CLI can choose to delegate a task to a subsidiary subagent process, that operates using a {% data variables.copilot.copilot_custom_agent_short %} with specific expertise, if it judges that this would result in the work being completed more effectively. The model may equally choose to handle the work directly in the main agent.
+Some built-in {% data variables.copilot.custom_agents_short %}, such as the rubber duck agent, are consulted automatically by {% data variables.product.prodname_copilot_short %} on your behalf rather than invoked by you directly. You won't see them as separate options when you run `/agent`, but you may see {% data variables.product.prodname_copilot_short %} mention them as it works through a task.
+
You can define your own {% data variables.copilot.custom_agents_short %} using Markdown files, called {% data variables.copilot.agent_profiles %}, that specify what expertise the agent should have, what tools it can use, and any specific instructions for how it should respond.
You can define {% data variables.copilot.custom_agents_short %} at the user, repository, or organization/enterprise level:
diff --git a/content/copilot/reference/copilot-cli-reference/cli-command-reference.md b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md
index a0450162490a..1d65433ffc1f 100644
--- a/content/copilot/reference/copilot-cli-reference/cli-command-reference.md
+++ b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md
@@ -589,7 +589,7 @@ Custom agents are specialized AI agents defined in Markdown files. The filename
| `explore` | claude-haiku-4.5 | Fast codebase exploration. Searches files, reads code, and answers questions. Returns focused answers under 300 words. Safe to run in parallel. |
| `general-purpose` | claude-sonnet-4.5 | Full-capability agent for complex multi-step tasks. Runs in a separate context window. |
| `research` | claude-sonnet-4.6 | Deep research agent. Generates a report based on information in your codebase, in relevant repositories, and on the web. |
-| `rubber-duck` | complementary model | Use a complementary model to provide a constructive critique of proposals, designs, implementations, or tests. Identifies weak points and suggests improvements. When using Claude, it uses a GPT model; when using GPT, it uses Claude Opus 4.7. Never makes direct code changes. {% data reusables.copilot.experimental %} |
+| `rubber-duck` | complementary model | Use a complementary model to provide a constructive critique of proposals, designs, implementations, or tests. Identifies weak points and suggests improvements. See [AUTOTITLE](/copilot/concepts/agents/copilot-cli/rubber-duck). |
| `task` | claude-haiku-4.5 | Command execution (tests, builds, lints). Returns brief summary on success, full output on failure. |
### Custom agent frontmatter fields
From 848387d938ca8920c60bc2e62f57e5184d929231 Mon Sep 17 00:00:00 2001
From: Sophie <29382425+sophietheking@users.noreply.github.com>
Date: Wed, 6 May 2026 14:25:30 +0200
Subject: [PATCH 10/13] Copilot Code Review Active and Passive User Counts [GA]
(#61025)
Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com>
---
.../concepts/copilot-usage-metrics/copilot-metrics.md | 3 ++-
.../copilot-usage-metrics/copilot-usage-metrics.md | 6 ++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/content/copilot/concepts/copilot-usage-metrics/copilot-metrics.md b/content/copilot/concepts/copilot-usage-metrics/copilot-metrics.md
index f5903da666fd..34c665b495b0 100644
--- a/content/copilot/concepts/copilot-usage-metrics/copilot-metrics.md
+++ b/content/copilot/concepts/copilot-usage-metrics/copilot-metrics.md
@@ -98,7 +98,7 @@ You can expect data to be available within **two full days**. This means that da
{% data variables.product.prodname_copilot_short %} usage metrics can be grouped into a few main categories: Adoption, engagement, acceptance rate, Lines of Code (LoC), and pull request lifecycle metrics.
-**Adoption** measures how many licensed developers are actively using {% data variables.product.prodname_copilot_short %}. For example, daily active users (DAU) tells you how many unique users interacted with {% data variables.product.prodname_copilot_short %} on a given day. Ideally, you'll see a consistent upward trend in these metrics during rollout.
+**Adoption** measures how many licensed developers are actively using {% data variables.product.prodname_copilot_short %}. For example, daily active users (DAU) tells you how many unique users interacted with {% data variables.product.prodname_copilot_short %} on a given day. Ideally, you'll see a consistent upward trend in these metrics during rollout. {% data variables.copilot.copilot_code-review_short %} adoption is tracked separately, with distinct active and passive user counts. Active users manually requested a review or applied a suggestion; passive users had {% data variables.copilot.copilot_code-review_short %} automatically assigned to review their pull request. When a user has both signals in the same period, they are counted as active only.
**Engagement** measures describe how deeply developers use {% data variables.product.prodname_copilot_short %} once they’ve adopted it. Key engagement metrics show not only frequency of use but also breadth across features. For example, average chat requests per active user measures how often users open and interact with {% data variables.copilot.copilot_chat_short %}. You'd want to see regular and increasing chat use across languages and IDEs.
@@ -127,6 +127,7 @@ These metrics can be used together to answer key questions about your teams' usa
| Do developers trust {% data variables.product.prodname_copilot_short %}’s output? | Acceptance rate trends |
| Are enablement efforts working? | Growth in adoption and engagement after training or communication campaigns |
| Is {% data variables.product.prodname_copilot_short %} influencing delivery speed or pull request throughput? | Pull request merge counts and median time to merge |
+| How is {% data variables.copilot.copilot_code-review_short %} being adopted? | Active versus passive code review user counts |
Look for patterns across these signals rather than focusing on any single number. For example, a steady DAU paired with a rising acceptance rate indicates growing trust and value.
diff --git a/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md b/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md
index 9327ebbb7ed7..3e8fefea1828 100644
--- a/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md
+++ b/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md
@@ -92,6 +92,12 @@ For example schemas of the data returned by the APIs, see [AUTOTITLE](/copilot/r
| `totals_by_model_feature` / `totals_by_language_model` | Model-specific breakdowns for chat activity (not completions). When {% data variables.copilot.copilot_auto_model_selection_short %} is enabled, activity is attributed to the actual model used rather than appearing as `Auto`. |
| `last_known_ide_version` / `last_known_plugin_version` | The most recent IDE and {% data variables.copilot.copilot_chat_short %} extension version detected for each user. |
| `daily_active_cli_users` | Number of unique users in the enterprise or organization who used {% data variables.product.prodname_copilot_short %} via the CLI on a given day. This field is **independent** of IDE active user counts and is **not** included in IDE-based active user definitions. Omitted for enterprises or organizations with no CLI usage on that day. |
+| `daily_active_copilot_code_review_users` | Number of unique users who actively used {% data variables.copilot.copilot_code-review_short %} on a given day. Active usage means manually requesting a review or applying a suggestion. When a user has both active and passive signals in the same period, they are counted as active only. |
+| `daily_passive_copilot_code_review_users` | Number of unique users who had {% data variables.copilot.copilot_code-review_short %} automatically assigned to review their pull request on a given day, with no active engagement. |
+| `weekly_active_copilot_code_review_users` | Number of unique users who actively used {% data variables.copilot.copilot_code-review_short %} during a trailing seven-day window. When a user has both active and passive signals in the same period, they are counted as active only. |
+| `weekly_passive_copilot_code_review_users` | Number of unique users who had {% data variables.copilot.copilot_code-review_short %} automatically assigned to review their pull request during a trailing seven-day window, with no active engagement. |
+| `monthly_active_copilot_code_review_users` | Number of unique users who actively used {% data variables.copilot.copilot_code-review_short %} during a trailing 28-day window. When a user has both active and passive signals in the same period, they are counted as active only. |
+| `monthly_passive_copilot_code_review_users` | Number of unique users who had {% data variables.copilot.copilot_code-review_short %} automatically assigned to review their pull request during a trailing 28-day window, with no active engagement. |
| `totals_by_cli` | Breakdown of CLI-specific metrics for the enterprise, organization, or user on a given day. Independent of IDE metrics—CLI usage is **not** reflected in other fields such as `totals_by_ide` or `totals_by_feature`. Omitted when there's no CLI usage on that day. See [{% data variables.copilot.copilot_cli_short %} metrics fields](#copilot-cli-metrics-fields-api-only) below. |
| `used_cli` | Captures whether the user has used {% data variables.copilot.copilot_cli_short %} that day. |
| `used_agent` | Captures whether the user has used agent mode in the IDE that day. Does not include {% data variables.copilot.copilot_code-review_short %} activity, which is captured separately in `used_copilot_code_review_active` and `used_copilot_code_review_passive`. |
From 64777314910579e2c90a744437c4f04121a31755 Mon Sep 17 00:00:00 2001
From: docs-bot <77750099+docs-bot@users.noreply.github.com>
Date: Wed, 6 May 2026 05:56:43 -0700
Subject: [PATCH 11/13] Update OpenAPI Description (#61061)
Co-authored-by: Tim Rogers
Co-authored-by: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---
content/rest/actions/concurrency-groups.md | 14 +
content/rest/actions/index.md | 1 +
content/rest/agent-tasks/agent-tasks.md | 14 +
content/rest/agent-tasks/index.md | 12 +
content/rest/index.md | 1 +
.../fine-grained-pat-permissions.json | 27 +
.../data/fpt-2022-11-28/fine-grained-pat.json | 18 +
.../server-to-server-permissions.json | 33 +
.../fpt-2022-11-28/server-to-server-rest.json | 18 +
.../fpt-2022-11-28/user-to-server-rest.json | 18 +
.../fine-grained-pat-permissions.json | 27 +
.../data/fpt-2026-03-10/fine-grained-pat.json | 18 +
.../server-to-server-permissions.json | 33 +
.../fpt-2026-03-10/server-to-server-rest.json | 18 +
.../fpt-2026-03-10/user-to-server-rest.json | 18 +
.../fine-grained-pat-permissions.json | 27 +
.../ghec-2022-11-28/fine-grained-pat.json | 18 +
.../server-to-server-permissions.json | 33 +
.../server-to-server-rest.json | 18 +
.../ghec-2022-11-28/user-to-server-rest.json | 18 +
.../fine-grained-pat-permissions.json | 27 +
.../ghec-2026-03-10/fine-grained-pat.json | 18 +
.../server-to-server-permissions.json | 33 +
.../server-to-server-rest.json | 18 +
.../ghec-2026-03-10/user-to-server-rest.json | 18 +
src/github-apps/lib/config.json | 2 +-
.../lib/static/redirect-exceptions.txt | 5 -
src/rest/data/fpt-2022-11-28/actions.json | 657 ++++++
src/rest/data/fpt-2022-11-28/agent-tasks.json | 1994 +++++++++++++++++
src/rest/data/fpt-2022-11-28/orgs.json | 8 +-
.../fpt-2022-11-28/private-registries.json | 80 +-
.../data/fpt-2022-11-28/secret-scanning.json | 22 +
src/rest/data/fpt-2026-03-10/actions.json | 657 ++++++
src/rest/data/fpt-2026-03-10/agent-tasks.json | 1994 +++++++++++++++++
src/rest/data/fpt-2026-03-10/orgs.json | 8 +-
.../fpt-2026-03-10/private-registries.json | 80 +-
.../data/fpt-2026-03-10/secret-scanning.json | 22 +
src/rest/data/ghec-2022-11-28/actions.json | 657 ++++++
.../data/ghec-2022-11-28/agent-tasks.json | 1994 +++++++++++++++++
src/rest/data/ghec-2022-11-28/orgs.json | 8 +-
.../ghec-2022-11-28/private-registries.json | 80 +-
.../data/ghec-2022-11-28/secret-scanning.json | 31 +
src/rest/data/ghec-2026-03-10/actions.json | 657 ++++++
.../data/ghec-2026-03-10/agent-tasks.json | 1994 +++++++++++++++++
src/rest/data/ghec-2026-03-10/orgs.json | 8 +-
.../ghec-2026-03-10/private-registries.json | 80 +-
.../data/ghec-2026-03-10/secret-scanning.json | 31 +
.../data/ghes-3.15-2022-11-28/actions.json | 6 +
.../ghes-3.15-2022-11-28/secret-scanning.json | 4 +
.../data/ghes-3.16-2022-11-28/actions.json | 6 +
.../private-registries.json | 39 +-
.../ghes-3.16-2022-11-28/secret-scanning.json | 4 +
.../data/ghes-3.17-2022-11-28/actions.json | 6 +
.../private-registries.json | 39 +-
.../ghes-3.17-2022-11-28/secret-scanning.json | 4 +
.../data/ghes-3.18-2022-11-28/actions.json | 6 +
.../private-registries.json | 80 +-
.../ghes-3.18-2022-11-28/secret-scanning.json | 4 +
.../data/ghes-3.19-2022-11-28/actions.json | 6 +
.../private-registries.json | 80 +-
.../ghes-3.19-2022-11-28/secret-scanning.json | 4 +
.../data/ghes-3.20-2022-11-28/actions.json | 6 +
.../private-registries.json | 80 +-
.../ghes-3.20-2022-11-28/secret-scanning.json | 4 +
src/rest/lib/config.json | 2 +-
src/webhooks/lib/config.json | 2 +-
66 files changed, 11838 insertions(+), 111 deletions(-)
create mode 100644 content/rest/actions/concurrency-groups.md
create mode 100644 content/rest/agent-tasks/agent-tasks.md
create mode 100644 content/rest/agent-tasks/index.md
create mode 100644 src/rest/data/fpt-2022-11-28/agent-tasks.json
create mode 100644 src/rest/data/fpt-2026-03-10/agent-tasks.json
create mode 100644 src/rest/data/ghec-2022-11-28/agent-tasks.json
create mode 100644 src/rest/data/ghec-2026-03-10/agent-tasks.json
diff --git a/content/rest/actions/concurrency-groups.md b/content/rest/actions/concurrency-groups.md
new file mode 100644
index 000000000000..d245e5f0ab49
--- /dev/null
+++ b/content/rest/actions/concurrency-groups.md
@@ -0,0 +1,14 @@
+---
+title: REST API endpoints for Actions concurrency groups
+shortTitle: Actions concurrency groups
+intro: Use the REST API to view and manage concurrency groups for GitHub Actions workflows.
+versions: # DO NOT MANUALLY EDIT. CHANGES WILL BE OVERWRITTEN BY A 🤖
+ fpt: '*'
+ ghec: '*'
+autogenerated: rest
+allowTitleToDifferFromFilename: true
+category:
+ - Automate CI/CD workflows
+---
+
+
diff --git a/content/rest/actions/index.md b/content/rest/actions/index.md
index d7cc7ac3ce31..4c9bd61341af 100644
--- a/content/rest/actions/index.md
+++ b/content/rest/actions/index.md
@@ -15,6 +15,7 @@ versions:
children:
- /artifacts
- /cache
+ - /concurrency-groups
- /hosted-runners
- /oidc
- /permissions
diff --git a/content/rest/agent-tasks/agent-tasks.md b/content/rest/agent-tasks/agent-tasks.md
new file mode 100644
index 000000000000..e5fe6c835765
--- /dev/null
+++ b/content/rest/agent-tasks/agent-tasks.md
@@ -0,0 +1,14 @@
+---
+title: REST API endpoints for agent tasks
+shortTitle: Agent tasks
+intro: Use the REST API to start and manage {% data variables.copilot.copilot_cloud_agent %} tasks
+versions: # DO NOT MANUALLY EDIT. CHANGES WILL BE OVERWRITTEN BY A 🤖
+ fpt: '*'
+ ghec: '*'
+autogenerated: rest
+allowTitleToDifferFromFilename: true
+category:
+ - Use Copilot and AI services
+---
+
+
diff --git a/content/rest/agent-tasks/index.md b/content/rest/agent-tasks/index.md
new file mode 100644
index 000000000000..ae64798f7d74
--- /dev/null
+++ b/content/rest/agent-tasks/index.md
@@ -0,0 +1,12 @@
+---
+title: REST API endpoints for agent tasks
+shortTitle: Agent tasks
+autogenerated: rest
+allowTitleToDifferFromFilename: true
+children:
+ - /agent-tasks
+versions:
+ fpt: '*'
+ ghec: '*'
+---
+
diff --git a/content/rest/index.md b/content/rest/index.md
index 019daa3d7699..c48c155dd0d1 100644
--- a/content/rest/index.md
+++ b/content/rest/index.md
@@ -49,6 +49,7 @@ children:
- /guides
- /actions
- /activity
+ - /agent-tasks
- /announcement-banners
- /apps
- /billing
diff --git a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json
index ec3f990cc4cd..4b097db480dc 100644
--- a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json
+++ b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json
@@ -3306,6 +3306,24 @@
"additional-permissions": false,
"access": "write"
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups",
+ "additional-permissions": false,
+ "access": "read"
+ },
+ {
+ "category": "actions",
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}",
+ "additional-permissions": false,
+ "access": "read"
+ },
{
"category": "actions",
"slug": "get-a-job-for-a-workflow-run",
@@ -3441,6 +3459,15 @@
"additional-permissions": false,
"access": "write"
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups",
+ "additional-permissions": false,
+ "access": "read"
+ },
{
"category": "actions",
"slug": "force-cancel-a-workflow-run",
diff --git a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json
index 5529b670de5f..666c87c9c771 100644
--- a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json
+++ b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json
@@ -630,6 +630,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -888,6 +900,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "force-cancel-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json b/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json
index 55279401e371..5ee6e1c47146 100644
--- a/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json
+++ b/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json
@@ -4347,6 +4347,28 @@
"server-to-server": true,
"additional-permissions": false
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
+ {
+ "category": "actions",
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
{
"category": "actions",
"slug": "get-a-job-for-a-workflow-run",
@@ -4512,6 +4534,17 @@
"server-to-server": true,
"additional-permissions": false
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
{
"category": "actions",
"slug": "force-cancel-a-workflow-run",
diff --git a/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json b/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json
index 28a0b3c57ca6..0c0e60cf67f7 100644
--- a/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json
+++ b/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json
@@ -672,6 +672,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -930,6 +942,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "review-custom-deployment-protection-rules-for-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json b/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json
index b489d58212b5..c60af9234b33 100644
--- a/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json
+++ b/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json
@@ -672,6 +672,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -930,6 +942,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "force-cancel-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/fpt-2026-03-10/fine-grained-pat-permissions.json b/src/github-apps/data/fpt-2026-03-10/fine-grained-pat-permissions.json
index ec3f990cc4cd..4b097db480dc 100644
--- a/src/github-apps/data/fpt-2026-03-10/fine-grained-pat-permissions.json
+++ b/src/github-apps/data/fpt-2026-03-10/fine-grained-pat-permissions.json
@@ -3306,6 +3306,24 @@
"additional-permissions": false,
"access": "write"
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups",
+ "additional-permissions": false,
+ "access": "read"
+ },
+ {
+ "category": "actions",
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}",
+ "additional-permissions": false,
+ "access": "read"
+ },
{
"category": "actions",
"slug": "get-a-job-for-a-workflow-run",
@@ -3441,6 +3459,15 @@
"additional-permissions": false,
"access": "write"
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups",
+ "additional-permissions": false,
+ "access": "read"
+ },
{
"category": "actions",
"slug": "force-cancel-a-workflow-run",
diff --git a/src/github-apps/data/fpt-2026-03-10/fine-grained-pat.json b/src/github-apps/data/fpt-2026-03-10/fine-grained-pat.json
index 5529b670de5f..666c87c9c771 100644
--- a/src/github-apps/data/fpt-2026-03-10/fine-grained-pat.json
+++ b/src/github-apps/data/fpt-2026-03-10/fine-grained-pat.json
@@ -630,6 +630,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -888,6 +900,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "force-cancel-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/fpt-2026-03-10/server-to-server-permissions.json b/src/github-apps/data/fpt-2026-03-10/server-to-server-permissions.json
index 55279401e371..5ee6e1c47146 100644
--- a/src/github-apps/data/fpt-2026-03-10/server-to-server-permissions.json
+++ b/src/github-apps/data/fpt-2026-03-10/server-to-server-permissions.json
@@ -4347,6 +4347,28 @@
"server-to-server": true,
"additional-permissions": false
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
+ {
+ "category": "actions",
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
{
"category": "actions",
"slug": "get-a-job-for-a-workflow-run",
@@ -4512,6 +4534,17 @@
"server-to-server": true,
"additional-permissions": false
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
{
"category": "actions",
"slug": "force-cancel-a-workflow-run",
diff --git a/src/github-apps/data/fpt-2026-03-10/server-to-server-rest.json b/src/github-apps/data/fpt-2026-03-10/server-to-server-rest.json
index 28a0b3c57ca6..0c0e60cf67f7 100644
--- a/src/github-apps/data/fpt-2026-03-10/server-to-server-rest.json
+++ b/src/github-apps/data/fpt-2026-03-10/server-to-server-rest.json
@@ -672,6 +672,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -930,6 +942,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "review-custom-deployment-protection-rules-for-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/fpt-2026-03-10/user-to-server-rest.json b/src/github-apps/data/fpt-2026-03-10/user-to-server-rest.json
index b489d58212b5..c60af9234b33 100644
--- a/src/github-apps/data/fpt-2026-03-10/user-to-server-rest.json
+++ b/src/github-apps/data/fpt-2026-03-10/user-to-server-rest.json
@@ -672,6 +672,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -930,6 +942,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "force-cancel-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json
index 10f9dd3a85ca..6a4101ca8fa9 100644
--- a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json
+++ b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json
@@ -3843,6 +3843,24 @@
"additional-permissions": false,
"access": "write"
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups",
+ "additional-permissions": false,
+ "access": "read"
+ },
+ {
+ "category": "actions",
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}",
+ "additional-permissions": false,
+ "access": "read"
+ },
{
"category": "actions",
"slug": "get-a-job-for-a-workflow-run",
@@ -3978,6 +3996,15 @@
"additional-permissions": false,
"access": "write"
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups",
+ "additional-permissions": false,
+ "access": "read"
+ },
{
"category": "actions",
"slug": "force-cancel-a-workflow-run",
diff --git a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat.json b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat.json
index 1442649db075..c671ba06b4e6 100644
--- a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat.json
+++ b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat.json
@@ -630,6 +630,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -888,6 +900,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "force-cancel-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json b/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json
index e49590ecc6a9..d1ea0a96992b 100644
--- a/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json
+++ b/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json
@@ -5652,6 +5652,28 @@
"server-to-server": true,
"additional-permissions": false
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
+ {
+ "category": "actions",
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
{
"category": "actions",
"slug": "get-a-job-for-a-workflow-run",
@@ -5817,6 +5839,17 @@
"server-to-server": true,
"additional-permissions": false
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
{
"category": "actions",
"slug": "force-cancel-a-workflow-run",
diff --git a/src/github-apps/data/ghec-2022-11-28/server-to-server-rest.json b/src/github-apps/data/ghec-2022-11-28/server-to-server-rest.json
index 6341e24319e3..b5d70af3d81e 100644
--- a/src/github-apps/data/ghec-2022-11-28/server-to-server-rest.json
+++ b/src/github-apps/data/ghec-2022-11-28/server-to-server-rest.json
@@ -684,6 +684,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -942,6 +954,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "review-custom-deployment-protection-rules-for-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/ghec-2022-11-28/user-to-server-rest.json b/src/github-apps/data/ghec-2022-11-28/user-to-server-rest.json
index 793f8b615901..ee0d4a4d7d81 100644
--- a/src/github-apps/data/ghec-2022-11-28/user-to-server-rest.json
+++ b/src/github-apps/data/ghec-2022-11-28/user-to-server-rest.json
@@ -684,6 +684,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -942,6 +954,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "force-cancel-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/ghec-2026-03-10/fine-grained-pat-permissions.json b/src/github-apps/data/ghec-2026-03-10/fine-grained-pat-permissions.json
index 10f9dd3a85ca..6a4101ca8fa9 100644
--- a/src/github-apps/data/ghec-2026-03-10/fine-grained-pat-permissions.json
+++ b/src/github-apps/data/ghec-2026-03-10/fine-grained-pat-permissions.json
@@ -3843,6 +3843,24 @@
"additional-permissions": false,
"access": "write"
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups",
+ "additional-permissions": false,
+ "access": "read"
+ },
+ {
+ "category": "actions",
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}",
+ "additional-permissions": false,
+ "access": "read"
+ },
{
"category": "actions",
"slug": "get-a-job-for-a-workflow-run",
@@ -3978,6 +3996,15 @@
"additional-permissions": false,
"access": "write"
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups",
+ "additional-permissions": false,
+ "access": "read"
+ },
{
"category": "actions",
"slug": "force-cancel-a-workflow-run",
diff --git a/src/github-apps/data/ghec-2026-03-10/fine-grained-pat.json b/src/github-apps/data/ghec-2026-03-10/fine-grained-pat.json
index 1442649db075..c671ba06b4e6 100644
--- a/src/github-apps/data/ghec-2026-03-10/fine-grained-pat.json
+++ b/src/github-apps/data/ghec-2026-03-10/fine-grained-pat.json
@@ -630,6 +630,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -888,6 +900,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "force-cancel-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/ghec-2026-03-10/server-to-server-permissions.json b/src/github-apps/data/ghec-2026-03-10/server-to-server-permissions.json
index e49590ecc6a9..d1ea0a96992b 100644
--- a/src/github-apps/data/ghec-2026-03-10/server-to-server-permissions.json
+++ b/src/github-apps/data/ghec-2026-03-10/server-to-server-permissions.json
@@ -5652,6 +5652,28 @@
"server-to-server": true,
"additional-permissions": false
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
+ {
+ "category": "actions",
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
{
"category": "actions",
"slug": "get-a-job-for-a-workflow-run",
@@ -5817,6 +5839,17 @@
"server-to-server": true,
"additional-permissions": false
},
+ {
+ "category": "actions",
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups",
+ "access": "read",
+ "user-to-server": true,
+ "server-to-server": true,
+ "additional-permissions": false
+ },
{
"category": "actions",
"slug": "force-cancel-a-workflow-run",
diff --git a/src/github-apps/data/ghec-2026-03-10/server-to-server-rest.json b/src/github-apps/data/ghec-2026-03-10/server-to-server-rest.json
index 6341e24319e3..b5d70af3d81e 100644
--- a/src/github-apps/data/ghec-2026-03-10/server-to-server-rest.json
+++ b/src/github-apps/data/ghec-2026-03-10/server-to-server-rest.json
@@ -684,6 +684,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -942,6 +954,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "review-custom-deployment-protection-rules-for-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/data/ghec-2026-03-10/user-to-server-rest.json b/src/github-apps/data/ghec-2026-03-10/user-to-server-rest.json
index 793f8b615901..ee0d4a4d7d81 100644
--- a/src/github-apps/data/ghec-2026-03-10/user-to-server-rest.json
+++ b/src/github-apps/data/ghec-2026-03-10/user-to-server-rest.json
@@ -684,6 +684,18 @@
"verb": "delete",
"requestPath": "/repos/{owner}/{repo}/actions/caches/{cache_id}"
},
+ {
+ "slug": "list-concurrency-groups-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups"
+ },
+ {
+ "slug": "get-a-concurrency-group-for-a-repository",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}"
+ },
{
"slug": "get-a-job-for-a-workflow-run",
"subcategory": "workflow-jobs",
@@ -942,6 +954,12 @@
"verb": "post",
"requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
},
+ {
+ "slug": "list-concurrency-groups-for-a-workflow-run",
+ "subcategory": "concurrency-groups",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups"
+ },
{
"slug": "force-cancel-a-workflow-run",
"subcategory": "workflow-runs",
diff --git a/src/github-apps/lib/config.json b/src/github-apps/lib/config.json
index 2ec27eb13dc2..1ccc0c154967 100644
--- a/src/github-apps/lib/config.json
+++ b/src/github-apps/lib/config.json
@@ -60,5 +60,5 @@
"2022-11-28"
]
},
- "sha": "d3a3c2a50bb45b5f437bdfd8e0c700091bb1fb7b"
+ "sha": "12330abe1a9651268439945b92312855bb071532"
}
\ No newline at end of file
diff --git a/src/redirects/lib/static/redirect-exceptions.txt b/src/redirects/lib/static/redirect-exceptions.txt
index 7bf99b7f62f6..9f7a56931291 100644
--- a/src/redirects/lib/static/redirect-exceptions.txt
+++ b/src/redirects/lib/static/redirect-exceptions.txt
@@ -48,8 +48,3 @@
- /github-ae@latest/admin/overview/about-data-residency
- /github-ae@latest/admin/overview/deploying-github-ae
- /github-ae@latest/admin/overview/initializing-github-ae
-
-# Agent tasks REST API was rolled back before launch
-/rest
-- /rest/agent-tasks
-- /rest/agent-tasks/agent-tasks
diff --git a/src/rest/data/fpt-2022-11-28/actions.json b/src/rest/data/fpt-2022-11-28/actions.json
index 0a0b8005c020..18a98ba54ed3 100644
--- a/src/rest/data/fpt-2022-11-28/actions.json
+++ b/src/rest/data/fpt-2022-11-28/actions.json
@@ -2520,6 +2520,657 @@
}
}
],
+ "concurrency-groups": [
+ {
+ "serverUrl": "https://api.github.com",
+ "verb": "get",
+ "requestPath": "/repos/{owner}/{repo}/actions/concurrency_groups",
+ "title": "List concurrency groups for a repository",
+ "category": "actions",
+ "subcategory": "concurrency-groups",
+ "parameters": [
+ {
+ "name": "owner",
+ "description": "
The account owner of the repository. The name is not case sensitive.
Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with ahead_of_job.
Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with ahead_of_run.
Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.
\n
Optionally, pass ahead_of_run or ahead_of_job to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.
\n
When using ahead_of_run, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use ahead_of_job to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
A cursor, as given in the Link header. If specified, the query only searches for results before this cursor. For more information, see \"Using pagination in the REST API.\"
Lists all concurrency groups associated with a workflow run or its jobs.
\n
The set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the group_members array will be empty.\ntotal_count reflects the number of groups the run participates in by\nconfiguration, not the number with active items.
\n
This differs from GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name},\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.
\n
Results are sorted by group name and support cursor-based pagination via\nbefore and after. The after cursor paginates forward only and does\nnot emit a rel=\"prev\" Link; use before to page backward from a\nforward page's next cursor.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
Comma-separated list of task states to filter by. Can be any combination of: queued, in_progress, completed, failed, idle, waiting_for_user, timed_out, cancelled.
The model to use for this task. The allowed models may change over time and depend on the user's GitHub Copilot plan and organization policies. Currently supported values: claude-sonnet-4.6, claude-opus-4.6, gpt-5.2-codex, gpt-5.3-codex, gpt-5.4, claude-sonnet-4.5, claude-opus-4.5
Comma-separated list of task states to filter by. Can be any combination of: queued, in_progress, completed, failed, idle, waiting_for_user, timed_out, cancelled.
"
+ }
+ ],
+ "previews": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/rest/data/fpt-2022-11-28/orgs.json b/src/rest/data/fpt-2022-11-28/orgs.json
index 08510d45c578..d4b83b4bef45 100644
--- a/src/rest/data/fpt-2022-11-28/orgs.json
+++ b/src/rest/data/fpt-2022-11-28/orgs.json
@@ -5561,19 +5561,19 @@
{
"type": "string",
"name": "name",
- "description": "
The name of the artifact. Note that if multiple deployments have identical 'digest' parameter values,\nthe name parameter must also be identical across all entries.
The hex encoded digest of the artifact. Note that if multiple deployments have identical 'digest' parameter values,\nthe name and version parameters must also be identical across all entries.
The artifact version. Note that if multiple deployments have identical 'digest' parameter values,\nthe version parameter must also be identical across all entries.
Set deployment records for a given cluster.\nIf proposed records in the 'deployments' field have identical 'cluster', 'logical_environment',\n'physical_environment', and 'deployment_name' values as existing records, the existing records will be updated.\nIf no existing records match, new records will be created.
",
+ "descriptionHTML": "
Set deployment records for a given cluster.\nIf proposed records in the 'deployments' field have identical 'cluster', 'logical_environment',\n'physical_environment', and 'deployment_name' values as existing records, the existing records will be updated.\nIf no existing records match, new records will be created.\nNote: Artifacts are uniquely identified by the combination of their repository and digest fields. If two entries in the deployments\narray resolve to the same repository and have identical digest fields but differing name and version fields, the endpoint will use\nthe artifact name and version from the record processed first, since a single artifact (identified by repository and digest) can\nonly have one name and version.
",
"codeExamples": [
{
"request": {
diff --git a/src/rest/data/fpt-2022-11-28/private-registries.json b/src/rest/data/fpt-2022-11-28/private-registries.json
index 4a2241ec4b4a..5fe0e8fe34cf 100644
--- a/src/rest/data/fpt-2022-11-28/private-registries.json
+++ b/src/rest/data/fpt-2022-11-28/private-registries.json
@@ -114,7 +114,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -196,6 +197,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -333,14 +342,15 @@
{
"type": "string",
"name": "auth_type",
- "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith for OIDC authentication.
",
+ "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp for OIDC authentication.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
"codeExamples": [
{
"request": {
@@ -483,7 +503,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -569,6 +590,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -659,7 +688,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -745,6 +775,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -959,7 +997,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -1041,6 +1080,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -1184,7 +1231,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
]
},
{
@@ -1230,7 +1278,7 @@
{
"type": "string",
"name": "audience",
- "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and required for oidc_cloudsmith auth types.
"
+ "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and oidc_gcp, and required for oidc_cloudsmith auth types.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with ahead_of_job.
Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with ahead_of_run.
Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.
\n
Optionally, pass ahead_of_run or ahead_of_job to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.
\n
When using ahead_of_run, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use ahead_of_job to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
A cursor, as given in the Link header. If specified, the query only searches for results before this cursor. For more information, see \"Using pagination in the REST API.\"
Lists all concurrency groups associated with a workflow run or its jobs.
\n
The set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the group_members array will be empty.\ntotal_count reflects the number of groups the run participates in by\nconfiguration, not the number with active items.
\n
This differs from GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name},\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.
\n
Results are sorted by group name and support cursor-based pagination via\nbefore and after. The after cursor paginates forward only and does\nnot emit a rel=\"prev\" Link; use before to page backward from a\nforward page's next cursor.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
Comma-separated list of task states to filter by. Can be any combination of: queued, in_progress, completed, failed, idle, waiting_for_user, timed_out, cancelled.
The model to use for this task. The allowed models may change over time and depend on the user's GitHub Copilot plan and organization policies. Currently supported values: claude-sonnet-4.6, claude-opus-4.6, gpt-5.2-codex, gpt-5.3-codex, gpt-5.4, claude-sonnet-4.5, claude-opus-4.5
Comma-separated list of task states to filter by. Can be any combination of: queued, in_progress, completed, failed, idle, waiting_for_user, timed_out, cancelled.
"
+ }
+ ],
+ "previews": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/rest/data/fpt-2026-03-10/orgs.json b/src/rest/data/fpt-2026-03-10/orgs.json
index 77e8e98d98b3..eaf051c33cdb 100644
--- a/src/rest/data/fpt-2026-03-10/orgs.json
+++ b/src/rest/data/fpt-2026-03-10/orgs.json
@@ -5547,19 +5547,19 @@
{
"type": "string",
"name": "name",
- "description": "
The name of the artifact. Note that if multiple deployments have identical 'digest' parameter values,\nthe name parameter must also be identical across all entries.
The hex encoded digest of the artifact. Note that if multiple deployments have identical 'digest' parameter values,\nthe name and version parameters must also be identical across all entries.
The artifact version. Note that if multiple deployments have identical 'digest' parameter values,\nthe version parameter must also be identical across all entries.
Set deployment records for a given cluster.\nIf proposed records in the 'deployments' field have identical 'cluster', 'logical_environment',\n'physical_environment', and 'deployment_name' values as existing records, the existing records will be updated.\nIf no existing records match, new records will be created.
",
+ "descriptionHTML": "
Set deployment records for a given cluster.\nIf proposed records in the 'deployments' field have identical 'cluster', 'logical_environment',\n'physical_environment', and 'deployment_name' values as existing records, the existing records will be updated.\nIf no existing records match, new records will be created.\nNote: Artifacts are uniquely identified by the combination of their repository and digest fields. If two entries in the deployments\narray resolve to the same repository and have identical digest fields but differing name and version fields, the endpoint will use\nthe artifact name and version from the record processed first, since a single artifact (identified by repository and digest) can\nonly have one name and version.
",
"codeExamples": [
{
"request": {
diff --git a/src/rest/data/fpt-2026-03-10/private-registries.json b/src/rest/data/fpt-2026-03-10/private-registries.json
index 4a2241ec4b4a..5fe0e8fe34cf 100644
--- a/src/rest/data/fpt-2026-03-10/private-registries.json
+++ b/src/rest/data/fpt-2026-03-10/private-registries.json
@@ -114,7 +114,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -196,6 +197,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -333,14 +342,15 @@
{
"type": "string",
"name": "auth_type",
- "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith for OIDC authentication.
",
+ "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp for OIDC authentication.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
"codeExamples": [
{
"request": {
@@ -483,7 +503,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -569,6 +590,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -659,7 +688,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -745,6 +775,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -959,7 +997,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -1041,6 +1080,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -1184,7 +1231,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
]
},
{
@@ -1230,7 +1278,7 @@
{
"type": "string",
"name": "audience",
- "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and required for oidc_cloudsmith auth types.
"
+ "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and oidc_gcp, and required for oidc_cloudsmith auth types.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with ahead_of_job.
Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with ahead_of_run.
Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.
\n
Optionally, pass ahead_of_run or ahead_of_job to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.
\n
When using ahead_of_run, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use ahead_of_job to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
A cursor, as given in the Link header. If specified, the query only searches for results before this cursor. For more information, see \"Using pagination in the REST API.\"
Lists all concurrency groups associated with a workflow run or its jobs.
\n
The set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the group_members array will be empty.\ntotal_count reflects the number of groups the run participates in by\nconfiguration, not the number with active items.
\n
This differs from GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name},\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.
\n
Results are sorted by group name and support cursor-based pagination via\nbefore and after. The after cursor paginates forward only and does\nnot emit a rel=\"prev\" Link; use before to page backward from a\nforward page's next cursor.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
Comma-separated list of task states to filter by. Can be any combination of: queued, in_progress, completed, failed, idle, waiting_for_user, timed_out, cancelled.
The model to use for this task. The allowed models may change over time and depend on the user's GitHub Copilot plan and organization policies. Currently supported values: claude-sonnet-4.6, claude-opus-4.6, gpt-5.2-codex, gpt-5.3-codex, gpt-5.4, claude-sonnet-4.5, claude-opus-4.5
Comma-separated list of task states to filter by. Can be any combination of: queued, in_progress, completed, failed, idle, waiting_for_user, timed_out, cancelled.
"
+ }
+ ],
+ "previews": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/rest/data/ghec-2022-11-28/orgs.json b/src/rest/data/ghec-2022-11-28/orgs.json
index 44ec1db1690c..01fb473e4fd4 100644
--- a/src/rest/data/ghec-2022-11-28/orgs.json
+++ b/src/rest/data/ghec-2022-11-28/orgs.json
@@ -6183,19 +6183,19 @@
{
"type": "string",
"name": "name",
- "description": "
The name of the artifact. Note that if multiple deployments have identical 'digest' parameter values,\nthe name parameter must also be identical across all entries.
The hex encoded digest of the artifact. Note that if multiple deployments have identical 'digest' parameter values,\nthe name and version parameters must also be identical across all entries.
The artifact version. Note that if multiple deployments have identical 'digest' parameter values,\nthe version parameter must also be identical across all entries.
Set deployment records for a given cluster.\nIf proposed records in the 'deployments' field have identical 'cluster', 'logical_environment',\n'physical_environment', and 'deployment_name' values as existing records, the existing records will be updated.\nIf no existing records match, new records will be created.
",
+ "descriptionHTML": "
Set deployment records for a given cluster.\nIf proposed records in the 'deployments' field have identical 'cluster', 'logical_environment',\n'physical_environment', and 'deployment_name' values as existing records, the existing records will be updated.\nIf no existing records match, new records will be created.\nNote: Artifacts are uniquely identified by the combination of their repository and digest fields. If two entries in the deployments\narray resolve to the same repository and have identical digest fields but differing name and version fields, the endpoint will use\nthe artifact name and version from the record processed first, since a single artifact (identified by repository and digest) can\nonly have one name and version.
",
"codeExamples": [
{
"request": {
diff --git a/src/rest/data/ghec-2022-11-28/private-registries.json b/src/rest/data/ghec-2022-11-28/private-registries.json
index 7611ea603ce1..b7033ebf2b6d 100644
--- a/src/rest/data/ghec-2022-11-28/private-registries.json
+++ b/src/rest/data/ghec-2022-11-28/private-registries.json
@@ -114,7 +114,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -196,6 +197,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -333,14 +342,15 @@
{
"type": "string",
"name": "auth_type",
- "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith for OIDC authentication.
",
+ "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp for OIDC authentication.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
"codeExamples": [
{
"request": {
@@ -483,7 +503,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -569,6 +590,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -659,7 +688,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -745,6 +775,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -959,7 +997,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -1041,6 +1080,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -1184,7 +1231,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
]
},
{
@@ -1230,7 +1278,7 @@
{
"type": "string",
"name": "audience",
- "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and required for oidc_cloudsmith auth types.
"
+ "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and oidc_gcp, and required for oidc_cloudsmith auth types.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with ahead_of_job.
Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with ahead_of_run.
Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.
\n
Optionally, pass ahead_of_run or ahead_of_job to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.
\n
When using ahead_of_run, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use ahead_of_job to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
A cursor, as given in the Link header. If specified, the query only searches for results before this cursor. For more information, see \"Using pagination in the REST API.\"
Lists all concurrency groups associated with a workflow run or its jobs.
\n
The set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the group_members array will be empty.\ntotal_count reflects the number of groups the run participates in by\nconfiguration, not the number with active items.
\n
This differs from GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name},\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.
\n
Results are sorted by group name and support cursor-based pagination via\nbefore and after. The after cursor paginates forward only and does\nnot emit a rel=\"prev\" Link; use before to page backward from a\nforward page's next cursor.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint with a private repository.
Comma-separated list of task states to filter by. Can be any combination of: queued, in_progress, completed, failed, idle, waiting_for_user, timed_out, cancelled.
The model to use for this task. The allowed models may change over time and depend on the user's GitHub Copilot plan and organization policies. Currently supported values: claude-sonnet-4.6, claude-opus-4.6, gpt-5.2-codex, gpt-5.3-codex, gpt-5.4, claude-sonnet-4.5, claude-opus-4.5
Comma-separated list of task states to filter by. Can be any combination of: queued, in_progress, completed, failed, idle, waiting_for_user, timed_out, cancelled.
"
+ }
+ ],
+ "previews": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/rest/data/ghec-2026-03-10/orgs.json b/src/rest/data/ghec-2026-03-10/orgs.json
index caec43e1968e..4e9746ff155e 100644
--- a/src/rest/data/ghec-2026-03-10/orgs.json
+++ b/src/rest/data/ghec-2026-03-10/orgs.json
@@ -6169,19 +6169,19 @@
{
"type": "string",
"name": "name",
- "description": "
The name of the artifact. Note that if multiple deployments have identical 'digest' parameter values,\nthe name parameter must also be identical across all entries.
The hex encoded digest of the artifact. Note that if multiple deployments have identical 'digest' parameter values,\nthe name and version parameters must also be identical across all entries.
The artifact version. Note that if multiple deployments have identical 'digest' parameter values,\nthe version parameter must also be identical across all entries.
Set deployment records for a given cluster.\nIf proposed records in the 'deployments' field have identical 'cluster', 'logical_environment',\n'physical_environment', and 'deployment_name' values as existing records, the existing records will be updated.\nIf no existing records match, new records will be created.
",
+ "descriptionHTML": "
Set deployment records for a given cluster.\nIf proposed records in the 'deployments' field have identical 'cluster', 'logical_environment',\n'physical_environment', and 'deployment_name' values as existing records, the existing records will be updated.\nIf no existing records match, new records will be created.\nNote: Artifacts are uniquely identified by the combination of their repository and digest fields. If two entries in the deployments\narray resolve to the same repository and have identical digest fields but differing name and version fields, the endpoint will use\nthe artifact name and version from the record processed first, since a single artifact (identified by repository and digest) can\nonly have one name and version.
",
"codeExamples": [
{
"request": {
diff --git a/src/rest/data/ghec-2026-03-10/private-registries.json b/src/rest/data/ghec-2026-03-10/private-registries.json
index 7611ea603ce1..b7033ebf2b6d 100644
--- a/src/rest/data/ghec-2026-03-10/private-registries.json
+++ b/src/rest/data/ghec-2026-03-10/private-registries.json
@@ -114,7 +114,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -196,6 +197,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -333,14 +342,15 @@
{
"type": "string",
"name": "auth_type",
- "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith for OIDC authentication.
",
+ "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp for OIDC authentication.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
"codeExamples": [
{
"request": {
@@ -483,7 +503,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -569,6 +590,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -659,7 +688,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -745,6 +775,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -959,7 +997,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -1041,6 +1080,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -1184,7 +1231,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
]
},
{
@@ -1230,7 +1278,7 @@
{
"type": "string",
"name": "audience",
- "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and required for oidc_cloudsmith auth types.
"
+ "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and oidc_gcp, and required for oidc_cloudsmith auth types.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
A boolean value (true or false) indicating whether to filter alerts by their push protection bypass status. When set to true, only alerts that were created because a push protection rule was bypassed will be returned. When set to false, only alerts that were not caused by a push protection bypass will be returned.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
Whether to enable the debugger for the re-run of this job.
",
+ "default": false
}
],
"descriptionHTML": "
Re-run a job and its dependent jobs in a workflow run.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint.
",
diff --git a/src/rest/data/ghes-3.18-2022-11-28/private-registries.json b/src/rest/data/ghes-3.18-2022-11-28/private-registries.json
index bb0a894f2913..6f11945f5a79 100644
--- a/src/rest/data/ghes-3.18-2022-11-28/private-registries.json
+++ b/src/rest/data/ghes-3.18-2022-11-28/private-registries.json
@@ -114,7 +114,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -196,6 +197,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -333,14 +342,15 @@
{
"type": "string",
"name": "auth_type",
- "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith for OIDC authentication.
",
+ "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp for OIDC authentication.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
"codeExamples": [
{
"request": {
@@ -483,7 +503,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -569,6 +590,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -659,7 +688,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -745,6 +775,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -959,7 +997,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -1041,6 +1080,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -1184,7 +1231,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
]
},
{
@@ -1230,7 +1278,7 @@
{
"type": "string",
"name": "audience",
- "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and required for oidc_cloudsmith auth types.
"
+ "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and oidc_gcp, and required for oidc_cloudsmith auth types.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
Whether to enable the debugger for the re-run of this job.
",
+ "default": false
}
],
"descriptionHTML": "
Re-run a job and its dependent jobs in a workflow run.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint.
",
diff --git a/src/rest/data/ghes-3.19-2022-11-28/private-registries.json b/src/rest/data/ghes-3.19-2022-11-28/private-registries.json
index 7bb905aeefff..ff94823dd05a 100644
--- a/src/rest/data/ghes-3.19-2022-11-28/private-registries.json
+++ b/src/rest/data/ghes-3.19-2022-11-28/private-registries.json
@@ -114,7 +114,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -196,6 +197,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -333,14 +342,15 @@
{
"type": "string",
"name": "auth_type",
- "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith for OIDC authentication.
",
+ "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp for OIDC authentication.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
"codeExamples": [
{
"request": {
@@ -483,7 +503,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -569,6 +590,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -659,7 +688,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -745,6 +775,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -959,7 +997,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -1041,6 +1080,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -1184,7 +1231,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
]
},
{
@@ -1230,7 +1278,7 @@
{
"type": "string",
"name": "audience",
- "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and required for oidc_cloudsmith auth types.
"
+ "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and oidc_gcp, and required for oidc_cloudsmith auth types.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
Whether to enable the debugger for the re-run of this job.
",
+ "default": false
}
],
"descriptionHTML": "
Re-run a job and its dependent jobs in a workflow run.
\n
OAuth app tokens and personal access tokens (classic) need the repo scope to use this endpoint.
",
diff --git a/src/rest/data/ghes-3.20-2022-11-28/private-registries.json b/src/rest/data/ghes-3.20-2022-11-28/private-registries.json
index 9de494597695..13602cb21ca1 100644
--- a/src/rest/data/ghes-3.20-2022-11-28/private-registries.json
+++ b/src/rest/data/ghes-3.20-2022-11-28/private-registries.json
@@ -114,7 +114,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -196,6 +197,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -333,14 +342,15 @@
{
"type": "string",
"name": "auth_type",
- "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith for OIDC authentication.
",
+ "description": "
The authentication type for the private registry. Defaults to token if not specified. Use oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp for OIDC authentication.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Creates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
"codeExamples": [
{
"request": {
@@ -483,7 +503,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -569,6 +590,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -659,7 +688,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -745,6 +775,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -959,7 +997,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
],
"type": "string"
},
@@ -1041,6 +1080,14 @@
"description": "The Cloudsmith API host.",
"type": "string"
},
+ "workload_identity_provider": {
+ "description": "The full resource name of the GCP Workload Identity Provider (e.g. `projects//locations/global/workloadIdentityPools//providers/`).",
+ "type": "string"
+ },
+ "service_account": {
+ "description": "The GCP service account email to impersonate. If omitted, the federated token is used directly (direct WIF).",
+ "type": "string"
+ },
"created_at": {
"type": "string",
"format": "date-time"
@@ -1184,7 +1231,8 @@
"oidc_azure",
"oidc_aws",
"oidc_jfrog",
- "oidc_cloudsmith"
+ "oidc_cloudsmith",
+ "oidc_gcp"
]
},
{
@@ -1230,7 +1278,7 @@
{
"type": "string",
"name": "audience",
- "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and required for oidc_cloudsmith auth types.
"
+ "description": "
The OIDC audience. Optional for oidc_aws, oidc_jfrog, and oidc_gcp, and required for oidc_cloudsmith auth types.
The full resource name of the GCP Workload Identity Provider (e.g. projects/<NUM>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>). Required when auth_type is oidc_gcp.
The GCP service account email to impersonate. Optional for oidc_gcp auth type. If omitted, the federated token is used directly (direct WIF).
"
}
],
- "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, or oidc_cloudsmith), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
",
+ "descriptionHTML": "
Updates a private registry configuration with an encrypted value for an organization. Encrypt your secret using LibSodium. For more information, see \"Encrypting secrets for the REST API.\"\nFor OIDC-based registries (oidc_azure, oidc_aws, oidc_jfrog, oidc_cloudsmith, or oidc_gcp), the encrypted_value and key_id fields should be omitted.
\n
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.
Repository is public, or secret scanning is disabled for the repository, or the resource is not found
"
diff --git a/src/rest/lib/config.json b/src/rest/lib/config.json
index f38c5a72271d..2412fd4706dd 100644
--- a/src/rest/lib/config.json
+++ b/src/rest/lib/config.json
@@ -52,5 +52,5 @@
]
}
},
- "sha": "d3a3c2a50bb45b5f437bdfd8e0c700091bb1fb7b"
+ "sha": "12330abe1a9651268439945b92312855bb071532"
}
\ No newline at end of file
diff --git a/src/webhooks/lib/config.json b/src/webhooks/lib/config.json
index 7b9bdef0a537..28574f6f1461 100644
--- a/src/webhooks/lib/config.json
+++ b/src/webhooks/lib/config.json
@@ -1,3 +1,3 @@
{
- "sha": "d3a3c2a50bb45b5f437bdfd8e0c700091bb1fb7b"
+ "sha": "12330abe1a9651268439945b92312855bb071532"
}
\ No newline at end of file
From 1e38a7841a45779818cb1f59e1f3615e38547719 Mon Sep 17 00:00:00 2001
From: Copilot <198982749+Copilot@users.noreply.github.com>
Date: Wed, 6 May 2026 15:01:30 +0200
Subject: [PATCH 12/13] Rename procedural-content-type.md to
how-to-content-type.md (#60310)
Co-authored-by: Thom Wong <101249231+supergranular@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Melanie Yarbrough <11952755+myarb@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.../contents-of-a-github-docs-article.md | 4 ++--
.../best-practices-for-github-docs.md | 12 ++++++------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/content/contributing/style-guide-and-content-model/contents-of-a-github-docs-article.md b/content/contributing/style-guide-and-content-model/contents-of-a-github-docs-article.md
index 569e1bd4e752..1605745ec623 100644
--- a/content/contributing/style-guide-and-content-model/contents-of-a-github-docs-article.md
+++ b/content/contributing/style-guide-and-content-model/contents-of-a-github-docs-article.md
@@ -140,9 +140,9 @@ Prerequisites are information that people need to know before proceeding with a
* [AUTOTITLE](/enterprise-server@latest/admin/installation/installing-github-enterprise-server-on-aws)
* [AUTOTITLE](/enterprise-server@latest/admin/configuration/enabling-subdomain-isolation)
-## Procedural content
+## How-to content
-Procedural content helps people complete tasks. For more information, see [AUTOTITLE](/contributing/style-guide-and-content-model/procedural-content-type) in the content model.
+How-to content helps people complete tasks. For more information, see [AUTOTITLE](/contributing/style-guide-and-content-model/how-to-content-type) in the content model.
## Troubleshooting content
diff --git a/content/contributing/writing-for-github-docs/best-practices-for-github-docs.md b/content/contributing/writing-for-github-docs/best-practices-for-github-docs.md
index d8f2136d3048..4707b88524bc 100644
--- a/content/contributing/writing-for-github-docs/best-practices-for-github-docs.md
+++ b/content/contributing/writing-for-github-docs/best-practices-for-github-docs.md
@@ -47,12 +47,12 @@ Before you begin, it’s important to understand who you’re writing for, what
Determine which type of content you will write, based on the intended audience and the core purpose of the content. {% data variables.product.prodname_docs %} use the following content types:
-* [Conceptual content](/contributing/style-guide-and-content-model/conceptual-content-type)
-* [Referential content](/contributing/style-guide-and-content-model/referential-content-type)
-* [Procedural content](/contributing/style-guide-and-content-model/procedural-content-type)
-* [Troubleshooting content](/contributing/style-guide-and-content-model/troubleshooting-content-type)
-* [Quickstart](/contributing/style-guide-and-content-model/quickstart-content-type)
-* [Tutorial](/contributing/style-guide-and-content-model/tutorial-content-type)
+* [AUTOTITLE](/contributing/style-guide-and-content-model/conceptual-content-type)
+* [AUTOTITLE](/contributing/style-guide-and-content-model/referential-content-type)
+* [AUTOTITLE](/contributing/style-guide-and-content-model/how-to-content-type)
+* [AUTOTITLE](/contributing/style-guide-and-content-model/troubleshooting-content-type)
+* [AUTOTITLE](/contributing/style-guide-and-content-model/quickstart-content-type)
+* [AUTOTITLE](/contributing/style-guide-and-content-model/tutorial-content-type)
For example, use the conceptual content type to help readers understand the basics of a feature or topic and how it can help them accomplish their goals. Use the procedural content type to help people complete a specific task from start to finish.
From aa7ef35bf5d2f2748f86b59f3becb718c0eb2846 Mon Sep 17 00:00:00 2001
From: hubwriter
Date: Wed, 6 May 2026 15:51:11 +0100
Subject: [PATCH 13/13] [2026-05-04] GitHub Mobile & GitHub.com: Remote Control
- view and steer CLI sessions [GA] (#60961)
Co-authored-by: Joe Clark <31087804+jc-clark@users.noreply.github.com>
---
.../agents/copilot-cli/about-remote-access.md | 91 -------------------
.../copilot-cli/about-remote-control.md | 80 ++++++++++++++++
.../concepts/agents/copilot-cli/index.md | 2 +-
content/copilot/how-tos/copilot-cli/index.md | 2 +-
.../use-copilot-cli/steer-remotely.md | 76 +++++++++-------
.../cli-command-reference.md | 2 +-
.../cli/remote-access-reconnection.md | 1 +
7 files changed, 125 insertions(+), 129 deletions(-)
delete mode 100644 content/copilot/concepts/agents/copilot-cli/about-remote-access.md
create mode 100644 content/copilot/concepts/agents/copilot-cli/about-remote-control.md
create mode 100644 data/reusables/cli/remote-access-reconnection.md
diff --git a/content/copilot/concepts/agents/copilot-cli/about-remote-access.md b/content/copilot/concepts/agents/copilot-cli/about-remote-access.md
deleted file mode 100644
index 5ba7f361ee8e..000000000000
--- a/content/copilot/concepts/agents/copilot-cli/about-remote-access.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-title: About remote access to {% data variables.copilot.copilot_cli %} sessions
-shortTitle: About remote access
-intro: 'Access a running {% data variables.copilot.copilot_cli_short %} session from {% data variables.product.prodname_dotcom_the_website %} or {% data variables.product.prodname_mobile %} to monitor and steer the session when you are away from the machine where the session is running.'
-versions:
- feature: copilot
-contentType: concepts
-category:
- - Learn about Copilot # Copilot discovery page
- - Learn about Copilot CLI # Copilot CLI bespoke page
-docsTeamMetrics:
- - copilot-cli
----
-
-This article explains the concepts around remote access to {% data variables.copilot.copilot_cli_short %} sessions. For instructions on how to enable remote access, see [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/steer-remotely).
-
-## Introduction
-
-When you start a {% data variables.copilot.copilot_cli %} session on your local machine, the session is normally only accessible from the terminal where you started it. However, you can enable remote access to the session from {% data variables.product.prodname_dotcom_the_website %} and {% data variables.product.prodname_mobile %}, allowing you to view the progress of a task that {% data variables.product.prodname_copilot_short %} is working on, and respond to prompts for more information, or requests for permissions.
-
-This is useful in scenarios such as:
-
-* **Leaving your workstation**: You started a session on your laptop and were then called away, or you finished work for the day, but you want to continue interacting with {% data variables.product.prodname_copilot_short %} without having to return to the machine.
-
-* **Monitoring a long-running task**: You started a complex task that will take time to complete, but didn't give {% data variables.product.prodname_copilot_short %} full permission to carry out every action. You need to periodically assess and respond to permission requests to allow a task to continue.
-
- To ensure the stability of the remote access feature there is a 60 MB limit on size of session output that is passed to the remote interface. As a result, very long-running sessions that generate large amounts of output may experience reduced performance in the remote interface. The local terminal session is unaffected.
-
-* **Quick access from a mobile device**: You're working on something else now but you're using {% data variables.product.prodname_mobile %} to provide an at-a-glance view of progress on a task you started in {% data variables.copilot.copilot_cli_short %}.
-
-{% data reusables.cli.public-preview-remote-access %}
-
-## Prerequisites
-
-Remote access requires:
-
-* **Policy enablement**: For users who have a {% data variables.product.prodname_copilot_short %} seat from an organization, remote access access is governed by policies set at the organization and enterprise level. The "Remote Control" policy is off by default but can be enabled by an enterprise or organization owner. See [Administering remote access](#administering-remote-access).
-* **A {% data variables.product.github %} repository**: The working directory where you started the CLI must contain a Git repository hosted on {% data variables.product.prodname_dotcom_the_website %}. If you attempt to enable remote access outside of a {% data variables.product.prodname_dotcom %} repository, the CLI displays the message: "Remote session disabled: not in a {% data variables.product.github %} repository"
-* **The machine must be online**: The CLI session must be actively running in a terminal on a machine with an internet connection. If the machine goes to sleep or loses its connection, remote access is unavailable until the machine is back online. See [Reconnection](#reconnection) later in this article.
-* **An interactive session**: Remote access is only available for interactive sessions. It is not available when you use the CLI programmatically with the `--prompt` command-line option, for example when you use the CLI in a script.
-
-## Accessing a session remotely
-
-When you enable remote access for a {% data variables.copilot.copilot_cli_short %} session, you can go to {% data variables.product.prodname_dotcom_the_website %} or {% data variables.product.prodname_mobile %} and find the session in the list of your recent agent sessions. The remote interface is updated in real time, allowing you to monitor ongoing output from the session and respond to prompts and permission requests as they come in.
-
-Both the local terminal and the remote interface are active at the same time. You can enter commands in either interface. {% data variables.copilot.copilot_cli_short %} uses the first response it receives to any prompt or permission request.
-
-Your session continues to run on your local machine. The remote interface provides a way to interact with the session, but the CLI itself—and all the tools, shell commands, and file operations it runs—remain on the machine where you started the session.
-
-## What you can do remotely
-
-When connected to a session remotely from {% data variables.product.prodname_dotcom_the_website %} or {% data variables.product.prodname_mobile %}, you can:
-
-* **Respond to permission requests**: Approve or deny tool, file path, and URL permission requests.
-* **Respond to questions**: Answer when {% data variables.product.prodname_copilot_short %} asks you to supply more information or make a decision.
-* **Approve or reject plans**: Respond to plan approval prompts when {% data variables.product.prodname_copilot_short %} is in plan mode.
-* **Submit new prompts**: Enter questions or instructions, just as you would in the terminal.
-* **Switch modes**: Change the session mode—for example, between interactive and plan mode.
-* **End the current operation**: Cancel the agent's current work.
-
-{% data reusables.cli.remote-access-slash-commands %}
-
-## Reconnection
-
-If the connection between your local machine and {% data variables.product.prodname_dotcom %} is temporarily lost—for example, due to a network interruption—you can continue using the session remotely as soon as the connection is restored.
-
-You can use the `/keep-alive` slash command to prevent your machine from going to sleep. See [Preventing your machine from going to sleep](/copilot/how-tos/copilot-cli/use-copilot-cli/steer-remotely#preventing-your-machine-from-going-to-sleep).
-
-If you closed a session that had remote access enabled, when you resume the session—either using `copilot --continue` or `copilot --resume=ID`—you must re-enable remote access. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/steer-remotely#resuming-a-session-with-remote-access).
-
-## Visibility of remote access sessions
-
-Remote access is only available to you—the person who is signed in to {% data variables.product.prodname_dotcom %} with the same account that started the CLI session. No one else can view or interact with your session remotely.
-
-### Points to note
-
-When you enable remote access:
-
-* Session events are sent from your local machine to {% data variables.product.prodname_dotcom %}. This includes conversation messages, tool execution events, and permission requests.
-* Remote commands are polled by {% data variables.copilot.copilot_cli_short %} from {% data variables.product.prodname_dotcom %} and injected into your local session.
-* The CLI itself continues to run locally. All shell commands, file operations, and tool executions happen on your machine—remote access does not grant any direct access to your local machine beyond what the CLI agent can do within the session.
-
-The remote session link (displayed in the CLI when you enable remote access) points to a session-specific URL on {% data variables.product.prodname_dotcom_the_website %}. Only authenticated users with the correct account can access this URL.
-
-## Administering remote access
-
-The ability for users enable remote access to their {% data variables.copilot.copilot_cli_short %} sessions can be controlled by policies in the enterprise or organization settings. Users who get {% data variables.product.prodname_copilot_short %} from an organization will not be able to use remote access if it has been disabled at the organization or enterprise level.
-
-The "Remote Control" policy is off by default, so it must be enabled by an enterprise or organization owner before users can start monitoring and steering their CLI sessions remotely.
-
-For more information about setting policies for your enterprise or organization, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies) and [AUTOTITLE](/copilot/how-tos/copilot-cli/administer-copilot-cli-for-your-enterprise).
diff --git a/content/copilot/concepts/agents/copilot-cli/about-remote-control.md b/content/copilot/concepts/agents/copilot-cli/about-remote-control.md
new file mode 100644
index 000000000000..b781f9240643
--- /dev/null
+++ b/content/copilot/concepts/agents/copilot-cli/about-remote-control.md
@@ -0,0 +1,80 @@
+---
+title: About remote control of {% data variables.copilot.copilot_cli %} sessions
+shortTitle: About remote control
+intro: 'Remote control lets you monitor and steer a {% data variables.copilot.copilot_cli_short %} session from {% data variables.product.prodname_dotcom_the_website %} or {% data variables.product.prodname_mobile %}, even after you''ve stepped away from your machine.'
+versions:
+ feature: copilot
+redirect_from:
+ - /copilot/concepts/agents/copilot-cli/about-remote-access
+contentType: concepts
+category:
+ - Learn about Copilot # Copilot discovery page
+ - Learn about Copilot CLI # Copilot CLI bespoke page
+docsTeamMetrics:
+ - copilot-cli
+---
+
+This article explains the concepts around remote control of {% data variables.copilot.copilot_cli_short %} sessions. For instructions on how to enable remote control, see [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/steer-remotely).
+
+## When remote control helps
+
+By default, {% data variables.copilot.copilot_cli %} sessions are only steerable from your local machine. However, you can enable remote control of the session. Remote control is useful when you want to view progress or respond to prompts and permission requests, without having to remain at the machine where the session is running. For example:
+
+* **You step away from your workstation**: Keep interacting with {% data variables.product.prodname_copilot_short %} from your phone or another device, without returning to the machine where the session is running.
+* **A long-running task needs your input**: Approve permission requests and answer questions as they come up, so the task isn't blocked while you're away.
+* **You want a quick status check**: Glance at session progress from {% data variables.product.prodname_mobile %} while you work on something else.
+
+## Prerequisites
+
+Remote control requires:
+
+* **Policy enablement**: If your {% data variables.product.prodname_copilot_short %} seat comes from an organization, an enterprise or organization owner must enable the "Remote Control" policy (off by default). See [Administering remote control](#administering-remote-control) later in this article.
+* **The machine must be online**: The CLI session must be actively running in a terminal on a machine with an internet connection. If the machine goes to sleep or loses its connection, remote control is unavailable until the machine is back online. See [Reconnection](#reconnection) later in this article.
+* **An interactive session**: Remote access is only available for interactive sessions. It is not available when you use the CLI programmatically with the `--prompt` command-line option, for example when you use the CLI in a script.
+
+## Accessing a session remotely
+
+When you enable remote control for a {% data variables.copilot.copilot_cli_short %} session, you can go to {% data variables.product.prodname_dotcom_the_website %} or {% data variables.product.prodname_mobile %} and find the session in the list of your recent agent sessions. The remote interface is updated in real time, allowing you to monitor ongoing output from the session and respond to prompts and permission requests as they come in.
+
+Both the local terminal and the remote interface are active at the same time. You can enter commands in either interface. {% data variables.copilot.copilot_cli_short %} uses the first response it receives to any prompt or permission request.
+
+Your session continues to run on your local machine. The remote interface provides a way to interact with the session, but the CLI itself—and all the tools, shell commands, and file operations it runs—remain on the machine where you started the session.
+
+## What you can do remotely
+
+When connected to a session remotely from {% data variables.product.prodname_dotcom_the_website %} or {% data variables.product.prodname_mobile %}, you can:
+
+* **Respond to permission requests**: Approve or deny tool, file path, and URL permission requests.
+* **Respond to questions**: Answer when {% data variables.product.prodname_copilot_short %} asks you to supply more information or make a decision.
+* **Approve or reject plans**: Respond to plan approval prompts when {% data variables.product.prodname_copilot_short %} is in plan mode.
+* **Submit new prompts**: Enter questions or instructions, just as you would in the terminal.
+* **Switch modes**: Change the session mode—for example, between interactive and plan mode.
+* **End the current operation**: Cancel the agent's current work.
+
+{% data reusables.cli.remote-access-slash-commands %}
+
+## Reconnection
+
+If the connection between your local machine and {% data variables.product.prodname_dotcom %} is temporarily lost—for example, due to a network interruption—you can continue using the session remotely as soon as the connection is restored.
+
+You can use the `/keep-alive` slash command to prevent your machine from going to sleep. See [Preventing your machine from going to sleep](/copilot/how-tos/copilot-cli/use-copilot-cli/steer-remotely#preventing-your-machine-from-going-to-sleep).
+
+{% data reusables.cli.remote-access-reconnection %}
+
+## Security and privacy
+
+Remote control is only available to you — the person signed in to {% data variables.product.prodname_dotcom %} with the same account that started the CLI session. No one else can view or interact with your sessions remotely. The session URL displayed in the CLI is session-specific and only accessible to authenticated users with the correct account.
+
+When remote control is enabled:
+
+* Session events (conversation messages, tool execution events, and permission requests) are sent from your local machine to {% data variables.product.prodname_dotcom %}.
+* Remote commands are polled by {% data variables.copilot.copilot_cli_short %} from {% data variables.product.prodname_dotcom %} and injected into your local session.
+* The CLI continues to run locally — all shell commands, file operations, and tool executions happen on your machine. Remote control does not grant direct access to your machine beyond what the CLI agent can do within the session.
+
+The remote session link (displayed in the CLI when you enable remote control) points to a session-specific URL on {% data variables.product.prodname_dotcom_the_website %}. Only authenticated users with the correct account can access this URL.
+
+## Administering remote control
+
+Enterprise and organization owners control whether users can enable remote control, using the "Remote Control" policy. This policy is off by default.
+
+For more information, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies) and [AUTOTITLE](/copilot/how-tos/copilot-cli/administer-copilot-cli-for-your-enterprise).
diff --git a/content/copilot/concepts/agents/copilot-cli/index.md b/content/copilot/concepts/agents/copilot-cli/index.md
index 27249ba410c0..74da9aca65d8 100644
--- a/content/copilot/concepts/agents/copilot-cli/index.md
+++ b/content/copilot/concepts/agents/copilot-cli/index.md
@@ -9,7 +9,7 @@ children:
- /about-copilot-cli
- /comparing-cli-features
- /cancel-and-roll-back
- - /about-remote-access
+ - /about-remote-control
- /about-custom-agents
- /about-cli-plugins
- /autopilot
diff --git a/content/copilot/how-tos/copilot-cli/index.md b/content/copilot/how-tos/copilot-cli/index.md
index 222aa795c285..76ef7c09f1a4 100644
--- a/content/copilot/how-tos/copilot-cli/index.md
+++ b/content/copilot/how-tos/copilot-cli/index.md
@@ -28,7 +28,7 @@ children:
- /content/copilot/concepts/agents/copilot-cli/about-cli-plugins
- /content/copilot/concepts/agents/copilot-cli/about-copilot-cli
- /content/copilot/concepts/agents/copilot-cli/about-custom-agents
- - /content/copilot/concepts/agents/copilot-cli/about-remote-access
+ - /content/copilot/concepts/agents/copilot-cli/about-remote-control
- /content/copilot/concepts/agents/copilot-cli/autopilot
- /content/copilot/concepts/agents/copilot-cli/cancel-and-roll-back
- /content/copilot/concepts/agents/copilot-cli/chronicle
diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/steer-remotely.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/steer-remotely.md
index 5ee4f8ae4b56..2844aee0dcce 100644
--- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/steer-remotely.md
+++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/steer-remotely.md
@@ -2,7 +2,7 @@
title: Steering a {% data variables.copilot.copilot_cli %} session from another device
shortTitle: Steer a session remotely
allowTitleToDifferFromFilename: true
-intro: 'Enable remote access to a {% data variables.copilot.copilot_cli_short %} session so you can monitor progress, respond to prompts, and continue working from {% data variables.product.prodname_dotcom_the_website %} or {% data variables.product.prodname_mobile %}.'
+intro: 'Enable remote control for a {% data variables.copilot.copilot_cli_short %} session so you can monitor progress, respond to prompts, and continue working from {% data variables.product.prodname_dotcom_the_website %} or {% data variables.product.prodname_mobile %}.'
versions:
feature: copilot
contentType: how-tos
@@ -15,11 +15,9 @@ docsTeamMetrics:
- copilot-cli
---
-Remote access lets you connect to a running {% data variables.copilot.copilot_cli_short %} session from any browser or from {% data variables.product.prodname_mobile %}. You can view session output, respond to permission requests, and continue working in the session without being at the machine where the session is running.
+Remote control lets you connect to a running {% data variables.copilot.copilot_cli_short %} session from any browser or from {% data variables.product.prodname_mobile %}. You can view session output, respond to permission requests, and continue working in the session without being at the machine where the session is running.
-This article explains how to enable and use remote access. For more conceptual information, see [AUTOTITLE](/copilot/concepts/agents/copilot-cli/about-remote-access).
-
-{% data reusables.cli.public-preview-remote-access %}
+This article explains how to enable and use remote control. For more conceptual information, see [AUTOTITLE](/copilot/concepts/agents/copilot-cli/about-remote-control).
## Prerequisites
@@ -30,24 +28,26 @@ This article explains how to enable and use remote access. For more conceptual i
* The working directory must contain a Git repository hosted on {% data variables.product.prodname_dotcom_the_website %}. If you are not in a {% data variables.product.prodname_dotcom %} repository, the CLI displays: "Remote session disabled: not in a {% data variables.product.github %} repository."
-## Enabling remote access for a session
+## Enabling remote control for a session
-You can enable remote access in three ways:
+You can enable remote control in three ways:
* With a slash command during an interactive session.
* With a command-line option when you start {% data variables.copilot.copilot_cli_short %}.
-* By configuring the CLI to enable remote access by default for all interactive sessions.
+* By configuring the CLI to enable remote control by default for all interactive sessions.
### Using the `/remote` slash command
-If you are already in an interactive session and want to enable remote access, enter:
+If you are already in an interactive session and want to enable remote control, enter:
```copilot copy
-/remote
+/remote on
```
The CLI connects to {% data variables.product.prodname_dotcom_the_website %} and displays details for accessing the session remotely—see [Accessing a session from {% data variables.product.prodname_dotcom_the_website %}](#accessing-a-session-from-githubcom) and [Accessing a session from {% data variables.product.prodname_mobile %}](#accessing-a-session-from-github-mobile) later in this article.
+You can use the `/remote` slash command without an argument to check the current remote control status, or to redisplay the remote access details if remote control is currently enabled. If you want to end the remote connection for the current session, enter `/remote off`.
+
### Using the `--remote` command-line option
If you think you may want to access a session remotely, you can start the CLI with the `--remote` command-line option. This avoids the need to remember to use the `/remote` slash command during the session.
@@ -58,9 +58,9 @@ copilot --remote
Details for accessing the session remotely are displayed when the interactive session starts and can be displayed again at any time by using the `/remote` slash command.
-### Configuring remote access to always be enabled
+### Configuring remote control to always be enabled
-If you always want your interactive CLI sessions to be remotely accessible, add the following to your {% data variables.product.prodname_copilot_short %} configuration file (typically located at `~/.copilot/settings.json`):
+If you always want your interactive CLI sessions to be remotely accessible, add the following to your {% data variables.product.prodname_copilot_short %} settings file (typically located at `~/.copilot/settings.json`):
```json copy
{
@@ -75,30 +75,33 @@ copilot --no-remote
```
> [!NOTE]
-> The command-line options `--remote` and `--no-remote` always take precedence over the `remoteSessions` setting in the configuration file.
+> The command-line options `--remote` and `--no-remote` always take precedence over the `remoteSessions` setting in the settings file.
## Accessing a session from {% data variables.product.prodname_dotcom_the_website %}
-When remote access is enabled, the CLI displays a link in the format:
+When you enable remote control, the CLI displays a link to the session on {% data variables.product.prodname_dotcom_the_website %}.
-```text
-https://github.com/OWNER/REPO/tasks/TASK_ID
-```
+Use the link to access the session in your default web browser. You must be signed in to {% data variables.product.prodname_dotcom %} with the same account that started the CLI session.
-Use this link to access the session in a web browser. You must be signed in to {% data variables.product.prodname_dotcom %} with the same account that started the CLI session.
-
-You can also access the session from your list of recent agent sessions on {% data variables.product.prodname_dotcom_the_website %}:
+You can also access the session without the link:
+1. Log on to {% data variables.product.prodname_dotcom_the_website %} on any computer.
1. In the top-left corner of {% data variables.product.prodname_dotcom %}, click {% octicon "three-bars" aria-label="Open menu" %}.
1. Click **{% octicon "copilot" aria-hidden="true" aria-label="copilot" %} {% data variables.product.prodname_copilot_short %}**.
-1. Under "Recent agent sessions", click your {% data variables.copilot.copilot_cli_short %} session to open it.
+
+ Your CLI session is listed under "Recent agent sessions."
+
+1. Optionally, use the **Type** filter at the top right of the list to show only {% data variables.copilot.copilot_cli_short %} sessions.
+1. Click your {% data variables.copilot.copilot_cli_short %} session to open it.
+
+If you started the session from a local copy of a {% data variables.product.github %} repository, you can also access the session from the **Agents** tab of that repository on {% data variables.product.prodname_dotcom_the_website %}.
> [!IMPORTANT]
-> Sessions are user-specific: you can only access your own {% data variables.copilot.copilot_cli_short %} sessions. Other {% data variables.product.github %} users cannot access your sessions.
+> Remotely accessible sessions are user-specific: you can only access your own {% data variables.copilot.copilot_cli_short %} sessions. Other {% data variables.product.github %} users cannot access your sessions.
## Accessing a session from {% data variables.product.prodname_mobile %}
-A {% data variables.copilot.copilot_cli_short %} session is available in {% data variables.product.prodname_mobile %} as soon as you enable remote access. To find your session in {% data variables.product.prodname_mobile %}:
+A {% data variables.copilot.copilot_cli_short %} session is available in {% data variables.product.prodname_mobile %} as soon as you enable remote control. To find your session in {% data variables.product.prodname_mobile %}:
1. Tap the **{% octicon "copilot" aria-hidden="true" aria-label="copilot" %} {% data variables.product.prodname_copilot_short %}** button in the bottom right corner of the screen.
@@ -129,23 +132,26 @@ In an interactive session, enter `/keep-alive OPTION`, where `OPTION` is one of:
Without passing an `OPTION`, the `/keep-alive` command displays the current keep-alive status.
-## Resuming a session with remote access
+## Reviewing previous sessions
-When you shut down a session that has remote access enabled, the CLI displays a resume command that includes `--remote`:
+You can view old {% data variables.copilot.copilot_cli_short %} sessions on {% data variables.product.prodname_dotcom_the_website %} or in {% data variables.product.prodname_mobile %}.
-```bash
-copilot --resume=SESSION_ID --remote
-```
+1. Go to your list of recent agent sessions on {% data variables.product.prodname_dotcom_the_website %} or in {% data variables.product.prodname_mobile %}. See [Accessing a session from github.com](#accessing-a-session-from-githubcom) and [Accessing a session from GitHub Mobile](#accessing-a-session-from-github-mobile) earlier in this article.
+1. Click or tap the session you want to review.
+
+On {% data variables.product.prodname_dotcom_the_website %}, a message tells you the `copilot --resume` command to use if you want to resume the session. Enter this command in your terminal on the machine where you ran that session.
+
+## Resuming a session
-Use this command to restart the session with remote access enabled.
+{% data reusables.cli.remote-access-reconnection %}
-Similarly, adding `--remote` to a `copilot --continue` command resumes the most recent session with remote access enabled.
+## Preventing remote control
-If you have `"remoteSessions": true` in your {% data variables.product.prodname_copilot_short %} configuration file, resumed sessions will have remote access enabled automatically and you do not need to use the `--remote` option.
+Remote control is disabled by default, but may be enabled in your {% data variables.product.prodname_copilot_short %} settings file (typically `~/.copilot/settings.json`). You can ensure a session is not remotely controllable by:
-## Preventing remote access
+* **For a single session**: Start the CLI with `--no-remote` to prevent remote control for that session, regardless of your settings file value.
+* **Permanently**: Remove the `"remoteSessions": true` setting from `~/.copilot/settings.json` (or set it to `false`).
-Remote access is disabled by default, but may be enabled in your {% data variables.product.prodname_copilot_short %} configuration file. You can ensure a session is not remotely accessible by:
+## Further reading
-* **For a single session**: Start the CLI with `--no-remote` to prevent remote access for that session, regardless of your configuration file setting.
-* **Permanently**: Remove the `"remoteSessions": true` setting from your {% data variables.product.prodname_copilot_short %} configuration file (or set it to `false`).
+* [{% data variables.copilot.copilot_cli_short %} sessions in {% data variables.product.prodname_vscode %}](https://code.visualstudio.com/docs/copilot/agents/copilot-cli) in the {% data variables.product.prodname_vscode_shortname %} documentation.
diff --git a/content/copilot/reference/copilot-cli-reference/cli-command-reference.md b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md
index 1d65433ffc1f..f39fd1ccca96 100644
--- a/content/copilot/reference/copilot-cli-reference/cli-command-reference.md
+++ b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md
@@ -163,7 +163,7 @@ copilot completion fish > ~/.config/fish/completions/copilot.fish
| `/ide` | Connect to an IDE workspace. See [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/connecting-vs-code#managing-the-connection-with-the-ide-slash-command). |
| `/init` | Initialize {% data variables.product.prodname_copilot_short %} custom instructions and agentic features for this repository. See [Project initialization for {% data variables.product.prodname_copilot_short %}](#project-initialization-for-copilot). |
| `/instructions` | View and toggle custom instruction files. |
-| `/keep-alive [on\|busy\|NUMBERm\|NUMBERh]` | Prevent the machine from going to sleep: while a CLI session is active, while the agent is busy, or for a defined length of time. {% data reusables.copilot.experimental %} |
+| `/keep-alive [on\|busy\|NUMBERm\|NUMBERh]` | Prevent the machine from going to sleep: while a CLI session is active, while the agent is busy, or for a defined length of time. |
| `/list-dirs` | Display all of the directories for which file access has been allowed. |
| `/login` | Log in to {% data variables.product.prodname_copilot_short %}. |
| `/logout` | Log out of {% data variables.product.prodname_copilot_short %}. |
diff --git a/data/reusables/cli/remote-access-reconnection.md b/data/reusables/cli/remote-access-reconnection.md
new file mode 100644
index 000000000000..b57ff8ad4572
--- /dev/null
+++ b/data/reusables/cli/remote-access-reconnection.md
@@ -0,0 +1 @@
+When you use `copilot --continue` or `copilot --resume` to resume a CLI session for which remote control was enabled, remote control is automatically re-enabled.