diff --git a/assets/images/help/actions/actions-oidc-settings.png b/assets/images/help/actions/actions-oidc-settings.png
new file mode 100644
index 000000000000..5bfd4d4a94a1
Binary files /dev/null and b/assets/images/help/actions/actions-oidc-settings.png differ
diff --git a/content/README.md b/content/README.md
index 10253b843958..8a308e132625 100644
--- a/content/README.md
+++ b/content/README.md
@@ -27,7 +27,6 @@ See the [contributing docs](https://docs.github.com/en/contributing) for general
- [`includeGuides`](#includeguides)
- [`journeyTracks`](#journeytracks)
- [`type`](#type)
- - [`topics`](#topics)
- [`communityRedirect`](#communityRedirect)
- [`effectiveDate`](#effectiveDate)
- [Escaping single quotes](#escaping-single-quotes)
@@ -443,4 +442,4 @@ To create a product guides page (e.g. [Actions' Guide page](https://docs.github.
1. (optional) Define which articles to include with [`includeGuides`](#includeGuides).
If using learning tracks, they need to be defined in [`data/learning-tracks/*.yml`](../data/learning-tracks/README.md).
-If using `includeGuides`, make sure each of the articles in this list has [`topics`](#topics) and [`type`](#type) in its frontmatter.
+If using `includeGuides`, make sure each of the articles in this list has [`type`](#type) in its frontmatter.
diff --git a/content/account-and-profile/concepts/account-management.md b/content/account-and-profile/concepts/account-management.md
index d4654c950f75..a5e899f0ea2b 100644
--- a/content/account-and-profile/concepts/account-management.md
+++ b/content/account-and-profile/concepts/account-management.md
@@ -9,6 +9,8 @@ shortTitle: Account management
contentType: concepts
redirect_from:
- /account-and-profile/concepts/personal-account-management
+category:
+ - Set up your account
---
{% ifversion ghes < 3.21 %}
diff --git a/content/account-and-profile/concepts/contributions-on-your-profile.md b/content/account-and-profile/concepts/contributions-on-your-profile.md
index 53e4429d0908..1baafffa63be 100644
--- a/content/account-and-profile/concepts/contributions-on-your-profile.md
+++ b/content/account-and-profile/concepts/contributions-on-your-profile.md
@@ -9,6 +9,8 @@ shortTitle: Profile contributions
contentType: concepts
redirect_from:
- /account-and-profile/concepts/contributions-visible-on-your-profile
+category:
+ - Track your contributions
---
## About your contribution graph
diff --git a/content/account-and-profile/concepts/email-addresses.md b/content/account-and-profile/concepts/email-addresses.md
index 04764a559752..04f12356db96 100644
--- a/content/account-and-profile/concepts/email-addresses.md
+++ b/content/account-and-profile/concepts/email-addresses.md
@@ -7,6 +7,8 @@ versions:
ghec: '*'
shortTitle: Email addresses
contentType: concepts
+category:
+ - Manage your email
---
## Adding an email address to your {% data variables.product.github %} account
diff --git a/content/account-and-profile/concepts/organization-membership.md b/content/account-and-profile/concepts/organization-membership.md
index 03c8a610bd6e..6736a1efa6fa 100644
--- a/content/account-and-profile/concepts/organization-membership.md
+++ b/content/account-and-profile/concepts/organization-membership.md
@@ -14,6 +14,8 @@ versions:
ghec: '*'
shortTitle: Organization membership
contentType: concepts
+category:
+ - Participate in organizations
---
An organization owner can invite you to join their organization as a member, billing manager, or owner. An organization owner or member with admin privileges for a repository can invite you to collaborate in one or more repositories as an outside collaborator. For more information, see [AUTOTITLE](/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization).
diff --git a/content/account-and-profile/concepts/organization-profile.md b/content/account-and-profile/concepts/organization-profile.md
index 1fe248775508..97b59ef1b1ab 100644
--- a/content/account-and-profile/concepts/organization-profile.md
+++ b/content/account-and-profile/concepts/organization-profile.md
@@ -15,6 +15,8 @@ versions:
ghec: '*'
shortTitle: Organization profile
contentType: concepts
+category:
+ - Participate in organizations
---
You can customize your organization's profile by adding any of the following:
diff --git a/content/account-and-profile/concepts/personal-profile.md b/content/account-and-profile/concepts/personal-profile.md
index a4ad3a81fd04..b8df38d62281 100644
--- a/content/account-and-profile/concepts/personal-profile.md
+++ b/content/account-and-profile/concepts/personal-profile.md
@@ -15,6 +15,8 @@ versions:
ghes: '*'
ghec: '*'
contentType: concepts
+category:
+ - Customize your profile
---
Your {% data variables.product.github %} profile showcases your work, contributions, and information you choose to share publicly.
diff --git a/content/account-and-profile/concepts/username-changes.md b/content/account-and-profile/concepts/username-changes.md
index aabf286c18be..8823ae76668e 100644
--- a/content/account-and-profile/concepts/username-changes.md
+++ b/content/account-and-profile/concepts/username-changes.md
@@ -19,6 +19,8 @@ versions:
ghec: '*'
shortTitle: Username changes
contentType: concepts
+category:
+ - Set up your account
---
## About username changes
diff --git a/content/account-and-profile/get-started/account.md b/content/account-and-profile/get-started/account.md
index 2e7dbdd96e83..423c27bf404f 100644
--- a/content/account-and-profile/get-started/account.md
+++ b/content/account-and-profile/get-started/account.md
@@ -7,6 +7,8 @@ versions:
ghec: '*'
shortTitle: Account
contentType: get-started
+category:
+ - Set up your account
---
## About your {% data variables.product.github %} account
diff --git a/content/account-and-profile/get-started/personal-dashboard-quickstart.md b/content/account-and-profile/get-started/personal-dashboard-quickstart.md
index ffafe2803a77..44d3f1cf0cf5 100644
--- a/content/account-and-profile/get-started/personal-dashboard-quickstart.md
+++ b/content/account-and-profile/get-started/personal-dashboard-quickstart.md
@@ -17,6 +17,8 @@ versions:
ghec: '*'
shortTitle: Personal dashboard quickstart
contentType: get-started
+category:
+ - Set up your account
---
## Accessing your personal dashboard
diff --git a/content/account-and-profile/get-started/profile.md b/content/account-and-profile/get-started/profile.md
index 9c66d8873310..a0a8b96961f8 100644
--- a/content/account-and-profile/get-started/profile.md
+++ b/content/account-and-profile/get-started/profile.md
@@ -7,6 +7,8 @@ versions:
ghec: '*'
shortTitle: Profile
contentType: get-started
+category:
+ - Customize your profile
---
## About your {% data variables.product.github %} profile
diff --git a/content/account-and-profile/how-tos/account-management/changing-your-username.md b/content/account-and-profile/how-tos/account-management/changing-your-username.md
index 4d0a7e19270e..342f9acc7074 100644
--- a/content/account-and-profile/how-tos/account-management/changing-your-username.md
+++ b/content/account-and-profile/how-tos/account-management/changing-your-username.md
@@ -10,6 +10,8 @@ permissions: '{% ifversion ghec %}Users with personal accounts can change their
contentType: how-tos
redirect_from:
- /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-your-personal-account/changing-your-username
+category:
+ - Change or close your account
---
## Prerequisites
diff --git a/content/account-and-profile/how-tos/account-management/converting-a-user-into-an-organization.md b/content/account-and-profile/how-tos/account-management/converting-a-user-into-an-organization.md
index e421723b9dcd..4c7e51c73a14 100644
--- a/content/account-and-profile/how-tos/account-management/converting-a-user-into-an-organization.md
+++ b/content/account-and-profile/how-tos/account-management/converting-a-user-into-an-organization.md
@@ -15,6 +15,8 @@ versions:
ghes: '<3.21'
shortTitle: Convert your account
contentType: how-tos
+category:
+ - Change or close your account
---
## Prerequisites
diff --git a/content/account-and-profile/how-tos/account-management/deleting-your-personal-account.md b/content/account-and-profile/how-tos/account-management/deleting-your-personal-account.md
index e10ddb452975..57c08f6f3bc6 100644
--- a/content/account-and-profile/how-tos/account-management/deleting-your-personal-account.md
+++ b/content/account-and-profile/how-tos/account-management/deleting-your-personal-account.md
@@ -16,6 +16,8 @@ versions:
ghec: '*'
shortTitle: Delete your account
contentType: how-tos
+category:
+ - Change or close your account
---
{% ifversion ghec %}
diff --git a/content/account-and-profile/how-tos/account-management/managing-multiple-accounts.md b/content/account-and-profile/how-tos/account-management/managing-multiple-accounts.md
index cb47be94649d..3c7fad43b3f8 100644
--- a/content/account-and-profile/how-tos/account-management/managing-multiple-accounts.md
+++ b/content/account-and-profile/how-tos/account-management/managing-multiple-accounts.md
@@ -8,6 +8,8 @@ redirect_from:
- /account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-personal-account/managing-multiple-accounts
- /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-your-personal-account/managing-multiple-accounts
contentType: how-tos
+category:
+ - Change or close your account
---
## Contributing to multiple accounts using HTTPS and {% data variables.product.pat_generic %}s
diff --git a/content/account-and-profile/how-tos/account-management/merging-multiple-personal-accounts.md b/content/account-and-profile/how-tos/account-management/merging-multiple-personal-accounts.md
index 6bf826fa0844..fb329f5ea57b 100644
--- a/content/account-and-profile/how-tos/account-management/merging-multiple-personal-accounts.md
+++ b/content/account-and-profile/how-tos/account-management/merging-multiple-personal-accounts.md
@@ -16,6 +16,8 @@ versions:
ghec: '*'
shortTitle: Merge multiple accounts
contentType: how-tos
+category:
+ - Change or close your account
---
{% ifversion ghec %}
diff --git a/content/account-and-profile/how-tos/account-management/moving-your-work-to-an-organization.md b/content/account-and-profile/how-tos/account-management/moving-your-work-to-an-organization.md
index 67dc873c264d..ed51252f51b9 100644
--- a/content/account-and-profile/how-tos/account-management/moving-your-work-to-an-organization.md
+++ b/content/account-and-profile/how-tos/account-management/moving-your-work-to-an-organization.md
@@ -6,6 +6,8 @@ versions:
ghes: '>= 3.21'
ghec: '*'
shortTitle: Move work to organization
+category:
+ - Change or close your account
---
## Keeping your username for the organization
diff --git a/content/account-and-profile/how-tos/account-management/unlinking-your-email-address-from-a-locked-account.md b/content/account-and-profile/how-tos/account-management/unlinking-your-email-address-from-a-locked-account.md
index a1c2ad7e2a93..0f48f994ae1b 100644
--- a/content/account-and-profile/how-tos/account-management/unlinking-your-email-address-from-a-locked-account.md
+++ b/content/account-and-profile/how-tos/account-management/unlinking-your-email-address-from-a-locked-account.md
@@ -10,6 +10,8 @@ versions:
ghec: '*'
shortTitle: Unlink your email
contentType: how-tos
+category:
+ - Manage your email
---
> [!WARNING]
diff --git a/content/account-and-profile/how-tos/account-settings/integrating-jira-with-your-personal-projects.md b/content/account-and-profile/how-tos/account-settings/integrating-jira-with-your-personal-projects.md
index 9198f3c07535..61fcf3287010 100644
--- a/content/account-and-profile/how-tos/account-settings/integrating-jira-with-your-personal-projects.md
+++ b/content/account-and-profile/how-tos/account-settings/integrating-jira-with-your-personal-projects.md
@@ -13,6 +13,8 @@ versions:
ghes: '*'
shortTitle: Jira project integration
contentType: how-tos
+category:
+ - Configure account settings
---
{% data reusables.user-settings.access_settings %}
{% data reusables.user-settings.developer_settings %}
diff --git a/content/account-and-profile/how-tos/account-settings/manage-cookie-preferences.md b/content/account-and-profile/how-tos/account-settings/manage-cookie-preferences.md
index 78485c92af63..36367e8939a0 100644
--- a/content/account-and-profile/how-tos/account-settings/manage-cookie-preferences.md
+++ b/content/account-and-profile/how-tos/account-settings/manage-cookie-preferences.md
@@ -12,6 +12,8 @@ redirect_from:
- /account-and-profile/tutorials/managing-your-cookie-preferences-for-githubs-enterprise-marketing-pages
- /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/manage-cookie-preferences
contentType: how-tos
+category:
+ - Configure account settings
---
## Changing your cookie preferences
diff --git a/content/account-and-profile/how-tos/account-settings/managing-access-to-your-personal-accounts-project-boards.md b/content/account-and-profile/how-tos/account-settings/managing-access-to-your-personal-accounts-project-boards.md
index 786bcbaa3ab8..59bf66be3b83 100644
--- a/content/account-and-profile/how-tos/account-settings/managing-access-to-your-personal-accounts-project-boards.md
+++ b/content/account-and-profile/how-tos/account-settings/managing-access-to-your-personal-accounts-project-boards.md
@@ -16,6 +16,8 @@ versions:
shortTitle: Manage access
allowTitleToDifferFromFilename: true
contentType: how-tos
+category:
+ - Configure account settings
---
A collaborator is a person who has permissions to a {% data variables.projects.projects_v1_board %} you own. A collaborator's permissions will default to read access. For more information, see [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/permission-levels-for-a-project-board-owned-by-a-personal-account).
diff --git a/content/account-and-profile/how-tos/account-settings/managing-accessibility-settings.md b/content/account-and-profile/how-tos/account-settings/managing-accessibility-settings.md
index 15a442093596..48e486868607 100644
--- a/content/account-and-profile/how-tos/account-settings/managing-accessibility-settings.md
+++ b/content/account-and-profile/how-tos/account-settings/managing-accessibility-settings.md
@@ -12,6 +12,8 @@ redirect_from:
- /account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/managing-accessibility-settings
- /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/managing-accessibility-settings
contentType: how-tos
+category:
+ - Configure account settings
---
> [!NOTE] This article will help you customize your experience on the {% data variables.product.github %} website as a whole. For information on using specific {% data variables.product.github %} products with screen readers and other assistive technologies, see the [{% data variables.product.github %} Accessibility Documentation](https://accessibility.github.com/documentation).
diff --git a/content/account-and-profile/how-tos/account-settings/managing-security-and-analysis-features.md b/content/account-and-profile/how-tos/account-settings/managing-security-and-analysis-features.md
index 9e5e955d8462..bd24e6899620 100644
--- a/content/account-and-profile/how-tos/account-settings/managing-security-and-analysis-features.md
+++ b/content/account-and-profile/how-tos/account-settings/managing-security-and-analysis-features.md
@@ -15,6 +15,8 @@ redirect_from:
- /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/managing-security-and-analysis-features
shortTitle: Security and analysis
contentType: how-tos
+category:
+ - Configure account settings
---
> [!NOTE] This topic tells you how you can manage the security and analysis features for all your existing or new repositories. For information on managing these settings for individual repositories, see [AUTOTITLE](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository).
diff --git a/content/account-and-profile/how-tos/account-settings/managing-your-tab-size-rendering-preference.md b/content/account-and-profile/how-tos/account-settings/managing-your-tab-size-rendering-preference.md
index 5400158c73cd..1a68ffa2c79b 100644
--- a/content/account-and-profile/how-tos/account-settings/managing-your-tab-size-rendering-preference.md
+++ b/content/account-and-profile/how-tos/account-settings/managing-your-tab-size-rendering-preference.md
@@ -12,6 +12,8 @@ redirect_from:
- /account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/managing-your-tab-size-rendering-preference
- /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/managing-your-tab-size-rendering-preference
contentType: how-tos
+category:
+ - Configure account settings
---
If you feel that tabbed indentation in code rendered on {% data variables.product.github %} takes up too much, or too little space, you can change this in your settings.
diff --git a/content/account-and-profile/how-tos/account-settings/permission-levels-for-a-project-board-owned-by-a-personal-account.md b/content/account-and-profile/how-tos/account-settings/permission-levels-for-a-project-board-owned-by-a-personal-account.md
index b3b5d1d941c9..4c279464c536 100644
--- a/content/account-and-profile/how-tos/account-settings/permission-levels-for-a-project-board-owned-by-a-personal-account.md
+++ b/content/account-and-profile/how-tos/account-settings/permission-levels-for-a-project-board-owned-by-a-personal-account.md
@@ -14,6 +14,8 @@ versions:
shortTitle: '{% data variables.projects.projects_v1_board_caps %} permissions'
allowTitleToDifferFromFilename: true
contentType: how-tos
+category:
+ - Configure account settings
---
{% data reusables.projects.project_boards_old %}
diff --git a/content/account-and-profile/how-tos/account-settings/prepare-for-job-change.md b/content/account-and-profile/how-tos/account-settings/prepare-for-job-change.md
index 7fd798a41c3e..7ef4344ba8df 100644
--- a/content/account-and-profile/how-tos/account-settings/prepare-for-job-change.md
+++ b/content/account-and-profile/how-tos/account-settings/prepare-for-job-change.md
@@ -15,6 +15,8 @@ versions:
ghec: '*'
shortTitle: Prepare for job change
contentType: how-tos
+category:
+ - Change or close your account
---
## Update your personal account information
diff --git a/content/account-and-profile/how-tos/account-settings/set-your-hiring-status.md b/content/account-and-profile/how-tos/account-settings/set-your-hiring-status.md
index dd1c4eb51583..9a87d1a2d6a3 100644
--- a/content/account-and-profile/how-tos/account-settings/set-your-hiring-status.md
+++ b/content/account-and-profile/how-tos/account-settings/set-your-hiring-status.md
@@ -16,6 +16,8 @@ versions:
ghec: '*'
shortTitle: Set your hiring status
contentType: how-tos
+category:
+ - Customize your profile
---
{% data reusables.user-settings.access_settings %}
diff --git a/content/account-and-profile/how-tos/contribution-settings/manage-visibility-settings-for-private-contributions-and-achievements.md b/content/account-and-profile/how-tos/contribution-settings/manage-visibility-settings-for-private-contributions-and-achievements.md
index f6f3657031ec..0b7aadde56fe 100644
--- a/content/account-and-profile/how-tos/contribution-settings/manage-visibility-settings-for-private-contributions-and-achievements.md
+++ b/content/account-and-profile/how-tos/contribution-settings/manage-visibility-settings-for-private-contributions-and-achievements.md
@@ -16,6 +16,8 @@ versions:
shortTitle: Private contributions {% ifversion hide-individual-achievements %}and achievements{% endif %}
allowTitleToDifferFromFilename: true
contentType: how-tos
+category:
+ - Track your contributions
---
## Changing the visibility of your private contributions
diff --git a/content/account-and-profile/how-tos/contribution-settings/sharing-contributions-from-github-enterprise-server.md b/content/account-and-profile/how-tos/contribution-settings/sharing-contributions-from-github-enterprise-server.md
index ad5857f50f7d..c9677706aedc 100644
--- a/content/account-and-profile/how-tos/contribution-settings/sharing-contributions-from-github-enterprise-server.md
+++ b/content/account-and-profile/how-tos/contribution-settings/sharing-contributions-from-github-enterprise-server.md
@@ -17,6 +17,8 @@ versions:
ghec: '*'
shortTitle: Send enterprise contributions
contentType: how-tos
+category:
+ - Track your contributions
---
> [!IMPORTANT]
diff --git a/content/account-and-profile/how-tos/contribution-settings/showing-an-overview-of-your-activity-on-your-profile.md b/content/account-and-profile/how-tos/contribution-settings/showing-an-overview-of-your-activity-on-your-profile.md
index 1f1eb892ee5d..0454f16b9372 100644
--- a/content/account-and-profile/how-tos/contribution-settings/showing-an-overview-of-your-activity-on-your-profile.md
+++ b/content/account-and-profile/how-tos/contribution-settings/showing-an-overview-of-your-activity-on-your-profile.md
@@ -14,6 +14,8 @@ versions:
ghec: '*'
shortTitle: Show an overview
contentType: how-tos
+category:
+ - Track your contributions
---
## Managing the visibility of the activity overview on your profile
diff --git a/content/account-and-profile/how-tos/contribution-settings/troubleshooting-missing-contributions.md b/content/account-and-profile/how-tos/contribution-settings/troubleshooting-missing-contributions.md
index 9e2a5003325b..a77981e3b830 100644
--- a/content/account-and-profile/how-tos/contribution-settings/troubleshooting-missing-contributions.md
+++ b/content/account-and-profile/how-tos/contribution-settings/troubleshooting-missing-contributions.md
@@ -15,6 +15,8 @@ versions:
ghec: '*'
shortTitle: Troubleshoot missing contributions
contentType: how-tos
+category:
+ - Track your contributions
---
## Commit was made less than 24 hours ago
diff --git a/content/account-and-profile/how-tos/contribution-settings/viewing-commit-details-from-your-timeline.md b/content/account-and-profile/how-tos/contribution-settings/viewing-commit-details-from-your-timeline.md
index 91bb15181a45..7c223ea7c57a 100644
--- a/content/account-and-profile/how-tos/contribution-settings/viewing-commit-details-from-your-timeline.md
+++ b/content/account-and-profile/how-tos/contribution-settings/viewing-commit-details-from-your-timeline.md
@@ -15,6 +15,8 @@ versions:
ghec: '*'
shortTitle: Viewing commit details
contentType: how-tos
+category:
+ - Track your contributions
---
## View commit details
diff --git a/content/account-and-profile/how-tos/contribution-settings/viewing-contributions-on-your-profile.md b/content/account-and-profile/how-tos/contribution-settings/viewing-contributions-on-your-profile.md
index 25f32e79b7ba..13d502596809 100644
--- a/content/account-and-profile/how-tos/contribution-settings/viewing-contributions-on-your-profile.md
+++ b/content/account-and-profile/how-tos/contribution-settings/viewing-contributions-on-your-profile.md
@@ -16,6 +16,8 @@ versions:
ghec: '*'
shortTitle: View contributions
contentType: how-tos
+category:
+ - Track your contributions
---
## Prerequisites
diff --git a/content/account-and-profile/how-tos/email-preferences/adding-an-email-address-to-your-github-account.md b/content/account-and-profile/how-tos/email-preferences/adding-an-email-address-to-your-github-account.md
index 7fb124c47e5e..a28562ef6688 100644
--- a/content/account-and-profile/how-tos/email-preferences/adding-an-email-address-to-your-github-account.md
+++ b/content/account-and-profile/how-tos/email-preferences/adding-an-email-address-to-your-github-account.md
@@ -14,6 +14,8 @@ versions:
ghec: '*'
shortTitle: Add email address
contentType: how-tos
+category:
+ - Manage your email
---
{% ifversion ghec %}
diff --git a/content/account-and-profile/how-tos/email-preferences/blocking-command-line-pushes-that-expose-your-personal-email-address.md b/content/account-and-profile/how-tos/email-preferences/blocking-command-line-pushes-that-expose-your-personal-email-address.md
index 580261668d39..75e974587f35 100644
--- a/content/account-and-profile/how-tos/email-preferences/blocking-command-line-pushes-that-expose-your-personal-email-address.md
+++ b/content/account-and-profile/how-tos/email-preferences/blocking-command-line-pushes-that-expose-your-personal-email-address.md
@@ -13,6 +13,8 @@ versions:
ghec: '*'
shortTitle: Block push with personal email
contentType: how-tos
+category:
+ - Manage your email
---
When you enable this setting, each time you push to {% data variables.product.github %}, we’ll check the most recent commit. If the author email on that commit is a private email on your GitHub account, we will block the push and warn you about exposing your private email.
diff --git a/content/account-and-profile/how-tos/email-preferences/changing-your-primary-email-address.md b/content/account-and-profile/how-tos/email-preferences/changing-your-primary-email-address.md
index 8bccbd4c3f20..dcf4f8e9d519 100644
--- a/content/account-and-profile/how-tos/email-preferences/changing-your-primary-email-address.md
+++ b/content/account-and-profile/how-tos/email-preferences/changing-your-primary-email-address.md
@@ -14,6 +14,8 @@ versions:
ghec: '*'
shortTitle: Primary email address
contentType: how-tos
+category:
+ - Manage your email
---
{% ifversion ghec %}
diff --git a/content/account-and-profile/how-tos/email-preferences/remembering-your-github-username-or-email.md b/content/account-and-profile/how-tos/email-preferences/remembering-your-github-username-or-email.md
index e2bf18a41f19..be2b42d5373d 100644
--- a/content/account-and-profile/how-tos/email-preferences/remembering-your-github-username-or-email.md
+++ b/content/account-and-profile/how-tos/email-preferences/remembering-your-github-username-or-email.md
@@ -16,6 +16,8 @@ versions:
ghec: '*'
shortTitle: Find your username or email
contentType: how-tos
+category:
+ - Manage your email
---
diff --git a/content/account-and-profile/how-tos/email-preferences/setting-a-backup-email-address.md b/content/account-and-profile/how-tos/email-preferences/setting-a-backup-email-address.md
index e39c345839e1..08e74b2ac6b3 100644
--- a/content/account-and-profile/how-tos/email-preferences/setting-a-backup-email-address.md
+++ b/content/account-and-profile/how-tos/email-preferences/setting-a-backup-email-address.md
@@ -14,6 +14,8 @@ versions:
ghec: '*'
shortTitle: Backup email address
contentType: how-tos
+category:
+ - Manage your email
---
{% data reusables.user-settings.access_settings %}
{% data reusables.user-settings.emails %}
diff --git a/content/account-and-profile/how-tos/email-preferences/setting-your-commit-email-address.md b/content/account-and-profile/how-tos/email-preferences/setting-your-commit-email-address.md
index 7b962249214e..1421ba4abaaf 100644
--- a/content/account-and-profile/how-tos/email-preferences/setting-your-commit-email-address.md
+++ b/content/account-and-profile/how-tos/email-preferences/setting-your-commit-email-address.md
@@ -21,6 +21,8 @@ versions:
ghec: '*'
shortTitle: Set commit email address
contentType: how-tos
+category:
+ - Manage your email
---
## Setting your commit email address on {% data variables.product.github %}
diff --git a/content/account-and-profile/how-tos/email-preferences/troubleshooting-adding-an-email.md b/content/account-and-profile/how-tos/email-preferences/troubleshooting-adding-an-email.md
index 7a2c5430cb81..c27a3943aa11 100644
--- a/content/account-and-profile/how-tos/email-preferences/troubleshooting-adding-an-email.md
+++ b/content/account-and-profile/how-tos/email-preferences/troubleshooting-adding-an-email.md
@@ -9,6 +9,8 @@ shortTitle: Troubleshoot adding an email
contentType: how-tos
redirect_from:
- /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/troubleshooting-adding-an-email
+category:
+ - Manage your email
---
## Email already in use
diff --git a/content/account-and-profile/how-tos/email-preferences/troubleshooting-email-verification.md b/content/account-and-profile/how-tos/email-preferences/troubleshooting-email-verification.md
index 7a73bdcbb74b..b30ad39399cf 100644
--- a/content/account-and-profile/how-tos/email-preferences/troubleshooting-email-verification.md
+++ b/content/account-and-profile/how-tos/email-preferences/troubleshooting-email-verification.md
@@ -9,6 +9,8 @@ shortTitle: Troubleshoot email verification
contentType: how-tos
redirect_from:
- /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/troubleshooting-email-verification
+category:
+ - Manage your email
---
## Unable to send verification email
diff --git a/content/account-and-profile/how-tos/email-preferences/verifying-your-email-address.md b/content/account-and-profile/how-tos/email-preferences/verifying-your-email-address.md
index 99180d84beb6..8d3f274a3050 100644
--- a/content/account-and-profile/how-tos/email-preferences/verifying-your-email-address.md
+++ b/content/account-and-profile/how-tos/email-preferences/verifying-your-email-address.md
@@ -15,6 +15,8 @@ versions:
ghec: '*'
shortTitle: Verify your email address
contentType: how-tos
+category:
+ - Manage your email
---
## Verifying your email address
diff --git a/content/account-and-profile/how-tos/organization-membership/accessing-an-organization.md b/content/account-and-profile/how-tos/organization-membership/accessing-an-organization.md
index 5e31960eaa46..50f5941b98cb 100644
--- a/content/account-and-profile/how-tos/organization-membership/accessing-an-organization.md
+++ b/content/account-and-profile/how-tos/organization-membership/accessing-an-organization.md
@@ -17,6 +17,8 @@ versions:
ghes: '*'
ghec: '*'
contentType: how-tos
+category:
+ - Participate in organizations
---
> [!TIP]
diff --git a/content/account-and-profile/how-tos/organization-membership/publicizing-or-hiding-organization-membership.md b/content/account-and-profile/how-tos/organization-membership/publicizing-or-hiding-organization-membership.md
index c7b5665a4de2..2d72e5bcb248 100644
--- a/content/account-and-profile/how-tos/organization-membership/publicizing-or-hiding-organization-membership.md
+++ b/content/account-and-profile/how-tos/organization-membership/publicizing-or-hiding-organization-membership.md
@@ -15,6 +15,8 @@ versions:
ghec: '*'
shortTitle: Show or hide membership
contentType: how-tos
+category:
+ - Participate in organizations
---
{% data reusables.profile.access_org %}
diff --git a/content/account-and-profile/how-tos/organization-membership/removing-yourself-from-an-enterprise.md b/content/account-and-profile/how-tos/organization-membership/removing-yourself-from-an-enterprise.md
index c1d44b22e8c0..cddffe7157d6 100644
--- a/content/account-and-profile/how-tos/organization-membership/removing-yourself-from-an-enterprise.md
+++ b/content/account-and-profile/how-tos/organization-membership/removing-yourself-from-an-enterprise.md
@@ -6,6 +6,8 @@ versions:
ghec: '*'
shortTitle: Leave an enterprise
contentType: how-tos
+category:
+ - Participate in organizations
---
If your personal {% data variables.product.github %} account is a member of an enterprise, you can leave the enterprise at any time.
diff --git a/content/account-and-profile/how-tos/organization-membership/removing-yourself-from-an-organization.md b/content/account-and-profile/how-tos/organization-membership/removing-yourself-from-an-organization.md
index 4996908d3dfa..741b23cca7f2 100644
--- a/content/account-and-profile/how-tos/organization-membership/removing-yourself-from-an-organization.md
+++ b/content/account-and-profile/how-tos/organization-membership/removing-yourself-from-an-organization.md
@@ -15,6 +15,8 @@ versions:
ghec: '*'
shortTitle: Leave an organization
contentType: how-tos
+category:
+ - Participate in organizations
---
{% ifversion fpt or ghec %}
diff --git a/content/account-and-profile/how-tos/organization-membership/requesting-organization-approval-for-oauth-apps.md b/content/account-and-profile/how-tos/organization-membership/requesting-organization-approval-for-oauth-apps.md
index 33ba3e3aa80b..098f1d02328c 100644
--- a/content/account-and-profile/how-tos/organization-membership/requesting-organization-approval-for-oauth-apps.md
+++ b/content/account-and-profile/how-tos/organization-membership/requesting-organization-approval-for-oauth-apps.md
@@ -16,6 +16,8 @@ versions:
permissions: Organization members can request owner approval for {% data variables.product.prodname_oauth_apps %}. Outside collaborators can request owner approval for {% data variables.product.prodname_oauth_apps %} if integration access requests are enabled. For more information, see [AUTOTITLE](/organizations/managing-programmatic-access-to-your-organization/limiting-oauth-app-and-github-app-access-requests).
shortTitle: Request {% data variables.product.prodname_oauth_app %} approval
contentType: how-tos
+category:
+ - Participate in organizations
---
## Prerequisites
diff --git a/content/account-and-profile/how-tos/organization-membership/viewing-peoples-roles-in-an-organization.md b/content/account-and-profile/how-tos/organization-membership/viewing-peoples-roles-in-an-organization.md
index 0a5094ebe6b9..2b7d12989e11 100644
--- a/content/account-and-profile/how-tos/organization-membership/viewing-peoples-roles-in-an-organization.md
+++ b/content/account-and-profile/how-tos/organization-membership/viewing-peoples-roles-in-an-organization.md
@@ -16,6 +16,8 @@ versions:
ghec: '*'
shortTitle: View organization members
contentType: how-tos
+category:
+ - Participate in organizations
---
{% ifversion ghes or ghec %}
diff --git a/content/account-and-profile/how-tos/profile-customization/managing-your-profile-readme.md b/content/account-and-profile/how-tos/profile-customization/managing-your-profile-readme.md
index 6fa5424a43a3..285de7126bda 100644
--- a/content/account-and-profile/how-tos/profile-customization/managing-your-profile-readme.md
+++ b/content/account-and-profile/how-tos/profile-customization/managing-your-profile-readme.md
@@ -13,6 +13,8 @@ redirect_from:
- /account-and-profile/how-tos/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme
shortTitle: Your profile README
contentType: how-tos
+category:
+ - Customize your profile
---
## Prerequisites
diff --git a/content/account-and-profile/how-tos/profile-customization/pinning-items-to-your-profile.md b/content/account-and-profile/how-tos/profile-customization/pinning-items-to-your-profile.md
index 6a6eb9c67f3b..8cbe09419dc6 100644
--- a/content/account-and-profile/how-tos/profile-customization/pinning-items-to-your-profile.md
+++ b/content/account-and-profile/how-tos/profile-customization/pinning-items-to-your-profile.md
@@ -14,6 +14,8 @@ versions:
ghec: '*'
shortTitle: Pin items
contentType: how-tos
+category:
+ - Customize your profile
---
## Pinning items to your profile
diff --git a/content/account-and-profile/how-tos/profile-customization/setting-your-profile-to-private.md b/content/account-and-profile/how-tos/profile-customization/setting-your-profile-to-private.md
index 1f626bd7ef40..89c4951e9dfc 100644
--- a/content/account-and-profile/how-tos/profile-customization/setting-your-profile-to-private.md
+++ b/content/account-and-profile/how-tos/profile-customization/setting-your-profile-to-private.md
@@ -8,6 +8,8 @@ redirect_from:
- /account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/setting-your-profile-to-private
- /account-and-profile/how-tos/setting-up-and-managing-your-github-profile/customizing-your-profile/setting-your-profile-to-private
contentType: how-tos
+category:
+ - Customize your profile
---
## Changing your profile's privacy settings
diff --git a/content/account-and-profile/index.md b/content/account-and-profile/index.md
index 64be59328074..91889629fe12 100644
--- a/content/account-and-profile/index.md
+++ b/content/account-and-profile/index.md
@@ -3,34 +3,42 @@ title: Account and profile documentation
shortTitle: Account and profile
intro: Make {% data variables.product.github %} work best for you by customizing your personal account settings and personalizing your profile page.
introLinks:
- quickstart:
- - /get-started/onboarding/getting-started-with-your-github-account
-featuredLinks:
- startHere:
- - /account-and-profile/get-started/account
- - /account-and-profile/get-started/profile
- popular:
- - /account-and-profile/how-tos/email-preferences/setting-your-commit-email-address
- - /account-and-profile/concepts/account-management
- guideCards:
- - /account-and-profile/how-tos/contribution-settings/troubleshooting-missing-contributions
- - /account-and-profile/how-tos/email-preferences/blocking-command-line-pushes-that-expose-your-personal-email-address
+ quickstart: /account-and-profile/get-started/account
+ overview: /account-and-profile/get-started/profile
+layout: discovery-landing
changelog:
label: profiles, github-themes
versions:
fpt: '*'
ghec: '*'
-layout: product-landing
versions:
fpt: '*'
ghes: '*'
ghec: '*'
+carousels:
+ recommended:
+ - /account-and-profile/get-started/account
+ - /account-and-profile/get-started/profile
+ - /account-and-profile/get-started/personal-dashboard-quickstart
+ - /account-and-profile/tutorials/personalize-your-profile
+ - /account-and-profile/tutorials/using-your-github-profile-to-enhance-your-resume
+ - /account-and-profile/how-tos/email-preferences/setting-your-commit-email-address
+ - /account-and-profile/how-tos/profile-customization/managing-your-profile-readme
+ - /account-and-profile/how-tos/account-management/managing-multiple-accounts
+ - /account-and-profile/how-tos/contribution-settings/viewing-contributions-on-your-profile
+includedCategories:
+ - Set up your account
+ - Manage your email
+ - Customize your profile
+ - Track your contributions
+ - Configure account settings
+ - Change or close your account
+ - Participate in organizations
children:
- /get-started
- /concepts
- /how-tos
- /tutorials
- /reference
-contentType: landing
---
diff --git a/content/account-and-profile/reference/email-addresses-reference.md b/content/account-and-profile/reference/email-addresses-reference.md
index 11312e811511..ab49c2d7db80 100644
--- a/content/account-and-profile/reference/email-addresses-reference.md
+++ b/content/account-and-profile/reference/email-addresses-reference.md
@@ -7,6 +7,8 @@ versions:
ghes: '*'
ghec: '*'
contentType: reference
+category:
+ - Manage your email
---
## Email verification restrictions
diff --git a/content/account-and-profile/reference/personal-account-reference.md b/content/account-and-profile/reference/personal-account-reference.md
index 2448b77a80d3..228252498429 100644
--- a/content/account-and-profile/reference/personal-account-reference.md
+++ b/content/account-and-profile/reference/personal-account-reference.md
@@ -7,6 +7,8 @@ versions:
ghes: '*'
ghec: '*'
contentType: reference
+category:
+ - Set up your account
---
## Side effects of account deletion
diff --git a/content/account-and-profile/reference/personal-dashboard.md b/content/account-and-profile/reference/personal-dashboard.md
index 5556610c6707..7783b00c4646 100644
--- a/content/account-and-profile/reference/personal-dashboard.md
+++ b/content/account-and-profile/reference/personal-dashboard.md
@@ -6,6 +6,8 @@ versions:
ghec: '*'
ghes: '*'
contentType: reference
+category:
+ - Set up your account
---
## Recent activity
diff --git a/content/account-and-profile/reference/profile-contributions-reference.md b/content/account-and-profile/reference/profile-contributions-reference.md
index 28ee0e3caf90..5ad4a78d8876 100644
--- a/content/account-and-profile/reference/profile-contributions-reference.md
+++ b/content/account-and-profile/reference/profile-contributions-reference.md
@@ -6,6 +6,8 @@ versions:
ghec: '*'
ghes: '*'
contentType: reference
+category:
+ - Track your contributions
---
## What counts as a contribution
diff --git a/content/account-and-profile/reference/profile-reference.md b/content/account-and-profile/reference/profile-reference.md
index bf6bf98c94c1..d41421fe8846 100644
--- a/content/account-and-profile/reference/profile-reference.md
+++ b/content/account-and-profile/reference/profile-reference.md
@@ -7,6 +7,8 @@ versions:
ghec: '*'
shortTitle: Profile reference
contentType: reference
+category:
+ - Customize your profile
---
## Visibility of profile information
diff --git a/content/account-and-profile/reference/username-reference.md b/content/account-and-profile/reference/username-reference.md
index 8083c6d7ca97..c654e70910da 100644
--- a/content/account-and-profile/reference/username-reference.md
+++ b/content/account-and-profile/reference/username-reference.md
@@ -7,6 +7,8 @@ versions:
ghes: '*'
ghec: '*'
contentType: reference
+category:
+ - Set up your account
---
## Changing your username
diff --git a/content/account-and-profile/tutorials/personalize-your-profile.md b/content/account-and-profile/tutorials/personalize-your-profile.md
index f3df437da03b..17a21d38c942 100644
--- a/content/account-and-profile/tutorials/personalize-your-profile.md
+++ b/content/account-and-profile/tutorials/personalize-your-profile.md
@@ -18,6 +18,8 @@ versions:
ghec: '*'
shortTitle: Personalize your profile
contentType: tutorials
+category:
+ - Customize your profile
---
> [!NOTE]
diff --git a/content/account-and-profile/tutorials/using-your-github-profile-to-enhance-your-resume.md b/content/account-and-profile/tutorials/using-your-github-profile-to-enhance-your-resume.md
index 39df60ae3757..ebf22e6ff4c4 100644
--- a/content/account-and-profile/tutorials/using-your-github-profile-to-enhance-your-resume.md
+++ b/content/account-and-profile/tutorials/using-your-github-profile-to-enhance-your-resume.md
@@ -7,6 +7,8 @@ shortTitle: Enhance your resume
redirect_from:
- /account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/using-your-github-profile-to-enhance-your-resume
contentType: tutorials
+category:
+ - Customize your profile
---
## How can my {% data variables.product.github %} profile help with my job search?
diff --git a/content/actions/concepts/security/openid-connect.md b/content/actions/concepts/security/openid-connect.md
index 23e9519d1fb2..d0fb16da9979 100644
--- a/content/actions/concepts/security/openid-connect.md
+++ b/content/actions/concepts/security/openid-connect.md
@@ -75,7 +75,8 @@ The following example OIDC token uses a subject (`sub`) that references a job en
"base_ref": "",
"event_name": "workflow_dispatch",{% ifversion actions-OIDC-custom-claim-enterprise %}
"enterprise": "avocado-corp",{% endif %}{% ifversion actions-OIDC-enterprise_id-claim %}
- "enterprise_id": "2",{% endif %}
+ "enterprise_id": "2",{% endif %}{% ifversion oidc-custom-properties %}
+ "repo_property_workspace_id": "ws-abc123",{% endif %}
"ref_type": "branch",
"job_workflow_ref": "octo-org/octo-automation/.github/workflows/oidc.yml@refs/heads/main",
"iss": "{% ifversion ghes %}https://HOSTNAME/_services/token{% else %}https://token.actions.githubusercontent.com{% endif %}",
@@ -113,6 +114,50 @@ For more information, see [AUTOTITLE](/actions/reference/openid-connect-referenc
{% data variables.product.prodname_actions %} workflows can use OIDC tokens instead of secrets to authenticate with cloud providers. Many popular cloud providers offer official login actions that simplify the process of using OIDC in your workflows. For more information about updating your workflows with specific cloud providers, see [AUTOTITLE](/actions/how-tos/security-for-github-actions/security-hardening-your-deployments).
+{% ifversion oidc-custom-properties %}
+
+## Using repository custom properties as OIDC claims
+
+> [!NOTE]
+> This feature is currently in public preview and is subject to change.
+
+Organization and enterprise admins can include repository custom properties as claims in OIDC tokens. Once added, every repository in the organization or enterprise that has a value set for that custom property will automatically include it in its OIDC tokens, prefixed with `repo_property_`.
+
+This allows you to create granular access policies that bind directly to your repository metadata, reducing configuration drift and eliminating the need to duplicate governance information across multiple systems.
+
+### Prerequisites
+
+* Custom properties must already be defined at the organization or enterprise level.
+* You must be an organization admin or enterprise admin.
+
+### Adding a custom property to OIDC token claims
+
+To include a custom property in OIDC tokens, use the REST API or the settings UI for your organization or enterprise.
+
+**Using the settings UI:** Navigate to your organization or enterprise's Actions OIDC settings page to view and manage which custom properties are included in OIDC tokens.
+
+
+
+
+* **Using the REST API:** Send a `POST` request to add a custom property to the OIDC token claims for your organization:
+
+### Example OIDC token with a custom property
+
+The following example shows an OIDC token that includes the `workspace_id` custom property:
+
+```json
+{
+ "sub": "repo:my-org/my-repo:ref:refs/heads/main",
+ "aud": "https://github.com/my-org",
+ "repository": "my-org/my-repo",
+ "repo_property_workspace_id": "ws-abc123"
+}
+```
+
+You can use the `repo_property_*` claims in your cloud provider's trust conditions to create flexible, attribute-based access control policies. For more information, see [AUTOTITLE](/actions/reference/openid-connect-reference#including-repository-custom-properties-in-oidc-tokens).
+
+{% endif %}
+
## OIDC support for {% data variables.product.prodname_dependabot %}
{% data variables.product.prodname_dependabot %} can use OIDC to authenticate with private registries, eliminating the need to store long-lived credentials as repository secrets. With OIDC-based authentication, {% data variables.product.prodname_dependabot %} update jobs can dynamically obtain short-lived credentials from your cloud identity provider.
diff --git a/content/actions/how-tos/deploy/configure-and-manage-deployments/configure-custom-protection-rules.md b/content/actions/how-tos/deploy/configure-and-manage-deployments/configure-custom-protection-rules.md
index 64b82d53c0ad..01ea3a559f5b 100644
--- a/content/actions/how-tos/deploy/configure-and-manage-deployments/configure-custom-protection-rules.md
+++ b/content/actions/how-tos/deploy/configure-and-manage-deployments/configure-custom-protection-rules.md
@@ -37,7 +37,6 @@ The following is a list of official partner implementations for deployment prote
* Honeycomb: you can define thresholds to reject or approve deployments based on data you are sending to Honeycomb. For more information, see [the Honeycomb app](https://github.com/apps/honeycomb-io) in the {% data variables.product.prodname_marketplace %}.
* New Relic: for more information, see [the New Relic app](https://github.com/apps/new-relic-gate) in the {% data variables.product.prodname_marketplace %}.
* NCM NodeSource: for more information, see [the NCM NodeSource app](https://github.com/apps/ncm-nodesource) in the {% data variables.product.prodname_marketplace %}.
-* Sentry: for more information, see [the Sentry Deployment Gate app](https://github.com/apps/sentry-deployment-gate) in the {% data variables.product.prodname_marketplace %}.
* ServiceNow: for more information, see [GitHub integration with DevOps Change Velocity](https://www.servicenow.com/docs/bundle/utah-devops/page/product/enterprise-dev-ops/concept/github-integration-dev-ops.html) in the ServiceNow documentation.
## Prerequisites
diff --git a/content/actions/reference/security/oidc.md b/content/actions/reference/security/oidc.md
index b5a6b5f904ec..7566adc7c384 100644
--- a/content/actions/reference/security/oidc.md
+++ b/content/actions/reference/security/oidc.md
@@ -68,6 +68,9 @@ The OIDC token includes the following claims.
| `repository_id`| The ID of the repository from where the workflow is running. |
| `repository_owner`| The name of the organization in which the `repository` is stored. |
| `repository_owner_id`| The ID of the organization in which the `repository` is stored. |
+| {% ifversion oidc-custom-properties %} |
+| `repo_property_*`| Custom properties defined at the organization or enterprise level that are included as claims in the OIDC token, prefixed with `repo_property_`. For more information, see [AUTOTITLE](#including-repository-custom-properties-in-oidc-tokens). |
+| {% endif %} |
| `run_id`| The ID of the workflow run that triggered the workflow. |
| `run_number`| The number of times this workflow has been run. |
| `run_attempt`| The number of times this workflow run has been retried. |
@@ -177,6 +180,9 @@ You can security harden your OIDC configuration by customizing the claims that a
* You can customize values for {% ifversion ghec %}`issuer` or {% endif %}`audience` claims. See {% ifversion ghec %}[Customizing the `issuer` value for an enterprise](#customizing-the-issuer-value-for-an-enterprise) and {% endif %}[Customizing the `audience` value](#customizing-the-audience-value).
* You can customize the format of your OIDC configuration by setting conditions on the subject (`sub`) claim that require JWT tokens to originate from a specific repository, reusable workflow, or other source.
* You can define granular OIDC policies by using additional OIDC token claims, such as `repository_id` and `repository_visibility`. See [AUTOTITLE](/actions/concepts/security/openid-connect#understanding-the-oidc-token).
+{% ifversion oidc-custom-properties %}
+* You can include repository custom properties as claims in OIDC tokens, enabling attribute-based access control policies. See [AUTOTITLE](#including-repository-custom-properties-in-oidc-tokens).
+{% endif %}
### Customizing the `audience` value
@@ -214,6 +220,52 @@ After this setting is applied, the JWT will contain the updated `iss` value. In
{% endif %}
+{% ifversion oidc-custom-properties %}
+
+### Including repository custom properties in OIDC tokens
+
+> [!NOTE]
+> This feature is currently in public preview and is subject to change.
+
+Organization and enterprise admins can select repository custom properties to include as claims in Actions OIDC tokens. Once a custom property is added to the OIDC configuration, every repository in the organization or enterprise that has a value set for that property will automatically include it in its OIDC tokens. The property name appears in the token prefixed with `repo_property_`.
+
+This allows you to create attribute-based access control (ABAC) policies in your cloud provider that bind directly to your repository metadata, reducing configuration drift and eliminating the need to manage separate access configuration for each repository.
+
+#### Prerequisites for including custom properties
+
+* Custom properties must already be defined at the organization or enterprise level.
+* You must be an organization admin or enterprise admin.
+* After adding a custom property to the OIDC configuration, all repositories in the organization or enterprise that have a value set for that property will automatically include it in their OIDC tokens.
+
+#### Adding a custom property to OIDC token claims
+
+You can manage which custom properties are included in OIDC tokens using the settings UI or the REST API.
+
+* **Using the settings UI:**
+
+ Navigate to your organization's or enterprise's Actions OIDC settings to view and configure which custom properties are included in OIDC tokens.
+
+* **Using the REST API:**
+
+ To add a custom property to your organization's OIDC token claims, send a `POST` request to:
+
+#### Example token with a custom property
+
+After a custom property is added to the OIDC configuration, repositories with a value set for that property will include it in their tokens. In the following example, the `workspace_id` custom property appears as `repo_property_workspace_id` in the token:
+
+```json
+{
+ "sub": "repo:my-org/my-repo:ref:refs/heads/main",
+ "aud": "https://github.com/my-org",
+ "repository": "my-org/my-repo",
+ "repo_property_workspace_id": "ws-abc123"
+}
+```
+
+You can use these `repo_property_*` claims as conditions in your cloud provider's trust policy. For an example, see [Example: Filtering on a repository custom property](#example-filtering-on-a-repository-custom-property).
+
+{% endif %}
+
### Customizing the subject claims for an organization or repository
To help improve security, compliance, and standardization, you can customize the standard claims to suit your required access conditions. If your cloud provider supports conditions on subject claims, you can create a condition that checks whether the `sub` value matches the path of the reusable workflow, such as `"job_workflow_ref:octo-org/octo-automation/.github/workflows/oidc.yml@refs/heads/main"`. The exact format will vary depending on your cloud provider's OIDC configuration. To configure the matching condition on {% data variables.product.prodname_dotcom %}, you can use the REST API to require that the `sub` claim must always include a specific custom claim, such as `job_workflow_ref`. You can use the REST API to apply a customization template for the OIDC subject claim; for example, you can require that the `sub` claim within the OIDC token must always include a specific custom claim, such as `job_workflow_ref`. For more information, see [AUTOTITLE](/rest/actions/oidc).
@@ -368,6 +420,26 @@ This example demonstrates how to handle context value with `:`. For example, whe
In your cloud provider's OIDC configuration, configure the `sub` condition to require that claims must include a specific value for `environment` and `repository_owner`. For example: `"sub": "environment:production%3Aeastus:repository_owner:octo-org"`.
{% endif %}
+{% ifversion oidc-custom-properties %}
+
+#### Example: Filtering on a repository custom property
+
+This example template allows the `sub` claim to include a repository custom property claim. Custom properties included in OIDC tokens appear prefixed with `repo_property_` in the token, but the `include_claim_keys` value uses the full claim name as it appears in the token.
+
+{% data reusables.actions.use-request-body-api %}
+
+```json
+{
+ "include_claim_keys": [
+ "repo_property_workspace_id"
+ ]
+}
+```
+
+In your cloud provider's OIDC configuration, configure the `sub` condition to require that claims must include a specific value for `repo_property_workspace_id`. For example: `"sub": "repo_property_workspace_id:ws-abc123"`.
+
+{% endif %}
+
#### Resetting organization template customizations
This example template resets the subject claims to the default format. This template effectively opts out of any organization-level customization policy.
diff --git a/content/actions/reference/workflows-and-actions/events-that-trigger-workflows.md b/content/actions/reference/workflows-and-actions/events-that-trigger-workflows.md
index 6217d19e7fe3..8addf2f0384f 100644
--- a/content/actions/reference/workflows-and-actions/events-that-trigger-workflows.md
+++ b/content/actions/reference/workflows-and-actions/events-that-trigger-workflows.md
@@ -997,7 +997,7 @@ jobs:
> * {% data reusables.actions.schedule-delay %}
> * {% data reusables.actions.branch-requirement %}
> * Scheduled workflows will only run on the default branch.
-> * In a public repository, scheduled workflows are automatically disabled when no repository activity has occurred in 60 days. For information on re-enabling a disabled workflow, see [AUTOTITLE](/enterprise-server/actions/using-workflows/disabling-and-enabling-a-workflow#enabling-a-workflow).
+> * In a public repository, scheduled workflows are automatically disabled when no repository activity has occurred in 60 days. For information on re-enabling a disabled workflow, see [AUTOTITLE](/actions/how-tos/manage-workflow-runs/disable-and-enable-workflows#enabling-a-workflow).
The `schedule` event allows you to trigger a workflow at a scheduled time.
diff --git a/content/admin/managing-iam/provisioning-user-accounts-with-scim/configuring-scim-provisioning-for-users.md b/content/admin/managing-iam/provisioning-user-accounts-with-scim/configuring-scim-provisioning-for-users.md
index ed5026d872a9..87defe609ce9 100644
--- a/content/admin/managing-iam/provisioning-user-accounts-with-scim/configuring-scim-provisioning-for-users.md
+++ b/content/admin/managing-iam/provisioning-user-accounts-with-scim/configuring-scim-provisioning-for-users.md
@@ -60,7 +60,7 @@ This table contains the network requirements to configure GHES SCIM with an IdP:
| System | Direction | Purpose | Protocol / Port | Notes |
|------------|------------|----------|------------------|-------|
-| GitHub Enterprise Server | Inbound | Receives SCIM API requests from IdP for users and groups | TCP 443 (HTTPS) | [AUTOTITLE](/enterprise-server/rest/enterprise-admin/scim) must be reachable from IdP |
+| GitHub Enterprise Server | Inbound | Receives SCIM API requests from IdP for users and groups | TCP 443 (HTTPS) | [AUTOTITLE](/rest/enterprise-admin/scim) must be reachable from IdP |
| Identity Provider (IdP) | Outbound | Sends SCIM provisioning requests to GitHub for users and groups | TCP 443 (HTTPS) | IdP acts as SCIM client, initiating outbound HTTPS connections to GitHub's SCIM API endpoints. |
* For authentication, your instance must use SAML SSO, or a mix of SAML and built-in authentication.
diff --git a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/troubleshooting-resource-allocation-problems.md b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/troubleshooting-resource-allocation-problems.md
index f58bab07456f..44279fae9fa7 100644
--- a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/troubleshooting-resource-allocation-problems.md
+++ b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/troubleshooting-resource-allocation-problems.md
@@ -20,7 +20,7 @@ shortTitle: Troubleshooting resource allocation problems
We recommend using the monitor dashboard to stay informed on your appliance's resource health and make decisions on how to fix high usage issues, such as the ones outlined on this page.
-For system-critical issues, and prior to making modifications to your appliance, we highly recommend contacting us by visiting {% data variables.contact.contact_ent_support %} and including your support bundle. For more information, see [Providing data to {% data variables.product.prodname_enterprise %} Support](/enterprise/{{ currentVersion}}/admin/guides/enterprise-support/providing-data-to-github-support#creating-and-sharing-support-bundles).
+For system-critical issues, and prior to making modifications to your appliance, we highly recommend contacting us by visiting {% data variables.contact.contact_ent_support %} and including your support bundle. For more information, see [AUTOTITLE](/enterprise/{{ currentVersion}}/support/contacting-github-support/providing-data-to-github-support#creating-and-sharing-support-bundles).
## High CPU usage
diff --git a/content/apps/creating-github-apps/registering-a-github-app/using-webhooks-with-github-apps.md b/content/apps/creating-github-apps/registering-a-github-app/using-webhooks-with-github-apps.md
index bc4d00d955f9..a489202efcda 100644
--- a/content/apps/creating-github-apps/registering-a-github-app/using-webhooks-with-github-apps.md
+++ b/content/apps/creating-github-apps/registering-a-github-app/using-webhooks-with-github-apps.md
@@ -31,7 +31,7 @@ When you activate webhooks for your {% data variables.product.prodname_github_ap
### Choosing a webhook URL for development and testing
-While you develop and test your app, you can use a webhook payload delivery service like [Smee](https://smee.io/) to capture and forward webhook payloads to your local development environment. Never use Smee for an application in production, because Smee channels are not authenticated or secure. Alternatively, you can use a tool like [ngrok](https://ngrok.com/docs/guides/developer-preview/getting-started/), [localtunnel](https://localtunnel.github.io/www/), or the [Hookdeck Console](https://console.hookdeck.com?provider=github) that exposes your local machine to the internet to receive the payloads.
+While you develop and test your app, you can use a webhook payload delivery service like [Smee](https://smee.io/) to capture and forward webhook payloads to your local development environment. Never use Smee for an application in production, because Smee channels are not authenticated or secure. Alternatively, you can use a tool like [ngrok](https://ngrok.com/docs/getting-started/), [localtunnel](https://localtunnel.github.io/www/), or the [Hookdeck Console](https://console.hookdeck.com?provider=github) that exposes your local machine to the internet to receive the payloads.
#### Creating a webhook URL with Smee
diff --git a/content/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app.md b/content/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app.md
index a6a5431e644a..b3b15b766520 100644
--- a/content/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app.md
+++ b/content/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app.md
@@ -902,7 +902,7 @@ The code above gets the full repository name and the head SHA of the commit from
## Step 2.3. Run RuboCop
-So far, your code clones the repository and creates check runs using your CI server. Now you'll get into the details of the [RuboCop linter](https://docs.rubocop.org/rubocop/usage/basic_usage.html#code-style-checker) and [checks annotations](/rest/checks/runs#create-a-check-run).
+So far, your code clones the repository and creates check runs using your CI server. Now you'll get into the details of the [RuboCop linter](https://docs.rubocop.org/rubocop/latest/usage/getting_started.html) and [checks annotations](/rest/checks/runs#create-a-check-run).
First, you'll add code to run RuboCop and save the style code errors in JSON format.
@@ -1144,7 +1144,7 @@ The following steps will show you how to test that the code works and view the C
So far you've created a CI test. In this section, you'll add one more feature that uses RuboCop to automatically fix the errors it finds. You already added the "Fix this" button in [Step 2.5. Update the check run with CI test results](#step-25-update-the-check-run-with-ci-test-results). Now you'll add the code to handle the `requested_action` check run event that's triggered when someone clicks the "Fix this" button.
-The RuboCop tool offers the `--auto-correct` command-line option to automatically fix the errors it finds. For more information, see [Autocorrecting offenses](https://docs.rubocop.org/rubocop/usage/basic_usage.html#autocorrecting-offenses) in the RuboCop documentation. When you use the `--auto-correct` feature, the updates are applied to the local files on the server. You'll need to push the changes to {% data variables.product.prodname_dotcom %} after RuboCop makes the fixes.
+The RuboCop tool offers the `--auto-correct` command-line option to automatically fix the errors it finds. For more information, see [Autocorrecting offenses](https://docs.rubocop.org/rubocop/latest/usage/autocorrect.html) in the RuboCop documentation. When you use the `--auto-correct` feature, the updates are applied to the local files on the server. You'll need to push the changes to {% data variables.product.prodname_dotcom %} after RuboCop makes the fixes.
To push to a repository, your app must have write permissions for "Contents" in a repository. You already set that permission to **Read & write** back in [Step 2.2. Allow RuboCop to clone the test repository](#step-22-allow-rubocop-to-clone-the-test-repository).
diff --git a/content/billing/concepts/product-billing/github-copilot-licenses.md b/content/billing/concepts/product-billing/github-copilot-licenses.md
index a36393c1629d..4432a5961c41 100644
--- a/content/billing/concepts/product-billing/github-copilot-licenses.md
+++ b/content/billing/concepts/product-billing/github-copilot-licenses.md
@@ -21,7 +21,7 @@ Usage of {% data variables.product.prodname_copilot %} is measured through a com
| Account type | Options |
|-------------------|-------------------------------------------------------------------------|
-| **Personal accounts** |
- {% data variables.copilot.copilot_pro_short %}: {% data variables.copilot.cfi_price_per_month %} per calendar month or {% data variables.copilot.cfi_price_per_year %} per year.
- {% data variables.copilot.copilot_pro_plus_short %}: {% data variables.copilot.cpp_price_per_month %} per calendar month or {% data variables.copilot.cpp_price_per_year %} per year.
- {% data variables.copilot.copilot_free_short %} offers limited access to {% data variables.product.prodname_copilot_short %} features at no cost.
|
+| **Personal accounts** | - {% data variables.copilot.copilot_pro_short %}: {% data variables.copilot.cfi_price_per_month %} per calendar month or {% data variables.copilot.cfi_price_per_year %} per year.
- {% data variables.copilot.copilot_pro_plus_short %}: {% data variables.copilot.cpp_price_per_month %} per calendar month or {% data variables.copilot.cpp_price_per_year %} per year.
- {% data variables.copilot.copilot_student_short %}: access to {% data variables.product.prodname_copilot_short %} premium features at no cost.
- {% data variables.copilot.copilot_free_short %}: limited access to {% data variables.product.prodname_copilot_short %} features at no cost.
|
| **Organizations** | {% data variables.copilot.copilot_business_short %}: {% data variables.copilot.cfb_price_per_month %} per user per month (billed monthly). |
| **Enterprises** | Choose {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %}, or mix them across organizations. Both are billed monthly, pricing varies. |
@@ -48,7 +48,8 @@ There are several ways to use {% data variables.product.prodname_copilot_short %
### Educational and open source benefits
-* {% data variables.copilot.copilot_pro_short %} is free for verified students, teachers, and maintainers of popular open source projects. See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-started-with-copilot-on-your-personal-account/getting-free-access-to-copilot-pro-as-a-student-teacher-or-maintainer).
+* {% data variables.copilot.copilot_student_short %} offers free access to {% data variables.product.prodname_copilot_short %}'s premium features for verified students. See [AUTOTITLE](/copilot/how-tos/manage-your-account/free-access-with-copilot-student).
+* {% data variables.copilot.copilot_pro_short %} is free for verified teachers and maintainers of popular open source projects. See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-started-with-copilot-on-your-personal-account/getting-free-access-to-copilot-pro-as-a-student-teacher-or-maintainer).
## How usage of {% data variables.product.prodname_copilot_short %} licenses is measured
diff --git a/content/code-security/concepts/code-scanning/codeql/codeql-query-packs.md b/content/code-security/concepts/code-scanning/codeql/codeql-query-packs.md
index 9dafa674093b..e2dc349ca4fc 100644
--- a/content/code-security/concepts/code-scanning/codeql/codeql-query-packs.md
+++ b/content/code-security/concepts/code-scanning/codeql/codeql-query-packs.md
@@ -58,7 +58,7 @@ The standard {% data variables.product.prodname_codeql %} packs for all supporte
* `codeql/ruby-queries`
* `codeql/swift-queries`
-For more information about compatibility between published query packs and different {% data variables.product.prodname_codeql %} releases, see [AUTOTITLE](/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/publishing-and-using-codeql-packs#about-codeql-pack-compatibility).
+For more information about compatibility between published query packs and different {% data variables.product.prodname_codeql %} releases, see [AUTOTITLE](/code-security/reference/code-scanning/codeql/codeql-cli/codeql-query-packs#codeql-pack-compatibility).
You can also use the {% data variables.product.prodname_codeql_cli %} to create your own {% data variables.product.prodname_codeql %} packs, add dependencies to packs, and install or update dependencies.
diff --git a/content/code-security/how-tos/manage-security-alerts/remediate-alerts-at-scale/filtering-alerts-in-security-overview.md b/content/code-security/how-tos/manage-security-alerts/remediate-alerts-at-scale/filtering-alerts-in-security-overview.md
index 1d5ef12c875a..ed6394fdd7d9 100644
--- a/content/code-security/how-tos/manage-security-alerts/remediate-alerts-at-scale/filtering-alerts-in-security-overview.md
+++ b/content/code-security/how-tos/manage-security-alerts/remediate-alerts-at-scale/filtering-alerts-in-security-overview.md
@@ -52,7 +52,7 @@ All security views have features to help you define filters. These provide an ea
## Applying simple filters
-1. In security overview, select the view of your choice on the left navigation panel. For instructions about how to access security overview, see [Accessing security overview for your organization](#accessing-ecurity-overview-for-your-organization) or [Accessing security overview for your enterprise](#accessing-ecurity-overview-for-your-enterprise).
+1. In security overview, select the view of your choice on the left navigation panel. For instructions about how to access security overview, see [Accessing security overview for your organization](#accessing-security-overview-for-your-organization) or [Accessing security overview for your enterprise](#accessing-security-overview-for-your-enterprise).
1. Click in the box adjacent to the **{% octicon "filter" aria-hidden="true" aria-label="filter" %} Filter** control. If there is text in the box, delete it. A popup shows available filters for the current view.
1. Select a filter and a value for the filter.
1. Press Enter.
diff --git a/content/code-security/how-tos/scan-code-for-vulnerabilities/scan-from-the-command-line/publish-and-use-packs.md b/content/code-security/how-tos/scan-code-for-vulnerabilities/scan-from-the-command-line/publish-and-use-packs.md
index 7e9b01ec9b37..7493c0c5b056 100644
--- a/content/code-security/how-tos/scan-code-for-vulnerabilities/scan-from-the-command-line/publish-and-use-packs.md
+++ b/content/code-security/how-tos/scan-code-for-vulnerabilities/scan-from-the-command-line/publish-and-use-packs.md
@@ -146,8 +146,7 @@ query pack to download, keep in mind that when you update your version of
also need to switch to a newer version of the query pack. Newer
versions of {% data variables.product.prodname_codeql %} _may_ provide
degraded performance when used with query packs that have been pinned
-to a very old version. For more information, see [About {% data variables.product.prodname_codeql %}
-pack compatibility](#about-codeql-pack-compatibility).
+to a very old version. For more information, see [AUTOTITLE](/code-security/reference/code-scanning/codeql/codeql-cli/codeql-query-packs#codeql-pack-compatibility).
## Using a {% data variables.product.prodname_codeql %} pack to analyze a {% data variables.product.prodname_codeql %} database
diff --git a/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-access-to-private-registries-for-dependabot.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-access-to-private-registries-for-dependabot.md
index 2a83cde15799..1236af9c8b4c 100644
--- a/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-access-to-private-registries-for-dependabot.md
+++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-access-to-private-registries-for-dependabot.md
@@ -47,7 +47,7 @@ The top-level `registries` key is optional and specifies authentication details.
{% data reusables.dependabot.dependabot-updates-registries-options %}
-For more information about the configuration options that are available and about the supported types, see [AUTOTITLE](/code-security/dependabot/working-with-dependabot/dependabot-options-reference#top-level-registries-key).
+For more information about the configuration options that are available and about the supported types, see [AUTOTITLE](/code-security/reference/supply-chain-security/dependabot-options-reference#top-level-registries-key).
## Storing credentials for Dependabot to use
diff --git a/content/code-security/reference/code-scanning/workflow-configuration-options.md b/content/code-security/reference/code-scanning/workflow-configuration-options.md
index cb80fa84e090..d97af96fa9b2 100644
--- a/content/code-security/reference/code-scanning/workflow-configuration-options.md
+++ b/content/code-security/reference/code-scanning/workflow-configuration-options.md
@@ -294,7 +294,7 @@ In the example below, `scope` is the organization or personal account that publi
> [!NOTE]
> If you specify a particular version of a query pack to use, beware that the version you specify may eventually become too old to be used efficiently by the default {% data variables.product.prodname_codeql %} engine used by the {% data variables.product.prodname_codeql %} action. To ensure optimal performance, if you need to specify exact query pack versions, you should consider reviewing periodically whether the pinned version of the query pack needs to be moved forward.
>
-> For more information about pack compatibility, see [AUTOTITLE](/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/publishing-and-using-codeql-packs#about-codeql-pack-compatibility).
+> For more information about pack compatibility, see [AUTOTITLE](/code-security/reference/code-scanning/codeql/codeql-cli/codeql-query-packs#codeql-pack-compatibility).
### Downloading {% data variables.product.prodname_codeql %} packs from {% data variables.product.prodname_ghe_server %}
diff --git a/content/code-security/tutorials/customize-code-scanning/customizing-analysis-with-codeql-packs.md b/content/code-security/tutorials/customize-code-scanning/customizing-analysis-with-codeql-packs.md
index 5e00cd146905..93e0a7864f0d 100644
--- a/content/code-security/tutorials/customize-code-scanning/customizing-analysis-with-codeql-packs.md
+++ b/content/code-security/tutorials/customize-code-scanning/customizing-analysis-with-codeql-packs.md
@@ -32,7 +32,7 @@ Before you can use a {% data variables.product.prodname_codeql %} query pack to
> [!NOTE]
> If you specify a particular version of a query pack to use, be aware that the version you specify may eventually become too old for the latest version of {% data variables.product.prodname_codeql %} to make efficient use of. To ensure optimal performance, if you need to specify exact query pack versions, you should reevaluate which versions you pin to whenever you upgrade the {% data variables.product.prodname_codeql_cli %} you're using.
>
-> For more information about pack compatibility, see [AUTOTITLE](/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/publishing-and-using-codeql-packs#about-codeql-pack-compatibility).
+> For more information about pack compatibility, see [AUTOTITLE](/code-security/reference/code-scanning/codeql/codeql-cli/codeql-query-packs#codeql-pack-compatibility).
### Basic example of downloading and using query packs
diff --git a/content/contributing/style-guide-and-content-model/style-guide.md b/content/contributing/style-guide-and-content-model/style-guide.md
index 55328e1b6cc2..40475487708c 100644
--- a/content/contributing/style-guide-and-content-model/style-guide.md
+++ b/content/contributing/style-guide-and-content-model/style-guide.md
@@ -1659,7 +1659,7 @@ Unless the content is about administering an enterprise product, describe an ind
With {% data variables.product.company_short %}'s enterprise products, administrators manage an enterprise account. An enterprise account can own multiple organizations, and people's user accounts can be members of the organizations. For more information, see the "Roles in an enterprise" article for each product.
* [{% data variables.product.prodname_ghe_cloud %}](/enterprise-cloud@latest/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise)
-* [{% data variables.product.prodname_ghe_server %}](/enterprise-server/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise)
+* [{% data variables.product.prodname_ghe_server %}](/enterprise-server@latest/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise)
If the reader manages an enterprise account, and you're describing the people's accounts that they manage, use "user account." This applies to the following products.
diff --git a/content/contributing/writing-for-github-docs/using-yaml-frontmatter.md b/content/contributing/writing-for-github-docs/using-yaml-frontmatter.md
index 28bf0b6298d3..5b93dea57065 100644
--- a/content/contributing/writing-for-github-docs/using-yaml-frontmatter.md
+++ b/content/contributing/writing-for-github-docs/using-yaml-frontmatter.md
@@ -41,7 +41,6 @@ For more information, see [`lib/frontmatter.ts`](https://github.com/github/docs/
* [`includeGuides`](#includeguides)
* [`journeyTracks`](#journeytracks)
* [`type`](#type)
-* [`topics`](#topics)
* [`communityRedirect`](#communityredirect)
* [`effectiveDate`](#effectivedate)
@@ -346,4 +345,4 @@ To create a product guides page (e.g. [{% data variables.product.prodname_action
* Define which articles to include with [`includeGuides`](#includeguides). Optional.
If using learning tracks, they need to be defined in [`data/learning-tracks/*.yml`](https://github.com/github/docs/tree/main/data/learning-tracks).
-If using `includeGuides`, make sure each of the articles in this list has [`topics`](#topics) and [`type`](#type) in its frontmatter.
+If using `includeGuides`, make sure each of the articles in this list has [`type`](#type) in its frontmatter.
diff --git a/content/copilot/concepts/agents/copilot-cli/about-copilot-cli.md b/content/copilot/concepts/agents/copilot-cli/about-copilot-cli.md
index d86f8c779123..35229e38cc52 100644
--- a/content/copilot/concepts/agents/copilot-cli/about-copilot-cli.md
+++ b/content/copilot/concepts/agents/copilot-cli/about-copilot-cli.md
@@ -240,7 +240,7 @@ The `--deny-tool` and `--allow-tool` options require one of the following argume
* `'shell(COMMAND)'`
- For example, `copilot --deny-tool 'shell(rm)'` prevents {% data variables.product.prodname_copilot_short %} from using any `rm` command.
+ For example, `copilot --deny-tool='shell(rm)'` prevents {% data variables.product.prodname_copilot_short %} from using any `rm` command.
For `git` and `gh` commands, you can specify a particular first-level subcommand to allow or deny. For example:
@@ -311,7 +311,7 @@ Each time you submit a prompt to {% data variables.product.prodname_copilot_shor
ACP (the Agent Client Protocol) is an open standard for interacting with AI agents. It allows you to use {% data variables.copilot.copilot_cli_short %} as an agent in any third-party tools, IDEs, or automation systems that support this protocol.
-For more information, see [AUTOTITLE](/copilot/reference/acp-server).
+For more information, see [AUTOTITLE](/copilot/reference/copilot-cli-reference/acp-server).
{% data reusables.cli.feedback %}
diff --git a/content/copilot/concepts/agents/copilot-cli/autopilot.md b/content/copilot/concepts/agents/copilot-cli/autopilot.md
index a1a71ad0e9d7..87b8c32cfd1b 100644
--- a/content/copilot/concepts/agents/copilot-cli/autopilot.md
+++ b/content/copilot/concepts/agents/copilot-cli/autopilot.md
@@ -63,7 +63,7 @@ You will get the best results from autopilot mode if you enable all permissions.
## Comparing autopilot mode, `--allow-all`, and `--no-ask-user`
-`--allow-all`, and its alias `--yolo`, are permissions-related options that you can pass to the `copilot` command when you start an interactive session. For a full list of available options, see [AUTOTITLE](/copilot/reference/cli-command-reference#command-line-options).
+`--allow-all`, and its alias `--yolo`, are permissions-related options that you can pass to the `copilot` command when you start an interactive session. For a full list of available options, see [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#command-line-options).
The `--allow-all` and `--yolo` options allow the CLI agent to use all tools, paths, and URLs. You can also set these permissions during an interactive session, by using the `/allow-all` or `/yolo` slash commands.
diff --git a/content/copilot/concepts/agents/copilot-cli/research.md b/content/copilot/concepts/agents/copilot-cli/research.md
index 1d5ac19da4d7..f8fb455690a8 100644
--- a/content/copilot/concepts/agents/copilot-cli/research.md
+++ b/content/copilot/concepts/agents/copilot-cli/research.md
@@ -140,7 +140,7 @@ To share the report you can either save it to a file or create a {% data variabl
ls -dtl ~/.copilot/session-state/*/ | head -10
```
-* **The research agent uses a specific model**: The research agent is hard-coded to use a particular AI model (see [AUTOTITLE](/copilot/reference/cli-command-reference#built-in-agents)). The model selection is not configurable via the `/model` command. The research agent always uses the defined model regardless of what model you've selected for your main session.
+* **The research agent uses a specific model**: The research agent is hard-coded to use a particular AI model (see [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#built-in-agents)). The model selection is not configurable via the `/model` command. The research agent always uses the defined model regardless of what model you've selected for your main session.
* **Report quality varies by query type**: The agent classifies your query into three types and adapts its response accordingly:
diff --git a/content/copilot/concepts/auto-model-selection.md b/content/copilot/concepts/auto-model-selection.md
index b7dbce996bc8..871b9440e6a2 100644
--- a/content/copilot/concepts/auto-model-selection.md
+++ b/content/copilot/concepts/auto-model-selection.md
@@ -13,12 +13,11 @@ category:
## Overview
-Experience less rate limiting and reduce the mental load of choosing a model by letting {% data variables.copilot.copilot_auto_model_selection %} automatically choose the best available model on your behalf.
+Experience less rate limiting and reduce the mental load of choosing a model by letting {% data variables.copilot.copilot_auto_model_selection %} choose the best available model on your behalf.
-{% data variables.copilot.copilot_auto_model_selection %} is currently optimized for model availability, choosing from a list of models that may change over time.
-
-With {% data variables.copilot.copilot_auto_model_selection %}, you benefit from:
- * Reduced chances of rate limiting
+{% data variables.copilot.copilot_auto_model_selection %} intelligently chooses models based on real time system health and model performance. You benefit from:
+ * Reduced rate limiting
+ * Lower latency and errors
* Discounted multipliers for paid plans ({% data variables.copilot.copilot_chat_short %} only)
{% data variables.copilot.copilot_auto_model_selection_short_cap_a %} **won't** include these models:
@@ -26,17 +25,17 @@ With {% data variables.copilot.copilot_auto_model_selection %}, you benefit from
* Models with premium request multipliers greater than one. See [AUTOTITLE](/copilot/reference/ai-models/supported-models#model-multipliers).
* Models not available in your plan. See [AUTOTITLE](/copilot/reference/ai-models/supported-models#supported-ai-models-per-copilot-plan).
-> [!NOTE] Soon {% data variables.copilot.copilot_auto_model_selection %} will choose the best model for you by taking into account both model availability and your task.
+> [!NOTE] Soon {% data variables.copilot.copilot_auto_model_selection %} will choose the best model for you based on your task.
## {% data variables.copilot.copilot_auto_model_selection_short_cap_a %} in {% data variables.copilot.copilot_chat_short %}
{% data variables.copilot.copilot_auto_model_selection_short_cap_a %} is generally available in the following IDEs:
* {% data variables.product.prodname_vscode_shortname %}
+ * JetBrains IDEs
{% data variables.copilot.copilot_auto_model_selection_short_cap_a %} is in public preview for the following IDEs:
* {% data variables.product.prodname_vs %}
* Eclipse
- * JetBrains IDEs
* Xcode
When you select **Auto** in {% data variables.copilot.copilot_chat_short %}, {% data variables.copilot.copilot_auto_model_selection_short_cap_a %} may choose from the following list of models, subject to your policies and subscription type. Models may change over time.
@@ -50,7 +49,7 @@ When you select **Auto** in {% data variables.copilot.copilot_chat_short %}, {%
> [!TIP] To see which model was used for each response, hover over the response in {% data variables.copilot.copilot_chat_short %}.
-While {% data variables.copilot.copilot_auto_model_selection_short %} is an option for {% data variables.copilot.copilot_chat_short %}, you can manually choose a different model to override this selection. {% data reusables.copilot.change-the-ai-model %}
+ {% data reusables.copilot.change-the-ai-model %}
### Multiplier discounts
@@ -65,6 +64,4 @@ During the {% data variables.release-phases.public_preview %}, if you're using a
When you select **Auto** in {% data variables.copilot.copilot_coding_agent %}, {% data variables.copilot.copilot_auto_model_selection_short_cap_a %} currently chooses from the following list of models, subject to your policies and subscription type:
{% data reusables.copilot.copilot-coding-agent-auto-models %}
-While {% data variables.copilot.copilot_auto_model_selection_short %} is an option for {% data variables.copilot.copilot_coding_agent %}, you can manually choose a different model to override this selection.
-
{% data reusables.copilot.change-the-ai-model-copilot-coding-agent %}
diff --git a/content/copilot/concepts/billing/copilot-requests.md b/content/copilot/concepts/billing/copilot-requests.md
index ef1b0084abfd..938c149c7011 100644
--- a/content/copilot/concepts/billing/copilot-requests.md
+++ b/content/copilot/concepts/billing/copilot-requests.md
@@ -35,6 +35,8 @@ Some {% data variables.product.prodname_copilot_short %} features use more advan
The following {% data variables.product.prodname_copilot_short %} features can use premium requests.
+{% rowheaders %}
+
| Feature | Premium request consumption | SKU Attribution |
| ------- | ----------- | ----------- |
| [{% data variables.copilot.copilot_chat_short %}](/copilot/using-github-copilot/copilot-chat) | {% data variables.copilot.copilot_chat_short %} uses **one premium request** per user prompt, multiplied by the model's rate. This includes ask, edit, agent, and plan modes in {% data variables.copilot.copilot_chat_short %} in an IDE. | {% data variables.product.prodname_copilot_short %} premium requests |
@@ -46,6 +48,8 @@ The following {% data variables.product.prodname_copilot_short %} features can u
| [{% data variables.product.prodname_openai_codex %} {% data variables.product.prodname_vscode %} integration](/copilot/concepts/agents/openai-codex) | While in preview, each prompt to {% data variables.product.prodname_openai_codex %} uses **one premium request** multiplied by the model multiplier rates. | {% data variables.product.prodname_copilot_short %} premium requests |
| [Third-party coding agents](/free-pro-team@latest/copilot/concepts/agents/about-third-party-agents) | While in preview, each prompt to a third-party coding agent uses **one premium request**. | {% data variables.product.prodname_copilot_short %} premium requests |
+{% endrowheaders %}
+
> [!TIP]
> For instructions on viewing how many premium requests you have used and advice on how to optimize usage, see [AUTOTITLE](/copilot/how-tos/manage-and-track-spending/monitor-premium-requests).
@@ -54,9 +58,9 @@ The following {% data variables.product.prodname_copilot_short %} features can u
If you use **{% data variables.copilot.copilot_free_short %}**, your plan comes with up to 2,000 inline suggestion requests and up to 50 premium requests per month. All chat interactions count as premium requests.
-If you're on a **paid plan**, you get unlimited inline suggestions and unlimited chat interactions using the included models ({% data variables.copilot.copilot_gpt_5_mini %}, {% data variables.copilot.copilot_gpt_41 %} and {% data variables.copilot.copilot_gpt_4o %}). Rate limiting is in place to accommodate for high demand. See [AUTOTITLE](/copilot/concepts/rate-limits).
+If you're on a **paid plan** or **{% data variables.copilot.copilot_student_short %}**, you get unlimited inline suggestions and unlimited chat interactions using the included models ({% data variables.copilot.copilot_gpt_5_mini %}, {% data variables.copilot.copilot_gpt_41 %} and {% data variables.copilot.copilot_gpt_4o %}). Rate limiting is in place to accommodate for high demand. See [AUTOTITLE](/copilot/concepts/rate-limits).
-Paid plans also receive a monthly allowance of premium requests, which can be used for advanced chat interactions, inline suggestions using premium models, and other premium features. For an overview of the amount of premium requests included in each plan, see [AUTOTITLE](/copilot/about-github-copilot/subscription-plans-for-github-copilot#comparing-copilot-plans).
+Paid plans and {% data variables.copilot.copilot_student_short %} also receive a monthly allowance of premium requests, which can be used for advanced chat interactions, inline suggestions using premium models, and other premium features. For an overview of the amount of premium requests included in each plan, see [AUTOTITLE](/copilot/about-github-copilot/subscription-plans-for-github-copilot#comparing-copilot-plans).
{% data reusables.copilot.premium-request-entity-selection %}
diff --git a/content/copilot/concepts/billing/individual-plans.md b/content/copilot/concepts/billing/individual-plans.md
index 96c19ab6f5d3..c1d8de74a968 100644
--- a/content/copilot/concepts/billing/individual-plans.md
+++ b/content/copilot/concepts/billing/individual-plans.md
@@ -16,7 +16,7 @@ category:
- Learn about Copilot
---
-{% data variables.product.company_short %} offers three {% data variables.product.prodname_copilot_short %} plans for individual developers, each designed to meet different needs based on your coding habits, interest in AI models, and desired level of flexibility.
+{% data variables.product.company_short %} offers three {% data variables.product.prodname_copilot_short %} plans for individual developers, as well as a dedicated student offering, each designed to meet different needs based on your coding habits, interest in AI models, and desired level of flexibility.
You can choose from the following plans.
@@ -31,6 +31,15 @@ For developers looking to get started with {% data variables.product.prodname_co
* Intended for **personal use only**, not for users managed by an organization or enterprise
* Great for developers who want to explore {% data variables.product.prodname_copilot_short %}'s capabilities before upgrading to a paid plan
+## {% data variables.copilot.copilot_student %}
+
+Verified students can access unlimited completions and additional models at no cost.
+
+* Includes **unlimited completions** in IDEs
+* Access to {% data variables.copilot.copilot_chat_short %} and additional models
+* Includes up to **300 premium requests** per month (additional at {% data variables.copilot.additional_premium_requests %} each)
+* Free for verified students
+
## {% data variables.copilot.copilot_pro %}
For developers who want more flexibility, including unlimited completions and access to additional models.
@@ -38,7 +47,7 @@ For developers who want more flexibility, including unlimited completions and ac
* Includes **unlimited completions** in IDEs
* Access to {% data variables.copilot.copilot_chat_short %} and additional models
* Includes up to **300 premium requests** per month (additional at {% data variables.copilot.additional_premium_requests %} each)
-* Free for verified students, teachers, and maintainers of popular open source projects
+* Free for verified teachers and maintainers of popular open source projects
## {% data variables.copilot.copilot_pro_plus %}
@@ -58,14 +67,14 @@ The following table highlights the key differences between individual {% data va
{% rowheaders %}
-| Feature | {% data variables.copilot.copilot_free %} | {% data variables.copilot.copilot_pro %} | {% data variables.copilot.copilot_pro_plus %} |
-|--------|----------------------------------------------------|--------------------------------------------------|----------------------------------------------------------|
-| Price | Free | {% data variables.copilot.cfi_price_per_month %} per month, or
{% data variables.copilot.cfi_price_per_year %} per year
([free](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-started-with-copilot-on-your-personal-account/getting-free-access-to-copilot-pro-as-a-student-teacher-or-maintainer) for some users) | {% data variables.copilot.cpp_price_per_month %} per month, or
{% data variables.copilot.cpp_price_per_year %} per year |
-| Real-time code suggestions with included models | Up to 2,000 per month | Unlimited | Unlimited |
-| Premium requests | 50 per month | 300 per month | 1,500 per month |
-| Purchase additional premium requests at {% data variables.copilot.additional_premium_requests %} per request | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| {% data variables.copilot.copilot_chat_short %} interactions[^1] | Up to 50 per month | Unlimited with included models | Unlimited with included models |
-| Access to premium models | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} Full access |
+| Feature | {% data variables.copilot.copilot_free %} | {% data variables.copilot.copilot_student %} | {% data variables.copilot.copilot_pro %} | {% data variables.copilot.copilot_pro_plus %} |
+|--------|----------------------------------------------------|----------------------------------------------|--------------------------------------------------|----------------------------------------------------------|
+| Price | Free | [Free](/copilot/how-tos/manage-your-account/free-access-with-copilot-student) | {% data variables.copilot.cfi_price_per_month %} per month, or
{% data variables.copilot.cfi_price_per_year %} per year
([free](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-started-with-copilot-on-your-personal-account/getting-free-access-to-copilot-pro-as-a-student-teacher-or-maintainer) for some users) | {% data variables.copilot.cpp_price_per_month %} per month, or
{% data variables.copilot.cpp_price_per_year %} per year |
+| Real-time code suggestions with included models | Up to 2,000 per month | Unlimited | Unlimited | Unlimited |
+| Premium requests | 50 per month | 300 per month | 300 per month | 1,500 per month |
+| Purchase additional premium requests at {% data variables.copilot.additional_premium_requests %} per request | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.copilot_chat_short %} interactions[^1] | Up to 50 per month | Unlimited with included models | Unlimited with included models | Unlimited with included models |
+| Access to premium models | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} Full access |
{% endrowheaders %}
@@ -78,6 +87,7 @@ For a detailed comparison of features and benefits, see [AUTOTITLE](/copilot/abo
Consider the following to decide which plan is right for you:
* **Just getting started?** Try {% data variables.copilot.copilot_free %} to explore basic functionality at no cost.
+* **Studying?** Choose {% data variables.copilot.copilot_student_short %} to access premium features at no cost.
* **Coding regularly with AI?** Upgrade to {% data variables.copilot.copilot_pro %} for more flexibility and access to premium features.
* **Want the best performance and most model access?** Go with {% data variables.copilot.copilot_pro_plus %} to unlock everything {% data variables.product.prodname_copilot_short %} has to offer.
diff --git a/content/copilot/get-started/plans.md b/content/copilot/get-started/plans.md
index edc98d80442f..5aa5218208ab 100644
--- a/content/copilot/get-started/plans.md
+++ b/content/copilot/get-started/plans.md
@@ -17,7 +17,9 @@ category:
* **{% data variables.copilot.copilot_free %}** is available to individual developers who don't have access to {% data variables.product.prodname_copilot_short %} through an organization or enterprise. This free plan includes limited access to select {% data variables.product.prodname_copilot_short %} features, allowing you to try AI-powered coding assistance at no cost.
-* **{% data variables.copilot.copilot_pro %}** is designed for individuals who want more flexibility. This paid plan includes unlimited completions, access to premium models in {% data variables.copilot.copilot_chat_short %}, access to {% data variables.copilot.copilot_coding_agent %}, and a monthly allowance of premium requests. Verified students, teachers, and maintainers of popular open source projects may be eligible for free access.
+* **{% data variables.copilot.copilot_student %}** is available to verified students. The plan includes unlimited completions, access to premium models in {% data variables.copilot.copilot_chat_short %}, access to {% data variables.copilot.copilot_coding_agent %}, and a monthly allowance of premium requests.
+
+* **{% data variables.copilot.copilot_pro %}** is designed for individuals who want more flexibility. This paid plan includes unlimited completions, access to premium models in {% data variables.copilot.copilot_chat_short %}, access to {% data variables.copilot.copilot_coding_agent %}, and a monthly allowance of premium requests. Verified teachers, and maintainers of popular open source projects may be eligible for free access.
* **{% data variables.copilot.copilot_pro_plus %}** offers the highest level of access for individual developers. In addition to everything in {% data variables.copilot.copilot_pro_short %}, this plan includes a larger allowance of premium requests, and full access to all available models in {% data variables.copilot.copilot_chat_short %}. Ideal for AI power users who want access to the most advanced capabilities.
@@ -41,6 +43,8 @@ Start using {% data variables.product.prodname_copilot_short %} by signing up fo
* **{% data variables.copilot.copilot_free_short %}** — Try {% data variables.product.prodname_copilot_short %} with limited features and requests. [Start using {% data variables.copilot.copilot_free_short %}](https://github.com/copilot?ref_product=copilot&ref_type=engagement&ref_style=text&ref_plan=free).
+* **{% data variables.copilot.copilot_student %}** — Get access to {% data variables.product.prodname_copilot_short %}'s premium features for free. [Access {% data variables.copilot.copilot_student %}](/copilot/how-tos/manage-your-account/free-access-with-copilot-student).
+
* **{% data variables.copilot.copilot_pro_short %}** — Get unlimited completions and access to premium models. Includes a free 30-day trial for eligible users. [Try {% data variables.copilot.copilot_pro_short %} for free](https://github.com/github-copilot/signup?ref_product=copilot&ref_type=trial&ref_style=text&ref_plan=pro).
* **{% data variables.copilot.copilot_pro_plus_short %}** — Unlock advanced AI models, extended request limits, and extra capabilities. [Subscribe to {% data variables.copilot.copilot_pro_plus_short %}](https://github.com/github-copilot/signup?ref_product=copilot&ref_type=purchase&ref_style=text&ref_plan=pro).
diff --git a/content/copilot/get-started/what-is-github-copilot.md b/content/copilot/get-started/what-is-github-copilot.md
index 95a6e03561a6..c1e08a408092 100644
--- a/content/copilot/get-started/what-is-github-copilot.md
+++ b/content/copilot/get-started/what-is-github-copilot.md
@@ -61,7 +61,7 @@ You can start using {% data variables.product.prodname_copilot_short %} in sever
* **Try {% data variables.product.prodname_copilot_short %} for free.** Use {% data variables.copilot.copilot_free_short %} to explore core features with no paid plan required.
* **Subscribe to a paid plan.** Upgrade to {% data variables.copilot.copilot_pro_short %} or {% data variables.copilot.copilot_pro_plus_short %} for full access to premium features and more generous usage limits.
* Try {% data variables.copilot.copilot_pro_short %} for free with a one-time 30-day trial.
-* **Get free access if you're eligible.** Students, teachers, and open source maintainers may qualify for {% data variables.copilot.copilot_pro_short %} at no cost. See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-free-access-to-copilot-as-a-student-teacher-or-maintainer).
+* **Get free access if you're eligible.** Students, teachers, and open source maintainers may qualify for access to premium features at no cost. See [AUTOTITLE](/copilot/how-tos/manage-your-account/free-access-with-copilot-student) and [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-free-access-to-copilot-as-a-student-teacher-or-maintainer).
* **Request access from your organization.** If your organization or enterprise has a {% data variables.product.prodname_copilot %} plan, you can request access by going to [https://github.com/settings/copilot](https://github.com/settings/copilot) and request access under "Get {% data variables.product.prodname_copilot_short %} from an organization."
See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-started-with-copilot-on-your-personal-account/getting-started-with-a-copilot-plan) for more information.
diff --git a/content/copilot/how-tos/chat-with-copilot/chat-in-ide.md b/content/copilot/how-tos/chat-with-copilot/chat-in-ide.md
index c34ecc34aace..a8dcbc5bc260 100644
--- a/content/copilot/how-tos/chat-with-copilot/chat-in-ide.md
+++ b/content/copilot/how-tos/chat-with-copilot/chat-in-ide.md
@@ -232,7 +232,7 @@ To leave feedback about the {% data variables.copilot.copilot_chat %} extension,
## Further reading
* [AUTOTITLE](/copilot/using-github-copilot/prompt-engineering-for-github-copilot)
-* [Using {% data variables.copilot.copilot_chat_short %} in {% data variables.product.prodname_vscode_shortname %}](https://code.visualstudio.com/docs/copilot/copilot-chat) and [Getting started with {% data variables.copilot.copilot_chat %} in {% data variables.product.prodname_vscode_shortname %}](https://code.visualstudio.com/docs/copilot/getting-started-chat) in the {% data variables.product.prodname_vscode %} documentation
+* [Using {% data variables.copilot.copilot_chat_short %} in {% data variables.product.prodname_vscode_shortname %}](https://code.visualstudio.com/docs/copilot/copilot-chat) and [Getting started with {% data variables.product.prodname_copilot %} in {% data variables.product.prodname_vscode_shortname %}](https://code.visualstudio.com/docs/copilot/getting-started) in the {% data variables.product.prodname_vscode %} documentation
* [AUTOTITLE](/copilot/github-copilot-enterprise/copilot-chat-in-github/using-github-copilot-chat-in-githubcom)
* [AUTOTITLE](/copilot/github-copilot-chat/about-github-copilot-chat)
* [AUTOTITLE](/free-pro-team@latest/site-policy/github-terms/github-terms-for-additional-products-and-features#github-copilot)
diff --git a/content/copilot/how-tos/copilot-cli/automate-copilot-cli/automate-with-actions.md b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/automate-with-actions.md
new file mode 100644
index 000000000000..fb28e66dfde5
--- /dev/null
+++ b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/automate-with-actions.md
@@ -0,0 +1,168 @@
+---
+title: Automating tasks with Copilot CLI and GitHub Actions
+shortTitle: Automate with Actions
+intro: Integrate {% data variables.copilot.copilot_cli %} into your {% data variables.product.prodname_actions %} workflows.
+product: '{% data reusables.gated-features.copilot-cli %}'
+versions:
+ feature: copilot
+contentType: how-tos
+category:
+ - Build with Copilot CLI
+ - Author and optimize with Copilot
+redirect_from:
+ - /copilot/how-tos/copilot-cli/automate-with-actions
+---
+
+You can run {% data variables.copilot.copilot_cli %} in a {% data variables.product.prodname_actions %} workflow to automate AI-powered tasks as part of your CI/CD process. For example, you can summarize recent repository activity, generate reports, or scaffold project content. {% data variables.copilot.copilot_cli %} runs on the Actions runner like any other CLI tool, so you can install it during a job and invoke it from workflow steps.
+
+## Using {% data variables.copilot.copilot_cli_short %} in an Actions workflow
+
+You can define a job in a {% data variables.product.prodname_actions %} workflow that: installs {% data variables.copilot.copilot_cli_short %} on the runner, authenticates it, runs it in programmatic mode, and then handles the results. Programmatic mode is designed for scripts and automation and lets you pass a prompt non-interactively.
+
+Workflows can follow this pattern:
+1. **Trigger**: Start the workflow on a schedule, in response to repository events, or manually.
+1. **Setup**: Checkout code, set up environment.
+1. **Install**: Install {% data variables.copilot.copilot_cli %} on the runner.
+1. **Authenticate**: Ensure the CLI has the necessary permissions to access the repository and make changes.
+1. **Run {% data variables.copilot.copilot_cli_short %}**: Invoke {% data variables.copilot.copilot_cli_short %} with a prompt describing the task you want to automate.
+
+### Example workflow
+
+The following workflow generates details of changes made today in the default branch of the repository and displays these details as the summary for the workflow run.
+
+```yaml copy
+name: Daily summary
+on:
+ workflow_dispatch:
+ # Run this workflow daily at 5:30pm UTC
+ schedule:
+ - cron: '30 17 * * *'
+permissions:
+ contents: read
+jobs:
+ daily-summary:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: {% data reusables.actions.action-checkout %}
+ with:
+ fetch-depth: 0
+
+ - name: Set up Node.js environment
+ uses: {% data reusables.actions.action-setup-node %}
+
+ - name: Install Copilot CLI
+ run: npm install -g @github/copilot
+
+ - name: Run Copilot CLI
+ env:
+ {% raw %}COPILOT_GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}{% endraw %}
+ run: |
+ copilot -p "Review the git log for this repository and write a bullet point summary of all code changes that were made today, with links to the relevant commit on GitHub. Above the bullet list give a description (max 100 words) summarizing the changes made. Write the details to summary.md" --allow-tool='shell(git:*)' --allow-tool=write --no-ask-user
+ cat summary.md >> "$GITHUB_STEP_SUMMARY"
+```
+
+The following sections explain each part of this workflow.
+
+## Trigger
+
+In this example, the workflow runs on a daily schedule and can also be triggered manually.
+
+The `workflow_dispatch` trigger lets you run the workflow manually from the **Actions** tab of your repository on {% data variables.product.github %}, which is useful when testing changes to your prompt or workflow configuration.
+
+The `schedule` trigger runs the workflow automatically at a specified time using cron syntax.
+
+```yaml copy
+on:
+ # Allows manual triggering of this workflow
+ workflow_dispatch:
+ # Run this workflow daily at 11:55pm UTC
+ schedule:
+ - cron: '55 23 * * *'
+```
+
+## Setup
+
+Set up the job so {% data variables.copilot.copilot_cli_short %} can access your repository and run on the Actions runner. This allows {% data variables.copilot.copilot_cli_short %} to analyze the repository context, when generating the daily summary.
+
+The `permissions` block defines the scope granted to the built-in `GITHUB_TOKEN`. Because this workflow reads repository data and prints a summary to the logs, it requires `contents: read`.
+
+```yaml copy
+permissions:
+ contents: read
+jobs:
+ daily-summary:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: {% data reusables.actions.action-checkout %}
+ with:
+ fetch-depth: 0
+```
+
+## Install
+
+Install {% data variables.copilot.copilot_cli_short %} on the runner so your workflow can invoke it as a command. You can install {% data variables.copilot.copilot_cli %} using any supported installation method. For a full list of installation options, see [AUTOTITLE](/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli).
+
+In this example, the workflow installs {% data variables.copilot.copilot_cli %} globally with npm.
+
+```yaml copy
+- name: Set up Node.js environment
+ uses: {% data reusables.actions.action-setup-node %}
+
+- name: Install Copilot CLI
+ run: npm install -g @github/copilot
+```
+
+## Authenticate
+
+To allow {% data variables.copilot.copilot_cli_short %} to run on an Actions runner, you need to authenticate a {% data variables.product.github %} user account with a valid {% data variables.product.prodname_copilot_short %} license.
+
+**Step 1: Create a {% data variables.product.pat_generic %} (PAT) with the "Copilot Requests" permission:**
+1. Go to your personal settings for creating a {% data variables.product.pat_v2 %}: [github.com/settings/personal-access-tokens/new](https://github.com/settings/personal-access-tokens/new?ref_product=copilot&ref_type=engagement&ref_style=text).
+1. Create a new PAT with the "Copilot Requests" permission.
+1. Copy the token value.
+
+**Step 2: Store the PAT as an Actions repository secret:**
+1. In your repository, go to **Settings** > **Secrets and variables** > **Actions** and click **New repository secret**.
+1. Give the secret a name that you will use in the workflow. In this example we're using `PERSONAL_ACCESS_TOKEN` as the name of the secret.
+1. Paste the token value into the "Secret" field and click **Add secret**.
+
+The workflow sets a special environment variable with the value of the repository secret. {% data variables.copilot.copilot_cli_short %} supports several special environment variables for authentication. In this example, the workflow uses `COPILOT_GITHUB_TOKEN`, which is specific to {% data variables.copilot.copilot_cli_short %} and allows you to set different permissions for {% data variables.product.prodname_copilot_short %} than you might use elsewhere with the built-in `GITHUB_TOKEN` environment variable.
+
+```yaml copy
+- name: Run Copilot CLI
+ env:
+ {% raw %}COPILOT_GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}{% endraw %}
+```
+
+## Run {% data variables.copilot.copilot_cli_short %}
+
+Use `copilot -p PROMPT [OPTIONS]` to run the CLI programmatically and exit when the command completes.
+
+The CLI prints its response to standard output, which is recorded in the log for the Actions workflow run. However, to make the details of changes easier to access, this example adds this information to the summary for the workflow run.
+
+```yaml copy
+ run: |
+ copilot -p "Review the git log for this repository and write a bullet point summary of all code changes that were made today, with links to the relevant commit on GitHub. Above the bullet list give a description (max 100 words) summarizing the changes made. Write the details to summary.md" --allow-tool='shell(git:*)' --allow-tool=write --no-ask-user
+ cat summary.md >> "$GITHUB_STEP_SUMMARY"
+```
+
+This example uses several options after the CLI prompt:
+
+* `--allow-tool='shell(git:*)'` allows {% data variables.product.prodname_copilot_short %} to run Git commands to analyze the repository history. This is necessary to generate the summary of recent changes.
+* `--allow-tool='write'` allows {% data variables.product.prodname_copilot_short %} to write the generated summary to a file on the runner.
+* `--no-ask-user` prevents the CLI from prompting for user input, which is important when running in an automated workflow where there is no user to respond to requests for additional input.
+
+## Next steps
+
+After you confirm the workflow generates a summary of changes, you can adapt the same pattern to other automation tasks. Start by changing the prompt you pass to `copilot -p PROMPT`, then decide what you want to do with the output. For example, you could:
+
+* Create a pull request to update a changelog file in the repository with the day's changes.
+* Email the summary to the repository maintainers.
+
+## Further reading
+
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference)
+* [AUTOTITLE](/actions)
+* [AUTOTITLE](/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically)
diff --git a/content/copilot/how-tos/copilot-cli/automate-copilot-cli/index.md b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/index.md
new file mode 100644
index 000000000000..7affae6ec93d
--- /dev/null
+++ b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/index.md
@@ -0,0 +1,12 @@
+---
+title: Automate with GitHub Copilot CLI
+shortTitle: Automate with Copilot CLI
+intro: 'Learn how to use {% data variables.copilot.copilot_cli_short %} in the terminal, in scripts, or in Actions workflows.'
+versions:
+ feature: copilot
+contentType: how-tos
+children:
+ - /quickstart
+ - /run-cli-programmatically
+ - /automate-with-actions
+---
diff --git a/content/copilot/how-tos/copilot-cli/automate-copilot-cli/quickstart.md b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/quickstart.md
new file mode 100644
index 000000000000..9013e0fa8dc6
--- /dev/null
+++ b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/quickstart.md
@@ -0,0 +1,87 @@
+---
+title: Quickstart for automating with {% data variables.copilot.copilot_cli %}
+shortTitle: Quickstart
+allowTitleToDifferFromFilename: true
+intro: "Build an automation with {% data variables.copilot.copilot_cli_short %} in minutes."
+versions:
+ feature: copilot
+redirect_from:
+ - /copilot/how-tos/copilot-cli/automate-copilot-cli/overview
+contentType: how-tos
+category:
+ - Author and optimize with Copilot # Copilot discovery page
+ - Build with Copilot CLI # Copilot CLI bespoke page
+ - Quickstarts
+---
+
+## Overview
+
+You can use {% data variables.copilot.copilot_cli %} to programmatically run Copilot prompts. There are two main ways to do this:
+
+* Run a {% data variables.copilot.copilot_cli_short %} prompt directly from your terminal.
+* Write a script or automation that leverages {% data variables.copilot.copilot_cli_short %}.
+
+This guide will walk you through a simple use case for each option.
+
+## Run a prompt from the command line
+
+When you want to pass {% data variables.copilot.copilot_cli_short %} a prompt without initiating an interactive session, use the `-p` flag.
+
+```shell copy
+copilot -p "Summarize what this file does: ./README.md"
+```
+
+Any prompt you would type in an interactive session works with `-p`.
+
+## Use {% data variables.copilot.copilot_cli_short %} in a script
+
+The real power of programmatic mode comes from writing scripts to automate AI-powered tasks. Within a script, you can generate the prompt, or replace parts of a prompt with dynamic content, and then capture the output or pass it to another part of the script.
+
+Let's create a script that finds all files larger than 10 MB in the current directory, uses {% data variables.copilot.copilot_cli_short %} to generate a brief description of each file, and then emails a summary report.
+
+1. In your repository, create a new file called `find_large_files.sh` and add the following content.
+
+ ```bash copy
+ #!/bin/bash
+ # Find files over 10 MB, use Copilot CLI to describe them, and email a summary
+
+ EMAIL_TO="user@example.com"
+ SUBJECT="Large file found"
+ BODY=""
+
+ while IFS= read -r -d '' file; do
+ size=$(du -h "$file" | cut -f1)
+ description=$(copilot -p "Describe this file briefly: $file" -s 2>/dev/null)
+ BODY+="File: $file"$'\n'"Size: $size"$'\n'"Description: $description"$'\n\n'
+ done < <(find . -type f -size +10M -print0)
+
+ if [ -z "$BODY" ]; then
+ echo "No files over 10MB found."
+ exit 0
+ fi
+
+ echo -e "To: $EMAIL_TO\nSubject: $SUBJECT\n\n$BODY" | sendmail "$EMAIL_TO"
+ echo "Email sent to $EMAIL_TO with large file details."
+ ```
+
+1. Make the script executable.
+
+ ```shell copy
+ chmod +x find_large_files.sh
+ ```
+
+1. Run the script.
+
+ ```shell copy
+ ./find_large_files.sh
+ ```
+
+This script leverages {% data variables.copilot.copilot_cli_short %} to generate descriptions of the files you are searching for, so you can quickly understand the contents of large files without opening them.
+
+You can also automatically trigger these scripts in response to events, such as a new file being added to a directory, or on a schedule using cron jobs or CI/CD pipelines.
+
+## Further reading
+
+* [AUTOTITLE](/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically)
+* [AUTOTITLE](/copilot/how-tos/copilot-cli/automate-copilot-cli/automate-with-actions)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-programmatic-reference)
diff --git a/content/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically.md b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically.md
new file mode 100644
index 000000000000..35feb33747a1
--- /dev/null
+++ b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically.md
@@ -0,0 +1,168 @@
+---
+title: Running {% data variables.copilot.copilot_cli %} programmatically
+shortTitle: Run the CLI programmatically
+allowTitleToDifferFromFilename: true
+intro: "Use {% data variables.copilot.copilot_cli_short %} in the terminal, in scripts, or in Actions workflows."
+versions:
+ feature: copilot
+contentType: how-tos
+category:
+ - Author and optimize with Copilot # Copilot discovery page
+ - Build with Copilot CLI # Copilot CLI bespoke page
+---
+
+## Introduction
+
+You can pass a prompt directly to {% data variables.copilot.copilot_cli_short %} in a single command, without entering an interactive session. This allows you to use {% data variables.product.prodname_copilot_short %} directly from the terminal, but also allows you to use the CLI programmatically in scripts, CI/CD pipelines, and automation workflows.
+
+To use {% data variables.copilot.copilot_cli_short %} programmatically you can do either of the following.
+
+* Use the `copilot` command with the `-p` or `--prompt` command-line option, followed by your prompt:
+
+ ```shell copy
+ copilot -p "Explain this file: ./complex.ts"
+ ```
+
+* Pipe a prompt to the `copilot` command:
+
+ ```shell copy
+ echo "Explain this file: ./complex.ts" | copilot
+ ```
+
+ > [!NOTE]
+ > Piped input is ignored if you also provide a prompt with the `-p` or `--prompt` option.
+
+## Tips for using {% data variables.copilot.copilot_cli_short %} programmatically
+
+* **Provide precise prompts** — clear, unambiguous instructions produce better results than vague requests. The more context you give—file names, function names, the exact change—the less guesswork {% data variables.product.prodname_copilot_short %} has to do.
+* **Quote prompts carefully** — use single quotes around your prompt if you want to avoid shell interpretation of special characters.
+* **Always give minimal permissions** — use the `--allow-tool=[TOOLS...]` and `--allow-url=[URLs...]` command-line options to give {% data variables.product.prodname_copilot_short %} permission to use only the tools and access that are necessary to complete the task. Avoid using overly permissive options (such as `--allow-all`) unless you are working in a sandbox environment.
+* **Use `-s` (silent)** when capturing output. This suppresses session metadata so you get clean text.
+* **Use `--no-ask-user`** to prevent the agent from attempting to ask clarifying questions.
+* **Set a model explicitly** with `--model` for consistent behavior across environments.
+
+See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-programmatic-reference) for options that are particularly useful when running {% data variables.copilot.copilot_cli_short %} programmatically.
+
+## CI/CD integration
+
+A common use case for running {% data variables.copilot.copilot_cli_short %} programmatically is to include a CLI command in a CI/CD workflow step.
+
+This extract from a {% data variables.product.prodname_actions %} workflow shows a simple example of running a {% data variables.copilot.copilot_cli_short %} command.
+
+```yaml
+# Workflow step using Copilot CLI
+- name: Generate test coverage report
+ env:
+ {% raw %}COPILOT_GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}{% endraw %}
+ run: |
+ copilot -p "Run the test suite and produce a coverage summary" \
+ -s --allow-tool='shell(npm:*), write' --no-ask-user
+```
+
+For more information, see [AUTOTITLE](/copilot/how-tos/copilot-cli/automate-copilot-cli/automate-with-actions).
+
+## Examples of programmatic usage
+
+### Generate a commit message
+
+```bash copy
+copilot -p 'Write a commit message in plain text for the staged changes' -s \
+ --allow-tool='shell(git:*)'
+```
+
+### Summarize a file
+
+```bash copy
+copilot -p 'Summarize what src/auth/login.ts does in no more than 100 words' -s
+```
+
+### Write tests for a module
+
+```bash copy
+copilot -p 'Write unit tests for src/utils/validators.ts' \
+ --allow-tool='write, shell(npm:*), shell(npx:*)'
+```
+
+### Fix lint errors
+
+```bash copy
+copilot -p 'Fix all ESLint errors in this project' \
+ --allow-tool='write, shell(npm:*), shell(npx:*), shell(git:*)'
+```
+
+### Explain a diff
+
+```bash copy
+copilot -p 'Explain the changes in the latest commit on this branch and flag any potential issues' -s
+```
+
+### Code review a branch
+
+Use `/review` slash command to have the built-in `code-review` agent review the code changes on the current branch.
+
+```bash copy
+copilot -p '/review the changes on this branch compared to main. Focus on bugs and security issues.' \
+ -s --allow-tool='shell(git:*)'
+```
+
+### Generate documentation
+
+```bash copy
+copilot -p 'Generate JSDoc comments for all exported functions in src/api/' \
+ --allow-tool=write
+```
+
+### Export a session
+
+Save the full session transcript to a Markdown file on the local filesystem.
+
+```bash copy
+copilot -p "Audit this project's dependencies for vulnerabilities" \
+ --allow-tool='shell(npm:*), shell(npx:*)' \
+ --share='./audit-report.md'
+```
+
+Save the session transcript to a gist on {% data variables.product.prodname_dotcom_the_website %} for easy sharing.
+
+```bash copy
+copilot -p 'Summarize the architecture of this project' --share-gist
+```
+
+> [!NOTE]
+> Gists are not available to {% data variables.product.prodname_emus %}, or if you use {% data variables.product.prodname_ghe_cloud %} with data residency (*.ghe.com).
+
+## Shell scripting patterns
+
+### Capture {% data variables.product.prodname_copilot_short %}'s output in a variable
+
+```bash copy
+result=$(copilot -p 'What version of Node.js does this project require? \
+ Give the number only. No other text.' -s)
+echo "Required Node version: $result"
+```
+
+### Use in a conditional
+
+```bash copy
+if copilot -p 'Does this project have any TypeScript errors? Reply only YES or NO.' -s \
+ | grep -qi "no"; then
+ echo "No type errors found."
+else
+ echo "Type errors detected."
+fi
+```
+
+### Process multiple files
+
+```bash copy
+for file in src/api/*.ts; do
+ echo "--- Reviewing $file ---" | tee -a review-results.md
+ copilot -p "Review $file for error handling issues" -s --allow-all-tools | tee -a review-results.md
+done
+```
+
+## Further reading
+
+* [AUTOTITLE](/copilot/how-tos/copilot-cli)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-programmatic-reference)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#command-line-options)
diff --git a/content/copilot/how-tos/copilot-cli/automate-with-actions.md b/content/copilot/how-tos/copilot-cli/automate-with-actions.md
deleted file mode 100644
index a344cc1e43df..000000000000
--- a/content/copilot/how-tos/copilot-cli/automate-with-actions.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-title: Automating tasks with Copilot CLI and GitHub Actions
-shortTitle: Automate with Actions
-intro: Integrate {% data variables.copilot.copilot_cli %} into your {% data variables.product.prodname_actions %} workflows.
-product: '{% data reusables.gated-features.copilot-cli %}'
-versions:
- feature: copilot
-contentType: how-tos
-category:
- - Build with Copilot CLI
- - Author and optimize with Copilot
----
-
-You can run {% data variables.copilot.copilot_cli %} in a {% data variables.product.prodname_actions %} workflow to automate AI-powered tasks as part of your CI/CD process. For example, you can summarize recent repository activity, generate reports, or scaffold project content. {% data variables.copilot.copilot_cli %} runs on the Actions runner like any other CLI tool, so you can install it during a job and invoke it from workflow steps.
-
-## Understanding the workflow
-
-You can define a job in a {% data variables.product.prodname_actions %} workflow that: installs {% data variables.copilot.copilot_cli_short %} on the runner, authenticates it, runs it in programmatic mode, and then handles the results. Programmatic mode is designed for scripts and automation and lets you pass a prompt non-interactively.
-
-Workflows can follow this pattern:
-1. **Trigger**: Start the workflow on a schedule, in response to repository events, or manually.
-1. **Setup**: Checkout code, set up environment.
-1. **Install**: Install {% data variables.copilot.copilot_cli %} on the runner.
-1. **Authenticate**: Ensure the CLI has the necessary permissions to access the repository and make changes.
-1. **Run {% data variables.copilot.copilot_cli_short %}**: Invoke {% data variables.copilot.copilot_cli_short %} with a prompt describing the task you want to automate.
-
-The following workflow generates a daily summary of repository changes and prints the summary to the workflow logs.
-
-```yaml copy
-name: Daily summary
-on:
- workflow_dispatch:
- # Daily at 8:25 UTC
- schedule:
- - cron: '25 8 * * *'
-permissions:
- contents: read
-jobs:
- daily-summary:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: {% data reusables.actions.action-checkout %}
-
- - name: Set up Node.js environment
- uses: {% data reusables.actions.action-setup-node %}
-
- - name: Install Copilot CLI
- run: npm install -g @github/copilot
-
- - name: Run Copilot CLI
- env:
- {% raw %}COPILOT_GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}{% endraw %}
- run: |
- TODAY=$(date +%Y-%m-%d)
- copilot -p "Review the git log for this repository and write a bullet point summary of all code changes that were made today ($TODAY). Include a brief description of what was changed."
-```
-
-## Trigger
-
-In this example, the workflow runs on a daily schedule and can also be triggered manually.
-
-`The workflow_dispatch` trigger lets you run the workflow manually from the Actions tab, which is useful when testing changes to your prompt or workflow configuration.
-
-The `schedule` trigger runs the workflow automatically at a specified time using cron syntax.
-
-```yaml copy
-on:
- # Allows manual triggering of this workflow.
- workflow_dispatch:
- # Daily at 8:30 UTC
- schedule:
- - cron: '30 8 * * *'
-```
-
-## Setup
-
-Set up the job so {% data variables.copilot.copilot_cli_short %} can access your repository and run on the runner. This allows {% data variables.copilot.copilot_cli_short %} to analyze the repository context, when generating the daily summary.
-
-The `permissions` block defines the scope granted to the built-in `GITHUB_TOKEN`. Because this workflow reads repository data and prints a summary to the logs, it requires `contents: read`.
-
-```yaml copy
-permissions:
- contents: read
-jobs:
- daily-summary:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: {% data reusables.actions.action-checkout %}
-```
-
-## Install
-
-Install {% data variables.copilot.copilot_cli_short %} on the runner so your workflow can invoke it as a command. You can install {% data variables.copilot.copilot_cli %} using any supported installation method. For a full list of installation options, see [AUTOTITLE](/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli).
-
-In this example, the workflow installs {% data variables.copilot.copilot_cli %} globally with npm.
-
-```yaml copy
-- name: Set up Node.js environment
- uses: {% data reusables.actions.action-setup-node %}
-
-- name: Install Copilot CLI
- run: npm install -g @github/copilot
-```
-
-## Authenticate
-
-To authenticate {% data variables.copilot.copilot_cli_short %} in a workflow, create a {% data variables.product.pat_v2 %} (PAT) with the **Copilot Requests** permission. Store the PAT as a repository secret, then pass it to the CLI using an environment variable. For more information on creating a PAT for the CLI, see [Authenticating with a {% data variables.product.pat_generic %}](/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli#authenticating-with-a-personal-access-token).
-
-{% data variables.copilot.copilot_cli_short %} supports multiple authentication environment variables. In this example, the workflow uses `COPILOT_GITHUB_TOKEN`, which is specific to {% data variables.copilot.copilot_cli_short %} and avoids confusion for the built-in `GITHUB_TOKEN` environment variable.
-
-```yaml copy
-- name: Run Copilot CLI
- env:
- {% raw %}COPILOT_GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}{% endraw %}
-```
-
-
-## Run {% data variables.copilot.copilot_cli_short %}
-
-Run {% data variables.copilot.copilot_cli_short %} in programmatic mode when you want to use it in automation.
-`copilot -p PROMPT` executes a prompt programmatically and exits when the command completes.
-
-In this workflow, {% data variables.copilot.copilot_cli_short %} references the repository content that is available in the job workspace. The command prints its response to standard output and the summary appears in the workflow logs.
-
-```yaml copy
-- name: Run Copilot CLI
- env:
- {% raw %}COPILOT_GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}{% endraw %}
- run: |
- TODAY=$(date +%Y-%m-%d)
- copilot -p "Review the git log for this repository and write a bullet point summary of all code changes that were made today ($TODAY). Include a brief description of what was changed."
-```
-
-## Next steps
-
-After you confirm the workflow prints a summary to the logs, you can adapt the same pattern to other automation tasks. Start by changing the prompt you pass to `copilot -p PROMPT`, then decide what you want to do with the output.
-
-* Write the summary to a file so later steps can use it as input.
-* Post the summary as a comment on an issue or a message in a team chat.
-* Summarize requests and output a draft changelog.
-
-## Further reading
-
-* [AUTOTITLE](/copilot/reference/cli-command-reference)
-* [AUTOTITLE](/copilot/reference/cli-plugin-reference)
-
diff --git a/content/copilot/how-tos/copilot-cli/cli-best-practices.md b/content/copilot/how-tos/copilot-cli/cli-best-practices.md
index b73b1490ff9f..d5e67da78429 100644
--- a/content/copilot/how-tos/copilot-cli/cli-best-practices.md
+++ b/content/copilot/how-tos/copilot-cli/cli-best-practices.md
@@ -496,5 +496,5 @@ Here is what you will learn:
* [AUTOTITLE](/copilot/concepts/agents/about-copilot-cli)
* [AUTOTITLE](/copilot/how-tos/use-copilot-agents/use-copilot-cli)
-* [AUTOTITLE](/copilot/reference/cli-command-reference)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference)
* [{% data variables.product.prodname_copilot_short %} plans and pricing](https://github.com/features/copilot/plans)
diff --git a/content/copilot/how-tos/copilot-cli/customize-copilot/create-custom-agents-for-cli.md b/content/copilot/how-tos/copilot-cli/customize-copilot/create-custom-agents-for-cli.md
index 60636e1be089..2fbb6f8c3c30 100644
--- a/content/copilot/how-tos/copilot-cli/customize-copilot/create-custom-agents-for-cli.md
+++ b/content/copilot/how-tos/copilot-cli/customize-copilot/create-custom-agents-for-cli.md
@@ -136,5 +136,5 @@ Each {% data variables.copilot.copilot_custom_agent_short %} is defined by a Mar
* [AUTOTITLE](/copilot/concepts/agents/copilot-cli/comparing-cli-features)
* [AUTOTITLE](/copilot/reference/custom-agents-configuration)
-* [AUTOTITLE](/copilot/reference/cli-command-reference#custom-agents-reference)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#custom-agents-reference)
* [AUTOTITLE](/copilot/tutorials/customization-library/custom-agents)—a curated collection of examples
diff --git a/content/copilot/how-tos/copilot-cli/customize-copilot/index.md b/content/copilot/how-tos/copilot-cli/customize-copilot/index.md
index 04488fa17204..4111b25508f3 100644
--- a/content/copilot/how-tos/copilot-cli/customize-copilot/index.md
+++ b/content/copilot/how-tos/copilot-cli/customize-copilot/index.md
@@ -6,7 +6,7 @@ versions:
feature: copilot
contentType: how-tos
children:
- - /quickstart-for-customizing
+ - /overview
- /add-custom-instructions
- /use-hooks
- /create-skills
diff --git a/content/copilot/how-tos/copilot-cli/customize-copilot/quickstart-for-customizing.md b/content/copilot/how-tos/copilot-cli/customize-copilot/overview.md
similarity index 97%
rename from content/copilot/how-tos/copilot-cli/customize-copilot/quickstart-for-customizing.md
rename to content/copilot/how-tos/copilot-cli/customize-copilot/overview.md
index 26dec4cb4e70..775815824c7b 100644
--- a/content/copilot/how-tos/copilot-cli/customize-copilot/quickstart-for-customizing.md
+++ b/content/copilot/how-tos/copilot-cli/customize-copilot/overview.md
@@ -9,6 +9,8 @@ contentType: how-tos
category:
- Configure Copilot # Copilot discovery page
- Configure Copilot CLI # Copilot CLI bespoke page
+redirect_from:
+ - /copilot/how-tos/copilot-cli/customize-copilot/quickstart-for-customizing
---
You can download and install {% data variables.copilot.copilot_cli_short %}, and start using it straight away, without any additional configuration. However, you'll find that you can improve {% data variables.product.prodname_copilot_short %}'s responses if you spend a little time providing it with guidelines and context, and giving it access to tools that are relevant to your project. This article introduces the various ways in which you can customize {% data variables.copilot.copilot_cli_short %}.
diff --git a/content/copilot/how-tos/copilot-cli/index.md b/content/copilot/how-tos/copilot-cli/index.md
index 27c388e84887..99b3ce8dd338 100644
--- a/content/copilot/how-tos/copilot-cli/index.md
+++ b/content/copilot/how-tos/copilot-cli/index.md
@@ -20,10 +20,10 @@ children:
- /cli-getting-started
- /cli-best-practices
- /set-up-copilot-cli
+ - /automate-copilot-cli
- /customize-copilot
- /use-copilot-cli-agents
- /administer-copilot-cli-for-your-enterprise
- - /automate-with-actions
- /speeding-up-task-completion
- /content/copilot/concepts/agents/copilot-cli/about-copilot-cli
- /content/copilot/concepts/agents/copilot-cli/comparing-cli-features
@@ -33,26 +33,30 @@ children:
- /content/copilot/concepts/agents/copilot-cli/research
- /set-up-copilot-cli/install-copilot-cli
- /set-up-copilot-cli/configure-copilot-cli
+ - /automate-copilot-cli/quickstart
+ - /automate-copilot-cli/automate-with-actions
+ - /automate-copilot-cli/run-cli-programmatically
- /customize-copilot/add-custom-instructions
- /customize-copilot/create-custom-agents-for-cli
- /customize-copilot/create-skills
- /customize-copilot/plugins-creating
- /customize-copilot/plugins-finding-installing
- /customize-copilot/plugins-marketplace
- - /customize-copilot/quickstart-for-customizing
+ - /customize-copilot/overview
- /customize-copilot/use-hooks
- /content/copilot/concepts/agents/about-agent-skills
- - /content/copilot/reference/cli-command-reference
+ - /content/copilot/reference/copilot-cli-reference/cli-command-reference
+ - /content/copilot/reference/copilot-cli-reference/cli-plugin-reference
+ - /content/copilot/reference/copilot-cli-reference/cli-programmatic-reference
+ - /content/copilot/reference/copilot-cli-reference/acp-server
- /content/copilot/reference/hooks-configuration
- - /content/copilot/reference/cli-plugin-reference
- - /content/copilot/reference/acp-server
- /content/copilot/tutorials/copilot-cli-hooks
- /content/copilot/responsible-use/copilot-cli
carousels:
recommended:
- /copilot/how-tos/copilot-cli/use-copilot-cli-agents/overview
- /copilot/how-tos/copilot-cli/cli-best-practices
- - /copilot/reference/cli-command-reference
+ - /copilot/reference/copilot-cli-reference/cli-command-reference
includedCategories:
- Quickstarts
- Learn about Copilot CLI
@@ -60,4 +64,3 @@ includedCategories:
- Build with Copilot CLI
- Administer Copilot CLI
---
-
diff --git a/content/copilot/how-tos/copilot-cli/speeding-up-task-completion.md b/content/copilot/how-tos/copilot-cli/speeding-up-task-completion.md
index 24ff0ee492f5..19a108275a9e 100644
--- a/content/copilot/how-tos/copilot-cli/speeding-up-task-completion.md
+++ b/content/copilot/how-tos/copilot-cli/speeding-up-task-completion.md
@@ -44,4 +44,4 @@ Press Esc to exit the task list and return to the main CLI prompt.
## Further reading
-* [AUTOTITLE](/copilot/reference/cli-command-reference#slash-commands-in-the-interactive-interface)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#slash-commands-in-the-interactive-interface)
diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli-agents/overview.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli-agents/overview.md
index 5162d1f29528..2604fc55d4ae 100644
--- a/content/copilot/how-tos/copilot-cli/use-copilot-cli-agents/overview.md
+++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli-agents/overview.md
@@ -299,5 +299,5 @@ You can work with agents in {% data variables.copilot.copilot_cli_short %} to su
## Further reading
* [AUTOTITLE](/copilot/how-tos/copilot-cli/cli-best-practices)
-* [AUTOTITLE](/copilot/reference/cli-command-reference)
-* [AUTOTITLE](/copilot/reference/acp-server)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/acp-server)
diff --git a/content/copilot/how-tos/manage-your-account/free-access-with-copilot-student.md b/content/copilot/how-tos/manage-your-account/free-access-with-copilot-student.md
new file mode 100644
index 000000000000..a1abec192a63
--- /dev/null
+++ b/content/copilot/how-tos/manage-your-account/free-access-with-copilot-student.md
@@ -0,0 +1,27 @@
+---
+title: 'Access GitHub Copilot for free as a student'
+shortTitle: Get free access with Copilot Student
+allowTitleToDifferFromFilename: true
+intro: 'Learn how to access {% data variables.product.prodname_copilot_short %}''s premium features for free as a student.'
+versions:
+ feature: copilot
+contentType: how-tos
+category:
+ - Configure Copilot
+---
+
+## About {% data variables.copilot.copilot_student_short %} access
+
+Verified students on {% data variables.product.prodname_education %} are eligible for **free access to {% data variables.product.prodname_copilot_short %}'s premium features**. See [AUTOTITLE](/copilot/concepts/billing/individual-plans#github-copilot-student).
+
+To learn about becoming a verified student, see [AUTOTITLE](/free-pro-team@latest/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-education-for-students/apply-to-github-education-as-a-student).
+
+{% data variables.product.company_short %} reevaluates your eligibility every month.
+
+## Accessing {% data variables.copilot.copilot_student_short %}
+
+1. Navigate to https://github.com/settings/education/benefits.
+
+ If you're not yet a verified student, you'll need to click **Start an application** and complete the verification process.
+1. Under "Free {% data variables.product.github %} developer resources for students and teachers", click **Learn more**.
+1. Follow the prompts to activate {% data variables.copilot.copilot_student_short %}, configuring the {% data variables.product.prodname_copilot_short %} use policies to meet your needs.
\ No newline at end of file
diff --git a/content/copilot/how-tos/manage-your-account/get-free-access-to-copilot-pro.md b/content/copilot/how-tos/manage-your-account/get-free-access-to-copilot-pro.md
index e23222f6c6ec..981a4a528dcb 100644
--- a/content/copilot/how-tos/manage-your-account/get-free-access-to-copilot-pro.md
+++ b/content/copilot/how-tos/manage-your-account/get-free-access-to-copilot-pro.md
@@ -1,7 +1,7 @@
---
-title: 'Getting free access to GitHub Copilot Pro as a student, teacher, or maintainer'
+title: 'Getting free access to GitHub Copilot Pro as a teacher or maintainer'
shortTitle: Get free access to Copilot Pro
-intro: 'Learn how to use {% data variables.copilot.copilot_pro_short %} for free as a student, teacher, or open-source maintainer.'
+intro: 'Learn how to use {% data variables.copilot.copilot_pro_short %} for free as a teacher or open-source maintainer.'
versions:
feature: copilot
redirect_from:
@@ -17,9 +17,8 @@ category:
## About free {% data variables.copilot.copilot_pro %} access
-There are three ways to qualify for free access to {% data variables.copilot.copilot_pro_short %}:
+There are two ways to qualify for free access to {% data variables.copilot.copilot_pro_short %}:
-* **As a verified student on {% data variables.product.prodname_education %}.** To learn about becoming a verified student, see [AUTOTITLE](/free-pro-team@latest/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-education-for-students/apply-to-github-education-as-a-student).
* **As a verified teacher on {% data variables.product.prodname_education %}.** To learn about becoming a verified teacher, see [AUTOTITLE](/free-pro-team@latest/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-education-for-teachers/apply-to-github-education-as-a-teacher).
* **As a maintainer of a popular open-source repository.** To determine if you are an eligible maintainer, see [Accessing {% data variables.copilot.copilot_pro_short %} for free](#accessing-copilot-pro-for-free).
diff --git a/content/copilot/how-tos/manage-your-account/get-started-with-a-copilot-plan.md b/content/copilot/how-tos/manage-your-account/get-started-with-a-copilot-plan.md
index 54030846d937..68d7bbf230a4 100644
--- a/content/copilot/how-tos/manage-your-account/get-started-with-a-copilot-plan.md
+++ b/content/copilot/how-tos/manage-your-account/get-started-with-a-copilot-plan.md
@@ -35,7 +35,8 @@ Most individual developers can start using {% data variables.copilot.copilot_fre
* You have a {% data variables.enterprise.prodname_managed_user %}.
* You are assigned a {% data variables.product.prodname_copilot_short %} seat through an organization.
* You have an existing {% data variables.copilot.copilot_pro_short %} or {% data variables.copilot.copilot_pro_plus_short %} plan or {% data variables.copilot.copilot_pro_short %} trial.
-* You have free access to {% data variables.copilot.copilot_pro_short %} as a student, teacher, or open-source maintainer.
+* You have access to {% data variables.product.prodname_copilot_short %} through {% data variables.copilot.copilot_student_short %}.
+* You have free access to {% data variables.copilot.copilot_pro_short %} as a teacher or open-source maintainer.
There are a few ways to start using {% data variables.copilot.copilot_free_short %}, depending on where you're working.
diff --git a/content/copilot/how-tos/manage-your-account/index.md b/content/copilot/how-tos/manage-your-account/index.md
index 00e1bb1d3682..7af6446c0934 100644
--- a/content/copilot/how-tos/manage-your-account/index.md
+++ b/content/copilot/how-tos/manage-your-account/index.md
@@ -6,6 +6,7 @@ versions:
feature: copilot
children:
- /get-started-with-a-copilot-plan
+ - /free-access-with-copilot-student
- /get-free-access-to-copilot-pro
- /view-and-change-your-copilot-plan
- /disable-copilot-free
diff --git a/content/copilot/how-tos/manage-your-account/view-and-change-your-copilot-plan.md b/content/copilot/how-tos/manage-your-account/view-and-change-your-copilot-plan.md
index 878b607afa76..68ef0f4d4b95 100644
--- a/content/copilot/how-tos/manage-your-account/view-and-change-your-copilot-plan.md
+++ b/content/copilot/how-tos/manage-your-account/view-and-change-your-copilot-plan.md
@@ -69,7 +69,7 @@ You can upgrade or downgrade your {% data variables.product.prodname_copilot_sho
You can cancel your {% data variables.product.prodname_copilot_short %} plan or trial at any time. You’ll retain access to your current features until your billing cycle ends. You will automatically be downgraded to {% data variables.copilot.copilot_free_short %} at the end of your billing cycle.
-If you have been granted a free access to {% data variables.copilot.copilot_pro_short %} as a verified student, teacher, or maintainer of a popular open source project, you won’t be able to cancel your plan. If you have access to {% data variables.product.prodname_copilot_short %} through an organization{% ifversion ghec %} or enterprise{% endif %}, you will not be able to cancel your plan. In these cases, you can disable {% data variables.product.prodname_copilot_short %} in your environment. See [AUTOTITLE](/copilot/configuring-github-copilot/configuring-github-copilot-in-your-environment).
+If you have been granted a free access to {% data variables.product.prodname_copilot_short %} as a verified student, teacher, or maintainer of a popular open source project, you won’t be able to cancel your plan. If you have access to {% data variables.product.prodname_copilot_short %} through an organization{% ifversion ghec %} or enterprise{% endif %}, you will not be able to cancel your plan. In these cases, you can disable {% data variables.product.prodname_copilot_short %} in your environment. See [AUTOTITLE](/copilot/configuring-github-copilot/configuring-github-copilot-in-your-environment).
{% data reusables.copilot.copilot-one-account-short %}
diff --git a/content/copilot/how-tos/set-up/set-up-for-self.md b/content/copilot/how-tos/set-up/set-up-for-self.md
index 0a84b0dff0c3..2735ac778868 100644
--- a/content/copilot/how-tos/set-up/set-up-for-self.md
+++ b/content/copilot/how-tos/set-up/set-up-for-self.md
@@ -27,7 +27,9 @@ There are a few ways that you can get access to {% data variables.product.prodna
* **Use {% data variables.product.prodname_copilot_short %} through your organization or enterprise**. If you're part of an organization or enterprise with a {% data variables.product.prodname_copilot_short %} plan, you can request access at [https://github.com/settings/copilot](https://github.com/settings/copilot) under "Get {% data variables.product.prodname_copilot_short %} from an organization."
-* **Verified students, teachers, or open source maintainers**. You may be eligible to use {% data variables.product.prodname_copilot_short %} for free. See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-free-access-to-copilot-as-a-student-teacher-or-maintainer).
+* **Verified students** can sign up to {% data variables.copilot.copilot_student_short %} to access {% data variables.product.prodname_copilot_short %} for free. See [AUTOTITLE](/copilot/how-tos/manage-your-account/free-access-with-copilot-student).
+
+* **Verified teachers or open source maintainers** may be eligible to use {% data variables.product.prodname_copilot_short %} for free. See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-free-access-to-copilot-as-a-student-teacher-or-maintainer).
## 2. Install the {% data variables.product.prodname_copilot_short %} extension for your IDE
diff --git a/content/copilot/how-tos/use-copilot-agents/coding-agent/extend-coding-agent-with-mcp.md b/content/copilot/how-tos/use-copilot-agents/coding-agent/extend-coding-agent-with-mcp.md
index 171c7166b099..c82a42627adb 100644
--- a/content/copilot/how-tos/use-copilot-agents/coding-agent/extend-coding-agent-with-mcp.md
+++ b/content/copilot/how-tos/use-copilot-agents/coding-agent/extend-coding-agent-with-mcp.md
@@ -81,18 +81,27 @@ The configuration object can contain the following keys:
**Local MCP specific keys**
* `command` (`string`): Required. The command to run to start the MCP server.
* `args` (`string[]`): Required. The arguments to pass to the `command`.
-* `env` (`object`): Optional. The environment variables to pass to the server. This object should map the name of the environment variable that should be exposed to your MCP server to either of the following:
- * The name of a secret you have configured in your {% data variables.product.prodname_copilot_short %} environment, beginning with `COPILOT_MCP_`.
- * The name of a variable you have configured in your {% data variables.product.prodname_copilot_short %} environment, beginning with `COPILOT_MCP_`.
+* `env` (`object`): Optional. The environment variables to pass to the server. This object should map the name of the environment variable that should be exposed to your MCP server to one of the following:
+ * A substitution reference to a secret or variable in your {% data variables.product.prodname_copilot_short %} environment, such as `$COPILOT_MCP_API_KEY` or `${COPILOT_MCP_API_KEY}`. Referenced names must start with `COPILOT_MCP_`.
+ * A literal string value.
**Remote MCP specific keys**
* `url` (`string`): Required. The MCP server's URL.
-* `headers` (`object`): Optional. The headers to attach to requests to the server. This object should map the name of header keys to either of the following:
- * The name of a secret you have configured in your {% data variables.product.prodname_copilot_short %} environment, beginning with `COPILOT_MCP_` preceded by a `$`.
- * The name of a variable you have configured in your {% data variables.product.prodname_copilot_short %} environment, beginning with `COPILOT_MCP_` preceded by a `$`.
- * A string value.
+* `headers` (`object`): Optional. The headers to attach to requests to the server. This object should map the name of header keys to one of the following:
+ * A substitution reference to a secret or variable in your {% data variables.product.prodname_copilot_short %} environment, such as `$COPILOT_MCP_API_KEY` or `${COPILOT_MCP_API_KEY}`. Referenced names must start with `COPILOT_MCP_`.
+ * A literal string value.
-Note that all `string` and `string[]` fields besides `tools` & `type` support substitution with a variable or secret you have configured in your {% data variables.product.prodname_copilot_short %} environment, beginning with `COPILOT_MCP_` preceded by a `$`.
+Note that all `string` and `string[]` fields besides `tools` & `type` support substitution with a variable or secret you have configured in your {% data variables.product.prodname_copilot_short %} environment.
+
+### Variable substitution
+
+The following syntax patterns are supported for referencing environment variables configured in your {% data variables.product.prodname_copilot_short %} environment:
+
+| Syntax | Example |
+| ----------- | ------------ |
+| `$VAR` | `$COPILOT_MCP_API_KEY` |
+| `${VAR}` | `${COPILOT_MCP_API_KEY}`|
+| `${VAR:-default}` | `${COPILOT_MCP_API_KEY:-fallback_value}` |
## Example configurations
@@ -121,13 +130,11 @@ The [Sentry MCP server](https://github.com/getsentry/sentry-mcp) gives {% data v
"args": ["@sentry/mcp-server@latest", "--host=$SENTRY_HOST"],
"tools": ["get_issue_details", "get_issue_summary"],
"env": {
- // We can specify an environment variable value as
- // a variable in your {% data variables.product.prodname_copilot_short %} environment
- // where `COPILOT_MCP_SENTRY_HOST` = "https://contoso.sentry.io"...
- "SENTRY_HOST": "COPILOT_MCP_SENTRY_HOST",
- // or refer to a secret with a name starting with
- // `COPILOT_MCP_`.
- "SENTRY_ACCESS_TOKEN": "COPILOT_MCP_SENTRY_ACCESS_TOKEN"
+ // We can specify an environment variable value as a string...
+ "SENTRY_HOST": "https://contoso.sentry.io",
+ // or refer to a variable or secret in your {% data variables.product.prodname_copilot_short %} environment
+ // with a name starting with `COPILOT_MCP_`
+ "SENTRY_ACCESS_TOKEN": "$COPILOT_MCP_SENTRY_ACCESS_TOKEN"
}
}
}
@@ -158,7 +165,7 @@ The [Notion MCP server](https://github.com/makenotion/notion-mcp-server) gives {
"env": {
// The value of the `COPILOT_MCP_NOTION_API_KEY` secret will be passed to the
// server command as an environment variable called `NOTION_API_KEY`
- "NOTION_API_KEY": "COPILOT_MCP_NOTION_API_KEY"
+ "NOTION_API_KEY": "$COPILOT_MCP_NOTION_API_KEY"
},
"tools": ["*"]
}
diff --git a/content/copilot/reference/acp-server.md b/content/copilot/reference/copilot-cli-reference/acp-server.md
similarity index 98%
rename from content/copilot/reference/acp-server.md
rename to content/copilot/reference/copilot-cli-reference/acp-server.md
index 76daf9ce6f41..5ab1eb525a11 100644
--- a/content/copilot/reference/acp-server.md
+++ b/content/copilot/reference/copilot-cli-reference/acp-server.md
@@ -8,6 +8,8 @@ category:
- Configure Copilot # Copilot discovery page
- Configure Copilot CLI # Copilot CLI bespoke page
contentType: reference
+redirect_from:
+ - /copilot/reference/acp-server
---
> [!NOTE]
diff --git a/content/copilot/reference/cli-command-reference.md b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md
similarity index 95%
rename from content/copilot/reference/cli-command-reference.md
rename to content/copilot/reference/copilot-cli-reference/cli-command-reference.md
index 48df2064051d..95eb5d9a72d0 100644
--- a/content/copilot/reference/cli-command-reference.md
+++ b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md
@@ -8,6 +8,8 @@ category:
- Author and optimize with Copilot # Copilot discovery page
- Build with Copilot CLI # Copilot CLI bespoke landing page
contentType: reference
+redirect_from:
+ - /copilot/reference/cli-command-reference
---
## Command-line commands
@@ -112,39 +114,39 @@ For a complete list of available slash commands enter `/help` in the CLI's inter
| Option | Purpose |
|------------------------------------|------------------------------------------|
| `--acp` | Start the Agent Client Protocol server. |
-| `--add-dir PATH` | Add a directory to the allowed list for file access (can be used multiple times). |
-| `--add-github-mcp-tool TOOL` | Add a tool to enable for the {% data variables.product.github %} MCP server, instead of the default CLI subset (can be used multiple times). Use `*` for all tools. |
-| `--add-github-mcp-toolset TOOLSET` | Add a toolset to enable for the {% data variables.product.github %} MCP server, instead of the default CLI subset (can be used multiple times). Use `all` for all toolsets. |
-| `--additional-mcp-config JSON` | Add an MCP server for this session only. The server configuration can be supplied as a JSON string or a file path (prefix with `@`). Augments the configuration from `~/.copilot/mcp-config.json`. Overrides any installed MCP server configuration with the same name. |
-| `--agent AGENT` | Specify a {% data variables.copilot.copilot_custom_agent_short %} to use. |
+| `--add-dir=PATH` | Add a directory to the allowed list for file access (can be used multiple times). |
+| `--add-github-mcp-tool=TOOL` | Add a tool to enable for the {% data variables.product.github %} MCP server, instead of the default CLI subset (can be used multiple times). Use `*` for all tools. |
+| `--add-github-mcp-toolset=TOOLSET` | Add a toolset to enable for the {% data variables.product.github %} MCP server, instead of the default CLI subset (can be used multiple times). Use `all` for all toolsets. |
+| `--additional-mcp-config=JSON` | Add an MCP server for this session only. The server configuration can be supplied as a JSON string or a file path (prefix with `@`). Augments the configuration from `~/.copilot/mcp-config.json`. Overrides any installed MCP server configuration with the same name. |
+| `--agent=AGENT` | Specify a {% data variables.copilot.copilot_custom_agent_short %} to use. |
| `--allow-all` | Enable all permissions (equivalent to `--allow-all-tools --allow-all-paths --allow-all-urls`). |
| `--allow-all-paths` | Disable file path verification and allow access to any path. |
| `--allow-all-tools` | Allow all tools to run automatically without confirmation. Required when using the CLI programmatically (env: `COPILOT_ALLOW_ALL`). |
| `--allow-all-urls` | Allow access to all URLs without confirmation. |
| `--allow-tool=TOOL ...` | Tools the CLI has permission to use. Will not prompt for permission. For multiple tools, use a quoted, comma-separated list. |
| `--allow-url=URL ...` | Allow access to specific URLs or domains. For multiple URLs, use a quoted, comma-separated list. |
-| `--alt-screen [VALUE]` | Use the terminal alternate screen buffer (`on` or `off`). |
+| `--alt-screen=VALUE` | Use the terminal alternate screen buffer (`on` or `off`). |
| `--autopilot` | Enable autopilot continuation in prompt mode. See [AUTOTITLE](/copilot/concepts/agents/copilot-cli/autopilot). |
| `--available-tools=TOOL ...` | Only these tools will be available to the model. For multiple tools, use a quoted, comma-separated list. |
| `--banner` | Show the startup banner. |
| `--bash-env` | Enable `BASH_ENV` support for bash shells. |
-| `--config-dir PATH` | Set the configuration directory (default: `~/.copilot`). |
+| `--config-dir=PATH` | Set the configuration directory (default: `~/.copilot`). |
| `--continue` | Resume the most recent session. |
| `--deny-tool=TOOL ...` | Tools the CLI does not have permission to use. Will not prompt for permission. For multiple tools, use a quoted, comma-separated list. |
| `--deny-url=URL ...` | Deny access to specific URLs or domains, takes precedence over `--allow-url`. For multiple URLs, use a quoted, comma-separated list. |
| `--disable-builtin-mcps` | Disable all built-in MCP servers (currently: `github-mcp-server`). |
-| `--disable-mcp-server SERVER-NAME` | Disable a specific MCP server (can be used multiple times). |
+| `--disable-mcp-server=SERVER-NAME` | Disable a specific MCP server (can be used multiple times). |
| `--disable-parallel-tools-execution` | Disable parallel execution of tools (LLM can still make parallel tool calls, but they will be executed sequentially). |
| `--disallow-temp-dir` | Prevent automatic access to the system temporary directory. |
| `--enable-all-github-mcp-tools` | Enable all {% data variables.product.github %} MCP server tools, instead of the default CLI subset. Overrides the `--add-github-mcp-toolset` and `--add-github-mcp-tool` options. |
| `--excluded-tools=TOOL ...` | These tools will not be available to the model. For multiple tools, use a quoted, comma-separated list. |
| `--experimental` | Enable experimental features (use `--no-experimental` to disable). |
| `-h`, `--help` | Display help. |
-| `-i PROMPT`, `--interactive PROMPT` | Start an interactive session and automatically execute this prompt. |
-| `--log-dir DIRECTORY` | Set the log file directory (default: `~/.copilot/logs/`). |
-| `--log-level LEVEL` | Set the log level (choices: `none`, `error`, `warning`, `info`, `debug`, `all`, `default`). |
-| `--max-autopilot-continues COUNT` | Maximum number of continuation messages in autopilot mode (default: unlimited). See [AUTOTITLE](/copilot/concepts/agents/copilot-cli/autopilot). |
-| `--model MODEL` | Set the AI model you want to use. |
+| `-i PROMPT`, `--interactive=PROMPT` | Start an interactive session and automatically execute this prompt. |
+| `--log-dir=DIRECTORY` | Set the log file directory (default: `~/.copilot/logs/`). |
+| `--log-level=LEVEL` | Set the log level (choices: `none`, `error`, `warning`, `info`, `debug`, `all`, `default`). |
+| `--max-autopilot-continues=COUNT` | Maximum number of continuation messages in autopilot mode (default: unlimited). See [AUTOTITLE](/copilot/concepts/agents/copilot-cli/autopilot). |
+| `--model=MODEL` | Set the AI model you want to use. |
| `--no-alt-screen` | Disable the terminal alternate screen buffer. |
| `--no-ask-user` | Disable the `ask_user` tool (the agent works autonomously without asking questions). |
| `--no-auto-update` | Disable downloading CLI updates automatically. |
@@ -152,15 +154,16 @@ For a complete list of available slash commands enter `/help` in the CLI's inter
| `--no-color` | Disable all color output. |
| `--no-custom-instructions` | Disable loading of custom instructions from `AGENTS.md` and related files. |
| `--no-experimental` | Disable experimental features. |
-| `--output-format FORMAT` | FORMAT can be `text` (default) or `json` (outputs JSONL: one JSON object per line). |
-| `-p PROMPT`, `--prompt PROMPT` | Execute a prompt programmatically (exits after completion). |
+| `--output-format=FORMAT` | FORMAT can be `text` (default) or `json` (outputs JSONL: one JSON object per line). |
+| `-p PROMPT`, `--prompt=PROMPT` | Execute a prompt programmatically (exits after completion). |
| `--plain-diff` | Disable rich diff rendering (syntax highlighting via the diff tool specified by your git config). |
-| `--resume[=SESSION-ID]` | Resume a previous interactive session by choosing from a list (optionally specify a session ID). |
+| `--resume=SESSION-ID` | Resume a previous interactive session by choosing from a list (optionally specify a session ID). |
| `-s`, `--silent` | Output only the agent response (without usage statistics), useful for scripting with `-p`. |
| `--screen-reader` | Enable screen reader optimizations. |
-| `--share[=PATH]` | Share a session to a Markdown file after completion of a programmatic session (default path: `./copilot-session-.md`). |
+| `--secret-env-vars=VAR ...` | An environment variable whose value you want redacted in output. For multiple variables, use a quoted, comma-separated list. The values in the `GITHUB_TOKEN` and `COPILOT_GITHUB_TOKEN` environment variables are redacted by default. |
+| `--share=PATH` | Share a session to a Markdown file after completion of a programmatic session (default path: `./copilot-session-.md`). |
| `--share-gist` | Share a session to a secret {% data variables.product.github %} gist after completion of a programmatic session. |
-| `--stream MODE` | Enable or disable streaming mode (mode choices: `on` or `off`). |
+| `--stream=MODE` | Enable or disable streaming mode (mode choices: `on` or `off`). |
| `-v`, `--version` | Show version information. |
| `--yolo` | Enable all permissions (equivalent to `--allow-all`). |
@@ -261,7 +264,7 @@ Repository settings apply to everyone who works in the repository. Only a subset
| `companyAnnouncements` | `string[]` | Replaced—repository takes precedence | Messages shown randomly on startup. |
| `enabledPlugins` | `Record` | Merged—repository overrides user for same key | Declarative plugin auto-install. |
| `extraKnownMarketplaces` | `Record` | Merged—repository overrides user for same key | Plugin marketplaces available in this repository. |
-| `marketplaces` | `Record` | Merged—repository overrides user for same key | Plugin marketplaces (deprecated—use `extraKnownMarketplaces`). |
+| `marketplaces` | `Record` | Merged—repository overrides user for same key | Plugin marketplaces (deprecated—use `extraKnownMarketplaces`). |
### Local settings (`.github/copilot/settings.local.json`)
@@ -709,3 +712,9 @@ When content capture is enabled, the following attributes are populated.
| `gen_ai.tool.definitions` | Tool schemas (JSON) |
| `gen_ai.tool.call.arguments` | Tool input arguments |
| `gen_ai.tool.call.result` | Tool output |
+
+## Further reading
+
+* [AUTOTITLE](/copilot/how-tos/copilot-cli)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-plugin-reference)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-programmatic-reference)
diff --git a/content/copilot/reference/cli-plugin-reference.md b/content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md
similarity index 97%
rename from content/copilot/reference/cli-plugin-reference.md
rename to content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md
index b15ce684b1dd..5d6261a2a668 100644
--- a/content/copilot/reference/cli-plugin-reference.md
+++ b/content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md
@@ -8,6 +8,8 @@ category:
- Author and optimize with Copilot # Copilot discovery page
- Configure Copilot CLI # Copilot CLI bespoke page
contentType: reference
+redirect_from:
+ - /copilot/reference/cli-plugin-reference
---
{% data reusables.copilot.cli-help-note %}
@@ -205,3 +207,9 @@ The following diagram illustrates the loading order and precedence rules.
│ 4. --additional-mcp-config flag (highest priority) │
└─────────────────────────────────────────────────────────────────────┘
```
+
+## Further reading
+
+* [AUTOTITLE](/copilot/how-tos/copilot-cli)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-programmatic-reference)
diff --git a/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md b/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md
new file mode 100644
index 000000000000..4c34a92d58c4
--- /dev/null
+++ b/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md
@@ -0,0 +1,158 @@
+---
+title: GitHub Copilot CLI programmatic reference
+shortTitle: CLI programmatic reference
+intro: 'Find options for running {% data variables.copilot.copilot_cli_short %} programmatically.'
+versions:
+ feature: copilot
+category:
+ - Author and optimize with Copilot # Copilot discovery page
+ - Configure Copilot CLI # Copilot CLI bespoke page
+contentType: reference
+---
+
+In addition to running {% data variables.copilot.copilot_cli_short %} interactively, you can also pass a prompt directly to the CLI in a single command, without entering an interactive session. This allows you to use {% data variables.product.prodname_copilot_short %} programmatically in scripts, CI/CD pipelines, and automation workflows. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically).
+
+This article describes command-line options and environment variables that are particularly relevant when running {% data variables.copilot.copilot_cli_short %} programmatically.
+
+To see a complete list of the available options, see [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#command-line-options) or enter the following command in your terminal:
+
+```shell copy
+copilot help
+```
+
+## Command line options
+
+There are a number of command-line options that are particularly useful when running {% data variables.copilot.copilot_cli_short %} programmatically.
+
+| Option | Description |
+|--------|-------------|
+| `-p PROMPT` | Execute a prompt in non-interactive mode. The CLI runs the prompt and exits when done. |
+| `-s` | Suppress stats and decoration, outputting only the agent's response. Ideal for piping output in scripts. |
+| `--add-dir=DIRECTORY` | Add a directory to the allowed-paths list. This can be used multiple times to add multiple directories. Useful when the agent needs to read/write outside the current working directory. |
+| `--agent=AGENT` | Specify a {% data variables.copilot.copilot_custom_agent_short %} to use. |
+| `--allow-all` (or `--yolo`) | Allow the CLI all permissions. Equivalent to `--allow-all-tools --allow-all-paths --allow-all-urls`. |
+| `--allow-all-paths` | Disable file-path verification entirely. Simpler alternative to `--add-dir` when path restrictions aren't needed. |
+| `--allow-all-tools` | Allow every tool to run without explicit permission for each tool. |
+| `--allow-all-urls` | Allow access to all URLs without explicit permission for each URL. |
+| `--allow-tool=TOOL ...` | Selectively grant permission for a specific tool. For multiple tools, use a quoted, comma-separated list. |
+| `--allow-url=URL ...` | Allow the agent to fetch a specific URL or domain. Useful when a workflow needs web access to known endpoints. For multiple URLs, use a quoted, comma-separated list. |
+| `--deny-tool=TOOL ...` | Deny a specific tool. Useful for restricting what the agent can do in a locked-down workflow. For multiple tools, use a quoted, comma-separated list. |
+| `--model=MODEL` | Choose the AI model (for example, `gpt-5.2` or `claude-sonnet-4.6`). Useful for pinning a model in reproducible workflows. See [Choosing a model](#choosing-a-model) below. |
+| `--no-ask-user` | Prevent the agent from pausing to seek additional user input. |
+| `--secret-env-vars=VAR ...` | An environment variable whose value you want redacted in output. For multiple variables, use a quoted, comma-separated list. Essential for preventing secrets being exposed in logs. The values in the `GITHUB_TOKEN` and `COPILOT_GITHUB_TOKEN` environment variables are redacted by default. |
+| `--share=PATH` | Export the session transcript to a markdown file after non-interactive completion (defaults to `./copilot-session-.md`). Useful for auditing or archiving what the agent did. Note that session transcripts may contain sensitive information. |
+| `--share-gist` | Publish the session transcript as a secret GitHub gist after completion. Convenient for sharing results from CI. Note that session transcripts may contain sensitive information. |
+
+## Tools for the `--allow-tool` option
+
+You can specify various kinds of tools with the `--allow-tool` option.
+
+| Kind of tool | What it controls |
+|---------------|------------------|
+| shell | Executing shell commands. |
+| write | Creating or modifying files. |
+| read | Reading files or directories. |
+| url | Fetching content from a URL. |
+| memory | Storing new facts to the agent's persistent memory. This does not affect using existing memories. See [AUTOTITLE](/copilot/concepts/agents/copilot-memory). |
+| MCP-SERVER | Invoking tools from a specific MCP server. Use the server's configured name as the identifier—for example, `github`. See [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers). |
+
+### Tool filters
+
+The `shell`, `write`, `url`, and MCP server tool kinds allow you to specify a filter, in parentheses, to control which specific tools are allowed.
+
+
+| Kind of tool | Example | Explanation of the example |
+|------|---------|---------|
+| **shell** | `shell(git:*)` | Allow all Git subcommands (`git push`, `git status`, etc.). |
+| | `shell(npm test)` | Allow the exact command `npm test`. |
+| **write** | `write(.github/copilot-instructions.md)` | Allow the CLI to write to this specific path. |
+| | `write(README.md)` | Allow the CLI to write to any file whose path ends with `/README.md`. |
+| **url** | `url(github.com)` | Allow the CLI to access HTTPS URLs on github.com. |
+| | `url(http://localhost:3000)` | Allow the CLI to access the local dev server with explicit protocol and port. |
+| | `url(https://*.github.com)` | Allow the CLI to access any {% data variables.product.github %} subdomain (for example, `api.github.com`). |
+| | `url(https://docs.github.com/copilot/*)` | Allow access to {% data variables.product.prodname_copilot_short %} documentation at this site. |
+| **MCP-SERVER** | `github(create_issue)` | Allow only the `create_issue` tool from the `github` MCP server. |
+
+
+> [!NOTE]
+> Wildcards are only supported for `shell` to match all subcommands of a specified tool, and for `url` at the start of the host name to match any subdomain, or at the end of a path to match any path suffix—as shown in the preceding table.
+
+## Environment variables
+
+You can use environment variables to configure various aspects of the CLI's behavior when running programmatically. This is particularly useful for setting configuration in CI/CD workflows or other automated environments where you may not want to specify certain options directly in the command line.
+
+| Variable | Description |
+| --------------------- | ------------- |
+| `COPILOT_ALLOW_ALL` | Set to `true` for full permissions |
+| `COPILOT_MODEL` | Set the model (for example, `gpt-5.2`, `claude-sonnet-4.5`) |
+| `COPILOT_HOME` | Set the directory for the CLI configuration file (`~/.copilot` by default) |
+| `COPILOT_GITHUB_TOKEN`| Authentication token (highest precedence) |
+| `GH_TOKEN` | Authentication token (second precedence) |
+| `GITHUB_TOKEN` | Authentication token (third precedence) |
+
+For full details of environment variables for {% data variables.copilot.copilot_cli_short %}, use the command `copilot help environment` in your terminal.
+
+## Choosing a model
+
+When you send a prompt to {% data variables.copilot.copilot_cli_short %} in non-interactive mode, the model that the CLI uses to generate a response is shown in the response output (if the `-s`, or `--silent`, option is not used).
+
+You can use the `--model` option to specify which AI model the CLI should use. This allows you to choose a model that is best suited to your prompt, balancing factors like speed, cost, and capability.
+
+For example, for straightforward tasks, such as explaining some code or generating a summary, you might choose a fast, lower cost model such as a Claude Haiku model:
+
+```bash copy
+copilot -p "What does this project do?" -s --model claude-haiku-4.5
+```
+
+For more complex tasks that require deeper reasoning—such as debugging or refactoring code—you might choose a more powerful model, such as a GPT Codex model:
+
+```bash copy
+copilot -p "Fix the race condition in the worker pool" \
+ --model gpt-5.3-codex \
+ --allow-tool='write, shell'
+```
+
+> [!NOTE]
+> You can find the model strings for all available models in the description of the `--model` option when you enter `copilot help` in your terminal.
+
+Alternatively, you can set the `COPILOT_MODEL` environment variable to specify a model for the duration of the shell session.
+
+To persist a model selection across shell sessions, you can set the `model` key in the CLI configuration file. This file is located at `~/.copilot/config.json` (or `$COPILOT_HOME/.copilot/config.json` if you have set the `COPILOT_HOME` environment variable). Some models also allow you to set a reasoning effort level, which controls how much time the model spends thinking before responding.
+
+```json copy
+{
+ "model": "gpt-5.3-codex",
+ "reasoning_effort": "low"
+}
+```
+
+> [!TIP]
+> The easiest way to set a model persistently in the configuration file is with the `/model` slash command in an interactive session. The choice you make with this command is written to the configuration file.
+
+### Model precedence
+
+When determining which model to use for a given prompt, the CLI checks for model specifications in the following order of precedence (from highest to lowest):
+
+* Where a custom agent is used: the model specified in the custom agent definition (if any).
+* The `--model` command line option.
+* The `COPILOT_MODEL` environment variable.
+* The `model` key in the configuration file (`~/.copilot/config.json` or `$COPILOT_HOME/.copilot/config.json`).
+* The CLI's default model.
+
+## Using custom agents
+
+You can delegate work to a specialized agent by using the `--agent` option. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/create-custom-agents-for-cli).
+
+In this example, the `code-review` agent is used. This requires that a custom agent has been created with this name.
+
+```bash
+copilot -p "Review the latest commit" \
+ --allow-tool='shell' \
+ --agent code-review
+```
+
+## Further reading
+
+* [AUTOTITLE](/copilot/how-tos/copilot-cli)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-plugin-reference)
diff --git a/content/copilot/reference/copilot-cli-reference/index.md b/content/copilot/reference/copilot-cli-reference/index.md
new file mode 100644
index 000000000000..8d4f643888e0
--- /dev/null
+++ b/content/copilot/reference/copilot-cli-reference/index.md
@@ -0,0 +1,12 @@
+---
+title: '{% data variables.copilot.copilot_cli_short %} reference'
+shortTitle: '{% data variables.copilot.copilot_cli_short %} reference'
+intro: 'Find information on options and settings for {% data variables.copilot.copilot_cli_short %}.'
+versions:
+ feature: copilot
+children:
+ - /cli-command-reference
+ - /cli-plugin-reference
+ - /cli-programmatic-reference
+ - /acp-server
+---
diff --git a/content/copilot/reference/custom-agents-configuration.md b/content/copilot/reference/custom-agents-configuration.md
index 8379d1428710..5810f610ed82 100644
--- a/content/copilot/reference/custom-agents-configuration.md
+++ b/content/copilot/reference/custom-agents-configuration.md
@@ -120,14 +120,14 @@ For compatibility, the `stdio` type used by Claude Code and {% data variables.pr
Both the repository-level MCP JSON configuration and the {% data variables.copilot.copilot_custom_agent_short %} YAML configuration support the following syntax patterns:
-* `COPILOT_MCP_ENV_VAR_VALUE` - Environment variable only (not recommended due to header differences)
* `$COPILOT_MCP_ENV_VAR_VALUE` - Environment variable and header
* `${COPILOT_MCP_ENV_VAR_VALUE}` - Environment variable and header (Claude Code syntax)
+* `${COPILOT_MCP_ENV_VAR_VALUE:-default}` - Environment variable and header with default
The {% data variables.copilot.copilot_custom_agent_short %} YAML configuration supports the following additional syntax patterns:
* `{% raw %}${{ secrets.COPILOT_MCP_ENV_VAR_VALUE }}{% endraw %}` - Environment variable and header
-* `{% raw %}${{ var.COPILOT_MCP_ENV_VAR_VALUE }}{% endraw %}` - Environment variable and header
+* `{% raw %}${{ vars.COPILOT_MCP_ENV_VAR_VALUE }}{% endraw %}` - Environment variable and header
## Example {% data variables.copilot.agent_profile %} configurations
@@ -158,5 +158,4 @@ For MCP server configurations, there is a specific processing order that ensures
## Further reading
* [AUTOTITLE](/copilot/how-tos/copilot-cli)
-* [AUTOTITLE](/copilot/reference/cli-command-reference#custom-agents-reference)
-
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#custom-agents-reference)
diff --git a/content/copilot/reference/hooks-configuration.md b/content/copilot/reference/hooks-configuration.md
index b5ca01d0336e..6621bf88d326 100644
--- a/content/copilot/reference/hooks-configuration.md
+++ b/content/copilot/reference/hooks-configuration.md
@@ -549,3 +549,9 @@ if echo "$PROMPT" | grep -iq "production"; then
echo "ALERT: Production-related prompt: $PROMPT" | mail -s "Agent Alert" team@example.com
fi
```
+
+## Further reading
+
+* [AUTOTITLE](/copilot/concepts/agents/coding-agent)
+* [AUTOTITLE](/copilot/how-tos/copilot-cli)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference)
diff --git a/content/copilot/reference/index.md b/content/copilot/reference/index.md
index 5a14cd5f461a..e456fb0c7a7c 100644
--- a/content/copilot/reference/index.md
+++ b/content/copilot/reference/index.md
@@ -10,12 +10,10 @@ children:
- /ai-models
- /copilot-feature-matrix
- /keyboard-shortcuts
- - /cli-command-reference
- - /cli-plugin-reference
+ - /copilot-cli-reference
- /custom-agents-configuration
- - /acp-server
- - /hooks-configuration
- /custom-instructions-support
+ - /hooks-configuration
- /policy-conflicts
- /copilot-allowlist-reference
- /mcp-allowlist-enforcement
diff --git a/content/education/about-github-education/github-education-for-students/about-github-education-for-students.md b/content/education/about-github-education/github-education-for-students/about-github-education-for-students.md
index 1050e80dfe74..d49cb39ed9f3 100644
--- a/content/education/about-github-education/github-education-for-students/about-github-education-for-students.md
+++ b/content/education/about-github-education/github-education-for-students/about-github-education-for-students.md
@@ -38,7 +38,7 @@ Once you are a verified {% data variables.product.prodname_global_campus %} stud
* Discover student-created repositories from {% data variables.product.prodname_community_exchange %}. For more information, see [AUTOTITLE](/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-students/about-github-community-exchange).
{% data variables.product.prodname_global_campus %} students also receive the following {% data variables.product.prodname_dotcom %} benefits.
-* **{% data variables.product.prodname_copilot %}:** Verified students receive a free subscription for {% data variables.copilot.copilot_pro %}. See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-started-with-copilot-on-your-personal-account/getting-free-access-to-copilot-pro-as-a-student-teacher-or-maintainer).
+* **{% data variables.product.prodname_copilot %}:** Verified students get free access to {% data variables.product.prodname_copilot_short %} and its premium features. See [AUTOTITLE](/copilot/how-tos/manage-your-account/free-access-with-copilot-student).
* **{% data variables.product.prodname_github_codespaces %}:** {% data reusables.education.student-codespaces-benefit %} For more information on getting started with {% data variables.product.prodname_github_codespaces %}, see [AUTOTITLE](/codespaces/quickstart).
> [!NOTE]
diff --git a/content/get-started/learning-to-code/getting-feedback-on-your-code-from-github-copilot.md b/content/get-started/learning-to-code/getting-feedback-on-your-code-from-github-copilot.md
index 900d4d2d940a..518aa8131707 100644
--- a/content/get-started/learning-to-code/getting-feedback-on-your-code-from-github-copilot.md
+++ b/content/get-started/learning-to-code/getting-feedback-on-your-code-from-github-copilot.md
@@ -17,7 +17,7 @@ Getting feedback on your pull request from others is an important part of the so
A pull request is a collaborative place where you can show other people the changes you're proposing and get feedback. When you request a review from Copilot, you'll be learning the same process that you'll use use when working with development teams. The only difference is you'll also be requesting reviews from human colleagues alongside Copilot.
>[!NOTE]
->{% data variables.copilot.copilot_code-review_short %} on the {% data variables.product.github %} website is a premium feature, available with the {% data variables.copilot.copilot_pro_short %}, {% data variables.copilot.copilot_pro_plus_short %}, {% data variables.copilot.copilot_business_short %}, and {% data variables.copilot.copilot_enterprise_short %} plans. For more information about how using {% data variables.copilot.copilot_code-review_short %} affects your quotas, see [AUTOTITLE](/copilot/concepts/agents/code-review#code-review-monthly-quota). If you're a student, you may be able to get {% data variables.copilot.copilot_pro_short %} for free, see [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-started-with-copilot-on-your-personal-account/getting-free-access-to-copilot-pro-as-a-student-teacher-or-maintainer).
+>{% data variables.copilot.copilot_code-review_short %} on the {% data variables.product.github %} website is a premium feature, available with the {% data variables.copilot.copilot_pro_short %}, {% data variables.copilot.copilot_pro_plus_short %}, {% data variables.copilot.copilot_business_short %}, and {% data variables.copilot.copilot_enterprise_short %} plans. For more information about how using {% data variables.copilot.copilot_code-review_short %} affects your quotas, see [AUTOTITLE](/copilot/concepts/agents/code-review#code-review-monthly-quota). If you're a student, you may be able to access {% data variables.product.prodname_copilot_short %}'s premium features for free, see [AUTOTITLE](/copilot/how-tos/manage-your-account/free-access-with-copilot-student).
## 1. Creating the practice repository
diff --git a/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization.md b/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization.md
index ea8ec814d80f..dd1b5b1c4243 100644
--- a/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization.md
+++ b/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization.md
@@ -85,7 +85,7 @@ You can use security overview to find a set of repositories and enable or disabl
By default, {% data variables.product.prodname_dependabot %} can't update dependencies that are located in private{% ifversion ghec or ghes %} or internal{% endif %} repositories, or private{% ifversion ghec or ghes %} or internal{% endif %} package registries. However, if a dependency is in a private{% ifversion ghec or ghes %} or internal{% endif %} {% data variables.product.prodname_dotcom %} repository within the same organization as the project that uses that dependency, you can allow {% data variables.product.prodname_dependabot %} to update the version successfully by giving it access to the host repository.
-If your code depends on packages in a private{% ifversion ghec or ghes %} or internal{% endif %} registry, you can allow {% data variables.product.prodname_dependabot %} to update the versions of these dependencies by configuring this at the repository level. You do this by adding authentication details to the `dependabot.yml` file for the repository. For more information, see [Top-level `registries` key](/code-security/dependabot/working-with-dependabot/dependabot-options-reference#top-level-registries-key).
+If your code depends on packages in a private{% ifversion ghec or ghes %} or internal{% endif %} registry, you can allow {% data variables.product.prodname_dependabot %} to update the versions of these dependencies by configuring this at the repository level. You do this by adding authentication details to the `dependabot.yml` file for the repository. For more information, see [Top-level `registries` key](/code-security/reference/supply-chain-security/dependabot-options-reference#top-level-registries-key).
{% ifversion ghec %}
diff --git a/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/about-merge-conflicts.md b/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/about-merge-conflicts.md
index 477d82aaa4fd..6ba63ab97051 100644
--- a/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/about-merge-conflicts.md
+++ b/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/about-merge-conflicts.md
@@ -11,6 +11,8 @@ versions:
fpt: '*'
ghec: '*'
ghes: '*'
+category:
+ - Merge and close pull requests
---
Git can often resolve differences between branches and merge them automatically. Usually, the changes are on different lines, or even in different files, which makes the merge simple for computers to understand. However, sometimes there are competing changes that Git can't resolve without your help. Often, merge conflicts happen when people make different changes to the same line of the same file, or when one person edits a file and another person deletes the same file.
diff --git a/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-on-github.md b/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-on-github.md
index 3599fb8bd187..85a823e9f384 100644
--- a/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-on-github.md
+++ b/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-on-github.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Resolve merge conflicts
+category:
+ - Merge and close pull requests
---
You can only resolve merge conflicts on {% data variables.product.github %} that are caused by competing line changes, such as when people make different changes to the same line of the same file on different branches in your Git repository. For all other types of merge conflicts, you must resolve the conflict locally on the command line. For more information, see [AUTOTITLE](/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line).
diff --git a/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line.md b/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line.md
index dcdb803acbd3..f7d9e9aa5c88 100644
--- a/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line.md
+++ b/content/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Resolve merge conflicts in Git
+category:
+ - Merge and close pull requests
---
Merge conflicts occur when competing changes are made to the same line of a file, or when one person edits a file and another person deletes the same file. For more information, see [AUTOTITLE](/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/about-merge-conflicts).
diff --git a/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks.md b/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks.md
index 75c1e438e37b..6f313dcd5c63 100644
--- a/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks.md
+++ b/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks.md
@@ -11,6 +11,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Merge and close pull requests
---
Status checks are based on external processes, such as continuous integration builds, which run for each push you make to a repository. You can see the _pending_, _passing_, or _failing_ state of status checks next to individual commits in your pull request.
diff --git a/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks.md b/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks.md
index c7858a8694fa..8ea2fc31d185 100644
--- a/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks.md
+++ b/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks.md
@@ -11,6 +11,8 @@ redirect_from:
- /github/administering-a-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks
- /repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks
shortTitle: Required status checks
+category:
+ - Merge and close pull requests
---
If you have a check and a status with the same name, and you select that name as a required status check, both the check and the status are required. For more information, see [AUTOTITLE](/rest/checks).
diff --git a/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/working-with-pre-receive-hooks.md b/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/working-with-pre-receive-hooks.md
index 5ee2b87e6d60..7f1f1babef16 100644
--- a/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/working-with-pre-receive-hooks.md
+++ b/content/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/working-with-pre-receive-hooks.md
@@ -9,6 +9,8 @@ redirect_from:
versions:
ghes: '*'
shortTitle: Pre-receive hooks
+category:
+ - Merge and close pull requests
---
Pre-receive hooks run tests on code pushed to a repository to ensure contributions meet repository or organization policy. If the commit contents pass the tests, the push will be accepted into the repository. If the commit contents do not pass the tests, the push will not be accepted.
diff --git a/content/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models.md b/content/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models.md
index 5865690c38aa..c0fdda96d586 100644
--- a/content/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models.md
+++ b/content/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Collaborative development
+category:
+ - Create pull requests
---
## Fork and pull model
diff --git a/content/pull-requests/collaborating-with-pull-requests/getting-started/helping-others-review-your-changes.md b/content/pull-requests/collaborating-with-pull-requests/getting-started/helping-others-review-your-changes.md
index 7a3f208e78c0..3bdb6e290bc6 100644
--- a/content/pull-requests/collaborating-with-pull-requests/getting-started/helping-others-review-your-changes.md
+++ b/content/pull-requests/collaborating-with-pull-requests/getting-started/helping-others-review-your-changes.md
@@ -8,6 +8,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Help others review your changes
+category:
+ - Create pull requests
---
When you create a pull request, you’re asking your team to review your changes and provide feedback. This guide provides best practices for creating pull requests that are easy to review and keep your team informed, so that you can improve collaboration and the quality of reviews.
diff --git a/content/pull-requests/collaborating-with-pull-requests/getting-started/managing-and-standardizing-pull-requests.md b/content/pull-requests/collaborating-with-pull-requests/getting-started/managing-and-standardizing-pull-requests.md
index 4acb7fc58fea..e07baef0bf4e 100644
--- a/content/pull-requests/collaborating-with-pull-requests/getting-started/managing-and-standardizing-pull-requests.md
+++ b/content/pull-requests/collaborating-with-pull-requests/getting-started/managing-and-standardizing-pull-requests.md
@@ -6,6 +6,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Manage and standardize pull requests
+category:
+ - Create pull requests
---
If you are a repository maintainer, there are several ways that you can manage and standardize the pull requests that contributors create in your repository. These steps can help you ensure that pull requests are reviewed by the right people, and that they meet your repository's standards.
diff --git a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges.md b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges.md
index b7b2313158b4..7c33b631ebc3 100644
--- a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges.md
+++ b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges.md
@@ -11,6 +11,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Merge and close pull requests
---
## Merge your commits
diff --git a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request.md
index e38507a096f0..06c7d51021c8 100644
--- a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request.md
@@ -11,6 +11,8 @@ redirect_from:
- /github/collaborating-with-issues-and-pull-requests/automatically-merging-a-pull-request
- /github/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request
shortTitle: Merge PR automatically
+category:
+ - Merge and close pull requests
---
## About auto-merge
diff --git a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/closing-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/closing-a-pull-request.md
index e411fdfea144..5cfb6a890630 100644
--- a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/closing-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/closing-a-pull-request.md
@@ -10,6 +10,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Merge and close pull requests
---
> [!TIP]
diff --git a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request-with-a-merge-queue.md b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request-with-a-merge-queue.md
index e0878f9b4e5a..662eba9f8ecc 100644
--- a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request-with-a-merge-queue.md
+++ b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request-with-a-merge-queue.md
@@ -11,6 +11,8 @@ redirect_from:
- /github/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/adding-a-pull-request-to-the-merge-queue
defaultTool: webui
product: '{% data reusables.gated-features.merge-queue %}'
+category:
+ - Merge and close pull requests
---
## About merge queues
diff --git a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request.md
index c0b71f784c90..3367f2ec9bf7 100644
--- a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request.md
@@ -10,6 +10,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Merge and close pull requests
---
## About pull request merges
diff --git a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/reverting-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/reverting-a-pull-request.md
index 67a085664060..ac420eb09645 100644
--- a/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/reverting-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/reverting-a-pull-request.md
@@ -10,6 +10,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Merge and close pull requests
---
## About reverting a pull request
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-branches.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-branches.md
index 2c73bdd1f13c..0a2476e41dfb 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-branches.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-branches.md
@@ -11,6 +11,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Create pull requests
---
## About branches
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-comparing-branches-in-pull-requests.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-comparing-branches-in-pull-requests.md
index 8c35c33ced71..b24ce8799018 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-comparing-branches-in-pull-requests.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-comparing-branches-in-pull-requests.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Compare branches
+category:
+ - Create pull requests
---
> [!NOTE]
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests.md
index b3af4e9e1ba1..ddceef8f136e 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests.md
@@ -11,6 +11,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Create pull requests
---
Pull requests are proposals to merge code changes into a project. A pull request is {% data variables.product.github %}'s foundational **collaboration feature**, letting you discuss and review changes before merging them. This helps teams work together, catch issues early, and maintain code quality.
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-base-branch-of-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-base-branch-of-a-pull-request.md
index 7159f39a083a..a8c9f85046c6 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-base-branch-of-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-base-branch-of-a-pull-request.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Change the base branch
+category:
+ - Create pull requests
---
> [!WARNING]
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request.md
index 8c5790ef5977..c9ade7970c80 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Change the state
+category:
+ - Create pull requests
---
## Marking a pull request as ready for review
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/committing-changes-to-a-pull-request-branch-created-from-a-fork.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/committing-changes-to-a-pull-request-branch-created-from-a-fork.md
index 0e4c06800730..37b282b1c1bc 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/committing-changes-to-a-pull-request-branch-created-from-a-fork.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/committing-changes-to-a-pull-request-branch-created-from-a-fork.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Commit to PR branch from fork
+category:
+ - Create pull requests
---
You can only make commits on pull request branches that:
* Are opened in a repository that you have push access to and that were created from a fork of that repository
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork.md
index d85e5fedc26c..565d82402dc3 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Create a PR from a fork
+category:
+ - Create pull requests
---
If your pull request compares your topic branch with a branch in the upstream repository as the base branch, then your topic branch is also called the "compare branch" of the pull request.
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request.md
index 90ff76a4f801..c3a68a1112d2 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request.md
@@ -10,6 +10,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Create pull requests
---
If you want to create a new branch for your pull request and do not have write permissions to the repository, you can fork the repository first. For more information, see [AUTOTITLE](/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) and [AUTOTITLE](/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks).
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-and-deleting-branches-within-your-repository.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-and-deleting-branches-within-your-repository.md
index 6b93a529b3b8..ae9815947711 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-and-deleting-branches-within-your-repository.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-and-deleting-branches-within-your-repository.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Create & delete branches
+category:
+ - Create pull requests
---
## Creating a branch
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/keeping-your-pull-request-in-sync-with-the-base-branch.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/keeping-your-pull-request-in-sync-with-the-base-branch.md
index ecbc2d648274..6a3ce11aad7c 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/keeping-your-pull-request-in-sync-with-the-base-branch.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/keeping-your-pull-request-in-sync-with-the-base-branch.md
@@ -7,6 +7,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Update the head branch
+category:
+ - Create pull requests
---
## About keeping your pull request in sync
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/requesting-a-pull-request-review.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/requesting-a-pull-request-review.md
index be9394e0f3b3..b17309e3689b 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/requesting-a-pull-request-review.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/requesting-a-pull-request-review.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Request a PR review
+category:
+ - Create pull requests
---
Repositories belong to a personal account (a single individual owner) or an organization account (a shared account with numerous collaborators or maintainers). For more information, see [AUTOTITLE](/get-started/learning-about-github/types-of-github-accounts). Owners and collaborators on a repository owned by a personal account can assign pull request reviews. Organization members with triage permissions can also assign a reviewer for a pull request.
diff --git a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/using-query-parameters-to-create-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/using-query-parameters-to-create-a-pull-request.md
index 846b8667a59f..79a98e51c40b 100644
--- a/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/using-query-parameters-to-create-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/using-query-parameters-to-create-a-pull-request.md
@@ -7,6 +7,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Create pull requests
---
You can use query parameters to open pull requests. Query parameters are optional parts of a URL you can customize to share a specific web page view, such as search filter results or a pull request template on {% data variables.product.prodname_dotcom %}. To create your own query parameters, you must match the key and value pair. For more information on creating pull request templates, see [AUTOTITLE](/communities/using-templates-to-encourage-useful-issues-and-pull-requests/creating-a-pull-request-template-for-your-repository).
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews.md
index c44d699f91aa..c65c7ffdacd7 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: About PR reviews
+category:
+ - Review pull requests
---
Pull request reviews are one of the primary ways people collaborate on {% data variables.product.github %}. Reviewers can comment on changes, suggest improvements, and approve or request changes before code is merged. This collaborative process enables teams to ensure code quality and share knowledge.
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/approving-a-pull-request-with-required-reviews.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/approving-a-pull-request-with-required-reviews.md
index 2037b30cdd24..b1a2ebcc3edc 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/approving-a-pull-request-with-required-reviews.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/approving-a-pull-request-with-required-reviews.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Required reviews
+category:
+ - Review pull requests
---
For more information about required reviews, see [AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-pull-request-reviews-before-merging).
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally.md
index 79e7658cd03a..bdab46bb5fc5 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Check out a PR locally
+category:
+ - Review pull requests
---
> [!NOTE]
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request.md
index 61a8fb6da749..30fa9ac44b0d 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request.md
@@ -14,6 +14,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Comment on a PR
+category:
+ - Review pull requests
---
## About pull request comments
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review.md
index a31c601f1a6a..77ebac8fb36b 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Dismiss a PR review
+category:
+ - Review pull requests
---
{% data reusables.pull_requests.dismiss_review %}
This changes the status of the review to a review comment. When you dismiss a review, you must add a comment explaining why you dismissed it. Your comment will be added to the pull request conversation.
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/filtering-files-in-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/filtering-files-in-a-pull-request.md
index c1595beceebe..6dd12604a887 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/filtering-files-in-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/filtering-files-in-a-pull-request.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Filter files
+category:
+ - Review pull requests
---
You can filter files in a pull request by file extension type, such as `.html` or `.js`, lack of an extension, code ownership, or dotfiles. You can also use the file tree to filter by file path, navigate between files, or see a high level view of the changed files.
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/finding-changed-methods-and-functions-in-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/finding-changed-methods-and-functions-in-a-pull-request.md
index b17d4bc772dc..de7ca8a610f1 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/finding-changed-methods-and-functions-in-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/finding-changed-methods-and-functions-in-a-pull-request.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Methods & functions
+category:
+ - Review pull requests
---
Anyone with read access to a repository can see a summary list of the functions and methods changes in certain files of a pull request.
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/incorporating-feedback-in-your-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/incorporating-feedback-in-your-pull-request.md
index aee3a2ff594c..95ad17acc2d0 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/incorporating-feedback-in-your-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/incorporating-feedback-in-your-pull-request.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Incorporate feedback
+category:
+ - Review pull requests
---
## Applying suggested changes
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-dependency-changes-in-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-dependency-changes-in-a-pull-request.md
index 7c75e4bdfb8f..d51d619c4f43 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-dependency-changes-in-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-dependency-changes-in-a-pull-request.md
@@ -12,6 +12,8 @@ redirect_from:
- /github/collaborating-with-issues-and-pull-requests/reviewing-dependency-changes-in-a-pull-request
- /github/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-dependency-changes-in-a-pull-request
shortTitle: Review dependency changes
+category:
+ - Review pull requests
---
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-proposed-changes-in-a-pull-request.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-proposed-changes-in-a-pull-request.md
index 179d44d8b5ba..8da6f061f447 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-proposed-changes-in-a-pull-request.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-proposed-changes-in-a-pull-request.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Review proposed changes
+category:
+ - Review pull requests
---
## About reviewing pull requests
diff --git a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/viewing-a-pull-request-review.md b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/viewing-a-pull-request-review.md
index 3877e3419e7c..45c51d259868 100644
--- a/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/viewing-a-pull-request-review.md
+++ b/content/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/viewing-a-pull-request-review.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: View a PR review
+category:
+ - Review pull requests
---
{% data reusables.search.requested_reviews_search %}
diff --git a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks.md b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks.md
index f93515f1b8c6..24faad799ea5 100644
--- a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks.md
+++ b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks.md
@@ -10,6 +10,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Work with forks
---
## About forks
diff --git a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/about-permissions-and-visibility-of-forks.md b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/about-permissions-and-visibility-of-forks.md
index 4af782227b72..cc9f250fec2b 100644
--- a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/about-permissions-and-visibility-of-forks.md
+++ b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/about-permissions-and-visibility-of-forks.md
@@ -6,6 +6,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Work with forks
---
## About permissions for creating forks
diff --git a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork.md b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork.md
index b49578f26927..9cb5dfb470bf 100644
--- a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork.md
+++ b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Allow changes to a branch
+category:
+ - Work with forks
---
When a user creates a pull request from their fork, the user generally has the authority to decide if other users can commit to the pull request's compare branch. If the pull request author wants greater collaboration, they can grant maintainers of the upstream repository (that is, anyone with push access to the upstream repository) permission to commit to the pull request's compare branch. To learn more about upstream repositories, see [AUTOTITLE](/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks).
diff --git a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/configuring-a-remote-repository-for-a-fork.md b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/configuring-a-remote-repository-for-a-fork.md
index 0947569c8ec4..37eb7b5395ba 100644
--- a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/configuring-a-remote-repository-for-a-fork.md
+++ b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/configuring-a-remote-repository-for-a-fork.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Configure a remote repository
+category:
+ - Work with forks
---
{% data reusables.command_line.open_the_multi_os_terminal %}
1. List the current configured remote repository for your fork.
diff --git a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/detaching-a-fork.md b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/detaching-a-fork.md
index d9a0803022a0..0830fe84ec9a 100644
--- a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/detaching-a-fork.md
+++ b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/detaching-a-fork.md
@@ -6,6 +6,8 @@ versions:
ghes: '*'
ghec: '*'
permissions: People with admin access for a forked repository can delete the forked repository.
+category:
+ - Work with forks
---
{% ifversion ghes > 3.16 %}
diff --git a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo.md b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo.md
index 327f6fd85e89..9c6d6c1f79bd 100644
--- a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo.md
+++ b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo.md
@@ -14,6 +14,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Work with forks
---
## About forks
diff --git a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork.md b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork.md
index 0b33d8504a71..ae7bc77e8afc 100644
--- a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork.md
+++ b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork.md
@@ -16,6 +16,8 @@ versions:
ghes: '*'
ghec: '*'
permissions: People with write access for a forked repository can sync the fork to the upstream repository.
+category:
+ - Work with forks
---
## Syncing a fork branch from the web UI
diff --git a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/what-happens-to-forks-when-a-repository-is-deleted-or-changes-visibility.md b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/what-happens-to-forks-when-a-repository-is-deleted-or-changes-visibility.md
index 8d8c0b3159ce..d5c4da2c6cce 100644
--- a/content/pull-requests/collaborating-with-pull-requests/working-with-forks/what-happens-to-forks-when-a-repository-is-deleted-or-changes-visibility.md
+++ b/content/pull-requests/collaborating-with-pull-requests/working-with-forks/what-happens-to-forks-when-a-repository-is-deleted-or-changes-visibility.md
@@ -12,6 +12,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Deleted or changes visibility
+category:
+ - Work with forks
---
{% data reusables.repositories.deleted_forks_from_private_repositories_warning %}
diff --git a/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits.md b/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits.md
index 9a0af64cb18f..deb685c40808 100644
--- a/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits.md
+++ b/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits.md
@@ -11,6 +11,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Commit changes
---
## About commits
diff --git a/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message.md b/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message.md
index 4e6dca6f92e7..19a001e3a0e5 100644
--- a/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message.md
+++ b/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message.md
@@ -10,6 +10,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Commit changes
---
## Rewriting the most recent commit message
diff --git a/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-on-behalf-of-an-organization.md b/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-on-behalf-of-an-organization.md
index 83c7b359b7f4..df0e355ef36c 100644
--- a/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-on-behalf-of-an-organization.md
+++ b/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-on-behalf-of-an-organization.md
@@ -9,6 +9,8 @@ versions:
fpt: '*'
ghec: '*'
shortTitle: On behalf of an organization
+category:
+ - Commit changes
---
To create commits on behalf of an organization:
diff --git a/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors.md b/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors.md
index 284cf71e49d7..af1828d926b6 100644
--- a/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors.md
+++ b/content/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors.md
@@ -10,6 +10,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: With multiple authors
+category:
+ - Commit changes
---
## Required co-author information
diff --git a/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/commit-exists-on-github-but-not-in-my-local-clone.md b/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/commit-exists-on-github-but-not-in-my-local-clone.md
index 790fda044ade..473219ac1cc6 100644
--- a/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/commit-exists-on-github-but-not-in-my-local-clone.md
+++ b/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/commit-exists-on-github-but-not-in-my-local-clone.md
@@ -10,6 +10,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Commit missing in local clone
+category:
+ - Commit changes
---
When you use `git show` to view a specific commit on the command line, you may get a fatal error.
diff --git a/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/my-commit-is-blocked-by-push-protection.md b/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/my-commit-is-blocked-by-push-protection.md
index 37e377b6f4a3..a6fcad2fb217 100644
--- a/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/my-commit-is-blocked-by-push-protection.md
+++ b/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/my-commit-is-blocked-by-push-protection.md
@@ -6,6 +6,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Commit blocked by push protection
+category:
+ - Commit changes
---
## Understanding why push protection has blocked your commit
diff --git a/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/why-are-my-commits-linked-to-the-wrong-user.md b/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/why-are-my-commits-linked-to-the-wrong-user.md
index 2e1f02cf0efb..65a07c679a71 100644
--- a/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/why-are-my-commits-linked-to-the-wrong-user.md
+++ b/content/pull-requests/committing-changes-to-your-project/troubleshooting-commits/why-are-my-commits-linked-to-the-wrong-user.md
@@ -11,6 +11,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Linked to wrong user
+category:
+ - Commit changes
---
> [!NOTE]
diff --git a/content/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/comparing-commits.md b/content/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/comparing-commits.md
index 8979e7ffc4e2..22c3687f4a93 100644
--- a/content/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/comparing-commits.md
+++ b/content/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/comparing-commits.md
@@ -10,6 +10,8 @@ versions:
fpt: '*'
ghes: '*'
ghec: '*'
+category:
+ - Commit changes
---
To compare different versions of your repository, append `/compare` to your repository's path.
diff --git a/content/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/differences-between-commit-views.md b/content/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/differences-between-commit-views.md
index 237a068feb1a..3831ff9894ee 100644
--- a/content/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/differences-between-commit-views.md
+++ b/content/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/differences-between-commit-views.md
@@ -10,6 +10,8 @@ versions:
ghes: '*'
ghec: '*'
shortTitle: Commit views
+category:
+ - Commit changes
---
On {% data variables.product.github %}, you can see the commit history of a repository by:
diff --git a/content/pull-requests/index.md b/content/pull-requests/index.md
index aa825f992ac8..934e0217c934 100644
--- a/content/pull-requests/index.md
+++ b/content/pull-requests/index.md
@@ -3,24 +3,26 @@ title: Pull requests documentation
intro: 'Learn how to use pull requests to suggest changes to a project, receive suggested changes to your own projects, and address issues in pull requests, such as merge conflicts.'
introLinks:
overview: /pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
-featuredLinks:
- startHere:
- - /pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message
- - /pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line
- - /pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-and-deleting-branches-within-your-repository
+changelog:
+ label: pull-requests
+layout: discovery-landing
+carousels:
+ recommended:
+ - /pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
+ - /pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models
- /pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request
- popular:
- - /pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews
+ - /pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-proposed-changes-in-a-pull-request
+ - /pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request
- /pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-on-github
+ - /pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo
- /pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork
- - /pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request
- guideCards:
- - /pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/approving-a-pull-request-with-required-reviews
- - /pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/reverting-a-pull-request
- - /pull-requests/committing-changes-to-your-project/troubleshooting-commits/why-are-my-commits-linked-to-the-wrong-user
-changelog:
- label: pull-requests
-layout: product-landing
+ - /pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits
+includedCategories:
+ - Create pull requests
+ - Review pull requests
+ - Merge and close pull requests
+ - Work with forks
+ - Commit changes
shortTitle: Pull requests
versions:
fpt: '*'
diff --git a/content/rest/authentication/authenticating-to-the-rest-api.md b/content/rest/authentication/authenticating-to-the-rest-api.md
index 8062f92fd342..608b50ca863f 100644
--- a/content/rest/authentication/authenticating-to-the-rest-api.md
+++ b/content/rest/authentication/authenticating-to-the-rest-api.md
@@ -169,4 +169,4 @@ Authentication with username and password is not supported. If you try to authen
## Further reading
* [AUTOTITLE](/rest/overview/keeping-your-api-credentials-secure)
-* [AUTOTITLE](/rest/guides/getting-started-with-the-rest-api#authenticating)
+* [AUTOTITLE](/rest/guides/getting-started-with-the-rest-api#authentication)
diff --git a/content/rest/git/blobs.md b/content/rest/git/blobs.md
index 07463e62c8e7..ed4dda17dbf7 100644
--- a/content/rest/git/blobs.md
+++ b/content/rest/git/blobs.md
@@ -15,6 +15,6 @@ autogenerated: rest
## About Git blobs
A Git blob (binary large object) is the object type used to store the contents of each file in a repository. The file's SHA-1 hash is computed and stored in the blob object. These endpoints allow you to read and write [blob objects](https://git-scm.com/book/en/v2/Git-Internals-Git-Objects)
-to your Git database on {% data variables.product.github %}. Blobs leverage [these custom media types](#custom-media-types-for-blobs). For more information about the use of media types in the API, see [AUTOTITLE](/rest/overview/media-types).
+to your Git database on {% data variables.product.github %}. Blobs leverage custom media types. For more information about the use of media types in the API, see [AUTOTITLE](/rest/overview/media-types).
diff --git a/content/rest/guides/delivering-deployments.md b/content/rest/guides/delivering-deployments.md
index 5fadf4973616..4342f0a924f2 100644
--- a/content/rest/guides/delivering-deployments.md
+++ b/content/rest/guides/delivering-deployments.md
@@ -173,14 +173,14 @@ After the deployment is finished, we set the status to `success`.
## Conclusion
-At GitHub, we've used a version of [Heaven](https://github.com/atmos/heaven) to manage
+At GitHub, we've used a version of `Heaven` to manage
our deployments for years. A common flow is essentially the same as the
server we've built above:
* Wait for a response on the state of the CI checks (success or failure)
* If the required checks succeed, merge the pull request
-* Heaven takes the merged code, and deploys it to staging and production servers
-* In the meantime, Heaven also notifies everyone about the build, via [Hubot](https://github.com/github/hubot) sitting in our chat rooms
+* `Heaven` takes the merged code, and deploys it to staging and production servers
+* In the meantime, `Heaven` also notifies everyone about the build, via [Hubot](https://github.com/github/hubot) sitting in our chat rooms
That's it! You don't need to build your own deployment setup to use this example.
You can always rely on [GitHub integrations](https://github.com/integrations).
diff --git a/content/rest/guides/rendering-data-as-graphs.md b/content/rest/guides/rendering-data-as-graphs.md
index 93ff3d396f65..463586f1dae2 100644
--- a/content/rest/guides/rendering-data-as-graphs.md
+++ b/content/rest/guides/rendering-data-as-graphs.md
@@ -26,7 +26,7 @@ Let's jump right in!
First, [register a new application](https://github.com/settings/applications/new) on {% data variables.product.github %}. Set the main and callback
URLs to `http://localhost:4567/`. As [before](/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app), we're going to handle authentication for the API by
-implementing a Rack middleware using [sinatra-auth-github](https://github.com/atmos/sinatra_auth_github):
+implementing a Rack middleware using [sinatra-auth-github](https://rubygems.org/gems/sinatra_auth_github):
``` ruby
require 'sinatra/auth/github'
diff --git a/content/rest/using-the-rest-api/getting-started-with-the-rest-api.md b/content/rest/using-the-rest-api/getting-started-with-the-rest-api.md
index c55e7fe4bbf1..651efd4ed47a 100644
--- a/content/rest/using-the-rest-api/getting-started-with-the-rest-api.md
+++ b/content/rest/using-the-rest-api/getting-started-with-the-rest-api.md
@@ -177,7 +177,7 @@ Body parameters allow you to pass additional data to the API. These parameters c
For example, the ["Create an issue" endpoint](/rest/issues/issues#create-an-issue) requires that you specify a title for the new issue in your request. It also allows you to optionally specify other information, such as text to put in the issue body, users to assign to the new issue, or labels to apply to the new issue. For an example of a request that uses body parameters, see [Making a request](#making-a-request).
-You must authenticate your request to pass body parameters. For more information, see [Authenticating](#authenticating).
+You must authenticate your request to pass body parameters. For more information, see [Authentication](#authentication).
#### Query parameters
diff --git a/content/site-policy/github-company-policies/github-statement-against-modern-slavery-and-child-labor.md b/content/site-policy/github-company-policies/github-statement-against-modern-slavery-and-child-labor.md
index 7d10679733e6..548ea6476735 100644
--- a/content/site-policy/github-company-policies/github-statement-against-modern-slavery-and-child-labor.md
+++ b/content/site-policy/github-company-policies/github-statement-against-modern-slavery-and-child-labor.md
@@ -15,7 +15,7 @@ According to the International Labour Organization (ILO), [40 million people wer
GitHub deplores the presence and persistence of modern slavery and child labor, and takes seriously its responsibility to ensure that neither modern slavery nor child labor takes place in its supply chain or in any part of its business. ("Modern slavery" in this statement refers to slavery, forced or compulsory labor, trafficking, servitude, and workers who are imprisoned, indentured, or bonded. "Child labor" refers to work performed by someone under 16 years of age, or under 14 for light work, provided it is not confined to periods that interfere with the child's schooling and not in conditions that interfere with the child's health or well-being.)
-In accordance with the [UK Modern Slavery Act](https://www.legislation.gov.uk/ukpga/2015/30/section/54/enacted), and in alignment with the [ILO 2014 Protocol to its Forced Labour Convention](https://www.ilo.org/dyn/normlex/en/f?p=NORMLEXPUB:12100:0::NO::P12100_ILO_CODE:P029), [ILO Declaration on Fundamental Principles and Rights at Work](https://www.ilo.org/ilo-declaration-fundamental-principles-and-rights-work), and [United Nations Sustainable Development Goals target 8.7](https://www.unodc.org/roseap/en/sustainable-development-goals.html#:~:text=Target%208.7%20%2D%20Take%20immediate%20and,labour%20in%20all%20its%20forms), this 2018 Statement Against Modern Slavery and Child Labor ("the Statement") describes the steps GitHub has taken to prevent modern slavery and child labor from occurring in its business or supply chain.
+In accordance with the [UK Modern Slavery Act](https://www.legislation.gov.uk/ukpga/2015/30/section/54/enacted), and in alignment with the [ILO 2014 Protocol to its Forced Labour Convention](https://www.ilo.org/dyn/normlex/en/f?p=NORMLEXPUB:12100:0::NO::P12100_ILO_CODE:P029), [ILO Declaration on Fundamental Principles and Rights at Work](https://www.ilo.org/ilo-declaration-fundamental-principles-and-rights-work), and [United Nations Sustainable Development Goals target 8.7](https://sdgs.un.org/goals/goal8), this 2018 Statement Against Modern Slavery and Child Labor ("the Statement") describes the steps GitHub has taken to prevent modern slavery and child labor from occurring in its business or supply chain.
## GitHub's structure, business, and supply chains
diff --git a/data/features/oidc-custom-properties.yml b/data/features/oidc-custom-properties.yml
new file mode 100644
index 000000000000..14ba8f5e2d5b
--- /dev/null
+++ b/data/features/oidc-custom-properties.yml
@@ -0,0 +1,3 @@
+versions:
+ fpt: '*'
+ ghec: '*'
diff --git a/data/reusables/copilot/available-models-per-plan.md b/data/reusables/copilot/available-models-per-plan.md
index fc035f94faa0..471b00a342c5 100644
--- a/data/reusables/copilot/available-models-per-plan.md
+++ b/data/reusables/copilot/available-models-per-plan.md
@@ -1,9 +1,9 @@
{% rowheaders %}
-| Available models in chat | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
-|---------------------------------------------------------|-------------------------------------------------|-------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|-------------------------------------------------------|
+| Available models in chat | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_student_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
+|---------------------------------------------------------|-------------------------------------------------|----------------------------------------------|-------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|-------------------------------------------------------|
| {% for model in tables.copilot.model-supported-plans %} |
-| {{ model.name }} | {% if model.free == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} | {% if model.pro == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} | {% if model.pro_plus == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} | {% if model.business == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} | {% if model.enterprise == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} |
+| {{ model.name }} | {% if model.free == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} | {% if model.student == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} | {% if model.pro == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} | {% if model.pro_plus == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} | {% if model.business == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} | {% if model.enterprise == true %}{% octicon "check" aria-label="Included" %}{% else %}{% octicon "x" aria-label="Not included" %}{% endif %} |
| {% endfor %} |
{% endrowheaders %}
diff --git a/data/reusables/copilot/differences-cfi-cfb-table.md b/data/reusables/copilot/differences-cfi-cfb-table.md
index 94c0934fc205..0c94f354402e 100644
--- a/data/reusables/copilot/differences-cfi-cfb-table.md
+++ b/data/reusables/copilot/differences-cfi-cfb-table.md
@@ -1,10 +1,10 @@
{% rowheaders %}
-| | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
-| --- | --- | --- | --- | --- | --- |
-| Pricing | Not applicable | {% data variables.copilot.cfi_price_per_month %} per month, or
{% data variables.copilot.cfi_price_per_year %} per year
(free for some users) | {% data variables.copilot.cpp_price_per_month %} per month, or
{% data variables.copilot.cpp_price_per_year %} per year
| {% data variables.copilot.cfb_price_per_month %} per granted seat per month | {% data variables.copilot.ce_price_per_month %} per granted seat per month |
-| Premium requests | 50 per month | 300 per month | 1500 per month | 300 per user per month | 1000 per user per month |
-| Purchase additional premium requests at $0.04/request| {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_student_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
+| --- | --- | --- | --- | --- | --- | --- |
+| Pricing | Not applicable | Free | {% data variables.copilot.cfi_price_per_month %} per month, or
{% data variables.copilot.cfi_price_per_year %} per year
(free for some users) | {% data variables.copilot.cpp_price_per_month %} per month, or
{% data variables.copilot.cpp_price_per_year %} per year
| {% data variables.copilot.cfb_price_per_month %} per granted seat per month | {% data variables.copilot.ce_price_per_month %} per granted seat per month |
+| Premium requests | 50 per month | 300 per month | 300 per month | 1500 per month | 300 per user per month | 1000 per user per month |
+| Purchase additional premium requests at $0.04/request| {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
{% endrowheaders %}
@@ -12,13 +12,13 @@
{% rowheaders %}
-| Agents | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
-| --- | --- | --- | --- | --- | --- |
-| {% data variables.copilot.copilot_coding_agent %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Agent mode | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| {% data variables.product.prodname_copilot_short %} code review | Only "Review selection" in {% data variables.product.prodname_vscode_shortname %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Model Context Protocol (MCP) | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Third-party Agents ({% data variables.release-phases.public_preview %}) | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} |
+| Agents | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_student_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
+| --- | --- | --- | --- | --- | --- | --- |
+| {% data variables.copilot.copilot_coding_agent %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Agent mode | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.product.prodname_copilot_short %} code review | Only "Review selection" in {% data variables.product.prodname_vscode_shortname %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Model Context Protocol (MCP) | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Third-party Agents ({% data variables.release-phases.public_preview %}) | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} |
{% endrowheaders %}
@@ -26,16 +26,16 @@
{% rowheaders %}
-| Chat | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
-| --- | --- | --- | --- | --- | --- |
-| {% data variables.copilot.copilot_chat_short %} in IDEs[^1] [^2] | 50 messages per month | Unlimited with included models | Unlimited with included models | Unlimited with included models | Unlimited with included models |
-| Inline chat | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Slash commands | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| {% data variables.copilot.copilot_mobile_short %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| {% data variables.copilot.copilot_chat_dotcom_short %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| {% data variables.copilot.copilot_chat_short %} in {% data variables.product.prodname_windows_terminal %} | {% octicon "check" aria-label="Included" %} |{% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Increased {% data variables.product.prodname_github_models %} rate limits[^3] | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| {% data variables.copilot.copilot_chat_short %} skills in IDEs[^4] | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Chat | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_student_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
+| --- | --- | --- | --- | --- | --- | --- |
+| {% data variables.copilot.copilot_chat_short %} in IDEs[^1] [^2] | 50 messages per month | Unlimited with included models | Unlimited with included models | Unlimited with included models | Unlimited with included models | Unlimited with included models |
+| Inline chat | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Slash commands | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.copilot_mobile_short %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.copilot_chat_dotcom_short %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.copilot_chat_short %} in {% data variables.product.prodname_windows_terminal %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |{% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Increased {% data variables.product.prodname_github_models %} rate limits[^3] | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.copilot_chat_short %} skills in IDEs[^4] | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
{% endrowheaders %}
@@ -47,10 +47,10 @@
{% rowheaders %}
-| Inline suggestions | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
-| --- | --- | --- | --- | --- | --- |
-| Real-time code suggestions with included models[^5] | 2000 completions per month | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| {% data variables.copilot.next_edit_suggestions_caps %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Inline suggestions | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_student_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
+| --- | --- | --- | --- | --- | --- | --- |
+| Real-time code suggestions with included models[^5] | 2000 completions per month | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.next_edit_suggestions_caps %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
{% endrowheaders %}
@@ -58,15 +58,15 @@
{% rowheaders %}
-| Customization | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
-| --- | --- | --- | --- | --- | --- |
-| Repository and personal custom instructions | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Organization custom instructions ({% data variables.release-phases.public_preview %}) | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Prompt files | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Model Context Protocol (MCP) | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Block suggestions matching public code | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Exclude specified files from {% data variables.product.prodname_copilot_short %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Organization-wide policy management | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Customization | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_student_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
+| --- | --- | --- | --- | --- | --- | --- |
+| Repository and personal custom instructions | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Organization custom instructions ({% data variables.release-phases.public_preview %}) | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Prompt files | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Model Context Protocol (MCP) | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Block suggestions matching public code | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Exclude specified files from {% data variables.product.prodname_copilot_short %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Organization-wide policy management | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
{% endrowheaders %}
@@ -74,13 +74,13 @@
{% rowheaders %}
-| | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
-| --- | --- | --- | --- | --- | --- |
-| {% data variables.copilot.copilot_for_prs %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Audit logs | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} |{% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Content exclusion | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| {% data variables.copilot.copilot_cli_short %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| {% data variables.product.prodname_spark %} ({% data variables.release-phases.public_preview %}) | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} |
+| | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_student_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
+| --- | --- | --- | --- | --- | --- | --- |
+| {% data variables.copilot.copilot_for_prs %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Audit logs | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} |{% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| Content exclusion | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.copilot_cli_short %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.product.prodname_spark %} ({% data variables.release-phases.public_preview %}) | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} |
{% endrowheaders %}
diff --git a/data/tables/copilot/model-supported-plans.yml b/data/tables/copilot/model-supported-plans.yml
index 8b6fbc8cba85..0837d435b1cb 100644
--- a/data/tables/copilot/model-supported-plans.yml
+++ b/data/tables/copilot/model-supported-plans.yml
@@ -7,6 +7,7 @@
# Column keys:
# - name: The model name.
# - free: Availability on Copilot Free.
+# - student: Availability on Copilot Student.
# - pro: Availability on Copilot Pro.
# - pro_plus: Availability on Copilot Pro+.
# - business: Availability on Copilot Business.
@@ -14,6 +15,7 @@
- name: Claude Haiku 4.5
free: true
+ student: true
pro: true
pro_plus: true
business: true
@@ -21,6 +23,7 @@
- name: Claude Opus 4.5
free: false
+ student: false
pro: true
pro_plus: true
business: true
@@ -28,6 +31,7 @@
- name: Claude Opus 4.6
free: false
+ student: false
pro: true
pro_plus: true
business: true
@@ -35,6 +39,7 @@
- name: Claude Opus 4.6 (fast mode) (preview)
free: false
+ student: false
pro: false
pro_plus: true
business: false
@@ -42,6 +47,7 @@
- name: Claude Sonnet 4
free: false
+ student: false
pro: true
pro_plus: true
business: true
@@ -49,6 +55,7 @@
- name: Claude Sonnet 4.5
free: false
+ student: false
pro: true
pro_plus: true
business: true
@@ -56,6 +63,7 @@
- name: Claude Sonnet 4.6
free: false
+ student: false
pro: true
pro_plus: true
business: true
@@ -63,6 +71,7 @@
- name: Gemini 2.5 Pro
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -70,6 +79,7 @@
- name: Gemini 3 Flash
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -77,6 +87,7 @@
- name: Gemini 3 Pro
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -84,6 +95,7 @@
- name: Gemini 3.1 Pro
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -91,6 +103,7 @@
- name: GPT-4.1
free: true
+ student: true
pro: true
pro_plus: true
business: true
@@ -98,6 +111,7 @@
- name: GPT-5 mini
free: true
+ student: true
pro: true
pro_plus: true
business: true
@@ -105,6 +119,7 @@
- name: GPT-5.1
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -112,6 +127,7 @@
- name: GPT-5.1-Codex
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -119,6 +135,7 @@
- name: GPT-5.1-Codex-Mini
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -126,6 +143,7 @@
- name: GPT-5.1-Codex-Max
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -133,6 +151,7 @@
- name: GPT-5.2
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -140,6 +159,7 @@
- name: GPT-5.2-Codex
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -147,6 +167,7 @@
- name: GPT-5.3-Codex
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -154,6 +175,7 @@
- name: GPT-5.4
free: false
+ student: false
pro: true
pro_plus: true
business: true
@@ -161,6 +183,7 @@
- name: Grok Code Fast 1
free: true
+ student: true
pro: true
pro_plus: true
business: true
@@ -168,6 +191,7 @@
- name: Raptor mini
free: true
+ student: true
pro: true
pro_plus: true
business: false
@@ -175,6 +199,7 @@
- name: Goldeneye
free: true
+ student: false
pro: false
pro_plus: false
business: false
diff --git a/data/variables/copilot.yml b/data/variables/copilot.yml
index 553f88e62884..df41f485fc03 100644
--- a/data/variables/copilot.yml
+++ b/data/variables/copilot.yml
@@ -14,6 +14,8 @@ copilot_enterprise: 'GitHub Copilot Enterprise'
copilot_enterprise_short: 'Copilot Enterprise'
copilot_free: 'GitHub Copilot Free'
copilot_free_short: 'Copilot Free'
+copilot_student: 'GitHub Copilot Student'
+copilot_student_short: 'Copilot Student'
## Copilot billing
# Price per additional premium request
diff --git a/src/article-api/templates/audit-logs-page.template.md b/src/article-api/templates/audit-logs-page.template.md
index c91df5343cda..32bbd34531c0 100644
--- a/src/article-api/templates/audit-logs-page.template.md
+++ b/src/article-api/templates/audit-logs-page.template.md
@@ -6,6 +6,14 @@
## Audit log events
+{% if baseFields.size > 0 %}
+### Common fields
+
+The following fields are included in most audit log events: {% for field in baseFields %}`{{ field }}`{% unless forloop.last %}, {% endunless %}{% endfor %}
+
+Each event below lists only its additional fields beyond these common fields.
+
+{% endif %}
{% for categoryEntry in categorizedEvents %}
{% assign categoryName = categoryEntry[0] %}
{% assign events = categoryEntry[1] %}
@@ -20,7 +28,7 @@
{{ event.description }}
-**Fields:** {% if event.fields %}{% for field in event.fields %}`{{ field }}`{% unless forloop.last %}, {% endunless %}{% endfor %}{% else %}No fields available{% endif %}
+{% if event.fields.size > 0 %}**Additional fields:** {% for field in event.fields %}`{{ field }}`{% unless forloop.last %}, {% endunless %}{% endfor %}{% endif %}
{% if event.docs_reference_links and event.docs_reference_links != 'N/A' %}
**Reference:** {{ event.docs_reference_links }}
diff --git a/src/article-api/templates/graphql-reference.template.md b/src/article-api/templates/graphql-reference.template.md
index 955db8e5f295..76244d1d25de 100644
--- a/src/article-api/templates/graphql-reference.template.md
+++ b/src/article-api/templates/graphql-reference.template.md
@@ -4,6 +4,14 @@
{{ manualContent }}
+{% if connectionEdgeSummary %}
+## Connection and Edge types
+
+Connection types with only the standard pagination fields (`edges`, `nodes`, `pageInfo`, `totalCount`) and Edge types with only `cursor` and `node` are summarized here. Connection and Edge types with additional fields are documented individually below.
+
+{% for name in connectionEdgeSummary %}`{{ name }}`{% unless forloop.last %}, {% endunless %}{% endfor %}
+
+{% endif %}
{% for item in items %}
## {{ item.name }}
@@ -17,15 +25,13 @@
{% endif %}
{% if pageType == 'queries' %}
-**Type:** [{{ item.type }}]({{ item.href }})
+**Type:** {{ item.type }}
{% if item.args.size > 0 %}
### Arguments for `{{ item.name }}`
-| Name | Type | Description |
-| --- | --- | --- |
-{% for arg in item.args %}| `{{ arg.name }}` | [`{{ arg.type }}`]({{ arg.href }}) | {{ arg.description }} |
+{% for arg in item.args %}* `{{ arg.name }}` ({{ arg.type }}): {{ arg.description }}
{% endfor %}
{% endif %}
@@ -34,9 +40,7 @@
### Input fields for `{{ item.name }}`
-| Name | Type | Description |
-| --- | --- | --- |
-{% for field in item.inputFields %}| `{{ field.name }}` | [`{{ field.type }}`]({{ field.href }}) | {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %} |
+{% for field in item.inputFields %}* `{{ field.name }}` ({{ field.type }}): {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %}
{% endfor %}
{% endif %}
@@ -44,28 +48,23 @@
### Return fields for `{{ item.name }}`
-| Name | Type | Description |
-| --- | --- | --- |
-{% for field in item.returnFields %}| `{{ field.name }}` | [`{{ field.type }}`]({{ field.href }}) | {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %}{% if field.isDeprecated %} **Deprecated:** {{ field.deprecationReason }}{% endif %} |
+{% for field in item.returnFields %}* `{{ field.name }}` ({{ field.type }}): {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %}{% if field.isDeprecated %} **Deprecated:** {{ field.deprecationReason }}{% endif %}
{% endfor %}
{% endif %}
{% elsif pageType == 'objects' %}
{% if item.implements.size > 0 %}
+**Implements:** {% for impl in item.implements %}{{ impl.name }}{% unless forloop.last %}, {% endunless %}{% endfor %}
-### Implements
-
-{% for impl in item.implements %}- [`{{ impl.name }}`]({{ impl.href }})
-{% endfor %}
{% endif %}
{% if item.fields.size > 0 %}
### Fields for `{{ item.name }}`
-| Name | Type | Description |
-| --- | --- | --- |
-{% for field in item.fields %}| `{{ field.name }}` | [`{{ field.type }}`]({{ field.href }}) | {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %}{% if field.isDeprecated %} **Deprecated:** {{ field.deprecationReason }}{% endif %}{% if field.arguments.size > 0 %}
**Arguments:**
{% for arg in field.arguments %}- `{{ arg.name }}` ([`{{ arg.type.name }}`]({{ arg.type.href }})): {{ arg.description }}{% if arg.defaultValue %} Default: `{{ arg.defaultValue }}`.{% endif %}
{% endfor %}{% endif %} |
+{% for field in item.fields %}* `{{ field.name }}` ({{ field.type }}): {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %}{% if field.isDeprecated %} **Deprecated:** {{ field.deprecationReason }}{% endif %}{% if field.arguments.size > 0 %}
+{% for arg in field.arguments %} * `{{ arg.name }}` ({{ arg.type.name }}): {{ arg.description }}{% if arg.defaultValue %} Default: `{{ arg.defaultValue }}`.{% endif %}
+{% endfor %}{% endif %}
{% endfor %}
{% endif %}
@@ -74,9 +73,9 @@
### Fields for `{{ item.name }}`
-| Name | Type | Description |
-| --- | --- | --- |
-{% for field in item.fields %}| `{{ field.name }}` | [`{{ field.type }}`]({{ field.href }}) | {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %}{% if field.isDeprecated %} **Deprecated:** {{ field.deprecationReason }}{% endif %}{% if field.arguments.size > 0 %}
**Arguments:**
{% for arg in field.arguments %}- `{{ arg.name }}` ([`{{ arg.type.name }}`]({{ arg.type.href }})): {{ arg.description }}{% if arg.defaultValue %} Default: `{{ arg.defaultValue }}`.{% endif %}
{% endfor %}{% endif %} |
+{% for field in item.fields %}* `{{ field.name }}` ({{ field.type }}): {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %}{% if field.isDeprecated %} **Deprecated:** {{ field.deprecationReason }}{% endif %}{% if field.arguments.size > 0 %}
+{% for arg in field.arguments %} * `{{ arg.name }}` ({{ arg.type.name }}): {{ arg.description }}{% if arg.defaultValue %} Default: `{{ arg.defaultValue }}`.{% endif %}
+{% endfor %}{% endif %}
{% endfor %}
{% endif %}
@@ -85,10 +84,7 @@
### Values for `{{ item.name }}`
-{% for value in item.values %}**`{{ value.name }}`**
-
-{{ value.description }}
-
+{% for value in item.values %}* `{{ value.name }}`: {{ value.description }}
{% endfor %}
{% endif %}
@@ -97,7 +93,7 @@
### Possible types for `{{ item.name }}`
-{% for type in item.possibleTypes %}- [`{{ type.name }}`]({{ type.href }})
+{% for type in item.possibleTypes %}* {{ type.name }}
{% endfor %}
{% endif %}
@@ -106,9 +102,7 @@
### Input fields for `{{ item.name }}`
-| Name | Type | Description |
-| --- | --- | --- |
-{% for field in item.inputFields %}| `{{ field.name }}` | [`{{ field.type }}`]({{ field.href }}) | {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %}{% if field.isDeprecated %} **Deprecated:** {{ field.deprecationReason }}{% endif %} |
+{% for field in item.inputFields %}* `{{ field.name }}` ({{ field.type }}): {{ field.description }}{% if field.defaultValue %} Default: `{{ field.defaultValue }}`.{% endif %}{% if field.isDeprecated %} **Deprecated:** {{ field.deprecationReason }}{% endif %}
{% endfor %}
{% endif %}
diff --git a/src/article-api/templates/rest-page.template.md b/src/article-api/templates/rest-page.template.md
index 73e7e4311149..b1fb09d29ad0 100644
--- a/src/article-api/templates/rest-page.template.md
+++ b/src/article-api/templates/rest-page.template.md
@@ -4,6 +4,9 @@
{{ manualContent }}
+> [!NOTE]
+> Most endpoints use `Authorization: Bearer ` and `Accept: application/vnd.github+json` headers{% if apiVersion %}, plus `X-GitHub-Api-Version: {{ apiVersion }}`{% endif %}. Curl examples below omit these standard headers for brevity.
+
{% for operation in restOperations %}
## {{ operation.title }}
@@ -81,13 +84,8 @@
```curl
curl -L \
-X {{ operation.verb | upcase }} \
- {{ example.request.url }} \
-{%- if example.request.acceptHeader %}
- -H "Accept: {{ example.request.acceptHeader }}" \
-{%- endif %}
- -H "Authorization: Bearer "{% if apiVersion %} \
- -H "X-GitHub-Api-Version: {{ apiVersion }}"{% endif -%}
-{%- if example.request.bodyParameters %} \
+ {{ example.request.url }}{% if example.request.acceptHeader and example.request.acceptHeader != 'application/vnd.github+json' and example.request.acceptHeader != 'application/vnd.github.v3+json' %} \
+ -H "Accept: {{ example.request.acceptHeader }}"{% endif %}{% if example.request.bodyParameters %} \
-d '{{ example.request.bodyParameters }}'{% endif %}
```
diff --git a/src/article-api/tests/audit-logs-transformer.ts b/src/article-api/tests/audit-logs-transformer.ts
index 1bf493c5fc46..d7869a6538ac 100644
--- a/src/article-api/tests/audit-logs-transformer.ts
+++ b/src/article-api/tests/audit-logs-transformer.ts
@@ -76,8 +76,30 @@ describe('Audit Logs transformer', () => {
// #### `action.name`
expect(res.body).toMatch(/#### `[\w.]+`/)
- // Check for fields section
- expect(res.body).toContain('**Fields:**')
+ // Check for fields section - either common fields summary or additional fields per event
+ const body = res.body
+ const hasCommonFields = body.includes('### Common fields')
+ const hasAdditionalFields = body.includes('**Additional fields:**')
+ expect(hasCommonFields || hasAdditionalFields).toBe(true)
+
+ // Validate that a known common field is in the common section and not duplicated
+ if (hasCommonFields) {
+ const commonFieldsIndex = body.indexOf('### Common fields')
+ const commonFieldsSection = body.slice(
+ commonFieldsIndex,
+ body.indexOf('\n###', commonFieldsIndex + 1),
+ )
+ expect(commonFieldsSection).toContain('`action`')
+ }
+
+ // Ensure common fields do not appear in any "Additional fields" section
+ if (hasAdditionalFields) {
+ const additionalSections = body.split('**Additional fields:**').slice(1)
+ for (const section of additionalSections) {
+ const fieldsLine = section.split('\n')[0]
+ expect(fieldsLine).not.toContain('`action`')
+ }
+ }
// Check for reference section
expect(res.body).toContain('**Reference:**')
diff --git a/src/article-api/tests/graphql-transformer.ts b/src/article-api/tests/graphql-transformer.ts
index 8b2dda536253..d418bec102cd 100644
--- a/src/article-api/tests/graphql-transformer.ts
+++ b/src/article-api/tests/graphql-transformer.ts
@@ -55,22 +55,19 @@ describe('GraphQL transformer', { timeout: 10000 }, () => {
// Check for query description
expect(res.body).toContain('Lookup a given repository by the owner and repository name.')
- // Check for type link
- expect(res.body).toContain('**Type:** [Repository](/en/graphql/reference/objects#repository)')
+ // Check for type (without link)
+ expect(res.body).toContain('**Type:** Repository')
})
- test('query arguments are listed in table format', async () => {
+ test('query arguments are listed in bullet format', async () => {
const res = await getCached('/en/graphql/reference/queries')
expect(res.statusCode).toBe(200)
- // Check for arguments table for codeOfConduct query
+ // Check for arguments section for codeOfConduct query
expect(res.body).toContain('### Arguments for `codeOfConduct`')
- expect(res.body).toMatch(/\|\s*Name\s*\|\s*Type\s*\|\s*Description\s*\|/)
- expect(res.body).toMatch(/\|\s*-+\s*\|\s*-+\s*\|\s*-+\s*\|/)
- // Check for specific arguments
- expect(res.body).toMatch(/\|\s*`key`\s*\|/)
- expect(res.body).toContain('[`String!`](/en/graphql/reference/scalars#string)')
+ // Check for specific arguments in bullet format
+ expect(res.body).toContain('`key` (String!)')
expect(res.body).toContain("The code of conduct's key.")
})
@@ -84,13 +81,13 @@ describe('GraphQL transformer', { timeout: 10000 }, () => {
// Check for mutation description
expect(res.body).toContain('Create a new repository.')
- // Check for input fields table
+ // Check for input fields in bullet format
expect(res.body).toContain('### Input fields for `createRepository`')
- expect(res.body).toContain('| `input` |')
+ expect(res.body).toContain('`input`')
- // Check for return fields table
+ // Check for return fields in bullet format
expect(res.body).toContain('### Return fields for `createRepository`')
- expect(res.body).toMatch(/\|\s*`repository`\s*\|/)
+ expect(res.body).toContain('`repository`')
expect(res.body).toContain('The new repository.')
})
@@ -101,30 +98,42 @@ describe('GraphQL transformer', { timeout: 10000 }, () => {
// Check for object heading - AddedToMergeQueueEvent has implements
expect(res.body).toContain('## AddedToMergeQueueEvent')
- // Check for implements section
- expect(res.body).toContain('### Implements')
- expect(res.body).toMatch(/[*-]\s*\[`Node`\]\(\/.*graphql\/reference\/interfaces#node\)/)
+ // Check for implements inline
+ expect(res.body).toContain('**Implements:** Node')
- // Check for fields table
+ // Check for fields in bullet format
expect(res.body).toContain('### Fields for `AddedToMergeQueueEvent`')
- expect(res.body).toMatch(/\|\s*`id`\s*\|/)
- expect(res.body).toMatch(/\|\s*`actor`\s*\|/)
- expect(res.body).toMatch(/\|\s*`createdAt`\s*\|/)
+ expect(res.body).toContain('`id`')
+ expect(res.body).toContain('`actor`')
+ expect(res.body).toContain('`createdAt`')
})
- test('objects page shows field arguments inline', async () => {
+ test('objects page shows field arguments as nested bullets', async () => {
const res = await getCached('/en/graphql/reference/objects')
expect(res.statusCode).toBe(200)
// Check for User object with repositories field that has arguments
expect(res.body).toContain('## User')
- expect(res.body).toContain('| `repositories` |')
+ expect(res.body).toContain('`repositories`')
- // Check for inline arguments formatting
- expect(res.body).toContain('**Arguments:**')
- expect(res.body).toContain('- `first`')
+ // Check for nested argument bullets
+ expect(res.body).toContain('`first`')
expect(res.body).toContain('Returns the first n elements from the list.')
- expect(res.body).toContain('- `orderBy`')
+ expect(res.body).toContain('`orderBy`')
+ })
+
+ test('objects page collapses boilerplate Connection and Edge types', async () => {
+ const res = await getCached('/en/graphql/reference/objects')
+ expect(res.statusCode).toBe(200)
+
+ // Check for Connection/Edge summary section
+ expect(res.body).toContain('## Connection and Edge types')
+ expect(res.body).toContain('standard pagination fields')
+
+ // Boilerplate Connection/Edge types should be in the summary, not as H2 sections
+ // ActorConnection has only standard fields (edges, nodes, pageInfo, totalCount)
+ expect(res.body).toContain('`ActorConnection`')
+ expect(res.body).not.toMatch(/^## ActorConnection$/m)
})
test('interfaces page renders correctly', async () => {
@@ -137,9 +146,9 @@ describe('GraphQL transformer', { timeout: 10000 }, () => {
// Check for interface description
expect(res.body).toContain('An object with an ID.')
- // Check for fields table
+ // Check for fields in bullet format
expect(res.body).toContain('### Fields for `Node`')
- expect(res.body).toContain('| `id` |')
+ expect(res.body).toContain('`id`')
expect(res.body).toContain('ID of the object.')
})
@@ -153,13 +162,13 @@ describe('GraphQL transformer', { timeout: 10000 }, () => {
// Check for enum description
expect(res.body).toContain("The repository's visibility level.")
- // Check for values section
+ // Check for values in bullet format
expect(res.body).toContain('### Values for `RepositoryVisibility`')
- expect(res.body).toContain('**`PUBLIC`**')
+ expect(res.body).toContain('`PUBLIC`')
expect(res.body).toContain('The repository is visible to everyone.')
- expect(res.body).toContain('**`PRIVATE`**')
+ expect(res.body).toContain('`PRIVATE`')
expect(res.body).toContain('The repository is visible only to those with explicit access.')
- expect(res.body).toContain('**`INTERNAL`**')
+ expect(res.body).toContain('`INTERNAL`')
})
test('unions page renders with possible types', async () => {
@@ -172,13 +181,11 @@ describe('GraphQL transformer', { timeout: 10000 }, () => {
// Check for union description
expect(res.body).toContain('The results of a search.')
- // Check for possible types
+ // Check for possible types in bullet format (without links)
expect(res.body).toContain('### Possible types for `SearchResultItem`')
- expect(res.body).toMatch(/[*-]\s*\[`Bot`\]\(\/.*graphql\/reference\/objects#bot\)/)
- expect(res.body).toMatch(
- /[*-]\s*\[`PullRequest`\]\(\/.*graphql\/reference\/objects#pullrequest\)/,
- )
- expect(res.body).toMatch(/[*-]\s*\[`User`\]\(\/.*graphql\/reference\/objects#user\)/)
+ expect(res.body).toMatch(/\*\s*Bot/)
+ expect(res.body).toMatch(/\*\s*PullRequest/)
+ expect(res.body).toMatch(/\*\s*User/)
})
test('input-objects page renders correctly', async () => {
@@ -191,9 +198,9 @@ describe('GraphQL transformer', { timeout: 10000 }, () => {
// Check for input object description
expect(res.body).toContain('Autogenerated input type of CreateRepository.')
- // Check for input fields table
+ // Check for input fields in bullet format
expect(res.body).toContain('### Input fields for `AbortQueuedMigrationsInput`')
- expect(res.body).toMatch(/\|\s*`ownerId`\s*\|/)
+ expect(res.body).toContain('`ownerId`')
expect(res.body).toContain('The ID of the organization that is running the migrations.')
})
@@ -314,7 +321,6 @@ describe('GraphQL transformer', { timeout: 10000 }, () => {
// Check that AUTOTITLE has been resolved
expect(res.body).toMatch(/(Forming calls with GraphQL|Hello World)/)
- expect(res.body).toContain('(/en/get-started/start-your-journey/hello-world)')
// Make sure the raw AUTOTITLE tag is not present
expect(res.body).not.toContain('[AUTOTITLE]')
diff --git a/src/article-api/tests/rest-transformer.ts b/src/article-api/tests/rest-transformer.ts
index 928b26a3e26c..cee19cf3a62c 100644
--- a/src/article-api/tests/rest-transformer.ts
+++ b/src/article-api/tests/rest-transformer.ts
@@ -113,25 +113,33 @@ describe('REST transformer', () => {
expect(res.body).toContain('```curl')
expect(res.body).toContain('curl -L \\')
expect(res.body).toContain('-X GET \\')
- expect(res.body).toContain('https://api.github.com/repos/OWNER/REPO/actions/artifacts \\')
- expect(res.body).toContain('-H "Accept: application/vnd.github.v3+json" \\')
- expect(res.body).toContain('-H "Authorization: Bearer "')
+ expect(res.body).toContain('https://api.github.com/repos/OWNER/REPO/actions/artifacts')
})
- test('Code examples include X-GitHub-Api-Version header by default', async () => {
+ test('Authentication note is included at top of page', async () => {
const res = await get(makeURL('/en/rest/actions/artifacts'))
expect(res.statusCode).toBe(200)
- // Check for API version header in curl example
- expect(res.body).toContain('-H "X-GitHub-Api-Version: 2026-03-10"')
+ // Check that auth note is at the top using [!NOTE] syntax
+ expect(res.body).toContain('[!NOTE]')
+ expect(res.body).toContain('Authorization: Bearer ')
+ expect(res.body).toContain('application/vnd.github+json')
})
- test('Code examples include specified API version', async () => {
+ test('API version is mentioned in auth note', async () => {
+ const res = await get(makeURL('/en/rest/actions/artifacts'))
+ expect(res.statusCode).toBe(200)
+
+ // Check for API version in the auth note (any valid date format)
+ expect(res.body).toMatch(/X-GitHub-Api-Version: \d{4}-\d{2}-\d{2}/)
+ })
+
+ test('Code examples include specified API version in auth note', async () => {
const res = await get(makeURL('/en/rest/actions/artifacts', '2022-11-28'))
expect(res.statusCode).toBe(200)
- // Check for the specified API version header
- expect(res.body).toContain('-H "X-GitHub-Api-Version: 2022-11-28"')
+ // Check for the specified API version in auth note
+ expect(res.body).toContain('X-GitHub-Api-Version: 2022-11-28')
})
test('Liquid tags are rendered in intro', async () => {
@@ -224,7 +232,7 @@ describe('REST transformer', () => {
const res = await get(makeURL('/en/rest/actions/artifacts', '2022-11-28'))
expect(res.statusCode).toBe(200)
- expect(res.body).toContain('-H "X-GitHub-Api-Version: 2022-11-28"')
+ expect(res.body).toContain('X-GitHub-Api-Version: 2022-11-28')
})
test('Missing apiVersion defaults to latest', async () => {
@@ -232,8 +240,8 @@ describe('REST transformer', () => {
const res = await get(makeURL('/en/rest/actions/artifacts'))
expect(res.statusCode).toBe(200)
- // Should include the default API version header
- expect(res.body).toContain('-H "X-GitHub-Api-Version: 2026-03-10"')
+ // Should include the default API version in auth note (any valid date format)
+ expect(res.body).toMatch(/X-GitHub-Api-Version: \d{4}-\d{2}-\d{2}/)
})
test('Multiple operations on a page are all rendered', async () => {
diff --git a/src/article-api/tests/secret-scanning-transformer.ts b/src/article-api/tests/secret-scanning-transformer.ts
index 44b1440fb3be..be236faf377a 100644
--- a/src/article-api/tests/secret-scanning-transformer.ts
+++ b/src/article-api/tests/secret-scanning-transformer.ts
@@ -20,6 +20,12 @@ describe('secret scanning article body api', () => {
// Verify HTML comments are stripped
expect(res.body).not.toMatch(//)
+ // Verify HTML icon spans are not present (would be replaced with ✓/✗)
+ expect(res.body).not.toMatch(/]*aria-label="Supported"/)
+ expect(res.body).not.toMatch(/]*aria-label="Unsupported"/)
+ // Verify no raw HTML span tags remain
+ expect(res.body).not.toMatch(/]*>/)
+
// Verify table content is present with providers
expect(res.body).toMatch(/|\s*Provider\s*|/)
expect(res.body).toMatch(/\| (Adafruit|AWS|Alibaba|Amazon)/)
diff --git a/src/article-api/transformers/audit-logs-transformer.ts b/src/article-api/transformers/audit-logs-transformer.ts
index 1da904f694d8..4d04976aeb3d 100644
--- a/src/article-api/transformers/audit-logs-transformer.ts
+++ b/src/article-api/transformers/audit-logs-transformer.ts
@@ -99,7 +99,8 @@ export class AuditLogsTransformer implements PageTransformer {
// Prepare page intro
const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : ''
- // Sort categories and events
+ // Sort categories and events, and compute fields shared by most (≥80%) events
+ const allFieldSets: string[][] = []
const sortedCategorizedEvents: CategorizedEvents = {}
const sortedCategories = Object.keys(categorizedEvents).sort((a, b) => a.localeCompare(b))
@@ -117,11 +118,37 @@ export class AuditLogsTransformer implements PageTransformer {
context,
)
}
+ if (newEvent.fields) {
+ allFieldSets.push(newEvent.fields)
+ }
return newEvent
}),
)
}
+ // Compute base fields that appear in ≥80% of events
+ const fieldCounts = new Map()
+ for (const fields of allFieldSets) {
+ for (const f of fields) {
+ fieldCounts.set(f, (fieldCounts.get(f) || 0) + 1)
+ }
+ }
+ const threshold = allFieldSets.length * 0.8
+ const baseFields = [...fieldCounts.entries()]
+ .filter(([, count]) => count >= threshold)
+ .map(([field]) => field)
+ .sort()
+
+ // Remove base fields from each event's field list
+ const baseFieldSet = new Set(baseFields)
+ for (const category of Object.keys(sortedCategorizedEvents)) {
+ for (const event of sortedCategorizedEvents[category]) {
+ if (event.fields) {
+ event.fields = event.fields.filter((f: string) => !baseFieldSet.has(f))
+ }
+ }
+ }
+
return {
page: {
title: page.title,
@@ -130,6 +157,7 @@ export class AuditLogsTransformer implements PageTransformer {
manualContent,
categorizedEvents: sortedCategorizedEvents,
categoryNotes,
+ baseFields,
}
}
}
diff --git a/src/article-api/transformers/graphql-reference-transformer.ts b/src/article-api/transformers/graphql-reference-transformer.ts
index 418ad9ef5ff9..9f18ba4bc518 100644
--- a/src/article-api/transformers/graphql-reference-transformer.ts
+++ b/src/article-api/transformers/graphql-reference-transformer.ts
@@ -97,12 +97,47 @@ export class GraphQLReferenceTransformer implements PageTransformer {
break
}
+ // For objects pages, collapse Connection/Edge types that have only standard
+ // boilerplate fields into a summary. Types with additional fields are kept.
+ let connectionEdgeSummary: string[] | null = null
+ if (schemaKey === 'objects') {
+ const BOILERPLATE_CONNECTION_FIELDS = new Set(['edges', 'nodes', 'pageInfo', 'totalCount'])
+ const BOILERPLATE_EDGE_FIELDS = new Set(['cursor', 'node'])
+ const connEdgeNames: string[] = []
+ const filteredItems: Array> = []
+ for (const item of preparedItems) {
+ const name = item.name as string
+ const fields = item.fields as Array> | undefined
+ const fieldNames = new Set((fields || []).map((f) => f.name as string))
+
+ const isBoilerplateConnection =
+ name.endsWith('Connection') &&
+ fieldNames.size === BOILERPLATE_CONNECTION_FIELDS.size &&
+ [...fieldNames].every((f) => BOILERPLATE_CONNECTION_FIELDS.has(f))
+ const isBoilerplateEdge =
+ name.endsWith('Edge') &&
+ fieldNames.size === BOILERPLATE_EDGE_FIELDS.size &&
+ [...fieldNames].every((f) => BOILERPLATE_EDGE_FIELDS.has(f))
+
+ if (isBoilerplateConnection || isBoilerplateEdge) {
+ connEdgeNames.push(name)
+ } else {
+ filteredItems.push(item)
+ }
+ }
+ if (connEdgeNames.length > 0) {
+ connectionEdgeSummary = connEdgeNames.sort()
+ preparedItems = filteredItems
+ }
+ }
+
const templateData: Record = {
pageTitle: page.title,
pageIntro: intro,
manualContent,
items: preparedItems,
pageType: schemaKey,
+ connectionEdgeSummary,
}
const templateContent = loadTemplate(this.templateName)
diff --git a/src/article-api/transformers/rest-transformer.ts b/src/article-api/transformers/rest-transformer.ts
index ee279da11bb9..cd44543973a8 100644
--- a/src/article-api/transformers/rest-transformer.ts
+++ b/src/article-api/transformers/rest-transformer.ts
@@ -6,6 +6,7 @@ import { loadTemplate } from '@/article-api/lib/load-template'
import { summarizeSchema } from '@/article-api/lib/summarize-schema'
import matter from '@gr2m/gray-matter'
import { fastTextOnly } from '@/content-render/unified/text-only'
+import GithubSlugger from 'github-slugger'
const DEBUG = process.env.RUNNER_DEBUG === '1' || process.env.DEBUG === '1'
@@ -134,6 +135,30 @@ export class RestTransformer implements PageTransformer {
operations.map(async (operation) => await this.prepareOperation(operation)),
)
+ // Deduplicate identical response schemas across operations on the same page.
+ // When multiple endpoints share the same schema, render it once and reference it.
+ const slugger = new GithubSlugger()
+ const titleToSlug = new Map()
+ for (const op of preparedOperations) {
+ titleToSlug.set(op.title, slugger.slug(op.title))
+ }
+ const schemaMap = new Map()
+ for (const op of preparedOperations) {
+ if (!op.codeExamples) continue
+ for (const example of op.codeExamples as any[]) {
+ const schema = example.response?.schema
+ if (!schema || typeof schema !== 'string') continue
+
+ const existing = schemaMap.get(schema)
+ if (existing && existing !== op.title) {
+ const slug = titleToSlug.get(existing) || ''
+ example.response.schema = `Same response schema as [${existing}](#${slug}).`
+ } else if (!existing) {
+ schemaMap.set(schema, op.title)
+ }
+ }
+ }
+
return {
page: {
title: page.title,
diff --git a/src/article-api/transformers/secret-scanning-transformer.ts b/src/article-api/transformers/secret-scanning-transformer.ts
index 8bed61b8e2a5..5cf9be1430df 100644
--- a/src/article-api/transformers/secret-scanning-transformer.ts
+++ b/src/article-api/transformers/secret-scanning-transformer.ts
@@ -69,6 +69,19 @@ export class SecretScanningTransformer implements PageTransformer {
// Strip HTML comments from the rendered content
content = content.replace(//gs, '')
+ // Replace HTML icon spans with plain text equivalents
+ content = content.replace(/]*aria-label="Supported"[^>]*>[^<]*<\/span>/g, '✓')
+ content = content.replace(/]*aria-label="Unsupported"[^>]*>[^<]*<\/span>/g, '✗')
+ // Convert
tags to newlines and text to markdown links
+ content = content.replace(/
/gi, '\n')
+ content = content.replace(/]*>([^<]*)<\/a>/gi, '[$2]($1)')
+ // Strip any remaining HTML tags (loop to handle nested/malformed tags)
+ let previous = ''
+ while (content !== previous) {
+ previous = content
+ content = content.replace(/<[^>]+>/g, '')
+ }
+
// Normalize whitespace after stripping comments
content = content.replace(/\n{3,}/g, '\n\n').trim()
diff --git a/src/color-schemes/components/useTheme.ts b/src/color-schemes/components/useTheme.ts
index e240440b9b9a..b5e9fea3aa3e 100644
--- a/src/color-schemes/components/useTheme.ts
+++ b/src/color-schemes/components/useTheme.ts
@@ -1,5 +1,6 @@
import { useState, useEffect } from 'react'
import Cookies from '../../frame/components/lib/cookies'
+import { COLOR_MODE_COOKIE_NAME } from '@/frame/lib/constants'
enum CssColorMode {
auto = 'auto',
@@ -118,7 +119,7 @@ export function useTheme() {
// under the hood, which Primer is planning to do in the next couple quarters.
// Reference: https://github.com/primer/react/issues/2229
setTimeout(() => {
- const cookieValue = Cookies.get('color_mode')
+ const cookieValue = Cookies.get(COLOR_MODE_COOKIE_NAME)
const css = getCssTheme(cookieValue)
const component = getComponentTheme(cookieValue)
setTheme({ css, component })
diff --git a/src/content-pipelines/config.yml b/src/content-pipelines/config.yml
index f93ed5e59d89..60cabb4efc67 100644
--- a/src/content-pipelines/config.yml
+++ b/src/content-pipelines/config.yml
@@ -20,9 +20,9 @@ copilot-cli:
source-repo: github/copilot-agent-runtime
source-path: docs/cli
target-articles:
- - content/copilot/reference/cli-command-reference.md
- - content/copilot/reference/cli-plugin-reference.md
- - content/copilot/reference/acp-server.md
+ - content/copilot/reference/copilot-cli-reference/cli-command-reference.md
+ - content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md
+ - content/copilot/reference/copilot-cli-reference/acp-server.md
exclusions: []
content-mapping: |
cli-plugin-reference.md covers only plugin-specific content.
diff --git a/src/data-directory/lib/data-schemas/tables/copilot/model-supported-plans.ts b/src/data-directory/lib/data-schemas/tables/copilot/model-supported-plans.ts
index c9a737a06618..1302209fd94d 100644
--- a/src/data-directory/lib/data-schemas/tables/copilot/model-supported-plans.ts
+++ b/src/data-directory/lib/data-schemas/tables/copilot/model-supported-plans.ts
@@ -10,7 +10,7 @@ const modelSupportedPlansSchema = {
items: {
type: 'object',
additionalProperties: false,
- required: ['name', 'free', 'pro', 'pro_plus', 'business', 'enterprise'],
+ required: ['name', 'free', 'student', 'pro', 'pro_plus', 'business', 'enterprise'],
properties: {
name: {
type: 'string',
@@ -19,6 +19,9 @@ const modelSupportedPlansSchema = {
free: {
type: 'boolean',
},
+ student: {
+ type: 'boolean',
+ },
pro: {
type: 'boolean',
},
diff --git a/src/events/components/events.ts b/src/events/components/events.ts
index 988ed0d6fc4f..6a1260095ca4 100644
--- a/src/events/components/events.ts
+++ b/src/events/components/events.ts
@@ -1,5 +1,11 @@
import Cookies from '@/frame/components/lib/cookies'
-import { ANALYTICS_ENABLED } from '@/frame/lib/constants'
+import {
+ ANALYTICS_ENABLED,
+ ANNOTATE_MODE_COOKIE_NAME,
+ DOCS_EVENTS_COOKIE_NAME,
+ TOOL_PREFERRED_COOKIE_NAME,
+ OS_PREFERRED_COOKIE_NAME,
+} from '@/frame/lib/constants'
import { parseUserAgent } from './user-agent'
import { Router } from 'next/router'
import { isLoggedIn } from '@/frame/components/hooks/useHasAccount'
@@ -8,8 +14,6 @@ import { EventType, EventPropsByType } from '../types'
import { isHeadless } from './is-headless'
import { sendHydroAnalyticsEvent, getOctoClientId } from './hydro-analytics'
-const COOKIE_NAME = '_docs-events'
-
const startVisitTime = Date.now()
const BATCH_INTERVAL = 5000 // 5 seconds
@@ -66,10 +70,10 @@ export function uuidv4(): string {
export function getUserEventsId() {
if (cookieValue) return cookieValue
- cookieValue = Cookies.get(COOKIE_NAME)
+ cookieValue = Cookies.get(DOCS_EVENTS_COOKIE_NAME)
if (cookieValue) return cookieValue
cookieValue = uuidv4()
- Cookies.set(COOKIE_NAME, cookieValue)
+ Cookies.set(DOCS_EVENTS_COOKIE_NAME, cookieValue)
return cookieValue
}
@@ -136,10 +140,10 @@ export function sendEvent({
user_language: navigator.language,
// Preference information
- application_preference: Cookies.get('toolPreferred'),
+ application_preference: Cookies.get(TOOL_PREFERRED_COOKIE_NAME),
color_mode_preference: getColorModePreference(),
- os_preference: Cookies.get('osPreferred'),
- code_display_preference: Cookies.get('annotate-mode'),
+ os_preference: Cookies.get(OS_PREFERRED_COOKIE_NAME),
+ code_display_preference: Cookies.get(ANNOTATE_MODE_COOKIE_NAME),
experiment_variation:
getExperimentVariationForContext(
diff --git a/src/events/middleware.ts b/src/events/middleware.ts
index 5b777cdf3f40..6a7ae9ebe06a 100644
--- a/src/events/middleware.ts
+++ b/src/events/middleware.ts
@@ -13,6 +13,7 @@ import { noCacheControl } from '@/frame/middleware/cache-control'
import { getJsonValidator } from '@/tests/lib/validate-json-schema'
import { formatErrors } from './lib/middleware-errors'
import { publish as _publish } from './lib/hydro'
+import { DOTCOM_USER_COOKIE_NAME, STAFFONLY_COOKIE_NAME } from '@/frame/lib/constants'
import { analyzeComment, getGuessedLanguage } from './lib/analyze-comment'
import { EventType, EventProps, EventPropsByType } from './types'
@@ -77,8 +78,10 @@ router.post(
if (body.context) {
// Add dotcom_user to the context if it's available
// JSON.stringify removes `undefined` values but not `null`, and we don't want to send `null` to Hydro
- body.context.dotcom_user = req.cookies?.dotcom_user ? req.cookies.dotcom_user : undefined
- body.context.is_staff = Boolean(req.cookies?.staffonly)
+ body.context.dotcom_user = req.cookies?.[DOTCOM_USER_COOKIE_NAME]
+ ? req.cookies[DOTCOM_USER_COOKIE_NAME]
+ : undefined
+ body.context.is_staff = Boolean(req.cookies?.[STAFFONLY_COOKIE_NAME])
// Add IP address and user agent from request
// Moda forwards the client's IP using the `fastly-client-ip` header
body.context.ip = req.headers['fastly-client-ip'] as string | undefined
diff --git a/src/frame/components/ClientSideHashFocus.tsx b/src/frame/components/ClientSideHashFocus.tsx
new file mode 100644
index 000000000000..b832b6fd02fa
--- /dev/null
+++ b/src/frame/components/ClientSideHashFocus.tsx
@@ -0,0 +1,25 @@
+import { useEffect } from 'react'
+
+// When an in-page anchor link is clicked (e.g. href="#section-id"),
+// browsers scroll to the target but may not move keyboard focus to it.
+// This component listens for hash changes and programmatically focuses
+// the target element so screen reader and keyboard users land at the
+// correct position.
+export function ClientSideHashFocus() {
+ useEffect(() => {
+ const handleHashChange = () => {
+ const hash = window.location.hash.slice(1)
+ if (!hash) return
+
+ const target = document.getElementById(hash)
+ if (target) {
+ target.focus({ preventScroll: true })
+ }
+ }
+
+ window.addEventListener('hashchange', handleHashChange)
+ return () => window.removeEventListener('hashchange', handleHashChange)
+ }, [])
+
+ return null
+}
diff --git a/src/frame/components/hooks/useHasAccount.ts b/src/frame/components/hooks/useHasAccount.ts
index 339101823c5e..589eaf4997b1 100644
--- a/src/frame/components/hooks/useHasAccount.ts
+++ b/src/frame/components/hooks/useHasAccount.ts
@@ -1,5 +1,6 @@
import { useState, useEffect } from 'react'
import Cookies from '@/frame/components/lib/cookies'
+import { COLOR_MODE_COOKIE_NAME, PREFERRED_COLOR_MODE_COOKIE_NAME } from '@/frame/lib/constants'
// Measure if the user has a github.com account and signed in during this session.
// The github.com sends the color_mode cookie every request when you sign in,
@@ -21,7 +22,7 @@ export function useHasAccount() {
}
export function isLoggedIn() {
- const cookieValue = Cookies.get('color_mode')
- const altCookieValue = Cookies.get('preferred_color_mode')
+ const cookieValue = Cookies.get(COLOR_MODE_COOKIE_NAME)
+ const altCookieValue = Cookies.get(PREFERRED_COLOR_MODE_COOKIE_NAME)
return Boolean(cookieValue || altCookieValue)
}
diff --git a/src/frame/components/lib/toggle-annotations.ts b/src/frame/components/lib/toggle-annotations.ts
index e78ac3fed452..cdce002b7821 100644
--- a/src/frame/components/lib/toggle-annotations.ts
+++ b/src/frame/components/lib/toggle-annotations.ts
@@ -1,6 +1,7 @@
import Cookies from '@/frame/components/lib/cookies'
import { sendEvent } from '@/events/components/events'
import { EventType } from '@/events/types'
+import { ANNOTATE_MODE_COOKIE_NAME } from '@/frame/lib/constants'
enum annotationMode {
Beside = 'beside',
@@ -23,7 +24,7 @@ export default function toggleAnnotation() {
const annotationButtons = Array.from(document.querySelectorAll('.annotate-toggle button'))
if (!annotationButtons.length) return
- const cookie = validateMode(Cookies.get('annotate-mode')) // will default to beside
+ const cookie = validateMode(Cookies.get(ANNOTATE_MODE_COOKIE_NAME)) // will default to beside
displayAnnotationMode(annotationButtons, cookie)
// this loop adds event listeners for both the annotation buttons
@@ -33,7 +34,7 @@ export default function toggleAnnotation() {
// validate the annotation mode and set the cookie with the valid mode
const validMode = validateMode(annotationBtn.getAttribute('value')!)
- Cookies.set('annotate-mode', validMode!)
+ Cookies.set(ANNOTATE_MODE_COOKIE_NAME, validMode!)
sendEvent({
type: EventType.preference,
preference_name: 'code_display',
diff --git a/src/frame/lib/constants.ts b/src/frame/lib/constants.ts
index 7b0fae90fedf..9abea2cbf59c 100644
--- a/src/frame/lib/constants.ts
+++ b/src/frame/lib/constants.ts
@@ -1,24 +1,35 @@
-const isDev = process.env.NODE_ENV === 'development'
-
-// 10 seconds, by default in production and tests.
-// 15 seconds, by default in development.
-// Why more in development? Because Next.js compilation is JIT (Just-In-Time)
-// so that starting `npm start` and viewing your first page on localhost:4000
-// can, these days, take more than 10 seconds when the computer isn't
-// very fast. That first compilation can take long even of fast hardware
-// if the local contributor is running several other resource-intensive
-// applications at the same time.
-const DEFAULT_MAX_REQUEST_TIMEOUT = isDev ? 15_000 : 10_000
-
export const ROOT = process.env.ROOT || '.'
-export const USER_LANGUAGE_COOKIE_NAME = 'user_language'
-export const MACHINE_TRANSLATION_BANNER_COOKIE_NAME = 'machine_translation_banner_seen'
-export const USER_VERSION_COOKIE_NAME = 'user_version'
export const TRANSLATIONS_ROOT = process.env.TRANSLATIONS_ROOT || 'translations'
+export const TRANSLATIONS_FIXTURE_ROOT = process.env.TRANSLATIONS_FIXTURE_ROOT
+
+const isDev = process.env.NODE_ENV === 'development'
+// Higher in development to account for JIT compilation on first page load.
+const DEFAULT_MAX_REQUEST_TIMEOUT = isDev ? 15_000 : 10_000
export const MAX_REQUEST_TIMEOUT = process.env.REQUEST_TIMEOUT
? parseInt(process.env.REQUEST_TIMEOUT, 10)
: DEFAULT_MAX_REQUEST_TIMEOUT
-export const TRANSLATIONS_FIXTURE_ROOT = process.env.TRANSLATIONS_FIXTURE_ROOT
+
+// Docs cookies — we own these and use snake_case naming.
+export const USER_LANGUAGE_COOKIE_NAME = 'user_language' // Also referenced in Fastly VCL
+export const USER_VERSION_COOKIE_NAME = 'user_version' // Also referenced in Fastly VCL
+export const API_VERSION_COOKIE_NAME = 'api_version_preferred'
+export const ANNOTATE_MODE_COOKIE_NAME = 'annotate_mode'
+export const CODE_SAMPLE_LANGUAGE_COOKIE_NAME = 'code_sample_language_preferred'
+export const TOOL_PREFERRED_COOKIE_NAME = 'tool_preferred'
+export const OS_PREFERRED_COOKIE_NAME = 'os_preferred'
+export const DOCS_EVENTS_COOKIE_NAME = 'docs_events'
+export const MACHINE_TRANSLATION_BANNER_COOKIE_NAME = 'machine_translation_banner_seen'
+
+// Monolith cookies — set by github.com, read-only for us. Names are not
+// ours to change so they don't follow our snake_case convention.
+export const COLOR_MODE_COOKIE_NAME = 'color_mode'
+export const PREFERRED_COLOR_MODE_COOKIE_NAME = 'preferred_color_mode'
+export const DOTCOM_USER_COOKIE_NAME = 'dotcom_user'
+export const STAFFONLY_COOKIE_NAME = 'staffonly'
+
+// Feature flags
+export const ANALYTICS_ENABLED = true
+export const HOVERCARDS_ENABLED = true
// Minimum required HTML for 404: W3C valid, no external, legal.
export const minimumNotFoundHtml = `
@@ -36,6 +47,3 @@ export const minimumNotFoundHtml = `
• Privacy
`.replace(/\n/g, '')
-
-export const ANALYTICS_ENABLED = true
-export const HOVERCARDS_ENABLED = true
diff --git a/src/frame/middleware/api.ts b/src/frame/middleware/api.ts
index 1c460344f4f6..22c2986de9f5 100644
--- a/src/frame/middleware/api.ts
+++ b/src/frame/middleware/api.ts
@@ -11,6 +11,7 @@ import article from '@/article-api/middleware/article'
import webhooks from '@/webhooks/middleware/webhooks'
import { ExtendedRequest } from '@/types'
import { noCacheControl } from './cache-control'
+import { STAFFONLY_COOKIE_NAME } from '@/frame/lib/constants'
const router = express.Router()
@@ -55,7 +56,7 @@ if (process.env.ELASTICSEARCH_URL) {
router.get('/cookies', (req, res) => {
noCacheControl(res)
const cookies = {
- isStaff: Boolean(req.cookies?.staffonly?.startsWith('yes')) || false,
+ isStaff: Boolean(req.cookies?.[STAFFONLY_COOKIE_NAME]?.startsWith('yes')) || false,
}
res.json(cookies)
})
diff --git a/src/frame/pages/app.tsx b/src/frame/pages/app.tsx
index 2f4aa2e767f5..5286bdc70310 100644
--- a/src/frame/pages/app.tsx
+++ b/src/frame/pages/app.tsx
@@ -18,6 +18,7 @@ import {
import { useTheme } from '@/color-schemes/components/useTheme'
import { SharedUIContextProvider } from '@/frame/components/context/SharedUIContext'
import { CTAPopoverProvider } from '@/frame/components/context/CTAContext'
+import { ClientSideHashFocus } from '@/frame/components/ClientSideHashFocus'
import type { ExtendedRequest } from '@/types'
type MyAppProps = AppProps & {
@@ -146,6 +147,7 @@ const MyApp = ({ Component, pageProps, languagesContext, stagingName }: MyAppPro
+
diff --git a/src/links/lib/excluded-links.yml b/src/links/lib/excluded-links.yml
index f606031cd003..e51881630d9a 100644
--- a/src/links/lib/excluded-links.yml
+++ b/src/links/lib/excluded-links.yml
@@ -113,6 +113,29 @@
- is: https://mywiki.wooledge.org/BashPitfalls
- startsWith: https://code.visualstudio.com/docs/configure/telemetry
+# AppSource blocks automated link checkers with 403.
+- startsWith: https://appsource.microsoft.com
+
+# gist.github.com search can return transient 500 errors.
+- startsWith: https://gist.github.com/search
+
+# enterprise.github.com returns transient errors. Many paths are used
+# across docs (/contact, /download, /releases, /login, /license, /support, /trial).
+- startsWith: https://enterprise.github.com/releases
+- startsWith: https://enterprise.github.com/contact
+- startsWith: https://enterprise.github.com/download
+- startsWith: https://enterprise.github.com/login
+- startsWith: https://enterprise.github.com/license
+- startsWith: https://enterprise.github.com/support
+- startsWith: https://enterprise.github.com/trial
+
+# developer.github.com can return transient 503 errors.
+- startsWith: https://developer.github.com/changes/
+- startsWith: https://developer.github.com/enterprise/
+
+# ed25519.cr.yp.to has intermittent connectivity issues.
+- is: https://ed25519.cr.yp.to
+
# npmjs.com blocks automated link checkers with 403.
- startsWith: https://www.npmjs.com
diff --git a/src/links/scripts/check-links-internal.ts b/src/links/scripts/check-links-internal.ts
index a7a1b9c0da28..54e3aa8f5882 100644
--- a/src/links/scripts/check-links-internal.ts
+++ b/src/links/scripts/check-links-internal.ts
@@ -101,6 +101,14 @@ async function checkAnchorsOnPage(
): Promise {
const brokenAnchors: BrokenLink[] = []
+ // Skip anchor checking on auto-generated pages (e.g., REST, GraphQL, webhooks).
+ // These pages have headings generated from OpenAPI/schema data at render time
+ // by transformers that aren't run during link checking, so same-page anchor
+ // links to those headings would always appear broken.
+ if (page.autogenerated) {
+ return brokenAnchors
+ }
+
try {
const html = await renderContent(page.markdown, context)
const $ = load(html)
diff --git a/src/rest/components/ApiVersionPicker.tsx b/src/rest/components/ApiVersionPicker.tsx
index 030cecadd76a..173cefb55a43 100644
--- a/src/rest/components/ApiVersionPicker.tsx
+++ b/src/rest/components/ApiVersionPicker.tsx
@@ -6,7 +6,7 @@ import { useMainContext } from '@/frame/components/context/MainContext'
import { DEFAULT_VERSION, useVersion } from '@/versions/components/useVersion'
import { Picker } from '@/tools/components/Picker'
import { useTranslation } from '@/languages/components/useTranslation'
-import { API_VERSION_COOKIE_NAME } from '@/rest/components/RestRedirect'
+import { API_VERSION_COOKIE_NAME } from '@/frame/lib/constants'
import { apiVersionPath } from '@/rest/lib/config'
const API_VERSION_SUFFIX = ' (latest)'
diff --git a/src/rest/components/RestCodeSamples.tsx b/src/rest/components/RestCodeSamples.tsx
index f3568e6f1003..f0e3e8203dd3 100644
--- a/src/rest/components/RestCodeSamples.tsx
+++ b/src/rest/components/RestCodeSamples.tsx
@@ -13,6 +13,7 @@ import hljsCurl from 'highlightjs-curl'
import { useTranslation } from '@/languages/components/useTranslation'
import useClipboard from '@/rest/components/useClipboard'
+import { CODE_SAMPLE_LANGUAGE_COOKIE_NAME } from '@/frame/lib/constants'
import {
getShellExample,
getGHExample,
@@ -114,14 +115,14 @@ export function RestCodeSamples({ operation, slug, heading }: Props) {
const handleLanguageSelection = (languageKey: CodeSampleKeys) => {
setSelectedLanguage(languageKey)
- Cookies.set('codeSampleLanguagePreferred', languageKey)
+ Cookies.set(CODE_SAMPLE_LANGUAGE_COOKIE_NAME, languageKey)
}
// Change the language based on cookies
useEffect(() => {
// If the user previously selected a language preference and the language
// is available in this component set it as the selected language
- const cookieValue = Cookies.get('codeSampleLanguagePreferred')
+ const cookieValue = Cookies.get(CODE_SAMPLE_LANGUAGE_COOKIE_NAME)
const preferredCodeLanguage = languageSelectOptions.find((item) => item === cookieValue)
if (cookieValue && preferredCodeLanguage) {
setSelectedLanguage(cookieValue as CodeSampleKeys)
diff --git a/src/rest/components/RestRedirect.tsx b/src/rest/components/RestRedirect.tsx
index cb6829bd5507..1cb50cbf5d03 100644
--- a/src/rest/components/RestRedirect.tsx
+++ b/src/rest/components/RestRedirect.tsx
@@ -4,8 +4,7 @@ import Cookies from '@/frame/components/lib/cookies'
import { useVersion } from '@/versions/components/useVersion'
import { useMainContext } from '@/frame/components/context/MainContext'
-
-export const API_VERSION_COOKIE_NAME = 'apiVersionPreferred'
+import { API_VERSION_COOKIE_NAME } from '@/frame/lib/constants'
// This component allows us to set the URL Param for the REST API Calendar Date version
// We set a cookie as well to remember what calendar date version the user is on
diff --git a/src/tools/components/PlatformPicker.tsx b/src/tools/components/PlatformPicker.tsx
index 4db0120bf0a7..016b96d4d638 100644
--- a/src/tools/components/PlatformPicker.tsx
+++ b/src/tools/components/PlatformPicker.tsx
@@ -3,6 +3,7 @@ import { useEffect, useState } from 'react'
import { useArticleContext } from '@/frame/components/context/ArticleContext'
import { parseUserAgent } from '@/events/components/user-agent'
import { InArticlePicker } from './InArticlePicker'
+import { OS_PREFERRED_COOKIE_NAME } from '@/frame/lib/constants'
const platformQueryKey = 'platform'
const platforms = [
@@ -72,7 +73,7 @@ export const PlatformPicker = () => {
? defaultUA
: detectedPlatforms[detectedPlatforms.length - 1]
}
- cookieKey="osPreferred"
+ cookieKey={OS_PREFERRED_COOKIE_NAME}
queryStringKey={platformQueryKey}
onValue={showPlatformSpecificContent}
preferenceName="os"
diff --git a/src/tools/components/ToolPicker.tsx b/src/tools/components/ToolPicker.tsx
index ecc8818eeeec..083e08b0c87a 100644
--- a/src/tools/components/ToolPicker.tsx
+++ b/src/tools/components/ToolPicker.tsx
@@ -2,6 +2,7 @@ import { preserveAnchorNodePosition } from 'scroll-anchoring'
import { useArticleContext } from '@/frame/components/context/ArticleContext'
import { InArticlePicker } from './InArticlePicker'
+import { TOOL_PREFERRED_COOKIE_NAME } from '@/frame/lib/constants'
// example: http://localhost:4000/en/codespaces/developing-in-codespaces/creating-a-codespace
@@ -68,7 +69,7 @@ export const ToolPicker = () => {
return (
{
preserveAnchorNodePosition(document, () => {