Skip to content

feat: Machine Capability Discovery & Label-Based Issue Routing for Ralph #514

Closed

Description

@tamirdresher

Feature: Machine Capability Discovery & Label-Based Issue Routing

Problem

When running Squad across heterogeneous machines (laptop, DevBox, GPU server, AKS nodes), different machines have different capabilities. A laptop might have browser automation but no GPU. A DevBox might have Azure CLI auth but no WhatsApp session. Ralph picks up any issue regardless of whether the machine can handle it.

This causes failed agent runs, wasted API quota, and manual reassignment.

Proposed Solution

1. Capability Discovery — A script probes the machine and writes ~/.squad/machine-capabilities.json:

{
  "machine": "DESKTOP-ABC123",
  "capabilities": ["browser", "emu-gh", "onedrive", "teams-mcp"],
  "missing": ["gpu", "whatsapp", "personal-gh", "azure-speech"],
  "last_updated": "2026-03-22T10:30:00Z"
}

Discoverable capabilities: personal-gh, emu-gh, browser, gpu, whatsapp, onedrive, azure-speech, teams-mcp.

2. needs:* Label System — Issues tagged needs:gpu, needs:browser etc. are only picked up by Ralph instances with those capabilities. If ANY required capability is missing, Ralph skips the issue silently.

3. Kubernetes Integration — On K8s, capabilities map to node labels (node.squad.dev/gpu=true). A DaemonSet runs discovery on each node. Pod specs use nodeSelector for scheduling.

Implementation Available

I have this running in production on AKS with 8 needs:* labels. The pattern works with both file-based (laptop) and K8s-native (cluster) deployments. Happy to contribute as a PR.

References

Activity

  1. added a commit that references this issue on Mar 23, 2026
    dafc495
  2. added a commit that references this issue on Mar 23, 2026
  3. added a commit that references this issue on Mar 26, 2026
    9d2e81d
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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions