├── LICENSE.md
├── .github
├── workflows
│ ├── on-issue-close.yml
│ ├── remove-triage-label.yml
│ ├── stale-issues.yml
│ ├── triage-issues.yml
│ ├── close-invalid.yml
│ ├── feature-request-comment.yml
│ ├── no-response.yml
│ ├── close-single-word-issues.yml
│ ├── unable-to-reproduce-comment.yml
│ └── winget.yml
└── ISSUE_TEMPLATE
│ ├── feature_request.yml
│ └── bug_report.yml
├── install.sh
├── README.md
└── changelog.md
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) GitHub 2025. All rights reserved. Use is subject to GitHub's [Pre-release License Terms](https://docs.github.com/en/site-policy/github-terms/github-pre-release-license-terms)
2 |
--------------------------------------------------------------------------------
/.github/workflows/on-issue-close.yml:
--------------------------------------------------------------------------------
1 | name: Remove triage tab from closed issues
2 | on:
3 | issues:
4 | types:
5 | - closed
6 | jobs:
7 | label_issues:
8 | runs-on: ubuntu-latest
9 | permissions:
10 | issues: write
11 | steps:
12 | - run: gh issue edit "$NUMBER" --remove-label "$LABELS"
13 | env:
14 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
15 | GH_REPO: ${{ github.repository }}
16 | NUMBER: ${{ github.event.issue.number }}
17 | LABELS: triage
18 |
--------------------------------------------------------------------------------
/.github/workflows/remove-triage-label.yml:
--------------------------------------------------------------------------------
1 | name: Remove triage label
2 | on:
3 | issues:
4 | types:
5 | - labeled
6 |
7 | permissions:
8 | issues: write
9 |
10 | jobs:
11 | remove-triage-label-from-issues:
12 | if:
13 | github.event.label.name != 'triage' && github.event.label.name !=
14 | 'more-info-needed'
15 | runs-on: ubuntu-latest
16 | steps:
17 | - run: gh issue edit "$NUMBER" --remove-label "$LABELS"
18 | env:
19 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
20 | GH_REPO: ${{ github.repository }}
21 | NUMBER: ${{ github.event.issue.number }}
22 | LABELS: triage
23 |
--------------------------------------------------------------------------------
/.github/workflows/stale-issues.yml:
--------------------------------------------------------------------------------
1 | name: 'Marks stale issues and PRs'
2 | on:
3 | schedule:
4 | - cron: '30 1 * * *' # 1:30 AM UTC
5 |
6 | permissions:
7 | issues: write
8 |
9 | jobs:
10 | stale:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/stale@v9
14 | with:
15 | stale-issue-label: 'stale, triage' # The label that will be added to the issues when automatically marked as stale
16 | start-date: '2025-01-01T00:00:00Z' # Skip stale action for issues created before it
17 | days-before-stale: 365
18 | days-before-close: -1 # If -1, the issues nor pull requests will never be closed automatically.
19 | days-before-pr-stale: -1 # If -1, no pull requests will be marked as stale automatically.
20 | exempt-issue-labels: 'never-stale, help wanted' # issues labeled as such will be excluded them from being marked as stale
21 |
--------------------------------------------------------------------------------
/.github/workflows/triage-issues.yml:
--------------------------------------------------------------------------------
1 | name: Label incoming issues
2 | on:
3 | issues:
4 | types:
5 | - reopened
6 | - opened
7 | - unlabeled
8 |
9 | permissions:
10 | issues: write
11 |
12 | jobs:
13 | label_incoming_issues:
14 | runs-on: ubuntu-latest
15 | if: github.event.action == 'opened' || github.event.action == 'reopened'
16 | steps:
17 | - run: gh issue edit "$NUMBER" --add-label "$LABELS"
18 | env:
19 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
20 | GH_REPO: ${{ github.repository }}
21 | NUMBER: ${{ github.event.issue.number }}
22 | LABELS: triage
23 | label_more_info_issues:
24 | if:
25 | github.event.action == 'unlabeled' && github.event.label.name ==
26 | 'more-info-needed'
27 | runs-on: ubuntu-latest
28 | steps:
29 | - run: gh issue edit "$NUMBER" --add-label "$LABELS"
30 | env:
31 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32 | GH_REPO: ${{ github.repository }}
33 | NUMBER: ${{ github.event.issue.number }}
34 | LABELS: triage
35 |
--------------------------------------------------------------------------------
/.github/workflows/close-invalid.yml:
--------------------------------------------------------------------------------
1 | name: Close issue/PR on adding invalid label
2 |
3 | # **What it does**: This action closes issues that are labeled as invalid in the repo.
4 |
5 | on:
6 | issues:
7 | types: [labeled]
8 | pull_request_target:
9 | types: [labeled]
10 |
11 | permissions:
12 | contents: read
13 | issues: write
14 | pull-requests: write
15 |
16 | jobs:
17 | close-on-adding-invalid-label:
18 | if:
19 | github.repository == 'github/copilot-cli' && github.event.label.name ==
20 | 'invalid'
21 | runs-on: ubuntu-latest
22 |
23 | steps:
24 | - name: Close issue
25 | if: ${{ github.event_name == 'issues' }}
26 | env:
27 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28 | URL: ${{ github.event.issue.html_url }}
29 | run: gh issue close $URL
30 |
31 | - name: Close PR
32 | if: ${{ github.event_name == 'pull_request_target' }}
33 | env:
34 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
35 | URL: ${{ github.event.pull_request.html_url }}
36 | run: gh pr close $URL
37 |
--------------------------------------------------------------------------------
/.github/workflows/feature-request-comment.yml:
--------------------------------------------------------------------------------
1 | name: Add enhancement comment
2 | on:
3 | issues:
4 | types:
5 | - labeled
6 |
7 | permissions:
8 | issues: write
9 |
10 | jobs:
11 | add-comment-to-enhancement-issues:
12 | if: github.event.label.name == 'enhancement'
13 | runs-on: ubuntu-latest
14 | env:
15 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
16 | GH_REPO: ${{ github.repository }}
17 | NUMBER: ${{ github.event.issue.number }}
18 | BODY: >
19 | Thank you for your issue! We have categorized it as an enhancement,
20 | and it has been added to our backlog. In doing so, **we are not
21 | committing to implementing this feature at this time**, but, we will
22 | consider it for future releases based on community feedback and our own
23 | product roadmap.
24 |
25 |
26 | **If you come across this issue and would like to see it implemented,
27 | please add a thumbs up!** This will help us prioritize the feature.
28 | Please only comment if you have additional information or viewpoints to
29 | contribute.
30 | steps:
31 | - run: gh issue comment "$NUMBER" --body "$BODY"
32 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: ⭐️ Feature Request
2 | description: Suggest a new feature or improvement for the GitHub Copilot CLI.
3 | type: Feature
4 | labels:
5 | - "triage"
6 | body:
7 | - type: markdown
8 | attributes:
9 | value: |
10 |
11 | Thank you for taking the time to suggest a feature! Please answer each question below to the best of your ability; it is okay to leave questions blank if you have to.
12 | - type: input
13 | id: title
14 | attributes:
15 | label: Describe the feature or problem you'd like to solve
16 | description: A clear and concise description of what the feature or problem is.
17 | - type: textarea
18 | id: description
19 | attributes:
20 | label: Proposed solution
21 | description: How will it benefit GitHub Copilot CLI and its users?
22 | - type: textarea
23 | id: examples
24 | attributes:
25 | label: Example prompts or workflows
26 | description: Share 3-5 example prompts or workflows it would enable; just enough detail to show value.
27 | - type: textarea
28 | id: additional_context
29 | attributes:
30 | label: Additional context
31 | description: Add any other context about the feature request here.
32 | placeholder: |
33 | - Screenshots or mockups
34 |
--------------------------------------------------------------------------------
/.github/workflows/no-response.yml:
--------------------------------------------------------------------------------
1 | name: No Response
2 |
3 | # Automatically close issues labeled 'more-info-needed' after 7 days of inactivity
4 | on:
5 | schedule:
6 | # Schedule for five minutes after the hour, every hour
7 | - cron: '5 * * * *'
8 |
9 | permissions:
10 | issues: write
11 |
12 | jobs:
13 | noResponse:
14 | runs-on: ubuntu-latest
15 | steps:
16 | - uses: actions/stale@v9
17 | with:
18 | repo-token: ${{ secrets.GITHUB_TOKEN }}
19 | only-issue-labels: 'more-info-needed'
20 | days-before-issue-stale: -1 # Skip stale state, go directly to close
21 | days-before-issue-close: 7 # Close after 7 days of inactivity
22 | days-before-pr-stale: -1 # Don't process PRs
23 | days-before-pr-close: -1 # Don't process PRs
24 | remove-stale-when-updated: true
25 | close-issue-message: >
26 | Thank you for your issue!
27 |
28 | We haven't gotten a response to our questions above. With only the
29 | information that is currently in the issue, we don't have enough
30 | information to take action. We're going to close this but don't
31 | hesitate to reach out if you have or find the answers we need. If
32 | you answer our questions above, this issue will automatically
33 | reopen.
34 | close-issue-reason: 'not_planned'
35 |
--------------------------------------------------------------------------------
/.github/workflows/close-single-word-issues.yml:
--------------------------------------------------------------------------------
1 | name: Close Single-Word Issues
2 |
3 | on:
4 | issues:
5 | types:
6 | - opened
7 |
8 | permissions:
9 | issues: write
10 |
11 | jobs:
12 | close-issue:
13 | runs-on: ubuntu-latest
14 |
15 | steps:
16 | - name: Close Single-Word Issue
17 | uses: actions/github-script@v7
18 | with:
19 | github-token: ${{ secrets.GITHUB_TOKEN }}
20 | script: |
21 | const issueTitle = context.payload.issue.title.trim();
22 | const isSingleWord = /^\S+$/.test(issueTitle);
23 |
24 | if (isSingleWord) {
25 | const issueNumber = context.payload.issue.number;
26 | const repo = context.repo.repo;
27 |
28 | // Close the issue and add the invalid label
29 | github.rest.issues.update({
30 | owner: context.repo.owner,
31 | repo: repo,
32 | issue_number: issueNumber,
33 | labels: ['invalid'],
34 | state: 'closed'
35 | });
36 |
37 | // Comment on the issue
38 | await github.rest.issues.createComment({
39 | owner: context.repo.owner,
40 | repo: repo,
41 | issue_number: issueNumber,
42 | body: `This issue may have been opened accidentally. I'm going to close it now, but feel free to open a new issue with a more descriptive title.`
43 | });
44 | }
45 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.yml:
--------------------------------------------------------------------------------
1 | name: 🐞 Bug Report
2 | description: Report a bug or unexpected behavior in the GitHub Copilot CLI.
3 | type: Bug
4 | labels:
5 | - "triage"
6 | body:
7 | - type: markdown
8 | attributes:
9 | value: |
10 |
11 | Thank you for taking the time to report a bug! Please answer each question below to the best of your ability; it is okay to leave questions blank if you have to.
12 | - type: textarea
13 | id: description
14 | attributes:
15 | label: Describe the bug
16 | description: A clear and concise description of what the bug is.
17 | - type: input
18 | id: version
19 | attributes:
20 | label: Affected version
21 | description: The version of the `copilot` where you encountered the bug (if applicable).
22 | placeholder: |
23 | Paste output from `copilot --version`
24 | - type: textarea
25 | id: steps_to_reproduce
26 | attributes:
27 | label: Steps to reproduce the behavior
28 | description: A clear and concise list of steps to reproduce the behavior. Please include any commands you ran and their output.
29 | placeholder: |
30 | 1. Type '...'
31 | 2. View the output '...'
32 | 3. See error
33 | - type: textarea
34 | id: expected_behavior
35 | attributes:
36 | label: Expected behavior
37 | description: A clear and concise description of what you expected to happen.
38 | - type: textarea
39 | id: additional_context
40 | attributes:
41 | label: Additional context
42 | description: Add any other context about the problem here.
43 | placeholder: |
44 | - Logs using `--log-level` and `--log-file` flags
45 | - Operating system (e.g., Windows, macOS, Linux)
46 | - CPU architecture (e.g., x86_64, ARM)
47 | - Terminal emulator (e.g., Terminal, iTerm2, Windows Terminal)
48 | - Shell (e.g., bash, zsh, fish)
49 |
--------------------------------------------------------------------------------
/.github/workflows/unable-to-reproduce-comment.yml:
--------------------------------------------------------------------------------
1 | name: Add unable-to-reproduce comment
2 | on:
3 | issues:
4 | types:
5 | - labeled
6 |
7 | permissions:
8 | issues: write
9 |
10 | jobs:
11 | add-comment-to-unable-to-reproduce-issues:
12 | if: github.event.label.name == 'unable-to-reproduce'
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Update issue
16 | env:
17 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
18 | GH_REPO: ${{ github.repository }}
19 | NUMBER: ${{ github.event.issue.number }}
20 | LABELS: more-info-needed
21 | BODY: >
22 | Thank you for your issue! Unfortunately, we are unable to reproduce the
23 | issue you are experiencing. Please provide more information so we can
24 | help you.
25 |
26 |
27 | Here are some tips for writing reproduction steps:
28 | - Step by step instructions accompanied by screenshots or screencasts
29 | are the best.
30 | - Be as specific as possible; include as much detail as you can.
31 | - If not already provided, include:
32 | - the version of Copilot CLI you are using.
33 | - the operating system you are using
34 | - any environment factors you can think of.
35 | - any custom configuration you are using.
36 | - a log file from the day you experienced the issue (find log
37 | files via `~/.copilot/logs`.
38 | - If relevant and can be shared, provide the repository or code you
39 | are using.
40 | - If relevant and can be shared, provide the session files (find session files via `~/.copilot/history-session-state`).
41 |
42 | Note: This is a public repository. Please do not include any sensitive or
43 | private information in your issue.
44 | run: |
45 | gh issue edit "$NUMBER" --add-label "$LABELS"
46 | gh issue comment "$NUMBER" --body "$BODY"
47 |
--------------------------------------------------------------------------------
/.github/workflows/winget.yml:
--------------------------------------------------------------------------------
1 | name: Submit release to the WinGet community repository
2 |
3 | on:
4 | release:
5 | types: [published]
6 |
7 | jobs:
8 | publish-winget:
9 | name: Submit to WinGet repository
10 |
11 | # GitHub token permissions needed for winget-create to submit a PR
12 | permissions:
13 | contents: read
14 | pull-requests: write
15 |
16 | # winget-create is only supported on Windows
17 | runs-on: windows-latest
18 |
19 | # winget-create will read the following environment variable to access the GitHub token needed for submitting a PR
20 | # See https://aka.ms/winget-create-token
21 | env:
22 | WINGET_CREATE_GITHUB_TOKEN: ${{ secrets.WINGET_CREATE_GITHUB_TOKEN }}
23 |
24 | steps:
25 | - name: Submit package using wingetcreate
26 | run: |
27 | # Set the package ID based on the release info
28 | $packageId = if ('${{ !github.event.release.prerelease }}' -eq 'true') { 'GitHub.Copilot' } else { 'GitHub.Copilot.Prerelease' }
29 |
30 | # Get installer info from release event
31 | $assets = '${{ toJSON(github.event.release.assets) }}' | ConvertFrom-Json
32 | $packageVersion = (${{ toJSON(github.event.release.tag_name) }})
33 |
34 | # Find the download URLs for the x64 and arm64 installers separately
35 | # This allows overrides to be used so that wingetcreate does not have to guess the architecture from the filename
36 | $installerUrlx64 = $assets | Where-Object -Property name -like '*win32-x64.zip' | Select-Object -ExpandProperty browser_download_url
37 | $installerUrlarm64 = $assets | Where-Object -Property name -like '*win32-arm64.zip' | Select-Object -ExpandProperty browser_download_url
38 |
39 | # Update package using wingetcreate
40 | curl.exe -JLO https://aka.ms/wingetcreate/latest
41 | .\wingetcreate.exe update $packageId `
42 | --version $packageVersion `
43 | --urls "$installerUrlx64|x64" "$installerUrlarm64|arm64" `
44 | --submit
45 |
--------------------------------------------------------------------------------
/install.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 |
4 | # GitHub Copilot CLI Installation Script
5 | # Usage: curl -fsSL https://gh.io/copilot-install | bash
6 | # or: wget -qO- https://gh.io/copilot-install | bash
7 | # Use | sudo bash to run as root and install to /usr/local/bin
8 | # Export PREFIX to install to $PREFIX/bin/ directory (default: /usr/local for
9 | # root, $HOME/.local for non-root), e.g., export PREFIX=$HOME/custom to install
10 | # to $HOME/custom/bin
11 |
12 | echo "Installing GitHub Copilot CLI..."
13 |
14 | # Detect platform
15 | case "$(uname -s || echo "")" in
16 | Darwin*) PLATFORM="darwin" ;;
17 | Linux*) PLATFORM="linux" ;;
18 | *)
19 | if command -v winget >/dev/null 2>&1; then
20 | echo "Windows detected. Installing via winget..."
21 | winget install GitHub.Copilot
22 | exit $?
23 | else
24 | echo "Error: Windows detected but winget not found. Please see https://gh.io/install-copilot-readme" >&2
25 | exit 1
26 | fi
27 | ;;
28 | esac
29 |
30 | # Detect architecture
31 | case "$(uname -m)" in
32 | x86_64|amd64) ARCH="x64" ;;
33 | aarch64|arm64) ARCH="arm64" ;;
34 | *) echo "Error: Unsupported architecture $(uname -m)" >&2 ; exit 1 ;;
35 | esac
36 |
37 | # Determine download URL based on VERSION
38 | if [ -n "$VERSION" ]; then
39 | # Prefix version with 'v' if not already present
40 | case "$VERSION" in
41 | v*) ;;
42 | *) VERSION="v$VERSION" ;;
43 | esac
44 | DOWNLOAD_URL="https://github.com/github/copilot-cli/releases/download/${VERSION}/copilot-${PLATFORM}-${ARCH}.tar.gz"
45 | CHECKSUMS_URL="https://github.com/github/copilot-cli/releases/download/${VERSION}/SHA256SUMS.txt"
46 | else
47 | DOWNLOAD_URL="https://github.com/github/copilot-cli/releases/latest/download/copilot-${PLATFORM}-${ARCH}.tar.gz"
48 | CHECKSUMS_URL="https://github.com/github/copilot-cli/releases/latest/download/SHA256SUMS.txt"
49 | fi
50 | echo "Downloading from: $DOWNLOAD_URL"
51 |
52 | # Download and extract with error handling
53 | TMP_DIR="$(mktemp -d)"
54 | TMP_TARBALL="$TMP_DIR/copilot-${PLATFORM}-${ARCH}.tar.gz"
55 | if command -v curl >/dev/null 2>&1; then
56 | curl -fsSL "$DOWNLOAD_URL" -o "$TMP_TARBALL"
57 | elif command -v wget >/dev/null 2>&1; then
58 | wget -qO "$TMP_TARBALL" "$DOWNLOAD_URL"
59 | else
60 | echo "Error: Neither curl nor wget found. Please install one of them."
61 | rm -rf "$TMP_DIR"
62 | exit 1
63 | fi
64 |
65 | # Attempt to download checksums file and validate
66 | TMP_CHECKSUMS="$TMP_DIR/SHA256SUMS.txt"
67 | CHECKSUMS_AVAILABLE=false
68 | if command -v curl >/dev/null 2>&1; then
69 | curl -fsSL "$CHECKSUMS_URL" -o "$TMP_CHECKSUMS" 2>/dev/null && CHECKSUMS_AVAILABLE=true
70 | elif command -v wget >/dev/null 2>&1; then
71 | wget -qO "$TMP_CHECKSUMS" "$CHECKSUMS_URL" 2>/dev/null && CHECKSUMS_AVAILABLE=true
72 | fi
73 |
74 | if [ "$CHECKSUMS_AVAILABLE" = true ]; then
75 | if command -v sha256sum >/dev/null 2>&1; then
76 | if (cd "$TMP_DIR" && sha256sum -c --ignore-missing SHA256SUMS.txt >/dev/null 2>&1); then
77 | echo "✓ Checksum validated"
78 | else
79 | echo "Error: Checksum validation failed." >&2
80 | rm -rf "$TMP_DIR"
81 | exit 1
82 | fi
83 | elif command -v shasum >/dev/null 2>&1; then
84 | if (cd "$TMP_DIR" && shasum -a 256 -c --ignore-missing SHA256SUMS.txt >/dev/null 2>&1); then
85 | echo "✓ Checksum validated"
86 | else
87 | echo "Error: Checksum validation failed." >&2
88 | rm -rf "$TMP_DIR"
89 | exit 1
90 | fi
91 | else
92 | echo "Warning: No sha256sum or shasum found, skipping checksum validation."
93 | fi
94 | fi
95 |
96 | # Check that the file is a valid tarball
97 | if ! tar -tzf "$TMP_TARBALL" >/dev/null 2>&1; then
98 | echo "Error: Downloaded file is not a valid tarball or is corrupted." >&2
99 | rm -rf "$TMP_DIR"
100 | exit 1
101 | fi
102 |
103 | # Check if running as root, fallback to non-root
104 | if [ "$(id -u 2>/dev/null || echo 1)" -eq 0 ]; then
105 | PREFIX="${PREFIX:-/usr/local}"
106 | else
107 | PREFIX="${PREFIX:-$HOME/.local}"
108 | fi
109 | INSTALL_DIR="$PREFIX/bin"
110 | if ! mkdir -p "$INSTALL_DIR"; then
111 | echo "Error: Could not create directory $INSTALL_DIR. You may not have write permissions." >&2
112 | echo "Try running this script with sudo or set PREFIX to a directory you own (e.g., export PREFIX=\$HOME/.local)." >&2
113 | exit 1
114 | fi
115 |
116 | # Install binary
117 | if [ -f "$INSTALL_DIR/copilot" ]; then
118 | echo "Notice: Replacing copilot binary found at $INSTALL_DIR/copilot."
119 | fi
120 | tar -xz -C "$INSTALL_DIR" -f "$TMP_TARBALL"
121 | chmod +x "$INSTALL_DIR/copilot"
122 | echo "✓ GitHub Copilot CLI installed to $INSTALL_DIR/copilot"
123 | rm -rf "$TMP_DIR"
124 |
125 | # Check if install directory is in PATH
126 | case ":$PATH:" in
127 | *":$INSTALL_DIR:"*) ;;
128 | *)
129 | echo ""
130 | echo "Warning: $INSTALL_DIR is not in your PATH"
131 | echo "Add it to your PATH by adding this line to your shell profile:"
132 | echo " export PATH=\"\$PATH:$INSTALL_DIR\""
133 | ;;
134 | esac
135 |
136 | echo ""
137 | echo "Installation complete! Run 'copilot help' to get started."
138 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GitHub Copilot CLI (Public Preview)
2 |
3 | The power of GitHub Copilot, now in your terminal.
4 |
5 | GitHub Copilot CLI brings AI-powered coding assistance directly to your command line, enabling you to build, debug, and understand code through natural language conversations. Powered by the same agentic harness as GitHub's Copilot coding agent, it provides intelligent assistance while staying deeply integrated with your GitHub workflow.
6 |
7 | See [our official documentation](https://docs.github.com/copilot/concepts/agents/about-copilot-cli) for more information.
8 |
9 | 
10 |
11 | ## 🚀 Introduction and Overview
12 |
13 | We're bringing the power of GitHub Copilot coding agent directly to your terminal. With GitHub Copilot CLI, you can work locally and synchronously with an AI agent that understands your code and GitHub context.
14 |
15 | - **Terminal-native development:** Work with Copilot coding agent directly in your command line — no context switching required.
16 | - **GitHub integration out of the box:** Access your repositories, issues, and pull requests using natural language, all authenticated with your existing GitHub account.
17 | - **Agentic capabilities:** Build, edit, debug, and refactor code with an AI collaborator that can plan and execute complex tasks.
18 | - **MCP-powered extensibility:** Take advantage of the fact that the coding agent ships with GitHub's MCP server by default and supports custom MCP servers to extend capabilities.
19 | - **Full control:** Preview every action before execution — nothing happens without your explicit approval.
20 |
21 | We're still early in our journey, but with your feedback, we're rapidly iterating to make the GitHub Copilot CLI the best possible companion in your terminal.
22 |
23 | ## 📦 Getting Started
24 |
25 | ### Supported Platforms
26 |
27 | - **Linux**
28 | - **macOS**
29 | - **Windows**
30 |
31 | ### Prerequisites
32 |
33 | - **Node.js** v22 or higher
34 | - **npm** v10 or higher
35 | - (On Windows) **PowerShell** v6 or higher
36 | - An **active Copilot subscription**. See [Copilot plans](https://github.com/features/copilot/plans?ref_cta=Copilot+plans+signup&ref_loc=install-copilot-cli&ref_page=docs).
37 |
38 | If you have access to GitHub Copilot via your organization or enterprise, you cannot use GitHub Copilot CLI if your organization owner or enterprise administrator has disabled it in the organization or enterprise settings. See [Managing policies and features for GitHub Copilot in your organization](http://docs.github.com/copilot/managing-copilot/managing-github-copilot-in-your-organization/managing-github-copilot-features-in-your-organization/managing-policies-for-copilot-in-your-organization) for more information.
39 |
40 | ### Installation
41 |
42 | Install with [WinGet](https://github.com/microsoft/winget-cli) (Windows):
43 |
44 | ```bash
45 | winget install GitHub.Copilot
46 | ```
47 |
48 | ```bash
49 | winget install GitHub.Copilot.Prerelease
50 | ```
51 |
52 | Install with [Homebrew](https://formulae.brew.sh/cask/copilot-cli) (macOS and Linux):
53 |
54 | ```bash
55 | brew install copilot-cli
56 | ```
57 |
58 | ```bash
59 | brew install copilot-cli@prerelease
60 | ```
61 |
62 | Install with [npm](https://www.npmjs.com/package/@github/copilot) (macOS, Linux, and Windows):
63 |
64 | ```bash
65 | npm install -g @github/copilot
66 | ```
67 |
68 | ```bash
69 | npm install -g @github/copilot@prerelease
70 | ```
71 |
72 | Install with the install script (macOS and Linux):
73 |
74 | ```bash
75 | curl -fsSL https://gh.io/copilot-install | bash
76 | ```
77 |
78 | Or
79 |
80 | ```bash
81 | wget -qO- https://gh.io/copilot-install | bash
82 | ```
83 |
84 | Use `| sudo bash` to run as root and install to `/usr/local/bin`.
85 |
86 | Set `PREFIX` to install to `$PREFIX/bin/` directory. Defaults to `/usr/local`
87 | when run as root or `$HOME/.local` when run as a non-root user.
88 |
89 | Set `VERSION` to install a specific version. Defaults to the latest version.
90 |
91 | For example, to install version `v0.0.369` to a custom directory:
92 |
93 | ```bash
94 | curl -fsSL https://gh.io/copilot-install | VERSION="v0.0.369" PREFIX="$HOME/custom" bash
95 | ```
96 |
97 | ### Launching the CLI
98 |
99 | ```bash
100 | copilot
101 | ```
102 |
103 | On first launch, you'll be greeted with our adorable animated banner! If you'd like to see this banner again, launch `copilot` with the `--banner` flag.
104 |
105 | If you're not currently logged in to GitHub, you'll be prompted to use the `/login` slash command. Enter this command and follow the on-screen instructions to authenticate.
106 |
107 | #### Authenticate with a Personal Access Token (PAT)
108 |
109 | You can also authenticate using a fine-grained PAT with the "Copilot Requests" permission enabled.
110 |
111 | 1. Visit https://github.com/settings/personal-access-tokens/new
112 | 2. Under "Permissions," click "add permissions" and select "Copilot Requests"
113 | 3. Generate your token
114 | 4. Add the token to your environment via the environment variable `GH_TOKEN` or `GITHUB_TOKEN` (in order of precedence)
115 |
116 | ### Using the CLI
117 |
118 | Launch `copilot` in a folder that contains code you want to work with.
119 |
120 | By default, `copilot` utilizes Claude Sonnet 4.5. Run the `/model` slash command to choose from other available models, including Claude Sonnet 4 and GPT-5.
121 |
122 | Each time you submit a prompt to GitHub Copilot CLI, your monthly quota of premium requests is reduced by one. For information about premium requests, see [About premium requests](https://docs.github.com/copilot/managing-copilot/monitoring-usage-and-entitlements/about-premium-requests).
123 |
124 | For more information about how to use the GitHub Copilot CLI, see [our official documentation](https://docs.github.com/copilot/concepts/agents/about-copilot-cli).
125 |
126 | ## 📢 Feedback and Participation
127 |
128 | We're excited to have you join us early in the Copilot CLI journey.
129 |
130 | This is an early-stage preview, and we're building quickly. Expect frequent updates--please keep your client up to date for the latest features and fixes!
131 |
132 | Your insights are invaluable! Open issue in this repo, join Discussions, and run `/feedback` from the CLI to submit a confidential feedback survey!
133 |
--------------------------------------------------------------------------------
/changelog.md:
--------------------------------------------------------------------------------
1 | ## 0.0.372 - 2025-12-19
2 |
3 | - Enable disabled models directly in CLI when selecting or specifying them
4 | - Add `/context` command to visualize token usage
5 | - Add `--resume` flag to continue remote sessions locally
6 | - Add URL permission controls which affect common shell commands which access the web
7 | - Long commands no longer show duplicate intention headers when wrapping
8 |
9 | ## 0.0.371 - 2025-12-18
10 |
11 | - Normal text respects terminal's default foreground color
12 | - Update skills help text to reference correct ~/.copilot/skills/ directory
13 |
14 | ## 0.0.370 - 2025-12-18
15 |
16 | - Disabled MCP servers are now properly ignored when using --disable-mcp-server
17 | - Shared sessions correctly render nested markdown codeblocks
18 | - Log levels now output all messages of that level and higher severity
19 | - Load CA certificates from system and environment variables
20 | - Improve `/model` error messages to show available and unavailable models
21 | - Model picker uses two-column layout with aligned multipliers and clearer visual indicators
22 | - Add STDIO type as synonymous for Local for MCP servers in CLI configuration UI
23 | - Diff display uses your configured git pager (delta, diff-so-fancy)
24 | - Use platform-specific executable from npm install when available
25 | - Publish SHA256 checksums for CLI executables in releases
26 | - Add --available-tools and --excluded-tools to filter which tools the model can use
27 | - Ensure animated or non-animated banner is displayed based on banner and screen reader preferences
28 | - Fix truncation logic for codex models
29 |
30 | ## 0.0.369 - 2025-12-11
31 |
32 | - Add support for GPT-5.2
33 |
34 | ## 0.0.368 - 2025-12-10
35 |
36 | - PRU usage rates now displayed correctly
37 | - Fix checkmark and x icon rendering
38 | - Add grep tool Codex models
39 | - Numpad keys work in prompts with Kitty keyboard protocol
40 |
41 | ## 0.0.367 - 2025-12-04
42 |
43 | - GPT-5.1-Codex-Max is now available in GitHub Copilot CLI
44 |
45 | ## 0.0.366 - 2025-12-03
46 |
47 | - Add `infer` property to control custom agent tool visibility
48 | - Add CLI executables to GitHub release artifacts
49 | - Add apply_patch toolchain for OpenAI Codex models
50 |
51 | ## 0.0.365 - 2025-11-25
52 |
53 | - Add `--silent` option to suppress stats output for scripting
54 |
55 | ## 0.0.364 - 2025-11-25
56 |
57 | - Add syntax highlighting for diffs
58 | - Fix light theme markdown rendering
59 |
60 | ## 0.0.363 - 2025-11-24
61 |
62 | - Opus 4.5, GPT-4.1 and GPT-5-Mini are now available in GitHub Copilot CLI
63 | - Image data paste now prioritizes pasting contents of image files instead of their file icons.
64 | - Improved timeline rendering of shell tool names
65 | - Add support for GITHUB_ASKPASS environment variable for authentication
66 | - MCP servers work in `--prompt` mode
67 |
68 | ## 0.0.362 - 2025-11-20
69 |
70 | - Fix issues with image drag and drop on Windows
71 | - Shell commands are no longer included in Bash and PowerShell history files
72 | - Paste image data from your clipboard directly into the CLI
73 | - Cleanup and update prompts and tool instructions to be more fluid
74 |
75 | ## 0.0.360 - 2025-11-18
76 |
77 | - Fix file operations timing out while waiting for user permission
78 |
79 | ## 0.0.359 - 2025-11-17
80 |
81 | - Support adding images to context via drag & dropping and pasting paths to image files. Improved how image slugs are rendered in the input box
82 | - Add `/share` command to save session as markdown file or GitHub gist
83 | - Fix a bug where cached tokens were displaying as zero at the end of the session
84 | - Enable `USE_BUILTIN_RIPGREP` environment variable to optionally use ripgrep from PATH
85 | - Fix an issue where sourcing custom agents from the remote repository's default branch led to confusions about whether the local copy of the agent was being used
86 | - Fix custom agents configuration issues
87 | - Improve `Ctrl+C` performance
88 | - Improve tool argument parsing safety
89 | - Distinguish tool names from paths and improve tool success/error icons
90 | - `copilot -p` will no longer interactively prompt for permission requests
91 | - Remove unnecessary whitespace from tool descriptions
92 |
93 | ## 0.0.358 - 2025-11-14
94 |
95 | - Recovery release to fix availability of GPT-5.1, GPT-5.1-Codex, and GPT-5.1-Codex-Mini models
96 |
97 | ## 0.0.357 - 2025-11-13
98 |
99 | - Recovery release to fix an issue with image resizing
100 |
101 | ## 0.0.356 - 2025-11-13
102 |
103 | - GPT-5.1, GPT-5.1-Codex, and GPT-5.1-Codex-Mini are now available in GitHub Copilot CLI
104 |
105 | ## 0.0.355 - 2025-11-12
106 |
107 | - Enabled the CLI agent to read its own `/help` and README to answer questions about its capabilities
108 | - Improved parsing of VS Code-formatted custom agents with the `.agent.md` suffix
109 | - Sanitize tool names to fix issues with special characters
110 | - Bundled `ripgrep` and added `grep` and `glob` tools for more performant searching of codebases
111 | - Fixed malformed tool call handling before it reaches the UI
112 | - Prevent double line wraps in markdown messages
113 | - Fixed a bug where the file selector was used in multi-line input that led to unexpected up/down arrow behavior
114 | - Fixed a bug where remote MCP server configuration in custom agents was not fetched properly
115 | - Added more detail and improved the styling of the `/session` command's output
116 | - Removed the internal `NODE_ENV` variable from the shell tool's environment
117 | - Fixed a memory leak when using the interactive shell tool
118 | - Improved line number formatting in file view output
119 | - Lowered the default shell tool timeout and updated prompt language to not imply that timeout means failure
120 | - Ensured that we query the terminal background color before rendering
121 | - Ensured that the agent won't run `pkill` on its own PID
122 | - Fixed a bug where `copilot` would not quit after an abort signal
123 | - Ensure `!` commands on Windows use PowerShell when available
124 | - Fixed a bug in Windows Terminal where keyboard input was not accepted
125 |
126 | ## 0.0.354 - 2025-11-03
127 |
128 | - Exit with nonzero code when `-p` mode fails due to LLM backend errors (auth failures, quota exhaustion, network issues)
129 | - Support for MCP server tool notifications
130 | - Support for `COPILOT_GITHUB_TOKEN` environment variable for authentication (takes precedence over `GH_TOKEN`)
131 | - Improved shell command safety with better heredoc handling outside of commands
132 | - Diff hunk lines now properly fill the width of the diff box
133 | - MCP servers in GitHub Actions environments automatically use `GITHUB_WORKSPACE` as working directory
134 | - `/delegate` command now works correctly when no local changes exist
135 | - Custom agents with special characters in filenames no longer fail
136 | - Better error messages when using unsupported models with `/model` command
137 | - Alternative model providers now work correctly when using different OpenAI base URLs
138 |
139 | ## 0.0.353 - 2025-10-28
140 |
141 | - Added support for custom agents. Custom agent definitions are pulled from `~/.copilot/agents`, `.github/agents` in your repository, or your organization's `.github` repository. You can explicitly invoke an agent with the `/agent` slash command interactively or `--agent ` noninteractively. Agents are also provided as tools that the model can call during completion of a task
142 | - Added a `/delegate` command to delegate a task asynchronously to Copilot coding agent. Any unstaged changes will be committed to a new branch, a PR will be opened in your GitHub repository, and Copilot will complete work in the background.
143 |
144 | ## 0.0.352 - 2025-10-27
145 |
146 | - Improve handling of MCP tools containing slashes
147 | - Improve error message from `/model ` command when using an unsupported model
148 |
149 | ## 0.0.351 - 2025-10-24
150 |
151 | - Improved our path detection heuristic to avoid various annoying, unnecessary permissions requests:
152 | - Running many standard bash/PowerShell commands that are known to be readonly (Fixes part of https://github.com/github/sweagentd/issues/7372)
153 | - Commands like `npm test -- --something` in PowerShell
154 | - Shell redirections like `> some_file.txt` in paths you've already granted write permissions, `> /dev/null`, and `2>&1` (Fixes https://github.com/github/copilot-cli/issues/211)
155 | - Arguments to `gh api` like `gh api /repos/user/repo/ec` (Fixes https://github.com/github/copilot-cli/issues/216)
156 | - Improved prompting for Sonnet 4.5 to reduce the number of intermediate markdown files left in the workspace
157 | - 👀 ...see you at [GitHub Universe](https://githubuniverse.com/)!
158 |
159 | ## 0.0.350 - 2025-10-23
160 |
161 | - To conserve context window space, we've limited the list of tools available to the default GitHub MCP server. In our tests, the model will use the [GitHub CLI, `gh`](https://github.com/cli/cli) (if installed) in lieu of missing MCP tools. We added an `--enable-all-github-mcp-tools` if you wish to turn on all available tools.
162 | Default available tools are: - Code & Repo navigation - get_file_contents - search_code - search_repositories - list_branches - list_commits - get_commit - Issue Management - get_issue - list_issues - get_issue_comments - search_issues - PR Management - pull_request_read - list_pull_requests - search_pull_requests - Workflow Info - list_workflows - list_workflow_runs - get_workflow_run - get_job_logs - get_workflow_run_logs - Misc search - user_search
163 | - Bundled `sharp` dependency into the CLI package -- we're one step closer to implementing https://github.com/github/copilot-cli/issues/16, and this fixes some startup blockers on Windows (fixes https://github.com/github/copilot-cli/issues/309 & https://github.com/github/copilot-cli/issues/287)
164 | - Fixed a bug where input tokens were not tracked properly (Fixes https://github.com/github/copilot-cli/issues/337)
165 | - Fixed a bug where MCP tools with arguments would fail with streaming enabled
166 | - Added additional debug logging that will help us investigate https://github.com/github/copilot-cli/issues/346
167 |
168 | ## 0.0.349 - 2025-10-22
169 |
170 | - The model can now call multiple tools in parallel. Each tool must be confirmed in advance. This behavior can be disabled with the `--disable-parallel-tools-execution` flag
171 | - Added `/quit` as an alias of `/exit` (fixes https://github.com/github/copilot-cli/issues/357)
172 | - Fixed a bug where every streamed output chunk was sent back to the model as part of the conversation (fixes https://github.com/github/copilot-cli/issues/379)
173 | - Ensure that environment variables are expanded before running path permission checks
174 | - Fixed a bug where Ctrl+K deleted to the end of the visual line in the input box rather than the logical line
175 | - Added the temp directory to the paths that the model has access to by default (fixes https://github.com/github/copilot-cli/issues/306)
176 |
177 | ## 0.0.348 - 2025-10-21
178 |
179 | - Copilot's output now streams in token-by-token! This can be disabled with `--stream off`
180 | - Made improvements to the memory footprint of Copilot CLI, especially when dealing with shell commands that produce very large outputs
181 | - Ensured we preserve comments in VSCode config files when using `/terminal-setup` (fixes https://github.com/github/copilot-cli/issues/325)
182 | - Bundled `node-pty` into the CLI package -- we're one step closer to implementing https://github.com/github/copilot-cli/issues/16
183 | - Fixed an issue where local tool calling broke sessions (fixes https://github.com/github/copilot-cli/issues/365, https://github.com/github/copilot-cli/issues/364, https://github.com/github/copilot-cli/issues/366)
184 | - Added our LICENSE.md to our Node package (fixes https://github.com/github/copilot-cli/issues/371)
185 | - Added debug logging to authentication status changes to get to the bottom of https://github.com/github/copilot-cli/issues/346
186 |
187 | ## 0.0.347 - 2025-10-20
188 |
189 | - Fixed more bugs where incorrect PRU consumption stats were displayed on the frontend
190 | For more information, see https://github.com/github/copilot-cli/issues/351#issuecomment-3423735333
191 | - Fixed a bug where pasted input content that was backspaced away was still sent to the model
192 | - Improved line wrapping and alignment when rendering file diffs
193 |
194 | ## 0.0.346 - 2025-10-19
195 |
196 | - Fixed a bug where model sourced from configuration file was not accounted for correctly in estimating premium request usage
197 | For more information, see https://github.com/github/copilot-cli/issues/351#issuecomment-3419045411
198 |
199 | ## 0.0.345 - 2025-10-18
200 |
201 | - Fixed a bug where premium requests were being overcounted for some users (https://github.com/github/copilot-cli/issues/351). If you were affected, we are working on refunding your overcharged premium requests!
202 |
203 | ## 0.0.344 - 2025-10-17
204 |
205 | - Enabled GitHub MCP server in prompt mode
206 | - Added support to the bash tool for executing detached processes
207 | - Added list of supported models as part of `copilot help config` text
208 | - Fixed session abort handling to properly clean up orphaned tool call when pressing Esc or force-quitting
209 | - Enforced minimum Node version requirement at launch
210 | - Simplified messaging for `/terminal-setup`
211 |
212 | ## 0.0.343 - 2025-10-16
213 |
214 | - ```
215 | Added new model:
216 | Run slash model to equip
217 | Haiku 4.5.
218 | ```
219 | - Added a flag to augment MCP server configuration to temporarily add or override server configuration per session: `--additional-mcp-config` (fixes https://github.com/github/copilot-cli/issues/288)
220 | - You can pass MCP server configuration in two ways:
221 | - Inline JSON: `copilot --additional-mcp-config '{"mcpServers": {"my-tool": {...}}}'`
222 | - From a file (prefix with @): `copilot --additional-mcp-config @/path/to/config.json`
223 | - You can also pass the flag multiple times (later values override earlier ones): `copilot --additional-mcp-config @base.json --additional-mcp-config @overrides.json`
224 | - Improved our prompts to ensure the agent uses Windows-style paths on Windows (fixes https://github.com/github/copilot-cli/issues/261)
225 | - Added a prompt for users to run `/terminal-setup` if needed to enable multi-line input
226 | - Various visual improvements:
227 | - Added a shimmer effect to the "Thinking..." indicator
228 | - Removed the box around user messages in the timeline
229 | - Increased the contrast of removed intraline highlights in diffs
230 | - Allow cycling through slash commands (from the bottom of the list back to the top)
231 | - Aligned permission/confirmation prompts to ensure all use the same visual style
232 |
233 | ## 0.0.342 - 2025-10-15
234 |
235 | - Overhauled our session logging format:
236 | - Introduced a new session logging format that decouples how we store sessions from how we display them in the timeline. The new format is cleaner, more concise, and scalable, and will allow us to more easily implement new features down the line.
237 | - New sessions are stored in `~/.copilot/session-state`
238 | - Legacy sessions are stored in `~/.copilot/history-session-state` -- these will be migrated to the new format & location as you resume them from `copilot --resume`
239 | - Enabled the Kitty protocol by default. Multi-line input is now supported via Shift+Ctrl on terminal that support the Kitty protocol. Multi-line input is also supported in VSCode and its forks by running the `/terminal-setup` command (fixes https://github.com/github/copilot-cli/issues/14)
240 | - Enabled non-interactive GHE logins by respecting the `GH_HOST` environment variable for PAT and `gh` authentication modes (fixes https://github.com/github/copilot-cli/issues/296)
241 | - Improved debug log collection convenience by adding a persistent `log_level` option in `~/.copilot/config`. Possible values: `["none", "error", "warning", "info", "debug", "all", "default"]`
242 | - Added debug logging when calls to `/model` result in Copilot API errors. This should help us diagnose some policy/model access edge cases like https://github.com/github/copilot-cli/issues/268 and https://github.com/github/copilot-cli/issues/116
243 | - Added `gradlew` to the list of commands whose subcommands can be whitelisted (fixes https://github.com/github/copilot-cli/issues/217#issuecomment-3393844685)
244 | - Fixed a bug where sessions could enter a stuck state after a failed MCP tool call (fixes https://github.com/github/copilot-cli/issues/312)
245 | - Made the output of `--help` text more concise
246 |
247 | ## 0.0.341 - 2025-10-14
248 |
249 | - Added `/terminal-setup` command to set up multi-line input on terminals not implementing the kitty protocol
250 | - Fixed a bug where rejecting an MCP tool call would reject all future tool calls (fixes https://github.com/github/copilot-cli/issues/290)
251 | - Fixed a regression where calling `/model` with an argument did not work properly
252 | - Added each model's premium request multiplier to the `/model` list (currently, all our supported models are 1x)
253 |
254 | ## 0.0.340 - 2025-10-13
255 |
256 | - Removed the "Windows support is experimental" warning -- we've made some big strides in improving Windows support the last two weeks! Please continue to report any issues/feedback
257 | - Improved debugging by including the Copilot API request ID for model calls errors and stack traces for client errors
258 | - Fixed an issue where consecutive orphaned tool calls led to a "Each `tool_use` block must have a corresponding `tool_result` block in the next message" message (fixes https://github.com/github/copilot-cli/issues/102)
259 | - Added a prompt to approve new paths in `-p` mode. Also added `--allow-all-paths` argument that approves access to all paths.
260 | - Changed parsing of environment variables in MCP server configuration to treat the value of the `env` section as literal values (fixes https://github.com/github/copilot-cli/issues/26).
261 | Customers who have configured MCP Servers for use with the CLI will need to make a slight modification to their `~/.copilot/mcp-config.json`. For any servers they have added with an `env` section, they will need to go add a `$` to the start of the "value" pair of the key value pair of each entry in the env-block, so to have the values treated as references to environment variables.
262 |
263 | For example: Before:
264 |
265 | ```json
266 | {
267 | "env": {
268 | "GITHUB_ACCESS_TOKEN": "GITHUB_TOKEN"
269 | }
270 | }
271 | ```
272 |
273 | Before this change, the CLI would read the value of `GITHUB_TOKEN` from the environment of the CLI and set the environment variable named `GITHUB_ACCESS_TOKEN` in the MCP process to that value. With this change, `GITHUB_ACCESS_TOKEN` would now be set to the literal value `GITHUB_TOKEN`. To get the old behavior, change to this:
274 |
275 | ```json
276 | {
277 | "env": {
278 | "GITHUB_ACCESS_TOKEN": "${GITHUB_TOKEN}"
279 | }
280 | }
281 | ```
282 |
283 | ## 0.0.339 - 2025-10-10
284 |
285 | - Improved argument input to MCP servers in `/mcp add` -- previously, users had to use comma-separated syntax to specify arguments. Now, the "Command" field allows users to input the full command to start the server as if they were running it in a shell
286 | - Fixed a bug when using the Kitty protocol that led to text containing `u` to not paste correctly. Kitty protocol support is still behind the `COPILOT_KITTY` environment variable. (Fixes https://github.com/github/copilot-cli/issues/259)
287 | - Fixed a bug when using the Kitty protocol that led to the process hanging in VSCode terminal on Windows. Kitty protocol support is still behind the `COPILOT_KITTY` environment variable. (Fixes https://github.com/github/copilot-cli/issues/257)
288 | - Improved the error handling in the `/model` picker when no models are available (fixes https://github.com/github/copilot-cli/issues/229)
289 |
290 | ## 0.0.338 - 2025-10-09
291 |
292 | - Moved Kitty protocol support behind the `COPILOT_KITTY` environment variable due to observed regressions (https://github.com/github/copilot-cli/issues/257, https://github.com/github/copilot-cli/issues/259)
293 | - Fixed a wrapping issue in multi-line prompts with empty lines
294 |
295 | ## 0.0.337 - 2025-10-08
296 |
297 | - Added validation for MCP server names (fixes https://github.com/github/copilot-cli/issues/110)
298 | - Added support for Ctrl+B and Ctrl+F for moving cursor back and forward (fixes https://github.com/github/copilot-cli/issues/214)
299 | - Added support for multi-line input for terminals that support the [Kitty protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) (partially fixes https://github.com/github/copilot-cli/issues/14 -- broader terminal support coming soon!)
300 | - Updated the OAuth login UI to begin polling as soon as the device code is generated (this will _more solidly_ fix SSH edge-cases as described in https://github.com/github/copilot-cli/issues/89)
301 |
302 | ## 0.0.336 - 2025-10-07
303 |
304 | - Enabled proxy support via HTTPS_PROXY/HTTP_PROXY environment variables regardless of Node version (Fixes https://github.com/github/copilot-cli/issues/41)
305 | - Significantly reduced token consumption, round trips per problem, and time to result. We'll share more specific data in our weekly changelog on Friday!
306 | - Improved file write performances (especially on Windows) by not relying on the shell to fetch the current working directory
307 | - Fixed a bug where `/clear` did not properly reset the context truncation tracking state
308 | - Hid the "Welcome to GitHub Copilot CLI" welcome message on session resumption and `/clear` for a cleaner look
309 | - Improved the alignment of tables where the scrollbar is present
310 | - Improved the output of `--help` by making it more concise
311 | - Added a prompt for users who launch with `--screen-reader` to persistently save this preference
312 | - Potentially improved flickering in some cases; we're still working on this!
313 |
314 | ## 0.0.335 - 2025-10-06
315 |
316 | - Improved visibility into file edits by showing file diffs in the timeline by default, without the need to Ctrl+R
317 | - Improved slash command input by showing argument hints in the input box
318 | - Improved the display of the interface in windows less than 80 columns wide
319 | - Reduced the number of colors and improved the spacing of Markdown rendering
320 | - Added a warning when attempting to use proxy support in an environment where it won't work (Node <24, required environment variables not set) (A more permanent fix for https://github.com/github/copilot-cli/issues/41 is coming ~tomorrow)
321 | - Updated the context truncation message's color from an error color to a warning color
322 | - Fixed a bug where `copilot` logs might not have been properly created on Windows
323 | - Fixed a bug where Powershell users with custom profiles might have had issues running commands (Fixes https://github.com/github/copilot-cli/issues/196)
324 | - Fixed a bug where prompts were truncated after pasting and other edge cases (Fixes https://github.com/github/copilot-cli/issues/208, https://github.com/github/copilot-cli/issues/218)
325 | - Fixed a bug where users would see a login prompt on startup despite being logged in (fixes https://github.com/github/copilot-cli/issues/202)
326 | - Fixed a bug where some SSH users in certain environments were unable to get the OAuth login link and had their processes hang trying to open a browser (fixes https://github.com/github/copilot-cli/issues/89)
327 |
328 | ## 0.0.334 - 2025-10-03
329 |
330 | - Improved the experience of pasting large content: when pasting more than 10 lines, it's displayed as a compact token like `[Paste #1 - 15 lines]` instead of flooding the terminal.
331 | - Added a warning when conversation context approaches ≤20% remaining of the model's limit that truncation will soon occur. At this point, we recommend you begin a new session (improves https://github.com/github/copilot-cli/issues/29)
332 | - Removed the on-exit usage stats from the persisted session history
333 | - Added the current version to startup logs to aid in bug reporting
334 | - Removed cycling through TAB autocomplete items if an argument is present. This prevents running `/cwd /path/to/whatever`, hitting `TAB`, then seeing `/clear` autocomplete
335 |
336 | ## 0.0.333 - 2025-10-02
337 |
338 | - Added image support! `@`-mention files to add them as input to the model.
339 | - Improved proxy support for users on Node.JS v24+. See [this comment](https://github.com/github/copilot-cli/issues/41#issuecomment-3362444262) for more details (Fixes https://github.com/github/copilot-cli/issues/41)
340 | - Added support for directly executing shell commands and bypassing the model by prepending input with `!` (fixes https://github.com/github/copilot-cli/issues/186, https://github.com/github/copilot-cli/issues/12)
341 | - Added `/usage` slash command to provide stats about Premium request usage, session time, code changes, and per-model token use. This information is also printed at the conclusion of a session (Fixes https://github.com/github/copilot-cli/issues/27, https://github.com/github/copilot-cli/issues/121)
342 | - Improved `--screen-reader` mode by replacing icons in the timeline with informative labels
343 | - Added a `--continue` flag to resume the most recently closed session
344 | - Updated the `/clear` command to properly clear old timeline entries/session information (Fixes https://github.com/github/copilot-cli/issues/170)
345 |
346 | ## 0.0.332 - 2025-10-01
347 |
348 | - Switched to using per-subscription Copilot API endpoints in accordance with [GitHub's docs](https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-access/manage-network-access) (fixes https://github.com/github/copilot-cli/issues/76)
349 | - Fixed a bug where `/user [list | show | switch]` did not include users signed in from all authentication modes (fixes https://github.com/github/copilot-cli/issues/58)
350 | - Fixed a bug where switching to another user with `/user switch` did not take effect in the GitHub MCP server
351 | - Improved the screenreader experience by disabling the scrollbar in the `@` file picker, the `--resume` session picker, and the `/` command picker
352 | - Improved the polish of the scrollbar container (increased the width, reduced the opacity of the gutter)
353 | - Minor visual improvements to the input area (moved the current model indicator to the right so it's not cramped with the CWD, improved the positioning of the file picker's "indexing" indicator, improved hint formatting in completion menus)
354 | - Improved Markdown legibility by excluding `#` prefixes in headings
355 | - Improved how we extract paths from shell commands for permission handling (might fix https://github.com/github/copilot-cli/issues/159, https://github.com/github/copilot-cli/issues/67)
356 |
357 | ## 0.0.331 - 2025-10-01
358 |
359 | - Improved the information density of file read/edit timeline events
360 | - Fixed an inaccuracy in the `--banner` help text; it previously implied that it would persistently change the configuration to always show the startup banner
361 | - Improved the `/model`s list to ensure that a user only sees models they have access to use -- previously, if a user tries to use a model they do not have access to (because of their Copilot plan, their geographic region, etc), they received a `model_not_supported` error. This should prevent that by not even showing such models as options in the list (Fixes https://github.com/github/copilot-cli/issues/112, https://github.com/github/copilot-cli/issues/85, https://github.com/github/copilot-cli/issues/40)
362 | - Fixed a bug where pressing down arrow in a multi-line prompt would wrap around to the first line (This is on the way to implementing https://github.com/github/copilot-cli/issues/14)
363 | - Added a scrollbar to the `@` file mentioning picker and increased the size of the active buffer to 10 items
364 | - Improved the experience of writing prompts while the agent is running -- up/down arrows will now correctly navigate between options in the `@` and `/` menus
365 |
366 | ## 0.0.330 - 2025-09-29
367 |
368 | - Changed the default model back to Sonnet 4 since Sonnet 4.5 hasn't rolled out to all users yet. Sonnet 4.5 is still available from the `/model` slash command
369 |
370 | ## 0.0.329 - 2025-09-29
371 |
372 | - Added support for [Claude Sonnet 4.5](https://github.blog/changelog/2025-09-29-anthropic-claude-sonnet-4-5-is-in-public-preview-for-github-copilot/) and made it the default model
373 | - Added `/model` slash command to easily change the model (fixes https://github.com/github/copilot-cli/issues/10)
374 | - `/model` will open a picker to change the model
375 | - `/model ` will set the model to the parameter provided
376 | - Added display of currently selected model above the input text box (Addresses feedback in https://github.com/github/copilot-cli/issues/120, https://github.com/github/copilot-cli/issues/108, )
377 | - Improved error messages when users provide incorrect command-line arguments. (Addresses feedback of the discoverability of non-interactive mode from https://github.com/github/copilot-cli/issues/96)
378 | - Changed the behavior of `Ctrl+r` to expand only recent timeline items. After running `Ctrl+r`, you can use `Ctrl+e` to expand all
379 | - Improved word motion logic to better detect newlines: using word motion keys will now correctly move to the first word on a line
380 | - Improved the handling of multi-line inputs in the input box: the input text box is scrollable, limited to 10 lines. Long prompts won't take up the whole screen anymore! (This is on the way to implementing https://github.com/github/copilot-cli/issues/14)
381 | - Removed the left and right borders from the input box. This makes it easier to copy text out of it!
382 | - Added glob matching to shell rules. When using `--allow-tool` and `--deny-tool`, you can now specify things like `shell(npm run test:*)` to match any shell commands beginning with `npm run test`
383 | - Improved the `copilot --resume` interface with relative time display, session message count, (Fixes https://github.com/github/copilot-cli/issues/97)
384 |
385 | ## 0.0.328 - 2025-09-26
386 |
387 | - Improved error message received when Copilot CLI is blocked by organization policy (fixes https://github.com/github/copilot-cli/issues/18 )
388 | - Improved the error message received when using a PAT that is missing the "Copilot Requests" permission (fixes https://github.com/github/copilot-cli/issues/46 )
389 | - Improved the output of `/user list` to make it clearer which is the current user
390 | - Improved PowerShell parsing of `ForEach-Object` and detection of command name expressions (e.g.,`& $someCommand`)
391 |
--------------------------------------------------------------------------------