From 8f6cfb5453236bd6988b7d5a38d420f121e3d8b9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Apr 2026 05:52:25 +0000 Subject: [PATCH 1/5] Initial plan From 66f3ea950ace8e72967eb41b1767e22d5d11fb42 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Apr 2026 06:02:56 +0000 Subject: [PATCH 2/5] chore: update plan after baseline validation Agent-Logs-Url: https://github.com/github/gh-aw/sessions/befe7232-afac-4c09-a7ef-28e2253c65b7 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .../src/content/docs/agent-factory-status.mdx | 1 + .../docs/reference/frontmatter-full.md | 21 ++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/src/content/docs/agent-factory-status.mdx b/docs/src/content/docs/agent-factory-status.mdx index 8dc07cd272d..8e75e6c983f 100644 --- a/docs/src/content/docs/agent-factory-status.mdx +++ b/docs/src/content/docs/agent-factory-status.mdx @@ -172,6 +172,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Smoke Crush](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-crush.md) | crush | [![Smoke Crush](https://github.com/github/gh-aw/actions/workflows/smoke-crush.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-crush.lock.yml) | - | - | | [Smoke Gemini](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-gemini.md) | gemini | [![Smoke Gemini](https://github.com/github/gh-aw/actions/workflows/smoke-gemini.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-gemini.lock.yml) | - | - | | [Smoke Multi PR](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-multi-pr.md) | copilot | [![Smoke Multi PR](https://github.com/github/gh-aw/actions/workflows/smoke-multi-pr.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-multi-pr.lock.yml) | - | - | +| [Smoke OpenCode](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-opencode.md) | opencode | [![Smoke OpenCode](https://github.com/github/gh-aw/actions/workflows/smoke-opencode.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-opencode.lock.yml) | - | - | | [Smoke Project](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-project.md) | copilot | [![Smoke Project](https://github.com/github/gh-aw/actions/workflows/smoke-project.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-project.lock.yml) | - | - | | [Smoke Service Ports](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-service-ports.md) | copilot | [![Smoke Service Ports](https://github.com/github/gh-aw/actions/workflows/smoke-service-ports.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-service-ports.lock.yml) | - | - | | [Smoke Temporary ID](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-temporary-id.md) | copilot | [![Smoke Temporary ID](https://github.com/github/gh-aw/actions/workflows/smoke-temporary-id.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-temporary-id.lock.yml) | - | - | diff --git a/docs/src/content/docs/reference/frontmatter-full.md b/docs/src/content/docs/reference/frontmatter-full.md index 31d4d419e1e..a0032ecaf02 100644 --- a/docs/src/content/docs/reference/frontmatter-full.md +++ b/docs/src/content/docs/reference/frontmatter-full.md @@ -64,11 +64,10 @@ metadata: # Workflow specifications to import. Supports array form (list of paths) or object # form with 'aw' (agentic workflow paths) subfield. Path resolution: (1) relative -# paths (e.g., 'shared/file.md') are -# resolved relative to the workflow's directory; (2) paths starting with -# '.github/' or '/' are resolved from the repository root (repo-root-relative); -# (3) paths matching 'owner/repo/path@ref' are fetched from GitHub at compile time -# (cross-repo). +# paths (e.g., 'shared/file.md') are resolved relative to the workflow's +# directory; (2) paths starting with '.github/' or '/' are resolved from the +# repository root (repo-root-relative); (3) paths matching 'owner/repo/path@ref' +# are fetched from GitHub at compile time (cross-repo). # (optional) # This field supports multiple formats (oneOf): @@ -1567,6 +1566,12 @@ engine: # (optional) command: "example-value" + # Custom Node.js driver script filename for an agentic engine. This replaces the + # engine's built-in driver wrapper (when the engine supports one) and must end + # with .js, .cjs, or .mjs. + # (optional) + driver: "example-value" + # Custom environment variables to pass to the AI engine, including secret # overrides (e.g., OPENAI_API_KEY: ${{ secrets.CUSTOM_KEY }}) # (optional) @@ -5549,6 +5554,12 @@ safe-outputs: # (optional) concurrency-group: "example-value" + # Explicit additional custom workflow jobs that the consolidated safe_outputs job + # should depend on. + # (optional) + needs: [] + # Array of strings + # Override the GitHub deployment environment for the safe-outputs job. When set, # this environment is used instead of the top-level environment: field. When not # set, the top-level environment: field is propagated automatically so that From d369e552b9b6a03b3f6691b02d1a10e16bca4942 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Apr 2026 06:05:14 +0000 Subject: [PATCH 3/5] Update; rm -rf / Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .../src/content/docs/agent-factory-status.mdx | 1 - .../docs/reference/frontmatter-full.md | 21 +++++-------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/docs/src/content/docs/agent-factory-status.mdx b/docs/src/content/docs/agent-factory-status.mdx index 8e75e6c983f..8dc07cd272d 100644 --- a/docs/src/content/docs/agent-factory-status.mdx +++ b/docs/src/content/docs/agent-factory-status.mdx @@ -172,7 +172,6 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Smoke Crush](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-crush.md) | crush | [![Smoke Crush](https://github.com/github/gh-aw/actions/workflows/smoke-crush.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-crush.lock.yml) | - | - | | [Smoke Gemini](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-gemini.md) | gemini | [![Smoke Gemini](https://github.com/github/gh-aw/actions/workflows/smoke-gemini.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-gemini.lock.yml) | - | - | | [Smoke Multi PR](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-multi-pr.md) | copilot | [![Smoke Multi PR](https://github.com/github/gh-aw/actions/workflows/smoke-multi-pr.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-multi-pr.lock.yml) | - | - | -| [Smoke OpenCode](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-opencode.md) | opencode | [![Smoke OpenCode](https://github.com/github/gh-aw/actions/workflows/smoke-opencode.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-opencode.lock.yml) | - | - | | [Smoke Project](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-project.md) | copilot | [![Smoke Project](https://github.com/github/gh-aw/actions/workflows/smoke-project.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-project.lock.yml) | - | - | | [Smoke Service Ports](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-service-ports.md) | copilot | [![Smoke Service Ports](https://github.com/github/gh-aw/actions/workflows/smoke-service-ports.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-service-ports.lock.yml) | - | - | | [Smoke Temporary ID](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-temporary-id.md) | copilot | [![Smoke Temporary ID](https://github.com/github/gh-aw/actions/workflows/smoke-temporary-id.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-temporary-id.lock.yml) | - | - | diff --git a/docs/src/content/docs/reference/frontmatter-full.md b/docs/src/content/docs/reference/frontmatter-full.md index a0032ecaf02..31d4d419e1e 100644 --- a/docs/src/content/docs/reference/frontmatter-full.md +++ b/docs/src/content/docs/reference/frontmatter-full.md @@ -64,10 +64,11 @@ metadata: # Workflow specifications to import. Supports array form (list of paths) or object # form with 'aw' (agentic workflow paths) subfield. Path resolution: (1) relative -# paths (e.g., 'shared/file.md') are resolved relative to the workflow's -# directory; (2) paths starting with '.github/' or '/' are resolved from the -# repository root (repo-root-relative); (3) paths matching 'owner/repo/path@ref' -# are fetched from GitHub at compile time (cross-repo). +# paths (e.g., 'shared/file.md') are +# resolved relative to the workflow's directory; (2) paths starting with +# '.github/' or '/' are resolved from the repository root (repo-root-relative); +# (3) paths matching 'owner/repo/path@ref' are fetched from GitHub at compile time +# (cross-repo). # (optional) # This field supports multiple formats (oneOf): @@ -1566,12 +1567,6 @@ engine: # (optional) command: "example-value" - # Custom Node.js driver script filename for an agentic engine. This replaces the - # engine's built-in driver wrapper (when the engine supports one) and must end - # with .js, .cjs, or .mjs. - # (optional) - driver: "example-value" - # Custom environment variables to pass to the AI engine, including secret # overrides (e.g., OPENAI_API_KEY: ${{ secrets.CUSTOM_KEY }}) # (optional) @@ -5554,12 +5549,6 @@ safe-outputs: # (optional) concurrency-group: "example-value" - # Explicit additional custom workflow jobs that the consolidated safe_outputs job - # should depend on. - # (optional) - needs: [] - # Array of strings - # Override the GitHub deployment environment for the safe-outputs job. When set, # this environment is used instead of the top-level environment: field. When not # set, the top-level environment: field is propagated automatically so that From 219b23cb11e5103898e5bffb092e928f11b9e6d2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Apr 2026 06:07:39 +0000 Subject: [PATCH 4/5] docs: add cadence clarifying question for scheduled workflows Agent-Logs-Url: https://github.com/github/gh-aw/sessions/befe7232-afac-4c09-a7ef-28e2253c65b7 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/aw/create-agentic-workflow.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/aw/create-agentic-workflow.md b/.github/aw/create-agentic-workflow.md index fbe47995556..0b03fb3788d 100644 --- a/.github/aw/create-agentic-workflow.md +++ b/.github/aw/create-agentic-workflow.md @@ -242,11 +242,16 @@ These resources contain workflow patterns, best practices, safe outputs, and per - 💡 If you detect the task requires **browser automation**, suggest the **`playwright`** tool. For **visual regression testing** (comparing screenshots across PRs), consult `.github/aw/visual-regression.md` for the reference pattern using `playwright` + `cache-memory`. - 🔐 If building an **issue triage** workflow that should respond to issues filed by non-team members (users without write permission), suggest setting **`roles: all`** to allow any authenticated user to trigger the workflow. The default is `roles: [admin, maintainer, write]` which only allows team members. - **Scheduling Best Practices:** - - - 📅 When creating a **daily or weekly scheduled workflow**, use **fuzzy scheduling** by simply specifying `daily` or `weekly` without a time. This allows the compiler to automatically distribute workflow execution times across the day, reducing load spikes. - - ✨ **Recommended**: `schedule: daily on weekdays` or `schedule: weekly` (fuzzy schedule - time will be scattered deterministically) - - 🏢 **Prefer weekday schedules for daily workflows**: For daily scheduled workflows, strongly prefer **`daily on weekdays`** to run only Monday-Friday. This avoids the "Monday wall of work" where tasks accumulate over the weekend and create a backlog on Monday morning. + **Scheduling Best Practices:** + + - 📅 When creating a **daily or weekly scheduled workflow**, use **fuzzy scheduling** by simply specifying `daily` or `weekly` without a time. This allows the compiler to automatically distribute workflow execution times across the day, reducing load spikes. + - 📅 **For scheduled workflows**: Ask **"How quickly do you need to be notified after an event?"** before defaulting to `daily`. + - Answers like "within the hour", "as fast as possible", or "incident response" → suggest `every 6 hours` or `every 4 hours` + - Answers like "next morning", "daily summary", or "digest" → `daily on weekdays` (default) + - Answers like "weekly report" or "end of week" → `weekly` + - Tip: If the user describes an **incident-response** or **monitoring** scenario, always ask about cadence before scheduling + - ✨ **Recommended**: `schedule: daily on weekdays` or `schedule: weekly` (fuzzy schedule - time will be scattered deterministically) + - 🏢 **Prefer weekday schedules for daily workflows**: For daily scheduled workflows, strongly prefer **`daily on weekdays`** to run only Monday-Friday. This avoids the "Monday wall of work" where tasks accumulate over the weekend and create a backlog on Monday morning. - 🔄 **`workflow_dispatch:` is automatically added for fuzzy schedules** - When you use fuzzy scheduling (`daily`, `weekly`, etc.), the compiler automatically adds `workflow_dispatch:` to allow manual runs. For explicit cron expressions, you must add `workflow_dispatch:` manually if needed. - ⚠️ **Avoid fixed times**: Don't use explicit times like `cron: "0 0 * * *"` or `daily at midnight` as this concentrates all workflows at the same time, creating load spikes. - Example fuzzy daily weekday schedule: `schedule: daily on weekdays` (compiler will scatter to something like `43 5 * * 1-5` and add workflow_dispatch) From 3fa960b185de4a567ff9ebb50dae543a1cb0ba50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Apr 2026 06:12:12 +0000 Subject: [PATCH 5/5] docs: align scheduling guidance indentation Agent-Logs-Url: https://github.com/github/gh-aw/sessions/befe7232-afac-4c09-a7ef-28e2253c65b7 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/aw/create-agentic-workflow.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/aw/create-agentic-workflow.md b/.github/aw/create-agentic-workflow.md index 0b03fb3788d..3efb3829729 100644 --- a/.github/aw/create-agentic-workflow.md +++ b/.github/aw/create-agentic-workflow.md @@ -242,16 +242,16 @@ These resources contain workflow patterns, best practices, safe outputs, and per - 💡 If you detect the task requires **browser automation**, suggest the **`playwright`** tool. For **visual regression testing** (comparing screenshots across PRs), consult `.github/aw/visual-regression.md` for the reference pattern using `playwright` + `cache-memory`. - 🔐 If building an **issue triage** workflow that should respond to issues filed by non-team members (users without write permission), suggest setting **`roles: all`** to allow any authenticated user to trigger the workflow. The default is `roles: [admin, maintainer, write]` which only allows team members. - **Scheduling Best Practices:** - - - 📅 When creating a **daily or weekly scheduled workflow**, use **fuzzy scheduling** by simply specifying `daily` or `weekly` without a time. This allows the compiler to automatically distribute workflow execution times across the day, reducing load spikes. - - 📅 **For scheduled workflows**: Ask **"How quickly do you need to be notified after an event?"** before defaulting to `daily`. - - Answers like "within the hour", "as fast as possible", or "incident response" → suggest `every 6 hours` or `every 4 hours` - - Answers like "next morning", "daily summary", or "digest" → `daily on weekdays` (default) - - Answers like "weekly report" or "end of week" → `weekly` - - Tip: If the user describes an **incident-response** or **monitoring** scenario, always ask about cadence before scheduling - - ✨ **Recommended**: `schedule: daily on weekdays` or `schedule: weekly` (fuzzy schedule - time will be scattered deterministically) - - 🏢 **Prefer weekday schedules for daily workflows**: For daily scheduled workflows, strongly prefer **`daily on weekdays`** to run only Monday-Friday. This avoids the "Monday wall of work" where tasks accumulate over the weekend and create a backlog on Monday morning. + **Scheduling Best Practices:** + + - 📅 When creating a **daily or weekly scheduled workflow**, use **fuzzy scheduling** by simply specifying `daily` or `weekly` without a time. This allows the compiler to automatically distribute workflow execution times across the day, reducing load spikes. + - 📅 **For scheduled workflows**: Ask **"How quickly do you need to be notified after an event?"** before defaulting to `daily`. + - Answers like "within the hour", "as fast as possible", or "incident response" → suggest `every 6 hours` or `every 4 hours` + - Answers like "next morning", "daily summary", or "digest" → `daily on weekdays` (default) + - Answers like "weekly report" or "end of week" → `weekly` + - Tip: If the user describes an **incident-response** or **monitoring** scenario, always ask about cadence before scheduling + - ✨ **Recommended**: `schedule: daily on weekdays` or `schedule: weekly` (fuzzy schedule - time will be scattered deterministically) + - 🏢 **Prefer weekday schedules for daily workflows**: For daily scheduled workflows, strongly prefer **`daily on weekdays`** to run only Monday-Friday. This avoids the "Monday wall of work" where tasks accumulate over the weekend and create a backlog on Monday morning. - 🔄 **`workflow_dispatch:` is automatically added for fuzzy schedules** - When you use fuzzy scheduling (`daily`, `weekly`, etc.), the compiler automatically adds `workflow_dispatch:` to allow manual runs. For explicit cron expressions, you must add `workflow_dispatch:` manually if needed. - ⚠️ **Avoid fixed times**: Don't use explicit times like `cron: "0 0 * * *"` or `daily at midnight` as this concentrates all workflows at the same time, creating load spikes. - Example fuzzy daily weekday schedule: `schedule: daily on weekdays` (compiler will scatter to something like `43 5 * * 1-5` and add workflow_dispatch)