skills/copilot-cli-agent-customization/SKILL.md
**WORKFLOW SKILL** — Create, update, review, fix, or debug Copilot CLI customization files (`copilot-instructions.md`, `AGENTS.md`, `*.instructions.md`, `*.agent.md`, `SKILL.md`, hook JSON, `plugin.json`, and plugin command files). USE FOR: authoring terminal-first customization workflows; troubleshooting why CLI instructions, skills, agents, hooks, or plugins are ignored; configuring `applyTo` and `excludeAgent`; defining CLI tool restrictions; creating custom agents or command packs; packaging reusable CLI customizations. DO NOT USE FOR: general coding questions; non-customization runtime debugging; Copilot in VS Code customization (use `copilot-vscode-agent-customization` instead); MCP server configuration; VS Code prompt files or extension development. INVOKES: file system tools, ask-questions tool, subagents for codebase exploration. FOR SINGLE OPERATIONS: For quick YAML or JSON fixes, or for creating one known file from a clear pattern, edit directly instead of loading the full skill.
npx skillsauth add arisng/github-copilot-fc copilot-cli-agent-customizationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Primitive | When to Use |
|-----------|-------------|
| Workspace Instructions | Always-on defaults for the repository or your personal CLI environment |
| File Instructions | Explicit via applyTo, scoped by excludeAgent, or discovered on demand from description |
| MCP | Connect external systems, APIs, or data sources; use MCP-specific docs for server setup |
| Hooks | Deterministic shell commands at lifecycle points like preToolUse or postToolUse |
| Custom Agents | Specialized personas, tool restrictions, or CLI orchestration workflows |
| Commands / Plugins | Reusable terminal shortcuts, distributed command packs, or bundled CLI customizations |
| Skills | On-demand workflows with bundled references, scripts, and reusable operational context |
Consult the reference docs for templates, path rules, CLI-only frontmatter, hook schema details, plugin packaging, and troubleshooting steps. If the references are not enough, load the official GitHub Copilot CLI documentation for the relevant primitive.
| Type | File | Location | Reference |
|------|------|----------|-----------|
| Workspace Instructions | copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md | .github/, repo root, or CLI instruction roots | Link |
| File Instructions | *.instructions.md | .github/instructions/ or roots listed in COPILOT_CUSTOM_INSTRUCTIONS_DIRS | Link |
| Commands / Plugins | plugin.json, commands/*.md | plugins/cli/<name>/ | Link |
| Hooks | *.json | .github/hooks/ | Link |
| Custom Agents | *.agent.md | .github/agents/ or ~/.copilot/agents/ | Link |
| Skills | SKILL.md | .github/skills/<name>/ or ~/.copilot/skills/<name>/ | Link |
User-level CLI: ~/.copilot/copilot-instructions.md, ~/.copilot/agents/, and ~/.copilot/skills/ are the main personal discovery locations. COPILOT_CUSTOM_INSTRUCTIONS_DIRS can add extra instruction roots. Hooks are repo-scoped from the current working directory.
If you need to explore or validate existing patterns in the codebase, use a read-only subagent. If the ask-questions tool is available, use it to lock naming, scope, and packaging choices before editing multiple files.
Follow these steps when creating any Copilot CLI customization file.
Ask where the customization belongs:
.github/ or repo-managed plugin directories~/.copilot/plugins/cli/<name>/Use the Decision Flow above to pick the narrowest CLI surface that fits the request.
Create the file directly at the appropriate path:
commands or skills instead of .prompt.mdSKILL.md lean and push detailed material into references/After creating:
description is present and keyword-richdisable-model-invocation, excludeAgent, hook event names, plugin fields) are valid for the chosen primitiveInstructions vs Skill? If it should affect most work or all matching files, use instructions. If it is an on-demand workflow, use a skill.
Skill vs Command / Plugin? Use a command or plugin command for a lightweight terminal shortcut. Use a skill when the workflow needs bundled references, scripts, or a larger reusable capability.
Command / Plugin vs Custom Agent? Use a command when the user starts a focused workflow directly. Use a custom agent when you need a persistent persona, isolated tool restrictions, or a reusable specialist that other agents can delegate to.
Skill vs Custom Agent? Use a skill when one workflow can run with the same capabilities throughout. Use a custom agent when you need context isolation or a specialist identity with specific CLI tool access.
Hooks vs Instructions? Instructions guide the model. Hooks enforce behavior with deterministic shell commands. If the behavior must always happen, use a hook.
AGENTS.md vs copilot-instructions.md? In Copilot CLI they are additive, not mutually exclusive. Use both only when their responsibilities are clearly separated.
agents:, or argument-hint:, stop and use copilot-vscode-agent-customization instead..prompt.md, VS Code custom-agent schema, or editor-only UX from this skill; keep this skill focused on CLI paths, CLI hooks, CLI agents, and commands/plugins.Description is the discovery surface. description is how the agent decides whether to load a skill, instruction, or agent. Include trigger phrases and "Use when..." wording.
.prompt.md does not port to CLI. Prompt files are IDE-only. For terminal-first reuse, prefer plugin commands or skills.
Do not copy VS Code-only schema into CLI. agents: and argument-hint: belong to VS Code custom agents, not CLI agents. CLI hooks also use a different schema and lowercase event names.
CLI instruction loading is additive. Copilot CLI can load .github/copilot-instructions.md and AGENTS.md together. Do not teach a fake "choose one" rule as a product constraint.
Plugin changes are not live. After editing plugin files, rebuild or reinstall the plugin so Copilot CLI picks up the new bundle contents.
Avoid broad applyTo defaults. applyTo: "**" loads everywhere and burns context. Use focused globs unless the instruction truly belongs in every request.
devops
Programmatically create tldraw whiteboards and visualize them with a self-hosted tldraw instance. Create boards with shapes, text, and connectors, then deploy to a self-hosted server for collaborative editing and gallery management.
tools
Execute Google Cloud Platform operations using the gcloud CLI (and gsutil/bq where applicable). Use when the user wants to: authenticate with GCP, manage GCP resources, deploy applications, configure projects or IAM, view logs, run SQL/BigQuery, or interact with any GCP service from the command line. Triggers on phrases like "gcloud", "Google Cloud CLI", "deploy to GCP", "create a VM", "Cloud Run", "GKE cluster", "Cloud Storage bucket", "set GCP project", "service account", "Cloud Functions", "App Engine deploy", or any request to manage Google Cloud resources via command line.
testing
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.
development
Session-scoped git commit orchestrator that commits only current-session changes and leaves unrelated dirty worktree edits untouched. Inherits git-atomic-commit for atomic grouping and commit message execution, and git-commit-scope-constitution for scope governance and validation. Use when asked to commit this session only or isolate commits from mixed worktree state.