通过 GitHub Actions 定时触发 Copilot Cloud Agent

背景

Copilot Cloud Agent(原 Copilot Coding Agent)可以被 assign 到 issue 上自动执行任务。结合 GitHub Actions 的 schedule 触发器,可以实现定时自动化。

核心机制

Copilot Agent 的触发条件:

  1. Issue 必须由 trusted context 创建(即 GITHUB_TOKEN),PAT 创建的 issue 不会触发 agent
  2. copilot-swe-agent[bot] 必须被 assign 到 issue 上
  3. GITHUB_TOKEN 没有权限 assign copilot-swe-agent[bot],需要用 PAT

因此需要 两步法

  • Step 1:用 GITHUB_TOKEN 创建 issue(确保 trusted context)
  • Step 2:用 PAT 调用 API assign agent

Workflow 模板

name: Scheduled Agent Task
 
on:
  schedule:
    - cron: "0 9 * * 0"  # 每周日 09:00 UTC
  workflow_dispatch:       # 手动触发
 
permissions:
  issues: write  # GITHUB_TOKEN 默认无 issue 写权限,必须显式声明
 
jobs:
  create-issue:
    runs-on: ubuntu-latest
    steps:
      - name: Create issue
        id: create
        uses: actions/github-script@v7
        with:
          # 默认使用 GITHUB_TOKEN(trusted context)
          script: |
            const today = new Date().toISOString().slice(0, 10);
            const { data: issue } = await github.rest.issues.create({
              owner: context.repo.owner,
              repo: context.repo.repo,
              title: `My scheduled task ${today}`,
              body: 'Task description for the agent.',
            });
            core.setOutput('issue-number', issue.number);
 
      - name: Assign Copilot agent
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.GH_AW_AGENT_TOKEN }}  # PAT
          script: |
            await github.rest.issues.addAssignees({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: ${{ steps.create.outputs.issue-number }},
              assignees: ['copilot-swe-agent[bot]'],
            });

踩坑记录

1. PAT 创建的 issue 不触发 agent

现象:issue 创建成功,agent 也被 assign,但 agent 无反应(无 👀 reaction,无 session)。

原因:Copilot Agent 的 webhook 只响应 trusted token(GITHUB_TOKEN)产生的事件,PAT 创建的事件被视为用户行为,不触发 agent。

解决:两步法——GITHUB_TOKEN 建 issue,PAT assign agent。

2. GITHUB_TOKEN 缺少 issues 写权限

现象HttpError: Resource not accessible by integration

原因:GitHub Actions 默认的 GITHUB_TOKEN 权限集不含 issues: write

解决:在 workflow 顶层或 job 级别添加 permissions: issues: write

3. PAT 会自动把 owner 加入 assignees

现象:issue 的 assignees 除了 copilot-swe-agent[bot],还包含 PAT 所属用户。

原因:GitHub API 在用 PAT 添加 assignees 时会自动把 PAT 拥有者也加上。

影响:无功能影响,仅视觉上多一个 assignee。

PAT 配置要求

在 repo Settings → Secrets and variables → Actions 中添加 PAT secret(如 GH_AW_AGENT_TOKEN)。

PAT 需要的权限:

  • repo scope(classic PAT)
  • Issues: Read and write + Members: Read(fine-grained PAT)

验证 Agent 是否响应

Agent 开始工作的信号:

  1. Issue 上出现 👀 reaction
  2. Issue 页面显示 “Agent sessions: N session running”
  3. Agent 创建 Draft PR

如果 assign 后 5 分钟无响应,尝试 unassign 再 reassign。

参考