Skip to content

Suggestion: Generic, provider-agnostic scheduler for Squad #296

Closed

Description

@tamirdresher

Suggestion: Generic, Provider-Agnostic Scheduler for Squad

Hey @bradygaster — wanted to float an idea that came out of real-world Squad usage.

The Problem

Right now, Squad's scheduled work is scattered across multiple mechanisms:

  • GitHub Actions cron (e.g., daily digest, heartbeat workflows)
  • Local polling scripts (e.g., ralph-watch.ps1 with hardcoded 5-min intervals)
  • Manual triggers (workflow_dispatch for ad-hoc runs)

There's no unified view of what Squad is supposed to do regularly. Schedules are tightly coupled to their infrastructure, making it easy to forget tasks or lose them when switching environments.

The Proposal

A Squad Scheduler with a single .squad/schedule.json manifest that declares all recurring work, paired with provider adapters that handle execution:

Schedule manifest — declarative JSON defining:

  • Trigger types: cron, interval, event, startup, webhook
  • Task types: workflow (GitHub dispatch), script (local shell), copilot (agent session), webhook (HTTP), function (TypeScript)
  • Per-task config: retry policy, timeout, notification channels, tags

Provider adapters (plugin architecture):

  • github-actions — dispatch workflows via GitHub's scheduler
  • local-polling — ralph-watch.ps1 evaluates schedule.json each cycle
  • windows-scheduler — OS-level persistence via New-ScheduledTask
  • http-webhook — external trigger support
  • copilot-agent — dispatch Copilot sessions for complex work

Key features:

  • Single source of truth for all scheduled tasks
  • Provider fallback chains (e.g., GitHub Actions primary, local polling fallback)
  • Execution history and failure alerting
  • Lock file for de-duplication across concurrent instances
  • Clean migration path from existing ad-hoc schedules

Example (Minimal MVP)

json { "version": 1, "schedules": [ { "id": "ralph-heartbeat", "name": "Ralph Heartbeat", "enabled": true, "trigger": { "type": "interval", "intervalSeconds": 300 }, "task": { "type": "workflow", "ref": ".github/workflows/squad-heartbeat.yml" }, "providers": ["local-polling", "github-actions"] }, { "id": "daily-digest", "name": "Daily Digest", "enabled": true, "trigger": { "type": "cron", "expression": "0 8 * * *" }, "task": { "type": "workflow", "ref": ".github/workflows/squad-daily-digest.yml" }, "providers": ["github-actions"] } ] }

This came from issue tamirdresher_microsoft/tamresearch1#199. We have a full design doc ready and want to try it locally first, but figured it's worth tracking upstream. Would love your thoughts on whether this fits Squad's direction.

cc @bradygaster

Activity

  1. github-actions commented on Mar 9, 2026

    @github-actions
    Contributor

    📋 Assigned to Flight (Lead)

    Issue: #296 — Suggestion: Generic, provider-agnostic scheduler for Squad

    Flight will pick this up in the next Copilot session.

    For Copilot coding agent: If enabled, this issue will be worked automatically.
    Otherwise, start a Copilot session and say:
    Flight, work on issue #296

  2. github-actions commented on Mar 13, 2026

    @github-actions
    Contributor

    📋 Assigned to Flight (Lead)

    Issue: #296 — Suggestion: Generic, provider-agnostic scheduler for Squad

    Flight will pick this up in the next Copilot session.

    For Copilot coding agent: If enabled, this issue will be worked automatically.
    Otherwise, start a Copilot session and say:
    Flight, work on issue #296

  3. deleted a comment from github-actions on Mar 18, 2026
  4. added
    squadSquad triage inbox — Lead will assign to a member
    on Mar 20, 2026
  5. bradygaster commented on Mar 24, 2026

    @bradygaster
    Collaborator

    Closing — no demand signal beyond the original suggestion. If scheduling becomes a real need, it'll come back as a concrete feature request with a use case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority:p2Next sprintsquadSquad triage inbox — Lead will assign to a memberstatus:backlogBacklog itemtype:featureNew capability

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions