{"owner":"github","repo":"gh-aw","hasSkills":true,"totalSkillsCount":172,"totalTokensCount":66282,"categories":["anthropic-skill","root-instruction","mcp-config","project-spec","subagent-persona","copilot-instructions"],"hasMcp":true,"mcpConfig":{"mcpServers":{"gh-aw":{"command":"npx","args":["-y","@modelcontextprotocol/server-gh-aw"]}}},"found":[".github/skills/checkout-credential-review/SKILL.md",".github/skills/awf-release-integrator/SKILL.md",".squad/templates/skill.md",".github/skills/agentic-workflows/SKILL.md",".claude/skills/playwright-cli/SKILL.md",".github/skills/create-canvas/SKILL.md",".github/skills/copilot-review/SKILL.md",".github/skills/custom-engine-implementation/SKILL.md",".github/skills/console-rendering/SKILL.md",".github/skills/custom-agents/SKILL.md","SKILL.md",".github/skills/debugging-workflows/SKILL.md",".github/skills/developer-code-organization/SKILL.md",".github/skills/developer-internals/SKILL.md",".github/skills/developer-release/SKILL.md",".github/skills/developer-security/SKILL.md",".github/skills/developer/SKILL.md",".github/skills/docs-design/SKILL.md",".github/skills/documentation/SKILL.md",".github/skills/error-messages/SKILL.md",".github/skills/error-pattern-safety/SKILL.md",".github/skills/error-recovery-patterns/SKILL.md",".github/skills/gh-agent-session/SKILL.md",".github/skills/gh-agent-task/SKILL.md",".github/skills/github-copilot-agent-tips-and-tricks/SKILL.md",".github/skills/github-discussion-query/SKILL.md",".github/skills/github-issue-query/SKILL.md",".github/skills/github-labels-query/SKILL.md",".github/skills/github-mcp-server/SKILL.md",".github/skills/github-pr-query/SKILL.md",".github/skills/github-script/SKILL.md",".github/skills/github-workflows-query/SKILL.md",".github/skills/go-codemod/SKILL.md",".github/skills/go-linters/SKILL.md",".github/skills/http-mcp-headers/SKILL.md",".github/skills/issue-markdown/SKILL.md",".github/skills/javascript-refactoring/SKILL.md",".github/skills/jqschema/SKILL.md",".github/skills/messages/SKILL.md",".github/skills/model-routing-golden/SKILL.md",".github/skills/npm/SKILL.md",".github/skills/open-pull-request/SKILL.md",".github/skills/operational-value-designer/SKILL.md",".github/skills/optimize-agentic-workflow/SKILL.md",".github/skills/otel-queries/SKILL.md",".github/skills/pr-finisher/SKILL.md",".github/skills/pr-to-go-linter/SKILL.md",".github/skills/prompt-token-efficiency/SKILL.md",".github/skills/reporting/SKILL.md",".github/skills/resolve-merge-conflicts/SKILL.md",".github/skills/restricted-tool-triage/SKILL.md",".github/skills/review-agentic-workflows/SKILL.md",".github/skills/security-advisory-compat-enforcer/SKILL.md",".github/skills/sergo-examples/SKILL.md",".github/skills/skillz-integration/SKILL.md",".github/skills/ssl/SKILL.md",".github/skills/statistics-infographic/SKILL.md",".github/skills/temporary-id-safe-output/SKILL.md",".github/skills/workflow-step-summaries/SKILL.md",".squad/templates/skills/agent-collaboration/SKILL.md",".squad/templates/skills/agent-conduct/SKILL.md",".squad/templates/skills/architectural-proposals/SKILL.md",".squad/templates/skills/ci-validation-gates/SKILL.md",".squad/templates/skills/cli-wiring/SKILL.md",".squad/templates/skills/client-compatibility/SKILL.md",".squad/templates/skills/coordinator-init-mode/SKILL.md",".squad/templates/skills/coordinator-response-mode/SKILL.md",".squad/templates/skills/coordinator-source-of-truth/SKILL.md",".squad/templates/skills/cross-machine-coordination/SKILL.md",".squad/templates/skills/cross-squad-communication/SKILL.md",".squad/templates/skills/cross-squad/SKILL.md",".squad/templates/skills/distributed-mesh/SKILL.md",".squad/templates/skills/docs-standards/SKILL.md",".squad/templates/skills/e2e-template-testing/SKILL.md",".squad/templates/skills/economy-mode/SKILL.md",".squad/templates/skills/error-recovery/SKILL.md",".squad/templates/skills/external-comms/SKILL.md",".squad/templates/skills/fact-checking/SKILL.md",".squad/templates/skills/gh-auth-isolation/SKILL.md",".squad/templates/skills/git-workflow/SKILL.md",".squad/templates/skills/github-multi-account/SKILL.md",".squad/templates/skills/history-hygiene/SKILL.md",".squad/templates/skills/humanizer/SKILL.md",".squad/templates/skills/init-mode/SKILL.md",".squad/templates/skills/iterative-retrieval/SKILL.md",".squad/templates/skills/model-selection/SKILL.md",".squad/templates/skills/nap/SKILL.md",".squad/templates/skills/notification-routing/SKILL.md",".squad/templates/skills/personal-squad/SKILL.md",".squad/templates/skills/pr-review-response/SKILL.md",".squad/templates/skills/pr-screenshots/SKILL.md",".squad/templates/skills/project-conventions/SKILL.md",".squad/templates/skills/ralph-two-pass-scan/SKILL.md",".squad/templates/skills/reflect/SKILL.md",".squad/templates/skills/release-process/SKILL.md",".squad/templates/skills/reskill/SKILL.md",".squad/templates/skills/retro-enforcement/SKILL.md",".squad/templates/skills/reviewer-protocol/SKILL.md",".squad/templates/skills/secret-handling/SKILL.md",".squad/templates/skills/session-recovery/SKILL.md",".squad/templates/skills/squad-commands/SKILL.md",".squad/templates/skills/squad-conventions/SKILL.md",".squad/templates/skills/squad-help/SKILL.md",".squad/templates/skills/squad-version-check/SKILL.md",".squad/templates/skills/squad/SKILL.md",".squad/templates/skills/test-discipline/SKILL.md",".squad/templates/skills/tiered-memory/SKILL.md",".squad/templates/skills/versioning-policy/SKILL.md",".squad/templates/skills/windows-compatibility/SKILL.md","AGENTS.md",".github/mcp.json",".squad/routing.md",".vscode/mcp.json","scratchpad/architecture.md",".github/agents/adr-writer.agent.md",".github/agents/agentic-workflows.md",".github/agents/ci-cleaner.agent.md",".github/agents/contribution-checker.agent.md",".github/agents/create-safe-output-type.agent.md",".github/agents/custom-engine-implementation.agent.md",".github/agents/developer.instructions.md",".github/agents/grumpy-reviewer.agent.md",".github/agents/interactive-agent-designer.agent.md",".github/agents/squad.agent.md",".github/agents/technical-doc-writer.agent.md",".github/agents/w3c-specification-writer.agent.md",".squad/templates/copilot-instructions.md","scratchpad/agents/hierarchical-agents-quickstart.md","scratchpad/agents/hierarchical-agents.md",".github/copilot/instructions/build-performance.md",".github/copilot/instructions/ci-performance.md",".github/copilot/instructions/cli-performance.md",".github/copilot/instructions/workflow-performance.md",".github/skills/error-messages/ssl.json",".github/skills/jqschema/ssl.json",".github/skills/reporting/ssl.json",".github/skills/ssl/ssl.json",".squad/agents/Rai/charter.md",".squad/agents/Rai/history.md",".squad/agents/fact-checker/charter.md",".squad/agents/fact-checker/history.md",".squad/agents/fenster/charter.md",".squad/agents/hockney/charter.md",".squad/agents/keaton/charter.md",".squad/agents/kujan/charter.md",".squad/agents/mcmanus/charter.md",".squad/agents/ralph/charter.md",".squad/agents/ralph/history.md",".squad/agents/scribe/charter.md",".squad/agents/scribe/history.md",".squad/agents/verbal/charter.md",".claude/skills/playwright-cli/references/element-attributes.md",".claude/skills/playwright-cli/references/playwright-tests.md",".claude/skills/playwright-cli/references/request-mocking.md",".claude/skills/playwright-cli/references/running-code.md",".claude/skills/playwright-cli/references/session-management.md",".claude/skills/playwright-cli/references/spec-driven-testing.md",".claude/skills/playwright-cli/references/storage-state.md",".claude/skills/playwright-cli/references/test-generation.md",".claude/skills/playwright-cli/references/tracing.md",".claude/skills/playwright-cli/references/video-recording.md",".github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json",".github/skills/agentic-workflows/tests/fixtures.json",".github/skills/statistics-infographic/examples/example.json",".github/skills/statistics-infographic/references/data-contract.md","actions/setup/js/fixtures/evals/runs.json","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md","actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md","actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md"],"skills":{".github/skills/checkout-credential-review/SKILL.md":"---\nname: checkout-credential-review\ndescription: Review code that performs git or gh operations against repository checkouts in gh-aw, checking that the right credentials are available at the right time and that sparseness, shallowness and credential-free factors are properly considered.\n---\n\n# Checkout Credential Review\n\nUse this skill when reviewing or writing code in `pkg/workflow/`, `actions/setup/js/`, or compiled `.lock.yml` workflows that runs `git`, `gh`, or any other remote-touching operation against a repository checkout.\n\n## Background\n\nEach entry in a workflow's `checkout:` block may declare its own credentials (`github-token:`, `github-app:`), and the compiler wires those into the corresponding `actions/checkout` step ([pkg/workflow/checkout_step_generator.go](../../../pkg/workflow/checkout_step_generator.go)). Generated checkouts always set `persist-credentials: false`, so the on-disk repo retains **no** credentials after the step finishes — only `actions/checkout`'s own internal token is used during the clone, and it is scrubbed in its post-step.\n\nA separate step that wants to authenticate later must either (a) re-inject a token at command level (e.g. `git -c http.extraheader=...`) or (b) be passed the per-checkout token via env. The compiler does *not* automatically thread per-checkout `github-token`s into downstream steps.\n\nTwo important contexts deliberately run with **no git credentials**:\n\n- The **safe-outputs MCP server** and its handlers (`generate_git_bundle.cjs`, `generate_git_patch.cjs`, `create_pull_request.cjs`). Errors in these paths explicitly say \"the safe-outputs MCP server has no credentials for private repositories\" — fetch/push will fail for private repos.\n- The **agent runtime** after `actions/checkout`. The agent prompt in [actions/setup/md/safe_outputs_push_to_pr_branch.md](../../../actions/setup/md/safe_outputs_push_to_pr_branch.md) explicitly tells the model not to attempt `git fetch`, `git pull`, `git push`, or any other authenticated git operation, and to report unavailable branches rather than try to fetch them.\n\n## Review checklist\n\nWhen you see a new `git`, `gh`, `execFileSync('git'…)`, or compiled `run:` block:\n\n1. **Does it touch a remote?** Local-only commands (`symbolic-ref`, `rev-parse`, `log`, `show`, `merge-base`, `diff`, `status`) need no credentials. Anything in `fetch | pull | push | clone | ls-remote | remote (set-url|add|update)` does, plus on-demand blob fetches in partial clones.\n2. **Which checkout is it operating on?** If it's a cross-repo entry from `checkout:`, the relevant credential is *that entry's* `github-token`, not the workflow's default `GITHUB_TOKEN`. Confirm the per-entry token is actually threaded into the step's env (or refuse to do remote operations and degrade gracefully).\n3. **Which job/context emits it?** Agent job and safe-outputs MCP server both run without git credentials by design. Any remote git operation there must be wrapped in `try/catch`, fail soft, and surface a clear \"no credentials\" error rather than a raw git stderr.\n4. **Sparse / shallow / monorepo concerns.** Avoid emitting steps that deepen (`git fetch --unshallow`, `--deepen=N`) or widen (`git fetch origin '+refs/heads/*'`) a sparse or shallow checkout of a large monorepo — these need credentials *and* can pull hundreds of MB. Prefer expanding `fetch:` / `fetch-depth:` / `sparse-checkout:` at compile time so it happens during `actions/checkout` with its internal token, never later.\n5. **`gh` is REST, not git.** `gh api …` uses whatever `GH_TOKEN` is in the step's env — it does **not** automatically inherit per-checkout PATs. For cross-org private repos, either thread the right token in or accept the call will 404 and handle it.\n\n## Related\n\n- [docs/src/content/docs/reference/checkout.md](../../../docs/src/content/docs/reference/checkout.md) — \"Git Credentials After Checkout\"\n- [docs/sparseness.md](../../../docs/sparseness.md) — sparse/blobless credential lifecycle\n- [pkg/workflow/checkout_step_generator.go](../../../pkg/workflow/checkout_step_generator.go) — token wiring per checkout\n- [actions/setup/md/safe_outputs_push_to_pr_branch.md](../../../actions/setup/md/safe_outputs_push_to_pr_branch.md) — agent-facing guidance\n",".github/skills/awf-release-integrator/SKILL.md":"---\nname: awf-release-integrator\ndescription: Upgrade gh-aw to latest gh-aw-firewall release and identify follow-up spec tasks.\n---\n\n# AWF Release Integrator\n\nUse this skill when updating `github/gh-aw` to a newer `github/gh-aw-firewall` release.\n\n## Goal\n\nLand the version bump cleanly, rebuild the generated artifacts, and review upstream release/spec changes for any follow-up work that should accompany the bump.\n\n## Required sources\n\nConsult these sources before editing anything:\n\n1. The latest `github/gh-aw-firewall` release metadata and body.\n2. The current gh-aw version pins in `pkg/constants/version_constants.go`.\n3. The canonical AWF config sources spec in `specs/awf-config-sources-spec.md`.\n4. The embedded AWF schema in `pkg/workflow/schemas/awf-config.schema.json`.\n5. AWF config integration code in:\n   - `pkg/workflow/awf_config.go`\n   - `pkg/workflow/awf_config_build.go`\n   - `pkg/workflow/awf_config_schema.go`\n   - `pkg/workflow/awf_config_policy.go`\n   - `pkg/workflow/awf_helpers.go`\n   - related AWF tests under `pkg/workflow/`\n\nFor upstream spec review, compare these files from the target `github/gh-aw-firewall` release or tag:\n\n- `docs/awf-config-spec.md`\n- `docs/awf-config.schema.json`\n- `src/awf-config-schema.json`\n- any release assets such as `awf-config.schema.json`\n\n## Update procedure\n\n1. Read `pkg/constants/version_constants.go` and record:\n   - `DefaultFirewallVersion`\n   - every `AWF*MinVersion` constant\n2. Look up the latest `github/gh-aw-firewall` release.\n3. If the latest release tag matches `DefaultFirewallVersion`, report that no version bump is needed and only continue with spec/release-note review if explicitly requested.\n4. If a newer release exists, update the gh-aw pins:\n   - bump `DefaultFirewallVersion`\n   - update any `AWF*MinVersion` constants that must move because the new release introduces or changes gated flags/features\n5. Review release notes for:\n   - new flags\n   - removed or deprecated flags\n   - schema/config additions\n   - security fixes\n   - behavioral changes that could require new tests, docs, or ADR/spec updates\n6. Review the upstream AWF specification and schema changes against:\n   - `pkg/workflow/schemas/awf-config.schema.json`\n   - `specs/awf-config-sources-spec.md`\n   - local AWF config generation and validation code\n7. Update any directly related gh-aw files needed for a complete integration, such as:\n   - embedded schema copies\n   - version-gated helpers/tests\n   - specs or ADRs documenting newly surfaced AWF behavior\n8. Add or update a patch changeset when the bump changes shipped behavior.\n\n## Required validation\n\nAfter editing, run the full AWF rebuild flow exactly in this order. The second\n`make recompile` is required to refresh image SHA pins resolved during the first pass.\n\n```bash\nmake build\nmake recompile\nmake recompile\n```\n\nThen run focused validation for any touched Go code or schema logic, especially AWF-related tests.\n\n## Expected output\n\nSummarize:\n\n- current gh-aw AWF version → target release\n- updated constants\n- release-note highlights\n- specification/schema differences reviewed\n- additional recommended follow-up updates that are not yet implemented\n\n## Review heuristics\n\nWhen deciding whether more than a version bump is needed, specifically check for:\n\n- new AWF schema properties not represented in gh-aw\n- new CLI flags that need `AWF*MinVersion` gates\n- config fields present in schema but absent from gh-aw generation/validation\n- drift that should update `specs/awf-config-sources-spec.md`\n- tests whose expected pinned AWF version or schema URLs need refresh\n",".squad/templates/skill.md":"---\nname: \"{skill-name}\"\ndescription: \"{what this skill teaches agents}\"\ndomain: \"{e.g., testing, api-design, error-handling}\"\nconfidence: \"low|medium|high\"\nsource: \"{how this was learned: manual, observed, earned}\"\ntools:\n  # Optional — declare MCP tools relevant to this skill's patterns\n  # - name: \"{tool-name}\"\n  #   description: \"{what this tool does}\"\n  #   when: \"{when to use this tool}\"\n---\n\n## Context\n{When and why this skill applies}\n\n## Patterns\n{Specific patterns, conventions, or approaches}\n\n## Examples\n{Code examples or references}\n\n## Anti-Patterns\n{What to avoid}\n",".github/skills/agentic-workflows/SKILL.md":"---\nname: agentic-workflows\ndescription: Route gh-aw design, creation, diagnosis, patching, active debugging, and upgrade requests to the right strategies.\n---\n\n# Agentic Workflows Router\n\nUse this skill when a user asks to design, create, update, debug, or upgrade GitHub Agentic Workflows in this repository.\n\nThis skill is a dispatcher: identify the task type, load the matching workflow prompt/skill file, and follow it directly. Keep responses concise and ask a clarifying question if the correct prompt is unclear.\n\nFor debugging sessions needing CLI setup or run-URL scoping, first load\n`https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/debug-bootstrap.md`; it bootstraps\nthe same shared strategy used by the debugging routes below.\n\nDebugging, incident, health, and failure-related optimization requests use the\nbootstrap's intent routing before generic update, upgrade, or optimization routes,\neven when the CLI is installed. Preserve the supplied guidance repository/ref\nfor all debugging links and public raw fallbacks; URLs showing `main` below are\ndefaults only when no guidance revision is supplied. Reuse already-loaded guides.\nThe intent index is `.github/aw/debug-scenarios.md`; load only the selected\nspecialized route, not every debugging reference.\n\nRepository overlay (optional):\n- Load the target repository's `.github/aw/instructions.md`, if present, after the matched prompt/skill. Use `@.github/aw/instructions.md` only in a matching checkout; do not substitute a guidance-repository overlay.\n- Precedence: repository overlay instructions override upstream defaults when they conflict.\n\nRead only the files you need:\nUse a local guidance checkout only when its repository/ref matches the requested guidance; otherwise use the resolved guidance repository/ref (default `github/gh-aw`).\nIf GitHub API, `gh api`, or GitHub MCP downloads return HTTP 403 (including a token SAML-authorized for a different organization), do not retry with the same token. Fetch the public file without authentication from `https://raw.githubusercontent.com/github/gh-aw/main/<path>` instead, preserving its repository-relative path (including `.github/`). For example: `curl --fail --silent --show-error --location 'https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/create-agentic-workflow.md'`. Use the same fallback for referenced instructions and `SKILL.md` files; never send an Authorization header or token to the raw URL. If the public download fails, report that error rather than proceeding without the required instructions. This fallback is for public `github/gh-aw` content only, not private or enterprise repositories.\n- `.github/aw/action-container-substitutions.md`\n- `.github/aw/agent-runtime-instructions.md`\n- `.github/aw/agentic-chat.md`\n- `.github/aw/agentic-workflows-mcp.md`\n- `.github/aw/analyzing-runs.md`\n- `.github/aw/asciicharts.md`\n- `.github/aw/campaign.md`\n- `.github/aw/charts-trending.md`\n- `.github/aw/charts.md`\n- `.github/aw/cli-commands.md`\n- `.github/aw/compat.md`\n- `.github/aw/configure-agentic-engine.md`\n- `.github/aw/context.md`\n- `.github/aw/create-agentic-workflow-trigger-details.md`\n- `.github/aw/create-agentic-workflow.md`\n- `.github/aw/create-shared-agentic-workflow.md`\n- `.github/aw/debug-agentic-workflow.md`\n- `.github/aw/debug-bootstrap.md`\n- `.github/aw/debug-compilation.md`\n- `.github/aw/debug-live-testing.md`\n- `.github/aw/debug-model-engine-misconfiguration.md`\n- `.github/aw/debug-playbook.md`\n- `.github/aw/debug-scenarios.md`\n- `.github/aw/debug-security-review.md`\n- `.github/aw/debug-workflow-evidence.md`\n- `.github/aw/debug-workflow-health.md`\n- `.github/aw/dependabot.md`\n- `.github/aw/deployment-status.md`\n- `.github/aw/designer-mappings.md`\n- `.github/aw/designer.md`\n- `.github/aw/doctor.md`\n- `.github/aw/documentation-workflows.md`\n- `.github/aw/drive-memory.md`\n- `.github/aw/enclaves.md`\n- `.github/aw/evals.md`\n- `.github/aw/experiments.md`\n- `.github/aw/formal-methods.md`\n- `.github/aw/github-agentic-workflows.md`\n- `.github/aw/github-mcp-server-pagination.md`\n- `.github/aw/github-mcp-server-tools.md`\n- `.github/aw/github-mcp-server.md`\n- `.github/aw/harbor.md`\n- `.github/aw/instructions.md`\n- `.github/aw/intent.md`\n- `.github/aw/jobs.md`\n- `.github/aw/ledger.md`\n- `.github/aw/linter-workflows.md`\n- `.github/aw/llms.md`\n- `.github/aw/loop.md`\n- `.github/aw/lsp.md`\n- `.github/aw/maintainer.md`\n- `.github/aw/mcp-clis.md`\n- `.github/aw/memory-stateful-patterns.md`\n- `.github/aw/memory.md`\n- `.github/aw/messages.md`\n- `.github/aw/multi-agent-research.md`\n- `.github/aw/network.md`\n- `.github/aw/optimize-agentic-workflow.md`\n- `.github/aw/patterns.md`\n- `.github/aw/playwright.md`\n- `.github/aw/pr-reviewer.md`\n- `.github/aw/release-workflow.md`\n- `.github/aw/report.md`\n- `.github/aw/reuse.md`\n- `.github/aw/safe-outputs-automation.md`\n- `.github/aw/safe-outputs-content.md`\n- `.github/aw/safe-outputs-management.md`\n- `.github/aw/safe-outputs-runtime.md`\n- `.github/aw/safe-outputs.md`\n- `.github/aw/serena-tool.md`\n- `.github/aw/shared-safe-jobs.md`\n- `.github/aw/skills.md`\n- `.github/aw/subagents.md`\n- `.github/aw/syntax-agentic.md`\n- `.github/aw/syntax-checkout.md`\n- `.github/aw/syntax-core.md`\n- `.github/aw/syntax-engine.md`\n- `.github/aw/syntax-tools-imports.md`\n- `.github/aw/syntax.md`\n- `.github/aw/test-coverage.md`\n- `.github/aw/test-expression.md`\n- `.github/aw/token-optimization-caching-budgets.md`\n- `.github/aw/token-optimization-observability.md`\n- `.github/aw/token-optimization.md`\n- `.github/aw/triggers.md`\n- `.github/aw/update-agentic-workflow.md`\n- `.github/aw/upgrade-agentic-workflows.md`\n- `.github/aw/visual-regression.md`\n- `.github/aw/work-queue.md`\n- `.github/aw/workflow-constraints.md`\n- `.github/aw/workflow-editing.md`\n- `.github/aw/workflow-patterns.md`\n\nAfter loading the matching workflow prompt or skill, follow it directly:\n- Design workflows from scratch via interview: `.github/aw/designer.md`\n- Create new workflows: `.github/aw/create-agentic-workflow.md`\n- Configure or add declarative engines: `.github/aw/configure-agentic-engine.md`\n- Update existing workflows: `.github/aw/update-agentic-workflow.md`\n- Diagnose, patch, audit, or actively debug workflows: `.github/aw/debug-agentic-workflow.md` (local-first strategy, evidence triage and live gates)\n- Analyze existing runs, logs, or recurring failures: `.github/aw/analyzing-runs.md`. General repository-wide debugging or optimization requests start here with failure clustering before selecting a workflow.\n- AWF model/endpoint 400s, silent cross-family sub-agent failures, `model: auto` failures, install-step 404s after a version pin, or questions about version fields: go directly to `.github/aw/debug-agentic-workflow.md#model-and-engine-misconfiguration` before suggesting model changes.\n- Upgrade workflows and fix deprecations: `.github/aw/upgrade-agentic-workflows.md`\n- Create shared components or MCP wrappers: `.github/aw/create-shared-agentic-workflow.md`\n- Create report-generating workflows: `.github/aw/report.md`\n- Fix Dependabot manifest PRs: `.github/aw/dependabot.md`\n- Analyze coverage workflows: `.github/aw/test-coverage.md`\n- Render compact markdown charts: `.github/aw/asciicharts.md`\n- Map CLI commands to MCP usage: `.github/aw/cli-commands.md`\n- Choose workflow architecture and patterns: `.github/aw/patterns.md`\n- Design, deploy, inspect or recover a Git-backed work queue: `.github/aw/work-queue.md`\n- Optimize token usage and cost: `.github/aw/token-optimization.md`\n- Advanced cost controls without native settings (custom AIC allowances by server size or shared organization budget policies): read `docs/src/content/docs/reference/cost-management.md#configure-advanced-cost-controls-with-admission` ([published guidance](https://github.github.com/gh-aw/reference/cost-management/#configure-advanced-cost-controls-with-admission)). Explain the external authority requirement and cooperative limits; do not invent frontmatter fields or promise hard caps, reservations, or mid-run cancellation.\n- Design long-running multi-agent research workflows: `.github/aw/multi-agent-research.md`\n- Add skills or agent plugins requested by the user (`skills:` / `plugins:` frontmatter, never on-the-fly installs): `.github/aw/skills.md`\n\nWhen the task involves OTEL, OTLP, traces, observability backends, or telemetry-driven analysis, also read and follow `skills/otel-queries/SKILL.md` after loading the matching workflow prompt or skill.\n\nWhen creating, updating, diagnosing or upgrading a workflow that uses `tools.work-queue`, also load `.github/aw/work-queue.md` after the primary prompt. Load deployment docs, operator reference or specification only when that task needs them.\n",".claude/skills/playwright-cli/SKILL.md":"---\nname: playwright-cli\ndescription: Automate browser interactions, test web pages and work with Playwright tests.\nallowed-tools: Bash(playwright-cli:*) Bash(npx:*) Bash(npm:*)\n---\n\n# Browser Automation with playwright-cli\n\n## Quick start\n\n```bash\n# open new browser\nplaywright-cli open\n# navigate to a page\nplaywright-cli goto https://playwright.dev\n# interact with the page using refs from the snapshot\nplaywright-cli click e15\nplaywright-cli type \"page.click\"\nplaywright-cli press Enter\n# take a screenshot (rarely used, as snapshot is more common)\nplaywright-cli screenshot\n# close the browser\nplaywright-cli close\n```\n\n## Commands\n\n### Core\n\n```bash\nplaywright-cli open\n# open and navigate right away\nplaywright-cli open https://example.com/\nplaywright-cli goto https://playwright.dev\nplaywright-cli type \"search query\"\nplaywright-cli click e3\nplaywright-cli dblclick e7\n# --submit presses Enter after filling the element\nplaywright-cli fill e5 \"user@example.com\"  --submit\nplaywright-cli drag e2 e8\n# drop files or data onto an element (from outside the page)\nplaywright-cli drop e4 --path=./image.png\nplaywright-cli drop e4 --data=\"text/plain=hello world\"\nplaywright-cli hover e4\nplaywright-cli select e9 \"option-value\"\nplaywright-cli upload ./document.pdf\nplaywright-cli check e12\nplaywright-cli uncheck e12\nplaywright-cli snapshot\nplaywright-cli eval \"document.title\"\nplaywright-cli eval \"el => el.textContent\" e5\n# get element id, class, or any attribute not visible in the snapshot\nplaywright-cli eval \"el => el.id\" e5\nplaywright-cli eval \"el => el.getAttribute('data-testid')\" e5\nplaywright-cli dialog-accept\nplaywright-cli dialog-accept \"confirmation text\"\nplaywright-cli dialog-dismiss\nplaywright-cli resize 1920 1080\nplaywright-cli close\n```\n\n### Navigation\n\n```bash\nplaywright-cli go-back\nplaywright-cli go-forward\nplaywright-cli reload\n```\n\n### Keyboard\n\n```bash\nplaywright-cli press Enter\nplaywright-cli press ArrowDown\nplaywright-cli keydown Shift\nplaywright-cli keyup Shift\n```\n\n### Mouse\n\n```bash\nplaywright-cli mousemove 150 300\nplaywright-cli mousedown\nplaywright-cli mousedown right\nplaywright-cli mouseup\nplaywright-cli mouseup right\nplaywright-cli mousewheel 0 100\n```\n\n### Save as\n\n```bash\nplaywright-cli screenshot\nplaywright-cli screenshot e5\nplaywright-cli screenshot --filename=page.png\nplaywright-cli pdf --filename=page.pdf\n```\n\n### Tabs\n\n```bash\nplaywright-cli tab-list\nplaywright-cli tab-new\nplaywright-cli tab-new https://example.com/page\nplaywright-cli tab-close\nplaywright-cli tab-close 2\nplaywright-cli tab-select 0\n```\n\n### Storage\n\n```bash\nplaywright-cli state-save\nplaywright-cli state-save auth.json\nplaywright-cli state-load auth.json\n\n# Cookies\nplaywright-cli cookie-list\nplaywright-cli cookie-list --domain=example.com\nplaywright-cli cookie-get session_id\nplaywright-cli cookie-set session_id abc123\nplaywright-cli cookie-set session_id abc123 --domain=example.com --httpOnly --secure\nplaywright-cli cookie-delete session_id\nplaywright-cli cookie-clear\n\n# LocalStorage\nplaywright-cli localstorage-list\nplaywright-cli localstorage-get theme\nplaywright-cli localstorage-set theme dark\nplaywright-cli localstorage-delete theme\nplaywright-cli localstorage-clear\n\n# SessionStorage\nplaywright-cli sessionstorage-list\nplaywright-cli sessionstorage-get step\nplaywright-cli sessionstorage-set step 3\nplaywright-cli sessionstorage-delete step\nplaywright-cli sessionstorage-clear\n```\n\n### Network\n\n```bash\nplaywright-cli route \"**/*.jpg\" --status=404\nplaywright-cli route \"https://api.example.com/**\" --body='{\"mock\": true}'\nplaywright-cli route-list\nplaywright-cli unroute \"**/*.jpg\"\nplaywright-cli unroute\n```\n\n### DevTools\n\n```bash\nplaywright-cli console\nplaywright-cli console warning\nplaywright-cli requests\nplaywright-cli request 5\nplaywright-cli run-code \"async page => await page.context().grantPermissions(['geolocation'])\"\nplaywright-cli run-code --filename=script.js\nplaywright-cli tracing-start\nplaywright-cli tracing-stop\nplaywright-cli video-start video.webm\nplaywright-cli video-chapter \"Chapter Title\" --description=\"Details\" --duration=2000\nplaywright-cli video-stop\n\n# launch the dashboard for UI review / design feedback — user annotates the page, you receive the annotated screenshot, snapshot, and notes\nplaywright-cli show --annotate\n\n# generate a Playwright locator for an element from its ref or selector\nplaywright-cli generate-locator e5 --raw\n\n# show a persistent highlight overlay for an element, optionally with a custom style\nplaywright-cli highlight e5\nplaywright-cli highlight e5 --style=\"outline: 3px dashed red\"\n# hide a single element highlight, or all page highlights when no target is given\nplaywright-cli highlight e5 --hide\nplaywright-cli highlight --hide\n```\n\n## Raw output\n\nThe global `--raw` option strips page status, generated code, and snapshot sections from the output, returning only the result value. Use it to pipe command output into other tools. Commands that don't produce output return nothing.\n\n```bash\nplaywright-cli --raw eval \"JSON.stringify(performance.timing)\" | jq '.loadEventEnd - .navigationStart'\nplaywright-cli --raw eval \"JSON.stringify([...document.querySelectorAll('a')].map(a => a.href))\" > links.json\nplaywright-cli --raw snapshot > before.yml\nplaywright-cli click e5\nplaywright-cli --raw snapshot > after.yml\ndiff before.yml after.yml\nTOKEN=$(playwright-cli --raw cookie-get session_id)\nplaywright-cli --raw localstorage-get theme\n```\n\nFor structured output wrapping every reply as JSON, pass --json\n```bash\nplaywright-cli list --json\n```\n\n## Open parameters\n```bash\n# Use specific browser when creating session\nplaywright-cli open --browser=chrome\nplaywright-cli open --browser=firefox\nplaywright-cli open --browser=webkit\nplaywright-cli open --browser=msedge\n\n# Use persistent profile (by default profile is in-memory)\nplaywright-cli open --persistent\n# Use persistent profile with custom directory\nplaywright-cli open --profile=/path/to/profile\n\n# Connect to browser via Playwright Extension\nplaywright-cli attach --extension=chrome\n\n# Connect to a running Chrome or Edge by channel name\nplaywright-cli attach --cdp=chrome\nplaywright-cli attach --cdp=msedge\n\n# Connect to a running browser via CDP endpoint\nplaywright-cli attach --cdp=http://localhost:9222\n\n# Start with config file\nplaywright-cli open --config=my-config.json\n\n# Close the browser\nplaywright-cli close\n# Detach from an attached browser (leaves the external browser running)\nplaywright-cli -s=msedge detach\n# Delete user data for the default session\nplaywright-cli delete-data\n```\n\n## Snapshots\n\nAfter each command, playwright-cli provides a snapshot of the current browser state.\n\n```bash\n> playwright-cli goto https://example.com\n### Page\n- Page URL: https://example.com/\n- Page Title: Example Domain\n### Snapshot\n[Snapshot](.playwright-cli/page-2026-02-14T19-22-42-679Z.yml)\n```\n\nYou can also take a snapshot on demand using `playwright-cli snapshot` command. All the options below can be combined as needed.\n\n```bash\n# default - save to a file with timestamp-based name\nplaywright-cli snapshot\n\n# save to file, use when snapshot is a part of the workflow result\nplaywright-cli snapshot --filename=after-click.yaml\n\n# snapshot an element instead of the whole page\nplaywright-cli snapshot \"#main\"\n\n# limit snapshot depth for efficiency, take a partial snapshot afterwards\nplaywright-cli snapshot --depth=4\nplaywright-cli snapshot e34\n\n# include each element's bounding box as [box=x,y,width,height]\nplaywright-cli snapshot --boxes\n```\n\n## Targeting elements\n\nBy default, use refs from the snapshot to interact with page elements.\n\n```bash\n# get snapshot with refs\nplaywright-cli snapshot\n\n# interact using a ref\nplaywright-cli click e15\n```\n\nYou can also use css selectors or Playwright locators.\n\n```bash\n# css selector\nplaywright-cli click \"#main > button.submit\"\n\n# role locator\nplaywright-cli click \"getByRole('button', { name: 'Submit' })\"\n\n# test id\nplaywright-cli click \"getByTestId('submit-button')\"\n```\n\n## Browser Sessions\n\n```bash\n# create new browser session named \"mysession\" with persistent profile\nplaywright-cli -s=mysession open example.com --persistent\n# same with manually specified profile directory (use when requested explicitly)\nplaywright-cli -s=mysession open example.com --profile=/path/to/profile\nplaywright-cli -s=mysession click e6\nplaywright-cli -s=mysession close  # stop a named browser\nplaywright-cli -s=mysession delete-data  # delete user data for persistent session\n\nplaywright-cli list\n# Close all browsers\nplaywright-cli close-all\n# Forcefully kill all browser processes\nplaywright-cli kill-all\n```\n\n## Installation\n\nIf global `playwright-cli` command is not available, try a local version via `npx playwright-cli`:\n\n```bash\nnpx --no-install playwright-cli --version\n```\n\nWhen local version is available, use `npx playwright-cli` in all commands. Otherwise, install `playwright-cli` as a global command:\n\n```bash\nnpm install -g @playwright/cli@latest\n```\n\n## Example: Form submission\n\n```bash\nplaywright-cli open https://example.com/form\nplaywright-cli snapshot\n\nplaywright-cli fill e1 \"user@example.com\"\nplaywright-cli fill e2 \"password123\"\nplaywright-cli click e3\nplaywright-cli snapshot\nplaywright-cli close\n```\n\n## Example: Multi-tab workflow\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli tab-new https://example.com/other\nplaywright-cli tab-list\nplaywright-cli tab-select 0\nplaywright-cli snapshot\nplaywright-cli close\n```\n\n## Example: Debugging with DevTools\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli click e4\nplaywright-cli fill e7 \"test\"\nplaywright-cli console\nplaywright-cli requests\nplaywright-cli close\n```\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli tracing-start\nplaywright-cli click e4\nplaywright-cli fill e7 \"test\"\nplaywright-cli tracing-stop\nplaywright-cli close\n```\n\n## Example: Interactive session\n\nAsk the user for UI review or design feedback. The user draws boxes on the live page and types comments; you receive the annotated screenshot, the snapshot of the marked region, and the user's notes. Use this whenever the user asks for \"UI review\", \"design feedback\", or to \"ask the user what they think / want / mean\":\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli show --annotate\n```\n\n## Specific tasks\n\n* **Running and Debugging Playwright tests** [references/playwright-tests.md](references/playwright-tests.md)\n* **Request mocking** [references/request-mocking.md](references/request-mocking.md)\n* **Running Playwright code** [references/running-code.md](references/running-code.md)\n* **Browser session management** [references/session-management.md](references/session-management.md)\n* **Spec-driven testing (plan / generate / heal)** [references/spec-driven-testing.md](references/spec-driven-testing.md)\n* **Storage state (cookies, localStorage)** [references/storage-state.md](references/storage-state.md)\n* **Test generation** [references/test-generation.md](references/test-generation.md)\n* **Tracing** [references/tracing.md](references/tracing.md)\n* **Video recording** [references/video-recording.md](references/video-recording.md)\n* **Inspecting element attributes** [references/element-attributes.md](references/element-attributes.md)\n",".github/skills/create-canvas/SKILL.md":"---\nname: create-canvas\ndescription: Author, validate, and debug canvas extensions that the agent can open in the GitHub Copilot app's side panel. Use when creating, reviewing, or troubleshooting a canvas extension — including its actions, inputs, rendered content, and the surrounding extension wiring (tools, hooks, lifecycle).\n---\n\n# Extension Canvas Authoring\n\nUse this skill when creating or debugging an extension canvas that integrates with the runtime canvas model.\n\nThe host app no longer participates in extension canvas registration. Extensions declare canvases directly to the runtime via the Copilot SDK on `joinSession`; the runtime routes provider callbacks (`canvas.open`, `canvas.action.invoke`, etc.) straight to the declaring connection; the host app just renders whatever URL the provider returns.\n\n## Authoring workflow (do this in order)\n\n1. **Decide the scope.** Project (`.github/extensions/<name>/`) is committed to the repo and shared with the team. User (`$COPILOT_HOME/extensions/<name>/`) is local to the current user. Session (`$COPILOT_HOME/session-state/<sessionId>/extensions/<name>/`) is loaded only for the current session — ideal for a throwaway canvas for one conversation. Unless the request makes it obvious, ask before creating files — the choice changes who sees the extension, whether it's committed, and the resulting `extensionId`.\n\n2. **Scaffold via tool, don't hand-write the skeleton.**\n   ```\n   extensions_manage({ operation: \"scaffold\", kind: \"canvas\", name: \"<name>\", location: \"project\" | \"user\" | \"session\" })\n   ```\n   The canvas scaffold produces an `extension.mjs` with `joinSession({ canvases: [createCanvas({...})] })`, a working loopback HTTP server per instance, an example action, and `onClose` cleanup. Edit from there.\n\n3. **Edit the file.** Implement your `open`, `actions[]`, optional `onClose`, and (if needed) tools/hooks alongside.\n\n4. **Reload.** Call `extensions_reload`. Stale canvas instances flip to `stale`, then back to `ready` once the provider reconnects.\n\n5. **Verify.** Call `extensions_manage({ operation: \"list\" })` and `extensions_manage({ operation: \"inspect\", name: \"<name>\" })`. If the extension is marked failed, `inspect` surfaces the log file path and a tail — that log is the primary debugging surface.\n\n6. **Drive it.** Run the validation checklist below via `list_canvas_capabilities`, `open_canvas`, and `invoke_canvas_action`.\n\n## Extension shape\n\nA canvas extension is a Copilot CLI extension running as a forked Node process that speaks JSON-RPC over stdio to the CLI.\n\n- Entry file **must** be named `extension.mjs` (ES modules only; TypeScript is not supported).\n- Discovery scans only immediate subdirectories of `.github/extensions/` (relative to git root), `$COPILOT_HOME/extensions/`, and `$COPILOT_HOME/session-state/<sessionId>/extensions/`.\n- The runtime auto-derives a stable `extensionId` of `${source}:${name}` (e.g. `project:my-extension`); session-scoped extensions embed the session id as `session:<sessionId>:<name>`.\n- `@github/copilot-sdk` is resolved automatically by the CLI — do **not** add a `package.json` or `node_modules` for it.\n- `stdout` is reserved for JSON-RPC. **Never `console.log`.** Use `session.log(message, { level, ephemeral })`.\n- Tool names must be globally unique across all loaded extensions — collisions cause the second extension to fail.\n\n## `joinSession` signature\n\n```js\nimport { joinSession, createCanvas, CanvasError } from \"@github/copilot-sdk/extension\";\n\nconst session = await joinSession({\n    canvases: [createCanvas({ /* ... */ })],\n    tools: [/* optional */],\n    hooks: {/* optional */},\n    onPermissionRequest: async (request) => ({ kind: \"approve-once\" }), // optional\n});\n// session.sessionId, session.workspacePath (string | undefined),\n// session.send, session.sendAndWait, session.log, session.on, session.rpc\n```\n\n## Canvas API (`canvas.d.ts`)\n\n```js\nimport { createCanvas, CanvasError, joinSession } from \"@github/copilot-sdk/extension\";\n\nconst canvas = createCanvas({\n    id: \"main\",                  // unique within this extension\n    displayName: \"My canvas\",    // human-readable label shown in host chrome\n    description: \"Short summary the agent sees in the system-prompt canvas catalog.\",\n    inputSchema: { /* JSON Schema for open input (optional) */ },\n    actions: [\n        {\n            name: \"do_thing\",        // unique within this canvas; MUST NOT start with `canvas.`\n            description: \"...\",\n            inputSchema: { /* JSON Schema (optional) */ },\n            handler: async (ctx) => {\n                // ctx: { sessionId, extensionId, canvasId, instanceId, actionName, input, host }\n                // Return raw result; throw CanvasError(\"code\", \"message\") for errors.\n                return { /* ... */ };\n            },\n        },\n    ],\n    open: async (ctx) => {\n        // ctx: { sessionId, extensionId, canvasId, instanceId, input, host }\n        // Idempotent: same instanceId may arrive again after provider reconnect.\n        return {\n            url: \"http://127.0.0.1:<loopback-port>/\", // optional for native canvases\n            title: \"...\",   // optional, shown in host chrome\n            status: \"...\",  // optional, shown in host chrome\n        };\n    },\n    onClose: async (ctx) => {\n        // Optional. Fire-and-forget; return value ignored.\n    },\n});\n```\n\nRuntime rules:\n- Action names starting with `canvas.` are reserved and rejected at declaration time.\n- Every `actions[]` entry must have a `handler`; missing handlers fall through to `CanvasError.noHandler()`.\n- Canvas-level `inputSchema` is validated before `open`; action-level `inputSchema` is validated before dispatch. Failure returns `canvas_input_invalid` with Ajv details.\n- Return raw values from action handlers; throw `CanvasError(\"code\", \"message\")` for errors.\n- `ctx.canvasId` (not `ctx.id`) is the canvas identifier in handler context.\n\n## Loopback server pattern\n\n```js\nimport { createServer } from \"node:http\";\nimport { createCanvas, joinSession } from \"@github/copilot-sdk/extension\";\n\nconst servers = new Map(); // instanceId → { server, url }\n\nasync function startServer(instanceId) {\n    const server = createServer((req, res) => {\n        res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n        res.end(renderHtml(instanceId));\n    });\n    await new Promise((r) => server.listen(0, \"127.0.0.1\", r));\n    const port = server.address().port;\n    return { server, url: `http://127.0.0.1:${port}/` };\n}\n\nawait joinSession({\n    canvases: [\n        createCanvas({\n            id: \"my-canvas\",\n            displayName: \"My canvas\",\n            description: \"...\",\n            open: async (ctx) => {\n                let entry = servers.get(ctx.instanceId);\n                if (!entry) {\n                    entry = await startServer(ctx.instanceId);\n                    servers.set(ctx.instanceId, entry);\n                }\n                return { title: \"My canvas\", url: entry.url };\n            },\n            onClose: async (ctx) => {\n                const entry = servers.get(ctx.instanceId);\n                if (entry) {\n                    servers.delete(ctx.instanceId);\n                    await new Promise((r) => entry.server.close(() => r()));\n                }\n            },\n        }),\n    ],\n});\n```\n\nBind embedded servers to **loopback only** (`127.0.0.1`). The host only embeds loopback URLs. Push state updates to the iframe with Server-Sent Events (`/events`).\n\n## ID model — three distinct identifiers\n\n- **`canvasId`** — the canvas *type* declared by the extension. Accepted by `list_canvas_capabilities` and `open_canvas`; not by `invoke_canvas_action`.\n- **`extensionId`** — auto-derived `${source}:${name}` (e.g. `project:triage-board`). Only pass it to disambiguate when two extensions declare the same `canvasId`.\n- **`instanceId`** — caller-invented handle for one running panel (slug or UUID). Two panels of the same canvas need two `instanceId`s. Validated against `^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$` — max 128 chars, alphanumeric first character, then only `[A-Za-z0-9._-]`.\n\nExample: `open_canvas({ canvasId: \"triage-board\", instanceId: \"triage-1\" })` then `invoke_canvas_action({ instanceId: \"triage-1\", actionName: \"refresh\" })`.\n\n## Agent-side canvas tools\n\n```\n// Open a canvas panel\nopen_canvas({ canvasId: \"my-canvas\", instanceId: \"my-canvas-1\", input?: {...} })\n// Returns { instanceId, url? } — no extensionId needed unless two providers share the canvasId.\n\n// Discover a canvas type's actions and input schema\nlist_canvas_capabilities({ canvasId: \"my-canvas\" })\n\n// Invoke an action on an open panel\ninvoke_canvas_action({ instanceId: \"my-canvas-1\", actionName: \"do_thing\", input?: {...} })\n```\n\nRe-opening the same `instanceId` focuses the existing panel (the host emits `session.canvas.opened` with `reopen: true` and reloads the iframe without invoking the provider again).\n\n## Injecting instructions\n\n- **`additionalContext` from hooks** (everyday path). `onSessionStart` → once-per-session guidance; `onUserPromptSubmitted` → per-turn nudges. The runtime appends it as a `developer`-role message.\n- **`systemMessage` on `joinSession`** (system-prompt path):\n  - `{ mode: \"append\", content }` — append to the SDK foundation.\n  - `{ mode: \"customize\", sections: {...} }` — override individual sections (`identity`, `tone`, `safety`, `custom_instructions`, `runtime_instructions`, etc.) with `replace` / `remove` / `append` / `prepend` / transform-callback actions.\n  - **Do NOT use** `{ mode: \"replace\", content }` from an extension — it discards the entire SDK-managed prompt including safety guardrails.\n\n## State model\n\n**`instanceId` identifies the panel, not the data.** Never key persistent state by `instanceId` alone — iframes reload, extensions restart, and a fresh `instanceId` may be opened for the same logical content.\n\nPick the right storage scope:\n- **Per session / workspace** — write artifact files into `session.workspacePath` (returned by `joinSession`). Lives alongside session artifacts, cleaned up with the session.\n- **Per user / global** — write under `$COPILOT_HOME/extensions/<extension-name>/artifacts/`. Follows the user across sessions.\n- **Per artifact / document** — key under a stable `documentId` or file path passed via `input`.\n- **In-repo, committed artifacts** — architecture diagrams, ADRs, design docs that belong in the repo. Write to a sensible repo path.\n- **Per panel (`instanceId`)** — only ephemeral UI state that genuinely should not survive a reload.\n\nResolve the owning ID in `open()` from `input`, load persisted state for that ID, and render. Two `instanceId`s for the same `documentId` should show the same content.\n\n## App theme tokens\n\nThe runtime mirrors the canvas theme contract onto your canvas document:\n- Root/body attributes: `data-color-mode`, `data-dark-theme`, `data-light-theme`, `data-theme-source`, `data-theme-tone`, `data-visual-mode`, `pointer-on-hover` class.\n- Semantic tokens: `--background-color-default`, `--border-color-default`, `--text-color-default`, `--text-color-muted`, `--color-focus-outline`.\n- Type ramp: `--font-sans`, `--font-mono`, `--font-weight-semibold`, `--text-body-medium`, `--leading-body-medium`.\n- True-color: `--true-color-red`, `--true-color-red-muted`, `--true-color-blue`, `--true-color-blue-muted`.\n\n```css\nbody {\n    margin: 0;\n    background: var(--background-color-default, #ffffff);\n    color: var(--text-color-default, #1f2328);\n    font-family: var(--font-sans, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n    font-size: var(--text-body-medium, 14px);\n    line-height: var(--leading-body-medium, 20px);\n}\n```\n\nOnly depend on the attributes, classes, and variables documented above — others are app-internal and can change.\n\n## Validation checklist\n\n1. **Discovery** — confirm your canvas appears in the `<canvases>` section of the system prompt, then verify `list_canvas_capabilities({ canvasId })` returns your `actions[]`.\n2. **Open** — call `open_canvas({ canvasId, input? })`. Confirm you receive `{ instanceId, url? }` and no error.\n3. **Action** — call `invoke_canvas_action({ instanceId, actionName, input? })` and confirm correct response payload.\n4. **Input validation** — call `open_canvas` with input that fails `inputSchema`. Expect `canvas_input_invalid`.\n5. **Reserved verb rejection** — call `invoke_canvas_action(instanceId, \"canvas.open\", ...)`. Expect `canvas_reserved_action_name`.\n\n## Debugging\n\n1. `extensions_manage({ operation: \"list\" })` — is the extension loaded? Marked `failed`?\n2. `extensions_manage({ operation: \"inspect\", name: \"<name>\" })` — surfaces log file path and tail. Primary debugging surface.\n3. After editing, **always** `extensions_reload` before re-running RPC calls.\n4. To force iframe reload, call `open_canvas` again with the same `instanceId`.\n5. If not discovered at all, verify the file is named exactly `extension.mjs` and lives in an immediate subdirectory of `.github/extensions/`, `$COPILOT_HOME/extensions/`, or the session's extensions dir.\n\n## Sharing extensions via Gist\n\nUse `share_extension` / `install_extension` tools. Gist format:\n- Flat file structure (subdirs encoded as `\\` in gist keys, decoded on install).\n- A `copilot-extension.json` manifest: `{ \"name\": \"<extension-name>\", \"version\": 1 }`.\n- `node_modules/`, `dist/`, `build/`, `.git/`, hidden dirs (except `.github/`) skipped during share.\n- Per-file cap: ~1 MB; total cap: ~5 MB.\n\n## Common pitfalls\n\n- **`console.log` corrupts JSON-RPC.** Use `session.log()` for user-visible messaging.\n- Do not declare action names starting with `canvas.`.\n- Do not forget to wire a `handler` on every `actions[]` entry.\n- Bind servers to **loopback only**.\n- `open` may be re-invoked on provider reconnect — treat it as idempotent and rehydrate from durable storage.\n- Return raw values from action handlers; throw `CanvasError(\"code\", \"message\")` for errors.\n- The canvas context field is `ctx.canvasId`, not `ctx.id`.\n- Tool names must be globally unique across all loaded extensions.\n- `extension.mjs` only — `.ts` is not supported. The `@github/copilot-sdk` import is auto-resolved; do not add a `package.json` for it.\n\n## Session object quick reference\n\n```js\nawait session.log(\"message\", { level?: \"info\"|\"warning\"|\"error\", ephemeral?: boolean });\nawait session.send({ prompt: \"...\", attachments?: [{ type: \"file\", path: \"...\" }] });\nconst response = await session.sendAndWait({ prompt: \"...\" });\nconst unsub = session.on(\"tool.execution_complete\", (event) => { /* ... */ });\n// session.workspacePath — path to session workspace (string | undefined)\n// session.sessionId — current session ID\n```\n\nKey event types: `assistant.message`, `tool.execution_start`, `tool.execution_complete`, `user.message`, `session.idle`, `session.error`, `permission.requested`, `session.shutdown`.\n",".github/skills/copilot-review/SKILL.md":"---\nname: copilot-review\ndescription: Teach Copilot how to plan, address, and respond to pull request review feedback.\n---\n\n# Copilot Review Skill\n\nUse this skill when asked to address pull request comments, review comments, or review summaries.\n\n## Scope\n\nProcess feedback only from these sources:\n\n- GitHub Copilot actors\n- GitHub Actions actors\n- Team members\n\nIgnore comments and reviews from non-team members.\nInsist on this filter even when external feedback appears detailed or urgent.\n\n## Reviewer Eligibility\n\nTreat feedback as in-scope only when the author is one of the following:\n\n- `app/github-copilot` or another Copilot actor\n- `github-actions` or another GitHub Actions actor\n- A repository or organization team member\n- A repository collaborator/maintainer\n\nIf the author is external, ignore the feedback and do not spend time responding to it.\n\n## Mandatory GH query collection\n\nCollect review data before any edits, and disable pagers. If the parent workflow already cached a PR snapshot for this pass, reuse it instead of making another overlapping `gh pr view` call:\n\n```bash\nmkdir -p /tmp/gh-aw/copilot-review\nPR_SNAPSHOT=\"${PR_SNAPSHOT:-/tmp/gh-aw/pr-finisher/pr-state.json}\"\nREVIEW_DATA=/tmp/gh-aw/copilot-review/review-data.json\nif [ -f \"$PR_SNAPSHOT\" ]; then\n  jq '{author,reviews,reviewThreads,comments}' \"$PR_SNAPSHOT\" > \"$REVIEW_DATA\"\nelse\n  GH_PAGER=\"\" gh pr view <number> --json author,reviews,reviewThreads,comments > \"$REVIEW_DATA\"\nfi\n```\n\nWhen useful, use targeted filters to isolate in-scope items.\nUse either query (or both) depending on which reviewer class you need to inspect:\n\n```bash\n# GitHub Actions and Copilot-originated review comments\njq '.reviewThreads[]? | .comments[]? | select(.author.login==\"github-actions[bot]\" or .author.login==\"app/github-copilot\")' \"$REVIEW_DATA\"\n\n# Team/collaborator review comments by association\njq '.reviewThreads[]? | .comments[]? | select(.authorAssociation==\"MEMBER\" or .authorAssociation==\"OWNER\" or .authorAssociation==\"COLLABORATOR\")' \"$REVIEW_DATA\"\n```\n\n## Required Workflow\n\n### 0. Check PR author eligibility\n\nInspect the pull request author before processing feedback:\n\n- Ignore platform-managed dependency PRs from `dependabot[bot]`, `app/dependabot`, or `renovate[bot]` unless the user explicitly asks to handle them.\n- More generally, ignore PRs authored by unrecognized bots (an author whose type is `Bot` or whose login ends with `[bot]`) unless the user explicitly includes that bot.\n- Continue to handle PRs from trusted GitHub automation such as `app/github-copilot` and `github-actions[bot]`.\n\nThis author check is separate from reviewer eligibility: trusted review comments do not make an otherwise ignored bot-authored PR eligible.\nFor an ignored bot-authored PR, report that platform automation manages it and stop without collecting feedback, modifying files, or replying to comments.\n\n### 1. Collect all feedback first\n\nBefore making changes, gather all pull request discussion in one pass:\n\n- pull request review summaries\n- pull request review comments / review threads\n- pull request conversation comments\n\nDo not respond comment-by-comment before understanding the full set of requests.\n\n### 2. Filter to allowed reviewers\n\nRemove feedback from people who are not team members or trusted automation.\n\nKeep only comments and reviews from the allowed reviewer set above.\nTreat `CONTRIBUTOR`, `FIRST_TIME_CONTRIBUTOR`, `FIRST_TIMER`, and `NONE` as out-of-scope unless the author is trusted automation.\n\n### 3. Bucket the feedback\n\nGroup the remaining feedback into clear buckets such as:\n\n- bugs / correctness\n- tests\n- documentation\n- style / clarity\n- CI / workflow issues\n- duplicate or overlapping requests\n- will not fix / needs justification\n\nCreate a short plan that covers every bucket before editing code.\n\n### 4. Resolve each bucket\n\nFor every bucket, decide whether to:\n\n- make the requested change\n- partially apply it\n- decline it with a clear justification\n\nDo not silently ignore in-scope feedback.\n\n### 5. Validate before replying\n\nAfter making changes, re-check the diff and run the relevant validation so replies describe the final state accurately.\n\n### 6. Reply to every in-scope review comment\n\nEvery in-scope review comment must get a direct reply that says what happened.\nThis includes all in-scope `github-actions[bot]` review comments and threads.\n\nEach reply should briefly state one of:\n\n- what change was made\n- where the fix was applied\n- why no change was made\n- why the comment is already satisfied by another change\n\nIf several comments are handled by the same fix, still reply to each comment individually.\n\n### 7. Resolve threads after answering\n\nIf a review thread has been fully addressed and the tooling supports it:\n\n- reply with the action taken\n- resolve the thread\n\nDo not resolve a thread without answering it first.\n\n## Response Rules\n\n- Answer every in-scope review comment.\n- Review summaries from in-scope reviewers must also be addressed in the work plan.\n- Keep replies concise, specific, and action-oriented.\n- Mention file names or behavior changes when helpful.\n- When declining a request, explain why it is being ignored.\n- When a comment is outdated, reply that it is obsolete because of the newer change and resolve if appropriate.\n\n## Planning Standard\n\nBefore editing, produce a compact internal checklist that maps:\n\n- each in-scope comment or review\n- its bucket\n- planned action\n- final reply status\n\nOnly start implementation after the full feedback set has been reviewed and bucketed.\n\n## Completion Standard\n\nFor eligible PRs, the task is complete only when all of the following are true:\n\n- all in-scope comments and reviews were collected\n- the PR author passed the bot eligibility check\n- non-team-member feedback was ignored\n- each in-scope item was resolved by code changes or explicit justification\n- every in-scope review comment received a reply describing the action taken\n- addressed threads were resolved when possible\n",".github/skills/custom-engine-implementation/SKILL.md":"---\nname: custom-engine-implementation\ndescription: Add and test declarative behavior-defined agentic engines in gh-aw, extending Go infrastructure only when necessary.\n---\n\n# Custom Engine Implementation\n\nUse this skill when adding a new agentic engine definition or extending the\nbehavior-defined engine infrastructure.\n\n## Choose the smallest implementation\n\nPrefer a shared Markdown engine definition. Installation, execution, MCP\nconfiguration, provider routing, caching, manifests, plugins, network defaults,\nharness scripts, and log parsing can already be declared through\n`engine.behaviors`.\n\nOnly change Go code when the engine needs a reusable behavior that the\ndeclarative model cannot express. Add a dedicated Go engine only when the\nshared behavior-defined runtime cannot run the engine at all.\n\n| Need | Implementation |\n|---|---|\n| Existing behaviors are sufficient | Add an imported shared engine definition |\n| A reusable declarative behavior is missing | Extend the definition model and behavior-defined runtime |\n| The shared runtime is fundamentally unsuitable | Add a dedicated Go engine and register it |\n\nThe relevant implementation is in:\n\n- `pkg/workflow/engine_definition.go` for the definition model and catalog\n- `pkg/workflow/behavior_defined_engine.go` for the shared runtime\n- `pkg/workflow/engine_definition_loader.go` for embedded built-in definitions\n- `pkg/workflow/agentic_engine.go` for dedicated Go engine registration\n- `pkg/parser/schemas/main_workflow_schema.json` for the workflow schema\n\n## Study representative engines\n\nRead the closest examples before making changes:\n\n- `.github/workflows/shared/opencode.md`: npm installation, merged\n  configuration, MCP, provider routing, and log parsing\n- `.github/workflows/shared/aider.md`: Python installation and a custom harness\n  without native MCP\n- `.github/workflows/shared/crush.md`: native MCP configuration adapter and\n  harness\n- `.github/workflows/shared/cursor.md`: plugin support\n- `.github/workflows/shared/deepseek-harness.md`: provider endpoint discovery\n  and a headless profile\n\nUse the examples to identify a pattern, not as a reason to copy optional\nbehaviors.\n\n## Add a shared engine definition\n\n1. Create `.github/workflows/shared/<engine>.md`.\n2. Declare `engine.id`, `display-name`, `description`, `experimental`, provider\n   metadata, authentication, and only the required `behaviors`.\n3. Pin a default CLI version. Make installation deterministic and provide a\n   verification command.\n4. Document setup, authentication, model syntax, MCP support, and limitations\n   in the Markdown body. Keep in-repository integrations clearly identified as\n   unsupported samples.\n5. Add the engine ID and shared definition path to\n   `.github/aw/engines.json`. Imported behavior-defined engines are registered\n   dynamically; do not add them to `NewEngineRegistry()`.\n6. Add `.github/workflows/smoke-<engine>.md`, following the closest existing\n   smoke workflow. Import the shared definition and exercise the capabilities\n   the engine claims to support.\n7. Update the unsupported sample table in\n   `docs/src/content/docs/reference/engines.md`.\n8. Add a changeset when the engine is a user-visible repository sample. New\n   experimental engines have precedent as a `minor` change.\n9. Run `make recompile` and include the generated smoke workflow\n   `.lock.yml`.\n\n`TestKnownEngineImportsFile_MatchesSharedEngineFiles` in\n`pkg/workflow/engine_definition_test.go` enforces catalog coverage for shared\nexternal engines.\n\n## Design the definition\n\nKeep the definition declarative and minimal:\n\n- Select the correct package manager, package name, binary name, version, and\n  verification command under `behaviors.installation`.\n- Put invocation arguments and non-secret environment variables under\n  `behaviors.execution`.\n- Use an existing secret strategy and provider environment mode where\n  possible.\n- Declare native MCP support only when the CLI can consume the generated\n  configuration. Otherwise use a harness or the gh-aw CLI proxy pattern.\n- Add only required default domains and map provider-specific domains under\n  `behaviors.network.provider-domains`.\n- Declare manifest files, cache paths, and plugin support only when the CLI\n  consumes them.\n- Add a log parser only when its emitted event format can be tested.\n\nTreat inline JavaScript in harnesses, configuration adapters, and log parsers\nas production code. Avoid shell interpolation, validate paths and child-process\narguments, preserve nonzero exit codes, and never print secret values. Enabling\npackage lifecycle scripts requires a pinned version and an explicit reason.\n\nFor log and error regular expressions, also load\n`.github/skills/error-pattern-safety/SKILL.md`.\n\n## Extend declarative infrastructure\n\nWhen an engine exposes a generally useful capability that existing behaviors\ncannot express:\n\n1. Add the smallest field to the types in\n   `pkg/workflow/engine_definition.go`.\n2. Validate and render it in the focused behavior-defined engine files.\n3. Update `pkg/parser/schemas/main_workflow_schema.json`.\n4. Add focused tests for parsing, validation, and rendered execution behavior.\n5. Run `make generate-schema-docs` when generated schema documentation changes.\n\nDo not add a schema field for a behavior that can be represented by existing\ninstallation, execution, environment, harness, or adapter fields.\n\nFor a dedicated Go runtime, implement the engine interfaces by composing the\nexisting helpers, keep engine-specific code in its own files, and register the\nengine in `pkg/workflow/agentic_engine.go`. Cover configuration, commands,\nenvironment, authentication, tools, logs, and failure handling with focused\ntests.\n\n## Test the right layers\n\nUse tests that match the changed behavior:\n\n| Area | Tests and examples |\n|---|---|\n| Harness, configuration, MCP, and environment | `behavior_defined_engine_harness_test.go` |\n| Log parsing | `behavior_defined_engine_log_parser_test.go` |\n| Cache behavior | `behavior_defined_engine_cache_test.go` |\n| Definitions, catalog, and known imports | `engine_definition_test.go`, `engine_catalog_test.go` |\n| Embedded definitions | `engine_definition_loader_test.go` |\n| Real shared workflow harness | `aider_workflow_test.go` |\n| Sandboxed CLI visibility | `cloud_hypervisor_test.go` |\n| Generated smoke workflows | `compiled_lock_files_test.go` |\n\nTest both definition parsing and the generated installation/execution steps.\nInclude negative cases for unsafe paths, invalid configuration, missing\ncredentials, or malformed logs when relevant.\n\n## Validate\n\nAfter Go changes:\n\n```bash\nmake build\nmake fmt\n```\n\nAfter workflow Markdown changes:\n\n```bash\nmake recompile\n```\n\nRun focused `go test` commands for the changed behavior while iterating. Before\nan intermediate progress report, run:\n\n```bash\nmake agent-report-progress-no-test\n```\n\nBefore the final progress report, run:\n\n```bash\nmake agent-report-progress\n```\n\nUse `make agent-finish` for the final repository validation when time allows.\nDo not trigger a smoke workflow from a Copilot cloud agent run.\n\n## Completion checklist\n\n- The declarative path was preferred unless its limitations are documented.\n- The engine definition uses a pinned, verified installation.\n- Authentication, provider/model handling, MCP, and network access are covered.\n- Harnesses and adapters do not expose secrets or interpolate untrusted input.\n- `.github/aw/engines.json`, smoke workflow, generated lock file,\n  documentation, and changeset are updated when applicable.\n- Focused tests cover parsing and rendered runtime behavior.\n- Repository validation passes.\n",".github/skills/console-rendering/SKILL.md":"---\nname: console-rendering\ndescription: Use Go struct tags to render styled terminal output in gh-aw.\n---\n\n# Console Rendering System Usage\n\nUse this guide for the struct tag-based console rendering system.\n\n## Struct Tag Support\n\nUse the `console` struct tag to control rendering behavior:\n\n- **`header:\"Name\"`** - Sets the display name for fields (used in both structs and tables)\n- **`title:\"Section Title\"`** - Sets the title for nested structs, slices, or maps\n- **`format:\"type\"`** - Sets the formatting type for the field value\n  - `format:number` - Formats integers as human-readable numbers (e.g., \"1k\", \"1.2M\")\n  - `format:cost` - Formats floats as currency with $ prefix (e.g., \"$1.234\")\n- **`omitempty`** - Skips the field if it has a zero value\n- **`\"-\"`** - Always skips the field\n\n## Example Usage\n\n```go\ntype Overview struct {\n    RunID    int64  `console:\"header:Run ID\"`\n    Workflow string `console:\"header:Workflow\"`\n    Status   string `console:\"header:Status\"`\n    Duration string `console:\"header:Duration,omitempty\"`\n}\n\ndata := Overview{\n    RunID:    12345,\n    Workflow: \"test-workflow\",\n    Status:   \"completed\",\n    Duration: \"5m30s\",\n}\n\n// Simple rendering\nfmt.Print(console.RenderStruct(data))\n\n// Output:\n//   Run ID  : 12345\n//   Workflow: test-workflow\n//   Status  : completed\n//   Duration: 5m30s\n```\n\n## Format Tag Examples\n\n### Number Formatting\n\n```go\ntype Metrics struct {\n    TokenUsage int `console:\"header:Token Usage,format:number\"`\n    Errors     int `console:\"header:Errors\"`\n}\n\ndata := Metrics{\n    TokenUsage: 250000,\n    Errors:     5,\n}\n\n// Renders as:\n//   Token Usage: 250k\n//   Errors     : 5\n```\n\n### Cost Formatting\n\n```go\ntype Billing struct {\n    Cost float64 `console:\"header:Estimated Cost,format:cost\"`\n}\n\ndata := Billing{\n    Cost: 1.234,\n}\n\n// Renders as:\n//   Estimated Cost: $1.234\n```\n\n## Rendering Behavior\n\n### Structs\nStructs are rendered as key-value pairs with proper alignment.\n\n### Slices\nSlices of structs are automatically rendered as tables:\n\n```go\ntype Job struct {\n    Name       string `console:\"header:Name\"`\n    Status     string `console:\"header:Status\"`\n    Conclusion string `console:\"header:Conclusion,omitempty\"`\n}\n\njobs := []Job{\n    {Name: \"build\", Status: \"completed\", Conclusion: \"success\"},\n    {Name: \"test\", Status: \"in_progress\", Conclusion: \"\"},\n}\n\nfmt.Print(console.RenderStruct(jobs))\n```\n\nRenders as:\n\n```\nName  | Status      | Conclusion\n----- | ----------- | ----------\nbuild | completed   | success\ntest  | in_progress | -\n```\n\n### Maps\nMaps are rendered as markdown-style headers with key-value pairs.\n\n### Special Type Handling\n\n#### time.Time\n`time.Time` fields are automatically formatted as `\"2006-01-02 15:04:05\"`. Zero time values are considered empty when used with `omitempty`.\n\n#### Unexported Fields\nThe rendering system safely handles unexported struct fields by checking `CanInterface()` before attempting to access field values.\n",".github/skills/custom-agents/SKILL.md":"---\nname: custom-agents\ndescription: Define and validate GitHub custom agent files, prompts, and examples.\n---\n\n\n# GitHub Custom Agent File Format\n\nUse this reference for the GitHub custom agent file format.\n\n## Overview\n\nGitHub Copilot reads custom agent instructions from Markdown files with YAML frontmatter. Use them to define specialized behavior, tool access, and workflows for your repository.\n\n## File Locations\n\nPlace custom agent files in these locations based on scope:\n\n### 1. Repository-wide Instructions\n- **File**: `.github/copilot-instructions.md`\n- **Scope**: Applies to all code generation in the repository\n- **Use case**: General coding standards, security requirements, testing practices\n\n### 2. Path-specific Instructions\n- **Directory**: `.github/instructions/`\n- **Pattern**: `*.instructions.md` (e.g., `frontend.instructions.md`, `backend.instructions.md`)\n- **Scope**: Can target specific directories or file patterns using `applyTo` in frontmatter\n- **Use case**: Framework-specific guidelines, component-specific rules\n\n### 3. Custom Agent Profiles\n- **Directory**: `.github/agents/` or `.github/copilot/instructions/`\n- **Pattern**: `AGENTS.md`, `*.md` (e.g., `readme-creator.md`, `test-writer.md`)\n- **Scope**: Defines specialized agents with specific capabilities and instructions\n- **Use case**: Task-specific agents (documentation, testing, refactoring)\n\n### 4. agentic workflow integration\n- **Location**: Imported via `imports` field in workflow frontmatter\n- **Pattern**: Any markdown files under `.github/agents/` directory\n- **Scope**: Custom agent for specific agentic workflow execution\n- **Use case**: Workflow-specific agent configuration\n- **Important**: Only one agent file is allowed per workflow\n\n## File Format\n\n### Basic Structure\n\n```markdown\n# YAML frontmatter (configuration)\nname: agent-name\ndescription: Brief description of agent's purpose\n\n# Markdown body (instructions)\n\nYour natural language instructions for the agent go here.\n```\n\n### Complete YAML Frontmatter Schema\n\n```yaml\n# Required fields\nname: agent-identifier              # Unique identifier for the agent\n\n# Optional descriptive fields\ndescription: >                      # Multi-line description of agent's purpose\n  Agent specializing in specific tasks\n\n# Optional instruction fields\nprompt: |                          # Freeform instructions (alternative to markdown body)\n  Your instructions here\n\n# Optional tool configuration\ntools:                             # List of allowed tools for this agent\n  - createFile\n  - editFiles\n  - codeSearch\n  - search\n\n# Optional path targeting (for .instructions.md files)\napplyTo:                          # Glob patterns for targeted files/directories\n  - \"src/frontend/**\"\n  - \"**/*.tsx\"\n\n# Optional MCP server configuration (enterprise/org only)\nmcp-server:                       # External MCP server configuration\n  url: https://my-mcp-server.com\n  api-key: ${{ secrets.MCPSERVER_API_KEY }}\n\n# Optional settings\nsettings:                         # Custom runtime or connection settings\n  key: value\n```\n\n## Field Descriptions\n\n### Core Fields\n\n#### name (string, required for agent profiles)\n- Unique identifier for the custom agent\n- Used to reference the agent in workflows or assignments\n- Convention: lowercase with hyphens (e.g., `readme-creator`, `test-writer`)\n\n#### description (string, optional)\n- Human-friendly description of the agent's focus and behavior\n- Helps users understand what the agent specializes in\n- Can be multi-line using YAML's `>` or `|` syntax\n\n#### prompt (string, optional)\n- Alternative to using the markdown body for instructions\n- Contains freeform natural language instructions\n- Use YAML's `|` (literal) or `>` (folded) for multi-line content\n- If both `prompt` and markdown body exist, they are typically combined\n\n### Tool Configuration\n\n#### tools (array of strings, optional)\n- List of tools the agent is allowed to use\n- If omitted or set to `[\"*\"]`, agent has access to all available tools\n- Tool names are **case-insensitive**\n- Supports both GitHub's standard tool aliases and legacy naming conventions\n\n**GitHub Standard Tool Aliases:**\n\nGitHub Copilot defines a standardized set of tool aliases for custom agents:\n\n- **`read`** - Access and read contents of files or code\n- **`edit`** - Make changes in code files, apply edits or refactoring\n- **`search`** - Search codebase for keywords, references, or patterns\n- **`pr`** - Create, manage, or update pull requests\n- **`issue`** - Create, manage, or update issues\n\n**Legacy Tool Names:**\n\nFor backward compatibility, these legacy tool names are still supported:\n\n- `createFile` - Create new files (use `edit` instead)\n- `editFiles` - Modify existing files (use `edit` instead)\n- `deleteFiles` - Remove files (use `edit` instead)\n- `codeSearch` - Semantic code search (use `search` instead)\n- `runCommand` - Execute shell commands\n- `getFile` - Read file contents (use `read` instead)\n- `listFiles` - List directory contents (use `read` instead)\n\n**MCP Server Tool Prefixes:**\n\nWhen using Model Context Protocol (MCP) servers, you can specify tools with server prefixes:\n- Single tool: `my-mcp-server/tool-name`\n- All tools from a server: `my-mcp-server/*`\n\n**Examples:**\n\n```yaml\n# Using standard tool aliases\ntools:\n  - read\n  - edit\n  - search\n\n# Enable all tools with wildcard\ntools: [\"*\"]\n\n# Using legacy names (still supported)\ntools:\n  - editFiles\n  - createFile\n  - search\n\n# Mixed standard and MCP server tools\ntools:\n  - read\n  - edit\n  - github-mcp/create_issue\n  - custom-mcp/*\n\n# Empty list disables all tools\ntools: []\n```\n\n### Path Targeting\n\n#### applyTo (array of strings, optional)\n- Only used in `.instructions.md` files\n- Specifies glob patterns for files/directories these instructions apply to\n- Supports wildcards: `*` (any characters), `**` (any directories)\n- Multiple patterns can be specified\n\n**Example:**\n```yaml\napplyTo:\n  - \"src/frontend/**/*.tsx\"\n  - \"src/frontend/**/*.ts\"\n  - \"components/**\"\n```\n\n### Enterprise Features\n\n#### mcp-server (object, optional)\n- Configuration for external MCP (Model Context Protocol) servers\n- Typically used in enterprise or organization settings\n- Allows integration with custom tools and services\n\n**Fields:**\n- `url` (string): MCP server endpoint\n- `api-key` (string): Authentication key (use GitHub secrets)\n\n**Example:**\n```yaml\nmcp-server:\n  url: https://internal-tools.company.com/mcp\n  api-key: ${{ secrets.INTERNAL_MCP_KEY }}\n```\n\n#### settings (object, optional)\n- Custom runtime or connection settings\n- Key-value pairs for agent-specific configuration\n- Format and available keys depend on the agent implementation\n\n## Usage Patterns\n\n### Pattern 1: Repository-wide Standards\n\n**File:** `.github/copilot-instructions.md`\n\n```markdown\ndescription: Repository-wide coding standards\n\n# Coding Standards\n\n## Style Guide\n- Use single quotes in JavaScript/TypeScript\n- Follow ESLint configuration in `.eslintrc.json`\n- Maximum line length: 100 characters\n\n## Security\n- Always set `httpOnly` and `secure` flags for cookies\n- Validate all user input\n- Use parameterized queries for database access\n\n## Testing\n- All new code must include Jest tests\n- Aim for >80% code coverage\n- Test edge cases and error conditions\n```\n\n### Pattern 2: Path-specific Instructions\n\n**File:** `.github/instructions/frontend.instructions.md`\n\n```markdown\ndescription: Frontend development guidelines\napplyTo:\n  - \"src/frontend/**\"\n  - \"components/**\"\n\n# Frontend Development Guidelines\n\n## Component Structure\n- Use React functional components with hooks\n- Prefer composition over inheritance\n- Keep components small and focused (< 150 lines)\n\n## Styling\n- Use CSS Modules for component styles\n- Follow BEM naming convention\n- Use Tailwind utility classes where appropriate\n\n## State Management\n- Use React Context for global state\n- Keep local state in components when possible\n- Use reducers for complex state logic\n```\n\n### Pattern 3: Custom Agent Profile\n\n**File:** `.github/agents/readme-creator.md`\n\n```markdown\nname: readme-creator\ndescription: Agent specializing in creating and improving README files\ntools:\n  - read\n  - edit\n  - search\n\n# README Creator Agent\n\nYou are a documentation specialist focused on creating clear, comprehensive README files.\n\n## Responsibilities\n- Create well-structured README.md files for projects\n- Include all standard sections: Overview, Installation, Usage, Contributing\n- Generate accurate code examples\n- Ensure documentation is up-to-date with codebase\n\n## Style Guidelines\n- Use clear, concise language\n- Include code examples with syntax highlighting\n- Add badges for build status, coverage, version\n- Organize with logical heading hierarchy\n- Include a table of contents for long READMEs\n\n## Quality Standards\n- Verify all code examples are accurate\n- Test installation instructions\n- Ensure links are valid and working\n- Check for proper Markdown formatting\n```\n\n### Pattern 4: Test Writer Agent\n\n**File:** `.github/agents/test-writer.md`\n\n```markdown\nname: test-writer\ndescription: Specialized agent for writing comprehensive test suites\ntools:\n  - read\n  - edit\n  - search\n\n# Test Writer Agent\n\nYou specialize in creating comprehensive, well-structured test suites.\n\n## Testing Framework\n- Use Jest for JavaScript/TypeScript\n- Follow AAA pattern: Arrange, Act, Assert\n- Use descriptive test names: \"should [expected behavior] when [condition]\"\n\n## Test Coverage\n- Write unit tests for all public functions\n- Create integration tests for API endpoints\n- Add edge case tests (null, undefined, empty, boundary values)\n- Test error conditions and exception handling\n\n## Test Organization\n- Group related tests with `describe` blocks\n- Use `beforeEach` and `afterEach` for setup/teardown\n- Keep tests independent and isolated\n- Mock external dependencies\n\n## Best Practices\n- One assertion per test when possible\n- Use test data builders for complex objects\n- Avoid test interdependence\n- Keep tests fast (< 1 second each)\n```\n\n### Pattern 5: Agentic Workflow Integration\n\n**File:** `.github/workflows/code-review.md`\n\n```markdown\non:\n  pull_request:\n    types: [opened, synchronize]\npermissions:\n  contents: read\n  pull-requests: write\nengine:\n  id: copilot\n  custom-agent: .github/agents/code-reviewer.md\n\n# Automated Code Review\n\nReview the pull request changes and provide constructive feedback.\n```\n\n**File:** `.github/agents/code-reviewer.md`\n\n```markdown\nname: code-reviewer\ndescription: Agent specialized in performing code reviews\ntools:\n  - read\n  - search\n\n# Code Review Agent\n\nYou are an experienced code reviewer focused on code quality, security, and best practices.\n\n## Review Checklist\n- Code follows repository style guidelines\n- Proper error handling is implemented\n- Security best practices are followed\n- Tests are included for new functionality\n- Documentation is updated where needed\n- No unnecessary complexity\n\n## Feedback Style\n- Be constructive and specific\n- Explain the reasoning behind suggestions\n- Prioritize issues (critical, important, minor)\n- Acknowledge good patterns and improvements\n- Provide code examples for suggestions\n```\n\n## Integration with gh-aw\n\nThe gh-aw (GitHub Agentic Workflows) tool supports custom agent files through the `imports` field in workflow frontmatter. Any markdown files under the `.github/agents/` directory are treated as custom agent files when imported.\n\n### Preferred way to install skills in workflows\n\nUse the `skills:` frontmatter field as the preferred way to install external skills for workflow runs. This installs skills during activation and persists them correctly between jobs. Use the top-level `plugins:` field the same way for agent plugins. Never add on-the-fly installation steps or ask the agent to install a skill or plugin from the prompt.\n\nUse `imports:` for workflow prompt/context files (including local custom agent files), not as the primary skill installation path.\n\n```markdown\non: pull_request\nengine:\n  id: copilot\nskills:\n  - mattpocock/skills/tdd@801dca688564c529fa84f247f64472520d9ebe28\nplugins:\n  - octo-org/agent-plugin@v1\nimports:\n  - .github/agents/code-reviewer.md\n\n# Workflow prompt\n```\n\n### Configuration\n\n```markdown\non: issues\nengine:\n  id: copilot\nimports:\n  - .github/agents/my-agent.md\n\n# My Workflow\n\nInstructions for the workflow...\n```\n\n### Supported Engines\n\nCustom agent files are supported by the following engines:\n\n1. **Copilot** - Uses `--agent <path>` flag to load custom agent file\n2. **Claude** - Prepends agent file content to the workflow prompt\n3. **Codex** - Prepends agent file content to the workflow prompt\n\n### File Path Resolution\n\n- Agent files are imported via the `imports` field\n- Must be markdown files located under `.github/agents/` directory\n- Only one agent file is allowed per workflow\n- File is validated during workflow compilation\n- Checkout step is automatically added if agent file is imported\n\n### Example Workflow with Custom Agent\n\n```markdown\non:\n  issues:\n    types: [opened]\npermissions:\n  contents: read\n  issues: write\nengine:\n  id: copilot\nimports:\n  - .github/agents/issue-triager.md\ntools:\n  github:\n    allowed:\n      - add_labels_to_issue\n      - create_issue_comment\n\n# Issue Triage Workflow\n\nAnalyze the issue and categorize it appropriately.\n```\n\n## Best Practices\n\n### 1. Keep Instructions Focused\n- Each agent should have a clear, specific purpose\n- Avoid mixing unrelated concerns in a single agent\n- Create multiple specialized agents rather than one general-purpose agent\n\n### 2. Be Explicit and Specific\n- Provide concrete examples of expected behavior\n- Define clear success criteria\n- Specify edge cases and error handling\n\n### 3. Use Appropriate Scoping\n- Repository-wide instructions for universal standards\n- Path-specific instructions for framework or directory-specific rules\n- Custom agents for task-specific workflows\n\n### 4. Test Agent Behavior\n- Verify agent follows instructions correctly\n- Test with various input scenarios\n- Iterate based on actual agent performance\n\n### 5. Maintain and Update\n- Keep instructions current with codebase changes\n- Review and refine based on agent performance\n- Remove outdated or conflicting instructions\n\n### 6. Security Considerations\n- Limit tool access to what's necessary\n- Be cautious with file deletion permissions\n- Use secrets for sensitive configuration\n- Review agent actions regularly\n\n## Common Patterns\n\n### Documentation Agent\n```yaml\nname: documentation-specialist\ndescription: Creates and maintains technical documentation\ntools: [read, edit, search]\n```\n\n### Refactoring Agent\n```yaml\nname: code-refactorer\ndescription: Improves code quality and structure\ntools: [read, edit, search]\n```\n\n### Security Auditor\n```yaml\nname: security-auditor\ndescription: Reviews code for security vulnerabilities\ntools: [read, search]\n```\n\n### Migration Assistant\n```yaml\nname: migration-helper\ndescription: Assists with framework or library migrations\ntools: [read, edit, search]\n```\n\n### Issue Management Agent\n```yaml\nname: issue-manager\ndescription: Manages GitHub issues and project tracking\ntools: [read, issue]\n```\n\n### Pull Request Assistant\n```yaml\nname: pr-assistant\ndescription: Assists with pull request creation and management\ntools: [read, edit, pr]\n```\n\n## Troubleshooting\n\n### Agent Not Following Instructions\n- Make instructions more explicit and specific\n- Provide concrete examples\n- Break down complex instructions into steps\n- Ensure instructions don't conflict\n\n### Tool Access Issues\n- Verify tools are listed in `tools` array\n- Check agent has necessary permissions\n- Ensure tools are available in the environment\n\n### Path Targeting Not Working\n- Verify glob patterns are correct\n- Check file paths match patterns\n- Ensure `applyTo` is only used in `.instructions.md` files\n\n### Custom Agent File Not Found\n- Verify agent file is imported in the `imports` field\n- Ensure file exists and is committed under `.github/agents/` directory\n- Confirm agent file path is correct in imports list\n- Remember: only one agent file is allowed per workflow\n\n## References\n\n- [GitHub Copilot Agent Filess Configuration](https://docs.github.com/en/copilot/reference/copilot-custom-agents-configuration) - Official reference for custom agent configuration including tool aliases\n- [GitHub Copilot Custom Instructions Documentation](https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions)\n- [About Custom Agents](https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-custom-agents)\n- [GitHub Blog: Custom Instructions Support](https://github.blog/changelog/2025-07-23-github-copilot-coding-agent-now-supports-instructions-md-custom-instructions/)\n- [GitHub Blog: AGENTS.md Support](https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/)\n\n## Examples in This Repository\n\nThe gh-aw repository uses custom agent files for performance engineering guides:\n\n- `.github/copilot/instructions/ci-performance.md` - CI/CD optimization\n- `.github/copilot/instructions/workflow-performance.md` - Workflow efficiency\n- `.github/copilot/instructions/build-performance.md` - Build optimization\n- `.github/copilot/instructions/cli-performance.md` - CLI performance\n\nThese files provide specialized guidance for performance engineering tasks and demonstrate the custom agent file format in practice.\n","SKILL.md":"---\nname: GitHub Agentic Workflows\ndescription: GitHub Agentic Workflows (`gh-aw`) is a GitHub CLI extension for writing Agentic Workflows in markdown and compiling them to GitHub Actions.\n---\n## Debug an existing workflow\nBefore installation, follow [the debugging bootstrap](.github/aw/debug-bootstrap.md)\nat this file's guidance repository/ref. It selects diagnosis, health, compilation,\nor existing-run analysis without requiring a new workflow or automatic upgrade.\nUse its available-tool path when no shell is available; preserve the supplied run URL.\n\n## Install\n```bash\ngh extension install github/gh-aw\n```\nIf failed,\n```\ncurl -sL https://raw.githubusercontent.com/github/gh-aw/main/install-gh-aw.sh | bash\n```\n## Load\nLoad https://github.com/github/gh-aw/blob/main/.github/skills/agentic-workflows/SKILL.md to learn how to create/update/debug/optimize Agentic Workflows.\n",".github/skills/debugging-workflows/SKILL.md":"---\nname: debugging-workflows\ndescription: Diagnose gh-aw failures using the canonical debugging strategy and evidence reference.\n---\n\n# Workflow Debugging Router\n\nThis skill remains available for existing invocations. Load and follow\n[the evidence reference](../../aw/debug-workflow-evidence.md), where the\ninstructions now live. It delegates setup to\n[the bootstrap](../../aw/debug-bootstrap.md) and execution policy to\n[the shared strategy](../../aw/debug-agentic-workflow.md).\n\nUse a matching local guidance checkout. For Contents API reads, use the guidance\nowner/repository (`owner=github`, `repo=gh-aw` by default),\n`path=.github/aw/debug-workflow-evidence.md`, retaining the ref of this skill.\nThe other API paths are `.github/aw/debug-bootstrap.md` and\n`.github/aw/debug-agentic-workflow.md`. Normalize relative links against their\ncontaining file before API reads; `../../aw/...` is not an API path.\nFor default raw guidance, use `https://raw.githubusercontent.com/github/gh-aw/<guidance-ref>/`\nplus the repository-root-relative path, including `.github/`. Preserve supplied\nrefs containing slashes and keep guidance identity separate from the target\nworkflow repository/ref. The bootstrap documents size-aware reads and public\nraw fallback after API denial.\n\nRead the canonical instructions before running commands. This compatibility\nrouter defines no separate setup, review, or live-execution procedure.\n",".github/skills/developer-code-organization/SKILL.md":"# developer-code-organization\n\nPath: `.github/skills/developer-code-organization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-code-organization/SKILL.md)",".github/skills/developer-internals/SKILL.md":"# developer-internals\n\nPath: `.github/skills/developer-internals/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-internals/SKILL.md)",".github/skills/developer-release/SKILL.md":"# developer-release\n\nPath: `.github/skills/developer-release/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-release/SKILL.md)",".github/skills/developer-security/SKILL.md":"# developer-security\n\nPath: `.github/skills/developer-security/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-security/SKILL.md)",".github/skills/developer/SKILL.md":"# developer\n\nPath: `.github/skills/developer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer/SKILL.md)",".github/skills/docs-design/SKILL.md":"# docs-design\n\nPath: `.github/skills/docs-design/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/docs-design/SKILL.md)",".github/skills/documentation/SKILL.md":"# documentation\n\nPath: `.github/skills/documentation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/documentation/SKILL.md)",".github/skills/error-messages/SKILL.md":"# error-messages\n\nPath: `.github/skills/error-messages/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-messages/SKILL.md)",".github/skills/error-pattern-safety/SKILL.md":"# error-pattern-safety\n\nPath: `.github/skills/error-pattern-safety/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-pattern-safety/SKILL.md)",".github/skills/error-recovery-patterns/SKILL.md":"# error-recovery-patterns\n\nPath: `.github/skills/error-recovery-patterns/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-recovery-patterns/SKILL.md)",".github/skills/gh-agent-session/SKILL.md":"# gh-agent-session\n\nPath: `.github/skills/gh-agent-session/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/gh-agent-session/SKILL.md)",".github/skills/gh-agent-task/SKILL.md":"# gh-agent-task\n\nPath: `.github/skills/gh-agent-task/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/gh-agent-task/SKILL.md)",".github/skills/github-copilot-agent-tips-and-tricks/SKILL.md":"# github-copilot-agent-tips-and-tricks\n\nPath: `.github/skills/github-copilot-agent-tips-and-tricks/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-copilot-agent-tips-and-tricks/SKILL.md)",".github/skills/github-discussion-query/SKILL.md":"# github-discussion-query\n\nPath: `.github/skills/github-discussion-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-discussion-query/SKILL.md)",".github/skills/github-issue-query/SKILL.md":"# github-issue-query\n\nPath: `.github/skills/github-issue-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-issue-query/SKILL.md)",".github/skills/github-labels-query/SKILL.md":"# github-labels-query\n\nPath: `.github/skills/github-labels-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-labels-query/SKILL.md)",".github/skills/github-mcp-server/SKILL.md":"# github-mcp-server\n\nPath: `.github/skills/github-mcp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-mcp-server/SKILL.md)",".github/skills/github-pr-query/SKILL.md":"# github-pr-query\n\nPath: `.github/skills/github-pr-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-pr-query/SKILL.md)",".github/skills/github-script/SKILL.md":"# github-script\n\nPath: `.github/skills/github-script/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-script/SKILL.md)",".github/skills/github-workflows-query/SKILL.md":"# github-workflows-query\n\nPath: `.github/skills/github-workflows-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-workflows-query/SKILL.md)",".github/skills/go-codemod/SKILL.md":"# go-codemod\n\nPath: `.github/skills/go-codemod/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/go-codemod/SKILL.md)",".github/skills/go-linters/SKILL.md":"# go-linters\n\nPath: `.github/skills/go-linters/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/go-linters/SKILL.md)",".github/skills/http-mcp-headers/SKILL.md":"# http-mcp-headers\n\nPath: `.github/skills/http-mcp-headers/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/http-mcp-headers/SKILL.md)",".github/skills/issue-markdown/SKILL.md":"# issue-markdown\n\nPath: `.github/skills/issue-markdown/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/issue-markdown/SKILL.md)",".github/skills/javascript-refactoring/SKILL.md":"# javascript-refactoring\n\nPath: `.github/skills/javascript-refactoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/javascript-refactoring/SKILL.md)",".github/skills/jqschema/SKILL.md":"# jqschema\n\nPath: `.github/skills/jqschema/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/jqschema/SKILL.md)",".github/skills/messages/SKILL.md":"# messages\n\nPath: `.github/skills/messages/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/messages/SKILL.md)",".github/skills/model-routing-golden/SKILL.md":"# model-routing-golden\n\nPath: `.github/skills/model-routing-golden/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/model-routing-golden/SKILL.md)",".github/skills/npm/SKILL.md":"# npm\n\nPath: `.github/skills/npm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/npm/SKILL.md)",".github/skills/open-pull-request/SKILL.md":"# open-pull-request\n\nPath: `.github/skills/open-pull-request/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/open-pull-request/SKILL.md)",".github/skills/operational-value-designer/SKILL.md":"# operational-value-designer\n\nPath: `.github/skills/operational-value-designer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/operational-value-designer/SKILL.md)",".github/skills/optimize-agentic-workflow/SKILL.md":"# optimize-agentic-workflow\n\nPath: `.github/skills/optimize-agentic-workflow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/optimize-agentic-workflow/SKILL.md)",".github/skills/otel-queries/SKILL.md":"# otel-queries\n\nPath: `.github/skills/otel-queries/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/otel-queries/SKILL.md)",".github/skills/pr-finisher/SKILL.md":"# pr-finisher\n\nPath: `.github/skills/pr-finisher/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/pr-finisher/SKILL.md)",".github/skills/pr-to-go-linter/SKILL.md":"# pr-to-go-linter\n\nPath: `.github/skills/pr-to-go-linter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/pr-to-go-linter/SKILL.md)",".github/skills/prompt-token-efficiency/SKILL.md":"# prompt-token-efficiency\n\nPath: `.github/skills/prompt-token-efficiency/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/prompt-token-efficiency/SKILL.md)",".github/skills/reporting/SKILL.md":"# reporting\n\nPath: `.github/skills/reporting/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/reporting/SKILL.md)",".github/skills/resolve-merge-conflicts/SKILL.md":"# resolve-merge-conflicts\n\nPath: `.github/skills/resolve-merge-conflicts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/resolve-merge-conflicts/SKILL.md)",".github/skills/restricted-tool-triage/SKILL.md":"# restricted-tool-triage\n\nPath: `.github/skills/restricted-tool-triage/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/restricted-tool-triage/SKILL.md)",".github/skills/review-agentic-workflows/SKILL.md":"# review-agentic-workflows\n\nPath: `.github/skills/review-agentic-workflows/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/review-agentic-workflows/SKILL.md)",".github/skills/security-advisory-compat-enforcer/SKILL.md":"# security-advisory-compat-enforcer\n\nPath: `.github/skills/security-advisory-compat-enforcer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/security-advisory-compat-enforcer/SKILL.md)",".github/skills/sergo-examples/SKILL.md":"# sergo-examples\n\nPath: `.github/skills/sergo-examples/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/sergo-examples/SKILL.md)",".github/skills/skillz-integration/SKILL.md":"# skillz-integration\n\nPath: `.github/skills/skillz-integration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/skillz-integration/SKILL.md)",".github/skills/ssl/SKILL.md":"# ssl\n\nPath: `.github/skills/ssl/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/ssl/SKILL.md)",".github/skills/statistics-infographic/SKILL.md":"# statistics-infographic\n\nPath: `.github/skills/statistics-infographic/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/SKILL.md)",".github/skills/temporary-id-safe-output/SKILL.md":"# temporary-id-safe-output\n\nPath: `.github/skills/temporary-id-safe-output/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/temporary-id-safe-output/SKILL.md)",".github/skills/workflow-step-summaries/SKILL.md":"# workflow-step-summaries\n\nPath: `.github/skills/workflow-step-summaries/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/workflow-step-summaries/SKILL.md)",".squad/templates/skills/agent-collaboration/SKILL.md":"# agent-collaboration\n\nPath: `.squad/templates/skills/agent-collaboration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/agent-collaboration/SKILL.md)",".squad/templates/skills/agent-conduct/SKILL.md":"# agent-conduct\n\nPath: `.squad/templates/skills/agent-conduct/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/agent-conduct/SKILL.md)",".squad/templates/skills/architectural-proposals/SKILL.md":"# architectural-proposals\n\nPath: `.squad/templates/skills/architectural-proposals/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/architectural-proposals/SKILL.md)",".squad/templates/skills/ci-validation-gates/SKILL.md":"# ci-validation-gates\n\nPath: `.squad/templates/skills/ci-validation-gates/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/ci-validation-gates/SKILL.md)",".squad/templates/skills/cli-wiring/SKILL.md":"# cli-wiring\n\nPath: `.squad/templates/skills/cli-wiring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cli-wiring/SKILL.md)",".squad/templates/skills/client-compatibility/SKILL.md":"# client-compatibility\n\nPath: `.squad/templates/skills/client-compatibility/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/client-compatibility/SKILL.md)",".squad/templates/skills/coordinator-init-mode/SKILL.md":"# coordinator-init-mode\n\nPath: `.squad/templates/skills/coordinator-init-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-init-mode/SKILL.md)",".squad/templates/skills/coordinator-response-mode/SKILL.md":"# coordinator-response-mode\n\nPath: `.squad/templates/skills/coordinator-response-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-response-mode/SKILL.md)",".squad/templates/skills/coordinator-source-of-truth/SKILL.md":"# coordinator-source-of-truth\n\nPath: `.squad/templates/skills/coordinator-source-of-truth/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-source-of-truth/SKILL.md)",".squad/templates/skills/cross-machine-coordination/SKILL.md":"# cross-machine-coordination\n\nPath: `.squad/templates/skills/cross-machine-coordination/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-machine-coordination/SKILL.md)",".squad/templates/skills/cross-squad-communication/SKILL.md":"# cross-squad-communication\n\nPath: `.squad/templates/skills/cross-squad-communication/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-squad-communication/SKILL.md)",".squad/templates/skills/cross-squad/SKILL.md":"# cross-squad\n\nPath: `.squad/templates/skills/cross-squad/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-squad/SKILL.md)",".squad/templates/skills/distributed-mesh/SKILL.md":"# distributed-mesh\n\nPath: `.squad/templates/skills/distributed-mesh/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/distributed-mesh/SKILL.md)",".squad/templates/skills/docs-standards/SKILL.md":"# docs-standards\n\nPath: `.squad/templates/skills/docs-standards/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/docs-standards/SKILL.md)",".squad/templates/skills/e2e-template-testing/SKILL.md":"# e2e-template-testing\n\nPath: `.squad/templates/skills/e2e-template-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/e2e-template-testing/SKILL.md)",".squad/templates/skills/economy-mode/SKILL.md":"# economy-mode\n\nPath: `.squad/templates/skills/economy-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/economy-mode/SKILL.md)",".squad/templates/skills/error-recovery/SKILL.md":"# error-recovery\n\nPath: `.squad/templates/skills/error-recovery/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/error-recovery/SKILL.md)",".squad/templates/skills/external-comms/SKILL.md":"# external-comms\n\nPath: `.squad/templates/skills/external-comms/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/external-comms/SKILL.md)",".squad/templates/skills/fact-checking/SKILL.md":"# fact-checking\n\nPath: `.squad/templates/skills/fact-checking/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/fact-checking/SKILL.md)",".squad/templates/skills/gh-auth-isolation/SKILL.md":"# gh-auth-isolation\n\nPath: `.squad/templates/skills/gh-auth-isolation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/gh-auth-isolation/SKILL.md)",".squad/templates/skills/git-workflow/SKILL.md":"# git-workflow\n\nPath: `.squad/templates/skills/git-workflow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/git-workflow/SKILL.md)",".squad/templates/skills/github-multi-account/SKILL.md":"# github-multi-account\n\nPath: `.squad/templates/skills/github-multi-account/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/github-multi-account/SKILL.md)",".squad/templates/skills/history-hygiene/SKILL.md":"# history-hygiene\n\nPath: `.squad/templates/skills/history-hygiene/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/history-hygiene/SKILL.md)",".squad/templates/skills/humanizer/SKILL.md":"# humanizer\n\nPath: `.squad/templates/skills/humanizer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/humanizer/SKILL.md)",".squad/templates/skills/init-mode/SKILL.md":"# init-mode\n\nPath: `.squad/templates/skills/init-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/init-mode/SKILL.md)",".squad/templates/skills/iterative-retrieval/SKILL.md":"# iterative-retrieval\n\nPath: `.squad/templates/skills/iterative-retrieval/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/iterative-retrieval/SKILL.md)",".squad/templates/skills/model-selection/SKILL.md":"# model-selection\n\nPath: `.squad/templates/skills/model-selection/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/model-selection/SKILL.md)",".squad/templates/skills/nap/SKILL.md":"# nap\n\nPath: `.squad/templates/skills/nap/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/nap/SKILL.md)",".squad/templates/skills/notification-routing/SKILL.md":"# notification-routing\n\nPath: `.squad/templates/skills/notification-routing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/notification-routing/SKILL.md)",".squad/templates/skills/personal-squad/SKILL.md":"# personal-squad\n\nPath: `.squad/templates/skills/personal-squad/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/personal-squad/SKILL.md)",".squad/templates/skills/pr-review-response/SKILL.md":"# pr-review-response\n\nPath: `.squad/templates/skills/pr-review-response/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/pr-review-response/SKILL.md)",".squad/templates/skills/pr-screenshots/SKILL.md":"# pr-screenshots\n\nPath: `.squad/templates/skills/pr-screenshots/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/pr-screenshots/SKILL.md)",".squad/templates/skills/project-conventions/SKILL.md":"# project-conventions\n\nPath: `.squad/templates/skills/project-conventions/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/project-conventions/SKILL.md)",".squad/templates/skills/ralph-two-pass-scan/SKILL.md":"# ralph-two-pass-scan\n\nPath: `.squad/templates/skills/ralph-two-pass-scan/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/ralph-two-pass-scan/SKILL.md)",".squad/templates/skills/reflect/SKILL.md":"# reflect\n\nPath: `.squad/templates/skills/reflect/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reflect/SKILL.md)",".squad/templates/skills/release-process/SKILL.md":"# release-process\n\nPath: `.squad/templates/skills/release-process/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/release-process/SKILL.md)",".squad/templates/skills/reskill/SKILL.md":"# reskill\n\nPath: `.squad/templates/skills/reskill/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reskill/SKILL.md)",".squad/templates/skills/retro-enforcement/SKILL.md":"# retro-enforcement\n\nPath: `.squad/templates/skills/retro-enforcement/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/retro-enforcement/SKILL.md)",".squad/templates/skills/reviewer-protocol/SKILL.md":"# reviewer-protocol\n\nPath: `.squad/templates/skills/reviewer-protocol/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reviewer-protocol/SKILL.md)",".squad/templates/skills/secret-handling/SKILL.md":"# secret-handling\n\nPath: `.squad/templates/skills/secret-handling/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/secret-handling/SKILL.md)",".squad/templates/skills/session-recovery/SKILL.md":"# session-recovery\n\nPath: `.squad/templates/skills/session-recovery/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/session-recovery/SKILL.md)",".squad/templates/skills/squad-commands/SKILL.md":"# squad-commands\n\nPath: `.squad/templates/skills/squad-commands/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-commands/SKILL.md)",".squad/templates/skills/squad-conventions/SKILL.md":"# squad-conventions\n\nPath: `.squad/templates/skills/squad-conventions/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-conventions/SKILL.md)",".squad/templates/skills/squad-help/SKILL.md":"# squad-help\n\nPath: `.squad/templates/skills/squad-help/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-help/SKILL.md)",".squad/templates/skills/squad-version-check/SKILL.md":"# squad-version-check\n\nPath: `.squad/templates/skills/squad-version-check/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-version-check/SKILL.md)",".squad/templates/skills/squad/SKILL.md":"# squad\n\nPath: `.squad/templates/skills/squad/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad/SKILL.md)",".squad/templates/skills/test-discipline/SKILL.md":"# test-discipline\n\nPath: `.squad/templates/skills/test-discipline/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/test-discipline/SKILL.md)",".squad/templates/skills/tiered-memory/SKILL.md":"# tiered-memory\n\nPath: `.squad/templates/skills/tiered-memory/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/tiered-memory/SKILL.md)",".squad/templates/skills/versioning-policy/SKILL.md":"# versioning-policy\n\nPath: `.squad/templates/skills/versioning-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/versioning-policy/SKILL.md)",".squad/templates/skills/windows-compatibility/SKILL.md":"# windows-compatibility\n\nPath: `.squad/templates/skills/windows-compatibility/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/windows-compatibility/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/AGENTS.md)",".github/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.github/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/mcp.json)",".squad/routing.md":"# .squad - Multi-Agent Routing & Delegation Matrix\n\nPath: `.squad/routing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/routing.md)",".vscode/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.vscode/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.vscode/mcp.json)","scratchpad/architecture.md":"# scratchpad - System Architecture & Module Boundaries\n\nPath: `scratchpad/architecture.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/architecture.md)",".github/agents/adr-writer.agent.md":"# Subagent: adr-writer.agent\n\nPath: `.github/agents/adr-writer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/adr-writer.agent.md)",".github/agents/agentic-workflows.md":"# Subagent: agentic-workflows\n\nPath: `.github/agents/agentic-workflows.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/agentic-workflows.md)",".github/agents/ci-cleaner.agent.md":"# Subagent: ci-cleaner.agent\n\nPath: `.github/agents/ci-cleaner.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/ci-cleaner.agent.md)",".github/agents/contribution-checker.agent.md":"# Subagent: contribution-checker.agent\n\nPath: `.github/agents/contribution-checker.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/contribution-checker.agent.md)",".github/agents/create-safe-output-type.agent.md":"# Subagent: create-safe-output-type.agent\n\nPath: `.github/agents/create-safe-output-type.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/create-safe-output-type.agent.md)",".github/agents/custom-engine-implementation.agent.md":"# Subagent: custom-engine-implementation.agent\n\nPath: `.github/agents/custom-engine-implementation.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/custom-engine-implementation.agent.md)",".github/agents/developer.instructions.md":"# Subagent: developer.instructions\n\nPath: `.github/agents/developer.instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/developer.instructions.md)",".github/agents/grumpy-reviewer.agent.md":"# Subagent: grumpy-reviewer.agent\n\nPath: `.github/agents/grumpy-reviewer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/grumpy-reviewer.agent.md)",".github/agents/interactive-agent-designer.agent.md":"# Subagent: interactive-agent-designer.agent\n\nPath: `.github/agents/interactive-agent-designer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/interactive-agent-designer.agent.md)",".github/agents/squad.agent.md":"# Subagent: squad.agent\n\nPath: `.github/agents/squad.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/squad.agent.md)",".github/agents/technical-doc-writer.agent.md":"# Subagent: technical-doc-writer.agent\n\nPath: `.github/agents/technical-doc-writer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/technical-doc-writer.agent.md)",".github/agents/w3c-specification-writer.agent.md":"# Subagent: w3c-specification-writer.agent\n\nPath: `.github/agents/w3c-specification-writer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/w3c-specification-writer.agent.md)",".squad/templates/copilot-instructions.md":"# GitHub Copilot Instructions\n\nPath: `.squad/templates/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/copilot-instructions.md)","scratchpad/agents/hierarchical-agents-quickstart.md":"# Subagent: hierarchical-agents-quickstart\n\nPath: `scratchpad/agents/hierarchical-agents-quickstart.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/agents/hierarchical-agents-quickstart.md)","scratchpad/agents/hierarchical-agents.md":"# Subagent: hierarchical-agents\n\nPath: `scratchpad/agents/hierarchical-agents.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/agents/hierarchical-agents.md)",".github/copilot/instructions/build-performance.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/build-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/build-performance.md)",".github/copilot/instructions/ci-performance.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/ci-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/ci-performance.md)",".github/copilot/instructions/cli-performance.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/cli-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/cli-performance.md)",".github/copilot/instructions/workflow-performance.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/workflow-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/workflow-performance.md)",".github/skills/error-messages/ssl.json":"# Error-messages Skill\n\nPath: `.github/skills/error-messages/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-messages/ssl.json)",".github/skills/jqschema/ssl.json":"# Jqschema Skill\n\nPath: `.github/skills/jqschema/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/jqschema/ssl.json)",".github/skills/reporting/ssl.json":"# Reporting Skill\n\nPath: `.github/skills/reporting/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/reporting/ssl.json)",".github/skills/ssl/ssl.json":"# Ssl Skill\n\nPath: `.github/skills/ssl/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/ssl/ssl.json)",".squad/agents/Rai/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/Rai/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/Rai/charter.md)",".squad/agents/Rai/history.md":"# Subagent: history\n\nPath: `.squad/agents/Rai/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/Rai/history.md)",".squad/agents/fact-checker/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/fact-checker/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fact-checker/charter.md)",".squad/agents/fact-checker/history.md":"# Subagent: history\n\nPath: `.squad/agents/fact-checker/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fact-checker/history.md)",".squad/agents/fenster/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/fenster/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fenster/charter.md)",".squad/agents/hockney/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/hockney/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/hockney/charter.md)",".squad/agents/keaton/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/keaton/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/keaton/charter.md)",".squad/agents/kujan/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/kujan/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/kujan/charter.md)",".squad/agents/mcmanus/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/mcmanus/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/mcmanus/charter.md)",".squad/agents/ralph/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/ralph/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/ralph/charter.md)",".squad/agents/ralph/history.md":"# Subagent: history\n\nPath: `.squad/agents/ralph/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/ralph/history.md)",".squad/agents/scribe/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/scribe/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/scribe/charter.md)",".squad/agents/scribe/history.md":"# Subagent: history\n\nPath: `.squad/agents/scribe/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/scribe/history.md)",".squad/agents/verbal/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/verbal/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/verbal/charter.md)",".claude/skills/playwright-cli/references/element-attributes.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/element-attributes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/element-attributes.md)",".claude/skills/playwright-cli/references/playwright-tests.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/playwright-tests.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/playwright-tests.md)",".claude/skills/playwright-cli/references/request-mocking.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/request-mocking.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/request-mocking.md)",".claude/skills/playwright-cli/references/running-code.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/running-code.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/running-code.md)",".claude/skills/playwright-cli/references/session-management.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/session-management.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/session-management.md)",".claude/skills/playwright-cli/references/spec-driven-testing.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/spec-driven-testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/spec-driven-testing.md)",".claude/skills/playwright-cli/references/storage-state.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/storage-state.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/storage-state.md)",".claude/skills/playwright-cli/references/test-generation.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/test-generation.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/test-generation.md)",".claude/skills/playwright-cli/references/tracing.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/tracing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/tracing.md)",".claude/skills/playwright-cli/references/video-recording.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/video-recording.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/video-recording.md)",".github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json":"# Support Skill\n\nPath: `.github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json)",".github/skills/agentic-workflows/tests/fixtures.json":"# Tests Skill\n\nPath: `.github/skills/agentic-workflows/tests/fixtures.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/agentic-workflows/tests/fixtures.json)",".github/skills/statistics-infographic/examples/example.json":"# Examples Skill\n\nPath: `.github/skills/statistics-infographic/examples/example.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/examples/example.json)",".github/skills/statistics-infographic/references/data-contract.md":"# References Skill\n\nPath: `.github/skills/statistics-infographic/references/data-contract.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/references/data-contract.md)","actions/setup/js/fixtures/evals/runs.json":"# Evals Skill\n\nPath: `actions/setup/js/fixtures/evals/runs.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/evals/runs.json)","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md":"# Subagent: opportunity-extractor\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md)","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md":"# Subagent: paper-screener\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md)","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md":"# Subagent: preliminary-investigator\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md)","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md":"# Subagent: relevance-ranker\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md)","actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md":"# Subagent: test-writer\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md)","actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md":"# Subagent: duplicate-type-finder\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md)"},"files":{".github/skills/checkout-credential-review/SKILL.md":"---\nname: checkout-credential-review\ndescription: Review code that performs git or gh operations against repository checkouts in gh-aw, checking that the right credentials are available at the right time and that sparseness, shallowness and credential-free factors are properly considered.\n---\n\n# Checkout Credential Review\n\nUse this skill when reviewing or writing code in `pkg/workflow/`, `actions/setup/js/`, or compiled `.lock.yml` workflows that runs `git`, `gh`, or any other remote-touching operation against a repository checkout.\n\n## Background\n\nEach entry in a workflow's `checkout:` block may declare its own credentials (`github-token:`, `github-app:`), and the compiler wires those into the corresponding `actions/checkout` step ([pkg/workflow/checkout_step_generator.go](../../../pkg/workflow/checkout_step_generator.go)). Generated checkouts always set `persist-credentials: false`, so the on-disk repo retains **no** credentials after the step finishes — only `actions/checkout`'s own internal token is used during the clone, and it is scrubbed in its post-step.\n\nA separate step that wants to authenticate later must either (a) re-inject a token at command level (e.g. `git -c http.extraheader=...`) or (b) be passed the per-checkout token via env. The compiler does *not* automatically thread per-checkout `github-token`s into downstream steps.\n\nTwo important contexts deliberately run with **no git credentials**:\n\n- The **safe-outputs MCP server** and its handlers (`generate_git_bundle.cjs`, `generate_git_patch.cjs`, `create_pull_request.cjs`). Errors in these paths explicitly say \"the safe-outputs MCP server has no credentials for private repositories\" — fetch/push will fail for private repos.\n- The **agent runtime** after `actions/checkout`. The agent prompt in [actions/setup/md/safe_outputs_push_to_pr_branch.md](../../../actions/setup/md/safe_outputs_push_to_pr_branch.md) explicitly tells the model not to attempt `git fetch`, `git pull`, `git push`, or any other authenticated git operation, and to report unavailable branches rather than try to fetch them.\n\n## Review checklist\n\nWhen you see a new `git`, `gh`, `execFileSync('git'…)`, or compiled `run:` block:\n\n1. **Does it touch a remote?** Local-only commands (`symbolic-ref`, `rev-parse`, `log`, `show`, `merge-base`, `diff`, `status`) need no credentials. Anything in `fetch | pull | push | clone | ls-remote | remote (set-url|add|update)` does, plus on-demand blob fetches in partial clones.\n2. **Which checkout is it operating on?** If it's a cross-repo entry from `checkout:`, the relevant credential is *that entry's* `github-token`, not the workflow's default `GITHUB_TOKEN`. Confirm the per-entry token is actually threaded into the step's env (or refuse to do remote operations and degrade gracefully).\n3. **Which job/context emits it?** Agent job and safe-outputs MCP server both run without git credentials by design. Any remote git operation there must be wrapped in `try/catch`, fail soft, and surface a clear \"no credentials\" error rather than a raw git stderr.\n4. **Sparse / shallow / monorepo concerns.** Avoid emitting steps that deepen (`git fetch --unshallow`, `--deepen=N`) or widen (`git fetch origin '+refs/heads/*'`) a sparse or shallow checkout of a large monorepo — these need credentials *and* can pull hundreds of MB. Prefer expanding `fetch:` / `fetch-depth:` / `sparse-checkout:` at compile time so it happens during `actions/checkout` with its internal token, never later.\n5. **`gh` is REST, not git.** `gh api …` uses whatever `GH_TOKEN` is in the step's env — it does **not** automatically inherit per-checkout PATs. For cross-org private repos, either thread the right token in or accept the call will 404 and handle it.\n\n## Related\n\n- [docs/src/content/docs/reference/checkout.md](../../../docs/src/content/docs/reference/checkout.md) — \"Git Credentials After Checkout\"\n- [docs/sparseness.md](../../../docs/sparseness.md) — sparse/blobless credential lifecycle\n- [pkg/workflow/checkout_step_generator.go](../../../pkg/workflow/checkout_step_generator.go) — token wiring per checkout\n- [actions/setup/md/safe_outputs_push_to_pr_branch.md](../../../actions/setup/md/safe_outputs_push_to_pr_branch.md) — agent-facing guidance\n",".github/skills/awf-release-integrator/SKILL.md":"---\nname: awf-release-integrator\ndescription: Upgrade gh-aw to latest gh-aw-firewall release and identify follow-up spec tasks.\n---\n\n# AWF Release Integrator\n\nUse this skill when updating `github/gh-aw` to a newer `github/gh-aw-firewall` release.\n\n## Goal\n\nLand the version bump cleanly, rebuild the generated artifacts, and review upstream release/spec changes for any follow-up work that should accompany the bump.\n\n## Required sources\n\nConsult these sources before editing anything:\n\n1. The latest `github/gh-aw-firewall` release metadata and body.\n2. The current gh-aw version pins in `pkg/constants/version_constants.go`.\n3. The canonical AWF config sources spec in `specs/awf-config-sources-spec.md`.\n4. The embedded AWF schema in `pkg/workflow/schemas/awf-config.schema.json`.\n5. AWF config integration code in:\n   - `pkg/workflow/awf_config.go`\n   - `pkg/workflow/awf_config_build.go`\n   - `pkg/workflow/awf_config_schema.go`\n   - `pkg/workflow/awf_config_policy.go`\n   - `pkg/workflow/awf_helpers.go`\n   - related AWF tests under `pkg/workflow/`\n\nFor upstream spec review, compare these files from the target `github/gh-aw-firewall` release or tag:\n\n- `docs/awf-config-spec.md`\n- `docs/awf-config.schema.json`\n- `src/awf-config-schema.json`\n- any release assets such as `awf-config.schema.json`\n\n## Update procedure\n\n1. Read `pkg/constants/version_constants.go` and record:\n   - `DefaultFirewallVersion`\n   - every `AWF*MinVersion` constant\n2. Look up the latest `github/gh-aw-firewall` release.\n3. If the latest release tag matches `DefaultFirewallVersion`, report that no version bump is needed and only continue with spec/release-note review if explicitly requested.\n4. If a newer release exists, update the gh-aw pins:\n   - bump `DefaultFirewallVersion`\n   - update any `AWF*MinVersion` constants that must move because the new release introduces or changes gated flags/features\n5. Review release notes for:\n   - new flags\n   - removed or deprecated flags\n   - schema/config additions\n   - security fixes\n   - behavioral changes that could require new tests, docs, or ADR/spec updates\n6. Review the upstream AWF specification and schema changes against:\n   - `pkg/workflow/schemas/awf-config.schema.json`\n   - `specs/awf-config-sources-spec.md`\n   - local AWF config generation and validation code\n7. Update any directly related gh-aw files needed for a complete integration, such as:\n   - embedded schema copies\n   - version-gated helpers/tests\n   - specs or ADRs documenting newly surfaced AWF behavior\n8. Add or update a patch changeset when the bump changes shipped behavior.\n\n## Required validation\n\nAfter editing, run the full AWF rebuild flow exactly in this order. The second\n`make recompile` is required to refresh image SHA pins resolved during the first pass.\n\n```bash\nmake build\nmake recompile\nmake recompile\n```\n\nThen run focused validation for any touched Go code or schema logic, especially AWF-related tests.\n\n## Expected output\n\nSummarize:\n\n- current gh-aw AWF version → target release\n- updated constants\n- release-note highlights\n- specification/schema differences reviewed\n- additional recommended follow-up updates that are not yet implemented\n\n## Review heuristics\n\nWhen deciding whether more than a version bump is needed, specifically check for:\n\n- new AWF schema properties not represented in gh-aw\n- new CLI flags that need `AWF*MinVersion` gates\n- config fields present in schema but absent from gh-aw generation/validation\n- drift that should update `specs/awf-config-sources-spec.md`\n- tests whose expected pinned AWF version or schema URLs need refresh\n",".squad/templates/skill.md":"---\nname: \"{skill-name}\"\ndescription: \"{what this skill teaches agents}\"\ndomain: \"{e.g., testing, api-design, error-handling}\"\nconfidence: \"low|medium|high\"\nsource: \"{how this was learned: manual, observed, earned}\"\ntools:\n  # Optional — declare MCP tools relevant to this skill's patterns\n  # - name: \"{tool-name}\"\n  #   description: \"{what this tool does}\"\n  #   when: \"{when to use this tool}\"\n---\n\n## Context\n{When and why this skill applies}\n\n## Patterns\n{Specific patterns, conventions, or approaches}\n\n## Examples\n{Code examples or references}\n\n## Anti-Patterns\n{What to avoid}\n",".github/skills/agentic-workflows/SKILL.md":"---\nname: agentic-workflows\ndescription: Route gh-aw design, creation, diagnosis, patching, active debugging, and upgrade requests to the right strategies.\n---\n\n# Agentic Workflows Router\n\nUse this skill when a user asks to design, create, update, debug, or upgrade GitHub Agentic Workflows in this repository.\n\nThis skill is a dispatcher: identify the task type, load the matching workflow prompt/skill file, and follow it directly. Keep responses concise and ask a clarifying question if the correct prompt is unclear.\n\nFor debugging sessions needing CLI setup or run-URL scoping, first load\n`https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/debug-bootstrap.md`; it bootstraps\nthe same shared strategy used by the debugging routes below.\n\nDebugging, incident, health, and failure-related optimization requests use the\nbootstrap's intent routing before generic update, upgrade, or optimization routes,\neven when the CLI is installed. Preserve the supplied guidance repository/ref\nfor all debugging links and public raw fallbacks; URLs showing `main` below are\ndefaults only when no guidance revision is supplied. Reuse already-loaded guides.\nThe intent index is `.github/aw/debug-scenarios.md`; load only the selected\nspecialized route, not every debugging reference.\n\nRepository overlay (optional):\n- Load the target repository's `.github/aw/instructions.md`, if present, after the matched prompt/skill. Use `@.github/aw/instructions.md` only in a matching checkout; do not substitute a guidance-repository overlay.\n- Precedence: repository overlay instructions override upstream defaults when they conflict.\n\nRead only the files you need:\nUse a local guidance checkout only when its repository/ref matches the requested guidance; otherwise use the resolved guidance repository/ref (default `github/gh-aw`).\nIf GitHub API, `gh api`, or GitHub MCP downloads return HTTP 403 (including a token SAML-authorized for a different organization), do not retry with the same token. Fetch the public file without authentication from `https://raw.githubusercontent.com/github/gh-aw/main/<path>` instead, preserving its repository-relative path (including `.github/`). For example: `curl --fail --silent --show-error --location 'https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/create-agentic-workflow.md'`. Use the same fallback for referenced instructions and `SKILL.md` files; never send an Authorization header or token to the raw URL. If the public download fails, report that error rather than proceeding without the required instructions. This fallback is for public `github/gh-aw` content only, not private or enterprise repositories.\n- `.github/aw/action-container-substitutions.md`\n- `.github/aw/agent-runtime-instructions.md`\n- `.github/aw/agentic-chat.md`\n- `.github/aw/agentic-workflows-mcp.md`\n- `.github/aw/analyzing-runs.md`\n- `.github/aw/asciicharts.md`\n- `.github/aw/campaign.md`\n- `.github/aw/charts-trending.md`\n- `.github/aw/charts.md`\n- `.github/aw/cli-commands.md`\n- `.github/aw/compat.md`\n- `.github/aw/configure-agentic-engine.md`\n- `.github/aw/context.md`\n- `.github/aw/create-agentic-workflow-trigger-details.md`\n- `.github/aw/create-agentic-workflow.md`\n- `.github/aw/create-shared-agentic-workflow.md`\n- `.github/aw/debug-agentic-workflow.md`\n- `.github/aw/debug-bootstrap.md`\n- `.github/aw/debug-compilation.md`\n- `.github/aw/debug-live-testing.md`\n- `.github/aw/debug-model-engine-misconfiguration.md`\n- `.github/aw/debug-playbook.md`\n- `.github/aw/debug-scenarios.md`\n- `.github/aw/debug-security-review.md`\n- `.github/aw/debug-workflow-evidence.md`\n- `.github/aw/debug-workflow-health.md`\n- `.github/aw/dependabot.md`\n- `.github/aw/deployment-status.md`\n- `.github/aw/designer-mappings.md`\n- `.github/aw/designer.md`\n- `.github/aw/doctor.md`\n- `.github/aw/documentation-workflows.md`\n- `.github/aw/drive-memory.md`\n- `.github/aw/enclaves.md`\n- `.github/aw/evals.md`\n- `.github/aw/experiments.md`\n- `.github/aw/formal-methods.md`\n- `.github/aw/github-agentic-workflows.md`\n- `.github/aw/github-mcp-server-pagination.md`\n- `.github/aw/github-mcp-server-tools.md`\n- `.github/aw/github-mcp-server.md`\n- `.github/aw/harbor.md`\n- `.github/aw/instructions.md`\n- `.github/aw/intent.md`\n- `.github/aw/jobs.md`\n- `.github/aw/ledger.md`\n- `.github/aw/linter-workflows.md`\n- `.github/aw/llms.md`\n- `.github/aw/loop.md`\n- `.github/aw/lsp.md`\n- `.github/aw/maintainer.md`\n- `.github/aw/mcp-clis.md`\n- `.github/aw/memory-stateful-patterns.md`\n- `.github/aw/memory.md`\n- `.github/aw/messages.md`\n- `.github/aw/multi-agent-research.md`\n- `.github/aw/network.md`\n- `.github/aw/optimize-agentic-workflow.md`\n- `.github/aw/patterns.md`\n- `.github/aw/playwright.md`\n- `.github/aw/pr-reviewer.md`\n- `.github/aw/release-workflow.md`\n- `.github/aw/report.md`\n- `.github/aw/reuse.md`\n- `.github/aw/safe-outputs-automation.md`\n- `.github/aw/safe-outputs-content.md`\n- `.github/aw/safe-outputs-management.md`\n- `.github/aw/safe-outputs-runtime.md`\n- `.github/aw/safe-outputs.md`\n- `.github/aw/serena-tool.md`\n- `.github/aw/shared-safe-jobs.md`\n- `.github/aw/skills.md`\n- `.github/aw/subagents.md`\n- `.github/aw/syntax-agentic.md`\n- `.github/aw/syntax-checkout.md`\n- `.github/aw/syntax-core.md`\n- `.github/aw/syntax-engine.md`\n- `.github/aw/syntax-tools-imports.md`\n- `.github/aw/syntax.md`\n- `.github/aw/test-coverage.md`\n- `.github/aw/test-expression.md`\n- `.github/aw/token-optimization-caching-budgets.md`\n- `.github/aw/token-optimization-observability.md`\n- `.github/aw/token-optimization.md`\n- `.github/aw/triggers.md`\n- `.github/aw/update-agentic-workflow.md`\n- `.github/aw/upgrade-agentic-workflows.md`\n- `.github/aw/visual-regression.md`\n- `.github/aw/work-queue.md`\n- `.github/aw/workflow-constraints.md`\n- `.github/aw/workflow-editing.md`\n- `.github/aw/workflow-patterns.md`\n\nAfter loading the matching workflow prompt or skill, follow it directly:\n- Design workflows from scratch via interview: `.github/aw/designer.md`\n- Create new workflows: `.github/aw/create-agentic-workflow.md`\n- Configure or add declarative engines: `.github/aw/configure-agentic-engine.md`\n- Update existing workflows: `.github/aw/update-agentic-workflow.md`\n- Diagnose, patch, audit, or actively debug workflows: `.github/aw/debug-agentic-workflow.md` (local-first strategy, evidence triage and live gates)\n- Analyze existing runs, logs, or recurring failures: `.github/aw/analyzing-runs.md`. General repository-wide debugging or optimization requests start here with failure clustering before selecting a workflow.\n- AWF model/endpoint 400s, silent cross-family sub-agent failures, `model: auto` failures, install-step 404s after a version pin, or questions about version fields: go directly to `.github/aw/debug-agentic-workflow.md#model-and-engine-misconfiguration` before suggesting model changes.\n- Upgrade workflows and fix deprecations: `.github/aw/upgrade-agentic-workflows.md`\n- Create shared components or MCP wrappers: `.github/aw/create-shared-agentic-workflow.md`\n- Create report-generating workflows: `.github/aw/report.md`\n- Fix Dependabot manifest PRs: `.github/aw/dependabot.md`\n- Analyze coverage workflows: `.github/aw/test-coverage.md`\n- Render compact markdown charts: `.github/aw/asciicharts.md`\n- Map CLI commands to MCP usage: `.github/aw/cli-commands.md`\n- Choose workflow architecture and patterns: `.github/aw/patterns.md`\n- Design, deploy, inspect or recover a Git-backed work queue: `.github/aw/work-queue.md`\n- Optimize token usage and cost: `.github/aw/token-optimization.md`\n- Advanced cost controls without native settings (custom AIC allowances by server size or shared organization budget policies): read `docs/src/content/docs/reference/cost-management.md#configure-advanced-cost-controls-with-admission` ([published guidance](https://github.github.com/gh-aw/reference/cost-management/#configure-advanced-cost-controls-with-admission)). Explain the external authority requirement and cooperative limits; do not invent frontmatter fields or promise hard caps, reservations, or mid-run cancellation.\n- Design long-running multi-agent research workflows: `.github/aw/multi-agent-research.md`\n- Add skills or agent plugins requested by the user (`skills:` / `plugins:` frontmatter, never on-the-fly installs): `.github/aw/skills.md`\n\nWhen the task involves OTEL, OTLP, traces, observability backends, or telemetry-driven analysis, also read and follow `skills/otel-queries/SKILL.md` after loading the matching workflow prompt or skill.\n\nWhen creating, updating, diagnosing or upgrading a workflow that uses `tools.work-queue`, also load `.github/aw/work-queue.md` after the primary prompt. Load deployment docs, operator reference or specification only when that task needs them.\n",".claude/skills/playwright-cli/SKILL.md":"---\nname: playwright-cli\ndescription: Automate browser interactions, test web pages and work with Playwright tests.\nallowed-tools: Bash(playwright-cli:*) Bash(npx:*) Bash(npm:*)\n---\n\n# Browser Automation with playwright-cli\n\n## Quick start\n\n```bash\n# open new browser\nplaywright-cli open\n# navigate to a page\nplaywright-cli goto https://playwright.dev\n# interact with the page using refs from the snapshot\nplaywright-cli click e15\nplaywright-cli type \"page.click\"\nplaywright-cli press Enter\n# take a screenshot (rarely used, as snapshot is more common)\nplaywright-cli screenshot\n# close the browser\nplaywright-cli close\n```\n\n## Commands\n\n### Core\n\n```bash\nplaywright-cli open\n# open and navigate right away\nplaywright-cli open https://example.com/\nplaywright-cli goto https://playwright.dev\nplaywright-cli type \"search query\"\nplaywright-cli click e3\nplaywright-cli dblclick e7\n# --submit presses Enter after filling the element\nplaywright-cli fill e5 \"user@example.com\"  --submit\nplaywright-cli drag e2 e8\n# drop files or data onto an element (from outside the page)\nplaywright-cli drop e4 --path=./image.png\nplaywright-cli drop e4 --data=\"text/plain=hello world\"\nplaywright-cli hover e4\nplaywright-cli select e9 \"option-value\"\nplaywright-cli upload ./document.pdf\nplaywright-cli check e12\nplaywright-cli uncheck e12\nplaywright-cli snapshot\nplaywright-cli eval \"document.title\"\nplaywright-cli eval \"el => el.textContent\" e5\n# get element id, class, or any attribute not visible in the snapshot\nplaywright-cli eval \"el => el.id\" e5\nplaywright-cli eval \"el => el.getAttribute('data-testid')\" e5\nplaywright-cli dialog-accept\nplaywright-cli dialog-accept \"confirmation text\"\nplaywright-cli dialog-dismiss\nplaywright-cli resize 1920 1080\nplaywright-cli close\n```\n\n### Navigation\n\n```bash\nplaywright-cli go-back\nplaywright-cli go-forward\nplaywright-cli reload\n```\n\n### Keyboard\n\n```bash\nplaywright-cli press Enter\nplaywright-cli press ArrowDown\nplaywright-cli keydown Shift\nplaywright-cli keyup Shift\n```\n\n### Mouse\n\n```bash\nplaywright-cli mousemove 150 300\nplaywright-cli mousedown\nplaywright-cli mousedown right\nplaywright-cli mouseup\nplaywright-cli mouseup right\nplaywright-cli mousewheel 0 100\n```\n\n### Save as\n\n```bash\nplaywright-cli screenshot\nplaywright-cli screenshot e5\nplaywright-cli screenshot --filename=page.png\nplaywright-cli pdf --filename=page.pdf\n```\n\n### Tabs\n\n```bash\nplaywright-cli tab-list\nplaywright-cli tab-new\nplaywright-cli tab-new https://example.com/page\nplaywright-cli tab-close\nplaywright-cli tab-close 2\nplaywright-cli tab-select 0\n```\n\n### Storage\n\n```bash\nplaywright-cli state-save\nplaywright-cli state-save auth.json\nplaywright-cli state-load auth.json\n\n# Cookies\nplaywright-cli cookie-list\nplaywright-cli cookie-list --domain=example.com\nplaywright-cli cookie-get session_id\nplaywright-cli cookie-set session_id abc123\nplaywright-cli cookie-set session_id abc123 --domain=example.com --httpOnly --secure\nplaywright-cli cookie-delete session_id\nplaywright-cli cookie-clear\n\n# LocalStorage\nplaywright-cli localstorage-list\nplaywright-cli localstorage-get theme\nplaywright-cli localstorage-set theme dark\nplaywright-cli localstorage-delete theme\nplaywright-cli localstorage-clear\n\n# SessionStorage\nplaywright-cli sessionstorage-list\nplaywright-cli sessionstorage-get step\nplaywright-cli sessionstorage-set step 3\nplaywright-cli sessionstorage-delete step\nplaywright-cli sessionstorage-clear\n```\n\n### Network\n\n```bash\nplaywright-cli route \"**/*.jpg\" --status=404\nplaywright-cli route \"https://api.example.com/**\" --body='{\"mock\": true}'\nplaywright-cli route-list\nplaywright-cli unroute \"**/*.jpg\"\nplaywright-cli unroute\n```\n\n### DevTools\n\n```bash\nplaywright-cli console\nplaywright-cli console warning\nplaywright-cli requests\nplaywright-cli request 5\nplaywright-cli run-code \"async page => await page.context().grantPermissions(['geolocation'])\"\nplaywright-cli run-code --filename=script.js\nplaywright-cli tracing-start\nplaywright-cli tracing-stop\nplaywright-cli video-start video.webm\nplaywright-cli video-chapter \"Chapter Title\" --description=\"Details\" --duration=2000\nplaywright-cli video-stop\n\n# launch the dashboard for UI review / design feedback — user annotates the page, you receive the annotated screenshot, snapshot, and notes\nplaywright-cli show --annotate\n\n# generate a Playwright locator for an element from its ref or selector\nplaywright-cli generate-locator e5 --raw\n\n# show a persistent highlight overlay for an element, optionally with a custom style\nplaywright-cli highlight e5\nplaywright-cli highlight e5 --style=\"outline: 3px dashed red\"\n# hide a single element highlight, or all page highlights when no target is given\nplaywright-cli highlight e5 --hide\nplaywright-cli highlight --hide\n```\n\n## Raw output\n\nThe global `--raw` option strips page status, generated code, and snapshot sections from the output, returning only the result value. Use it to pipe command output into other tools. Commands that don't produce output return nothing.\n\n```bash\nplaywright-cli --raw eval \"JSON.stringify(performance.timing)\" | jq '.loadEventEnd - .navigationStart'\nplaywright-cli --raw eval \"JSON.stringify([...document.querySelectorAll('a')].map(a => a.href))\" > links.json\nplaywright-cli --raw snapshot > before.yml\nplaywright-cli click e5\nplaywright-cli --raw snapshot > after.yml\ndiff before.yml after.yml\nTOKEN=$(playwright-cli --raw cookie-get session_id)\nplaywright-cli --raw localstorage-get theme\n```\n\nFor structured output wrapping every reply as JSON, pass --json\n```bash\nplaywright-cli list --json\n```\n\n## Open parameters\n```bash\n# Use specific browser when creating session\nplaywright-cli open --browser=chrome\nplaywright-cli open --browser=firefox\nplaywright-cli open --browser=webkit\nplaywright-cli open --browser=msedge\n\n# Use persistent profile (by default profile is in-memory)\nplaywright-cli open --persistent\n# Use persistent profile with custom directory\nplaywright-cli open --profile=/path/to/profile\n\n# Connect to browser via Playwright Extension\nplaywright-cli attach --extension=chrome\n\n# Connect to a running Chrome or Edge by channel name\nplaywright-cli attach --cdp=chrome\nplaywright-cli attach --cdp=msedge\n\n# Connect to a running browser via CDP endpoint\nplaywright-cli attach --cdp=http://localhost:9222\n\n# Start with config file\nplaywright-cli open --config=my-config.json\n\n# Close the browser\nplaywright-cli close\n# Detach from an attached browser (leaves the external browser running)\nplaywright-cli -s=msedge detach\n# Delete user data for the default session\nplaywright-cli delete-data\n```\n\n## Snapshots\n\nAfter each command, playwright-cli provides a snapshot of the current browser state.\n\n```bash\n> playwright-cli goto https://example.com\n### Page\n- Page URL: https://example.com/\n- Page Title: Example Domain\n### Snapshot\n[Snapshot](.playwright-cli/page-2026-02-14T19-22-42-679Z.yml)\n```\n\nYou can also take a snapshot on demand using `playwright-cli snapshot` command. All the options below can be combined as needed.\n\n```bash\n# default - save to a file with timestamp-based name\nplaywright-cli snapshot\n\n# save to file, use when snapshot is a part of the workflow result\nplaywright-cli snapshot --filename=after-click.yaml\n\n# snapshot an element instead of the whole page\nplaywright-cli snapshot \"#main\"\n\n# limit snapshot depth for efficiency, take a partial snapshot afterwards\nplaywright-cli snapshot --depth=4\nplaywright-cli snapshot e34\n\n# include each element's bounding box as [box=x,y,width,height]\nplaywright-cli snapshot --boxes\n```\n\n## Targeting elements\n\nBy default, use refs from the snapshot to interact with page elements.\n\n```bash\n# get snapshot with refs\nplaywright-cli snapshot\n\n# interact using a ref\nplaywright-cli click e15\n```\n\nYou can also use css selectors or Playwright locators.\n\n```bash\n# css selector\nplaywright-cli click \"#main > button.submit\"\n\n# role locator\nplaywright-cli click \"getByRole('button', { name: 'Submit' })\"\n\n# test id\nplaywright-cli click \"getByTestId('submit-button')\"\n```\n\n## Browser Sessions\n\n```bash\n# create new browser session named \"mysession\" with persistent profile\nplaywright-cli -s=mysession open example.com --persistent\n# same with manually specified profile directory (use when requested explicitly)\nplaywright-cli -s=mysession open example.com --profile=/path/to/profile\nplaywright-cli -s=mysession click e6\nplaywright-cli -s=mysession close  # stop a named browser\nplaywright-cli -s=mysession delete-data  # delete user data for persistent session\n\nplaywright-cli list\n# Close all browsers\nplaywright-cli close-all\n# Forcefully kill all browser processes\nplaywright-cli kill-all\n```\n\n## Installation\n\nIf global `playwright-cli` command is not available, try a local version via `npx playwright-cli`:\n\n```bash\nnpx --no-install playwright-cli --version\n```\n\nWhen local version is available, use `npx playwright-cli` in all commands. Otherwise, install `playwright-cli` as a global command:\n\n```bash\nnpm install -g @playwright/cli@latest\n```\n\n## Example: Form submission\n\n```bash\nplaywright-cli open https://example.com/form\nplaywright-cli snapshot\n\nplaywright-cli fill e1 \"user@example.com\"\nplaywright-cli fill e2 \"password123\"\nplaywright-cli click e3\nplaywright-cli snapshot\nplaywright-cli close\n```\n\n## Example: Multi-tab workflow\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli tab-new https://example.com/other\nplaywright-cli tab-list\nplaywright-cli tab-select 0\nplaywright-cli snapshot\nplaywright-cli close\n```\n\n## Example: Debugging with DevTools\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli click e4\nplaywright-cli fill e7 \"test\"\nplaywright-cli console\nplaywright-cli requests\nplaywright-cli close\n```\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli tracing-start\nplaywright-cli click e4\nplaywright-cli fill e7 \"test\"\nplaywright-cli tracing-stop\nplaywright-cli close\n```\n\n## Example: Interactive session\n\nAsk the user for UI review or design feedback. The user draws boxes on the live page and types comments; you receive the annotated screenshot, the snapshot of the marked region, and the user's notes. Use this whenever the user asks for \"UI review\", \"design feedback\", or to \"ask the user what they think / want / mean\":\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli show --annotate\n```\n\n## Specific tasks\n\n* **Running and Debugging Playwright tests** [references/playwright-tests.md](references/playwright-tests.md)\n* **Request mocking** [references/request-mocking.md](references/request-mocking.md)\n* **Running Playwright code** [references/running-code.md](references/running-code.md)\n* **Browser session management** [references/session-management.md](references/session-management.md)\n* **Spec-driven testing (plan / generate / heal)** [references/spec-driven-testing.md](references/spec-driven-testing.md)\n* **Storage state (cookies, localStorage)** [references/storage-state.md](references/storage-state.md)\n* **Test generation** [references/test-generation.md](references/test-generation.md)\n* **Tracing** [references/tracing.md](references/tracing.md)\n* **Video recording** [references/video-recording.md](references/video-recording.md)\n* **Inspecting element attributes** [references/element-attributes.md](references/element-attributes.md)\n",".github/skills/create-canvas/SKILL.md":"---\nname: create-canvas\ndescription: Author, validate, and debug canvas extensions that the agent can open in the GitHub Copilot app's side panel. Use when creating, reviewing, or troubleshooting a canvas extension — including its actions, inputs, rendered content, and the surrounding extension wiring (tools, hooks, lifecycle).\n---\n\n# Extension Canvas Authoring\n\nUse this skill when creating or debugging an extension canvas that integrates with the runtime canvas model.\n\nThe host app no longer participates in extension canvas registration. Extensions declare canvases directly to the runtime via the Copilot SDK on `joinSession`; the runtime routes provider callbacks (`canvas.open`, `canvas.action.invoke`, etc.) straight to the declaring connection; the host app just renders whatever URL the provider returns.\n\n## Authoring workflow (do this in order)\n\n1. **Decide the scope.** Project (`.github/extensions/<name>/`) is committed to the repo and shared with the team. User (`$COPILOT_HOME/extensions/<name>/`) is local to the current user. Session (`$COPILOT_HOME/session-state/<sessionId>/extensions/<name>/`) is loaded only for the current session — ideal for a throwaway canvas for one conversation. Unless the request makes it obvious, ask before creating files — the choice changes who sees the extension, whether it's committed, and the resulting `extensionId`.\n\n2. **Scaffold via tool, don't hand-write the skeleton.**\n   ```\n   extensions_manage({ operation: \"scaffold\", kind: \"canvas\", name: \"<name>\", location: \"project\" | \"user\" | \"session\" })\n   ```\n   The canvas scaffold produces an `extension.mjs` with `joinSession({ canvases: [createCanvas({...})] })`, a working loopback HTTP server per instance, an example action, and `onClose` cleanup. Edit from there.\n\n3. **Edit the file.** Implement your `open`, `actions[]`, optional `onClose`, and (if needed) tools/hooks alongside.\n\n4. **Reload.** Call `extensions_reload`. Stale canvas instances flip to `stale`, then back to `ready` once the provider reconnects.\n\n5. **Verify.** Call `extensions_manage({ operation: \"list\" })` and `extensions_manage({ operation: \"inspect\", name: \"<name>\" })`. If the extension is marked failed, `inspect` surfaces the log file path and a tail — that log is the primary debugging surface.\n\n6. **Drive it.** Run the validation checklist below via `list_canvas_capabilities`, `open_canvas`, and `invoke_canvas_action`.\n\n## Extension shape\n\nA canvas extension is a Copilot CLI extension running as a forked Node process that speaks JSON-RPC over stdio to the CLI.\n\n- Entry file **must** be named `extension.mjs` (ES modules only; TypeScript is not supported).\n- Discovery scans only immediate subdirectories of `.github/extensions/` (relative to git root), `$COPILOT_HOME/extensions/`, and `$COPILOT_HOME/session-state/<sessionId>/extensions/`.\n- The runtime auto-derives a stable `extensionId` of `${source}:${name}` (e.g. `project:my-extension`); session-scoped extensions embed the session id as `session:<sessionId>:<name>`.\n- `@github/copilot-sdk` is resolved automatically by the CLI — do **not** add a `package.json` or `node_modules` for it.\n- `stdout` is reserved for JSON-RPC. **Never `console.log`.** Use `session.log(message, { level, ephemeral })`.\n- Tool names must be globally unique across all loaded extensions — collisions cause the second extension to fail.\n\n## `joinSession` signature\n\n```js\nimport { joinSession, createCanvas, CanvasError } from \"@github/copilot-sdk/extension\";\n\nconst session = await joinSession({\n    canvases: [createCanvas({ /* ... */ })],\n    tools: [/* optional */],\n    hooks: {/* optional */},\n    onPermissionRequest: async (request) => ({ kind: \"approve-once\" }), // optional\n});\n// session.sessionId, session.workspacePath (string | undefined),\n// session.send, session.sendAndWait, session.log, session.on, session.rpc\n```\n\n## Canvas API (`canvas.d.ts`)\n\n```js\nimport { createCanvas, CanvasError, joinSession } from \"@github/copilot-sdk/extension\";\n\nconst canvas = createCanvas({\n    id: \"main\",                  // unique within this extension\n    displayName: \"My canvas\",    // human-readable label shown in host chrome\n    description: \"Short summary the agent sees in the system-prompt canvas catalog.\",\n    inputSchema: { /* JSON Schema for open input (optional) */ },\n    actions: [\n        {\n            name: \"do_thing\",        // unique within this canvas; MUST NOT start with `canvas.`\n            description: \"...\",\n            inputSchema: { /* JSON Schema (optional) */ },\n            handler: async (ctx) => {\n                // ctx: { sessionId, extensionId, canvasId, instanceId, actionName, input, host }\n                // Return raw result; throw CanvasError(\"code\", \"message\") for errors.\n                return { /* ... */ };\n            },\n        },\n    ],\n    open: async (ctx) => {\n        // ctx: { sessionId, extensionId, canvasId, instanceId, input, host }\n        // Idempotent: same instanceId may arrive again after provider reconnect.\n        return {\n            url: \"http://127.0.0.1:<loopback-port>/\", // optional for native canvases\n            title: \"...\",   // optional, shown in host chrome\n            status: \"...\",  // optional, shown in host chrome\n        };\n    },\n    onClose: async (ctx) => {\n        // Optional. Fire-and-forget; return value ignored.\n    },\n});\n```\n\nRuntime rules:\n- Action names starting with `canvas.` are reserved and rejected at declaration time.\n- Every `actions[]` entry must have a `handler`; missing handlers fall through to `CanvasError.noHandler()`.\n- Canvas-level `inputSchema` is validated before `open`; action-level `inputSchema` is validated before dispatch. Failure returns `canvas_input_invalid` with Ajv details.\n- Return raw values from action handlers; throw `CanvasError(\"code\", \"message\")` for errors.\n- `ctx.canvasId` (not `ctx.id`) is the canvas identifier in handler context.\n\n## Loopback server pattern\n\n```js\nimport { createServer } from \"node:http\";\nimport { createCanvas, joinSession } from \"@github/copilot-sdk/extension\";\n\nconst servers = new Map(); // instanceId → { server, url }\n\nasync function startServer(instanceId) {\n    const server = createServer((req, res) => {\n        res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n        res.end(renderHtml(instanceId));\n    });\n    await new Promise((r) => server.listen(0, \"127.0.0.1\", r));\n    const port = server.address().port;\n    return { server, url: `http://127.0.0.1:${port}/` };\n}\n\nawait joinSession({\n    canvases: [\n        createCanvas({\n            id: \"my-canvas\",\n            displayName: \"My canvas\",\n            description: \"...\",\n            open: async (ctx) => {\n                let entry = servers.get(ctx.instanceId);\n                if (!entry) {\n                    entry = await startServer(ctx.instanceId);\n                    servers.set(ctx.instanceId, entry);\n                }\n                return { title: \"My canvas\", url: entry.url };\n            },\n            onClose: async (ctx) => {\n                const entry = servers.get(ctx.instanceId);\n                if (entry) {\n                    servers.delete(ctx.instanceId);\n                    await new Promise((r) => entry.server.close(() => r()));\n                }\n            },\n        }),\n    ],\n});\n```\n\nBind embedded servers to **loopback only** (`127.0.0.1`). The host only embeds loopback URLs. Push state updates to the iframe with Server-Sent Events (`/events`).\n\n## ID model — three distinct identifiers\n\n- **`canvasId`** — the canvas *type* declared by the extension. Accepted by `list_canvas_capabilities` and `open_canvas`; not by `invoke_canvas_action`.\n- **`extensionId`** — auto-derived `${source}:${name}` (e.g. `project:triage-board`). Only pass it to disambiguate when two extensions declare the same `canvasId`.\n- **`instanceId`** — caller-invented handle for one running panel (slug or UUID). Two panels of the same canvas need two `instanceId`s. Validated against `^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$` — max 128 chars, alphanumeric first character, then only `[A-Za-z0-9._-]`.\n\nExample: `open_canvas({ canvasId: \"triage-board\", instanceId: \"triage-1\" })` then `invoke_canvas_action({ instanceId: \"triage-1\", actionName: \"refresh\" })`.\n\n## Agent-side canvas tools\n\n```\n// Open a canvas panel\nopen_canvas({ canvasId: \"my-canvas\", instanceId: \"my-canvas-1\", input?: {...} })\n// Returns { instanceId, url? } — no extensionId needed unless two providers share the canvasId.\n\n// Discover a canvas type's actions and input schema\nlist_canvas_capabilities({ canvasId: \"my-canvas\" })\n\n// Invoke an action on an open panel\ninvoke_canvas_action({ instanceId: \"my-canvas-1\", actionName: \"do_thing\", input?: {...} })\n```\n\nRe-opening the same `instanceId` focuses the existing panel (the host emits `session.canvas.opened` with `reopen: true` and reloads the iframe without invoking the provider again).\n\n## Injecting instructions\n\n- **`additionalContext` from hooks** (everyday path). `onSessionStart` → once-per-session guidance; `onUserPromptSubmitted` → per-turn nudges. The runtime appends it as a `developer`-role message.\n- **`systemMessage` on `joinSession`** (system-prompt path):\n  - `{ mode: \"append\", content }` — append to the SDK foundation.\n  - `{ mode: \"customize\", sections: {...} }` — override individual sections (`identity`, `tone`, `safety`, `custom_instructions`, `runtime_instructions`, etc.) with `replace` / `remove` / `append` / `prepend` / transform-callback actions.\n  - **Do NOT use** `{ mode: \"replace\", content }` from an extension — it discards the entire SDK-managed prompt including safety guardrails.\n\n## State model\n\n**`instanceId` identifies the panel, not the data.** Never key persistent state by `instanceId` alone — iframes reload, extensions restart, and a fresh `instanceId` may be opened for the same logical content.\n\nPick the right storage scope:\n- **Per session / workspace** — write artifact files into `session.workspacePath` (returned by `joinSession`). Lives alongside session artifacts, cleaned up with the session.\n- **Per user / global** — write under `$COPILOT_HOME/extensions/<extension-name>/artifacts/`. Follows the user across sessions.\n- **Per artifact / document** — key under a stable `documentId` or file path passed via `input`.\n- **In-repo, committed artifacts** — architecture diagrams, ADRs, design docs that belong in the repo. Write to a sensible repo path.\n- **Per panel (`instanceId`)** — only ephemeral UI state that genuinely should not survive a reload.\n\nResolve the owning ID in `open()` from `input`, load persisted state for that ID, and render. Two `instanceId`s for the same `documentId` should show the same content.\n\n## App theme tokens\n\nThe runtime mirrors the canvas theme contract onto your canvas document:\n- Root/body attributes: `data-color-mode`, `data-dark-theme`, `data-light-theme`, `data-theme-source`, `data-theme-tone`, `data-visual-mode`, `pointer-on-hover` class.\n- Semantic tokens: `--background-color-default`, `--border-color-default`, `--text-color-default`, `--text-color-muted`, `--color-focus-outline`.\n- Type ramp: `--font-sans`, `--font-mono`, `--font-weight-semibold`, `--text-body-medium`, `--leading-body-medium`.\n- True-color: `--true-color-red`, `--true-color-red-muted`, `--true-color-blue`, `--true-color-blue-muted`.\n\n```css\nbody {\n    margin: 0;\n    background: var(--background-color-default, #ffffff);\n    color: var(--text-color-default, #1f2328);\n    font-family: var(--font-sans, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n    font-size: var(--text-body-medium, 14px);\n    line-height: var(--leading-body-medium, 20px);\n}\n```\n\nOnly depend on the attributes, classes, and variables documented above — others are app-internal and can change.\n\n## Validation checklist\n\n1. **Discovery** — confirm your canvas appears in the `<canvases>` section of the system prompt, then verify `list_canvas_capabilities({ canvasId })` returns your `actions[]`.\n2. **Open** — call `open_canvas({ canvasId, input? })`. Confirm you receive `{ instanceId, url? }` and no error.\n3. **Action** — call `invoke_canvas_action({ instanceId, actionName, input? })` and confirm correct response payload.\n4. **Input validation** — call `open_canvas` with input that fails `inputSchema`. Expect `canvas_input_invalid`.\n5. **Reserved verb rejection** — call `invoke_canvas_action(instanceId, \"canvas.open\", ...)`. Expect `canvas_reserved_action_name`.\n\n## Debugging\n\n1. `extensions_manage({ operation: \"list\" })` — is the extension loaded? Marked `failed`?\n2. `extensions_manage({ operation: \"inspect\", name: \"<name>\" })` — surfaces log file path and tail. Primary debugging surface.\n3. After editing, **always** `extensions_reload` before re-running RPC calls.\n4. To force iframe reload, call `open_canvas` again with the same `instanceId`.\n5. If not discovered at all, verify the file is named exactly `extension.mjs` and lives in an immediate subdirectory of `.github/extensions/`, `$COPILOT_HOME/extensions/`, or the session's extensions dir.\n\n## Sharing extensions via Gist\n\nUse `share_extension` / `install_extension` tools. Gist format:\n- Flat file structure (subdirs encoded as `\\` in gist keys, decoded on install).\n- A `copilot-extension.json` manifest: `{ \"name\": \"<extension-name>\", \"version\": 1 }`.\n- `node_modules/`, `dist/`, `build/`, `.git/`, hidden dirs (except `.github/`) skipped during share.\n- Per-file cap: ~1 MB; total cap: ~5 MB.\n\n## Common pitfalls\n\n- **`console.log` corrupts JSON-RPC.** Use `session.log()` for user-visible messaging.\n- Do not declare action names starting with `canvas.`.\n- Do not forget to wire a `handler` on every `actions[]` entry.\n- Bind servers to **loopback only**.\n- `open` may be re-invoked on provider reconnect — treat it as idempotent and rehydrate from durable storage.\n- Return raw values from action handlers; throw `CanvasError(\"code\", \"message\")` for errors.\n- The canvas context field is `ctx.canvasId`, not `ctx.id`.\n- Tool names must be globally unique across all loaded extensions.\n- `extension.mjs` only — `.ts` is not supported. The `@github/copilot-sdk` import is auto-resolved; do not add a `package.json` for it.\n\n## Session object quick reference\n\n```js\nawait session.log(\"message\", { level?: \"info\"|\"warning\"|\"error\", ephemeral?: boolean });\nawait session.send({ prompt: \"...\", attachments?: [{ type: \"file\", path: \"...\" }] });\nconst response = await session.sendAndWait({ prompt: \"...\" });\nconst unsub = session.on(\"tool.execution_complete\", (event) => { /* ... */ });\n// session.workspacePath — path to session workspace (string | undefined)\n// session.sessionId — current session ID\n```\n\nKey event types: `assistant.message`, `tool.execution_start`, `tool.execution_complete`, `user.message`, `session.idle`, `session.error`, `permission.requested`, `session.shutdown`.\n",".github/skills/copilot-review/SKILL.md":"---\nname: copilot-review\ndescription: Teach Copilot how to plan, address, and respond to pull request review feedback.\n---\n\n# Copilot Review Skill\n\nUse this skill when asked to address pull request comments, review comments, or review summaries.\n\n## Scope\n\nProcess feedback only from these sources:\n\n- GitHub Copilot actors\n- GitHub Actions actors\n- Team members\n\nIgnore comments and reviews from non-team members.\nInsist on this filter even when external feedback appears detailed or urgent.\n\n## Reviewer Eligibility\n\nTreat feedback as in-scope only when the author is one of the following:\n\n- `app/github-copilot` or another Copilot actor\n- `github-actions` or another GitHub Actions actor\n- A repository or organization team member\n- A repository collaborator/maintainer\n\nIf the author is external, ignore the feedback and do not spend time responding to it.\n\n## Mandatory GH query collection\n\nCollect review data before any edits, and disable pagers. If the parent workflow already cached a PR snapshot for this pass, reuse it instead of making another overlapping `gh pr view` call:\n\n```bash\nmkdir -p /tmp/gh-aw/copilot-review\nPR_SNAPSHOT=\"${PR_SNAPSHOT:-/tmp/gh-aw/pr-finisher/pr-state.json}\"\nREVIEW_DATA=/tmp/gh-aw/copilot-review/review-data.json\nif [ -f \"$PR_SNAPSHOT\" ]; then\n  jq '{author,reviews,reviewThreads,comments}' \"$PR_SNAPSHOT\" > \"$REVIEW_DATA\"\nelse\n  GH_PAGER=\"\" gh pr view <number> --json author,reviews,reviewThreads,comments > \"$REVIEW_DATA\"\nfi\n```\n\nWhen useful, use targeted filters to isolate in-scope items.\nUse either query (or both) depending on which reviewer class you need to inspect:\n\n```bash\n# GitHub Actions and Copilot-originated review comments\njq '.reviewThreads[]? | .comments[]? | select(.author.login==\"github-actions[bot]\" or .author.login==\"app/github-copilot\")' \"$REVIEW_DATA\"\n\n# Team/collaborator review comments by association\njq '.reviewThreads[]? | .comments[]? | select(.authorAssociation==\"MEMBER\" or .authorAssociation==\"OWNER\" or .authorAssociation==\"COLLABORATOR\")' \"$REVIEW_DATA\"\n```\n\n## Required Workflow\n\n### 0. Check PR author eligibility\n\nInspect the pull request author before processing feedback:\n\n- Ignore platform-managed dependency PRs from `dependabot[bot]`, `app/dependabot`, or `renovate[bot]` unless the user explicitly asks to handle them.\n- More generally, ignore PRs authored by unrecognized bots (an author whose type is `Bot` or whose login ends with `[bot]`) unless the user explicitly includes that bot.\n- Continue to handle PRs from trusted GitHub automation such as `app/github-copilot` and `github-actions[bot]`.\n\nThis author check is separate from reviewer eligibility: trusted review comments do not make an otherwise ignored bot-authored PR eligible.\nFor an ignored bot-authored PR, report that platform automation manages it and stop without collecting feedback, modifying files, or replying to comments.\n\n### 1. Collect all feedback first\n\nBefore making changes, gather all pull request discussion in one pass:\n\n- pull request review summaries\n- pull request review comments / review threads\n- pull request conversation comments\n\nDo not respond comment-by-comment before understanding the full set of requests.\n\n### 2. Filter to allowed reviewers\n\nRemove feedback from people who are not team members or trusted automation.\n\nKeep only comments and reviews from the allowed reviewer set above.\nTreat `CONTRIBUTOR`, `FIRST_TIME_CONTRIBUTOR`, `FIRST_TIMER`, and `NONE` as out-of-scope unless the author is trusted automation.\n\n### 3. Bucket the feedback\n\nGroup the remaining feedback into clear buckets such as:\n\n- bugs / correctness\n- tests\n- documentation\n- style / clarity\n- CI / workflow issues\n- duplicate or overlapping requests\n- will not fix / needs justification\n\nCreate a short plan that covers every bucket before editing code.\n\n### 4. Resolve each bucket\n\nFor every bucket, decide whether to:\n\n- make the requested change\n- partially apply it\n- decline it with a clear justification\n\nDo not silently ignore in-scope feedback.\n\n### 5. Validate before replying\n\nAfter making changes, re-check the diff and run the relevant validation so replies describe the final state accurately.\n\n### 6. Reply to every in-scope review comment\n\nEvery in-scope review comment must get a direct reply that says what happened.\nThis includes all in-scope `github-actions[bot]` review comments and threads.\n\nEach reply should briefly state one of:\n\n- what change was made\n- where the fix was applied\n- why no change was made\n- why the comment is already satisfied by another change\n\nIf several comments are handled by the same fix, still reply to each comment individually.\n\n### 7. Resolve threads after answering\n\nIf a review thread has been fully addressed and the tooling supports it:\n\n- reply with the action taken\n- resolve the thread\n\nDo not resolve a thread without answering it first.\n\n## Response Rules\n\n- Answer every in-scope review comment.\n- Review summaries from in-scope reviewers must also be addressed in the work plan.\n- Keep replies concise, specific, and action-oriented.\n- Mention file names or behavior changes when helpful.\n- When declining a request, explain why it is being ignored.\n- When a comment is outdated, reply that it is obsolete because of the newer change and resolve if appropriate.\n\n## Planning Standard\n\nBefore editing, produce a compact internal checklist that maps:\n\n- each in-scope comment or review\n- its bucket\n- planned action\n- final reply status\n\nOnly start implementation after the full feedback set has been reviewed and bucketed.\n\n## Completion Standard\n\nFor eligible PRs, the task is complete only when all of the following are true:\n\n- all in-scope comments and reviews were collected\n- the PR author passed the bot eligibility check\n- non-team-member feedback was ignored\n- each in-scope item was resolved by code changes or explicit justification\n- every in-scope review comment received a reply describing the action taken\n- addressed threads were resolved when possible\n",".github/skills/custom-engine-implementation/SKILL.md":"---\nname: custom-engine-implementation\ndescription: Add and test declarative behavior-defined agentic engines in gh-aw, extending Go infrastructure only when necessary.\n---\n\n# Custom Engine Implementation\n\nUse this skill when adding a new agentic engine definition or extending the\nbehavior-defined engine infrastructure.\n\n## Choose the smallest implementation\n\nPrefer a shared Markdown engine definition. Installation, execution, MCP\nconfiguration, provider routing, caching, manifests, plugins, network defaults,\nharness scripts, and log parsing can already be declared through\n`engine.behaviors`.\n\nOnly change Go code when the engine needs a reusable behavior that the\ndeclarative model cannot express. Add a dedicated Go engine only when the\nshared behavior-defined runtime cannot run the engine at all.\n\n| Need | Implementation |\n|---|---|\n| Existing behaviors are sufficient | Add an imported shared engine definition |\n| A reusable declarative behavior is missing | Extend the definition model and behavior-defined runtime |\n| The shared runtime is fundamentally unsuitable | Add a dedicated Go engine and register it |\n\nThe relevant implementation is in:\n\n- `pkg/workflow/engine_definition.go` for the definition model and catalog\n- `pkg/workflow/behavior_defined_engine.go` for the shared runtime\n- `pkg/workflow/engine_definition_loader.go` for embedded built-in definitions\n- `pkg/workflow/agentic_engine.go` for dedicated Go engine registration\n- `pkg/parser/schemas/main_workflow_schema.json` for the workflow schema\n\n## Study representative engines\n\nRead the closest examples before making changes:\n\n- `.github/workflows/shared/opencode.md`: npm installation, merged\n  configuration, MCP, provider routing, and log parsing\n- `.github/workflows/shared/aider.md`: Python installation and a custom harness\n  without native MCP\n- `.github/workflows/shared/crush.md`: native MCP configuration adapter and\n  harness\n- `.github/workflows/shared/cursor.md`: plugin support\n- `.github/workflows/shared/deepseek-harness.md`: provider endpoint discovery\n  and a headless profile\n\nUse the examples to identify a pattern, not as a reason to copy optional\nbehaviors.\n\n## Add a shared engine definition\n\n1. Create `.github/workflows/shared/<engine>.md`.\n2. Declare `engine.id`, `display-name`, `description`, `experimental`, provider\n   metadata, authentication, and only the required `behaviors`.\n3. Pin a default CLI version. Make installation deterministic and provide a\n   verification command.\n4. Document setup, authentication, model syntax, MCP support, and limitations\n   in the Markdown body. Keep in-repository integrations clearly identified as\n   unsupported samples.\n5. Add the engine ID and shared definition path to\n   `.github/aw/engines.json`. Imported behavior-defined engines are registered\n   dynamically; do not add them to `NewEngineRegistry()`.\n6. Add `.github/workflows/smoke-<engine>.md`, following the closest existing\n   smoke workflow. Import the shared definition and exercise the capabilities\n   the engine claims to support.\n7. Update the unsupported sample table in\n   `docs/src/content/docs/reference/engines.md`.\n8. Add a changeset when the engine is a user-visible repository sample. New\n   experimental engines have precedent as a `minor` change.\n9. Run `make recompile` and include the generated smoke workflow\n   `.lock.yml`.\n\n`TestKnownEngineImportsFile_MatchesSharedEngineFiles` in\n`pkg/workflow/engine_definition_test.go` enforces catalog coverage for shared\nexternal engines.\n\n## Design the definition\n\nKeep the definition declarative and minimal:\n\n- Select the correct package manager, package name, binary name, version, and\n  verification command under `behaviors.installation`.\n- Put invocation arguments and non-secret environment variables under\n  `behaviors.execution`.\n- Use an existing secret strategy and provider environment mode where\n  possible.\n- Declare native MCP support only when the CLI can consume the generated\n  configuration. Otherwise use a harness or the gh-aw CLI proxy pattern.\n- Add only required default domains and map provider-specific domains under\n  `behaviors.network.provider-domains`.\n- Declare manifest files, cache paths, and plugin support only when the CLI\n  consumes them.\n- Add a log parser only when its emitted event format can be tested.\n\nTreat inline JavaScript in harnesses, configuration adapters, and log parsers\nas production code. Avoid shell interpolation, validate paths and child-process\narguments, preserve nonzero exit codes, and never print secret values. Enabling\npackage lifecycle scripts requires a pinned version and an explicit reason.\n\nFor log and error regular expressions, also load\n`.github/skills/error-pattern-safety/SKILL.md`.\n\n## Extend declarative infrastructure\n\nWhen an engine exposes a generally useful capability that existing behaviors\ncannot express:\n\n1. Add the smallest field to the types in\n   `pkg/workflow/engine_definition.go`.\n2. Validate and render it in the focused behavior-defined engine files.\n3. Update `pkg/parser/schemas/main_workflow_schema.json`.\n4. Add focused tests for parsing, validation, and rendered execution behavior.\n5. Run `make generate-schema-docs` when generated schema documentation changes.\n\nDo not add a schema field for a behavior that can be represented by existing\ninstallation, execution, environment, harness, or adapter fields.\n\nFor a dedicated Go runtime, implement the engine interfaces by composing the\nexisting helpers, keep engine-specific code in its own files, and register the\nengine in `pkg/workflow/agentic_engine.go`. Cover configuration, commands,\nenvironment, authentication, tools, logs, and failure handling with focused\ntests.\n\n## Test the right layers\n\nUse tests that match the changed behavior:\n\n| Area | Tests and examples |\n|---|---|\n| Harness, configuration, MCP, and environment | `behavior_defined_engine_harness_test.go` |\n| Log parsing | `behavior_defined_engine_log_parser_test.go` |\n| Cache behavior | `behavior_defined_engine_cache_test.go` |\n| Definitions, catalog, and known imports | `engine_definition_test.go`, `engine_catalog_test.go` |\n| Embedded definitions | `engine_definition_loader_test.go` |\n| Real shared workflow harness | `aider_workflow_test.go` |\n| Sandboxed CLI visibility | `cloud_hypervisor_test.go` |\n| Generated smoke workflows | `compiled_lock_files_test.go` |\n\nTest both definition parsing and the generated installation/execution steps.\nInclude negative cases for unsafe paths, invalid configuration, missing\ncredentials, or malformed logs when relevant.\n\n## Validate\n\nAfter Go changes:\n\n```bash\nmake build\nmake fmt\n```\n\nAfter workflow Markdown changes:\n\n```bash\nmake recompile\n```\n\nRun focused `go test` commands for the changed behavior while iterating. Before\nan intermediate progress report, run:\n\n```bash\nmake agent-report-progress-no-test\n```\n\nBefore the final progress report, run:\n\n```bash\nmake agent-report-progress\n```\n\nUse `make agent-finish` for the final repository validation when time allows.\nDo not trigger a smoke workflow from a Copilot cloud agent run.\n\n## Completion checklist\n\n- The declarative path was preferred unless its limitations are documented.\n- The engine definition uses a pinned, verified installation.\n- Authentication, provider/model handling, MCP, and network access are covered.\n- Harnesses and adapters do not expose secrets or interpolate untrusted input.\n- `.github/aw/engines.json`, smoke workflow, generated lock file,\n  documentation, and changeset are updated when applicable.\n- Focused tests cover parsing and rendered runtime behavior.\n- Repository validation passes.\n",".github/skills/console-rendering/SKILL.md":"---\nname: console-rendering\ndescription: Use Go struct tags to render styled terminal output in gh-aw.\n---\n\n# Console Rendering System Usage\n\nUse this guide for the struct tag-based console rendering system.\n\n## Struct Tag Support\n\nUse the `console` struct tag to control rendering behavior:\n\n- **`header:\"Name\"`** - Sets the display name for fields (used in both structs and tables)\n- **`title:\"Section Title\"`** - Sets the title for nested structs, slices, or maps\n- **`format:\"type\"`** - Sets the formatting type for the field value\n  - `format:number` - Formats integers as human-readable numbers (e.g., \"1k\", \"1.2M\")\n  - `format:cost` - Formats floats as currency with $ prefix (e.g., \"$1.234\")\n- **`omitempty`** - Skips the field if it has a zero value\n- **`\"-\"`** - Always skips the field\n\n## Example Usage\n\n```go\ntype Overview struct {\n    RunID    int64  `console:\"header:Run ID\"`\n    Workflow string `console:\"header:Workflow\"`\n    Status   string `console:\"header:Status\"`\n    Duration string `console:\"header:Duration,omitempty\"`\n}\n\ndata := Overview{\n    RunID:    12345,\n    Workflow: \"test-workflow\",\n    Status:   \"completed\",\n    Duration: \"5m30s\",\n}\n\n// Simple rendering\nfmt.Print(console.RenderStruct(data))\n\n// Output:\n//   Run ID  : 12345\n//   Workflow: test-workflow\n//   Status  : completed\n//   Duration: 5m30s\n```\n\n## Format Tag Examples\n\n### Number Formatting\n\n```go\ntype Metrics struct {\n    TokenUsage int `console:\"header:Token Usage,format:number\"`\n    Errors     int `console:\"header:Errors\"`\n}\n\ndata := Metrics{\n    TokenUsage: 250000,\n    Errors:     5,\n}\n\n// Renders as:\n//   Token Usage: 250k\n//   Errors     : 5\n```\n\n### Cost Formatting\n\n```go\ntype Billing struct {\n    Cost float64 `console:\"header:Estimated Cost,format:cost\"`\n}\n\ndata := Billing{\n    Cost: 1.234,\n}\n\n// Renders as:\n//   Estimated Cost: $1.234\n```\n\n## Rendering Behavior\n\n### Structs\nStructs are rendered as key-value pairs with proper alignment.\n\n### Slices\nSlices of structs are automatically rendered as tables:\n\n```go\ntype Job struct {\n    Name       string `console:\"header:Name\"`\n    Status     string `console:\"header:Status\"`\n    Conclusion string `console:\"header:Conclusion,omitempty\"`\n}\n\njobs := []Job{\n    {Name: \"build\", Status: \"completed\", Conclusion: \"success\"},\n    {Name: \"test\", Status: \"in_progress\", Conclusion: \"\"},\n}\n\nfmt.Print(console.RenderStruct(jobs))\n```\n\nRenders as:\n\n```\nName  | Status      | Conclusion\n----- | ----------- | ----------\nbuild | completed   | success\ntest  | in_progress | -\n```\n\n### Maps\nMaps are rendered as markdown-style headers with key-value pairs.\n\n### Special Type Handling\n\n#### time.Time\n`time.Time` fields are automatically formatted as `\"2006-01-02 15:04:05\"`. Zero time values are considered empty when used with `omitempty`.\n\n#### Unexported Fields\nThe rendering system safely handles unexported struct fields by checking `CanInterface()` before attempting to access field values.\n",".github/skills/custom-agents/SKILL.md":"---\nname: custom-agents\ndescription: Define and validate GitHub custom agent files, prompts, and examples.\n---\n\n\n# GitHub Custom Agent File Format\n\nUse this reference for the GitHub custom agent file format.\n\n## Overview\n\nGitHub Copilot reads custom agent instructions from Markdown files with YAML frontmatter. Use them to define specialized behavior, tool access, and workflows for your repository.\n\n## File Locations\n\nPlace custom agent files in these locations based on scope:\n\n### 1. Repository-wide Instructions\n- **File**: `.github/copilot-instructions.md`\n- **Scope**: Applies to all code generation in the repository\n- **Use case**: General coding standards, security requirements, testing practices\n\n### 2. Path-specific Instructions\n- **Directory**: `.github/instructions/`\n- **Pattern**: `*.instructions.md` (e.g., `frontend.instructions.md`, `backend.instructions.md`)\n- **Scope**: Can target specific directories or file patterns using `applyTo` in frontmatter\n- **Use case**: Framework-specific guidelines, component-specific rules\n\n### 3. Custom Agent Profiles\n- **Directory**: `.github/agents/` or `.github/copilot/instructions/`\n- **Pattern**: `AGENTS.md`, `*.md` (e.g., `readme-creator.md`, `test-writer.md`)\n- **Scope**: Defines specialized agents with specific capabilities and instructions\n- **Use case**: Task-specific agents (documentation, testing, refactoring)\n\n### 4. agentic workflow integration\n- **Location**: Imported via `imports` field in workflow frontmatter\n- **Pattern**: Any markdown files under `.github/agents/` directory\n- **Scope**: Custom agent for specific agentic workflow execution\n- **Use case**: Workflow-specific agent configuration\n- **Important**: Only one agent file is allowed per workflow\n\n## File Format\n\n### Basic Structure\n\n```markdown\n# YAML frontmatter (configuration)\nname: agent-name\ndescription: Brief description of agent's purpose\n\n# Markdown body (instructions)\n\nYour natural language instructions for the agent go here.\n```\n\n### Complete YAML Frontmatter Schema\n\n```yaml\n# Required fields\nname: agent-identifier              # Unique identifier for the agent\n\n# Optional descriptive fields\ndescription: >                      # Multi-line description of agent's purpose\n  Agent specializing in specific tasks\n\n# Optional instruction fields\nprompt: |                          # Freeform instructions (alternative to markdown body)\n  Your instructions here\n\n# Optional tool configuration\ntools:                             # List of allowed tools for this agent\n  - createFile\n  - editFiles\n  - codeSearch\n  - search\n\n# Optional path targeting (for .instructions.md files)\napplyTo:                          # Glob patterns for targeted files/directories\n  - \"src/frontend/**\"\n  - \"**/*.tsx\"\n\n# Optional MCP server configuration (enterprise/org only)\nmcp-server:                       # External MCP server configuration\n  url: https://my-mcp-server.com\n  api-key: ${{ secrets.MCPSERVER_API_KEY }}\n\n# Optional settings\nsettings:                         # Custom runtime or connection settings\n  key: value\n```\n\n## Field Descriptions\n\n### Core Fields\n\n#### name (string, required for agent profiles)\n- Unique identifier for the custom agent\n- Used to reference the agent in workflows or assignments\n- Convention: lowercase with hyphens (e.g., `readme-creator`, `test-writer`)\n\n#### description (string, optional)\n- Human-friendly description of the agent's focus and behavior\n- Helps users understand what the agent specializes in\n- Can be multi-line using YAML's `>` or `|` syntax\n\n#### prompt (string, optional)\n- Alternative to using the markdown body for instructions\n- Contains freeform natural language instructions\n- Use YAML's `|` (literal) or `>` (folded) for multi-line content\n- If both `prompt` and markdown body exist, they are typically combined\n\n### Tool Configuration\n\n#### tools (array of strings, optional)\n- List of tools the agent is allowed to use\n- If omitted or set to `[\"*\"]`, agent has access to all available tools\n- Tool names are **case-insensitive**\n- Supports both GitHub's standard tool aliases and legacy naming conventions\n\n**GitHub Standard Tool Aliases:**\n\nGitHub Copilot defines a standardized set of tool aliases for custom agents:\n\n- **`read`** - Access and read contents of files or code\n- **`edit`** - Make changes in code files, apply edits or refactoring\n- **`search`** - Search codebase for keywords, references, or patterns\n- **`pr`** - Create, manage, or update pull requests\n- **`issue`** - Create, manage, or update issues\n\n**Legacy Tool Names:**\n\nFor backward compatibility, these legacy tool names are still supported:\n\n- `createFile` - Create new files (use `edit` instead)\n- `editFiles` - Modify existing files (use `edit` instead)\n- `deleteFiles` - Remove files (use `edit` instead)\n- `codeSearch` - Semantic code search (use `search` instead)\n- `runCommand` - Execute shell commands\n- `getFile` - Read file contents (use `read` instead)\n- `listFiles` - List directory contents (use `read` instead)\n\n**MCP Server Tool Prefixes:**\n\nWhen using Model Context Protocol (MCP) servers, you can specify tools with server prefixes:\n- Single tool: `my-mcp-server/tool-name`\n- All tools from a server: `my-mcp-server/*`\n\n**Examples:**\n\n```yaml\n# Using standard tool aliases\ntools:\n  - read\n  - edit\n  - search\n\n# Enable all tools with wildcard\ntools: [\"*\"]\n\n# Using legacy names (still supported)\ntools:\n  - editFiles\n  - createFile\n  - search\n\n# Mixed standard and MCP server tools\ntools:\n  - read\n  - edit\n  - github-mcp/create_issue\n  - custom-mcp/*\n\n# Empty list disables all tools\ntools: []\n```\n\n### Path Targeting\n\n#### applyTo (array of strings, optional)\n- Only used in `.instructions.md` files\n- Specifies glob patterns for files/directories these instructions apply to\n- Supports wildcards: `*` (any characters), `**` (any directories)\n- Multiple patterns can be specified\n\n**Example:**\n```yaml\napplyTo:\n  - \"src/frontend/**/*.tsx\"\n  - \"src/frontend/**/*.ts\"\n  - \"components/**\"\n```\n\n### Enterprise Features\n\n#### mcp-server (object, optional)\n- Configuration for external MCP (Model Context Protocol) servers\n- Typically used in enterprise or organization settings\n- Allows integration with custom tools and services\n\n**Fields:**\n- `url` (string): MCP server endpoint\n- `api-key` (string): Authentication key (use GitHub secrets)\n\n**Example:**\n```yaml\nmcp-server:\n  url: https://internal-tools.company.com/mcp\n  api-key: ${{ secrets.INTERNAL_MCP_KEY }}\n```\n\n#### settings (object, optional)\n- Custom runtime or connection settings\n- Key-value pairs for agent-specific configuration\n- Format and available keys depend on the agent implementation\n\n## Usage Patterns\n\n### Pattern 1: Repository-wide Standards\n\n**File:** `.github/copilot-instructions.md`\n\n```markdown\ndescription: Repository-wide coding standards\n\n# Coding Standards\n\n## Style Guide\n- Use single quotes in JavaScript/TypeScript\n- Follow ESLint configuration in `.eslintrc.json`\n- Maximum line length: 100 characters\n\n## Security\n- Always set `httpOnly` and `secure` flags for cookies\n- Validate all user input\n- Use parameterized queries for database access\n\n## Testing\n- All new code must include Jest tests\n- Aim for >80% code coverage\n- Test edge cases and error conditions\n```\n\n### Pattern 2: Path-specific Instructions\n\n**File:** `.github/instructions/frontend.instructions.md`\n\n```markdown\ndescription: Frontend development guidelines\napplyTo:\n  - \"src/frontend/**\"\n  - \"components/**\"\n\n# Frontend Development Guidelines\n\n## Component Structure\n- Use React functional components with hooks\n- Prefer composition over inheritance\n- Keep components small and focused (< 150 lines)\n\n## Styling\n- Use CSS Modules for component styles\n- Follow BEM naming convention\n- Use Tailwind utility classes where appropriate\n\n## State Management\n- Use React Context for global state\n- Keep local state in components when possible\n- Use reducers for complex state logic\n```\n\n### Pattern 3: Custom Agent Profile\n\n**File:** `.github/agents/readme-creator.md`\n\n```markdown\nname: readme-creator\ndescription: Agent specializing in creating and improving README files\ntools:\n  - read\n  - edit\n  - search\n\n# README Creator Agent\n\nYou are a documentation specialist focused on creating clear, comprehensive README files.\n\n## Responsibilities\n- Create well-structured README.md files for projects\n- Include all standard sections: Overview, Installation, Usage, Contributing\n- Generate accurate code examples\n- Ensure documentation is up-to-date with codebase\n\n## Style Guidelines\n- Use clear, concise language\n- Include code examples with syntax highlighting\n- Add badges for build status, coverage, version\n- Organize with logical heading hierarchy\n- Include a table of contents for long READMEs\n\n## Quality Standards\n- Verify all code examples are accurate\n- Test installation instructions\n- Ensure links are valid and working\n- Check for proper Markdown formatting\n```\n\n### Pattern 4: Test Writer Agent\n\n**File:** `.github/agents/test-writer.md`\n\n```markdown\nname: test-writer\ndescription: Specialized agent for writing comprehensive test suites\ntools:\n  - read\n  - edit\n  - search\n\n# Test Writer Agent\n\nYou specialize in creating comprehensive, well-structured test suites.\n\n## Testing Framework\n- Use Jest for JavaScript/TypeScript\n- Follow AAA pattern: Arrange, Act, Assert\n- Use descriptive test names: \"should [expected behavior] when [condition]\"\n\n## Test Coverage\n- Write unit tests for all public functions\n- Create integration tests for API endpoints\n- Add edge case tests (null, undefined, empty, boundary values)\n- Test error conditions and exception handling\n\n## Test Organization\n- Group related tests with `describe` blocks\n- Use `beforeEach` and `afterEach` for setup/teardown\n- Keep tests independent and isolated\n- Mock external dependencies\n\n## Best Practices\n- One assertion per test when possible\n- Use test data builders for complex objects\n- Avoid test interdependence\n- Keep tests fast (< 1 second each)\n```\n\n### Pattern 5: Agentic Workflow Integration\n\n**File:** `.github/workflows/code-review.md`\n\n```markdown\non:\n  pull_request:\n    types: [opened, synchronize]\npermissions:\n  contents: read\n  pull-requests: write\nengine:\n  id: copilot\n  custom-agent: .github/agents/code-reviewer.md\n\n# Automated Code Review\n\nReview the pull request changes and provide constructive feedback.\n```\n\n**File:** `.github/agents/code-reviewer.md`\n\n```markdown\nname: code-reviewer\ndescription: Agent specialized in performing code reviews\ntools:\n  - read\n  - search\n\n# Code Review Agent\n\nYou are an experienced code reviewer focused on code quality, security, and best practices.\n\n## Review Checklist\n- Code follows repository style guidelines\n- Proper error handling is implemented\n- Security best practices are followed\n- Tests are included for new functionality\n- Documentation is updated where needed\n- No unnecessary complexity\n\n## Feedback Style\n- Be constructive and specific\n- Explain the reasoning behind suggestions\n- Prioritize issues (critical, important, minor)\n- Acknowledge good patterns and improvements\n- Provide code examples for suggestions\n```\n\n## Integration with gh-aw\n\nThe gh-aw (GitHub Agentic Workflows) tool supports custom agent files through the `imports` field in workflow frontmatter. Any markdown files under the `.github/agents/` directory are treated as custom agent files when imported.\n\n### Preferred way to install skills in workflows\n\nUse the `skills:` frontmatter field as the preferred way to install external skills for workflow runs. This installs skills during activation and persists them correctly between jobs. Use the top-level `plugins:` field the same way for agent plugins. Never add on-the-fly installation steps or ask the agent to install a skill or plugin from the prompt.\n\nUse `imports:` for workflow prompt/context files (including local custom agent files), not as the primary skill installation path.\n\n```markdown\non: pull_request\nengine:\n  id: copilot\nskills:\n  - mattpocock/skills/tdd@801dca688564c529fa84f247f64472520d9ebe28\nplugins:\n  - octo-org/agent-plugin@v1\nimports:\n  - .github/agents/code-reviewer.md\n\n# Workflow prompt\n```\n\n### Configuration\n\n```markdown\non: issues\nengine:\n  id: copilot\nimports:\n  - .github/agents/my-agent.md\n\n# My Workflow\n\nInstructions for the workflow...\n```\n\n### Supported Engines\n\nCustom agent files are supported by the following engines:\n\n1. **Copilot** - Uses `--agent <path>` flag to load custom agent file\n2. **Claude** - Prepends agent file content to the workflow prompt\n3. **Codex** - Prepends agent file content to the workflow prompt\n\n### File Path Resolution\n\n- Agent files are imported via the `imports` field\n- Must be markdown files located under `.github/agents/` directory\n- Only one agent file is allowed per workflow\n- File is validated during workflow compilation\n- Checkout step is automatically added if agent file is imported\n\n### Example Workflow with Custom Agent\n\n```markdown\non:\n  issues:\n    types: [opened]\npermissions:\n  contents: read\n  issues: write\nengine:\n  id: copilot\nimports:\n  - .github/agents/issue-triager.md\ntools:\n  github:\n    allowed:\n      - add_labels_to_issue\n      - create_issue_comment\n\n# Issue Triage Workflow\n\nAnalyze the issue and categorize it appropriately.\n```\n\n## Best Practices\n\n### 1. Keep Instructions Focused\n- Each agent should have a clear, specific purpose\n- Avoid mixing unrelated concerns in a single agent\n- Create multiple specialized agents rather than one general-purpose agent\n\n### 2. Be Explicit and Specific\n- Provide concrete examples of expected behavior\n- Define clear success criteria\n- Specify edge cases and error handling\n\n### 3. Use Appropriate Scoping\n- Repository-wide instructions for universal standards\n- Path-specific instructions for framework or directory-specific rules\n- Custom agents for task-specific workflows\n\n### 4. Test Agent Behavior\n- Verify agent follows instructions correctly\n- Test with various input scenarios\n- Iterate based on actual agent performance\n\n### 5. Maintain and Update\n- Keep instructions current with codebase changes\n- Review and refine based on agent performance\n- Remove outdated or conflicting instructions\n\n### 6. Security Considerations\n- Limit tool access to what's necessary\n- Be cautious with file deletion permissions\n- Use secrets for sensitive configuration\n- Review agent actions regularly\n\n## Common Patterns\n\n### Documentation Agent\n```yaml\nname: documentation-specialist\ndescription: Creates and maintains technical documentation\ntools: [read, edit, search]\n```\n\n### Refactoring Agent\n```yaml\nname: code-refactorer\ndescription: Improves code quality and structure\ntools: [read, edit, search]\n```\n\n### Security Auditor\n```yaml\nname: security-auditor\ndescription: Reviews code for security vulnerabilities\ntools: [read, search]\n```\n\n### Migration Assistant\n```yaml\nname: migration-helper\ndescription: Assists with framework or library migrations\ntools: [read, edit, search]\n```\n\n### Issue Management Agent\n```yaml\nname: issue-manager\ndescription: Manages GitHub issues and project tracking\ntools: [read, issue]\n```\n\n### Pull Request Assistant\n```yaml\nname: pr-assistant\ndescription: Assists with pull request creation and management\ntools: [read, edit, pr]\n```\n\n## Troubleshooting\n\n### Agent Not Following Instructions\n- Make instructions more explicit and specific\n- Provide concrete examples\n- Break down complex instructions into steps\n- Ensure instructions don't conflict\n\n### Tool Access Issues\n- Verify tools are listed in `tools` array\n- Check agent has necessary permissions\n- Ensure tools are available in the environment\n\n### Path Targeting Not Working\n- Verify glob patterns are correct\n- Check file paths match patterns\n- Ensure `applyTo` is only used in `.instructions.md` files\n\n### Custom Agent File Not Found\n- Verify agent file is imported in the `imports` field\n- Ensure file exists and is committed under `.github/agents/` directory\n- Confirm agent file path is correct in imports list\n- Remember: only one agent file is allowed per workflow\n\n## References\n\n- [GitHub Copilot Agent Filess Configuration](https://docs.github.com/en/copilot/reference/copilot-custom-agents-configuration) - Official reference for custom agent configuration including tool aliases\n- [GitHub Copilot Custom Instructions Documentation](https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions)\n- [About Custom Agents](https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-custom-agents)\n- [GitHub Blog: Custom Instructions Support](https://github.blog/changelog/2025-07-23-github-copilot-coding-agent-now-supports-instructions-md-custom-instructions/)\n- [GitHub Blog: AGENTS.md Support](https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/)\n\n## Examples in This Repository\n\nThe gh-aw repository uses custom agent files for performance engineering guides:\n\n- `.github/copilot/instructions/ci-performance.md` - CI/CD optimization\n- `.github/copilot/instructions/workflow-performance.md` - Workflow efficiency\n- `.github/copilot/instructions/build-performance.md` - Build optimization\n- `.github/copilot/instructions/cli-performance.md` - CLI performance\n\nThese files provide specialized guidance for performance engineering tasks and demonstrate the custom agent file format in practice.\n","SKILL.md":"---\nname: GitHub Agentic Workflows\ndescription: GitHub Agentic Workflows (`gh-aw`) is a GitHub CLI extension for writing Agentic Workflows in markdown and compiling them to GitHub Actions.\n---\n## Debug an existing workflow\nBefore installation, follow [the debugging bootstrap](.github/aw/debug-bootstrap.md)\nat this file's guidance repository/ref. It selects diagnosis, health, compilation,\nor existing-run analysis without requiring a new workflow or automatic upgrade.\nUse its available-tool path when no shell is available; preserve the supplied run URL.\n\n## Install\n```bash\ngh extension install github/gh-aw\n```\nIf failed,\n```\ncurl -sL https://raw.githubusercontent.com/github/gh-aw/main/install-gh-aw.sh | bash\n```\n## Load\nLoad https://github.com/github/gh-aw/blob/main/.github/skills/agentic-workflows/SKILL.md to learn how to create/update/debug/optimize Agentic Workflows.\n",".github/skills/debugging-workflows/SKILL.md":"---\nname: debugging-workflows\ndescription: Diagnose gh-aw failures using the canonical debugging strategy and evidence reference.\n---\n\n# Workflow Debugging Router\n\nThis skill remains available for existing invocations. Load and follow\n[the evidence reference](../../aw/debug-workflow-evidence.md), where the\ninstructions now live. It delegates setup to\n[the bootstrap](../../aw/debug-bootstrap.md) and execution policy to\n[the shared strategy](../../aw/debug-agentic-workflow.md).\n\nUse a matching local guidance checkout. For Contents API reads, use the guidance\nowner/repository (`owner=github`, `repo=gh-aw` by default),\n`path=.github/aw/debug-workflow-evidence.md`, retaining the ref of this skill.\nThe other API paths are `.github/aw/debug-bootstrap.md` and\n`.github/aw/debug-agentic-workflow.md`. Normalize relative links against their\ncontaining file before API reads; `../../aw/...` is not an API path.\nFor default raw guidance, use `https://raw.githubusercontent.com/github/gh-aw/<guidance-ref>/`\nplus the repository-root-relative path, including `.github/`. Preserve supplied\nrefs containing slashes and keep guidance identity separate from the target\nworkflow repository/ref. The bootstrap documents size-aware reads and public\nraw fallback after API denial.\n\nRead the canonical instructions before running commands. This compatibility\nrouter defines no separate setup, review, or live-execution procedure.\n",".github/skills/developer-code-organization/SKILL.md":"# developer-code-organization\n\nPath: `.github/skills/developer-code-organization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-code-organization/SKILL.md)",".github/skills/developer-internals/SKILL.md":"# developer-internals\n\nPath: `.github/skills/developer-internals/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-internals/SKILL.md)",".github/skills/developer-release/SKILL.md":"# developer-release\n\nPath: `.github/skills/developer-release/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-release/SKILL.md)",".github/skills/developer-security/SKILL.md":"# developer-security\n\nPath: `.github/skills/developer-security/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-security/SKILL.md)",".github/skills/developer/SKILL.md":"# developer\n\nPath: `.github/skills/developer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer/SKILL.md)",".github/skills/docs-design/SKILL.md":"# docs-design\n\nPath: `.github/skills/docs-design/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/docs-design/SKILL.md)",".github/skills/documentation/SKILL.md":"# documentation\n\nPath: `.github/skills/documentation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/documentation/SKILL.md)",".github/skills/error-messages/SKILL.md":"# error-messages\n\nPath: `.github/skills/error-messages/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-messages/SKILL.md)",".github/skills/error-pattern-safety/SKILL.md":"# error-pattern-safety\n\nPath: `.github/skills/error-pattern-safety/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-pattern-safety/SKILL.md)",".github/skills/error-recovery-patterns/SKILL.md":"# error-recovery-patterns\n\nPath: `.github/skills/error-recovery-patterns/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-recovery-patterns/SKILL.md)",".github/skills/gh-agent-session/SKILL.md":"# gh-agent-session\n\nPath: `.github/skills/gh-agent-session/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/gh-agent-session/SKILL.md)",".github/skills/gh-agent-task/SKILL.md":"# gh-agent-task\n\nPath: `.github/skills/gh-agent-task/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/gh-agent-task/SKILL.md)",".github/skills/github-copilot-agent-tips-and-tricks/SKILL.md":"# github-copilot-agent-tips-and-tricks\n\nPath: `.github/skills/github-copilot-agent-tips-and-tricks/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-copilot-agent-tips-and-tricks/SKILL.md)",".github/skills/github-discussion-query/SKILL.md":"# github-discussion-query\n\nPath: `.github/skills/github-discussion-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-discussion-query/SKILL.md)",".github/skills/github-issue-query/SKILL.md":"# github-issue-query\n\nPath: `.github/skills/github-issue-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-issue-query/SKILL.md)",".github/skills/github-labels-query/SKILL.md":"# github-labels-query\n\nPath: `.github/skills/github-labels-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-labels-query/SKILL.md)",".github/skills/github-mcp-server/SKILL.md":"# github-mcp-server\n\nPath: `.github/skills/github-mcp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-mcp-server/SKILL.md)",".github/skills/github-pr-query/SKILL.md":"# github-pr-query\n\nPath: `.github/skills/github-pr-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-pr-query/SKILL.md)",".github/skills/github-script/SKILL.md":"# github-script\n\nPath: `.github/skills/github-script/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-script/SKILL.md)",".github/skills/github-workflows-query/SKILL.md":"# github-workflows-query\n\nPath: `.github/skills/github-workflows-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-workflows-query/SKILL.md)",".github/skills/go-codemod/SKILL.md":"# go-codemod\n\nPath: `.github/skills/go-codemod/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/go-codemod/SKILL.md)",".github/skills/go-linters/SKILL.md":"# go-linters\n\nPath: `.github/skills/go-linters/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/go-linters/SKILL.md)",".github/skills/http-mcp-headers/SKILL.md":"# http-mcp-headers\n\nPath: `.github/skills/http-mcp-headers/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/http-mcp-headers/SKILL.md)",".github/skills/issue-markdown/SKILL.md":"# issue-markdown\n\nPath: `.github/skills/issue-markdown/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/issue-markdown/SKILL.md)",".github/skills/javascript-refactoring/SKILL.md":"# javascript-refactoring\n\nPath: `.github/skills/javascript-refactoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/javascript-refactoring/SKILL.md)",".github/skills/jqschema/SKILL.md":"# jqschema\n\nPath: `.github/skills/jqschema/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/jqschema/SKILL.md)",".github/skills/messages/SKILL.md":"# messages\n\nPath: `.github/skills/messages/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/messages/SKILL.md)",".github/skills/model-routing-golden/SKILL.md":"# model-routing-golden\n\nPath: `.github/skills/model-routing-golden/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/model-routing-golden/SKILL.md)",".github/skills/npm/SKILL.md":"# npm\n\nPath: `.github/skills/npm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/npm/SKILL.md)",".github/skills/open-pull-request/SKILL.md":"# open-pull-request\n\nPath: `.github/skills/open-pull-request/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/open-pull-request/SKILL.md)",".github/skills/operational-value-designer/SKILL.md":"# operational-value-designer\n\nPath: `.github/skills/operational-value-designer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/operational-value-designer/SKILL.md)",".github/skills/optimize-agentic-workflow/SKILL.md":"# optimize-agentic-workflow\n\nPath: `.github/skills/optimize-agentic-workflow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/optimize-agentic-workflow/SKILL.md)",".github/skills/otel-queries/SKILL.md":"# otel-queries\n\nPath: `.github/skills/otel-queries/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/otel-queries/SKILL.md)",".github/skills/pr-finisher/SKILL.md":"# pr-finisher\n\nPath: `.github/skills/pr-finisher/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/pr-finisher/SKILL.md)",".github/skills/pr-to-go-linter/SKILL.md":"# pr-to-go-linter\n\nPath: `.github/skills/pr-to-go-linter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/pr-to-go-linter/SKILL.md)",".github/skills/prompt-token-efficiency/SKILL.md":"# prompt-token-efficiency\n\nPath: `.github/skills/prompt-token-efficiency/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/prompt-token-efficiency/SKILL.md)",".github/skills/reporting/SKILL.md":"# reporting\n\nPath: `.github/skills/reporting/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/reporting/SKILL.md)",".github/skills/resolve-merge-conflicts/SKILL.md":"# resolve-merge-conflicts\n\nPath: `.github/skills/resolve-merge-conflicts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/resolve-merge-conflicts/SKILL.md)",".github/skills/restricted-tool-triage/SKILL.md":"# restricted-tool-triage\n\nPath: `.github/skills/restricted-tool-triage/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/restricted-tool-triage/SKILL.md)",".github/skills/review-agentic-workflows/SKILL.md":"# review-agentic-workflows\n\nPath: `.github/skills/review-agentic-workflows/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/review-agentic-workflows/SKILL.md)",".github/skills/security-advisory-compat-enforcer/SKILL.md":"# security-advisory-compat-enforcer\n\nPath: `.github/skills/security-advisory-compat-enforcer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/security-advisory-compat-enforcer/SKILL.md)",".github/skills/sergo-examples/SKILL.md":"# sergo-examples\n\nPath: `.github/skills/sergo-examples/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/sergo-examples/SKILL.md)",".github/skills/skillz-integration/SKILL.md":"# skillz-integration\n\nPath: `.github/skills/skillz-integration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/skillz-integration/SKILL.md)",".github/skills/ssl/SKILL.md":"# ssl\n\nPath: `.github/skills/ssl/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/ssl/SKILL.md)",".github/skills/statistics-infographic/SKILL.md":"# statistics-infographic\n\nPath: `.github/skills/statistics-infographic/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/SKILL.md)",".github/skills/temporary-id-safe-output/SKILL.md":"# temporary-id-safe-output\n\nPath: `.github/skills/temporary-id-safe-output/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/temporary-id-safe-output/SKILL.md)",".github/skills/workflow-step-summaries/SKILL.md":"# workflow-step-summaries\n\nPath: `.github/skills/workflow-step-summaries/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/workflow-step-summaries/SKILL.md)",".squad/templates/skills/agent-collaboration/SKILL.md":"# agent-collaboration\n\nPath: `.squad/templates/skills/agent-collaboration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/agent-collaboration/SKILL.md)",".squad/templates/skills/agent-conduct/SKILL.md":"# agent-conduct\n\nPath: `.squad/templates/skills/agent-conduct/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/agent-conduct/SKILL.md)",".squad/templates/skills/architectural-proposals/SKILL.md":"# architectural-proposals\n\nPath: `.squad/templates/skills/architectural-proposals/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/architectural-proposals/SKILL.md)",".squad/templates/skills/ci-validation-gates/SKILL.md":"# ci-validation-gates\n\nPath: `.squad/templates/skills/ci-validation-gates/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/ci-validation-gates/SKILL.md)",".squad/templates/skills/cli-wiring/SKILL.md":"# cli-wiring\n\nPath: `.squad/templates/skills/cli-wiring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cli-wiring/SKILL.md)",".squad/templates/skills/client-compatibility/SKILL.md":"# client-compatibility\n\nPath: `.squad/templates/skills/client-compatibility/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/client-compatibility/SKILL.md)",".squad/templates/skills/coordinator-init-mode/SKILL.md":"# coordinator-init-mode\n\nPath: `.squad/templates/skills/coordinator-init-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-init-mode/SKILL.md)",".squad/templates/skills/coordinator-response-mode/SKILL.md":"# coordinator-response-mode\n\nPath: `.squad/templates/skills/coordinator-response-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-response-mode/SKILL.md)",".squad/templates/skills/coordinator-source-of-truth/SKILL.md":"# coordinator-source-of-truth\n\nPath: `.squad/templates/skills/coordinator-source-of-truth/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-source-of-truth/SKILL.md)",".squad/templates/skills/cross-machine-coordination/SKILL.md":"# cross-machine-coordination\n\nPath: `.squad/templates/skills/cross-machine-coordination/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-machine-coordination/SKILL.md)",".squad/templates/skills/cross-squad-communication/SKILL.md":"# cross-squad-communication\n\nPath: `.squad/templates/skills/cross-squad-communication/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-squad-communication/SKILL.md)",".squad/templates/skills/cross-squad/SKILL.md":"# cross-squad\n\nPath: `.squad/templates/skills/cross-squad/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-squad/SKILL.md)",".squad/templates/skills/distributed-mesh/SKILL.md":"# distributed-mesh\n\nPath: `.squad/templates/skills/distributed-mesh/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/distributed-mesh/SKILL.md)",".squad/templates/skills/docs-standards/SKILL.md":"# docs-standards\n\nPath: `.squad/templates/skills/docs-standards/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/docs-standards/SKILL.md)",".squad/templates/skills/e2e-template-testing/SKILL.md":"# e2e-template-testing\n\nPath: `.squad/templates/skills/e2e-template-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/e2e-template-testing/SKILL.md)",".squad/templates/skills/economy-mode/SKILL.md":"# economy-mode\n\nPath: `.squad/templates/skills/economy-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/economy-mode/SKILL.md)",".squad/templates/skills/error-recovery/SKILL.md":"# error-recovery\n\nPath: `.squad/templates/skills/error-recovery/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/error-recovery/SKILL.md)",".squad/templates/skills/external-comms/SKILL.md":"# external-comms\n\nPath: `.squad/templates/skills/external-comms/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/external-comms/SKILL.md)",".squad/templates/skills/fact-checking/SKILL.md":"# fact-checking\n\nPath: `.squad/templates/skills/fact-checking/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/fact-checking/SKILL.md)",".squad/templates/skills/gh-auth-isolation/SKILL.md":"# gh-auth-isolation\n\nPath: `.squad/templates/skills/gh-auth-isolation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/gh-auth-isolation/SKILL.md)",".squad/templates/skills/git-workflow/SKILL.md":"# git-workflow\n\nPath: `.squad/templates/skills/git-workflow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/git-workflow/SKILL.md)",".squad/templates/skills/github-multi-account/SKILL.md":"# github-multi-account\n\nPath: `.squad/templates/skills/github-multi-account/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/github-multi-account/SKILL.md)",".squad/templates/skills/history-hygiene/SKILL.md":"# history-hygiene\n\nPath: `.squad/templates/skills/history-hygiene/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/history-hygiene/SKILL.md)",".squad/templates/skills/humanizer/SKILL.md":"# humanizer\n\nPath: `.squad/templates/skills/humanizer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/humanizer/SKILL.md)",".squad/templates/skills/init-mode/SKILL.md":"# init-mode\n\nPath: `.squad/templates/skills/init-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/init-mode/SKILL.md)",".squad/templates/skills/iterative-retrieval/SKILL.md":"# iterative-retrieval\n\nPath: `.squad/templates/skills/iterative-retrieval/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/iterative-retrieval/SKILL.md)",".squad/templates/skills/model-selection/SKILL.md":"# model-selection\n\nPath: `.squad/templates/skills/model-selection/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/model-selection/SKILL.md)",".squad/templates/skills/nap/SKILL.md":"# nap\n\nPath: `.squad/templates/skills/nap/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/nap/SKILL.md)",".squad/templates/skills/notification-routing/SKILL.md":"# notification-routing\n\nPath: `.squad/templates/skills/notification-routing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/notification-routing/SKILL.md)",".squad/templates/skills/personal-squad/SKILL.md":"# personal-squad\n\nPath: `.squad/templates/skills/personal-squad/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/personal-squad/SKILL.md)",".squad/templates/skills/pr-review-response/SKILL.md":"# pr-review-response\n\nPath: `.squad/templates/skills/pr-review-response/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/pr-review-response/SKILL.md)",".squad/templates/skills/pr-screenshots/SKILL.md":"# pr-screenshots\n\nPath: `.squad/templates/skills/pr-screenshots/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/pr-screenshots/SKILL.md)",".squad/templates/skills/project-conventions/SKILL.md":"# project-conventions\n\nPath: `.squad/templates/skills/project-conventions/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/project-conventions/SKILL.md)",".squad/templates/skills/ralph-two-pass-scan/SKILL.md":"# ralph-two-pass-scan\n\nPath: `.squad/templates/skills/ralph-two-pass-scan/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/ralph-two-pass-scan/SKILL.md)",".squad/templates/skills/reflect/SKILL.md":"# reflect\n\nPath: `.squad/templates/skills/reflect/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reflect/SKILL.md)",".squad/templates/skills/release-process/SKILL.md":"# release-process\n\nPath: `.squad/templates/skills/release-process/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/release-process/SKILL.md)",".squad/templates/skills/reskill/SKILL.md":"# reskill\n\nPath: `.squad/templates/skills/reskill/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reskill/SKILL.md)",".squad/templates/skills/retro-enforcement/SKILL.md":"# retro-enforcement\n\nPath: `.squad/templates/skills/retro-enforcement/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/retro-enforcement/SKILL.md)",".squad/templates/skills/reviewer-protocol/SKILL.md":"# reviewer-protocol\n\nPath: `.squad/templates/skills/reviewer-protocol/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reviewer-protocol/SKILL.md)",".squad/templates/skills/secret-handling/SKILL.md":"# secret-handling\n\nPath: `.squad/templates/skills/secret-handling/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/secret-handling/SKILL.md)",".squad/templates/skills/session-recovery/SKILL.md":"# session-recovery\n\nPath: `.squad/templates/skills/session-recovery/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/session-recovery/SKILL.md)",".squad/templates/skills/squad-commands/SKILL.md":"# squad-commands\n\nPath: `.squad/templates/skills/squad-commands/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-commands/SKILL.md)",".squad/templates/skills/squad-conventions/SKILL.md":"# squad-conventions\n\nPath: `.squad/templates/skills/squad-conventions/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-conventions/SKILL.md)",".squad/templates/skills/squad-help/SKILL.md":"# squad-help\n\nPath: `.squad/templates/skills/squad-help/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-help/SKILL.md)",".squad/templates/skills/squad-version-check/SKILL.md":"# squad-version-check\n\nPath: `.squad/templates/skills/squad-version-check/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-version-check/SKILL.md)",".squad/templates/skills/squad/SKILL.md":"# squad\n\nPath: `.squad/templates/skills/squad/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad/SKILL.md)",".squad/templates/skills/test-discipline/SKILL.md":"# test-discipline\n\nPath: `.squad/templates/skills/test-discipline/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/test-discipline/SKILL.md)",".squad/templates/skills/tiered-memory/SKILL.md":"# tiered-memory\n\nPath: `.squad/templates/skills/tiered-memory/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/tiered-memory/SKILL.md)",".squad/templates/skills/versioning-policy/SKILL.md":"# versioning-policy\n\nPath: `.squad/templates/skills/versioning-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/versioning-policy/SKILL.md)",".squad/templates/skills/windows-compatibility/SKILL.md":"# windows-compatibility\n\nPath: `.squad/templates/skills/windows-compatibility/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/windows-compatibility/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/AGENTS.md)",".github/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.github/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/mcp.json)",".squad/routing.md":"# .squad - Multi-Agent Routing & Delegation Matrix\n\nPath: `.squad/routing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/routing.md)",".vscode/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.vscode/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.vscode/mcp.json)","scratchpad/architecture.md":"# scratchpad - System Architecture & Module Boundaries\n\nPath: `scratchpad/architecture.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/architecture.md)",".github/agents/adr-writer.agent.md":"# Subagent: adr-writer.agent\n\nPath: `.github/agents/adr-writer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/adr-writer.agent.md)",".github/agents/agentic-workflows.md":"# Subagent: agentic-workflows\n\nPath: `.github/agents/agentic-workflows.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/agentic-workflows.md)",".github/agents/ci-cleaner.agent.md":"# Subagent: ci-cleaner.agent\n\nPath: `.github/agents/ci-cleaner.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/ci-cleaner.agent.md)",".github/agents/contribution-checker.agent.md":"# Subagent: contribution-checker.agent\n\nPath: `.github/agents/contribution-checker.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/contribution-checker.agent.md)",".github/agents/create-safe-output-type.agent.md":"# Subagent: create-safe-output-type.agent\n\nPath: `.github/agents/create-safe-output-type.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/create-safe-output-type.agent.md)",".github/agents/custom-engine-implementation.agent.md":"# Subagent: custom-engine-implementation.agent\n\nPath: `.github/agents/custom-engine-implementation.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/custom-engine-implementation.agent.md)",".github/agents/developer.instructions.md":"# Subagent: developer.instructions\n\nPath: `.github/agents/developer.instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/developer.instructions.md)",".github/agents/grumpy-reviewer.agent.md":"# Subagent: grumpy-reviewer.agent\n\nPath: `.github/agents/grumpy-reviewer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/grumpy-reviewer.agent.md)",".github/agents/interactive-agent-designer.agent.md":"# Subagent: interactive-agent-designer.agent\n\nPath: `.github/agents/interactive-agent-designer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/interactive-agent-designer.agent.md)",".github/agents/squad.agent.md":"# Subagent: squad.agent\n\nPath: `.github/agents/squad.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/squad.agent.md)",".github/agents/technical-doc-writer.agent.md":"# Subagent: technical-doc-writer.agent\n\nPath: `.github/agents/technical-doc-writer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/technical-doc-writer.agent.md)",".github/agents/w3c-specification-writer.agent.md":"# Subagent: w3c-specification-writer.agent\n\nPath: `.github/agents/w3c-specification-writer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/w3c-specification-writer.agent.md)",".squad/templates/copilot-instructions.md":"# GitHub Copilot Instructions\n\nPath: `.squad/templates/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/copilot-instructions.md)","scratchpad/agents/hierarchical-agents-quickstart.md":"# Subagent: hierarchical-agents-quickstart\n\nPath: `scratchpad/agents/hierarchical-agents-quickstart.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/agents/hierarchical-agents-quickstart.md)","scratchpad/agents/hierarchical-agents.md":"# Subagent: hierarchical-agents\n\nPath: `scratchpad/agents/hierarchical-agents.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/agents/hierarchical-agents.md)",".github/copilot/instructions/build-performance.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/build-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/build-performance.md)",".github/copilot/instructions/ci-performance.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/ci-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/ci-performance.md)",".github/copilot/instructions/cli-performance.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/cli-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/cli-performance.md)",".github/copilot/instructions/workflow-performance.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/workflow-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/workflow-performance.md)",".github/skills/error-messages/ssl.json":"# Error-messages Skill\n\nPath: `.github/skills/error-messages/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-messages/ssl.json)",".github/skills/jqschema/ssl.json":"# Jqschema Skill\n\nPath: `.github/skills/jqschema/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/jqschema/ssl.json)",".github/skills/reporting/ssl.json":"# Reporting Skill\n\nPath: `.github/skills/reporting/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/reporting/ssl.json)",".github/skills/ssl/ssl.json":"# Ssl Skill\n\nPath: `.github/skills/ssl/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/ssl/ssl.json)",".squad/agents/Rai/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/Rai/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/Rai/charter.md)",".squad/agents/Rai/history.md":"# Subagent: history\n\nPath: `.squad/agents/Rai/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/Rai/history.md)",".squad/agents/fact-checker/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/fact-checker/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fact-checker/charter.md)",".squad/agents/fact-checker/history.md":"# Subagent: history\n\nPath: `.squad/agents/fact-checker/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fact-checker/history.md)",".squad/agents/fenster/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/fenster/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fenster/charter.md)",".squad/agents/hockney/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/hockney/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/hockney/charter.md)",".squad/agents/keaton/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/keaton/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/keaton/charter.md)",".squad/agents/kujan/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/kujan/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/kujan/charter.md)",".squad/agents/mcmanus/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/mcmanus/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/mcmanus/charter.md)",".squad/agents/ralph/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/ralph/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/ralph/charter.md)",".squad/agents/ralph/history.md":"# Subagent: history\n\nPath: `.squad/agents/ralph/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/ralph/history.md)",".squad/agents/scribe/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/scribe/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/scribe/charter.md)",".squad/agents/scribe/history.md":"# Subagent: history\n\nPath: `.squad/agents/scribe/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/scribe/history.md)",".squad/agents/verbal/charter.md":"# Subagent: charter\n\nPath: `.squad/agents/verbal/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/verbal/charter.md)",".claude/skills/playwright-cli/references/element-attributes.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/element-attributes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/element-attributes.md)",".claude/skills/playwright-cli/references/playwright-tests.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/playwright-tests.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/playwright-tests.md)",".claude/skills/playwright-cli/references/request-mocking.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/request-mocking.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/request-mocking.md)",".claude/skills/playwright-cli/references/running-code.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/running-code.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/running-code.md)",".claude/skills/playwright-cli/references/session-management.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/session-management.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/session-management.md)",".claude/skills/playwright-cli/references/spec-driven-testing.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/spec-driven-testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/spec-driven-testing.md)",".claude/skills/playwright-cli/references/storage-state.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/storage-state.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/storage-state.md)",".claude/skills/playwright-cli/references/test-generation.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/test-generation.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/test-generation.md)",".claude/skills/playwright-cli/references/tracing.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/tracing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/tracing.md)",".claude/skills/playwright-cli/references/video-recording.md":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/video-recording.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/video-recording.md)",".github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json":"# Support Skill\n\nPath: `.github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json)",".github/skills/agentic-workflows/tests/fixtures.json":"# Tests Skill\n\nPath: `.github/skills/agentic-workflows/tests/fixtures.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/agentic-workflows/tests/fixtures.json)",".github/skills/statistics-infographic/examples/example.json":"# Examples Skill\n\nPath: `.github/skills/statistics-infographic/examples/example.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/examples/example.json)",".github/skills/statistics-infographic/references/data-contract.md":"# References Skill\n\nPath: `.github/skills/statistics-infographic/references/data-contract.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/references/data-contract.md)","actions/setup/js/fixtures/evals/runs.json":"# Evals Skill\n\nPath: `actions/setup/js/fixtures/evals/runs.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/evals/runs.json)","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md":"# Subagent: opportunity-extractor\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md)","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md":"# Subagent: paper-screener\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md)","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md":"# Subagent: preliminary-investigator\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md)","actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md":"# Subagent: relevance-ranker\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md)","actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md":"# Subagent: test-writer\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md)","actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md":"# Subagent: duplicate-type-finder\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md)"},"items":[{"name":"routing.md","path":".squad/routing.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/routing.md","title":".squad - Multi-Agent Routing & Delegation Matrix","category":"root-instruction","format":"markdown","content":"# .squad - Multi-Agent Routing & Delegation Matrix\n\nPath: `.squad/routing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/routing.md)","tokens":300,"sizeBytes":178},{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/AGENTS.md)","tokens":300,"sizeBytes":146},{"name":"architecture.md","path":"scratchpad/architecture.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/architecture.md","title":"scratchpad - System Architecture & Module Boundaries","category":"project-spec","format":"markdown","content":"# scratchpad - System Architecture & Module Boundaries\n\nPath: `scratchpad/architecture.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/architecture.md)","tokens":300,"sizeBytes":200},{"name":"element-attributes.md","path":".claude/skills/playwright-cli/references/element-attributes.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/element-attributes.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/element-attributes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/element-attributes.md)","tokens":300,"sizeBytes":236},{"name":"playwright-tests.md","path":".claude/skills/playwright-cli/references/playwright-tests.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/playwright-tests.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/playwright-tests.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/playwright-tests.md)","tokens":300,"sizeBytes":232},{"name":"request-mocking.md","path":".claude/skills/playwright-cli/references/request-mocking.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/request-mocking.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/request-mocking.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/request-mocking.md)","tokens":300,"sizeBytes":230},{"name":"running-code.md","path":".claude/skills/playwright-cli/references/running-code.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/running-code.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/running-code.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/running-code.md)","tokens":300,"sizeBytes":224},{"name":"session-management.md","path":".claude/skills/playwright-cli/references/session-management.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/session-management.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/session-management.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/session-management.md)","tokens":300,"sizeBytes":236},{"name":"spec-driven-testing.md","path":".claude/skills/playwright-cli/references/spec-driven-testing.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/spec-driven-testing.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/spec-driven-testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/spec-driven-testing.md)","tokens":300,"sizeBytes":238},{"name":"storage-state.md","path":".claude/skills/playwright-cli/references/storage-state.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/storage-state.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/storage-state.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/storage-state.md)","tokens":300,"sizeBytes":226},{"name":"test-generation.md","path":".claude/skills/playwright-cli/references/test-generation.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/test-generation.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/test-generation.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/test-generation.md)","tokens":300,"sizeBytes":230},{"name":"tracing.md","path":".claude/skills/playwright-cli/references/tracing.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/tracing.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/tracing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/tracing.md)","tokens":300,"sizeBytes":214},{"name":"video-recording.md","path":".claude/skills/playwright-cli/references/video-recording.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/video-recording.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/playwright-cli/references/video-recording.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/video-recording.md)","tokens":300,"sizeBytes":230},{"name":"SKILL.md","path":".claude/skills/playwright-cli/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/SKILL.md","title":"playwright-cli","category":"anthropic-skill","format":"markdown","content":"---\nname: playwright-cli\ndescription: Automate browser interactions, test web pages and work with Playwright tests.\nallowed-tools: Bash(playwright-cli:*) Bash(npx:*) Bash(npm:*)\n---\n\n# Browser Automation with playwright-cli\n\n## Quick start\n\n```bash\n# open new browser\nplaywright-cli open\n# navigate to a page\nplaywright-cli goto https://playwright.dev\n# interact with the page using refs from the snapshot\nplaywright-cli click e15\nplaywright-cli type \"page.click\"\nplaywright-cli press Enter\n# take a screenshot (rarely used, as snapshot is more common)\nplaywright-cli screenshot\n# close the browser\nplaywright-cli close\n```\n\n## Commands\n\n### Core\n\n```bash\nplaywright-cli open\n# open and navigate right away\nplaywright-cli open https://example.com/\nplaywright-cli goto https://playwright.dev\nplaywright-cli type \"search query\"\nplaywright-cli click e3\nplaywright-cli dblclick e7\n# --submit presses Enter after filling the element\nplaywright-cli fill e5 \"user@example.com\"  --submit\nplaywright-cli drag e2 e8\n# drop files or data onto an element (from outside the page)\nplaywright-cli drop e4 --path=./image.png\nplaywright-cli drop e4 --data=\"text/plain=hello world\"\nplaywright-cli hover e4\nplaywright-cli select e9 \"option-value\"\nplaywright-cli upload ./document.pdf\nplaywright-cli check e12\nplaywright-cli uncheck e12\nplaywright-cli snapshot\nplaywright-cli eval \"document.title\"\nplaywright-cli eval \"el => el.textContent\" e5\n# get element id, class, or any attribute not visible in the snapshot\nplaywright-cli eval \"el => el.id\" e5\nplaywright-cli eval \"el => el.getAttribute('data-testid')\" e5\nplaywright-cli dialog-accept\nplaywright-cli dialog-accept \"confirmation text\"\nplaywright-cli dialog-dismiss\nplaywright-cli resize 1920 1080\nplaywright-cli close\n```\n\n### Navigation\n\n```bash\nplaywright-cli go-back\nplaywright-cli go-forward\nplaywright-cli reload\n```\n\n### Keyboard\n\n```bash\nplaywright-cli press Enter\nplaywright-cli press ArrowDown\nplaywright-cli keydown Shift\nplaywright-cli keyup Shift\n```\n\n### Mouse\n\n```bash\nplaywright-cli mousemove 150 300\nplaywright-cli mousedown\nplaywright-cli mousedown right\nplaywright-cli mouseup\nplaywright-cli mouseup right\nplaywright-cli mousewheel 0 100\n```\n\n### Save as\n\n```bash\nplaywright-cli screenshot\nplaywright-cli screenshot e5\nplaywright-cli screenshot --filename=page.png\nplaywright-cli pdf --filename=page.pdf\n```\n\n### Tabs\n\n```bash\nplaywright-cli tab-list\nplaywright-cli tab-new\nplaywright-cli tab-new https://example.com/page\nplaywright-cli tab-close\nplaywright-cli tab-close 2\nplaywright-cli tab-select 0\n```\n\n### Storage\n\n```bash\nplaywright-cli state-save\nplaywright-cli state-save auth.json\nplaywright-cli state-load auth.json\n\n# Cookies\nplaywright-cli cookie-list\nplaywright-cli cookie-list --domain=example.com\nplaywright-cli cookie-get session_id\nplaywright-cli cookie-set session_id abc123\nplaywright-cli cookie-set session_id abc123 --domain=example.com --httpOnly --secure\nplaywright-cli cookie-delete session_id\nplaywright-cli cookie-clear\n\n# LocalStorage\nplaywright-cli localstorage-list\nplaywright-cli localstorage-get theme\nplaywright-cli localstorage-set theme dark\nplaywright-cli localstorage-delete theme\nplaywright-cli localstorage-clear\n\n# SessionStorage\nplaywright-cli sessionstorage-list\nplaywright-cli sessionstorage-get step\nplaywright-cli sessionstorage-set step 3\nplaywright-cli sessionstorage-delete step\nplaywright-cli sessionstorage-clear\n```\n\n### Network\n\n```bash\nplaywright-cli route \"**/*.jpg\" --status=404\nplaywright-cli route \"https://api.example.com/**\" --body='{\"mock\": true}'\nplaywright-cli route-list\nplaywright-cli unroute \"**/*.jpg\"\nplaywright-cli unroute\n```\n\n### DevTools\n\n```bash\nplaywright-cli console\nplaywright-cli console warning\nplaywright-cli requests\nplaywright-cli request 5\nplaywright-cli run-code \"async page => await page.context().grantPermissions(['geolocation'])\"\nplaywright-cli run-code --filename=script.js\nplaywright-cli tracing-start\nplaywright-cli tracing-stop\nplaywright-cli video-start video.webm\nplaywright-cli video-chapter \"Chapter Title\" --description=\"Details\" --duration=2000\nplaywright-cli video-stop\n\n# launch the dashboard for UI review / design feedback — user annotates the page, you receive the annotated screenshot, snapshot, and notes\nplaywright-cli show --annotate\n\n# generate a Playwright locator for an element from its ref or selector\nplaywright-cli generate-locator e5 --raw\n\n# show a persistent highlight overlay for an element, optionally with a custom style\nplaywright-cli highlight e5\nplaywright-cli highlight e5 --style=\"outline: 3px dashed red\"\n# hide a single element highlight, or all page highlights when no target is given\nplaywright-cli highlight e5 --hide\nplaywright-cli highlight --hide\n```\n\n## Raw output\n\nThe global `--raw` option strips page status, generated code, and snapshot sections from the output, returning only the result value. Use it to pipe command output into other tools. Commands that don't produce output return nothing.\n\n```bash\nplaywright-cli --raw eval \"JSON.stringify(performance.timing)\" | jq '.loadEventEnd - .navigationStart'\nplaywright-cli --raw eval \"JSON.stringify([...document.querySelectorAll('a')].map(a => a.href))\" > links.json\nplaywright-cli --raw snapshot > before.yml\nplaywright-cli click e5\nplaywright-cli --raw snapshot > after.yml\ndiff before.yml after.yml\nTOKEN=$(playwright-cli --raw cookie-get session_id)\nplaywright-cli --raw localstorage-get theme\n```\n\nFor structured output wrapping every reply as JSON, pass --json\n```bash\nplaywright-cli list --json\n```\n\n## Open parameters\n```bash\n# Use specific browser when creating session\nplaywright-cli open --browser=chrome\nplaywright-cli open --browser=firefox\nplaywright-cli open --browser=webkit\nplaywright-cli open --browser=msedge\n\n# Use persistent profile (by default profile is in-memory)\nplaywright-cli open --persistent\n# Use persistent profile with custom directory\nplaywright-cli open --profile=/path/to/profile\n\n# Connect to browser via Playwright Extension\nplaywright-cli attach --extension=chrome\n\n# Connect to a running Chrome or Edge by channel name\nplaywright-cli attach --cdp=chrome\nplaywright-cli attach --cdp=msedge\n\n# Connect to a running browser via CDP endpoint\nplaywright-cli attach --cdp=http://localhost:9222\n\n# Start with config file\nplaywright-cli open --config=my-config.json\n\n# Close the browser\nplaywright-cli close\n# Detach from an attached browser (leaves the external browser running)\nplaywright-cli -s=msedge detach\n# Delete user data for the default session\nplaywright-cli delete-data\n```\n\n## Snapshots\n\nAfter each command, playwright-cli provides a snapshot of the current browser state.\n\n```bash\n> playwright-cli goto https://example.com\n### Page\n- Page URL: https://example.com/\n- Page Title: Example Domain\n### Snapshot\n[Snapshot](.playwright-cli/page-2026-02-14T19-22-42-679Z.yml)\n```\n\nYou can also take a snapshot on demand using `playwright-cli snapshot` command. All the options below can be combined as needed.\n\n```bash\n# default - save to a file with timestamp-based name\nplaywright-cli snapshot\n\n# save to file, use when snapshot is a part of the workflow result\nplaywright-cli snapshot --filename=after-click.yaml\n\n# snapshot an element instead of the whole page\nplaywright-cli snapshot \"#main\"\n\n# limit snapshot depth for efficiency, take a partial snapshot afterwards\nplaywright-cli snapshot --depth=4\nplaywright-cli snapshot e34\n\n# include each element's bounding box as [box=x,y,width,height]\nplaywright-cli snapshot --boxes\n```\n\n## Targeting elements\n\nBy default, use refs from the snapshot to interact with page elements.\n\n```bash\n# get snapshot with refs\nplaywright-cli snapshot\n\n# interact using a ref\nplaywright-cli click e15\n```\n\nYou can also use css selectors or Playwright locators.\n\n```bash\n# css selector\nplaywright-cli click \"#main > button.submit\"\n\n# role locator\nplaywright-cli click \"getByRole('button', { name: 'Submit' })\"\n\n# test id\nplaywright-cli click \"getByTestId('submit-button')\"\n```\n\n## Browser Sessions\n\n```bash\n# create new browser session named \"mysession\" with persistent profile\nplaywright-cli -s=mysession open example.com --persistent\n# same with manually specified profile directory (use when requested explicitly)\nplaywright-cli -s=mysession open example.com --profile=/path/to/profile\nplaywright-cli -s=mysession click e6\nplaywright-cli -s=mysession close  # stop a named browser\nplaywright-cli -s=mysession delete-data  # delete user data for persistent session\n\nplaywright-cli list\n# Close all browsers\nplaywright-cli close-all\n# Forcefully kill all browser processes\nplaywright-cli kill-all\n```\n\n## Installation\n\nIf global `playwright-cli` command is not available, try a local version via `npx playwright-cli`:\n\n```bash\nnpx --no-install playwright-cli --version\n```\n\nWhen local version is available, use `npx playwright-cli` in all commands. Otherwise, install `playwright-cli` as a global command:\n\n```bash\nnpm install -g @playwright/cli@latest\n```\n\n## Example: Form submission\n\n```bash\nplaywright-cli open https://example.com/form\nplaywright-cli snapshot\n\nplaywright-cli fill e1 \"user@example.com\"\nplaywright-cli fill e2 \"password123\"\nplaywright-cli click e3\nplaywright-cli snapshot\nplaywright-cli close\n```\n\n## Example: Multi-tab workflow\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli tab-new https://example.com/other\nplaywright-cli tab-list\nplaywright-cli tab-select 0\nplaywright-cli snapshot\nplaywright-cli close\n```\n\n## Example: Debugging with DevTools\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli click e4\nplaywright-cli fill e7 \"test\"\nplaywright-cli console\nplaywright-cli requests\nplaywright-cli close\n```\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli tracing-start\nplaywright-cli click e4\nplaywright-cli fill e7 \"test\"\nplaywright-cli tracing-stop\nplaywright-cli close\n```\n\n## Example: Interactive session\n\nAsk the user for UI review or design feedback. The user draws boxes on the live page and types comments; you receive the annotated screenshot, the snapshot of the marked region, and the user's notes. Use this whenever the user asks for \"UI review\", \"design feedback\", or to \"ask the user what they think / want / mean\":\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli show --annotate\n```\n\n## Specific tasks\n\n* **Running and Debugging Playwright tests** [references/playwright-tests.md](references/playwright-tests.md)\n* **Request mocking** [references/request-mocking.md](references/request-mocking.md)\n* **Running Playwright code** [references/running-code.md](references/running-code.md)\n* **Browser session management** [references/session-management.md](references/session-management.md)\n* **Spec-driven testing (plan / generate / heal)** [references/spec-driven-testing.md](references/spec-driven-testing.md)\n* **Storage state (cookies, localStorage)** [references/storage-state.md](references/storage-state.md)\n* **Test generation** [references/test-generation.md](references/test-generation.md)\n* **Tracing** [references/tracing.md](references/tracing.md)\n* **Video recording** [references/video-recording.md](references/video-recording.md)\n* **Inspecting element attributes** [references/element-attributes.md](references/element-attributes.md)\n","frontmatter":{"name":"playwright-cli","description":"Automate browser interactions, test web pages and work with Playwright tests.","allowed-tools":"Bash(playwright-cli:*) Bash(npx:*) Bash(npm:*)","allowedTools":["Bash(playwright-cli:*)","Bash(npx:*)","Bash(npm:*)"]},"allowedTools":["Bash(playwright-cli:*)","Bash(npx:*)","Bash(npm:*)"],"isInternal":false,"tokens":2656,"sizeBytes":11263},{"name":".fixture.json","path":".github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json","title":"Support Skill","category":"anthropic-skill","format":"json","content":"# Support Skill\n\nPath: `.github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json)","tokens":300,"sizeBytes":251},{"name":"SKILL.md","path":".github/skills/agentic-workflows/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/agentic-workflows/SKILL.md","title":"agentic-workflows","category":"anthropic-skill","format":"markdown","content":"---\nname: agentic-workflows\ndescription: Route gh-aw design, creation, diagnosis, patching, active debugging, and upgrade requests to the right strategies.\n---\n\n# Agentic Workflows Router\n\nUse this skill when a user asks to design, create, update, debug, or upgrade GitHub Agentic Workflows in this repository.\n\nThis skill is a dispatcher: identify the task type, load the matching workflow prompt/skill file, and follow it directly. Keep responses concise and ask a clarifying question if the correct prompt is unclear.\n\nFor debugging sessions needing CLI setup or run-URL scoping, first load\n`https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/debug-bootstrap.md`; it bootstraps\nthe same shared strategy used by the debugging routes below.\n\nDebugging, incident, health, and failure-related optimization requests use the\nbootstrap's intent routing before generic update, upgrade, or optimization routes,\neven when the CLI is installed. Preserve the supplied guidance repository/ref\nfor all debugging links and public raw fallbacks; URLs showing `main` below are\ndefaults only when no guidance revision is supplied. Reuse already-loaded guides.\nThe intent index is `.github/aw/debug-scenarios.md`; load only the selected\nspecialized route, not every debugging reference.\n\nRepository overlay (optional):\n- Load the target repository's `.github/aw/instructions.md`, if present, after the matched prompt/skill. Use `@.github/aw/instructions.md` only in a matching checkout; do not substitute a guidance-repository overlay.\n- Precedence: repository overlay instructions override upstream defaults when they conflict.\n\nRead only the files you need:\nUse a local guidance checkout only when its repository/ref matches the requested guidance; otherwise use the resolved guidance repository/ref (default `github/gh-aw`).\nIf GitHub API, `gh api`, or GitHub MCP downloads return HTTP 403 (including a token SAML-authorized for a different organization), do not retry with the same token. Fetch the public file without authentication from `https://raw.githubusercontent.com/github/gh-aw/main/<path>` instead, preserving its repository-relative path (including `.github/`). For example: `curl --fail --silent --show-error --location 'https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/create-agentic-workflow.md'`. Use the same fallback for referenced instructions and `SKILL.md` files; never send an Authorization header or token to the raw URL. If the public download fails, report that error rather than proceeding without the required instructions. This fallback is for public `github/gh-aw` content only, not private or enterprise repositories.\n- `.github/aw/action-container-substitutions.md`\n- `.github/aw/agent-runtime-instructions.md`\n- `.github/aw/agentic-chat.md`\n- `.github/aw/agentic-workflows-mcp.md`\n- `.github/aw/analyzing-runs.md`\n- `.github/aw/asciicharts.md`\n- `.github/aw/campaign.md`\n- `.github/aw/charts-trending.md`\n- `.github/aw/charts.md`\n- `.github/aw/cli-commands.md`\n- `.github/aw/compat.md`\n- `.github/aw/configure-agentic-engine.md`\n- `.github/aw/context.md`\n- `.github/aw/create-agentic-workflow-trigger-details.md`\n- `.github/aw/create-agentic-workflow.md`\n- `.github/aw/create-shared-agentic-workflow.md`\n- `.github/aw/debug-agentic-workflow.md`\n- `.github/aw/debug-bootstrap.md`\n- `.github/aw/debug-compilation.md`\n- `.github/aw/debug-live-testing.md`\n- `.github/aw/debug-model-engine-misconfiguration.md`\n- `.github/aw/debug-playbook.md`\n- `.github/aw/debug-scenarios.md`\n- `.github/aw/debug-security-review.md`\n- `.github/aw/debug-workflow-evidence.md`\n- `.github/aw/debug-workflow-health.md`\n- `.github/aw/dependabot.md`\n- `.github/aw/deployment-status.md`\n- `.github/aw/designer-mappings.md`\n- `.github/aw/designer.md`\n- `.github/aw/doctor.md`\n- `.github/aw/documentation-workflows.md`\n- `.github/aw/drive-memory.md`\n- `.github/aw/enclaves.md`\n- `.github/aw/evals.md`\n- `.github/aw/experiments.md`\n- `.github/aw/formal-methods.md`\n- `.github/aw/github-agentic-workflows.md`\n- `.github/aw/github-mcp-server-pagination.md`\n- `.github/aw/github-mcp-server-tools.md`\n- `.github/aw/github-mcp-server.md`\n- `.github/aw/harbor.md`\n- `.github/aw/instructions.md`\n- `.github/aw/intent.md`\n- `.github/aw/jobs.md`\n- `.github/aw/ledger.md`\n- `.github/aw/linter-workflows.md`\n- `.github/aw/llms.md`\n- `.github/aw/loop.md`\n- `.github/aw/lsp.md`\n- `.github/aw/maintainer.md`\n- `.github/aw/mcp-clis.md`\n- `.github/aw/memory-stateful-patterns.md`\n- `.github/aw/memory.md`\n- `.github/aw/messages.md`\n- `.github/aw/multi-agent-research.md`\n- `.github/aw/network.md`\n- `.github/aw/optimize-agentic-workflow.md`\n- `.github/aw/patterns.md`\n- `.github/aw/playwright.md`\n- `.github/aw/pr-reviewer.md`\n- `.github/aw/release-workflow.md`\n- `.github/aw/report.md`\n- `.github/aw/reuse.md`\n- `.github/aw/safe-outputs-automation.md`\n- `.github/aw/safe-outputs-content.md`\n- `.github/aw/safe-outputs-management.md`\n- `.github/aw/safe-outputs-runtime.md`\n- `.github/aw/safe-outputs.md`\n- `.github/aw/serena-tool.md`\n- `.github/aw/shared-safe-jobs.md`\n- `.github/aw/skills.md`\n- `.github/aw/subagents.md`\n- `.github/aw/syntax-agentic.md`\n- `.github/aw/syntax-checkout.md`\n- `.github/aw/syntax-core.md`\n- `.github/aw/syntax-engine.md`\n- `.github/aw/syntax-tools-imports.md`\n- `.github/aw/syntax.md`\n- `.github/aw/test-coverage.md`\n- `.github/aw/test-expression.md`\n- `.github/aw/token-optimization-caching-budgets.md`\n- `.github/aw/token-optimization-observability.md`\n- `.github/aw/token-optimization.md`\n- `.github/aw/triggers.md`\n- `.github/aw/update-agentic-workflow.md`\n- `.github/aw/upgrade-agentic-workflows.md`\n- `.github/aw/visual-regression.md`\n- `.github/aw/work-queue.md`\n- `.github/aw/workflow-constraints.md`\n- `.github/aw/workflow-editing.md`\n- `.github/aw/workflow-patterns.md`\n\nAfter loading the matching workflow prompt or skill, follow it directly:\n- Design workflows from scratch via interview: `.github/aw/designer.md`\n- Create new workflows: `.github/aw/create-agentic-workflow.md`\n- Configure or add declarative engines: `.github/aw/configure-agentic-engine.md`\n- Update existing workflows: `.github/aw/update-agentic-workflow.md`\n- Diagnose, patch, audit, or actively debug workflows: `.github/aw/debug-agentic-workflow.md` (local-first strategy, evidence triage and live gates)\n- Analyze existing runs, logs, or recurring failures: `.github/aw/analyzing-runs.md`. General repository-wide debugging or optimization requests start here with failure clustering before selecting a workflow.\n- AWF model/endpoint 400s, silent cross-family sub-agent failures, `model: auto` failures, install-step 404s after a version pin, or questions about version fields: go directly to `.github/aw/debug-agentic-workflow.md#model-and-engine-misconfiguration` before suggesting model changes.\n- Upgrade workflows and fix deprecations: `.github/aw/upgrade-agentic-workflows.md`\n- Create shared components or MCP wrappers: `.github/aw/create-shared-agentic-workflow.md`\n- Create report-generating workflows: `.github/aw/report.md`\n- Fix Dependabot manifest PRs: `.github/aw/dependabot.md`\n- Analyze coverage workflows: `.github/aw/test-coverage.md`\n- Render compact markdown charts: `.github/aw/asciicharts.md`\n- Map CLI commands to MCP usage: `.github/aw/cli-commands.md`\n- Choose workflow architecture and patterns: `.github/aw/patterns.md`\n- Design, deploy, inspect or recover a Git-backed work queue: `.github/aw/work-queue.md`\n- Optimize token usage and cost: `.github/aw/token-optimization.md`\n- Advanced cost controls without native settings (custom AIC allowances by server size or shared organization budget policies): read `docs/src/content/docs/reference/cost-management.md#configure-advanced-cost-controls-with-admission` ([published guidance](https://github.github.com/gh-aw/reference/cost-management/#configure-advanced-cost-controls-with-admission)). Explain the external authority requirement and cooperative limits; do not invent frontmatter fields or promise hard caps, reservations, or mid-run cancellation.\n- Design long-running multi-agent research workflows: `.github/aw/multi-agent-research.md`\n- Add skills or agent plugins requested by the user (`skills:` / `plugins:` frontmatter, never on-the-fly installs): `.github/aw/skills.md`\n\nWhen the task involves OTEL, OTLP, traces, observability backends, or telemetry-driven analysis, also read and follow `skills/otel-queries/SKILL.md` after loading the matching workflow prompt or skill.\n\nWhen creating, updating, diagnosing or upgrading a workflow that uses `tools.work-queue`, also load `.github/aw/work-queue.md` after the primary prompt. Load deployment docs, operator reference or specification only when that task needs them.\n","frontmatter":{"name":"agentic-workflows","description":"Route gh-aw design, creation, diagnosis, patching, active debugging, and upgrade requests to the right strategies."},"isInternal":false,"tokens":2172,"sizeBytes":8723},{"name":"fixtures.json","path":".github/skills/agentic-workflows/tests/fixtures.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/agentic-workflows/tests/fixtures.json","title":"Tests Skill","category":"anthropic-skill","format":"json","content":"# Tests Skill\n\nPath: `.github/skills/agentic-workflows/tests/fixtures.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/agentic-workflows/tests/fixtures.json)","tokens":300,"sizeBytes":211},{"name":"SKILL.md","path":".github/skills/awf-release-integrator/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/awf-release-integrator/SKILL.md","title":"awf-release-integrator","category":"anthropic-skill","format":"markdown","content":"---\nname: awf-release-integrator\ndescription: Upgrade gh-aw to latest gh-aw-firewall release and identify follow-up spec tasks.\n---\n\n# AWF Release Integrator\n\nUse this skill when updating `github/gh-aw` to a newer `github/gh-aw-firewall` release.\n\n## Goal\n\nLand the version bump cleanly, rebuild the generated artifacts, and review upstream release/spec changes for any follow-up work that should accompany the bump.\n\n## Required sources\n\nConsult these sources before editing anything:\n\n1. The latest `github/gh-aw-firewall` release metadata and body.\n2. The current gh-aw version pins in `pkg/constants/version_constants.go`.\n3. The canonical AWF config sources spec in `specs/awf-config-sources-spec.md`.\n4. The embedded AWF schema in `pkg/workflow/schemas/awf-config.schema.json`.\n5. AWF config integration code in:\n   - `pkg/workflow/awf_config.go`\n   - `pkg/workflow/awf_config_build.go`\n   - `pkg/workflow/awf_config_schema.go`\n   - `pkg/workflow/awf_config_policy.go`\n   - `pkg/workflow/awf_helpers.go`\n   - related AWF tests under `pkg/workflow/`\n\nFor upstream spec review, compare these files from the target `github/gh-aw-firewall` release or tag:\n\n- `docs/awf-config-spec.md`\n- `docs/awf-config.schema.json`\n- `src/awf-config-schema.json`\n- any release assets such as `awf-config.schema.json`\n\n## Update procedure\n\n1. Read `pkg/constants/version_constants.go` and record:\n   - `DefaultFirewallVersion`\n   - every `AWF*MinVersion` constant\n2. Look up the latest `github/gh-aw-firewall` release.\n3. If the latest release tag matches `DefaultFirewallVersion`, report that no version bump is needed and only continue with spec/release-note review if explicitly requested.\n4. If a newer release exists, update the gh-aw pins:\n   - bump `DefaultFirewallVersion`\n   - update any `AWF*MinVersion` constants that must move because the new release introduces or changes gated flags/features\n5. Review release notes for:\n   - new flags\n   - removed or deprecated flags\n   - schema/config additions\n   - security fixes\n   - behavioral changes that could require new tests, docs, or ADR/spec updates\n6. Review the upstream AWF specification and schema changes against:\n   - `pkg/workflow/schemas/awf-config.schema.json`\n   - `specs/awf-config-sources-spec.md`\n   - local AWF config generation and validation code\n7. Update any directly related gh-aw files needed for a complete integration, such as:\n   - embedded schema copies\n   - version-gated helpers/tests\n   - specs or ADRs documenting newly surfaced AWF behavior\n8. Add or update a patch changeset when the bump changes shipped behavior.\n\n## Required validation\n\nAfter editing, run the full AWF rebuild flow exactly in this order. The second\n`make recompile` is required to refresh image SHA pins resolved during the first pass.\n\n```bash\nmake build\nmake recompile\nmake recompile\n```\n\nThen run focused validation for any touched Go code or schema logic, especially AWF-related tests.\n\n## Expected output\n\nSummarize:\n\n- current gh-aw AWF version → target release\n- updated constants\n- release-note highlights\n- specification/schema differences reviewed\n- additional recommended follow-up updates that are not yet implemented\n\n## Review heuristics\n\nWhen deciding whether more than a version bump is needed, specifically check for:\n\n- new AWF schema properties not represented in gh-aw\n- new CLI flags that need `AWF*MinVersion` gates\n- config fields present in schema but absent from gh-aw generation/validation\n- drift that should update `specs/awf-config-sources-spec.md`\n- tests whose expected pinned AWF version or schema URLs need refresh\n","frontmatter":{"name":"awf-release-integrator","description":"Upgrade gh-aw to latest gh-aw-firewall release and identify follow-up spec tasks."},"isInternal":false,"tokens":851,"sizeBytes":3598},{"name":"SKILL.md","path":".github/skills/checkout-credential-review/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/checkout-credential-review/SKILL.md","title":"checkout-credential-review","category":"anthropic-skill","format":"markdown","content":"---\nname: checkout-credential-review\ndescription: Review code that performs git or gh operations against repository checkouts in gh-aw, checking that the right credentials are available at the right time and that sparseness, shallowness and credential-free factors are properly considered.\n---\n\n# Checkout Credential Review\n\nUse this skill when reviewing or writing code in `pkg/workflow/`, `actions/setup/js/`, or compiled `.lock.yml` workflows that runs `git`, `gh`, or any other remote-touching operation against a repository checkout.\n\n## Background\n\nEach entry in a workflow's `checkout:` block may declare its own credentials (`github-token:`, `github-app:`), and the compiler wires those into the corresponding `actions/checkout` step ([pkg/workflow/checkout_step_generator.go](../../../pkg/workflow/checkout_step_generator.go)). Generated checkouts always set `persist-credentials: false`, so the on-disk repo retains **no** credentials after the step finishes — only `actions/checkout`'s own internal token is used during the clone, and it is scrubbed in its post-step.\n\nA separate step that wants to authenticate later must either (a) re-inject a token at command level (e.g. `git -c http.extraheader=...`) or (b) be passed the per-checkout token via env. The compiler does *not* automatically thread per-checkout `github-token`s into downstream steps.\n\nTwo important contexts deliberately run with **no git credentials**:\n\n- The **safe-outputs MCP server** and its handlers (`generate_git_bundle.cjs`, `generate_git_patch.cjs`, `create_pull_request.cjs`). Errors in these paths explicitly say \"the safe-outputs MCP server has no credentials for private repositories\" — fetch/push will fail for private repos.\n- The **agent runtime** after `actions/checkout`. The agent prompt in [actions/setup/md/safe_outputs_push_to_pr_branch.md](../../../actions/setup/md/safe_outputs_push_to_pr_branch.md) explicitly tells the model not to attempt `git fetch`, `git pull`, `git push`, or any other authenticated git operation, and to report unavailable branches rather than try to fetch them.\n\n## Review checklist\n\nWhen you see a new `git`, `gh`, `execFileSync('git'…)`, or compiled `run:` block:\n\n1. **Does it touch a remote?** Local-only commands (`symbolic-ref`, `rev-parse`, `log`, `show`, `merge-base`, `diff`, `status`) need no credentials. Anything in `fetch | pull | push | clone | ls-remote | remote (set-url|add|update)` does, plus on-demand blob fetches in partial clones.\n2. **Which checkout is it operating on?** If it's a cross-repo entry from `checkout:`, the relevant credential is *that entry's* `github-token`, not the workflow's default `GITHUB_TOKEN`. Confirm the per-entry token is actually threaded into the step's env (or refuse to do remote operations and degrade gracefully).\n3. **Which job/context emits it?** Agent job and safe-outputs MCP server both run without git credentials by design. Any remote git operation there must be wrapped in `try/catch`, fail soft, and surface a clear \"no credentials\" error rather than a raw git stderr.\n4. **Sparse / shallow / monorepo concerns.** Avoid emitting steps that deepen (`git fetch --unshallow`, `--deepen=N`) or widen (`git fetch origin '+refs/heads/*'`) a sparse or shallow checkout of a large monorepo — these need credentials *and* can pull hundreds of MB. Prefer expanding `fetch:` / `fetch-depth:` / `sparse-checkout:` at compile time so it happens during `actions/checkout` with its internal token, never later.\n5. **`gh` is REST, not git.** `gh api …` uses whatever `GH_TOKEN` is in the step's env — it does **not** automatically inherit per-checkout PATs. For cross-org private repos, either thread the right token in or accept the call will 404 and handle it.\n\n## Related\n\n- [docs/src/content/docs/reference/checkout.md](../../../docs/src/content/docs/reference/checkout.md) — \"Git Credentials After Checkout\"\n- [docs/sparseness.md](../../../docs/sparseness.md) — sparse/blobless credential lifecycle\n- [pkg/workflow/checkout_step_generator.go](../../../pkg/workflow/checkout_step_generator.go) — token wiring per checkout\n- [actions/setup/md/safe_outputs_push_to_pr_branch.md](../../../actions/setup/md/safe_outputs_push_to_pr_branch.md) — agent-facing guidance\n","frontmatter":{"name":"checkout-credential-review","description":"Review code that performs git or gh operations against repository checkouts in gh-aw, checking that the right credentials are available at the right time and that sparseness, shallowness and credential-free factors are properly considered."},"isInternal":false,"tokens":971,"sizeBytes":4264},{"name":"SKILL.md","path":".github/skills/console-rendering/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/console-rendering/SKILL.md","title":"console-rendering","category":"anthropic-skill","format":"markdown","content":"---\nname: console-rendering\ndescription: Use Go struct tags to render styled terminal output in gh-aw.\n---\n\n# Console Rendering System Usage\n\nUse this guide for the struct tag-based console rendering system.\n\n## Struct Tag Support\n\nUse the `console` struct tag to control rendering behavior:\n\n- **`header:\"Name\"`** - Sets the display name for fields (used in both structs and tables)\n- **`title:\"Section Title\"`** - Sets the title for nested structs, slices, or maps\n- **`format:\"type\"`** - Sets the formatting type for the field value\n  - `format:number` - Formats integers as human-readable numbers (e.g., \"1k\", \"1.2M\")\n  - `format:cost` - Formats floats as currency with $ prefix (e.g., \"$1.234\")\n- **`omitempty`** - Skips the field if it has a zero value\n- **`\"-\"`** - Always skips the field\n\n## Example Usage\n\n```go\ntype Overview struct {\n    RunID    int64  `console:\"header:Run ID\"`\n    Workflow string `console:\"header:Workflow\"`\n    Status   string `console:\"header:Status\"`\n    Duration string `console:\"header:Duration,omitempty\"`\n}\n\ndata := Overview{\n    RunID:    12345,\n    Workflow: \"test-workflow\",\n    Status:   \"completed\",\n    Duration: \"5m30s\",\n}\n\n// Simple rendering\nfmt.Print(console.RenderStruct(data))\n\n// Output:\n//   Run ID  : 12345\n//   Workflow: test-workflow\n//   Status  : completed\n//   Duration: 5m30s\n```\n\n## Format Tag Examples\n\n### Number Formatting\n\n```go\ntype Metrics struct {\n    TokenUsage int `console:\"header:Token Usage,format:number\"`\n    Errors     int `console:\"header:Errors\"`\n}\n\ndata := Metrics{\n    TokenUsage: 250000,\n    Errors:     5,\n}\n\n// Renders as:\n//   Token Usage: 250k\n//   Errors     : 5\n```\n\n### Cost Formatting\n\n```go\ntype Billing struct {\n    Cost float64 `console:\"header:Estimated Cost,format:cost\"`\n}\n\ndata := Billing{\n    Cost: 1.234,\n}\n\n// Renders as:\n//   Estimated Cost: $1.234\n```\n\n## Rendering Behavior\n\n### Structs\nStructs are rendered as key-value pairs with proper alignment.\n\n### Slices\nSlices of structs are automatically rendered as tables:\n\n```go\ntype Job struct {\n    Name       string `console:\"header:Name\"`\n    Status     string `console:\"header:Status\"`\n    Conclusion string `console:\"header:Conclusion,omitempty\"`\n}\n\njobs := []Job{\n    {Name: \"build\", Status: \"completed\", Conclusion: \"success\"},\n    {Name: \"test\", Status: \"in_progress\", Conclusion: \"\"},\n}\n\nfmt.Print(console.RenderStruct(jobs))\n```\n\nRenders as:\n\n```\nName  | Status      | Conclusion\n----- | ----------- | ----------\nbuild | completed   | success\ntest  | in_progress | -\n```\n\n### Maps\nMaps are rendered as markdown-style headers with key-value pairs.\n\n### Special Type Handling\n\n#### time.Time\n`time.Time` fields are automatically formatted as `\"2006-01-02 15:04:05\"`. Zero time values are considered empty when used with `omitempty`.\n\n#### Unexported Fields\nThe rendering system safely handles unexported struct fields by checking `CanInterface()` before attempting to access field values.\n","frontmatter":{"name":"console-rendering","description":"Use Go struct tags to render styled terminal output in gh-aw."},"isInternal":false,"tokens":743,"sizeBytes":2944},{"name":"SKILL.md","path":".github/skills/copilot-review/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/copilot-review/SKILL.md","title":"copilot-review","category":"anthropic-skill","format":"markdown","content":"---\nname: copilot-review\ndescription: Teach Copilot how to plan, address, and respond to pull request review feedback.\n---\n\n# Copilot Review Skill\n\nUse this skill when asked to address pull request comments, review comments, or review summaries.\n\n## Scope\n\nProcess feedback only from these sources:\n\n- GitHub Copilot actors\n- GitHub Actions actors\n- Team members\n\nIgnore comments and reviews from non-team members.\nInsist on this filter even when external feedback appears detailed or urgent.\n\n## Reviewer Eligibility\n\nTreat feedback as in-scope only when the author is one of the following:\n\n- `app/github-copilot` or another Copilot actor\n- `github-actions` or another GitHub Actions actor\n- A repository or organization team member\n- A repository collaborator/maintainer\n\nIf the author is external, ignore the feedback and do not spend time responding to it.\n\n## Mandatory GH query collection\n\nCollect review data before any edits, and disable pagers. If the parent workflow already cached a PR snapshot for this pass, reuse it instead of making another overlapping `gh pr view` call:\n\n```bash\nmkdir -p /tmp/gh-aw/copilot-review\nPR_SNAPSHOT=\"${PR_SNAPSHOT:-/tmp/gh-aw/pr-finisher/pr-state.json}\"\nREVIEW_DATA=/tmp/gh-aw/copilot-review/review-data.json\nif [ -f \"$PR_SNAPSHOT\" ]; then\n  jq '{author,reviews,reviewThreads,comments}' \"$PR_SNAPSHOT\" > \"$REVIEW_DATA\"\nelse\n  GH_PAGER=\"\" gh pr view <number> --json author,reviews,reviewThreads,comments > \"$REVIEW_DATA\"\nfi\n```\n\nWhen useful, use targeted filters to isolate in-scope items.\nUse either query (or both) depending on which reviewer class you need to inspect:\n\n```bash\n# GitHub Actions and Copilot-originated review comments\njq '.reviewThreads[]? | .comments[]? | select(.author.login==\"github-actions[bot]\" or .author.login==\"app/github-copilot\")' \"$REVIEW_DATA\"\n\n# Team/collaborator review comments by association\njq '.reviewThreads[]? | .comments[]? | select(.authorAssociation==\"MEMBER\" or .authorAssociation==\"OWNER\" or .authorAssociation==\"COLLABORATOR\")' \"$REVIEW_DATA\"\n```\n\n## Required Workflow\n\n### 0. Check PR author eligibility\n\nInspect the pull request author before processing feedback:\n\n- Ignore platform-managed dependency PRs from `dependabot[bot]`, `app/dependabot`, or `renovate[bot]` unless the user explicitly asks to handle them.\n- More generally, ignore PRs authored by unrecognized bots (an author whose type is `Bot` or whose login ends with `[bot]`) unless the user explicitly includes that bot.\n- Continue to handle PRs from trusted GitHub automation such as `app/github-copilot` and `github-actions[bot]`.\n\nThis author check is separate from reviewer eligibility: trusted review comments do not make an otherwise ignored bot-authored PR eligible.\nFor an ignored bot-authored PR, report that platform automation manages it and stop without collecting feedback, modifying files, or replying to comments.\n\n### 1. Collect all feedback first\n\nBefore making changes, gather all pull request discussion in one pass:\n\n- pull request review summaries\n- pull request review comments / review threads\n- pull request conversation comments\n\nDo not respond comment-by-comment before understanding the full set of requests.\n\n### 2. Filter to allowed reviewers\n\nRemove feedback from people who are not team members or trusted automation.\n\nKeep only comments and reviews from the allowed reviewer set above.\nTreat `CONTRIBUTOR`, `FIRST_TIME_CONTRIBUTOR`, `FIRST_TIMER`, and `NONE` as out-of-scope unless the author is trusted automation.\n\n### 3. Bucket the feedback\n\nGroup the remaining feedback into clear buckets such as:\n\n- bugs / correctness\n- tests\n- documentation\n- style / clarity\n- CI / workflow issues\n- duplicate or overlapping requests\n- will not fix / needs justification\n\nCreate a short plan that covers every bucket before editing code.\n\n### 4. Resolve each bucket\n\nFor every bucket, decide whether to:\n\n- make the requested change\n- partially apply it\n- decline it with a clear justification\n\nDo not silently ignore in-scope feedback.\n\n### 5. Validate before replying\n\nAfter making changes, re-check the diff and run the relevant validation so replies describe the final state accurately.\n\n### 6. Reply to every in-scope review comment\n\nEvery in-scope review comment must get a direct reply that says what happened.\nThis includes all in-scope `github-actions[bot]` review comments and threads.\n\nEach reply should briefly state one of:\n\n- what change was made\n- where the fix was applied\n- why no change was made\n- why the comment is already satisfied by another change\n\nIf several comments are handled by the same fix, still reply to each comment individually.\n\n### 7. Resolve threads after answering\n\nIf a review thread has been fully addressed and the tooling supports it:\n\n- reply with the action taken\n- resolve the thread\n\nDo not resolve a thread without answering it first.\n\n## Response Rules\n\n- Answer every in-scope review comment.\n- Review summaries from in-scope reviewers must also be addressed in the work plan.\n- Keep replies concise, specific, and action-oriented.\n- Mention file names or behavior changes when helpful.\n- When declining a request, explain why it is being ignored.\n- When a comment is outdated, reply that it is obsolete because of the newer change and resolve if appropriate.\n\n## Planning Standard\n\nBefore editing, produce a compact internal checklist that maps:\n\n- each in-scope comment or review\n- its bucket\n- planned action\n- final reply status\n\nOnly start implementation after the full feedback set has been reviewed and bucketed.\n\n## Completion Standard\n\nFor eligible PRs, the task is complete only when all of the following are true:\n\n- all in-scope comments and reviews were collected\n- the PR author passed the bot eligibility check\n- non-team-member feedback was ignored\n- each in-scope item was resolved by code changes or explicit justification\n- every in-scope review comment received a reply describing the action taken\n- addressed threads were resolved when possible\n","frontmatter":{"name":"copilot-review","description":"Teach Copilot how to plan, address, and respond to pull request review feedback."},"isInternal":false,"tokens":1311,"sizeBytes":5994},{"name":"SKILL.md","path":".github/skills/create-canvas/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/create-canvas/SKILL.md","title":"create-canvas","category":"anthropic-skill","format":"markdown","content":"---\nname: create-canvas\ndescription: Author, validate, and debug canvas extensions that the agent can open in the GitHub Copilot app's side panel. Use when creating, reviewing, or troubleshooting a canvas extension — including its actions, inputs, rendered content, and the surrounding extension wiring (tools, hooks, lifecycle).\n---\n\n# Extension Canvas Authoring\n\nUse this skill when creating or debugging an extension canvas that integrates with the runtime canvas model.\n\nThe host app no longer participates in extension canvas registration. Extensions declare canvases directly to the runtime via the Copilot SDK on `joinSession`; the runtime routes provider callbacks (`canvas.open`, `canvas.action.invoke`, etc.) straight to the declaring connection; the host app just renders whatever URL the provider returns.\n\n## Authoring workflow (do this in order)\n\n1. **Decide the scope.** Project (`.github/extensions/<name>/`) is committed to the repo and shared with the team. User (`$COPILOT_HOME/extensions/<name>/`) is local to the current user. Session (`$COPILOT_HOME/session-state/<sessionId>/extensions/<name>/`) is loaded only for the current session — ideal for a throwaway canvas for one conversation. Unless the request makes it obvious, ask before creating files — the choice changes who sees the extension, whether it's committed, and the resulting `extensionId`.\n\n2. **Scaffold via tool, don't hand-write the skeleton.**\n   ```\n   extensions_manage({ operation: \"scaffold\", kind: \"canvas\", name: \"<name>\", location: \"project\" | \"user\" | \"session\" })\n   ```\n   The canvas scaffold produces an `extension.mjs` with `joinSession({ canvases: [createCanvas({...})] })`, a working loopback HTTP server per instance, an example action, and `onClose` cleanup. Edit from there.\n\n3. **Edit the file.** Implement your `open`, `actions[]`, optional `onClose`, and (if needed) tools/hooks alongside.\n\n4. **Reload.** Call `extensions_reload`. Stale canvas instances flip to `stale`, then back to `ready` once the provider reconnects.\n\n5. **Verify.** Call `extensions_manage({ operation: \"list\" })` and `extensions_manage({ operation: \"inspect\", name: \"<name>\" })`. If the extension is marked failed, `inspect` surfaces the log file path and a tail — that log is the primary debugging surface.\n\n6. **Drive it.** Run the validation checklist below via `list_canvas_capabilities`, `open_canvas`, and `invoke_canvas_action`.\n\n## Extension shape\n\nA canvas extension is a Copilot CLI extension running as a forked Node process that speaks JSON-RPC over stdio to the CLI.\n\n- Entry file **must** be named `extension.mjs` (ES modules only; TypeScript is not supported).\n- Discovery scans only immediate subdirectories of `.github/extensions/` (relative to git root), `$COPILOT_HOME/extensions/`, and `$COPILOT_HOME/session-state/<sessionId>/extensions/`.\n- The runtime auto-derives a stable `extensionId` of `${source}:${name}` (e.g. `project:my-extension`); session-scoped extensions embed the session id as `session:<sessionId>:<name>`.\n- `@github/copilot-sdk` is resolved automatically by the CLI — do **not** add a `package.json` or `node_modules` for it.\n- `stdout` is reserved for JSON-RPC. **Never `console.log`.** Use `session.log(message, { level, ephemeral })`.\n- Tool names must be globally unique across all loaded extensions — collisions cause the second extension to fail.\n\n## `joinSession` signature\n\n```js\nimport { joinSession, createCanvas, CanvasError } from \"@github/copilot-sdk/extension\";\n\nconst session = await joinSession({\n    canvases: [createCanvas({ /* ... */ })],\n    tools: [/* optional */],\n    hooks: {/* optional */},\n    onPermissionRequest: async (request) => ({ kind: \"approve-once\" }), // optional\n});\n// session.sessionId, session.workspacePath (string | undefined),\n// session.send, session.sendAndWait, session.log, session.on, session.rpc\n```\n\n## Canvas API (`canvas.d.ts`)\n\n```js\nimport { createCanvas, CanvasError, joinSession } from \"@github/copilot-sdk/extension\";\n\nconst canvas = createCanvas({\n    id: \"main\",                  // unique within this extension\n    displayName: \"My canvas\",    // human-readable label shown in host chrome\n    description: \"Short summary the agent sees in the system-prompt canvas catalog.\",\n    inputSchema: { /* JSON Schema for open input (optional) */ },\n    actions: [\n        {\n            name: \"do_thing\",        // unique within this canvas; MUST NOT start with `canvas.`\n            description: \"...\",\n            inputSchema: { /* JSON Schema (optional) */ },\n            handler: async (ctx) => {\n                // ctx: { sessionId, extensionId, canvasId, instanceId, actionName, input, host }\n                // Return raw result; throw CanvasError(\"code\", \"message\") for errors.\n                return { /* ... */ };\n            },\n        },\n    ],\n    open: async (ctx) => {\n        // ctx: { sessionId, extensionId, canvasId, instanceId, input, host }\n        // Idempotent: same instanceId may arrive again after provider reconnect.\n        return {\n            url: \"http://127.0.0.1:<loopback-port>/\", // optional for native canvases\n            title: \"...\",   // optional, shown in host chrome\n            status: \"...\",  // optional, shown in host chrome\n        };\n    },\n    onClose: async (ctx) => {\n        // Optional. Fire-and-forget; return value ignored.\n    },\n});\n```\n\nRuntime rules:\n- Action names starting with `canvas.` are reserved and rejected at declaration time.\n- Every `actions[]` entry must have a `handler`; missing handlers fall through to `CanvasError.noHandler()`.\n- Canvas-level `inputSchema` is validated before `open`; action-level `inputSchema` is validated before dispatch. Failure returns `canvas_input_invalid` with Ajv details.\n- Return raw values from action handlers; throw `CanvasError(\"code\", \"message\")` for errors.\n- `ctx.canvasId` (not `ctx.id`) is the canvas identifier in handler context.\n\n## Loopback server pattern\n\n```js\nimport { createServer } from \"node:http\";\nimport { createCanvas, joinSession } from \"@github/copilot-sdk/extension\";\n\nconst servers = new Map(); // instanceId → { server, url }\n\nasync function startServer(instanceId) {\n    const server = createServer((req, res) => {\n        res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n        res.end(renderHtml(instanceId));\n    });\n    await new Promise((r) => server.listen(0, \"127.0.0.1\", r));\n    const port = server.address().port;\n    return { server, url: `http://127.0.0.1:${port}/` };\n}\n\nawait joinSession({\n    canvases: [\n        createCanvas({\n            id: \"my-canvas\",\n            displayName: \"My canvas\",\n            description: \"...\",\n            open: async (ctx) => {\n                let entry = servers.get(ctx.instanceId);\n                if (!entry) {\n                    entry = await startServer(ctx.instanceId);\n                    servers.set(ctx.instanceId, entry);\n                }\n                return { title: \"My canvas\", url: entry.url };\n            },\n            onClose: async (ctx) => {\n                const entry = servers.get(ctx.instanceId);\n                if (entry) {\n                    servers.delete(ctx.instanceId);\n                    await new Promise((r) => entry.server.close(() => r()));\n                }\n            },\n        }),\n    ],\n});\n```\n\nBind embedded servers to **loopback only** (`127.0.0.1`). The host only embeds loopback URLs. Push state updates to the iframe with Server-Sent Events (`/events`).\n\n## ID model — three distinct identifiers\n\n- **`canvasId`** — the canvas *type* declared by the extension. Accepted by `list_canvas_capabilities` and `open_canvas`; not by `invoke_canvas_action`.\n- **`extensionId`** — auto-derived `${source}:${name}` (e.g. `project:triage-board`). Only pass it to disambiguate when two extensions declare the same `canvasId`.\n- **`instanceId`** — caller-invented handle for one running panel (slug or UUID). Two panels of the same canvas need two `instanceId`s. Validated against `^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$` — max 128 chars, alphanumeric first character, then only `[A-Za-z0-9._-]`.\n\nExample: `open_canvas({ canvasId: \"triage-board\", instanceId: \"triage-1\" })` then `invoke_canvas_action({ instanceId: \"triage-1\", actionName: \"refresh\" })`.\n\n## Agent-side canvas tools\n\n```\n// Open a canvas panel\nopen_canvas({ canvasId: \"my-canvas\", instanceId: \"my-canvas-1\", input?: {...} })\n// Returns { instanceId, url? } — no extensionId needed unless two providers share the canvasId.\n\n// Discover a canvas type's actions and input schema\nlist_canvas_capabilities({ canvasId: \"my-canvas\" })\n\n// Invoke an action on an open panel\ninvoke_canvas_action({ instanceId: \"my-canvas-1\", actionName: \"do_thing\", input?: {...} })\n```\n\nRe-opening the same `instanceId` focuses the existing panel (the host emits `session.canvas.opened` with `reopen: true` and reloads the iframe without invoking the provider again).\n\n## Injecting instructions\n\n- **`additionalContext` from hooks** (everyday path). `onSessionStart` → once-per-session guidance; `onUserPromptSubmitted` → per-turn nudges. The runtime appends it as a `developer`-role message.\n- **`systemMessage` on `joinSession`** (system-prompt path):\n  - `{ mode: \"append\", content }` — append to the SDK foundation.\n  - `{ mode: \"customize\", sections: {...} }` — override individual sections (`identity`, `tone`, `safety`, `custom_instructions`, `runtime_instructions`, etc.) with `replace` / `remove` / `append` / `prepend` / transform-callback actions.\n  - **Do NOT use** `{ mode: \"replace\", content }` from an extension — it discards the entire SDK-managed prompt including safety guardrails.\n\n## State model\n\n**`instanceId` identifies the panel, not the data.** Never key persistent state by `instanceId` alone — iframes reload, extensions restart, and a fresh `instanceId` may be opened for the same logical content.\n\nPick the right storage scope:\n- **Per session / workspace** — write artifact files into `session.workspacePath` (returned by `joinSession`). Lives alongside session artifacts, cleaned up with the session.\n- **Per user / global** — write under `$COPILOT_HOME/extensions/<extension-name>/artifacts/`. Follows the user across sessions.\n- **Per artifact / document** — key under a stable `documentId` or file path passed via `input`.\n- **In-repo, committed artifacts** — architecture diagrams, ADRs, design docs that belong in the repo. Write to a sensible repo path.\n- **Per panel (`instanceId`)** — only ephemeral UI state that genuinely should not survive a reload.\n\nResolve the owning ID in `open()` from `input`, load persisted state for that ID, and render. Two `instanceId`s for the same `documentId` should show the same content.\n\n## App theme tokens\n\nThe runtime mirrors the canvas theme contract onto your canvas document:\n- Root/body attributes: `data-color-mode`, `data-dark-theme`, `data-light-theme`, `data-theme-source`, `data-theme-tone`, `data-visual-mode`, `pointer-on-hover` class.\n- Semantic tokens: `--background-color-default`, `--border-color-default`, `--text-color-default`, `--text-color-muted`, `--color-focus-outline`.\n- Type ramp: `--font-sans`, `--font-mono`, `--font-weight-semibold`, `--text-body-medium`, `--leading-body-medium`.\n- True-color: `--true-color-red`, `--true-color-red-muted`, `--true-color-blue`, `--true-color-blue-muted`.\n\n```css\nbody {\n    margin: 0;\n    background: var(--background-color-default, #ffffff);\n    color: var(--text-color-default, #1f2328);\n    font-family: var(--font-sans, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n    font-size: var(--text-body-medium, 14px);\n    line-height: var(--leading-body-medium, 20px);\n}\n```\n\nOnly depend on the attributes, classes, and variables documented above — others are app-internal and can change.\n\n## Validation checklist\n\n1. **Discovery** — confirm your canvas appears in the `<canvases>` section of the system prompt, then verify `list_canvas_capabilities({ canvasId })` returns your `actions[]`.\n2. **Open** — call `open_canvas({ canvasId, input? })`. Confirm you receive `{ instanceId, url? }` and no error.\n3. **Action** — call `invoke_canvas_action({ instanceId, actionName, input? })` and confirm correct response payload.\n4. **Input validation** — call `open_canvas` with input that fails `inputSchema`. Expect `canvas_input_invalid`.\n5. **Reserved verb rejection** — call `invoke_canvas_action(instanceId, \"canvas.open\", ...)`. Expect `canvas_reserved_action_name`.\n\n## Debugging\n\n1. `extensions_manage({ operation: \"list\" })` — is the extension loaded? Marked `failed`?\n2. `extensions_manage({ operation: \"inspect\", name: \"<name>\" })` — surfaces log file path and tail. Primary debugging surface.\n3. After editing, **always** `extensions_reload` before re-running RPC calls.\n4. To force iframe reload, call `open_canvas` again with the same `instanceId`.\n5. If not discovered at all, verify the file is named exactly `extension.mjs` and lives in an immediate subdirectory of `.github/extensions/`, `$COPILOT_HOME/extensions/`, or the session's extensions dir.\n\n## Sharing extensions via Gist\n\nUse `share_extension` / `install_extension` tools. Gist format:\n- Flat file structure (subdirs encoded as `\\` in gist keys, decoded on install).\n- A `copilot-extension.json` manifest: `{ \"name\": \"<extension-name>\", \"version\": 1 }`.\n- `node_modules/`, `dist/`, `build/`, `.git/`, hidden dirs (except `.github/`) skipped during share.\n- Per-file cap: ~1 MB; total cap: ~5 MB.\n\n## Common pitfalls\n\n- **`console.log` corrupts JSON-RPC.** Use `session.log()` for user-visible messaging.\n- Do not declare action names starting with `canvas.`.\n- Do not forget to wire a `handler` on every `actions[]` entry.\n- Bind servers to **loopback only**.\n- `open` may be re-invoked on provider reconnect — treat it as idempotent and rehydrate from durable storage.\n- Return raw values from action handlers; throw `CanvasError(\"code\", \"message\")` for errors.\n- The canvas context field is `ctx.canvasId`, not `ctx.id`.\n- Tool names must be globally unique across all loaded extensions.\n- `extension.mjs` only — `.ts` is not supported. The `@github/copilot-sdk` import is auto-resolved; do not add a `package.json` for it.\n\n## Session object quick reference\n\n```js\nawait session.log(\"message\", { level?: \"info\"|\"warning\"|\"error\", ephemeral?: boolean });\nawait session.send({ prompt: \"...\", attachments?: [{ type: \"file\", path: \"...\" }] });\nconst response = await session.sendAndWait({ prompt: \"...\" });\nconst unsub = session.on(\"tool.execution_complete\", (event) => { /* ... */ });\n// session.workspacePath — path to session workspace (string | undefined)\n// session.sessionId — current session ID\n```\n\nKey event types: `assistant.message`, `tool.execution_start`, `tool.execution_complete`, `user.message`, `session.idle`, `session.error`, `permission.requested`, `session.shutdown`.\n","frontmatter":{"name":"create-canvas","description":"Author, validate, and debug canvas extensions that the agent can open in the GitHub Copilot app's side panel. Use when creating, reviewing, or troubleshooting a canvas extension — including its actions, inputs, rendered content, and the surrounding extension wiring (tools, hooks, lifecycle)."},"isInternal":false,"tokens":3538,"sizeBytes":14933},{"name":"SKILL.md","path":".github/skills/custom-agents/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/custom-agents/SKILL.md","title":"custom-agents","category":"anthropic-skill","format":"markdown","content":"---\nname: custom-agents\ndescription: Define and validate GitHub custom agent files, prompts, and examples.\n---\n\n\n# GitHub Custom Agent File Format\n\nUse this reference for the GitHub custom agent file format.\n\n## Overview\n\nGitHub Copilot reads custom agent instructions from Markdown files with YAML frontmatter. Use them to define specialized behavior, tool access, and workflows for your repository.\n\n## File Locations\n\nPlace custom agent files in these locations based on scope:\n\n### 1. Repository-wide Instructions\n- **File**: `.github/copilot-instructions.md`\n- **Scope**: Applies to all code generation in the repository\n- **Use case**: General coding standards, security requirements, testing practices\n\n### 2. Path-specific Instructions\n- **Directory**: `.github/instructions/`\n- **Pattern**: `*.instructions.md` (e.g., `frontend.instructions.md`, `backend.instructions.md`)\n- **Scope**: Can target specific directories or file patterns using `applyTo` in frontmatter\n- **Use case**: Framework-specific guidelines, component-specific rules\n\n### 3. Custom Agent Profiles\n- **Directory**: `.github/agents/` or `.github/copilot/instructions/`\n- **Pattern**: `AGENTS.md`, `*.md` (e.g., `readme-creator.md`, `test-writer.md`)\n- **Scope**: Defines specialized agents with specific capabilities and instructions\n- **Use case**: Task-specific agents (documentation, testing, refactoring)\n\n### 4. agentic workflow integration\n- **Location**: Imported via `imports` field in workflow frontmatter\n- **Pattern**: Any markdown files under `.github/agents/` directory\n- **Scope**: Custom agent for specific agentic workflow execution\n- **Use case**: Workflow-specific agent configuration\n- **Important**: Only one agent file is allowed per workflow\n\n## File Format\n\n### Basic Structure\n\n```markdown\n# YAML frontmatter (configuration)\nname: agent-name\ndescription: Brief description of agent's purpose\n\n# Markdown body (instructions)\n\nYour natural language instructions for the agent go here.\n```\n\n### Complete YAML Frontmatter Schema\n\n```yaml\n# Required fields\nname: agent-identifier              # Unique identifier for the agent\n\n# Optional descriptive fields\ndescription: >                      # Multi-line description of agent's purpose\n  Agent specializing in specific tasks\n\n# Optional instruction fields\nprompt: |                          # Freeform instructions (alternative to markdown body)\n  Your instructions here\n\n# Optional tool configuration\ntools:                             # List of allowed tools for this agent\n  - createFile\n  - editFiles\n  - codeSearch\n  - search\n\n# Optional path targeting (for .instructions.md files)\napplyTo:                          # Glob patterns for targeted files/directories\n  - \"src/frontend/**\"\n  - \"**/*.tsx\"\n\n# Optional MCP server configuration (enterprise/org only)\nmcp-server:                       # External MCP server configuration\n  url: https://my-mcp-server.com\n  api-key: ${{ secrets.MCPSERVER_API_KEY }}\n\n# Optional settings\nsettings:                         # Custom runtime or connection settings\n  key: value\n```\n\n## Field Descriptions\n\n### Core Fields\n\n#### name (string, required for agent profiles)\n- Unique identifier for the custom agent\n- Used to reference the agent in workflows or assignments\n- Convention: lowercase with hyphens (e.g., `readme-creator`, `test-writer`)\n\n#### description (string, optional)\n- Human-friendly description of the agent's focus and behavior\n- Helps users understand what the agent specializes in\n- Can be multi-line using YAML's `>` or `|` syntax\n\n#### prompt (string, optional)\n- Alternative to using the markdown body for instructions\n- Contains freeform natural language instructions\n- Use YAML's `|` (literal) or `>` (folded) for multi-line content\n- If both `prompt` and markdown body exist, they are typically combined\n\n### Tool Configuration\n\n#### tools (array of strings, optional)\n- List of tools the agent is allowed to use\n- If omitted or set to `[\"*\"]`, agent has access to all available tools\n- Tool names are **case-insensitive**\n- Supports both GitHub's standard tool aliases and legacy naming conventions\n\n**GitHub Standard Tool Aliases:**\n\nGitHub Copilot defines a standardized set of tool aliases for custom agents:\n\n- **`read`** - Access and read contents of files or code\n- **`edit`** - Make changes in code files, apply edits or refactoring\n- **`search`** - Search codebase for keywords, references, or patterns\n- **`pr`** - Create, manage, or update pull requests\n- **`issue`** - Create, manage, or update issues\n\n**Legacy Tool Names:**\n\nFor backward compatibility, these legacy tool names are still supported:\n\n- `createFile` - Create new files (use `edit` instead)\n- `editFiles` - Modify existing files (use `edit` instead)\n- `deleteFiles` - Remove files (use `edit` instead)\n- `codeSearch` - Semantic code search (use `search` instead)\n- `runCommand` - Execute shell commands\n- `getFile` - Read file contents (use `read` instead)\n- `listFiles` - List directory contents (use `read` instead)\n\n**MCP Server Tool Prefixes:**\n\nWhen using Model Context Protocol (MCP) servers, you can specify tools with server prefixes:\n- Single tool: `my-mcp-server/tool-name`\n- All tools from a server: `my-mcp-server/*`\n\n**Examples:**\n\n```yaml\n# Using standard tool aliases\ntools:\n  - read\n  - edit\n  - search\n\n# Enable all tools with wildcard\ntools: [\"*\"]\n\n# Using legacy names (still supported)\ntools:\n  - editFiles\n  - createFile\n  - search\n\n# Mixed standard and MCP server tools\ntools:\n  - read\n  - edit\n  - github-mcp/create_issue\n  - custom-mcp/*\n\n# Empty list disables all tools\ntools: []\n```\n\n### Path Targeting\n\n#### applyTo (array of strings, optional)\n- Only used in `.instructions.md` files\n- Specifies glob patterns for files/directories these instructions apply to\n- Supports wildcards: `*` (any characters), `**` (any directories)\n- Multiple patterns can be specified\n\n**Example:**\n```yaml\napplyTo:\n  - \"src/frontend/**/*.tsx\"\n  - \"src/frontend/**/*.ts\"\n  - \"components/**\"\n```\n\n### Enterprise Features\n\n#### mcp-server (object, optional)\n- Configuration for external MCP (Model Context Protocol) servers\n- Typically used in enterprise or organization settings\n- Allows integration with custom tools and services\n\n**Fields:**\n- `url` (string): MCP server endpoint\n- `api-key` (string): Authentication key (use GitHub secrets)\n\n**Example:**\n```yaml\nmcp-server:\n  url: https://internal-tools.company.com/mcp\n  api-key: ${{ secrets.INTERNAL_MCP_KEY }}\n```\n\n#### settings (object, optional)\n- Custom runtime or connection settings\n- Key-value pairs for agent-specific configuration\n- Format and available keys depend on the agent implementation\n\n## Usage Patterns\n\n### Pattern 1: Repository-wide Standards\n\n**File:** `.github/copilot-instructions.md`\n\n```markdown\ndescription: Repository-wide coding standards\n\n# Coding Standards\n\n## Style Guide\n- Use single quotes in JavaScript/TypeScript\n- Follow ESLint configuration in `.eslintrc.json`\n- Maximum line length: 100 characters\n\n## Security\n- Always set `httpOnly` and `secure` flags for cookies\n- Validate all user input\n- Use parameterized queries for database access\n\n## Testing\n- All new code must include Jest tests\n- Aim for >80% code coverage\n- Test edge cases and error conditions\n```\n\n### Pattern 2: Path-specific Instructions\n\n**File:** `.github/instructions/frontend.instructions.md`\n\n```markdown\ndescription: Frontend development guidelines\napplyTo:\n  - \"src/frontend/**\"\n  - \"components/**\"\n\n# Frontend Development Guidelines\n\n## Component Structure\n- Use React functional components with hooks\n- Prefer composition over inheritance\n- Keep components small and focused (< 150 lines)\n\n## Styling\n- Use CSS Modules for component styles\n- Follow BEM naming convention\n- Use Tailwind utility classes where appropriate\n\n## State Management\n- Use React Context for global state\n- Keep local state in components when possible\n- Use reducers for complex state logic\n```\n\n### Pattern 3: Custom Agent Profile\n\n**File:** `.github/agents/readme-creator.md`\n\n```markdown\nname: readme-creator\ndescription: Agent specializing in creating and improving README files\ntools:\n  - read\n  - edit\n  - search\n\n# README Creator Agent\n\nYou are a documentation specialist focused on creating clear, comprehensive README files.\n\n## Responsibilities\n- Create well-structured README.md files for projects\n- Include all standard sections: Overview, Installation, Usage, Contributing\n- Generate accurate code examples\n- Ensure documentation is up-to-date with codebase\n\n## Style Guidelines\n- Use clear, concise language\n- Include code examples with syntax highlighting\n- Add badges for build status, coverage, version\n- Organize with logical heading hierarchy\n- Include a table of contents for long READMEs\n\n## Quality Standards\n- Verify all code examples are accurate\n- Test installation instructions\n- Ensure links are valid and working\n- Check for proper Markdown formatting\n```\n\n### Pattern 4: Test Writer Agent\n\n**File:** `.github/agents/test-writer.md`\n\n```markdown\nname: test-writer\ndescription: Specialized agent for writing comprehensive test suites\ntools:\n  - read\n  - edit\n  - search\n\n# Test Writer Agent\n\nYou specialize in creating comprehensive, well-structured test suites.\n\n## Testing Framework\n- Use Jest for JavaScript/TypeScript\n- Follow AAA pattern: Arrange, Act, Assert\n- Use descriptive test names: \"should [expected behavior] when [condition]\"\n\n## Test Coverage\n- Write unit tests for all public functions\n- Create integration tests for API endpoints\n- Add edge case tests (null, undefined, empty, boundary values)\n- Test error conditions and exception handling\n\n## Test Organization\n- Group related tests with `describe` blocks\n- Use `beforeEach` and `afterEach` for setup/teardown\n- Keep tests independent and isolated\n- Mock external dependencies\n\n## Best Practices\n- One assertion per test when possible\n- Use test data builders for complex objects\n- Avoid test interdependence\n- Keep tests fast (< 1 second each)\n```\n\n### Pattern 5: Agentic Workflow Integration\n\n**File:** `.github/workflows/code-review.md`\n\n```markdown\non:\n  pull_request:\n    types: [opened, synchronize]\npermissions:\n  contents: read\n  pull-requests: write\nengine:\n  id: copilot\n  custom-agent: .github/agents/code-reviewer.md\n\n# Automated Code Review\n\nReview the pull request changes and provide constructive feedback.\n```\n\n**File:** `.github/agents/code-reviewer.md`\n\n```markdown\nname: code-reviewer\ndescription: Agent specialized in performing code reviews\ntools:\n  - read\n  - search\n\n# Code Review Agent\n\nYou are an experienced code reviewer focused on code quality, security, and best practices.\n\n## Review Checklist\n- Code follows repository style guidelines\n- Proper error handling is implemented\n- Security best practices are followed\n- Tests are included for new functionality\n- Documentation is updated where needed\n- No unnecessary complexity\n\n## Feedback Style\n- Be constructive and specific\n- Explain the reasoning behind suggestions\n- Prioritize issues (critical, important, minor)\n- Acknowledge good patterns and improvements\n- Provide code examples for suggestions\n```\n\n## Integration with gh-aw\n\nThe gh-aw (GitHub Agentic Workflows) tool supports custom agent files through the `imports` field in workflow frontmatter. Any markdown files under the `.github/agents/` directory are treated as custom agent files when imported.\n\n### Preferred way to install skills in workflows\n\nUse the `skills:` frontmatter field as the preferred way to install external skills for workflow runs. This installs skills during activation and persists them correctly between jobs. Use the top-level `plugins:` field the same way for agent plugins. Never add on-the-fly installation steps or ask the agent to install a skill or plugin from the prompt.\n\nUse `imports:` for workflow prompt/context files (including local custom agent files), not as the primary skill installation path.\n\n```markdown\non: pull_request\nengine:\n  id: copilot\nskills:\n  - mattpocock/skills/tdd@801dca688564c529fa84f247f64472520d9ebe28\nplugins:\n  - octo-org/agent-plugin@v1\nimports:\n  - .github/agents/code-reviewer.md\n\n# Workflow prompt\n```\n\n### Configuration\n\n```markdown\non: issues\nengine:\n  id: copilot\nimports:\n  - .github/agents/my-agent.md\n\n# My Workflow\n\nInstructions for the workflow...\n```\n\n### Supported Engines\n\nCustom agent files are supported by the following engines:\n\n1. **Copilot** - Uses `--agent <path>` flag to load custom agent file\n2. **Claude** - Prepends agent file content to the workflow prompt\n3. **Codex** - Prepends agent file content to the workflow prompt\n\n### File Path Resolution\n\n- Agent files are imported via the `imports` field\n- Must be markdown files located under `.github/agents/` directory\n- Only one agent file is allowed per workflow\n- File is validated during workflow compilation\n- Checkout step is automatically added if agent file is imported\n\n### Example Workflow with Custom Agent\n\n```markdown\non:\n  issues:\n    types: [opened]\npermissions:\n  contents: read\n  issues: write\nengine:\n  id: copilot\nimports:\n  - .github/agents/issue-triager.md\ntools:\n  github:\n    allowed:\n      - add_labels_to_issue\n      - create_issue_comment\n\n# Issue Triage Workflow\n\nAnalyze the issue and categorize it appropriately.\n```\n\n## Best Practices\n\n### 1. Keep Instructions Focused\n- Each agent should have a clear, specific purpose\n- Avoid mixing unrelated concerns in a single agent\n- Create multiple specialized agents rather than one general-purpose agent\n\n### 2. Be Explicit and Specific\n- Provide concrete examples of expected behavior\n- Define clear success criteria\n- Specify edge cases and error handling\n\n### 3. Use Appropriate Scoping\n- Repository-wide instructions for universal standards\n- Path-specific instructions for framework or directory-specific rules\n- Custom agents for task-specific workflows\n\n### 4. Test Agent Behavior\n- Verify agent follows instructions correctly\n- Test with various input scenarios\n- Iterate based on actual agent performance\n\n### 5. Maintain and Update\n- Keep instructions current with codebase changes\n- Review and refine based on agent performance\n- Remove outdated or conflicting instructions\n\n### 6. Security Considerations\n- Limit tool access to what's necessary\n- Be cautious with file deletion permissions\n- Use secrets for sensitive configuration\n- Review agent actions regularly\n\n## Common Patterns\n\n### Documentation Agent\n```yaml\nname: documentation-specialist\ndescription: Creates and maintains technical documentation\ntools: [read, edit, search]\n```\n\n### Refactoring Agent\n```yaml\nname: code-refactorer\ndescription: Improves code quality and structure\ntools: [read, edit, search]\n```\n\n### Security Auditor\n```yaml\nname: security-auditor\ndescription: Reviews code for security vulnerabilities\ntools: [read, search]\n```\n\n### Migration Assistant\n```yaml\nname: migration-helper\ndescription: Assists with framework or library migrations\ntools: [read, edit, search]\n```\n\n### Issue Management Agent\n```yaml\nname: issue-manager\ndescription: Manages GitHub issues and project tracking\ntools: [read, issue]\n```\n\n### Pull Request Assistant\n```yaml\nname: pr-assistant\ndescription: Assists with pull request creation and management\ntools: [read, edit, pr]\n```\n\n## Troubleshooting\n\n### Agent Not Following Instructions\n- Make instructions more explicit and specific\n- Provide concrete examples\n- Break down complex instructions into steps\n- Ensure instructions don't conflict\n\n### Tool Access Issues\n- Verify tools are listed in `tools` array\n- Check agent has necessary permissions\n- Ensure tools are available in the environment\n\n### Path Targeting Not Working\n- Verify glob patterns are correct\n- Check file paths match patterns\n- Ensure `applyTo` is only used in `.instructions.md` files\n\n### Custom Agent File Not Found\n- Verify agent file is imported in the `imports` field\n- Ensure file exists and is committed under `.github/agents/` directory\n- Confirm agent file path is correct in imports list\n- Remember: only one agent file is allowed per workflow\n\n## References\n\n- [GitHub Copilot Agent Filess Configuration](https://docs.github.com/en/copilot/reference/copilot-custom-agents-configuration) - Official reference for custom agent configuration including tool aliases\n- [GitHub Copilot Custom Instructions Documentation](https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions)\n- [About Custom Agents](https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-custom-agents)\n- [GitHub Blog: Custom Instructions Support](https://github.blog/changelog/2025-07-23-github-copilot-coding-agent-now-supports-instructions-md-custom-instructions/)\n- [GitHub Blog: AGENTS.md Support](https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/)\n\n## Examples in This Repository\n\nThe gh-aw repository uses custom agent files for performance engineering guides:\n\n- `.github/copilot/instructions/ci-performance.md` - CI/CD optimization\n- `.github/copilot/instructions/workflow-performance.md` - Workflow efficiency\n- `.github/copilot/instructions/build-performance.md` - Build optimization\n- `.github/copilot/instructions/cli-performance.md` - CLI performance\n\nThese files provide specialized guidance for performance engineering tasks and demonstrate the custom agent file format in practice.\n","frontmatter":{"name":"custom-agents","description":"Define and validate GitHub custom agent files, prompts, and examples."},"isInternal":false,"tokens":3844,"sizeBytes":17384},{"name":"SKILL.md","path":".github/skills/custom-engine-implementation/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/custom-engine-implementation/SKILL.md","title":"custom-engine-implementation","category":"anthropic-skill","format":"markdown","content":"---\nname: custom-engine-implementation\ndescription: Add and test declarative behavior-defined agentic engines in gh-aw, extending Go infrastructure only when necessary.\n---\n\n# Custom Engine Implementation\n\nUse this skill when adding a new agentic engine definition or extending the\nbehavior-defined engine infrastructure.\n\n## Choose the smallest implementation\n\nPrefer a shared Markdown engine definition. Installation, execution, MCP\nconfiguration, provider routing, caching, manifests, plugins, network defaults,\nharness scripts, and log parsing can already be declared through\n`engine.behaviors`.\n\nOnly change Go code when the engine needs a reusable behavior that the\ndeclarative model cannot express. Add a dedicated Go engine only when the\nshared behavior-defined runtime cannot run the engine at all.\n\n| Need | Implementation |\n|---|---|\n| Existing behaviors are sufficient | Add an imported shared engine definition |\n| A reusable declarative behavior is missing | Extend the definition model and behavior-defined runtime |\n| The shared runtime is fundamentally unsuitable | Add a dedicated Go engine and register it |\n\nThe relevant implementation is in:\n\n- `pkg/workflow/engine_definition.go` for the definition model and catalog\n- `pkg/workflow/behavior_defined_engine.go` for the shared runtime\n- `pkg/workflow/engine_definition_loader.go` for embedded built-in definitions\n- `pkg/workflow/agentic_engine.go` for dedicated Go engine registration\n- `pkg/parser/schemas/main_workflow_schema.json` for the workflow schema\n\n## Study representative engines\n\nRead the closest examples before making changes:\n\n- `.github/workflows/shared/opencode.md`: npm installation, merged\n  configuration, MCP, provider routing, and log parsing\n- `.github/workflows/shared/aider.md`: Python installation and a custom harness\n  without native MCP\n- `.github/workflows/shared/crush.md`: native MCP configuration adapter and\n  harness\n- `.github/workflows/shared/cursor.md`: plugin support\n- `.github/workflows/shared/deepseek-harness.md`: provider endpoint discovery\n  and a headless profile\n\nUse the examples to identify a pattern, not as a reason to copy optional\nbehaviors.\n\n## Add a shared engine definition\n\n1. Create `.github/workflows/shared/<engine>.md`.\n2. Declare `engine.id`, `display-name`, `description`, `experimental`, provider\n   metadata, authentication, and only the required `behaviors`.\n3. Pin a default CLI version. Make installation deterministic and provide a\n   verification command.\n4. Document setup, authentication, model syntax, MCP support, and limitations\n   in the Markdown body. Keep in-repository integrations clearly identified as\n   unsupported samples.\n5. Add the engine ID and shared definition path to\n   `.github/aw/engines.json`. Imported behavior-defined engines are registered\n   dynamically; do not add them to `NewEngineRegistry()`.\n6. Add `.github/workflows/smoke-<engine>.md`, following the closest existing\n   smoke workflow. Import the shared definition and exercise the capabilities\n   the engine claims to support.\n7. Update the unsupported sample table in\n   `docs/src/content/docs/reference/engines.md`.\n8. Add a changeset when the engine is a user-visible repository sample. New\n   experimental engines have precedent as a `minor` change.\n9. Run `make recompile` and include the generated smoke workflow\n   `.lock.yml`.\n\n`TestKnownEngineImportsFile_MatchesSharedEngineFiles` in\n`pkg/workflow/engine_definition_test.go` enforces catalog coverage for shared\nexternal engines.\n\n## Design the definition\n\nKeep the definition declarative and minimal:\n\n- Select the correct package manager, package name, binary name, version, and\n  verification command under `behaviors.installation`.\n- Put invocation arguments and non-secret environment variables under\n  `behaviors.execution`.\n- Use an existing secret strategy and provider environment mode where\n  possible.\n- Declare native MCP support only when the CLI can consume the generated\n  configuration. Otherwise use a harness or the gh-aw CLI proxy pattern.\n- Add only required default domains and map provider-specific domains under\n  `behaviors.network.provider-domains`.\n- Declare manifest files, cache paths, and plugin support only when the CLI\n  consumes them.\n- Add a log parser only when its emitted event format can be tested.\n\nTreat inline JavaScript in harnesses, configuration adapters, and log parsers\nas production code. Avoid shell interpolation, validate paths and child-process\narguments, preserve nonzero exit codes, and never print secret values. Enabling\npackage lifecycle scripts requires a pinned version and an explicit reason.\n\nFor log and error regular expressions, also load\n`.github/skills/error-pattern-safety/SKILL.md`.\n\n## Extend declarative infrastructure\n\nWhen an engine exposes a generally useful capability that existing behaviors\ncannot express:\n\n1. Add the smallest field to the types in\n   `pkg/workflow/engine_definition.go`.\n2. Validate and render it in the focused behavior-defined engine files.\n3. Update `pkg/parser/schemas/main_workflow_schema.json`.\n4. Add focused tests for parsing, validation, and rendered execution behavior.\n5. Run `make generate-schema-docs` when generated schema documentation changes.\n\nDo not add a schema field for a behavior that can be represented by existing\ninstallation, execution, environment, harness, or adapter fields.\n\nFor a dedicated Go runtime, implement the engine interfaces by composing the\nexisting helpers, keep engine-specific code in its own files, and register the\nengine in `pkg/workflow/agentic_engine.go`. Cover configuration, commands,\nenvironment, authentication, tools, logs, and failure handling with focused\ntests.\n\n## Test the right layers\n\nUse tests that match the changed behavior:\n\n| Area | Tests and examples |\n|---|---|\n| Harness, configuration, MCP, and environment | `behavior_defined_engine_harness_test.go` |\n| Log parsing | `behavior_defined_engine_log_parser_test.go` |\n| Cache behavior | `behavior_defined_engine_cache_test.go` |\n| Definitions, catalog, and known imports | `engine_definition_test.go`, `engine_catalog_test.go` |\n| Embedded definitions | `engine_definition_loader_test.go` |\n| Real shared workflow harness | `aider_workflow_test.go` |\n| Sandboxed CLI visibility | `cloud_hypervisor_test.go` |\n| Generated smoke workflows | `compiled_lock_files_test.go` |\n\nTest both definition parsing and the generated installation/execution steps.\nInclude negative cases for unsafe paths, invalid configuration, missing\ncredentials, or malformed logs when relevant.\n\n## Validate\n\nAfter Go changes:\n\n```bash\nmake build\nmake fmt\n```\n\nAfter workflow Markdown changes:\n\n```bash\nmake recompile\n```\n\nRun focused `go test` commands for the changed behavior while iterating. Before\nan intermediate progress report, run:\n\n```bash\nmake agent-report-progress-no-test\n```\n\nBefore the final progress report, run:\n\n```bash\nmake agent-report-progress\n```\n\nUse `make agent-finish` for the final repository validation when time allows.\nDo not trigger a smoke workflow from a Copilot cloud agent run.\n\n## Completion checklist\n\n- The declarative path was preferred unless its limitations are documented.\n- The engine definition uses a pinned, verified installation.\n- Authentication, provider/model handling, MCP, and network access are covered.\n- Harnesses and adapters do not expose secrets or interpolate untrusted input.\n- `.github/aw/engines.json`, smoke workflow, generated lock file,\n  documentation, and changeset are updated when applicable.\n- Focused tests cover parsing and rendered runtime behavior.\n- Repository validation passes.\n","frontmatter":{"name":"custom-engine-implementation","description":"Add and test declarative behavior-defined agentic engines in gh-aw, extending Go infrastructure only when necessary."},"isInternal":false,"tokens":1552,"sizeBytes":7625},{"name":"SKILL.md","path":".github/skills/debugging-workflows/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/debugging-workflows/SKILL.md","title":"debugging-workflows","category":"anthropic-skill","format":"markdown","content":"---\nname: debugging-workflows\ndescription: Diagnose gh-aw failures using the canonical debugging strategy and evidence reference.\n---\n\n# Workflow Debugging Router\n\nThis skill remains available for existing invocations. Load and follow\n[the evidence reference](../../aw/debug-workflow-evidence.md), where the\ninstructions now live. It delegates setup to\n[the bootstrap](../../aw/debug-bootstrap.md) and execution policy to\n[the shared strategy](../../aw/debug-agentic-workflow.md).\n\nUse a matching local guidance checkout. For Contents API reads, use the guidance\nowner/repository (`owner=github`, `repo=gh-aw` by default),\n`path=.github/aw/debug-workflow-evidence.md`, retaining the ref of this skill.\nThe other API paths are `.github/aw/debug-bootstrap.md` and\n`.github/aw/debug-agentic-workflow.md`. Normalize relative links against their\ncontaining file before API reads; `../../aw/...` is not an API path.\nFor default raw guidance, use `https://raw.githubusercontent.com/github/gh-aw/<guidance-ref>/`\nplus the repository-root-relative path, including `.github/`. Preserve supplied\nrefs containing slashes and keep guidance identity separate from the target\nworkflow repository/ref. The bootstrap documents size-aware reads and public\nraw fallback after API denial.\n\nRead the canonical instructions before running commands. This compatibility\nrouter defines no separate setup, review, or live-execution procedure.\n","frontmatter":{"name":"debugging-workflows","description":"Diagnose gh-aw failures using the canonical debugging strategy and evidence reference."},"isInternal":false,"tokens":298,"sizeBytes":1417},{"name":"SKILL.md","path":".github/skills/developer-code-organization/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-code-organization/SKILL.md","title":"developer-code-organization","category":"anthropic-skill","format":"markdown","content":"# developer-code-organization\n\nPath: `.github/skills/developer-code-organization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-code-organization/SKILL.md)","tokens":300,"sizeBytes":225},{"name":"SKILL.md","path":".github/skills/developer-internals/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-internals/SKILL.md","title":"developer-internals","category":"anthropic-skill","format":"markdown","content":"# developer-internals\n\nPath: `.github/skills/developer-internals/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-internals/SKILL.md)","tokens":300,"sizeBytes":201},{"name":"SKILL.md","path":".github/skills/developer-release/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-release/SKILL.md","title":"developer-release","category":"anthropic-skill","format":"markdown","content":"# developer-release\n\nPath: `.github/skills/developer-release/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-release/SKILL.md)","tokens":300,"sizeBytes":195},{"name":"SKILL.md","path":".github/skills/developer-security/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-security/SKILL.md","title":"developer-security","category":"anthropic-skill","format":"markdown","content":"# developer-security\n\nPath: `.github/skills/developer-security/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-security/SKILL.md)","tokens":300,"sizeBytes":198},{"name":"SKILL.md","path":".github/skills/developer/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer/SKILL.md","title":"developer","category":"anthropic-skill","format":"markdown","content":"# developer\n\nPath: `.github/skills/developer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer/SKILL.md)","tokens":300,"sizeBytes":171},{"name":"SKILL.md","path":".github/skills/docs-design/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/docs-design/SKILL.md","title":"docs-design","category":"anthropic-skill","format":"markdown","content":"# docs-design\n\nPath: `.github/skills/docs-design/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/docs-design/SKILL.md)","tokens":300,"sizeBytes":177},{"name":"SKILL.md","path":".github/skills/documentation/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/documentation/SKILL.md","title":"documentation","category":"anthropic-skill","format":"markdown","content":"# documentation\n\nPath: `.github/skills/documentation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/documentation/SKILL.md)","tokens":300,"sizeBytes":183},{"name":"SKILL.md","path":".github/skills/error-messages/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-messages/SKILL.md","title":"error-messages","category":"anthropic-skill","format":"markdown","content":"# error-messages\n\nPath: `.github/skills/error-messages/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-messages/SKILL.md)","tokens":300,"sizeBytes":186},{"name":"ssl.json","path":".github/skills/error-messages/ssl.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-messages/ssl.json","title":"Error-messages Skill","category":"anthropic-skill","format":"json","content":"# Error-messages Skill\n\nPath: `.github/skills/error-messages/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-messages/ssl.json)","tokens":300,"sizeBytes":192},{"name":"SKILL.md","path":".github/skills/error-pattern-safety/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-pattern-safety/SKILL.md","title":"error-pattern-safety","category":"anthropic-skill","format":"markdown","content":"# error-pattern-safety\n\nPath: `.github/skills/error-pattern-safety/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-pattern-safety/SKILL.md)","tokens":300,"sizeBytes":204},{"name":"SKILL.md","path":".github/skills/error-recovery-patterns/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-recovery-patterns/SKILL.md","title":"error-recovery-patterns","category":"anthropic-skill","format":"markdown","content":"# error-recovery-patterns\n\nPath: `.github/skills/error-recovery-patterns/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/error-recovery-patterns/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".github/skills/gh-agent-session/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/gh-agent-session/SKILL.md","title":"gh-agent-session","category":"anthropic-skill","format":"markdown","content":"# gh-agent-session\n\nPath: `.github/skills/gh-agent-session/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/gh-agent-session/SKILL.md)","tokens":300,"sizeBytes":192},{"name":"SKILL.md","path":".github/skills/gh-agent-task/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/gh-agent-task/SKILL.md","title":"gh-agent-task","category":"anthropic-skill","format":"markdown","content":"# gh-agent-task\n\nPath: `.github/skills/gh-agent-task/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/gh-agent-task/SKILL.md)","tokens":300,"sizeBytes":183},{"name":"SKILL.md","path":".github/skills/github-copilot-agent-tips-and-tricks/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-copilot-agent-tips-and-tricks/SKILL.md","title":"github-copilot-agent-tips-and-tricks","category":"anthropic-skill","format":"markdown","content":"# github-copilot-agent-tips-and-tricks\n\nPath: `.github/skills/github-copilot-agent-tips-and-tricks/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-copilot-agent-tips-and-tricks/SKILL.md)","tokens":300,"sizeBytes":252},{"name":"SKILL.md","path":".github/skills/github-discussion-query/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-discussion-query/SKILL.md","title":"github-discussion-query","category":"anthropic-skill","format":"markdown","content":"# github-discussion-query\n\nPath: `.github/skills/github-discussion-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-discussion-query/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".github/skills/github-issue-query/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-issue-query/SKILL.md","title":"github-issue-query","category":"anthropic-skill","format":"markdown","content":"# github-issue-query\n\nPath: `.github/skills/github-issue-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-issue-query/SKILL.md)","tokens":300,"sizeBytes":198},{"name":"SKILL.md","path":".github/skills/github-labels-query/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-labels-query/SKILL.md","title":"github-labels-query","category":"anthropic-skill","format":"markdown","content":"# github-labels-query\n\nPath: `.github/skills/github-labels-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-labels-query/SKILL.md)","tokens":300,"sizeBytes":201},{"name":"SKILL.md","path":".github/skills/github-mcp-server/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-mcp-server/SKILL.md","title":"github-mcp-server","category":"anthropic-skill","format":"markdown","content":"# github-mcp-server\n\nPath: `.github/skills/github-mcp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-mcp-server/SKILL.md)","tokens":300,"sizeBytes":195},{"name":"SKILL.md","path":".github/skills/github-pr-query/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-pr-query/SKILL.md","title":"github-pr-query","category":"anthropic-skill","format":"markdown","content":"# github-pr-query\n\nPath: `.github/skills/github-pr-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-pr-query/SKILL.md)","tokens":300,"sizeBytes":189},{"name":"SKILL.md","path":".github/skills/github-script/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-script/SKILL.md","title":"github-script","category":"anthropic-skill","format":"markdown","content":"# github-script\n\nPath: `.github/skills/github-script/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-script/SKILL.md)","tokens":300,"sizeBytes":183},{"name":"SKILL.md","path":".github/skills/github-workflows-query/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-workflows-query/SKILL.md","title":"github-workflows-query","category":"anthropic-skill","format":"markdown","content":"# github-workflows-query\n\nPath: `.github/skills/github-workflows-query/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/github-workflows-query/SKILL.md)","tokens":300,"sizeBytes":210},{"name":"SKILL.md","path":".github/skills/go-codemod/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/go-codemod/SKILL.md","title":"go-codemod","category":"anthropic-skill","format":"markdown","content":"# go-codemod\n\nPath: `.github/skills/go-codemod/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/go-codemod/SKILL.md)","tokens":300,"sizeBytes":174},{"name":"SKILL.md","path":".github/skills/go-linters/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/go-linters/SKILL.md","title":"go-linters","category":"anthropic-skill","format":"markdown","content":"# go-linters\n\nPath: `.github/skills/go-linters/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/go-linters/SKILL.md)","tokens":300,"sizeBytes":174},{"name":"SKILL.md","path":".github/skills/http-mcp-headers/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/http-mcp-headers/SKILL.md","title":"http-mcp-headers","category":"anthropic-skill","format":"markdown","content":"# http-mcp-headers\n\nPath: `.github/skills/http-mcp-headers/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/http-mcp-headers/SKILL.md)","tokens":300,"sizeBytes":192},{"name":"SKILL.md","path":".github/skills/issue-markdown/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/issue-markdown/SKILL.md","title":"issue-markdown","category":"anthropic-skill","format":"markdown","content":"# issue-markdown\n\nPath: `.github/skills/issue-markdown/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/issue-markdown/SKILL.md)","tokens":300,"sizeBytes":186},{"name":"SKILL.md","path":".github/skills/javascript-refactoring/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/javascript-refactoring/SKILL.md","title":"javascript-refactoring","category":"anthropic-skill","format":"markdown","content":"# javascript-refactoring\n\nPath: `.github/skills/javascript-refactoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/javascript-refactoring/SKILL.md)","tokens":300,"sizeBytes":210},{"name":"SKILL.md","path":".github/skills/jqschema/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/jqschema/SKILL.md","title":"jqschema","category":"anthropic-skill","format":"markdown","content":"# jqschema\n\nPath: `.github/skills/jqschema/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/jqschema/SKILL.md)","tokens":300,"sizeBytes":168},{"name":"ssl.json","path":".github/skills/jqschema/ssl.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/jqschema/ssl.json","title":"Jqschema Skill","category":"anthropic-skill","format":"json","content":"# Jqschema Skill\n\nPath: `.github/skills/jqschema/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/jqschema/ssl.json)","tokens":300,"sizeBytes":174},{"name":"SKILL.md","path":".github/skills/messages/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/messages/SKILL.md","title":"messages","category":"anthropic-skill","format":"markdown","content":"# messages\n\nPath: `.github/skills/messages/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/messages/SKILL.md)","tokens":300,"sizeBytes":168},{"name":"SKILL.md","path":".github/skills/model-routing-golden/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/model-routing-golden/SKILL.md","title":"model-routing-golden","category":"anthropic-skill","format":"markdown","content":"# model-routing-golden\n\nPath: `.github/skills/model-routing-golden/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/model-routing-golden/SKILL.md)","tokens":300,"sizeBytes":204},{"name":"SKILL.md","path":".github/skills/npm/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/npm/SKILL.md","title":"npm","category":"anthropic-skill","format":"markdown","content":"# npm\n\nPath: `.github/skills/npm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/npm/SKILL.md)","tokens":300,"sizeBytes":153},{"name":"SKILL.md","path":".github/skills/open-pull-request/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/open-pull-request/SKILL.md","title":"open-pull-request","category":"anthropic-skill","format":"markdown","content":"# open-pull-request\n\nPath: `.github/skills/open-pull-request/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/open-pull-request/SKILL.md)","tokens":300,"sizeBytes":195},{"name":"SKILL.md","path":".github/skills/operational-value-designer/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/operational-value-designer/SKILL.md","title":"operational-value-designer","category":"anthropic-skill","format":"markdown","content":"# operational-value-designer\n\nPath: `.github/skills/operational-value-designer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/operational-value-designer/SKILL.md)","tokens":300,"sizeBytes":222},{"name":"SKILL.md","path":".github/skills/optimize-agentic-workflow/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/optimize-agentic-workflow/SKILL.md","title":"optimize-agentic-workflow","category":"anthropic-skill","format":"markdown","content":"# optimize-agentic-workflow\n\nPath: `.github/skills/optimize-agentic-workflow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/optimize-agentic-workflow/SKILL.md)","tokens":300,"sizeBytes":219},{"name":"SKILL.md","path":".github/skills/otel-queries/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/otel-queries/SKILL.md","title":"otel-queries","category":"anthropic-skill","format":"markdown","content":"# otel-queries\n\nPath: `.github/skills/otel-queries/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/otel-queries/SKILL.md)","tokens":300,"sizeBytes":180},{"name":"SKILL.md","path":".github/skills/pr-finisher/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/pr-finisher/SKILL.md","title":"pr-finisher","category":"anthropic-skill","format":"markdown","content":"# pr-finisher\n\nPath: `.github/skills/pr-finisher/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/pr-finisher/SKILL.md)","tokens":300,"sizeBytes":177},{"name":"SKILL.md","path":".github/skills/pr-to-go-linter/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/pr-to-go-linter/SKILL.md","title":"pr-to-go-linter","category":"anthropic-skill","format":"markdown","content":"# pr-to-go-linter\n\nPath: `.github/skills/pr-to-go-linter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/pr-to-go-linter/SKILL.md)","tokens":300,"sizeBytes":189},{"name":"SKILL.md","path":".github/skills/prompt-token-efficiency/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/prompt-token-efficiency/SKILL.md","title":"prompt-token-efficiency","category":"anthropic-skill","format":"markdown","content":"# prompt-token-efficiency\n\nPath: `.github/skills/prompt-token-efficiency/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/prompt-token-efficiency/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".github/skills/reporting/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/reporting/SKILL.md","title":"reporting","category":"anthropic-skill","format":"markdown","content":"# reporting\n\nPath: `.github/skills/reporting/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/reporting/SKILL.md)","tokens":300,"sizeBytes":171},{"name":"ssl.json","path":".github/skills/reporting/ssl.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/reporting/ssl.json","title":"Reporting Skill","category":"anthropic-skill","format":"json","content":"# Reporting Skill\n\nPath: `.github/skills/reporting/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/reporting/ssl.json)","tokens":300,"sizeBytes":177},{"name":"SKILL.md","path":".github/skills/resolve-merge-conflicts/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/resolve-merge-conflicts/SKILL.md","title":"resolve-merge-conflicts","category":"anthropic-skill","format":"markdown","content":"# resolve-merge-conflicts\n\nPath: `.github/skills/resolve-merge-conflicts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/resolve-merge-conflicts/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".github/skills/restricted-tool-triage/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/restricted-tool-triage/SKILL.md","title":"restricted-tool-triage","category":"anthropic-skill","format":"markdown","content":"# restricted-tool-triage\n\nPath: `.github/skills/restricted-tool-triage/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/restricted-tool-triage/SKILL.md)","tokens":300,"sizeBytes":210},{"name":"SKILL.md","path":".github/skills/review-agentic-workflows/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/review-agentic-workflows/SKILL.md","title":"review-agentic-workflows","category":"anthropic-skill","format":"markdown","content":"# review-agentic-workflows\n\nPath: `.github/skills/review-agentic-workflows/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/review-agentic-workflows/SKILL.md)","tokens":300,"sizeBytes":216},{"name":"SKILL.md","path":".github/skills/security-advisory-compat-enforcer/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/security-advisory-compat-enforcer/SKILL.md","title":"security-advisory-compat-enforcer","category":"anthropic-skill","format":"markdown","content":"# security-advisory-compat-enforcer\n\nPath: `.github/skills/security-advisory-compat-enforcer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/security-advisory-compat-enforcer/SKILL.md)","tokens":300,"sizeBytes":243},{"name":"SKILL.md","path":".github/skills/sergo-examples/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/sergo-examples/SKILL.md","title":"sergo-examples","category":"anthropic-skill","format":"markdown","content":"# sergo-examples\n\nPath: `.github/skills/sergo-examples/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/sergo-examples/SKILL.md)","tokens":300,"sizeBytes":186},{"name":"SKILL.md","path":".github/skills/skillz-integration/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/skillz-integration/SKILL.md","title":"skillz-integration","category":"anthropic-skill","format":"markdown","content":"# skillz-integration\n\nPath: `.github/skills/skillz-integration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/skillz-integration/SKILL.md)","tokens":300,"sizeBytes":198},{"name":"SKILL.md","path":".github/skills/ssl/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/ssl/SKILL.md","title":"ssl","category":"anthropic-skill","format":"markdown","content":"# ssl\n\nPath: `.github/skills/ssl/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/ssl/SKILL.md)","tokens":300,"sizeBytes":153},{"name":"ssl.json","path":".github/skills/ssl/ssl.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/ssl/ssl.json","title":"Ssl Skill","category":"anthropic-skill","format":"json","content":"# Ssl Skill\n\nPath: `.github/skills/ssl/ssl.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/ssl/ssl.json)","tokens":300,"sizeBytes":159},{"name":"example.json","path":".github/skills/statistics-infographic/examples/example.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/examples/example.json","title":"Examples Skill","category":"anthropic-skill","format":"json","content":"# Examples Skill\n\nPath: `.github/skills/statistics-infographic/examples/example.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/examples/example.json)","tokens":300,"sizeBytes":228},{"name":"data-contract.md","path":".github/skills/statistics-infographic/references/data-contract.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/references/data-contract.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.github/skills/statistics-infographic/references/data-contract.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/references/data-contract.md)","tokens":300,"sizeBytes":242},{"name":"SKILL.md","path":".github/skills/statistics-infographic/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/SKILL.md","title":"statistics-infographic","category":"anthropic-skill","format":"markdown","content":"# statistics-infographic\n\nPath: `.github/skills/statistics-infographic/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/statistics-infographic/SKILL.md)","tokens":300,"sizeBytes":210},{"name":"SKILL.md","path":".github/skills/temporary-id-safe-output/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/temporary-id-safe-output/SKILL.md","title":"temporary-id-safe-output","category":"anthropic-skill","format":"markdown","content":"# temporary-id-safe-output\n\nPath: `.github/skills/temporary-id-safe-output/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/temporary-id-safe-output/SKILL.md)","tokens":300,"sizeBytes":216},{"name":"SKILL.md","path":".github/skills/workflow-step-summaries/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/workflow-step-summaries/SKILL.md","title":"workflow-step-summaries","category":"anthropic-skill","format":"markdown","content":"# workflow-step-summaries\n\nPath: `.github/skills/workflow-step-summaries/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/workflow-step-summaries/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"skill.md","path":".squad/templates/skill.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skill.md","title":"{skill-name}","category":"anthropic-skill","format":"markdown","content":"---\nname: \"{skill-name}\"\ndescription: \"{what this skill teaches agents}\"\ndomain: \"{e.g., testing, api-design, error-handling}\"\nconfidence: \"low|medium|high\"\nsource: \"{how this was learned: manual, observed, earned}\"\ntools:\n  # Optional — declare MCP tools relevant to this skill's patterns\n  # - name: \"{tool-name}\"\n  #   description: \"{what this tool does}\"\n  #   when: \"{when to use this tool}\"\n---\n\n## Context\n{When and why this skill applies}\n\n## Patterns\n{Specific patterns, conventions, or approaches}\n\n## Examples\n{Code examples or references}\n\n## Anti-Patterns\n{What to avoid}\n","frontmatter":{"name":"{skill-name}","description":"{what this skill teaches agents}","domain":"{e.g., testing, api-design, error-handling}","confidence":"low|medium|high","source":"{how this was learned: manual, observed, earned}","tools":null},"isInternal":false,"tokens":146,"sizeBytes":587},{"name":"SKILL.md","path":".squad/templates/skills/agent-collaboration/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/agent-collaboration/SKILL.md","title":"agent-collaboration","category":"anthropic-skill","format":"markdown","content":"# agent-collaboration\n\nPath: `.squad/templates/skills/agent-collaboration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/agent-collaboration/SKILL.md)","tokens":300,"sizeBytes":219},{"name":"SKILL.md","path":".squad/templates/skills/agent-conduct/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/agent-conduct/SKILL.md","title":"agent-conduct","category":"anthropic-skill","format":"markdown","content":"# agent-conduct\n\nPath: `.squad/templates/skills/agent-conduct/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/agent-conduct/SKILL.md)","tokens":300,"sizeBytes":201},{"name":"SKILL.md","path":".squad/templates/skills/architectural-proposals/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/architectural-proposals/SKILL.md","title":"architectural-proposals","category":"anthropic-skill","format":"markdown","content":"# architectural-proposals\n\nPath: `.squad/templates/skills/architectural-proposals/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/architectural-proposals/SKILL.md)","tokens":300,"sizeBytes":231},{"name":"SKILL.md","path":".squad/templates/skills/ci-validation-gates/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/ci-validation-gates/SKILL.md","title":"ci-validation-gates","category":"anthropic-skill","format":"markdown","content":"# ci-validation-gates\n\nPath: `.squad/templates/skills/ci-validation-gates/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/ci-validation-gates/SKILL.md)","tokens":300,"sizeBytes":219},{"name":"SKILL.md","path":".squad/templates/skills/cli-wiring/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cli-wiring/SKILL.md","title":"cli-wiring","category":"anthropic-skill","format":"markdown","content":"# cli-wiring\n\nPath: `.squad/templates/skills/cli-wiring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cli-wiring/SKILL.md)","tokens":300,"sizeBytes":192},{"name":"SKILL.md","path":".squad/templates/skills/client-compatibility/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/client-compatibility/SKILL.md","title":"client-compatibility","category":"anthropic-skill","format":"markdown","content":"# client-compatibility\n\nPath: `.squad/templates/skills/client-compatibility/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/client-compatibility/SKILL.md)","tokens":300,"sizeBytes":222},{"name":"SKILL.md","path":".squad/templates/skills/coordinator-init-mode/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-init-mode/SKILL.md","title":"coordinator-init-mode","category":"anthropic-skill","format":"markdown","content":"# coordinator-init-mode\n\nPath: `.squad/templates/skills/coordinator-init-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-init-mode/SKILL.md)","tokens":300,"sizeBytes":225},{"name":"SKILL.md","path":".squad/templates/skills/coordinator-response-mode/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-response-mode/SKILL.md","title":"coordinator-response-mode","category":"anthropic-skill","format":"markdown","content":"# coordinator-response-mode\n\nPath: `.squad/templates/skills/coordinator-response-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-response-mode/SKILL.md)","tokens":300,"sizeBytes":237},{"name":"SKILL.md","path":".squad/templates/skills/coordinator-source-of-truth/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-source-of-truth/SKILL.md","title":"coordinator-source-of-truth","category":"anthropic-skill","format":"markdown","content":"# coordinator-source-of-truth\n\nPath: `.squad/templates/skills/coordinator-source-of-truth/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/coordinator-source-of-truth/SKILL.md)","tokens":300,"sizeBytes":243},{"name":"SKILL.md","path":".squad/templates/skills/cross-machine-coordination/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-machine-coordination/SKILL.md","title":"cross-machine-coordination","category":"anthropic-skill","format":"markdown","content":"# cross-machine-coordination\n\nPath: `.squad/templates/skills/cross-machine-coordination/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-machine-coordination/SKILL.md)","tokens":300,"sizeBytes":240},{"name":"SKILL.md","path":".squad/templates/skills/cross-squad-communication/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-squad-communication/SKILL.md","title":"cross-squad-communication","category":"anthropic-skill","format":"markdown","content":"# cross-squad-communication\n\nPath: `.squad/templates/skills/cross-squad-communication/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-squad-communication/SKILL.md)","tokens":300,"sizeBytes":237},{"name":"SKILL.md","path":".squad/templates/skills/cross-squad/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-squad/SKILL.md","title":"cross-squad","category":"anthropic-skill","format":"markdown","content":"# cross-squad\n\nPath: `.squad/templates/skills/cross-squad/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/cross-squad/SKILL.md)","tokens":300,"sizeBytes":195},{"name":"SKILL.md","path":".squad/templates/skills/distributed-mesh/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/distributed-mesh/SKILL.md","title":"distributed-mesh","category":"anthropic-skill","format":"markdown","content":"# distributed-mesh\n\nPath: `.squad/templates/skills/distributed-mesh/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/distributed-mesh/SKILL.md)","tokens":300,"sizeBytes":210},{"name":"SKILL.md","path":".squad/templates/skills/docs-standards/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/docs-standards/SKILL.md","title":"docs-standards","category":"anthropic-skill","format":"markdown","content":"# docs-standards\n\nPath: `.squad/templates/skills/docs-standards/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/docs-standards/SKILL.md)","tokens":300,"sizeBytes":204},{"name":"SKILL.md","path":".squad/templates/skills/e2e-template-testing/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/e2e-template-testing/SKILL.md","title":"e2e-template-testing","category":"anthropic-skill","format":"markdown","content":"# e2e-template-testing\n\nPath: `.squad/templates/skills/e2e-template-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/e2e-template-testing/SKILL.md)","tokens":300,"sizeBytes":222},{"name":"SKILL.md","path":".squad/templates/skills/economy-mode/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/economy-mode/SKILL.md","title":"economy-mode","category":"anthropic-skill","format":"markdown","content":"# economy-mode\n\nPath: `.squad/templates/skills/economy-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/economy-mode/SKILL.md)","tokens":300,"sizeBytes":198},{"name":"SKILL.md","path":".squad/templates/skills/error-recovery/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/error-recovery/SKILL.md","title":"error-recovery","category":"anthropic-skill","format":"markdown","content":"# error-recovery\n\nPath: `.squad/templates/skills/error-recovery/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/error-recovery/SKILL.md)","tokens":300,"sizeBytes":204},{"name":"SKILL.md","path":".squad/templates/skills/external-comms/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/external-comms/SKILL.md","title":"external-comms","category":"anthropic-skill","format":"markdown","content":"# external-comms\n\nPath: `.squad/templates/skills/external-comms/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/external-comms/SKILL.md)","tokens":300,"sizeBytes":204},{"name":"SKILL.md","path":".squad/templates/skills/fact-checking/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/fact-checking/SKILL.md","title":"fact-checking","category":"anthropic-skill","format":"markdown","content":"# fact-checking\n\nPath: `.squad/templates/skills/fact-checking/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/fact-checking/SKILL.md)","tokens":300,"sizeBytes":201},{"name":"SKILL.md","path":".squad/templates/skills/gh-auth-isolation/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/gh-auth-isolation/SKILL.md","title":"gh-auth-isolation","category":"anthropic-skill","format":"markdown","content":"# gh-auth-isolation\n\nPath: `.squad/templates/skills/gh-auth-isolation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/gh-auth-isolation/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".squad/templates/skills/git-workflow/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/git-workflow/SKILL.md","title":"git-workflow","category":"anthropic-skill","format":"markdown","content":"# git-workflow\n\nPath: `.squad/templates/skills/git-workflow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/git-workflow/SKILL.md)","tokens":300,"sizeBytes":198},{"name":"SKILL.md","path":".squad/templates/skills/github-multi-account/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/github-multi-account/SKILL.md","title":"github-multi-account","category":"anthropic-skill","format":"markdown","content":"# github-multi-account\n\nPath: `.squad/templates/skills/github-multi-account/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/github-multi-account/SKILL.md)","tokens":300,"sizeBytes":222},{"name":"SKILL.md","path":".squad/templates/skills/history-hygiene/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/history-hygiene/SKILL.md","title":"history-hygiene","category":"anthropic-skill","format":"markdown","content":"# history-hygiene\n\nPath: `.squad/templates/skills/history-hygiene/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/history-hygiene/SKILL.md)","tokens":300,"sizeBytes":207},{"name":"SKILL.md","path":".squad/templates/skills/humanizer/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/humanizer/SKILL.md","title":"humanizer","category":"anthropic-skill","format":"markdown","content":"# humanizer\n\nPath: `.squad/templates/skills/humanizer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/humanizer/SKILL.md)","tokens":300,"sizeBytes":189},{"name":"SKILL.md","path":".squad/templates/skills/init-mode/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/init-mode/SKILL.md","title":"init-mode","category":"anthropic-skill","format":"markdown","content":"# init-mode\n\nPath: `.squad/templates/skills/init-mode/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/init-mode/SKILL.md)","tokens":300,"sizeBytes":189},{"name":"SKILL.md","path":".squad/templates/skills/iterative-retrieval/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/iterative-retrieval/SKILL.md","title":"iterative-retrieval","category":"anthropic-skill","format":"markdown","content":"# iterative-retrieval\n\nPath: `.squad/templates/skills/iterative-retrieval/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/iterative-retrieval/SKILL.md)","tokens":300,"sizeBytes":219},{"name":"SKILL.md","path":".squad/templates/skills/model-selection/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/model-selection/SKILL.md","title":"model-selection","category":"anthropic-skill","format":"markdown","content":"# model-selection\n\nPath: `.squad/templates/skills/model-selection/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/model-selection/SKILL.md)","tokens":300,"sizeBytes":207},{"name":"SKILL.md","path":".squad/templates/skills/nap/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/nap/SKILL.md","title":"nap","category":"anthropic-skill","format":"markdown","content":"# nap\n\nPath: `.squad/templates/skills/nap/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/nap/SKILL.md)","tokens":300,"sizeBytes":171},{"name":"SKILL.md","path":".squad/templates/skills/notification-routing/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/notification-routing/SKILL.md","title":"notification-routing","category":"anthropic-skill","format":"markdown","content":"# notification-routing\n\nPath: `.squad/templates/skills/notification-routing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/notification-routing/SKILL.md)","tokens":300,"sizeBytes":222},{"name":"SKILL.md","path":".squad/templates/skills/personal-squad/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/personal-squad/SKILL.md","title":"personal-squad","category":"anthropic-skill","format":"markdown","content":"# personal-squad\n\nPath: `.squad/templates/skills/personal-squad/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/personal-squad/SKILL.md)","tokens":300,"sizeBytes":204},{"name":"SKILL.md","path":".squad/templates/skills/pr-review-response/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/pr-review-response/SKILL.md","title":"pr-review-response","category":"anthropic-skill","format":"markdown","content":"# pr-review-response\n\nPath: `.squad/templates/skills/pr-review-response/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/pr-review-response/SKILL.md)","tokens":300,"sizeBytes":216},{"name":"SKILL.md","path":".squad/templates/skills/pr-screenshots/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/pr-screenshots/SKILL.md","title":"pr-screenshots","category":"anthropic-skill","format":"markdown","content":"# pr-screenshots\n\nPath: `.squad/templates/skills/pr-screenshots/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/pr-screenshots/SKILL.md)","tokens":300,"sizeBytes":204},{"name":"SKILL.md","path":".squad/templates/skills/project-conventions/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/project-conventions/SKILL.md","title":"project-conventions","category":"anthropic-skill","format":"markdown","content":"# project-conventions\n\nPath: `.squad/templates/skills/project-conventions/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/project-conventions/SKILL.md)","tokens":300,"sizeBytes":219},{"name":"SKILL.md","path":".squad/templates/skills/ralph-two-pass-scan/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/ralph-two-pass-scan/SKILL.md","title":"ralph-two-pass-scan","category":"anthropic-skill","format":"markdown","content":"# ralph-two-pass-scan\n\nPath: `.squad/templates/skills/ralph-two-pass-scan/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/ralph-two-pass-scan/SKILL.md)","tokens":300,"sizeBytes":219},{"name":"SKILL.md","path":".squad/templates/skills/reflect/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reflect/SKILL.md","title":"reflect","category":"anthropic-skill","format":"markdown","content":"# reflect\n\nPath: `.squad/templates/skills/reflect/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reflect/SKILL.md)","tokens":300,"sizeBytes":183},{"name":"SKILL.md","path":".squad/templates/skills/release-process/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/release-process/SKILL.md","title":"release-process","category":"anthropic-skill","format":"markdown","content":"# release-process\n\nPath: `.squad/templates/skills/release-process/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/release-process/SKILL.md)","tokens":300,"sizeBytes":207},{"name":"SKILL.md","path":".squad/templates/skills/reskill/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reskill/SKILL.md","title":"reskill","category":"anthropic-skill","format":"markdown","content":"# reskill\n\nPath: `.squad/templates/skills/reskill/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reskill/SKILL.md)","tokens":300,"sizeBytes":183},{"name":"SKILL.md","path":".squad/templates/skills/retro-enforcement/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/retro-enforcement/SKILL.md","title":"retro-enforcement","category":"anthropic-skill","format":"markdown","content":"# retro-enforcement\n\nPath: `.squad/templates/skills/retro-enforcement/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/retro-enforcement/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".squad/templates/skills/reviewer-protocol/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reviewer-protocol/SKILL.md","title":"reviewer-protocol","category":"anthropic-skill","format":"markdown","content":"# reviewer-protocol\n\nPath: `.squad/templates/skills/reviewer-protocol/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/reviewer-protocol/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".squad/templates/skills/secret-handling/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/secret-handling/SKILL.md","title":"secret-handling","category":"anthropic-skill","format":"markdown","content":"# secret-handling\n\nPath: `.squad/templates/skills/secret-handling/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/secret-handling/SKILL.md)","tokens":300,"sizeBytes":207},{"name":"SKILL.md","path":".squad/templates/skills/session-recovery/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/session-recovery/SKILL.md","title":"session-recovery","category":"anthropic-skill","format":"markdown","content":"# session-recovery\n\nPath: `.squad/templates/skills/session-recovery/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/session-recovery/SKILL.md)","tokens":300,"sizeBytes":210},{"name":"SKILL.md","path":".squad/templates/skills/squad-commands/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-commands/SKILL.md","title":"squad-commands","category":"anthropic-skill","format":"markdown","content":"# squad-commands\n\nPath: `.squad/templates/skills/squad-commands/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-commands/SKILL.md)","tokens":300,"sizeBytes":204},{"name":"SKILL.md","path":".squad/templates/skills/squad-conventions/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-conventions/SKILL.md","title":"squad-conventions","category":"anthropic-skill","format":"markdown","content":"# squad-conventions\n\nPath: `.squad/templates/skills/squad-conventions/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-conventions/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".squad/templates/skills/squad-help/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-help/SKILL.md","title":"squad-help","category":"anthropic-skill","format":"markdown","content":"# squad-help\n\nPath: `.squad/templates/skills/squad-help/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-help/SKILL.md)","tokens":300,"sizeBytes":192},{"name":"SKILL.md","path":".squad/templates/skills/squad-version-check/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-version-check/SKILL.md","title":"squad-version-check","category":"anthropic-skill","format":"markdown","content":"# squad-version-check\n\nPath: `.squad/templates/skills/squad-version-check/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad-version-check/SKILL.md)","tokens":300,"sizeBytes":219},{"name":"SKILL.md","path":".squad/templates/skills/squad/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad/SKILL.md","title":"squad","category":"anthropic-skill","format":"markdown","content":"# squad\n\nPath: `.squad/templates/skills/squad/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/squad/SKILL.md)","tokens":300,"sizeBytes":177},{"name":"SKILL.md","path":".squad/templates/skills/test-discipline/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/test-discipline/SKILL.md","title":"test-discipline","category":"anthropic-skill","format":"markdown","content":"# test-discipline\n\nPath: `.squad/templates/skills/test-discipline/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/test-discipline/SKILL.md)","tokens":300,"sizeBytes":207},{"name":"SKILL.md","path":".squad/templates/skills/tiered-memory/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/tiered-memory/SKILL.md","title":"tiered-memory","category":"anthropic-skill","format":"markdown","content":"# tiered-memory\n\nPath: `.squad/templates/skills/tiered-memory/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/tiered-memory/SKILL.md)","tokens":300,"sizeBytes":201},{"name":"SKILL.md","path":".squad/templates/skills/versioning-policy/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/versioning-policy/SKILL.md","title":"versioning-policy","category":"anthropic-skill","format":"markdown","content":"# versioning-policy\n\nPath: `.squad/templates/skills/versioning-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/versioning-policy/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".squad/templates/skills/windows-compatibility/SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/windows-compatibility/SKILL.md","title":"windows-compatibility","category":"anthropic-skill","format":"markdown","content":"# windows-compatibility\n\nPath: `.squad/templates/skills/windows-compatibility/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/skills/windows-compatibility/SKILL.md)","tokens":300,"sizeBytes":225},{"name":"runs.json","path":"actions/setup/js/fixtures/evals/runs.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/evals/runs.json","title":"Evals Skill","category":"anthropic-skill","format":"json","content":"# Evals Skill\n\nPath: `actions/setup/js/fixtures/evals/runs.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/evals/runs.json)","tokens":300,"sizeBytes":189},{"name":"SKILL.md","path":"SKILL.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/SKILL.md","title":"GitHub Agentic Workflows","category":"anthropic-skill","format":"markdown","content":"---\nname: GitHub Agentic Workflows\ndescription: GitHub Agentic Workflows (`gh-aw`) is a GitHub CLI extension for writing Agentic Workflows in markdown and compiling them to GitHub Actions.\n---\n## Debug an existing workflow\nBefore installation, follow [the debugging bootstrap](.github/aw/debug-bootstrap.md)\nat this file's guidance repository/ref. It selects diagnosis, health, compilation,\nor existing-run analysis without requiring a new workflow or automatic upgrade.\nUse its available-tool path when no shell is available; preserve the supplied run URL.\n\n## Install\n```bash\ngh extension install github/gh-aw\n```\nIf failed,\n```\ncurl -sL https://raw.githubusercontent.com/github/gh-aw/main/install-gh-aw.sh | bash\n```\n## Load\nLoad https://github.com/github/gh-aw/blob/main/.github/skills/agentic-workflows/SKILL.md to learn how to create/update/debug/optimize Agentic Workflows.\n","frontmatter":{"name":"GitHub Agentic Workflows","description":"GitHub Agentic Workflows (`gh-aw`) is a GitHub CLI extension for writing Agentic Workflows in markdown and compiling them to GitHub Actions."},"isInternal":false,"tokens":200,"sizeBytes":881},{"name":"build-performance.md","path":".github/copilot/instructions/build-performance.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/build-performance.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/build-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/build-performance.md)","tokens":300,"sizeBytes":221},{"name":"ci-performance.md","path":".github/copilot/instructions/ci-performance.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/ci-performance.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/ci-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/ci-performance.md)","tokens":300,"sizeBytes":215},{"name":"cli-performance.md","path":".github/copilot/instructions/cli-performance.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/cli-performance.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/cli-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/cli-performance.md)","tokens":300,"sizeBytes":217},{"name":"workflow-performance.md","path":".github/copilot/instructions/workflow-performance.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/workflow-performance.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# GitHub Copilot Instructions\n\nPath: `.github/copilot/instructions/workflow-performance.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/copilot/instructions/workflow-performance.md)","tokens":300,"sizeBytes":227},{"name":"copilot-instructions.md","path":".squad/templates/copilot-instructions.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/copilot-instructions.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# GitHub Copilot Instructions\n\nPath: `.squad/templates/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/templates/copilot-instructions.md)","tokens":300,"sizeBytes":203},{"name":"mcp.json","path":".github/mcp.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/mcp.json","title":"Model Context Protocol (MCP) Configuration","category":"mcp-config","format":"json","content":"# Model Context Protocol (MCP) Configuration\n\nPath: `.github/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/mcp.json)","tokens":300,"sizeBytes":170},{"name":"mcp.json","path":".vscode/mcp.json","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.vscode/mcp.json","title":"Model Context Protocol (MCP) Configuration","category":"mcp-config","format":"json","content":"# Model Context Protocol (MCP) Configuration\n\nPath: `.vscode/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.vscode/mcp.json)","tokens":300,"sizeBytes":170},{"name":"adr-writer.agent.md","path":".github/agents/adr-writer.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/adr-writer.agent.md","title":"Subagent: adr-writer.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: adr-writer.agent\n\nPath: `.github/agents/adr-writer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/adr-writer.agent.md)","tokens":300,"sizeBytes":190},{"name":"agentic-workflows.md","path":".github/agents/agentic-workflows.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/agentic-workflows.md","title":"Subagent: agentic-workflows","category":"subagent-persona","format":"markdown","content":"# Subagent: agentic-workflows\n\nPath: `.github/agents/agentic-workflows.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/agentic-workflows.md)","tokens":300,"sizeBytes":193},{"name":"ci-cleaner.agent.md","path":".github/agents/ci-cleaner.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/ci-cleaner.agent.md","title":"Subagent: ci-cleaner.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: ci-cleaner.agent\n\nPath: `.github/agents/ci-cleaner.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/ci-cleaner.agent.md)","tokens":300,"sizeBytes":190},{"name":"contribution-checker.agent.md","path":".github/agents/contribution-checker.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/contribution-checker.agent.md","title":"Subagent: contribution-checker.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: contribution-checker.agent\n\nPath: `.github/agents/contribution-checker.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/contribution-checker.agent.md)","tokens":300,"sizeBytes":220},{"name":"create-safe-output-type.agent.md","path":".github/agents/create-safe-output-type.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/create-safe-output-type.agent.md","title":"Subagent: create-safe-output-type.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: create-safe-output-type.agent\n\nPath: `.github/agents/create-safe-output-type.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/create-safe-output-type.agent.md)","tokens":300,"sizeBytes":229},{"name":"custom-engine-implementation.agent.md","path":".github/agents/custom-engine-implementation.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/custom-engine-implementation.agent.md","title":"Subagent: custom-engine-implementation.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: custom-engine-implementation.agent\n\nPath: `.github/agents/custom-engine-implementation.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/custom-engine-implementation.agent.md)","tokens":300,"sizeBytes":244},{"name":"developer.instructions.md","path":".github/agents/developer.instructions.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/developer.instructions.md","title":"Subagent: developer.instructions","category":"subagent-persona","format":"markdown","content":"# Subagent: developer.instructions\n\nPath: `.github/agents/developer.instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/developer.instructions.md)","tokens":300,"sizeBytes":208},{"name":"grumpy-reviewer.agent.md","path":".github/agents/grumpy-reviewer.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/grumpy-reviewer.agent.md","title":"Subagent: grumpy-reviewer.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: grumpy-reviewer.agent\n\nPath: `.github/agents/grumpy-reviewer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/grumpy-reviewer.agent.md)","tokens":300,"sizeBytes":205},{"name":"interactive-agent-designer.agent.md","path":".github/agents/interactive-agent-designer.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/interactive-agent-designer.agent.md","title":"Subagent: interactive-agent-designer.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: interactive-agent-designer.agent\n\nPath: `.github/agents/interactive-agent-designer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/interactive-agent-designer.agent.md)","tokens":300,"sizeBytes":238},{"name":"squad.agent.md","path":".github/agents/squad.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/squad.agent.md","title":"Subagent: squad.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: squad.agent\n\nPath: `.github/agents/squad.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/squad.agent.md)","tokens":300,"sizeBytes":175},{"name":"technical-doc-writer.agent.md","path":".github/agents/technical-doc-writer.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/technical-doc-writer.agent.md","title":"Subagent: technical-doc-writer.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: technical-doc-writer.agent\n\nPath: `.github/agents/technical-doc-writer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/technical-doc-writer.agent.md)","tokens":300,"sizeBytes":220},{"name":"w3c-specification-writer.agent.md","path":".github/agents/w3c-specification-writer.agent.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/w3c-specification-writer.agent.md","title":"Subagent: w3c-specification-writer.agent","category":"subagent-persona","format":"markdown","content":"# Subagent: w3c-specification-writer.agent\n\nPath: `.github/agents/w3c-specification-writer.agent.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/agents/w3c-specification-writer.agent.md)","tokens":300,"sizeBytes":232},{"name":"charter.md","path":".squad/agents/fact-checker/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fact-checker/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/fact-checker/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fact-checker/charter.md)","tokens":300,"sizeBytes":187},{"name":"history.md","path":".squad/agents/fact-checker/history.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fact-checker/history.md","title":"Subagent: history","category":"subagent-persona","format":"markdown","content":"# Subagent: history\n\nPath: `.squad/agents/fact-checker/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fact-checker/history.md)","tokens":300,"sizeBytes":187},{"name":"charter.md","path":".squad/agents/fenster/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fenster/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/fenster/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/fenster/charter.md)","tokens":300,"sizeBytes":177},{"name":"charter.md","path":".squad/agents/hockney/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/hockney/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/hockney/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/hockney/charter.md)","tokens":300,"sizeBytes":177},{"name":"charter.md","path":".squad/agents/keaton/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/keaton/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/keaton/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/keaton/charter.md)","tokens":300,"sizeBytes":175},{"name":"charter.md","path":".squad/agents/kujan/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/kujan/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/kujan/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/kujan/charter.md)","tokens":300,"sizeBytes":173},{"name":"charter.md","path":".squad/agents/mcmanus/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/mcmanus/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/mcmanus/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/mcmanus/charter.md)","tokens":300,"sizeBytes":177},{"name":"charter.md","path":".squad/agents/Rai/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/Rai/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/Rai/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/Rai/charter.md)","tokens":300,"sizeBytes":169},{"name":"history.md","path":".squad/agents/Rai/history.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/Rai/history.md","title":"Subagent: history","category":"subagent-persona","format":"markdown","content":"# Subagent: history\n\nPath: `.squad/agents/Rai/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/Rai/history.md)","tokens":300,"sizeBytes":169},{"name":"charter.md","path":".squad/agents/ralph/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/ralph/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/ralph/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/ralph/charter.md)","tokens":300,"sizeBytes":173},{"name":"history.md","path":".squad/agents/ralph/history.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/ralph/history.md","title":"Subagent: history","category":"subagent-persona","format":"markdown","content":"# Subagent: history\n\nPath: `.squad/agents/ralph/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/ralph/history.md)","tokens":300,"sizeBytes":173},{"name":"charter.md","path":".squad/agents/scribe/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/scribe/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/scribe/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/scribe/charter.md)","tokens":300,"sizeBytes":175},{"name":"history.md","path":".squad/agents/scribe/history.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/scribe/history.md","title":"Subagent: history","category":"subagent-persona","format":"markdown","content":"# Subagent: history\n\nPath: `.squad/agents/scribe/history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/scribe/history.md)","tokens":300,"sizeBytes":175},{"name":"charter.md","path":".squad/agents/verbal/charter.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/verbal/charter.md","title":"Subagent: charter","category":"subagent-persona","format":"markdown","content":"# Subagent: charter\n\nPath: `.squad/agents/verbal/charter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/agents/verbal/charter.md)","tokens":300,"sizeBytes":175},{"name":"opportunity-extractor.md","path":"actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md","title":"Subagent: opportunity-extractor","category":"subagent-persona","format":"markdown","content":"# Subagent: opportunity-extractor\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/opportunity-extractor.md)","tokens":300,"sizeBytes":339},{"name":"paper-screener.md","path":"actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md","title":"Subagent: paper-screener","category":"subagent-persona","format":"markdown","content":"# Subagent: paper-screener\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/paper-screener.md)","tokens":300,"sizeBytes":318},{"name":"preliminary-investigator.md","path":"actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md","title":"Subagent: preliminary-investigator","category":"subagent-persona","format":"markdown","content":"# Subagent: preliminary-investigator\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/preliminary-investigator.md)","tokens":300,"sizeBytes":348},{"name":"relevance-ranker.md","path":"actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md","title":"Subagent: relevance-ranker","category":"subagent-persona","format":"markdown","content":"# Subagent: relevance-ranker\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/arxiv-39394965127/.codex/agents/relevance-ranker.md)","tokens":300,"sizeBytes":324},{"name":"test-writer.md","path":"actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md","title":"Subagent: test-writer","category":"subagent-persona","format":"markdown","content":"# Subagent: test-writer\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/purelock-39601756922/.codex/agents/test-writer.md)","tokens":300,"sizeBytes":315},{"name":"duplicate-type-finder.md","path":"actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md","title":"Subagent: duplicate-type-finder","category":"subagent-persona","format":"markdown","content":"# Subagent: duplicate-type-finder\n\nPath: `actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/actions/setup/js/fixtures/claude-codex-sub-agents/typist-39415087125/.claude/agents/duplicate-type-finder.md)","tokens":300,"sizeBytes":343},{"name":"hierarchical-agents-quickstart.md","path":"scratchpad/agents/hierarchical-agents-quickstart.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/agents/hierarchical-agents-quickstart.md","title":"Subagent: hierarchical-agents-quickstart","category":"subagent-persona","format":"markdown","content":"# Subagent: hierarchical-agents-quickstart\n\nPath: `scratchpad/agents/hierarchical-agents-quickstart.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/agents/hierarchical-agents-quickstart.md)","tokens":300,"sizeBytes":238},{"name":"hierarchical-agents.md","path":"scratchpad/agents/hierarchical-agents.md","rawUrl":"https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/agents/hierarchical-agents.md","title":"Subagent: hierarchical-agents","category":"subagent-persona","format":"markdown","content":"# Subagent: hierarchical-agents\n\nPath: `scratchpad/agents/hierarchical-agents.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/agents/hierarchical-agents.md)","tokens":300,"sizeBytes":205}],"systemPromptSnippet":"<yakaai_skills repo=\"github/gh-aw\">\n<!-- File: .squad/routing.md (Tokens: ~300 | Category: root-instruction) -->\n# .squad - Multi-Agent Routing & Delegation Matrix\n\nPath: `.squad/routing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.squad/routing.md)\n\n<!-- File: AGENTS.md (Tokens: ~300 | Category: root-instruction) -->\n# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/AGENTS.md)\n\n<!-- File: scratchpad/architecture.md (Tokens: ~300 | Category: project-spec) -->\n# scratchpad - System Architecture & Module Boundaries\n\nPath: `scratchpad/architecture.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/scratchpad/architecture.md)\n\n<!-- File: .claude/skills/playwright-cli/references/element-attributes.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/element-attributes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/element-attributes.md)\n\n<!-- File: .claude/skills/playwright-cli/references/playwright-tests.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/playwright-tests.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/playwright-tests.md)\n\n<!-- File: .claude/skills/playwright-cli/references/request-mocking.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/request-mocking.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/request-mocking.md)\n\n<!-- File: .claude/skills/playwright-cli/references/running-code.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/running-code.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/running-code.md)\n\n<!-- File: .claude/skills/playwright-cli/references/session-management.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/session-management.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/session-management.md)\n\n<!-- File: .claude/skills/playwright-cli/references/spec-driven-testing.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/spec-driven-testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/spec-driven-testing.md)\n\n<!-- File: .claude/skills/playwright-cli/references/storage-state.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/storage-state.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/storage-state.md)\n\n<!-- File: .claude/skills/playwright-cli/references/test-generation.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/test-generation.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/test-generation.md)\n\n<!-- File: .claude/skills/playwright-cli/references/tracing.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/tracing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/tracing.md)\n\n<!-- File: .claude/skills/playwright-cli/references/video-recording.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.claude/skills/playwright-cli/references/video-recording.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.claude/skills/playwright-cli/references/video-recording.md)\n\n<!-- File: .claude/skills/playwright-cli/SKILL.md (Tokens: ~2656 | Category: anthropic-skill) -->\n---\nname: playwright-cli\ndescription: Automate browser interactions, test web pages and work with Playwright tests.\nallowed-tools: Bash(playwright-cli:*) Bash(npx:*) Bash(npm:*)\n---\n\n# Browser Automation with playwright-cli\n\n## Quick start\n\n```bash\n# open new browser\nplaywright-cli open\n# navigate to a page\nplaywright-cli goto https://playwright.dev\n# interact with the page using refs from the snapshot\nplaywright-cli click e15\nplaywright-cli type \"page.click\"\nplaywright-cli press Enter\n# take a screenshot (rarely used, as snapshot is more common)\nplaywright-cli screenshot\n# close the browser\nplaywright-cli close\n```\n\n## Commands\n\n### Core\n\n```bash\nplaywright-cli open\n# open and navigate right away\nplaywright-cli open https://example.com/\nplaywright-cli goto https://playwright.dev\nplaywright-cli type \"search query\"\nplaywright-cli click e3\nplaywright-cli dblclick e7\n# --submit presses Enter after filling the element\nplaywright-cli fill e5 \"user@example.com\"  --submit\nplaywright-cli drag e2 e8\n# drop files or data onto an element (from outside the page)\nplaywright-cli drop e4 --path=./image.png\nplaywright-cli drop e4 --data=\"text/plain=hello world\"\nplaywright-cli hover e4\nplaywright-cli select e9 \"option-value\"\nplaywright-cli upload ./document.pdf\nplaywright-cli check e12\nplaywright-cli uncheck e12\nplaywright-cli snapshot\nplaywright-cli eval \"document.title\"\nplaywright-cli eval \"el => el.textContent\" e5\n# get element id, class, or any attribute not visible in the snapshot\nplaywright-cli eval \"el => el.id\" e5\nplaywright-cli eval \"el => el.getAttribute('data-testid')\" e5\nplaywright-cli dialog-accept\nplaywright-cli dialog-accept \"confirmation text\"\nplaywright-cli dialog-dismiss\nplaywright-cli resize 1920 1080\nplaywright-cli close\n```\n\n### Navigation\n\n```bash\nplaywright-cli go-back\nplaywright-cli go-forward\nplaywright-cli reload\n```\n\n### Keyboard\n\n```bash\nplaywright-cli press Enter\nplaywright-cli press ArrowDown\nplaywright-cli keydown Shift\nplaywright-cli keyup Shift\n```\n\n### Mouse\n\n```bash\nplaywright-cli mousemove 150 300\nplaywright-cli mousedown\nplaywright-cli mousedown right\nplaywright-cli mouseup\nplaywright-cli mouseup right\nplaywright-cli mousewheel 0 100\n```\n\n### Save as\n\n```bash\nplaywright-cli screenshot\nplaywright-cli screenshot e5\nplaywright-cli screenshot --filename=page.png\nplaywright-cli pdf --filename=page.pdf\n```\n\n### Tabs\n\n```bash\nplaywright-cli tab-list\nplaywright-cli tab-new\nplaywright-cli tab-new https://example.com/page\nplaywright-cli tab-close\nplaywright-cli tab-close 2\nplaywright-cli tab-select 0\n```\n\n### Storage\n\n```bash\nplaywright-cli state-save\nplaywright-cli state-save auth.json\nplaywright-cli state-load auth.json\n\n# Cookies\nplaywright-cli cookie-list\nplaywright-cli cookie-list --domain=example.com\nplaywright-cli cookie-get session_id\nplaywright-cli cookie-set session_id abc123\nplaywright-cli cookie-set session_id abc123 --domain=example.com --httpOnly --secure\nplaywright-cli cookie-delete session_id\nplaywright-cli cookie-clear\n\n# LocalStorage\nplaywright-cli localstorage-list\nplaywright-cli localstorage-get theme\nplaywright-cli localstorage-set theme dark\nplaywright-cli localstorage-delete theme\nplaywright-cli localstorage-clear\n\n# SessionStorage\nplaywright-cli sessionstorage-list\nplaywright-cli sessionstorage-get step\nplaywright-cli sessionstorage-set step 3\nplaywright-cli sessionstorage-delete step\nplaywright-cli sessionstorage-clear\n```\n\n### Network\n\n```bash\nplaywright-cli route \"**/*.jpg\" --status=404\nplaywright-cli route \"https://api.example.com/**\" --body='{\"mock\": true}'\nplaywright-cli route-list\nplaywright-cli unroute \"**/*.jpg\"\nplaywright-cli unroute\n```\n\n### DevTools\n\n```bash\nplaywright-cli console\nplaywright-cli console warning\nplaywright-cli requests\nplaywright-cli request 5\nplaywright-cli run-code \"async page => await page.context().grantPermissions(['geolocation'])\"\nplaywright-cli run-code --filename=script.js\nplaywright-cli tracing-start\nplaywright-cli tracing-stop\nplaywright-cli video-start video.webm\nplaywright-cli video-chapter \"Chapter Title\" --description=\"Details\" --duration=2000\nplaywright-cli video-stop\n\n# launch the dashboard for UI review / design feedback — user annotates the page, you receive the annotated screenshot, snapshot, and notes\nplaywright-cli show --annotate\n\n# generate a Playwright locator for an element from its ref or selector\nplaywright-cli generate-locator e5 --raw\n\n# show a persistent highlight overlay for an element, optionally with a custom style\nplaywright-cli highlight e5\nplaywright-cli highlight e5 --style=\"outline: 3px dashed red\"\n# hide a single element highlight, or all page highlights when no target is given\nplaywright-cli highlight e5 --hide\nplaywright-cli highlight --hide\n```\n\n## Raw output\n\nThe global `--raw` option strips page status, generated code, and snapshot sections from the output, returning only the result value. Use it to pipe command output into other tools. Commands that don't produce output return nothing.\n\n```bash\nplaywright-cli --raw eval \"JSON.stringify(performance.timing)\" | jq '.loadEventEnd - .navigationStart'\nplaywright-cli --raw eval \"JSON.stringify([...document.querySelectorAll('a')].map(a => a.href))\" > links.json\nplaywright-cli --raw snapshot > before.yml\nplaywright-cli click e5\nplaywright-cli --raw snapshot > after.yml\ndiff before.yml after.yml\nTOKEN=$(playwright-cli --raw cookie-get session_id)\nplaywright-cli --raw localstorage-get theme\n```\n\nFor structured output wrapping every reply as JSON, pass --json\n```bash\nplaywright-cli list --json\n```\n\n## Open parameters\n```bash\n# Use specific browser when creating session\nplaywright-cli open --browser=chrome\nplaywright-cli open --browser=firefox\nplaywright-cli open --browser=webkit\nplaywright-cli open --browser=msedge\n\n# Use persistent profile (by default profile is in-memory)\nplaywright-cli open --persistent\n# Use persistent profile with custom directory\nplaywright-cli open --profile=/path/to/profile\n\n# Connect to browser via Playwright Extension\nplaywright-cli attach --extension=chrome\n\n# Connect to a running Chrome or Edge by channel name\nplaywright-cli attach --cdp=chrome\nplaywright-cli attach --cdp=msedge\n\n# Connect to a running browser via CDP endpoint\nplaywright-cli attach --cdp=http://localhost:9222\n\n# Start with config file\nplaywright-cli open --config=my-config.json\n\n# Close the browser\nplaywright-cli close\n# Detach from an attached browser (leaves the external browser running)\nplaywright-cli -s=msedge detach\n# Delete user data for the default session\nplaywright-cli delete-data\n```\n\n## Snapshots\n\nAfter each command, playwright-cli provides a snapshot of the current browser state.\n\n```bash\n> playwright-cli goto https://example.com\n### Page\n- Page URL: https://example.com/\n- Page Title: Example Domain\n### Snapshot\n[Snapshot](.playwright-cli/page-2026-02-14T19-22-42-679Z.yml)\n```\n\nYou can also take a snapshot on demand using `playwright-cli snapshot` command. All the options below can be combined as needed.\n\n```bash\n# default - save to a file with timestamp-based name\nplaywright-cli snapshot\n\n# save to file, use when snapshot is a part of the workflow result\nplaywright-cli snapshot --filename=after-click.yaml\n\n# snapshot an element instead of the whole page\nplaywright-cli snapshot \"#main\"\n\n# limit snapshot depth for efficiency, take a partial snapshot afterwards\nplaywright-cli snapshot --depth=4\nplaywright-cli snapshot e34\n\n# include each element's bounding box as [box=x,y,width,height]\nplaywright-cli snapshot --boxes\n```\n\n## Targeting elements\n\nBy default, use refs from the snapshot to interact with page elements.\n\n```bash\n# get snapshot with refs\nplaywright-cli snapshot\n\n# interact using a ref\nplaywright-cli click e15\n```\n\nYou can also use css selectors or Playwright locators.\n\n```bash\n# css selector\nplaywright-cli click \"#main > button.submit\"\n\n# role locator\nplaywright-cli click \"getByRole('button', { name: 'Submit' })\"\n\n# test id\nplaywright-cli click \"getByTestId('submit-button')\"\n```\n\n## Browser Sessions\n\n```bash\n# create new browser session named \"mysession\" with persistent profile\nplaywright-cli -s=mysession open example.com --persistent\n# same with manually specified profile directory (use when requested explicitly)\nplaywright-cli -s=mysession open example.com --profile=/path/to/profile\nplaywright-cli -s=mysession click e6\nplaywright-cli -s=mysession close  # stop a named browser\nplaywright-cli -s=mysession delete-data  # delete user data for persistent session\n\nplaywright-cli list\n# Close all browsers\nplaywright-cli close-all\n# Forcefully kill all browser processes\nplaywright-cli kill-all\n```\n\n## Installation\n\nIf global `playwright-cli` command is not available, try a local version via `npx playwright-cli`:\n\n```bash\nnpx --no-install playwright-cli --version\n```\n\nWhen local version is available, use `npx playwright-cli` in all commands. Otherwise, install `playwright-cli` as a global command:\n\n```bash\nnpm install -g @playwright/cli@latest\n```\n\n## Example: Form submission\n\n```bash\nplaywright-cli open https://example.com/form\nplaywright-cli snapshot\n\nplaywright-cli fill e1 \"user@example.com\"\nplaywright-cli fill e2 \"password123\"\nplaywright-cli click e3\nplaywright-cli snapshot\nplaywright-cli close\n```\n\n## Example: Multi-tab workflow\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli tab-new https://example.com/other\nplaywright-cli tab-list\nplaywright-cli tab-select 0\nplaywright-cli snapshot\nplaywright-cli close\n```\n\n## Example: Debugging with DevTools\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli click e4\nplaywright-cli fill e7 \"test\"\nplaywright-cli console\nplaywright-cli requests\nplaywright-cli close\n```\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli tracing-start\nplaywright-cli click e4\nplaywright-cli fill e7 \"test\"\nplaywright-cli tracing-stop\nplaywright-cli close\n```\n\n## Example: Interactive session\n\nAsk the user for UI review or design feedback. The user draws boxes on the live page and types comments; you receive the annotated screenshot, the snapshot of the marked region, and the user's notes. Use this whenever the user asks for \"UI review\", \"design feedback\", or to \"ask the user what they think / want / mean\":\n\n```bash\nplaywright-cli open https://example.com\nplaywright-cli show --annotate\n```\n\n## Specific tasks\n\n* **Running and Debugging Playwright tests** [references/playwright-tests.md](references/playwright-tests.md)\n* **Request mocking** [references/request-mocking.md](references/request-mocking.md)\n* **Running Playwright code** [references/running-code.md](references/running-code.md)\n* **Browser session management** [references/session-management.md](references/session-management.md)\n* **Spec-driven testing (plan / generate / heal)** [references/spec-driven-testing.md](references/spec-driven-testing.md)\n* **Storage state (cookies, localStorage)** [references/storage-state.md](references/storage-state.md)\n* **Test generation** [references/test-generation.md](references/test-generation.md)\n* **Tracing** [references/tracing.md](references/tracing.md)\n* **Video recording** [references/video-recording.md](references/video-recording.md)\n* **Inspecting element attributes** [references/element-attributes.md](references/element-attributes.md)\n\n<!-- File: .github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Support Skill\n\nPath: `.github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/extensions/smoke-copilot-dynamic-workflow/support/.fixture.json)\n\n<!-- File: .github/skills/agentic-workflows/SKILL.md (Tokens: ~2172 | Category: anthropic-skill) -->\n---\nname: agentic-workflows\ndescription: Route gh-aw design, creation, diagnosis, patching, active debugging, and upgrade requests to the right strategies.\n---\n\n# Agentic Workflows Router\n\nUse this skill when a user asks to design, create, update, debug, or upgrade GitHub Agentic Workflows in this repository.\n\nThis skill is a dispatcher: identify the task type, load the matching workflow prompt/skill file, and follow it directly. Keep responses concise and ask a clarifying question if the correct prompt is unclear.\n\nFor debugging sessions needing CLI setup or run-URL scoping, first load\n`https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/debug-bootstrap.md`; it bootstraps\nthe same shared strategy used by the debugging routes below.\n\nDebugging, incident, health, and failure-related optimization requests use the\nbootstrap's intent routing before generic update, upgrade, or optimization routes,\neven when the CLI is installed. Preserve the supplied guidance repository/ref\nfor all debugging links and public raw fallbacks; URLs showing `main` below are\ndefaults only when no guidance revision is supplied. Reuse already-loaded guides.\nThe intent index is `.github/aw/debug-scenarios.md`; load only the selected\nspecialized route, not every debugging reference.\n\nRepository overlay (optional):\n- Load the target repository's `.github/aw/instructions.md`, if present, after the matched prompt/skill. Use `@.github/aw/instructions.md` only in a matching checkout; do not substitute a guidance-repository overlay.\n- Precedence: repository overlay instructions override upstream defaults when they conflict.\n\nRead only the files you need:\nUse a local guidance checkout only when its repository/ref matches the requested guidance; otherwise use the resolved guidance repository/ref (default `github/gh-aw`).\nIf GitHub API, `gh api`, or GitHub MCP downloads return HTTP 403 (including a token SAML-authorized for a different organization), do not retry with the same token. Fetch the public file without authentication from `https://raw.githubusercontent.com/github/gh-aw/main/<path>` instead, preserving its repository-relative path (including `.github/`). For example: `curl --fail --silent --show-error --location 'https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/create-agentic-workflow.md'`. Use the same fallback for referenced instructions and `SKILL.md` files; never send an Authorization header or token to the raw URL. If the public download fails, report that error rather than proceeding without the required instructions. This fallback is for public `github/gh-aw` content only, not private or enterprise repositories.\n- `.github/aw/action-container-substitutions.md`\n- `.github/aw/agent-runtime-instructions.md`\n- `.github/aw/agentic-chat.md`\n- `.github/aw/agentic-workflows-mcp.md`\n- `.github/aw/analyzing-runs.md`\n- `.github/aw/asciicharts.md`\n- `.github/aw/campaign.md`\n- `.github/aw/charts-trending.md`\n- `.github/aw/charts.md`\n- `.github/aw/cli-commands.md`\n- `.github/aw/compat.md`\n- `.github/aw/configure-agentic-engine.md`\n- `.github/aw/context.md`\n- `.github/aw/create-agentic-workflow-trigger-details.md`\n- `.github/aw/create-agentic-workflow.md`\n- `.github/aw/create-shared-agentic-workflow.md`\n- `.github/aw/debug-agentic-workflow.md`\n- `.github/aw/debug-bootstrap.md`\n- `.github/aw/debug-compilation.md`\n- `.github/aw/debug-live-testing.md`\n- `.github/aw/debug-model-engine-misconfiguration.md`\n- `.github/aw/debug-playbook.md`\n- `.github/aw/debug-scenarios.md`\n- `.github/aw/debug-security-review.md`\n- `.github/aw/debug-workflow-evidence.md`\n- `.github/aw/debug-workflow-health.md`\n- `.github/aw/dependabot.md`\n- `.github/aw/deployment-status.md`\n- `.github/aw/designer-mappings.md`\n- `.github/aw/designer.md`\n- `.github/aw/doctor.md`\n- `.github/aw/documentation-workflows.md`\n- `.github/aw/drive-memory.md`\n- `.github/aw/enclaves.md`\n- `.github/aw/evals.md`\n- `.github/aw/experiments.md`\n- `.github/aw/formal-methods.md`\n- `.github/aw/github-agentic-workflows.md`\n- `.github/aw/github-mcp-server-pagination.md`\n- `.github/aw/github-mcp-server-tools.md`\n- `.github/aw/github-mcp-server.md`\n- `.github/aw/harbor.md`\n- `.github/aw/instructions.md`\n- `.github/aw/intent.md`\n- `.github/aw/jobs.md`\n- `.github/aw/ledger.md`\n- `.github/aw/linter-workflows.md`\n- `.github/aw/llms.md`\n- `.github/aw/loop.md`\n- `.github/aw/lsp.md`\n- `.github/aw/maintainer.md`\n- `.github/aw/mcp-clis.md`\n- `.github/aw/memory-stateful-patterns.md`\n- `.github/aw/memory.md`\n- `.github/aw/messages.md`\n- `.github/aw/multi-agent-research.md`\n- `.github/aw/network.md`\n- `.github/aw/optimize-agentic-workflow.md`\n- `.github/aw/patterns.md`\n- `.github/aw/playwright.md`\n- `.github/aw/pr-reviewer.md`\n- `.github/aw/release-workflow.md`\n- `.github/aw/report.md`\n- `.github/aw/reuse.md`\n- `.github/aw/safe-outputs-automation.md`\n- `.github/aw/safe-outputs-content.md`\n- `.github/aw/safe-outputs-management.md`\n- `.github/aw/safe-outputs-runtime.md`\n- `.github/aw/safe-outputs.md`\n- `.github/aw/serena-tool.md`\n- `.github/aw/shared-safe-jobs.md`\n- `.github/aw/skills.md`\n- `.github/aw/subagents.md`\n- `.github/aw/syntax-agentic.md`\n- `.github/aw/syntax-checkout.md`\n- `.github/aw/syntax-core.md`\n- `.github/aw/syntax-engine.md`\n- `.github/aw/syntax-tools-imports.md`\n- `.github/aw/syntax.md`\n- `.github/aw/test-coverage.md`\n- `.github/aw/test-expression.md`\n- `.github/aw/token-optimization-caching-budgets.md`\n- `.github/aw/token-optimization-observability.md`\n- `.github/aw/token-optimization.md`\n- `.github/aw/triggers.md`\n- `.github/aw/update-agentic-workflow.md`\n- `.github/aw/upgrade-agentic-workflows.md`\n- `.github/aw/visual-regression.md`\n- `.github/aw/work-queue.md`\n- `.github/aw/workflow-constraints.md`\n- `.github/aw/workflow-editing.md`\n- `.github/aw/workflow-patterns.md`\n\nAfter loading the matching workflow prompt or skill, follow it directly:\n- Design workflows from scratch via interview: `.github/aw/designer.md`\n- Create new workflows: `.github/aw/create-agentic-workflow.md`\n- Configure or add declarative engines: `.github/aw/configure-agentic-engine.md`\n- Update existing workflows: `.github/aw/update-agentic-workflow.md`\n- Diagnose, patch, audit, or actively debug workflows: `.github/aw/debug-agentic-workflow.md` (local-first strategy, evidence triage and live gates)\n- Analyze existing runs, logs, or recurring failures: `.github/aw/analyzing-runs.md`. General repository-wide debugging or optimization requests start here with failure clustering before selecting a workflow.\n- AWF model/endpoint 400s, silent cross-family sub-agent failures, `model: auto` failures, install-step 404s after a version pin, or questions about version fields: go directly to `.github/aw/debug-agentic-workflow.md#model-and-engine-misconfiguration` before suggesting model changes.\n- Upgrade workflows and fix deprecations: `.github/aw/upgrade-agentic-workflows.md`\n- Create shared components or MCP wrappers: `.github/aw/create-shared-agentic-workflow.md`\n- Create report-generating workflows: `.github/aw/report.md`\n- Fix Dependabot manifest PRs: `.github/aw/dependabot.md`\n- Analyze coverage workflows: `.github/aw/test-coverage.md`\n- Render compact markdown charts: `.github/aw/asciicharts.md`\n- Map CLI commands to MCP usage: `.github/aw/cli-commands.md`\n- Choose workflow architecture and patterns: `.github/aw/patterns.md`\n- Design, deploy, inspect or recover a Git-backed work queue: `.github/aw/work-queue.md`\n- Optimize token usage and cost: `.github/aw/token-optimization.md`\n- Advanced cost controls without native settings (custom AIC allowances by server size or shared organization budget policies): read `docs/src/content/docs/reference/cost-management.md#configure-advanced-cost-controls-with-admission` ([published guidance](https://github.github.com/gh-aw/reference/cost-management/#configure-advanced-cost-controls-with-admission)). Explain the external authority requirement and cooperative limits; do not invent frontmatter fields or promise hard caps, reservations, or mid-run cancellation.\n- Design long-running multi-agent research workflows: `.github/aw/multi-agent-research.md`\n- Add skills or agent plugins requested by the user (`skills:` / `plugins:` frontmatter, never on-the-fly installs): `.github/aw/skills.md`\n\nWhen the task involves OTEL, OTLP, traces, observability backends, or telemetry-driven analysis, also read and follow `skills/otel-queries/SKILL.md` after loading the matching workflow prompt or skill.\n\nWhen creating, updating, diagnosing or upgrading a workflow that uses `tools.work-queue`, also load `.github/aw/work-queue.md` after the primary prompt. Load deployment docs, operator reference or specification only when that task needs them.\n\n<!-- File: .github/skills/agentic-workflows/tests/fixtures.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Tests Skill\n\nPath: `.github/skills/agentic-workflows/tests/fixtures.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/agentic-workflows/tests/fixtures.json)\n\n<!-- File: .github/skills/awf-release-integrator/SKILL.md (Tokens: ~851 | Category: anthropic-skill) -->\n---\nname: awf-release-integrator\ndescription: Upgrade gh-aw to latest gh-aw-firewall release and identify follow-up spec tasks.\n---\n\n# AWF Release Integrator\n\nUse this skill when updating `github/gh-aw` to a newer `github/gh-aw-firewall` release.\n\n## Goal\n\nLand the version bump cleanly, rebuild the generated artifacts, and review upstream release/spec changes for any follow-up work that should accompany the bump.\n\n## Required sources\n\nConsult these sources before editing anything:\n\n1. The latest `github/gh-aw-firewall` release metadata and body.\n2. The current gh-aw version pins in `pkg/constants/version_constants.go`.\n3. The canonical AWF config sources spec in `specs/awf-config-sources-spec.md`.\n4. The embedded AWF schema in `pkg/workflow/schemas/awf-config.schema.json`.\n5. AWF config integration code in:\n   - `pkg/workflow/awf_config.go`\n   - `pkg/workflow/awf_config_build.go`\n   - `pkg/workflow/awf_config_schema.go`\n   - `pkg/workflow/awf_config_policy.go`\n   - `pkg/workflow/awf_helpers.go`\n   - related AWF tests under `pkg/workflow/`\n\nFor upstream spec review, compare these files from the target `github/gh-aw-firewall` release or tag:\n\n- `docs/awf-config-spec.md`\n- `docs/awf-config.schema.json`\n- `src/awf-config-schema.json`\n- any release assets such as `awf-config.schema.json`\n\n## Update procedure\n\n1. Read `pkg/constants/version_constants.go` and record:\n   - `DefaultFirewallVersion`\n   - every `AWF*MinVersion` constant\n2. Look up the latest `github/gh-aw-firewall` release.\n3. If the latest release tag matches `DefaultFirewallVersion`, report that no version bump is needed and only continue with spec/release-note review if explicitly requested.\n4. If a newer release exists, update the gh-aw pins:\n   - bump `DefaultFirewallVersion`\n   - update any `AWF*MinVersion` constants that must move because the new release introduces or changes gated flags/features\n5. Review release notes for:\n   - new flags\n   - removed or deprecated flags\n   - schema/config additions\n   - security fixes\n   - behavioral changes that could require new tests, docs, or ADR/spec updates\n6. Review the upstream AWF specification and schema changes against:\n   - `pkg/workflow/schemas/awf-config.schema.json`\n   - `specs/awf-config-sources-spec.md`\n   - local AWF config generation and validation code\n7. Update any directly related gh-aw files needed for a complete integration, such as:\n   - embedded schema copies\n   - version-gated helpers/tests\n   - specs or ADRs documenting newly surfaced AWF behavior\n8. Add or update a patch changeset when the bump changes shipped behavior.\n\n## Required validation\n\nAfter editing, run the full AWF rebuild flow exactly in this order. The second\n`make recompile` is required to refresh image SHA pins resolved during the first pass.\n\n```bash\nmake build\nmake recompile\nmake recompile\n```\n\nThen run focused validation for any touched Go code or schema logic, especially AWF-related tests.\n\n## Expected output\n\nSummarize:\n\n- current gh-aw AWF version → target release\n- updated constants\n- release-note highlights\n- specification/schema differences reviewed\n- additional recommended follow-up updates that are not yet implemented\n\n## Review heuristics\n\nWhen deciding whether more than a version bump is needed, specifically check for:\n\n- new AWF schema properties not represented in gh-aw\n- new CLI flags that need `AWF*MinVersion` gates\n- config fields present in schema but absent from gh-aw generation/validation\n- drift that should update `specs/awf-config-sources-spec.md`\n- tests whose expected pinned AWF version or schema URLs need refresh\n\n<!-- File: .github/skills/checkout-credential-review/SKILL.md (Tokens: ~971 | Category: anthropic-skill) -->\n---\nname: checkout-credential-review\ndescription: Review code that performs git or gh operations against repository checkouts in gh-aw, checking that the right credentials are available at the right time and that sparseness, shallowness and credential-free factors are properly considered.\n---\n\n# Checkout Credential Review\n\nUse this skill when reviewing or writing code in `pkg/workflow/`, `actions/setup/js/`, or compiled `.lock.yml` workflows that runs `git`, `gh`, or any other remote-touching operation against a repository checkout.\n\n## Background\n\nEach entry in a workflow's `checkout:` block may declare its own credentials (`github-token:`, `github-app:`), and the compiler wires those into the corresponding `actions/checkout` step ([pkg/workflow/checkout_step_generator.go](../../../pkg/workflow/checkout_step_generator.go)). Generated checkouts always set `persist-credentials: false`, so the on-disk repo retains **no** credentials after the step finishes — only `actions/checkout`'s own internal token is used during the clone, and it is scrubbed in its post-step.\n\nA separate step that wants to authenticate later must either (a) re-inject a token at command level (e.g. `git -c http.extraheader=...`) or (b) be passed the per-checkout token via env. The compiler does *not* automatically thread per-checkout `github-token`s into downstream steps.\n\nTwo important contexts deliberately run with **no git credentials**:\n\n- The **safe-outputs MCP server** and its handlers (`generate_git_bundle.cjs`, `generate_git_patch.cjs`, `create_pull_request.cjs`). Errors in these paths explicitly say \"the safe-outputs MCP server has no credentials for private repositories\" — fetch/push will fail for private repos.\n- The **agent runtime** after `actions/checkout`. The agent prompt in [actions/setup/md/safe_outputs_push_to_pr_branch.md](../../../actions/setup/md/safe_outputs_push_to_pr_branch.md) explicitly tells the model not to attempt `git fetch`, `git pull`, `git push`, or any other authenticated git operation, and to report unavailable branches rather than try to fetch them.\n\n## Review checklist\n\nWhen you see a new `git`, `gh`, `execFileSync('git'…)`, or compiled `run:` block:\n\n1. **Does it touch a remote?** Local-only commands (`symbolic-ref`, `rev-parse`, `log`, `show`, `merge-base`, `diff`, `status`) need no credentials. Anything in `fetch | pull | push | clone | ls-remote | remote (set-url|add|update)` does, plus on-demand blob fetches in partial clones.\n2. **Which checkout is it operating on?** If it's a cross-repo entry from `checkout:`, the relevant credential is *that entry's* `github-token`, not the workflow's default `GITHUB_TOKEN`. Confirm the per-entry token is actually threaded into the step's env (or refuse to do remote operations and degrade gracefully).\n3. **Which job/context emits it?** Agent job and safe-outputs MCP server both run without git credentials by design. Any remote git operation there must be wrapped in `try/catch`, fail soft, and surface a clear \"no credentials\" error rather than a raw git stderr.\n4. **Sparse / shallow / monorepo concerns.** Avoid emitting steps that deepen (`git fetch --unshallow`, `--deepen=N`) or widen (`git fetch origin '+refs/heads/*'`) a sparse or shallow checkout of a large monorepo — these need credentials *and* can pull hundreds of MB. Prefer expanding `fetch:` / `fetch-depth:` / `sparse-checkout:` at compile time so it happens during `actions/checkout` with its internal token, never later.\n5. **`gh` is REST, not git.** `gh api …` uses whatever `GH_TOKEN` is in the step's env — it does **not** automatically inherit per-checkout PATs. For cross-org private repos, either thread the right token in or accept the call will 404 and handle it.\n\n## Related\n\n- [docs/src/content/docs/reference/checkout.md](../../../docs/src/content/docs/reference/checkout.md) — \"Git Credentials After Checkout\"\n- [docs/sparseness.md](../../../docs/sparseness.md) — sparse/blobless credential lifecycle\n- [pkg/workflow/checkout_step_generator.go](../../../pkg/workflow/checkout_step_generator.go) — token wiring per checkout\n- [actions/setup/md/safe_outputs_push_to_pr_branch.md](../../../actions/setup/md/safe_outputs_push_to_pr_branch.md) — agent-facing guidance\n\n<!-- File: .github/skills/console-rendering/SKILL.md (Tokens: ~743 | Category: anthropic-skill) -->\n---\nname: console-rendering\ndescription: Use Go struct tags to render styled terminal output in gh-aw.\n---\n\n# Console Rendering System Usage\n\nUse this guide for the struct tag-based console rendering system.\n\n## Struct Tag Support\n\nUse the `console` struct tag to control rendering behavior:\n\n- **`header:\"Name\"`** - Sets the display name for fields (used in both structs and tables)\n- **`title:\"Section Title\"`** - Sets the title for nested structs, slices, or maps\n- **`format:\"type\"`** - Sets the formatting type for the field value\n  - `format:number` - Formats integers as human-readable numbers (e.g., \"1k\", \"1.2M\")\n  - `format:cost` - Formats floats as currency with $ prefix (e.g., \"$1.234\")\n- **`omitempty`** - Skips the field if it has a zero value\n- **`\"-\"`** - Always skips the field\n\n## Example Usage\n\n```go\ntype Overview struct {\n    RunID    int64  `console:\"header:Run ID\"`\n    Workflow string `console:\"header:Workflow\"`\n    Status   string `console:\"header:Status\"`\n    Duration string `console:\"header:Duration,omitempty\"`\n}\n\ndata := Overview{\n    RunID:    12345,\n    Workflow: \"test-workflow\",\n    Status:   \"completed\",\n    Duration: \"5m30s\",\n}\n\n// Simple rendering\nfmt.Print(console.RenderStruct(data))\n\n// Output:\n//   Run ID  : 12345\n//   Workflow: test-workflow\n//   Status  : completed\n//   Duration: 5m30s\n```\n\n## Format Tag Examples\n\n### Number Formatting\n\n```go\ntype Metrics struct {\n    TokenUsage int `console:\"header:Token Usage,format:number\"`\n    Errors     int `console:\"header:Errors\"`\n}\n\ndata := Metrics{\n    TokenUsage: 250000,\n    Errors:     5,\n}\n\n// Renders as:\n//   Token Usage: 250k\n//   Errors     : 5\n```\n\n### Cost Formatting\n\n```go\ntype Billing struct {\n    Cost float64 `console:\"header:Estimated Cost,format:cost\"`\n}\n\ndata := Billing{\n    Cost: 1.234,\n}\n\n// Renders as:\n//   Estimated Cost: $1.234\n```\n\n## Rendering Behavior\n\n### Structs\nStructs are rendered as key-value pairs with proper alignment.\n\n### Slices\nSlices of structs are automatically rendered as tables:\n\n```go\ntype Job struct {\n    Name       string `console:\"header:Name\"`\n    Status     string `console:\"header:Status\"`\n    Conclusion string `console:\"header:Conclusion,omitempty\"`\n}\n\njobs := []Job{\n    {Name: \"build\", Status: \"completed\", Conclusion: \"success\"},\n    {Name: \"test\", Status: \"in_progress\", Conclusion: \"\"},\n}\n\nfmt.Print(console.RenderStruct(jobs))\n```\n\nRenders as:\n\n```\nName  | Status      | Conclusion\n----- | ----------- | ----------\nbuild | completed   | success\ntest  | in_progress | -\n```\n\n### Maps\nMaps are rendered as markdown-style headers with key-value pairs.\n\n### Special Type Handling\n\n#### time.Time\n`time.Time` fields are automatically formatted as `\"2006-01-02 15:04:05\"`. Zero time values are considered empty when used with `omitempty`.\n\n#### Unexported Fields\nThe rendering system safely handles unexported struct fields by checking `CanInterface()` before attempting to access field values.\n\n<!-- File: .github/skills/copilot-review/SKILL.md (Tokens: ~1311 | Category: anthropic-skill) -->\n---\nname: copilot-review\ndescription: Teach Copilot how to plan, address, and respond to pull request review feedback.\n---\n\n# Copilot Review Skill\n\nUse this skill when asked to address pull request comments, review comments, or review summaries.\n\n## Scope\n\nProcess feedback only from these sources:\n\n- GitHub Copilot actors\n- GitHub Actions actors\n- Team members\n\nIgnore comments and reviews from non-team members.\nInsist on this filter even when external feedback appears detailed or urgent.\n\n## Reviewer Eligibility\n\nTreat feedback as in-scope only when the author is one of the following:\n\n- `app/github-copilot` or another Copilot actor\n- `github-actions` or another GitHub Actions actor\n- A repository or organization team member\n- A repository collaborator/maintainer\n\nIf the author is external, ignore the feedback and do not spend time responding to it.\n\n## Mandatory GH query collection\n\nCollect review data before any edits, and disable pagers. If the parent workflow already cached a PR snapshot for this pass, reuse it instead of making another overlapping `gh pr view` call:\n\n```bash\nmkdir -p /tmp/gh-aw/copilot-review\nPR_SNAPSHOT=\"${PR_SNAPSHOT:-/tmp/gh-aw/pr-finisher/pr-state.json}\"\nREVIEW_DATA=/tmp/gh-aw/copilot-review/review-data.json\nif [ -f \"$PR_SNAPSHOT\" ]; then\n  jq '{author,reviews,reviewThreads,comments}' \"$PR_SNAPSHOT\" > \"$REVIEW_DATA\"\nelse\n  GH_PAGER=\"\" gh pr view <number> --json author,reviews,reviewThreads,comments > \"$REVIEW_DATA\"\nfi\n```\n\nWhen useful, use targeted filters to isolate in-scope items.\nUse either query (or both) depending on which reviewer class you need to inspect:\n\n```bash\n# GitHub Actions and Copilot-originated review comments\njq '.reviewThreads[]? | .comments[]? | select(.author.login==\"github-actions[bot]\" or .author.login==\"app/github-copilot\")' \"$REVIEW_DATA\"\n\n# Team/collaborator review comments by association\njq '.reviewThreads[]? | .comments[]? | select(.authorAssociation==\"MEMBER\" or .authorAssociation==\"OWNER\" or .authorAssociation==\"COLLABORATOR\")' \"$REVIEW_DATA\"\n```\n\n## Required Workflow\n\n### 0. Check PR author eligibility\n\nInspect the pull request author before processing feedback:\n\n- Ignore platform-managed dependency PRs from `dependabot[bot]`, `app/dependabot`, or `renovate[bot]` unless the user explicitly asks to handle them.\n- More generally, ignore PRs authored by unrecognized bots (an author whose type is `Bot` or whose login ends with `[bot]`) unless the user explicitly includes that bot.\n- Continue to handle PRs from trusted GitHub automation such as `app/github-copilot` and `github-actions[bot]`.\n\nThis author check is separate from reviewer eligibility: trusted review comments do not make an otherwise ignored bot-authored PR eligible.\nFor an ignored bot-authored PR, report that platform automation manages it and stop without collecting feedback, modifying files, or replying to comments.\n\n### 1. Collect all feedback first\n\nBefore making changes, gather all pull request discussion in one pass:\n\n- pull request review summaries\n- pull request review comments / review threads\n- pull request conversation comments\n\nDo not respond comment-by-comment before understanding the full set of requests.\n\n### 2. Filter to allowed reviewers\n\nRemove feedback from people who are not team members or trusted automation.\n\nKeep only comments and reviews from the allowed reviewer set above.\nTreat `CONTRIBUTOR`, `FIRST_TIME_CONTRIBUTOR`, `FIRST_TIMER`, and `NONE` as out-of-scope unless the author is trusted automation.\n\n### 3. Bucket the feedback\n\nGroup the remaining feedback into clear buckets such as:\n\n- bugs / correctness\n- tests\n- documentation\n- style / clarity\n- CI / workflow issues\n- duplicate or overlapping requests\n- will not fix / needs justification\n\nCreate a short plan that covers every bucket before editing code.\n\n### 4. Resolve each bucket\n\nFor every bucket, decide whether to:\n\n- make the requested change\n- partially apply it\n- decline it with a clear justification\n\nDo not silently ignore in-scope feedback.\n\n### 5. Validate before replying\n\nAfter making changes, re-check the diff and run the relevant validation so replies describe the final state accurately.\n\n### 6. Reply to every in-scope review comment\n\nEvery in-scope review comment must get a direct reply that says what happened.\nThis includes all in-scope `github-actions[bot]` review comments and threads.\n\nEach reply should briefly state one of:\n\n- what change was made\n- where the fix was applied\n- why no change was made\n- why the comment is already satisfied by another change\n\nIf several comments are handled by the same fix, still reply to each comment individually.\n\n### 7. Resolve threads after answering\n\nIf a review thread has been fully addressed and the tooling supports it:\n\n- reply with the action taken\n- resolve the thread\n\nDo not resolve a thread without answering it first.\n\n## Response Rules\n\n- Answer every in-scope review comment.\n- Review summaries from in-scope reviewers must also be addressed in the work plan.\n- Keep replies concise, specific, and action-oriented.\n- Mention file names or behavior changes when helpful.\n- When declining a request, explain why it is being ignored.\n- When a comment is outdated, reply that it is obsolete because of the newer change and resolve if appropriate.\n\n## Planning Standard\n\nBefore editing, produce a compact internal checklist that maps:\n\n- each in-scope comment or review\n- its bucket\n- planned action\n- final reply status\n\nOnly start implementation after the full feedback set has been reviewed and bucketed.\n\n## Completion Standard\n\nFor eligible PRs, the task is complete only when all of the following are true:\n\n- all in-scope comments and reviews were collected\n- the PR author passed the bot eligibility check\n- non-team-member feedback was ignored\n- each in-scope item was resolved by code changes or explicit justification\n- every in-scope review comment received a reply describing the action taken\n- addressed threads were resolved when possible\n\n<!-- File: .github/skills/create-canvas/SKILL.md (Tokens: ~3538 | Category: anthropic-skill) -->\n---\nname: create-canvas\ndescription: Author, validate, and debug canvas extensions that the agent can open in the GitHub Copilot app's side panel. Use when creating, reviewing, or troubleshooting a canvas extension — including its actions, inputs, rendered content, and the surrounding extension wiring (tools, hooks, lifecycle).\n---\n\n# Extension Canvas Authoring\n\nUse this skill when creating or debugging an extension canvas that integrates with the runtime canvas model.\n\nThe host app no longer participates in extension canvas registration. Extensions declare canvases directly to the runtime via the Copilot SDK on `joinSession`; the runtime routes provider callbacks (`canvas.open`, `canvas.action.invoke`, etc.) straight to the declaring connection; the host app just renders whatever URL the provider returns.\n\n## Authoring workflow (do this in order)\n\n1. **Decide the scope.** Project (`.github/extensions/<name>/`) is committed to the repo and shared with the team. User (`$COPILOT_HOME/extensions/<name>/`) is local to the current user. Session (`$COPILOT_HOME/session-state/<sessionId>/extensions/<name>/`) is loaded only for the current session — ideal for a throwaway canvas for one conversation. Unless the request makes it obvious, ask before creating files — the choice changes who sees the extension, whether it's committed, and the resulting `extensionId`.\n\n2. **Scaffold via tool, don't hand-write the skeleton.**\n   ```\n   extensions_manage({ operation: \"scaffold\", kind: \"canvas\", name: \"<name>\", location: \"project\" | \"user\" | \"session\" })\n   ```\n   The canvas scaffold produces an `extension.mjs` with `joinSession({ canvases: [createCanvas({...})] })`, a working loopback HTTP server per instance, an example action, and `onClose` cleanup. Edit from there.\n\n3. **Edit the file.** Implement your `open`, `actions[]`, optional `onClose`, and (if needed) tools/hooks alongside.\n\n4. **Reload.** Call `extensions_reload`. Stale canvas instances flip to `stale`, then back to `ready` once the provider reconnects.\n\n5. **Verify.** Call `extensions_manage({ operation: \"list\" })` and `extensions_manage({ operation: \"inspect\", name: \"<name>\" })`. If the extension is marked failed, `inspect` surfaces the log file path and a tail — that log is the primary debugging surface.\n\n6. **Drive it.** Run the validation checklist below via `list_canvas_capabilities`, `open_canvas`, and `invoke_canvas_action`.\n\n## Extension shape\n\nA canvas extension is a Copilot CLI extension running as a forked Node process that speaks JSON-RPC over stdio to the CLI.\n\n- Entry file **must** be named `extension.mjs` (ES modules only; TypeScript is not supported).\n- Discovery scans only immediate subdirectories of `.github/extensions/` (relative to git root), `$COPILOT_HOME/extensions/`, and `$COPILOT_HOME/session-state/<sessionId>/extensions/`.\n- The runtime auto-derives a stable `extensionId` of `${source}:${name}` (e.g. `project:my-extension`); session-scoped extensions embed the session id as `session:<sessionId>:<name>`.\n- `@github/copilot-sdk` is resolved automatically by the CLI — do **not** add a `package.json` or `node_modules` for it.\n- `stdout` is reserved for JSON-RPC. **Never `console.log`.** Use `session.log(message, { level, ephemeral })`.\n- Tool names must be globally unique across all loaded extensions — collisions cause the second extension to fail.\n\n## `joinSession` signature\n\n```js\nimport { joinSession, createCanvas, CanvasError } from \"@github/copilot-sdk/extension\";\n\nconst session = await joinSession({\n    canvases: [createCanvas({ /* ... */ })],\n    tools: [/* optional */],\n    hooks: {/* optional */},\n    onPermissionRequest: async (request) => ({ kind: \"approve-once\" }), // optional\n});\n// session.sessionId, session.workspacePath (string | undefined),\n// session.send, session.sendAndWait, session.log, session.on, session.rpc\n```\n\n## Canvas API (`canvas.d.ts`)\n\n```js\nimport { createCanvas, CanvasError, joinSession } from \"@github/copilot-sdk/extension\";\n\nconst canvas = createCanvas({\n    id: \"main\",                  // unique within this extension\n    displayName: \"My canvas\",    // human-readable label shown in host chrome\n    description: \"Short summary the agent sees in the system-prompt canvas catalog.\",\n    inputSchema: { /* JSON Schema for open input (optional) */ },\n    actions: [\n        {\n            name: \"do_thing\",        // unique within this canvas; MUST NOT start with `canvas.`\n            description: \"...\",\n            inputSchema: { /* JSON Schema (optional) */ },\n            handler: async (ctx) => {\n                // ctx: { sessionId, extensionId, canvasId, instanceId, actionName, input, host }\n                // Return raw result; throw CanvasError(\"code\", \"message\") for errors.\n                return { /* ... */ };\n            },\n        },\n    ],\n    open: async (ctx) => {\n        // ctx: { sessionId, extensionId, canvasId, instanceId, input, host }\n        // Idempotent: same instanceId may arrive again after provider reconnect.\n        return {\n            url: \"http://127.0.0.1:<loopback-port>/\", // optional for native canvases\n            title: \"...\",   // optional, shown in host chrome\n            status: \"...\",  // optional, shown in host chrome\n        };\n    },\n    onClose: async (ctx) => {\n        // Optional. Fire-and-forget; return value ignored.\n    },\n});\n```\n\nRuntime rules:\n- Action names starting with `canvas.` are reserved and rejected at declaration time.\n- Every `actions[]` entry must have a `handler`; missing handlers fall through to `CanvasError.noHandler()`.\n- Canvas-level `inputSchema` is validated before `open`; action-level `inputSchema` is validated before dispatch. Failure returns `canvas_input_invalid` with Ajv details.\n- Return raw values from action handlers; throw `CanvasError(\"code\", \"message\")` for errors.\n- `ctx.canvasId` (not `ctx.id`) is the canvas identifier in handler context.\n\n## Loopback server pattern\n\n```js\nimport { createServer } from \"node:http\";\nimport { createCanvas, joinSession } from \"@github/copilot-sdk/extension\";\n\nconst servers = new Map(); // instanceId → { server, url }\n\nasync function startServer(instanceId) {\n    const server = createServer((req, res) => {\n        res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n        res.end(renderHtml(instanceId));\n    });\n    await new Promise((r) => server.listen(0, \"127.0.0.1\", r));\n    const port = server.address().port;\n    return { server, url: `http://127.0.0.1:${port}/` };\n}\n\nawait joinSession({\n    canvases: [\n        createCanvas({\n            id: \"my-canvas\",\n            displayName: \"My canvas\",\n            description: \"...\",\n            open: async (ctx) => {\n                let entry = servers.get(ctx.instanceId);\n                if (!entry) {\n                    entry = await startServer(ctx.instanceId);\n                    servers.set(ctx.instanceId, entry);\n                }\n                return { title: \"My canvas\", url: entry.url };\n            },\n            onClose: async (ctx) => {\n                const entry = servers.get(ctx.instanceId);\n                if (entry) {\n                    servers.delete(ctx.instanceId);\n                    await new Promise((r) => entry.server.close(() => r()));\n                }\n            },\n        }),\n    ],\n});\n```\n\nBind embedded servers to **loopback only** (`127.0.0.1`). The host only embeds loopback URLs. Push state updates to the iframe with Server-Sent Events (`/events`).\n\n## ID model — three distinct identifiers\n\n- **`canvasId`** — the canvas *type* declared by the extension. Accepted by `list_canvas_capabilities` and `open_canvas`; not by `invoke_canvas_action`.\n- **`extensionId`** — auto-derived `${source}:${name}` (e.g. `project:triage-board`). Only pass it to disambiguate when two extensions declare the same `canvasId`.\n- **`instanceId`** — caller-invented handle for one running panel (slug or UUID). Two panels of the same canvas need two `instanceId`s. Validated against `^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$` — max 128 chars, alphanumeric first character, then only `[A-Za-z0-9._-]`.\n\nExample: `open_canvas({ canvasId: \"triage-board\", instanceId: \"triage-1\" })` then `invoke_canvas_action({ instanceId: \"triage-1\", actionName: \"refresh\" })`.\n\n## Agent-side canvas tools\n\n```\n// Open a canvas panel\nopen_canvas({ canvasId: \"my-canvas\", instanceId: \"my-canvas-1\", input?: {...} })\n// Returns { instanceId, url? } — no extensionId needed unless two providers share the canvasId.\n\n// Discover a canvas type's actions and input schema\nlist_canvas_capabilities({ canvasId: \"my-canvas\" })\n\n// Invoke an action on an open panel\ninvoke_canvas_action({ instanceId: \"my-canvas-1\", actionName: \"do_thing\", input?: {...} })\n```\n\nRe-opening the same `instanceId` focuses the existing panel (the host emits `session.canvas.opened` with `reopen: true` and reloads the iframe without invoking the provider again).\n\n## Injecting instructions\n\n- **`additionalContext` from hooks** (everyday path). `onSessionStart` → once-per-session guidance; `onUserPromptSubmitted` → per-turn nudges. The runtime appends it as a `developer`-role message.\n- **`systemMessage` on `joinSession`** (system-prompt path):\n  - `{ mode: \"append\", content }` — append to the SDK foundation.\n  - `{ mode: \"customize\", sections: {...} }` — override individual sections (`identity`, `tone`, `safety`, `custom_instructions`, `runtime_instructions`, etc.) with `replace` / `remove` / `append` / `prepend` / transform-callback actions.\n  - **Do NOT use** `{ mode: \"replace\", content }` from an extension — it discards the entire SDK-managed prompt including safety guardrails.\n\n## State model\n\n**`instanceId` identifies the panel, not the data.** Never key persistent state by `instanceId` alone — iframes reload, extensions restart, and a fresh `instanceId` may be opened for the same logical content.\n\nPick the right storage scope:\n- **Per session / workspace** — write artifact files into `session.workspacePath` (returned by `joinSession`). Lives alongside session artifacts, cleaned up with the session.\n- **Per user / global** — write under `$COPILOT_HOME/extensions/<extension-name>/artifacts/`. Follows the user across sessions.\n- **Per artifact / document** — key under a stable `documentId` or file path passed via `input`.\n- **In-repo, committed artifacts** — architecture diagrams, ADRs, design docs that belong in the repo. Write to a sensible repo path.\n- **Per panel (`instanceId`)** — only ephemeral UI state that genuinely should not survive a reload.\n\nResolve the owning ID in `open()` from `input`, load persisted state for that ID, and render. Two `instanceId`s for the same `documentId` should show the same content.\n\n## App theme tokens\n\nThe runtime mirrors the canvas theme contract onto your canvas document:\n- Root/body attributes: `data-color-mode`, `data-dark-theme`, `data-light-theme`, `data-theme-source`, `data-theme-tone`, `data-visual-mode`, `pointer-on-hover` class.\n- Semantic tokens: `--background-color-default`, `--border-color-default`, `--text-color-default`, `--text-color-muted`, `--color-focus-outline`.\n- Type ramp: `--font-sans`, `--font-mono`, `--font-weight-semibold`, `--text-body-medium`, `--leading-body-medium`.\n- True-color: `--true-color-red`, `--true-color-red-muted`, `--true-color-blue`, `--true-color-blue-muted`.\n\n```css\nbody {\n    margin: 0;\n    background: var(--background-color-default, #ffffff);\n    color: var(--text-color-default, #1f2328);\n    font-family: var(--font-sans, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n    font-size: var(--text-body-medium, 14px);\n    line-height: var(--leading-body-medium, 20px);\n}\n```\n\nOnly depend on the attributes, classes, and variables documented above — others are app-internal and can change.\n\n## Validation checklist\n\n1. **Discovery** — confirm your canvas appears in the `<canvases>` section of the system prompt, then verify `list_canvas_capabilities({ canvasId })` returns your `actions[]`.\n2. **Open** — call `open_canvas({ canvasId, input? })`. Confirm you receive `{ instanceId, url? }` and no error.\n3. **Action** — call `invoke_canvas_action({ instanceId, actionName, input? })` and confirm correct response payload.\n4. **Input validation** — call `open_canvas` with input that fails `inputSchema`. Expect `canvas_input_invalid`.\n5. **Reserved verb rejection** — call `invoke_canvas_action(instanceId, \"canvas.open\", ...)`. Expect `canvas_reserved_action_name`.\n\n## Debugging\n\n1. `extensions_manage({ operation: \"list\" })` — is the extension loaded? Marked `failed`?\n2. `extensions_manage({ operation: \"inspect\", name: \"<name>\" })` — surfaces log file path and tail. Primary debugging surface.\n3. After editing, **always** `extensions_reload` before re-running RPC calls.\n4. To force iframe reload, call `open_canvas` again with the same `instanceId`.\n5. If not discovered at all, verify the file is named exactly `extension.mjs` and lives in an immediate subdirectory of `.github/extensions/`, `$COPILOT_HOME/extensions/`, or the session's extensions dir.\n\n## Sharing extensions via Gist\n\nUse `share_extension` / `install_extension` tools. Gist format:\n- Flat file structure (subdirs encoded as `\\` in gist keys, decoded on install).\n- A `copilot-extension.json` manifest: `{ \"name\": \"<extension-name>\", \"version\": 1 }`.\n- `node_modules/`, `dist/`, `build/`, `.git/`, hidden dirs (except `.github/`) skipped during share.\n- Per-file cap: ~1 MB; total cap: ~5 MB.\n\n## Common pitfalls\n\n- **`console.log` corrupts JSON-RPC.** Use `session.log()` for user-visible messaging.\n- Do not declare action names starting with `canvas.`.\n- Do not forget to wire a `handler` on every `actions[]` entry.\n- Bind servers to **loopback only**.\n- `open` may be re-invoked on provider reconnect — treat it as idempotent and rehydrate from durable storage.\n- Return raw values from action handlers; throw `CanvasError(\"code\", \"message\")` for errors.\n- The canvas context field is `ctx.canvasId`, not `ctx.id`.\n- Tool names must be globally unique across all loaded extensions.\n- `extension.mjs` only — `.ts` is not supported. The `@github/copilot-sdk` import is auto-resolved; do not add a `package.json` for it.\n\n## Session object quick reference\n\n```js\nawait session.log(\"message\", { level?: \"info\"|\"warning\"|\"error\", ephemeral?: boolean });\nawait session.send({ prompt: \"...\", attachments?: [{ type: \"file\", path: \"...\" }] });\nconst response = await session.sendAndWait({ prompt: \"...\" });\nconst unsub = session.on(\"tool.execution_complete\", (event) => { /* ... */ });\n// session.workspacePath — path to session workspace (string | undefined)\n// session.sessionId — current session ID\n```\n\nKey event types: `assistant.message`, `tool.execution_start`, `tool.execution_complete`, `user.message`, `session.idle`, `session.error`, `permission.requested`, `session.shutdown`.\n\n<!-- File: .github/skills/custom-agents/SKILL.md (Tokens: ~3844 | Category: anthropic-skill) -->\n---\nname: custom-agents\ndescription: Define and validate GitHub custom agent files, prompts, and examples.\n---\n\n\n# GitHub Custom Agent File Format\n\nUse this reference for the GitHub custom agent file format.\n\n## Overview\n\nGitHub Copilot reads custom agent instructions from Markdown files with YAML frontmatter. Use them to define specialized behavior, tool access, and workflows for your repository.\n\n## File Locations\n\nPlace custom agent files in these locations based on scope:\n\n### 1. Repository-wide Instructions\n- **File**: `.github/copilot-instructions.md`\n- **Scope**: Applies to all code generation in the repository\n- **Use case**: General coding standards, security requirements, testing practices\n\n### 2. Path-specific Instructions\n- **Directory**: `.github/instructions/`\n- **Pattern**: `*.instructions.md` (e.g., `frontend.instructions.md`, `backend.instructions.md`)\n- **Scope**: Can target specific directories or file patterns using `applyTo` in frontmatter\n- **Use case**: Framework-specific guidelines, component-specific rules\n\n### 3. Custom Agent Profiles\n- **Directory**: `.github/agents/` or `.github/copilot/instructions/`\n- **Pattern**: `AGENTS.md`, `*.md` (e.g., `readme-creator.md`, `test-writer.md`)\n- **Scope**: Defines specialized agents with specific capabilities and instructions\n- **Use case**: Task-specific agents (documentation, testing, refactoring)\n\n### 4. agentic workflow integration\n- **Location**: Imported via `imports` field in workflow frontmatter\n- **Pattern**: Any markdown files under `.github/agents/` directory\n- **Scope**: Custom agent for specific agentic workflow execution\n- **Use case**: Workflow-specific agent configuration\n- **Important**: Only one agent file is allowed per workflow\n\n## File Format\n\n### Basic Structure\n\n```markdown\n# YAML frontmatter (configuration)\nname: agent-name\ndescription: Brief description of agent's purpose\n\n# Markdown body (instructions)\n\nYour natural language instructions for the agent go here.\n```\n\n### Complete YAML Frontmatter Schema\n\n```yaml\n# Required fields\nname: agent-identifier              # Unique identifier for the agent\n\n# Optional descriptive fields\ndescription: >                      # Multi-line description of agent's purpose\n  Agent specializing in specific tasks\n\n# Optional instruction fields\nprompt: |                          # Freeform instructions (alternative to markdown body)\n  Your instructions here\n\n# Optional tool configuration\ntools:                             # List of allowed tools for this agent\n  - createFile\n  - editFiles\n  - codeSearch\n  - search\n\n# Optional path targeting (for .instructions.md files)\napplyTo:                          # Glob patterns for targeted files/directories\n  - \"src/frontend/**\"\n  - \"**/*.tsx\"\n\n# Optional MCP server configuration (enterprise/org only)\nmcp-server:                       # External MCP server configuration\n  url: https://my-mcp-server.com\n  api-key: ${{ secrets.MCPSERVER_API_KEY }}\n\n# Optional settings\nsettings:                         # Custom runtime or connection settings\n  key: value\n```\n\n## Field Descriptions\n\n### Core Fields\n\n#### name (string, required for agent profiles)\n- Unique identifier for the custom agent\n- Used to reference the agent in workflows or assignments\n- Convention: lowercase with hyphens (e.g., `readme-creator`, `test-writer`)\n\n#### description (string, optional)\n- Human-friendly description of the agent's focus and behavior\n- Helps users understand what the agent specializes in\n- Can be multi-line using YAML's `>` or `|` syntax\n\n#### prompt (string, optional)\n- Alternative to using the markdown body for instructions\n- Contains freeform natural language instructions\n- Use YAML's `|` (literal) or `>` (folded) for multi-line content\n- If both `prompt` and markdown body exist, they are typically combined\n\n### Tool Configuration\n\n#### tools (array of strings, optional)\n- List of tools the agent is allowed to use\n- If omitted or set to `[\"*\"]`, agent has access to all available tools\n- Tool names are **case-insensitive**\n- Supports both GitHub's standard tool aliases and legacy naming conventions\n\n**GitHub Standard Tool Aliases:**\n\nGitHub Copilot defines a standardized set of tool aliases for custom agents:\n\n- **`read`** - Access and read contents of files or code\n- **`edit`** - Make changes in code files, apply edits or refactoring\n- **`search`** - Search codebase for keywords, references, or patterns\n- **`pr`** - Create, manage, or update pull requests\n- **`issue`** - Create, manage, or update issues\n\n**Legacy Tool Names:**\n\nFor backward compatibility, these legacy tool names are still supported:\n\n- `createFile` - Create new files (use `edit` instead)\n- `editFiles` - Modify existing files (use `edit` instead)\n- `deleteFiles` - Remove files (use `edit` instead)\n- `codeSearch` - Semantic code search (use `search` instead)\n- `runCommand` - Execute shell commands\n- `getFile` - Read file contents (use `read` instead)\n- `listFiles` - List directory contents (use `read` instead)\n\n**MCP Server Tool Prefixes:**\n\nWhen using Model Context Protocol (MCP) servers, you can specify tools with server prefixes:\n- Single tool: `my-mcp-server/tool-name`\n- All tools from a server: `my-mcp-server/*`\n\n**Examples:**\n\n```yaml\n# Using standard tool aliases\ntools:\n  - read\n  - edit\n  - search\n\n# Enable all tools with wildcard\ntools: [\"*\"]\n\n# Using legacy names (still supported)\ntools:\n  - editFiles\n  - createFile\n  - search\n\n# Mixed standard and MCP server tools\ntools:\n  - read\n  - edit\n  - github-mcp/create_issue\n  - custom-mcp/*\n\n# Empty list disables all tools\ntools: []\n```\n\n### Path Targeting\n\n#### applyTo (array of strings, optional)\n- Only used in `.instructions.md` files\n- Specifies glob patterns for files/directories these instructions apply to\n- Supports wildcards: `*` (any characters), `**` (any directories)\n- Multiple patterns can be specified\n\n**Example:**\n```yaml\napplyTo:\n  - \"src/frontend/**/*.tsx\"\n  - \"src/frontend/**/*.ts\"\n  - \"components/**\"\n```\n\n### Enterprise Features\n\n#### mcp-server (object, optional)\n- Configuration for external MCP (Model Context Protocol) servers\n- Typically used in enterprise or organization settings\n- Allows integration with custom tools and services\n\n**Fields:**\n- `url` (string): MCP server endpoint\n- `api-key` (string): Authentication key (use GitHub secrets)\n\n**Example:**\n```yaml\nmcp-server:\n  url: https://internal-tools.company.com/mcp\n  api-key: ${{ secrets.INTERNAL_MCP_KEY }}\n```\n\n#### settings (object, optional)\n- Custom runtime or connection settings\n- Key-value pairs for agent-specific configuration\n- Format and available keys depend on the agent implementation\n\n## Usage Patterns\n\n### Pattern 1: Repository-wide Standards\n\n**File:** `.github/copilot-instructions.md`\n\n```markdown\ndescription: Repository-wide coding standards\n\n# Coding Standards\n\n## Style Guide\n- Use single quotes in JavaScript/TypeScript\n- Follow ESLint configuration in `.eslintrc.json`\n- Maximum line length: 100 characters\n\n## Security\n- Always set `httpOnly` and `secure` flags for cookies\n- Validate all user input\n- Use parameterized queries for database access\n\n## Testing\n- All new code must include Jest tests\n- Aim for >80% code coverage\n- Test edge cases and error conditions\n```\n\n### Pattern 2: Path-specific Instructions\n\n**File:** `.github/instructions/frontend.instructions.md`\n\n```markdown\ndescription: Frontend development guidelines\napplyTo:\n  - \"src/frontend/**\"\n  - \"components/**\"\n\n# Frontend Development Guidelines\n\n## Component Structure\n- Use React functional components with hooks\n- Prefer composition over inheritance\n- Keep components small and focused (< 150 lines)\n\n## Styling\n- Use CSS Modules for component styles\n- Follow BEM naming convention\n- Use Tailwind utility classes where appropriate\n\n## State Management\n- Use React Context for global state\n- Keep local state in components when possible\n- Use reducers for complex state logic\n```\n\n### Pattern 3: Custom Agent Profile\n\n**File:** `.github/agents/readme-creator.md`\n\n```markdown\nname: readme-creator\ndescription: Agent specializing in creating and improving README files\ntools:\n  - read\n  - edit\n  - search\n\n# README Creator Agent\n\nYou are a documentation specialist focused on creating clear, comprehensive README files.\n\n## Responsibilities\n- Create well-structured README.md files for projects\n- Include all standard sections: Overview, Installation, Usage, Contributing\n- Generate accurate code examples\n- Ensure documentation is up-to-date with codebase\n\n## Style Guidelines\n- Use clear, concise language\n- Include code examples with syntax highlighting\n- Add badges for build status, coverage, version\n- Organize with logical heading hierarchy\n- Include a table of contents for long READMEs\n\n## Quality Standards\n- Verify all code examples are accurate\n- Test installation instructions\n- Ensure links are valid and working\n- Check for proper Markdown formatting\n```\n\n### Pattern 4: Test Writer Agent\n\n**File:** `.github/agents/test-writer.md`\n\n```markdown\nname: test-writer\ndescription: Specialized agent for writing comprehensive test suites\ntools:\n  - read\n  - edit\n  - search\n\n# Test Writer Agent\n\nYou specialize in creating comprehensive, well-structured test suites.\n\n## Testing Framework\n- Use Jest for JavaScript/TypeScript\n- Follow AAA pattern: Arrange, Act, Assert\n- Use descriptive test names: \"should [expected behavior] when [condition]\"\n\n## Test Coverage\n- Write unit tests for all public functions\n- Create integration tests for API endpoints\n- Add edge case tests (null, undefined, empty, boundary values)\n- Test error conditions and exception handling\n\n## Test Organization\n- Group related tests with `describe` blocks\n- Use `beforeEach` and `afterEach` for setup/teardown\n- Keep tests independent and isolated\n- Mock external dependencies\n\n## Best Practices\n- One assertion per test when possible\n- Use test data builders for complex objects\n- Avoid test interdependence\n- Keep tests fast (< 1 second each)\n```\n\n### Pattern 5: Agentic Workflow Integration\n\n**File:** `.github/workflows/code-review.md`\n\n```markdown\non:\n  pull_request:\n    types: [opened, synchronize]\npermissions:\n  contents: read\n  pull-requests: write\nengine:\n  id: copilot\n  custom-agent: .github/agents/code-reviewer.md\n\n# Automated Code Review\n\nReview the pull request changes and provide constructive feedback.\n```\n\n**File:** `.github/agents/code-reviewer.md`\n\n```markdown\nname: code-reviewer\ndescription: Agent specialized in performing code reviews\ntools:\n  - read\n  - search\n\n# Code Review Agent\n\nYou are an experienced code reviewer focused on code quality, security, and best practices.\n\n## Review Checklist\n- Code follows repository style guidelines\n- Proper error handling is implemented\n- Security best practices are followed\n- Tests are included for new functionality\n- Documentation is updated where needed\n- No unnecessary complexity\n\n## Feedback Style\n- Be constructive and specific\n- Explain the reasoning behind suggestions\n- Prioritize issues (critical, important, minor)\n- Acknowledge good patterns and improvements\n- Provide code examples for suggestions\n```\n\n## Integration with gh-aw\n\nThe gh-aw (GitHub Agentic Workflows) tool supports custom agent files through the `imports` field in workflow frontmatter. Any markdown files under the `.github/agents/` directory are treated as custom agent files when imported.\n\n### Preferred way to install skills in workflows\n\nUse the `skills:` frontmatter field as the preferred way to install external skills for workflow runs. This installs skills during activation and persists them correctly between jobs. Use the top-level `plugins:` field the same way for agent plugins. Never add on-the-fly installation steps or ask the agent to install a skill or plugin from the prompt.\n\nUse `imports:` for workflow prompt/context files (including local custom agent files), not as the primary skill installation path.\n\n```markdown\non: pull_request\nengine:\n  id: copilot\nskills:\n  - mattpocock/skills/tdd@801dca688564c529fa84f247f64472520d9ebe28\nplugins:\n  - octo-org/agent-plugin@v1\nimports:\n  - .github/agents/code-reviewer.md\n\n# Workflow prompt\n```\n\n### Configuration\n\n```markdown\non: issues\nengine:\n  id: copilot\nimports:\n  - .github/agents/my-agent.md\n\n# My Workflow\n\nInstructions for the workflow...\n```\n\n### Supported Engines\n\nCustom agent files are supported by the following engines:\n\n1. **Copilot** - Uses `--agent <path>` flag to load custom agent file\n2. **Claude** - Prepends agent file content to the workflow prompt\n3. **Codex** - Prepends agent file content to the workflow prompt\n\n### File Path Resolution\n\n- Agent files are imported via the `imports` field\n- Must be markdown files located under `.github/agents/` directory\n- Only one agent file is allowed per workflow\n- File is validated during workflow compilation\n- Checkout step is automatically added if agent file is imported\n\n### Example Workflow with Custom Agent\n\n```markdown\non:\n  issues:\n    types: [opened]\npermissions:\n  contents: read\n  issues: write\nengine:\n  id: copilot\nimports:\n  - .github/agents/issue-triager.md\ntools:\n  github:\n    allowed:\n      - add_labels_to_issue\n      - create_issue_comment\n\n# Issue Triage Workflow\n\nAnalyze the issue and categorize it appropriately.\n```\n\n## Best Practices\n\n### 1. Keep Instructions Focused\n- Each agent should have a clear, specific purpose\n- Avoid mixing unrelated concerns in a single agent\n- Create multiple specialized agents rather than one general-purpose agent\n\n### 2. Be Explicit and Specific\n- Provide concrete examples of expected behavior\n- Define clear success criteria\n- Specify edge cases and error handling\n\n### 3. Use Appropriate Scoping\n- Repository-wide instructions for universal standards\n- Path-specific instructions for framework or directory-specific rules\n- Custom agents for task-specific workflows\n\n### 4. Test Agent Behavior\n- Verify agent follows instructions correctly\n- Test with various input scenarios\n- Iterate based on actual agent performance\n\n### 5. Maintain and Update\n- Keep instructions current with codebase changes\n- Review and refine based on agent performance\n- Remove outdated or conflicting instructions\n\n### 6. Security Considerations\n- Limit tool access to what's necessary\n- Be cautious with file deletion permissions\n- Use secrets for sensitive configuration\n- Review agent actions regularly\n\n## Common Patterns\n\n### Documentation Agent\n```yaml\nname: documentation-specialist\ndescription: Creates and maintains technical documentation\ntools: [read, edit, search]\n```\n\n### Refactoring Agent\n```yaml\nname: code-refactorer\ndescription: Improves code quality and structure\ntools: [read, edit, search]\n```\n\n### Security Auditor\n```yaml\nname: security-auditor\ndescription: Reviews code for security vulnerabilities\ntools: [read, search]\n```\n\n### Migration Assistant\n```yaml\nname: migration-helper\ndescription: Assists with framework or library migrations\ntools: [read, edit, search]\n```\n\n### Issue Management Agent\n```yaml\nname: issue-manager\ndescription: Manages GitHub issues and project tracking\ntools: [read, issue]\n```\n\n### Pull Request Assistant\n```yaml\nname: pr-assistant\ndescription: Assists with pull request creation and management\ntools: [read, edit, pr]\n```\n\n## Troubleshooting\n\n### Agent Not Following Instructions\n- Make instructions more explicit and specific\n- Provide concrete examples\n- Break down complex instructions into steps\n- Ensure instructions don't conflict\n\n### Tool Access Issues\n- Verify tools are listed in `tools` array\n- Check agent has necessary permissions\n- Ensure tools are available in the environment\n\n### Path Targeting Not Working\n- Verify glob patterns are correct\n- Check file paths match patterns\n- Ensure `applyTo` is only used in `.instructions.md` files\n\n### Custom Agent File Not Found\n- Verify agent file is imported in the `imports` field\n- Ensure file exists and is committed under `.github/agents/` directory\n- Confirm agent file path is correct in imports list\n- Remember: only one agent file is allowed per workflow\n\n## References\n\n- [GitHub Copilot Agent Filess Configuration](https://docs.github.com/en/copilot/reference/copilot-custom-agents-configuration) - Official reference for custom agent configuration including tool aliases\n- [GitHub Copilot Custom Instructions Documentation](https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions)\n- [About Custom Agents](https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-custom-agents)\n- [GitHub Blog: Custom Instructions Support](https://github.blog/changelog/2025-07-23-github-copilot-coding-agent-now-supports-instructions-md-custom-instructions/)\n- [GitHub Blog: AGENTS.md Support](https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/)\n\n## Examples in This Repository\n\nThe gh-aw repository uses custom agent files for performance engineering guides:\n\n- `.github/copilot/instructions/ci-performance.md` - CI/CD optimization\n- `.github/copilot/instructions/workflow-performance.md` - Workflow efficiency\n- `.github/copilot/instructions/build-performance.md` - Build optimization\n- `.github/copilot/instructions/cli-performance.md` - CLI performance\n\nThese files provide specialized guidance for performance engineering tasks and demonstrate the custom agent file format in practice.\n\n<!-- File: .github/skills/custom-engine-implementation/SKILL.md (Tokens: ~1552 | Category: anthropic-skill) -->\n---\nname: custom-engine-implementation\ndescription: Add and test declarative behavior-defined agentic engines in gh-aw, extending Go infrastructure only when necessary.\n---\n\n# Custom Engine Implementation\n\nUse this skill when adding a new agentic engine definition or extending the\nbehavior-defined engine infrastructure.\n\n## Choose the smallest implementation\n\nPrefer a shared Markdown engine definition. Installation, execution, MCP\nconfiguration, provider routing, caching, manifests, plugins, network defaults,\nharness scripts, and log parsing can already be declared through\n`engine.behaviors`.\n\nOnly change Go code when the engine needs a reusable behavior that the\ndeclarative model cannot express. Add a dedicated Go engine only when the\nshared behavior-defined runtime cannot run the engine at all.\n\n| Need | Implementation |\n|---|---|\n| Existing behaviors are sufficient | Add an imported shared engine definition |\n| A reusable declarative behavior is missing | Extend the definition model and behavior-defined runtime |\n| The shared runtime is fundamentally unsuitable | Add a dedicated Go engine and register it |\n\nThe relevant implementation is in:\n\n- `pkg/workflow/engine_definition.go` for the definition model and catalog\n- `pkg/workflow/behavior_defined_engine.go` for the shared runtime\n- `pkg/workflow/engine_definition_loader.go` for embedded built-in definitions\n- `pkg/workflow/agentic_engine.go` for dedicated Go engine registration\n- `pkg/parser/schemas/main_workflow_schema.json` for the workflow schema\n\n## Study representative engines\n\nRead the closest examples before making changes:\n\n- `.github/workflows/shared/opencode.md`: npm installation, merged\n  configuration, MCP, provider routing, and log parsing\n- `.github/workflows/shared/aider.md`: Python installation and a custom harness\n  without native MCP\n- `.github/workflows/shared/crush.md`: native MCP configuration adapter and\n  harness\n- `.github/workflows/shared/cursor.md`: plugin support\n- `.github/workflows/shared/deepseek-harness.md`: provider endpoint discovery\n  and a headless profile\n\nUse the examples to identify a pattern, not as a reason to copy optional\nbehaviors.\n\n## Add a shared engine definition\n\n1. Create `.github/workflows/shared/<engine>.md`.\n2. Declare `engine.id`, `display-name`, `description`, `experimental`, provider\n   metadata, authentication, and only the required `behaviors`.\n3. Pin a default CLI version. Make installation deterministic and provide a\n   verification command.\n4. Document setup, authentication, model syntax, MCP support, and limitations\n   in the Markdown body. Keep in-repository integrations clearly identified as\n   unsupported samples.\n5. Add the engine ID and shared definition path to\n   `.github/aw/engines.json`. Imported behavior-defined engines are registered\n   dynamically; do not add them to `NewEngineRegistry()`.\n6. Add `.github/workflows/smoke-<engine>.md`, following the closest existing\n   smoke workflow. Import the shared definition and exercise the capabilities\n   the engine claims to support.\n7. Update the unsupported sample table in\n   `docs/src/content/docs/reference/engines.md`.\n8. Add a changeset when the engine is a user-visible repository sample. New\n   experimental engines have precedent as a `minor` change.\n9. Run `make recompile` and include the generated smoke workflow\n   `.lock.yml`.\n\n`TestKnownEngineImportsFile_MatchesSharedEngineFiles` in\n`pkg/workflow/engine_definition_test.go` enforces catalog coverage for shared\nexternal engines.\n\n## Design the definition\n\nKeep the definition declarative and minimal:\n\n- Select the correct package manager, package name, binary name, version, and\n  verification command under `behaviors.installation`.\n- Put invocation arguments and non-secret environment variables under\n  `behaviors.execution`.\n- Use an existing secret strategy and provider environment mode where\n  possible.\n- Declare native MCP support only when the CLI can consume the generated\n  configuration. Otherwise use a harness or the gh-aw CLI proxy pattern.\n- Add only required default domains and map provider-specific domains under\n  `behaviors.network.provider-domains`.\n- Declare manifest files, cache paths, and plugin support only when the CLI\n  consumes them.\n- Add a log parser only when its emitted event format can be tested.\n\nTreat inline JavaScript in harnesses, configuration adapters, and log parsers\nas production code. Avoid shell interpolation, validate paths and child-process\narguments, preserve nonzero exit codes, and never print secret values. Enabling\npackage lifecycle scripts requires a pinned version and an explicit reason.\n\nFor log and error regular expressions, also load\n`.github/skills/error-pattern-safety/SKILL.md`.\n\n## Extend declarative infrastructure\n\nWhen an engine exposes a generally useful capability that existing behaviors\ncannot express:\n\n1. Add the smallest field to the types in\n   `pkg/workflow/engine_definition.go`.\n2. Validate and render it in the focused behavior-defined engine files.\n3. Update `pkg/parser/schemas/main_workflow_schema.json`.\n4. Add focused tests for parsing, validation, and rendered execution behavior.\n5. Run `make generate-schema-docs` when generated schema documentation changes.\n\nDo not add a schema field for a behavior that can be represented by existing\ninstallation, execution, environment, harness, or adapter fields.\n\nFor a dedicated Go runtime, implement the engine interfaces by composing the\nexisting helpers, keep engine-specific code in its own files, and register the\nengine in `pkg/workflow/agentic_engine.go`. Cover configuration, commands,\nenvironment, authentication, tools, logs, and failure handling with focused\ntests.\n\n## Test the right layers\n\nUse tests that match the changed behavior:\n\n| Area | Tests and examples |\n|---|---|\n| Harness, configuration, MCP, and environment | `behavior_defined_engine_harness_test.go` |\n| Log parsing | `behavior_defined_engine_log_parser_test.go` |\n| Cache behavior | `behavior_defined_engine_cache_test.go` |\n| Definitions, catalog, and known imports | `engine_definition_test.go`, `engine_catalog_test.go` |\n| Embedded definitions | `engine_definition_loader_test.go` |\n| Real shared workflow harness | `aider_workflow_test.go` |\n| Sandboxed CLI visibility | `cloud_hypervisor_test.go` |\n| Generated smoke workflows | `compiled_lock_files_test.go` |\n\nTest both definition parsing and the generated installation/execution steps.\nInclude negative cases for unsafe paths, invalid configuration, missing\ncredentials, or malformed logs when relevant.\n\n## Validate\n\nAfter Go changes:\n\n```bash\nmake build\nmake fmt\n```\n\nAfter workflow Markdown changes:\n\n```bash\nmake recompile\n```\n\nRun focused `go test` commands for the changed behavior while iterating. Before\nan intermediate progress report, run:\n\n```bash\nmake agent-report-progress-no-test\n```\n\nBefore the final progress report, run:\n\n```bash\nmake agent-report-progress\n```\n\nUse `make agent-finish` for the final repository validation when time allows.\nDo not trigger a smoke workflow from a Copilot cloud agent run.\n\n## Completion checklist\n\n- The declarative path was preferred unless its limitations are documented.\n- The engine definition uses a pinned, verified installation.\n- Authentication, provider/model handling, MCP, and network access are covered.\n- Harnesses and adapters do not expose secrets or interpolate untrusted input.\n- `.github/aw/engines.json`, smoke workflow, generated lock file,\n  documentation, and changeset are updated when applicable.\n- Focused tests cover parsing and rendered runtime behavior.\n- Repository validation passes.\n\n<!-- File: .github/skills/debugging-workflows/SKILL.md (Tokens: ~298 | Category: anthropic-skill) -->\n---\nname: debugging-workflows\ndescription: Diagnose gh-aw failures using the canonical debugging strategy and evidence reference.\n---\n\n# Workflow Debugging Router\n\nThis skill remains available for existing invocations. Load and follow\n[the evidence reference](../../aw/debug-workflow-evidence.md), where the\ninstructions now live. It delegates setup to\n[the bootstrap](../../aw/debug-bootstrap.md) and execution policy to\n[the shared strategy](../../aw/debug-agentic-workflow.md).\n\nUse a matching local guidance checkout. For Contents API reads, use the guidance\nowner/repository (`owner=github`, `repo=gh-aw` by default),\n`path=.github/aw/debug-workflow-evidence.md`, retaining the ref of this skill.\nThe other API paths are `.github/aw/debug-bootstrap.md` and\n`.github/aw/debug-agentic-workflow.md`. Normalize relative links against their\ncontaining file before API reads; `../../aw/...` is not an API path.\nFor default raw guidance, use `https://raw.githubusercontent.com/github/gh-aw/<guidance-ref>/`\nplus the repository-root-relative path, including `.github/`. Preserve supplied\nrefs containing slashes and keep guidance identity separate from the target\nworkflow repository/ref. The bootstrap documents size-aware reads and public\nraw fallback after API denial.\n\nRead the canonical instructions before running commands. This compatibility\nrouter defines no separate setup, review, or live-execution procedure.\n\n<!-- File: .github/skills/developer-code-organization/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# developer-code-organization\n\nPath: `.github/skills/developer-code-organization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-code-organization/SKILL.md)\n\n<!-- File: .github/skills/developer-internals/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# developer-internals\n\nPath: `.github/skills/developer-internals/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-internals/SKILL.md)\n\n<!-- File: .github/skills/developer-release/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# developer-release\n\nPath: `.github/skills/developer-release/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-release/SKILL.md)\n\n<!-- File: .github/skills/developer-security/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# developer-security\n\nPath: `.github/skills/developer-security/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer-security/SKILL.md)\n\n<!-- File: .github/skills/developer/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# developer\n\nPath: `.github/skills/developer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/github/gh-aw/HEAD/.github/skills/developer/SKILL.md)\n\n<!-- ... +142 more modular skills available via /api/skills/github/gh-aw?path={path} -->\n</yakaai_skills>"}