Skip to main content

GitHub Copilot in VS Code

GitHub Copilot is an AI-powered coding assistant deeply integrated into Visual Studio Code. It goes far beyond simple code completion - it's a comprehensive development companion that can understand your codebase, follow your team's conventions, and adapt to your specific workflow through powerful customization features.

Core Capabilities

1. Inline Code Completions

Get intelligent code suggestions as you type, from single lines to complete function implementations. Copilot analyzes your current file, open tabs, and project context to provide relevant suggestions.

Key Features:

  • Multi-line completions: Complete functions, classes, and complex logic blocks
  • Next edit predictions: Suggests the next logical code change based on your editing pattern
  • Context-aware: Uses file imports, types, and nearby code for better suggestions
  • Multiple suggestions: Cycle through alternatives with Alt+] and Alt+[

2. Agent Mode (Autonomous Coding)

Agent mode transforms Copilot into an autonomous coding agent that can independently plan and execute complex, multi-step development tasks. It can read files, run terminal commands, install dependencies, and coordinate changes across your entire codebase.

What Agent Mode Can Do:

  • Implement complete features from high-level descriptions
  • Refactor entire codebases or migrate between frameworks
  • Debug issues by reading logs, analyzing code, and applying fixes
  • Set up new projects with proper configuration and dependencies
  • Run tests, analyze failures, and implement fixes

How to Use:

  1. Open Chat view (⌃⌘I or Ctrl+Alt+I)
  2. Select Agent from the chat mode dropdown
  3. Describe your task: "Implement user authentication with JWT tokens"
  4. Agent mode will create a plan, execute it, and iterate until complete

3. Chat Interfaces

Chat View (⌃⌘I): Persistent sidebar for ongoing conversations

  • Ask questions about your codebase
  • Request multi-file changes
  • Review and accept code suggestions
  • Switch between different chat modes

Inline Chat (⌘I): Quick edits without leaving your code

  • Select code and ask for changes
  • Preview diffs before accepting
  • Perfect for refactoring and quick fixes

4. Smart Actions

AI-enhanced actions integrated throughout VS Code:

  • Fix with Copilot: Click lightbulb on errors for AI fixes
  • Explain This: Right-click any code for detailed explanations
  • Generate Tests: Auto-create unit tests for functions/classes
  • Generate Docs: Create documentation from code
  • Semantic Search: Find code by describing what it does, not just keywords
  • Commit Message Generation: Auto-write descriptive commit messages
  • PR Description Generation: Create comprehensive pull request descriptions
  • Smart Rename: Rename symbols with context-aware suggestions

Advanced Customization

Custom Instructions

Instructions are persistent rules that shape how Copilot generates code. They ensure consistency across your team and enforce your coding standards.

Organization Options:

  1. Single file: .github/copilot-instructions.md - Automatically applies to all chat requests in the workspace
  2. Multiple files: *.instructions.md - Created for specific tasks or file patterns, stored in .github/instructions/ folder

Complete Setup Example:

project/
├── .github/
│ ├── copilot-instructions.md # Single file option (applies to all)
│ ├── instructions/
│ │ ├── general.instructions.md # Project-wide standards
│ │ ├── api-guidelines.instructions.md # API-specific rules
│ │ ├── component-standards.instructions.md # UI component rules
│ │ └── testing-conventions.instructions.md # Testing practices
│ ├── prompts/
│ │ └── create-api-endpoint.prompt.md
│ └── chatmodes/
│ └── architect.chatmode.json
└── .vscode/
└── mcp.json

Example Instructions:

.github/instructions/general.instructions.md:

---
applyTo: "**"
---

# Project Coding Standards

- Use TypeScript strict mode for all files
- Prefer functional components with hooks over class components
- Always include error handling in async functions
- Write descriptive variable names
- Add JSDoc comments to all public functions
- Every component must have a test file

.github/instructions/api-guidelines.instructions.md:

---
applyTo: "src/api/**/*.ts"
---

# API Layer Standards

- All endpoints must validate input with Zod schemas
- Use proper HTTP status codes (200, 201, 400, 401, 403, 404, 500)
- Implement rate limiting on all public endpoints
- Log all errors with request context
- Return consistent error response format

Key Features:

  • Use applyTo frontmatter to target specific file patterns (e.g., "**/*.py", "src/api/**/*.ts")
  • Instructions automatically apply based on the file you're working on
  • Copilot merges all applicable instructions for context
  • Workspace files in .github/instructions/ apply only to that workspace
  • User profile instructions apply across all your workspaces
  • Share via version control for team consistency

Custom Prompts (.prompt.md files)

Prompts are reusable, executable instructions for specific tasks. They show up as / commands in Copilot Chat, making complex workflows simple and repeatable.

Creating a Custom Prompt:

.github/prompts/create-api-endpoint.prompt.md:

---
title: Create API Endpoint
description: Generate a complete REST API endpoint with validation, error handling, and tests
---

Create a new API endpoint with the following requirements:

1. **Endpoint Details**: Ask the user for:
- HTTP method (GET, POST, PUT, DELETE)
- Route path
- Request body schema (if applicable)
- Response schema

2. **Implementation Requirements**:
- Create endpoint handler in `src/api/endpoints/`
- Add Zod schema for request validation in `src/api/schemas/`
- Implement business logic in appropriate service file
- Add route registration in `src/api/routes.ts`
- Include proper error handling
- Add TypeScript types

3. **Testing**:
- Create integration test in `src/api/__tests__/`
- Test success cases
- Test validation errors
- Test authentication/authorization if required

4. **Documentation**:
- Add JSDoc comments
- Update API documentation in `docs/api/`
- Include example request/response

Follow project coding standards from copilot-instructions.md.

Using Custom Prompts:

In Copilot Chat, type / to see all available prompts:

/create-api-endpoint
/create-react-component
/add-database-migration
/generate-test-suite

Custom Chat Modes (.chatmode.json)

Chat modes define specialized AI personas with specific capabilities, tools, and contexts. They let you create focused environments for different types of work.

Creating a Chat Mode:

.github/chatmodes/architect.chatmode.json:

{
"name": "architect",
"description": "Senior architect focused on system design and architecture decisions",
"instructions": "You are a senior software architect. Focus on high-level design, scalability, maintainability, and best practices. When discussing solutions, consider trade-offs and explain architectural decisions.",
"tools": ["readFile", "listFiles", "searchFiles"],
"context": {
"includePatterns": ["**/*.md", "**/*.json", "**/README*"],
"excludePatterns": ["**/node_modules/**", "**/dist/**"]
}
}

.github/chatmodes/security-reviewer.chatmode.json:

{
"name": "security-reviewer",
"description": "Security expert for code review and vulnerability assessment",
"instructions": "You are a security expert. Review code for vulnerabilities, security best practices, and potential attack vectors. Focus on: SQL injection, XSS, CSRF, authentication, authorization, data exposure, and dependency vulnerabilities.",
"tools": ["readFile", "searchFiles", "executeCommand"],
"context": {
"includePatterns": ["src/**/*.ts", "src/**/*.tsx"]
}
}

Using Chat Modes:

Select from the chat mode dropdown in the Chat view to switch contexts:

  • Ask: General questions and help
  • Edit: Make changes to code
  • Agent: Autonomous task execution
  • Architect: (Custom) System design discussions
  • Security Reviewer: (Custom) Security-focused reviews

Language Model Selection

Choose the right model for each task:

Fast Models (GPT-4o, Claude 3.5 Sonnet):

  • Code completions
  • Quick questions
  • Simple refactoring
  • Fast iterations

Reasoning Models (o1, o1-mini):

  • Complex algorithms
  • Architectural decisions
  • Debugging difficult issues
  • Performance optimization

Specialized Models:

  • GitHub Models: Direct access to various providers
  • Bring Your Own Key: Connect Azure OpenAI, Anthropic, etc.
  • Local Models: Use Ollama or LM Studio for offline work

Switch models via the model picker in Chat view or set defaults in settings.

MCP Servers & Tool Extensions

Extend Copilot with external capabilities through Model Context Protocol (MCP) servers:

Setting up MCP Servers:

.vscode/mcp.json:

{
"servers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/"
},
"postgres": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp-postgres"],
"env": {
"DATABASE_URL": "${input:database_url}"
}
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/docs"]
}
}
}

Popular MCP Servers:

  • GitHub MCP: Repository management, issues, PRs, actions
  • Database MCP: Query databases directly from chat
  • Filesystem MCP: Access external documentation
  • REST API MCP: Connect to external APIs
  • Brave Search MCP: Web search capabilities

Using MCP Tools in Agent Mode:

When enabled, agent mode can automatically use MCP tools:

"Create a new GitHub issue for this bug and link it to the current PR"
→ Agent uses GitHub MCP to create issue and update PR

"Query the database for users created in the last 30 days"
→ Agent uses Postgres MCP to run SQL query

Advanced Features

Inline Prompt Variables

Use variables in chat for dynamic prompts:

  • #file: Reference specific files
  • #selection: Current selection
  • #editor: Active editor content
  • #terminalLastCommand: Last terminal command
  • #terminalSelection: Selected terminal text

Example:

"Explain #selection in the context of #file:src/auth/login.ts"

Best Practices

Writing Effective Instructions

Do:

  • Be specific and actionable
  • Provide concrete examples
  • Explain the "why" behind rules
  • Use applyTo patterns to target specific files

Don't:

  • Write vague guidelines like "write good code"
  • Create conflicting rules across instruction files
  • Include too many unrelated concerns in one file

Optimizing Prompts

Do:

  • Start with the task goal
  • List specific requirements
  • Include success criteria
  • Reference project standards

Don't:

  • Write overly long prompts (keep under 500 words)
  • Assume context - be explicit
  • Mix multiple unrelated tasks

Team Collaboration

Share customizations via version control:

  1. Commit .instructions.md files to .github/instructions/ folder
  2. Use .github/copilot-instructions.md for simple project-wide instructions
  3. Document available prompts in team README
  4. Create chat modes for common workflows
  5. Share MCP server configurations by committing .vscode/mcp.json

External Documentation