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
21 changes: 20 additions & 1 deletion website/src/content/docs/learning-hub/automating-with-hooks.md
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-07-13
lastUpdated: 2026-07-21
estimatedReadingTime: '8 minutes'
tags:
- hooks
Expand Down Expand Up @@ -369,6 +369,25 @@ Run ESLint after the agent finishes responding and block if there are errors:

If the lint command exits with a non-zero status, the action is blocked.

#### Preventing agentStop loops (v1.0.72+)

An `agentStop` hook that **always blocks** would previously cause the CLI to loop indefinitely. Starting with v1.0.72, the CLI automatically ends the turn after **8 consecutive blocks** and passes a `stop_hook_active` flag to the hook input, so your script can detect a forced continuation and self-limit.

```bash
#!/usr/bin/env bash
# scripts/lint-and-stop.sh
INPUT=$(cat)

# Detect forced continuation — skip the blocking check to avoid looping
if echo "$INPUT" | jq -e '.stop_hook_active == true' > /dev/null 2>&1; then
exit 0
fi

npx eslint . --max-warnings 0
```

This pattern lets your `agentStop` hook enforce quality checks without locking the agent in an infinite retry loop.

### Security Gating with preToolUse

Block dangerous commands before they execute. Use the `matcher` field to target only the `bash` tool, so the hook doesn't fire for file edits or other tools:
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-07-13
lastUpdated: 2026-07-21
estimatedReadingTime: '8 minutes'
tags:
- plugins
Expand Down Expand Up @@ -182,6 +182,31 @@ Pinning to a SHA guarantees that everyone on the team installs plugins from exac
- **Change control** — review and approve plugin updates before rolling them out team-wide
- **Stability** — prevent breaking changes in upstream marketplaces from impacting your team without notice

## Installing Skills Directly (v1.0.72+)

As of v1.0.72, you can install individual skills without creating or installing a full plugin. This is useful when you find a single useful skill and don't want to install an entire plugin:

```bash
# Install a skill from a local directory
copilot plugins install --skill ./path/to/my-skill/

# Install a skill from a URL
copilot plugins install --skill https://raw.githubusercontent.com/owner/repo/main/skills/my-skill/SKILL.md

# Install a skill into the current project (repository scope)
copilot plugins install --skill ./path/to/my-skill/ --scope project
```

Or from within an interactive session:

```
/plugins install --skill https://example.com/skills/my-skill/SKILL.md
```

Skills installed this way are available immediately and appear in `copilot skill list`. Use `copilot plugins remove --skill <name>` to uninstall them.

> **Tip**: Skills from this repository can be installed individually this way. Browse the [Skills Directory](../../skills/) for available skills and use the raw GitHub URL of a skill's `SKILL.md` to install it directly.

## Installing Plugins

### From Copilot CLI
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: 'Working with Canvas Extensions'
description: 'Create and iterate on GitHub Copilot app canvases using /create-canvas, then shape them into reusable project or personal extensions.'
authors:
- GitHub Copilot Learning Hub Team
lastUpdated: 2026-06-17
lastUpdated: 2026-07-21
estimatedReadingTime: '8 minutes'
tags:
- copilot-app
Expand All @@ -14,14 +14,16 @@ relatedArticles:
- ./agents-and-subagents.md
- ./using-copilot-coding-agent.md
prerequisites:
- Access to the GitHub Copilot app
- Access to the GitHub Copilot app or GitHub Copilot CLI (v1.0.71+)
- Basic familiarity with GitHub Copilot agent sessions
---

Canvas extensions give you shared, interactive work surfaces inside the GitHub Copilot app. Instead of keeping all progress in chat, you can move work into a visible artifact (such as a board, document, checklist, or browser-oriented surface) that both people and agents can update.
Canvas extensions give you shared, interactive work surfaces inside the GitHub Copilot app and GitHub Copilot CLI. Instead of keeping all progress in chat, you can move work into a visible artifact (such as a board, document, checklist, or browser-oriented surface) that both people and agents can update.

This guide explains what canvases can do, how to create one with `/create-canvas`, and how to use patterns from this repository as reference implementations.

> **CLI support (v1.0.71+)**: Canvas extensions are now available in the GitHub Copilot CLI in addition to the Copilot app. Create and interact with canvases directly from terminal sessions — the same `/create-canvas` skill and extension structure work across both surfaces.

## What canvases can do

A canvas is a bidirectional surface:
Expand Down