Skip to content

GitHub Copilot API wrapper to make it OpenAI compatible

License

Notifications You must be signed in to change notification settings

ericc-ch/copilot-api

Repository files navigation

Copilot API

⚠️ EDUCATIONAL PURPOSE ONLY ⚠️ This project is a reverse-engineered implementation of the GitHub Copilot API created for educational purposes only. It is not officially supported by GitHub and should not be used in production environments.

ko-fi

Project Overview

A wrapper around GitHub Copilot API to make it OpenAI compatible, making it usable for other tools like AI assistants, local interfaces, and development utilities.

Demo

copilot-api-demo.mp4

Prerequisites

  • Bun (>= 1.2.x)
  • GitHub account with Copilot subscription (Individual or Business)

Installation

To install dependencies, run:

bun install

Using with docker

Build image

docker build -t copilot-api .

Run the container

docker run -p 4141:4141 copilot-api

Using with npx

You can run the project directly using npx:

npx copilot-api@latest start

With options:

npx copilot-api@latest start --port 8080

For authentication only:

npx copilot-api@latest auth

Command Structure

Copilot API now uses a subcommand structure with two main commands:

  • start: Start the Copilot API server (default command)
  • auth: Run GitHub authentication flow without starting the server

Command Line Options

Start Command Options

The following command line options are available for the start command:

Option Description Default Alias
--port Port to listen on 4141 -p
--verbose Enable verbose logging false -v
--business Use a business plan GitHub account false none
--manual Enable manual request approval false none
--rate-limit Rate limit in seconds between requests none -r
--wait Wait instead of error when rate limit is hit false -w
--github-token Provide GitHub token directly none -g

Auth Command Options

Option Description Default Alias
--verbose Enable verbose logging false -v

Example Usage

Using with npx:

# Basic usage with start command
npx copilot-api@latest start

# Run on custom port with verbose logging
npx copilot-api@latest start --port 8080 --verbose

# Use with a Business GitHub account
npx copilot-api@latest start --business

# Enable manual approval for each request
npx copilot-api@latest start --manual

# Set rate limit to 30 seconds between requests
npx copilot-api@latest start --rate-limit 30

# Wait instead of error when rate limit is hit
npx copilot-api@latest start --rate-limit 30 --wait

# Provide GitHub token directly
npx copilot-api@latest start --github-token ghp_YOUR_TOKEN_HERE

# Run only the auth flow
npx copilot-api@latest auth

# Run auth flow with verbose logging
npx copilot-api@latest auth --verbose

Note: For backward compatibility, if no subcommand is provided, the start command will be used as default.

Running from Source

The project can be run from source in several ways:

Development Mode

bun run dev

Production Mode

bun run start

Usage Tips

  • Consider using free models (e.g., Gemini, Mistral, Openrouter) as the weak-model
  • Use architect mode sparingly
  • Disable yes-always in your aider configuration
  • Be mindful that Claude 3.7 thinking mode consumes more tokens
  • Enable the --manual flag to review and approve each request before processing
  • If you have a GitHub Business account with Copilot, use the --business flag

Manual Request Approval

When using the --manual flag, the server will prompt you to approve each incoming request:

? Accept incoming request? › (y/N)

This helps you control usage and monitor requests in real-time.

Roadmap

  • Manual authentication flow
  • Manual request approval system
  • Rate limiting implementation
  • Token counting
  • Enhanced error handling and recovery