Sm Github
The GitHub-issues state engine for the machine loop: a pure-JS SM (scrum-master) rule pack that reconciles issue/PR state every tick — re-fires dead dev/rework legs on red CI, dispatches review when a developed PR goes green, and merges approved PRs oldest-first (FIFO) one per tick. State lives in issue/PR labels; the engine is deterministic (no LLM).
Parameters
Configured via customParams in the agent JSON or the project .dmtools/config.js (project values win).
repository— targetowner/repothe rules reconcile.workflowFile— the runner workflow dispatched for legs (defaultai-teammate.yml).removeLabel/removeLabels— label(s) stripped from the issue after the rule fires (idempotency).localTeammate— run the target config’s action in-process instead of dispatching a workflow.branchPrefix— PR head-branch prefix linking PRs togh-<n>issues (defaultai/gh-).maxWorkflows— global dispatch cap per tick (default 1).dryRun— log the plan without acting.
Labels
The machine’s state lives in labels; two are owner-facing semantics worth knowing:
blocked— human hold: the item is invisible to EVERY rule (all legs) until a human removes the label.validation_failed— sticky guest park (owner 2026-09-27, live: fa#923 — a guest PR cycled arm→CI red→silent-update→re-arm every tick, holding the validate-armed limit-1 slot hostage). The silent-update action sets it on a GUEST PR whose current head has red checks; while it is set the PR is excluded from the validate-armed arm queue and NO validation CI is dispatched for it at all. It is removed only when the head’s last committer is NOTsm-silent-update— i.e. an author push; the SM’s own silent-update merges never clear it. Machine-authored PRs never carry the label (their heads are pushed by the machine; they re-enter validation on a new head as usual).
Human doc: agents/docs/agents/sm_github.md
Attributes
| Attribute | Value |
|---|---|
| Job | JSRunner |
| Config | sm_github.json |
| ContextId | — |
| outputType | — |
| skipAIProcessing | false |
Actions
LLM step
- outputType:
none
Generated by js/agentDocGenerator.js