Skip to content

feat: persistent Ralph — wire squad watch + enable heartbeat cron #236

Closed

Description

@tamirdresher

Feature: Persistent Ralph — continuous work monitoring between sessions

Problem

Ralph runs in a loop during a Copilot session but stops when the session ends. There's no way to keep Ralph monitoring between sessions. Additionally, squad watch is implemented (356 lines in watch.ts) but not wired into the CLI, so users can't invoke it.

Current State

Three layers of Ralph exist but two are broken:

Layer Status Issue
In-session ✅ Works Ralph loops while you're in a Copilot session
Local watchdog (squad watch) ❌ Not wired watch.ts is built but cli-entry.ts logs "pending" instead of calling it
Cloud heartbeat (GitHub Actions) ❌ Cron disabled squad-heartbeat.yml has the cron schedule commented out

Proposed Solution

Phase 1: Wire squad watch into CLI (same pattern as #224)

  • Route watch command in cli-entry.ts to the existing watch.ts implementation
  • Add --interval N flag (default 10 min) for polling frequency
  • Add help text entry

Phase 2: Enable heartbeat cron

  • Uncomment cron schedule in squad-heartbeat.yml (default: every 30 min)
  • Document recommended intervals for different team sizes

Phase 3: Daemon/service support (future)

  • PM2 integration for local persistent daemon
  • systemd unit file for Linux servers
  • Windows Task Scheduler support
  • Container-based deployment option

Approaches Considered

Approach Pros Cons
squad watch (foreground) Simple, portable, already built Dies when terminal closes
GitHub Actions cron Free, no infra, already built 30-min minimum interval, limited to GitHub repos
PM2/systemd daemon Survives reboots, proper service Requires PM2/systemd knowledge
OS scheduled task (cron/Task Scheduler) Native, no dependencies Platform-specific setup
Docker container Portable, isolated Requires Docker

Acceptance Criteria

  • squad watch works from CLI with --interval flag
  • Heartbeat cron is enabled with configurable schedule
  • Documentation covers all three Ralph layers
  • Ralph detects platform (GitHub/ADO) and uses correct commands

Activity

  1. added a commit that references this issue on Mar 7, 2026
    8766b04
  2. github-actions commented on Mar 7, 2026

    @github-actions
    Contributor

    📋 Assigned to Fenster (Core Dev)

    Issue: #236 — feat: persistent Ralph — wire squad watch + enable heartbeat cron

    Fenster 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:
    Fenster, work on issue #236

  3. github-actions commented on Mar 7, 2026

    @github-actions
    Contributor

    🏗️ Squad Triage — Keaton (Lead)

    Issue: #236 — feat: persistent Ralph — wire squad watch + enable heartbeat cron
    Assigned to: Cheritto (TUI Engineer)
    Reason: Issue relates to frontend/UI work

    @copilot evaluation: 🔴 Not suitable — issue involves work outside the coding agent's capability profile.

    Team roster:

    • Keaton (Lead) → label: squad:keaton
    • Verbal (Prompt Engineer) → label: squad:verbal
    • Fenster (Core Dev) → label: squad:fenster
    • Hockney (Tester) → label: squad:hockney
    • McManus (DevRel) → label: squad:mcmanus
    • Kujan (SDK Expert) → label: squad:kujan
    • Edie (TypeScript Engineer) → label: squad:edie
    • Kobayashi (Git & Release) → label: squad:kobayashi
    • Fortier (Node.js Runtime) → label: squad:fortier
    • Rabin (Distribution) → label: squad:rabin
    • Baer (Security) → label: squad:baer
    • Redfoot (Graphic Designer) → label: squad:redfoot
    • Strausz (VS Code Extension) → label: squad:strausz
    • Saul (Aspire & Observability) → label: squad:saul
    • Kovash (REPL & Interactive Shell) → label: squad:kovash
    • Marquez (CLI UX Designer) → label: squad:marquez
    • Cheritto (TUI Engineer) → label: squad:cheritto
    • Breedan (E2E Test Engineer) → label: squad:breedan
    • Nate (Accessibility Reviewer) → label: squad:nate
    • Waingro (Product Dogfooder) → label: squad:waingro
    • Ralph (Work Monitor) → label: squad:ralph
    • @copilot (Coding Agent) → label: squad:copilot

    To reassign, remove the current squad:* label and add the correct one.

  4. 7 remaining items

  5. github-actions commented on Mar 13, 2026

    @github-actions
    Contributor

    📋 Assigned to EECOM (Core Dev)

    Issue: #236 — feat: persistent Ralph — wire squad watch + enable heartbeat cron

    EECOM 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:
    EECOM, work on issue #236

  6. diberry commented on Mar 31, 2026

    @diberry
    Contributor

    🔄 Ralph status: Feature — persistent Ralph (watch + heartbeat cron). Partially addressed by PR #709 (watch upgrade). Note: decisions.md says no cron jobs in GitHub Actions — use CLI watch mode instead.

  7. added a commit that references this issue on Apr 12, 2026
    8ff1531
  8. bradygaster commented on Apr 18, 2026

    @bradygaster
    Collaborator

    Closing as we've got watch and loop now.

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

    go:needs-researchNeeds investigationpriority:p2Next sprintsquadSquad triage inbox — Lead will assign to a member

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions