From acb8a10541e5b3a721453f6c3a46949ecc1a81de Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Wed, 4 Mar 2026 09:31:28 +0000
Subject: [PATCH 01/29] update supported plans reference and add variable
---
.../copilot/available-models-per-plan.md | 6 ++---
data/tables/copilot/model-supported-plans.yml | 24 +++++++++++++++++++
data/variables/copilot.yml | 1 +
.../tables/copilot/model-supported-plans.ts | 5 +++-
4 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/data/reusables/copilot/available-models-per-plan.md b/data/reusables/copilot/available-models-per-plan.md
index fc035f94faa0..5fc46a1ae434 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 %} | {% 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/tables/copilot/model-supported-plans.yml b/data/tables/copilot/model-supported-plans.yml
index bdf42e864afe..3d0ccbe3338e 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: true
pro: true
pro_plus: true
business: true
@@ -28,6 +31,7 @@
- name: Claude Opus 4.6
free: false
+ student: true
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: true
pro: true
pro_plus: true
business: true
@@ -49,6 +55,7 @@
- name: Claude Sonnet 4.5
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -56,6 +63,7 @@
- name: Claude Sonnet 4.6
free: false
+ student: true
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: Grok Code Fast 1
free: false
+ student: true
pro: true
pro_plus: true
business: true
@@ -161,6 +183,7 @@
- name: Raptor mini
free: true
+ student: true
pro: true
pro_plus: true
business: false
@@ -168,6 +191,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 52f35216bcf6..7b94cbe17174 100644
--- a/data/variables/copilot.yml
+++ b/data/variables/copilot.yml
@@ -14,6 +14,7 @@ copilot_enterprise: 'GitHub Copilot Enterprise'
copilot_enterprise_short: 'Copilot Enterprise'
copilot_free: 'GitHub Copilot Free'
copilot_free_short: 'Copilot Free'
+copilot_student: 'Copilot Student'
## Copilot billing
# Price per additional premium request
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',
},
From 9dd0d863822ba532b12d298ba3200a54002dfc60 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Wed, 4 Mar 2026 09:53:52 +0000
Subject: [PATCH 02/29] update variable, update individual plans
---
.../concepts/billing/individual-plans.md | 30 ++++++++++++-------
.../copilot/available-models-per-plan.md | 2 +-
data/variables/copilot.yml | 3 +-
3 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/content/copilot/concepts/billing/individual-plans.md b/content/copilot/concepts/billing/individual-plans.md
index 96c19ab6f5d3..c65abb2799cb 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 | {% 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/data/reusables/copilot/available-models-per-plan.md b/data/reusables/copilot/available-models-per-plan.md
index 5fc46a1ae434..471b00a342c5 100644
--- a/data/reusables/copilot/available-models-per-plan.md
+++ b/data/reusables/copilot/available-models-per-plan.md
@@ -1,6 +1,6 @@
{% rowheaders %}
-| Available models in chat | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_student %} | {% 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.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 %} |
diff --git a/data/variables/copilot.yml b/data/variables/copilot.yml
index 7b94cbe17174..65e89cc6669d 100644
--- a/data/variables/copilot.yml
+++ b/data/variables/copilot.yml
@@ -14,7 +14,8 @@ copilot_enterprise: 'GitHub Copilot Enterprise'
copilot_enterprise_short: 'Copilot Enterprise'
copilot_free: 'GitHub Copilot Free'
copilot_free_short: 'Copilot Free'
-copilot_student: 'Copilot Student'
+copilot_student: 'GitHub Copilot Student'
+copilot_student_short: 'Copilot Student'
## Copilot billing
# Price per additional premium request
From b11a9f871de4078f6363ee5fbfd7b566bd307132 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Wed, 4 Mar 2026 10:27:16 +0000
Subject: [PATCH 03/29] add new article for Copilot Free
---
.../free-access-with-copilot-student.md | 24 +++++++++++++++++++
.../get-free-access-to-copilot-pro.md | 7 +++---
.../get-started-with-a-copilot-plan.md | 3 ++-
.../how-tos/manage-your-account/index.md | 1 +
4 files changed, 30 insertions(+), 5 deletions(-)
create mode 100644 content/copilot/how-tos/manage-your-account/free-access-with-copilot-student.md
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..f46c20c0b534
--- /dev/null
+++ b/content/copilot/how-tos/manage-your-account/free-access-with-copilot-student.md
@@ -0,0 +1,24 @@
+---
+title: 'Access GitHub Copilot for free as a student'
+shortTitle: Get free access with Copilot Student
+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 %} 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 %}
+
+{% data reusables.copilot.your-copilot %}
+1. If you qualify for {% data variables.copilot.copilot_student_short %}, you will see a page titled "{% data variables.copilot.copilot_student_short %}" informing you that you are eligible. Click **Get access to {% data variables.product.prodname_copilot %}**.
+1. On the page that appears, configure the {% data variables.product.prodname_copilot_short %} use policies to meet your needs, then click **Save and complete**.
\ 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..55ca026de433 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 free access to {% 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
From c4584dc139772b9226cd674415865208a6dec8f6 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Wed, 4 Mar 2026 11:16:35 +0000
Subject: [PATCH 04/29] more updates
---
.../concepts/product-billing/github-copilot-licenses.md | 5 +++--
content/copilot/concepts/billing/copilot-requests.md | 4 ++--
content/copilot/how-tos/set-up/set-up-for-self.md | 4 +++-
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/content/billing/concepts/product-billing/github-copilot-licenses.md b/content/billing/concepts/product-billing/github-copilot-licenses.md
index 401115bd1b36..8a011297e471 100644
--- a/content/billing/concepts/product-billing/github-copilot-licenses.md
+++ b/content/billing/concepts/product-billing/github-copilot-licenses.md
@@ -24,7 +24,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. |
@@ -51,7 +51,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/copilot/concepts/billing/copilot-requests.md b/content/copilot/concepts/billing/copilot-requests.md
index ef1b0084abfd..20545df515a0 100644
--- a/content/copilot/concepts/billing/copilot-requests.md
+++ b/content/copilot/concepts/billing/copilot-requests.md
@@ -54,9 +54,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/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
From 4d5a28b60094f3d6addcf4a76d820ac2a00e1d26 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Wed, 4 Mar 2026 11:34:40 +0000
Subject: [PATCH 05/29] final minor updates
---
content/copilot/get-started/what-is-github-copilot.md | 2 +-
.../manage-your-account/free-access-with-copilot-student.md | 2 +-
.../manage-your-account/view-and-change-your-copilot-plan.md | 2 +-
.../about-github-education-for-students.md | 2 +-
.../getting-feedback-on-your-code-from-github-copilot.md | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
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/manage-your-account/free-access-with-copilot-student.md b/content/copilot/how-tos/manage-your-account/free-access-with-copilot-student.md
index f46c20c0b534..f7d74de79f5f 100644
--- 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
@@ -9,7 +9,7 @@ category:
- Configure Copilot
---
-## About {% data variables.copilot.copilot_student %} access
+## 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).
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/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 b9e38c1fdf8b..ace18147bc9a 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
@@ -15,7 +15,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
From 144f7c0ffd8f9a21e81296b34db05910fbc3ee96 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Wed, 4 Mar 2026 11:48:41 +0000
Subject: [PATCH 06/29] final tweaks
---
.../manage-your-account/get-started-with-a-copilot-plan.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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 55ca026de433..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,7 @@ 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_student_short %}.
+* 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.
From 740eab5aff77dfef2f3cec89f7cae71c09991c95 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Wed, 4 Mar 2026 11:51:19 +0000
Subject: [PATCH 07/29] Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---
content/copilot/concepts/billing/individual-plans.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/copilot/concepts/billing/individual-plans.md b/content/copilot/concepts/billing/individual-plans.md
index c65abb2799cb..0241aea8e69f 100644
--- a/content/copilot/concepts/billing/individual-plans.md
+++ b/content/copilot/concepts/billing/individual-plans.md
@@ -38,7 +38,7 @@ Verified students can access unlimited completions and additional models at no c
* 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.
+* Free for verified students
## {% data variables.copilot.copilot_pro %}
From 8c5a32d8cb2bb642632c2f5617f8223598d48fdf Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Wed, 4 Mar 2026 12:00:43 +0000
Subject: [PATCH 08/29] fix failing test
---
.../manage-your-account/free-access-with-copilot-student.md | 1 +
1 file changed, 1 insertion(+)
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
index f7d74de79f5f..6d0be9e4e99c 100644
--- 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
@@ -1,6 +1,7 @@
---
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
From a0d6f4ae8495c2db71ee42a41baf47b1e5734877 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Mon, 9 Mar 2026 09:58:55 +0000
Subject: [PATCH 09/29] apply review feedback - update plans
---
content/copilot/get-started/plans.md | 6 +-
.../copilot/differences-cfi-cfb-table.md | 84 +++++++++----------
2 files changed, 47 insertions(+), 43 deletions(-)
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/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 %}
From 474bb5c07f878d2cf89109592256513060e34ff8 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Mon, 9 Mar 2026 10:01:22 +0000
Subject: [PATCH 10/29] apply review feedback
---
content/copilot/concepts/billing/individual-plans.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/content/copilot/concepts/billing/individual-plans.md b/content/copilot/concepts/billing/individual-plans.md
index 0241aea8e69f..c1d8de74a968 100644
--- a/content/copilot/concepts/billing/individual-plans.md
+++ b/content/copilot/concepts/billing/individual-plans.md
@@ -69,7 +69,7 @@ The following table highlights the key differences between individual {% data va
| 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 | {% 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 |
+| 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" %} |
From 5bb22187c6a45d7f4a872db3e01112b9345b7650 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Mon, 9 Mar 2026 15:31:18 +0000
Subject: [PATCH 11/29] apply review feedback
---
.../logs-not-detailed-enough.md | 6 +++---
.../free-access-with-copilot-student.md | 8 +++++---
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/content/code-security/reference/code-scanning/troubleshoot-analysis-errors/logs-not-detailed-enough.md b/content/code-security/reference/code-scanning/troubleshoot-analysis-errors/logs-not-detailed-enough.md
index 0b91021f933b..b0389c17a428 100644
--- a/content/code-security/reference/code-scanning/troubleshoot-analysis-errors/logs-not-detailed-enough.md
+++ b/content/code-security/reference/code-scanning/troubleshoot-analysis-errors/logs-not-detailed-enough.md
@@ -1,7 +1,7 @@
---
title: Logs are not detailed enough
shortTitle: Logs not detailed enough
-intro: Increase log verbosity and generate debugging artifacts when logs lack diagnostic detail.
+intro: Increase log verbosity and generate debugging artifacts when logs lack diagnostic detail.
allowTitleToDifferFromFilename: true
versions:
fpt: '*'
@@ -41,7 +41,7 @@ These artifacts will help you debug problems with {% data variables.product.prod
### Creating {% data variables.product.prodname_codeql %} debugging artifacts for {% data variables.product.prodname_codeql %} default setup
-You can create {% data variables.product.prodname_codeql %} debugging artifacts by enabling step debug logging (see [Enabling step debug logging](#enabling-step-debug-logging)) and triggering a new {% data variables.product.prodname_codeql %} analysis, for example, by pushing a new commit to a pull request branch.
+You can create {% data variables.product.prodname_codeql %} debugging artifacts by enabling step debug logging (see [Enabling step debug logging](#enabling-step-debug-logging)) and triggering a new {% data variables.product.prodname_codeql %} analysis, for example, by pushing a new commit to a pull request branch.
{% ifversion org-private-registry %}
@@ -72,4 +72,4 @@ You can create {% data variables.product.prodname_codeql %} debugging artifacts
#### Using {% data variables.product.prodname_actions %} step debug logging
-If you enable {% data variables.product.prodname_actions %} step debug logging, {% data variables.product.prodname_codeql %} will also produce debugging artifacts and upload them as part of the workflow run. For instructions, see [Enabling step debug logging](#enabling-step-debug-logging).
+If you enable {% data variables.product.prodname_actions %} step debug logging, {% data variables.product.prodname_codeql %} will also produce debugging artifacts and upload them as part of the workflow run. For instructions, see [Enabling step debug logging](#enabling-step-debug-logging).
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
index 6d0be9e4e99c..a1abec192a63 100644
--- 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
@@ -20,6 +20,8 @@ To learn about becoming a verified student, see [AUTOTITLE](/free-pro-team@lates
## Accessing {% data variables.copilot.copilot_student_short %}
-{% data reusables.copilot.your-copilot %}
-1. If you qualify for {% data variables.copilot.copilot_student_short %}, you will see a page titled "{% data variables.copilot.copilot_student_short %}" informing you that you are eligible. Click **Get access to {% data variables.product.prodname_copilot %}**.
-1. On the page that appears, configure the {% data variables.product.prodname_copilot_short %} use policies to meet your needs, then click **Save and complete**.
\ No newline at end of file
+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
From 270720e1645a954f68d32a692a6b7f693fb8d75f Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Tue, 10 Mar 2026 09:56:28 +0000
Subject: [PATCH 12/29] update supported models
---
data/tables/copilot/model-supported-plans.yml | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/data/tables/copilot/model-supported-plans.yml b/data/tables/copilot/model-supported-plans.yml
index c535916e0929..61169abc88a5 100644
--- a/data/tables/copilot/model-supported-plans.yml
+++ b/data/tables/copilot/model-supported-plans.yml
@@ -23,7 +23,7 @@
- name: Claude Opus 4.5
free: false
- student: true
+ student: false
pro: true
pro_plus: true
business: true
@@ -31,7 +31,7 @@
- name: Claude Opus 4.6
free: false
- student: true
+ student: false
pro: true
pro_plus: true
business: true
@@ -47,7 +47,7 @@
- name: Claude Sonnet 4
free: false
- student: true
+ student: false
pro: true
pro_plus: true
business: true
@@ -55,7 +55,7 @@
- name: Claude Sonnet 4.5
free: false
- student: true
+ student: false
pro: true
pro_plus: true
business: true
@@ -63,7 +63,7 @@
- name: Claude Sonnet 4.6
free: false
- student: true
+ student: false
pro: true
pro_plus: true
business: true
@@ -183,6 +183,7 @@
- name: Grok Code Fast 1
free: true
+ student: true
pro: true
pro_plus: true
business: true
From 958fd66c6def3dfb12f54d05735041433b4d2268 Mon Sep 17 00:00:00 2001
From: Anne-Marie <102995847+am-stead@users.noreply.github.com>
Date: Thu, 12 Mar 2026 09:15:55 +0000
Subject: [PATCH 13/29] update supported models
---
data/tables/copilot/model-supported-plans.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/tables/copilot/model-supported-plans.yml b/data/tables/copilot/model-supported-plans.yml
index 61169abc88a5..0837d435b1cb 100644
--- a/data/tables/copilot/model-supported-plans.yml
+++ b/data/tables/copilot/model-supported-plans.yml
@@ -175,7 +175,7 @@
- name: GPT-5.4
free: false
- student: true
+ student: false
pro: true
pro_plus: true
business: true
From 17719a3204a37ff9804ab351ab77c960dcdb75e0 Mon Sep 17 00:00:00 2001
From: hubwriter
Date: Thu, 12 Mar 2026 14:39:02 +0000
Subject: [PATCH 14/29] Copilot CLI: Add new map topic & articles about
automation (#60002)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Sarah Schneider
Co-authored-by: Siara <108543037+SiaraMist@users.noreply.github.com>
---
.../agents/copilot-cli/about-copilot-cli.md | 4 +-
.../concepts/agents/copilot-cli/autopilot.md | 2 +-
.../concepts/agents/copilot-cli/research.md | 2 +-
.../automate-with-actions.md | 168 ++++++++++++++++++
.../copilot-cli/automate-copilot-cli/index.md | 12 ++
.../automate-copilot-cli/quickstart.md | 87 +++++++++
.../run-cli-programmatically.md | 168 ++++++++++++++++++
.../copilot-cli/automate-with-actions.md | 148 ---------------
.../how-tos/copilot-cli/cli-best-practices.md | 2 +-
.../create-custom-agents-for-cli.md | 2 +-
.../copilot-cli/customize-copilot/index.md | 2 +-
...ckstart-for-customizing.md => overview.md} | 2 +
content/copilot/how-tos/copilot-cli/index.md | 17 +-
.../speeding-up-task-completion.md | 2 +-
.../use-copilot-cli-agents/overview.md | 4 +-
.../{ => copilot-cli-reference}/acp-server.md | 2 +
.../cli-command-reference.md | 47 +++--
.../cli-plugin-reference.md | 8 +
.../cli-programmatic-reference.md | 158 ++++++++++++++++
.../reference/copilot-cli-reference/index.md | 12 ++
.../reference/custom-agents-configuration.md | 3 +-
.../copilot/reference/hooks-configuration.md | 6 +
content/copilot/reference/index.md | 6 +-
src/content-pipelines/config.yml | 6 +-
24 files changed, 677 insertions(+), 193 deletions(-)
create mode 100644 content/copilot/how-tos/copilot-cli/automate-copilot-cli/automate-with-actions.md
create mode 100644 content/copilot/how-tos/copilot-cli/automate-copilot-cli/index.md
create mode 100644 content/copilot/how-tos/copilot-cli/automate-copilot-cli/quickstart.md
create mode 100644 content/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically.md
delete mode 100644 content/copilot/how-tos/copilot-cli/automate-with-actions.md
rename content/copilot/how-tos/copilot-cli/customize-copilot/{quickstart-for-customizing.md => overview.md} (97%)
rename content/copilot/reference/{ => copilot-cli-reference}/acp-server.md (98%)
rename content/copilot/reference/{ => copilot-cli-reference}/cli-command-reference.md (95%)
rename content/copilot/reference/{ => copilot-cli-reference}/cli-plugin-reference.md (97%)
create mode 100644 content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md
create mode 100644 content/copilot/reference/copilot-cli-reference/index.md
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/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/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..f2f8f0df2f7e 100644
--- a/content/copilot/reference/custom-agents-configuration.md
+++ b/content/copilot/reference/custom-agents-configuration.md
@@ -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/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.
From acceeee0e08d6d749107b80138f19624707d0dff Mon Sep 17 00:00:00 2001
From: Kevin Heis
Date: Thu, 12 Mar 2026 08:15:53 -0700
Subject: [PATCH 15/29] Article API: deduplicate REST response schemas and
simplify curl (#60073)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.../templates/rest-page.template.md | 12 +++----
src/article-api/tests/rest-transformer.ts | 32 ++++++++++++-------
.../transformers/rest-transformer.ts | 25 +++++++++++++++
3 files changed, 50 insertions(+), 19 deletions(-)
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/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/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,
From 267b25bb5a9263b61719c9963e51c11d96da67bb Mon Sep 17 00:00:00 2001
From: Copilot <198982749+Copilot@users.noreply.github.com>
Date: Thu, 12 Mar 2026 15:19:19 +0000
Subject: [PATCH 16/29] docs(actions): Add OIDC repository custom properties
claims (Public Preview) (#60122)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Steve-Glass <84886334+Steve-Glass@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: hubwriter
---
.../help/actions/actions-oidc-settings.png | Bin 0 -> 383547 bytes
.../concepts/security/openid-connect.md | 47 +++++++++++-
content/actions/reference/security/oidc.md | 72 ++++++++++++++++++
data/features/oidc-custom-properties.yml | 3 +
4 files changed, 121 insertions(+), 1 deletion(-)
create mode 100644 assets/images/help/actions/actions-oidc-settings.png
create mode 100644 data/features/oidc-custom-properties.yml
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 0000000000000000000000000000000000000000..5bfd4d4a94a1a949563377da6f0996f8d8d4e679
GIT binary patch
literal 383547
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 |