Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: 'Automating with Hooks'
description: 'Learn how to use hooks to automate lifecycle events like formatting, linting, and governance checks during Copilot agent sessions.'
authors:
- GitHub Copilot Learning Hub Team
lastUpdated: 2026-06-25
lastUpdated: 2026-07-11
estimatedReadingTime: '8 minutes'
tags:
- hooks
Expand Down Expand Up @@ -392,6 +392,8 @@ Block dangerous commands before they execute. Use the `matcher` field to target

The `preToolUse` hook receives JSON input with details about the tool being called. Your script can inspect this input and exit with a non-zero code to **deny** the tool execution, or exit with zero to **approve** it.

> **Exit code 2 for explicit denial** *(v1.0.70+)*: `preToolUse` hooks that exit with code `2` explicitly deny the tool call. Using exit code `2` is the recommended way to signal a deliberate policy block (as opposed to exit code `1`, which signals an unexpected script error). Both non-zero exit codes block the tool, but exit code `2` produces a cleaner, more informative denial message in the timeline.

### Modifying Tool Arguments with preToolUse

Beyond approve/deny, `preToolUse` hooks can also **modify tool arguments** before they are passed to the tool, and inject **additional context** into the agent's reasoning. To do this, write JSON to stdout from your hook script:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: 'Copilot Configuration Basics'
description: 'Learn how to configure GitHub Copilot at user, workspace, and repository levels to optimize your AI-assisted development experience.'
authors:
- GitHub Copilot Learning Hub Team
lastUpdated: 2026-07-07
lastUpdated: 2026-07-11
estimatedReadingTime: '10 minutes'
tags:
- configuration
Expand Down Expand Up @@ -413,6 +413,23 @@ In addition to the main config file, GitHub Copilot CLI reads two optional per-p

These files follow the same format as `config.json` and are loaded after the global config, so they can tailor CLI behaviour—including hook definitions—per repository without touching `.github/`.

**Repository-pinned settings via `.github/copilot/settings.json`** *(v1.0.70+)*: A trusted repository can pin the model, reasoning effort level, and context tier for all sessions in that repository, and extend the URL, MCP server, and skill deny lists, by committing a `.github/copilot/settings.json` file:

```json
{
"model": "claude-sonnet-4.6",
"effortLevel": "high",
"contextTier": "long",
"denyList": {
"urls": ["*.internal.example.com"],
"mcpServers": ["untrusted-server"],
"skills": []
}
}
```

When this file is present, the CLI applies these settings for any session rooted in the repository. This is useful for enforcing consistent AI settings across a team — for example, requiring a specific model for compliance workflows or capping effort level to control costs. The deny lists extend (not replace) your personal deny list configuration.

> **Important (v1.0.36+)**: Custom agents, skills, and commands placed in `~/.claude/` (the Claude Code user directory) are **no longer loaded** by GitHub Copilot CLI. Only `~/.claude/settings.json` is read for configuration. If you previously stored personal agents or skills in `~/.claude/`, move them to the supported locations: `~/.copilot/agents/` for user-level agents, `~/.copilot/skills/` or `~/.agents/skills/` for personal skills, or `.github/agents/` and `.github/skills/` in your repositories for project-level customizations.

### Model Picker
Expand Down Expand Up @@ -592,6 +609,14 @@ The `/ask` command lets you ask a quick question without affecting your conversa
/ask What does the `retry` utility in src/utils do?
```

The `/refine` command *(v1.0.70+)* rewrites a rough, stream-of-consciousness prompt into a clearer, more structured one before sending it. Use it when you have a complex idea but want to improve how you express it to the model:

```
/refine
```

After typing your draft prompt and running `/refine`, the CLI returns a refined version you can edit further or send as-is. This is useful for complex feature requests or architectural discussions where precision matters.

The `/env` command shows all loaded environment details — instructions, MCP servers, skills, agents, and plugins — in a single view. Use it to verify that the right resources are active for the current session:

```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: 'Creating Effective Skills'
description: 'Master the art of writing reusable, shareable skill folders that deliver consistent results across your team.'
authors:
- GitHub Copilot Learning Hub Team
lastUpdated: 2026-06-30
lastUpdated: 2026-07-11
estimatedReadingTime: '9 minutes'
tags:
- skills
Expand Down Expand Up @@ -413,6 +413,10 @@ A: In v1.0.66+, the agent can propose draft skill additions or improvements as i

This opens a review flow where you can accept, reject, or defer each proposed change — giving you full control over how your skill library evolves. No changes are applied until you approve them.

**Q: What is Forge and how does it create skills automatically?**

A: In v1.0.70+, Forge is the CLI's workflow pattern detector. When the CLI observes that you or an agent are repeatedly following a clear workflow pattern — a sequence of steps that keeps recurring across prompts — it automatically creates a **draft skill** capturing that pattern. You then review and approve it with `/chronicle skills review` before it is saved. This makes growing your skill library feel organic: instead of manually authoring skills from scratch, Forge surfaces them from work you are already doing.

## Common Pitfalls to Avoid

- ❌ **Vague description**: "Code helper" doesn't help agents discover the skill
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: 'Installing and Using Plugins'
description: 'Learn how to find, install, and manage plugins that extend GitHub Copilot CLI with reusable agents, skills, hooks, and integrations.'
authors:
- GitHub Copilot Learning Hub Team
lastUpdated: 2026-06-24
lastUpdated: 2026-07-11
estimatedReadingTime: '8 minutes'
tags:
- plugins
Expand Down Expand Up @@ -200,6 +200,29 @@ copilot plugin marketplace update
copilot plugin uninstall my-plugin
```

**`/plugins` dashboard** *(v1.0.69+)*: Inside a Copilot CLI session, run `/plugins` to open an interactive dashboard that shows all installed plugins, their status, and quick actions to enable, disable, or manage them — without leaving your current conversation:

```
/plugins
```

The dashboard is also accessible while the agent is working, so you can inspect or toggle plugins mid-turn. You can also reload installed plugin extensions without restarting the session *(v1.0.69+)*.

**Pinning a plugin to a specific commit SHA** *(v1.0.70+)*: Marketplace plugins can be pinned to an exact commit SHA for reproducible, auditable installations. Add a `sha` field to the plugin source configuration in your plugin settings to lock the plugin to that exact revision:

```json
{
"plugins": {
"my-plugin": {
"source": "awesome-copilot",
"sha": "abc1234def5678..."
}
}
}
```

Pinning to a SHA prevents automatic updates from changing plugin behavior unexpectedly — useful in compliance-sensitive or production environments where you want explicit control over plugin versions.

### Loading Plugins from a Local Directory

You can load plugins directly from a local directory without installing them from a marketplace, using the `--plugin-dir` flag when starting Copilot:
Expand Down