skills: Relayflows v2 authoring friction, 12.4 PR-owner subscribe, and the v1 deprecation

Merged
KH
6d ago
+581-563

Scope: this PR now also contains #108, and deprecates the v1 workflow skill

#108 is closed and merged in here (f41e050) so the two land as one PR — no SKILL.md overlap between them; see the fold comment for the full write-up.

Added on top of the original scope below:

  • orchestrating-agent-relay 2.3.1 → 2.4.0 (from #108) — subscribe the live PR-owner agent to the PR's GitHub provider resources the moment a PR number exists; rebinding after respawn, no duplicate writable helper subscriptions, unsubscribe/release hygiene, verify delivery rather than binding creation, plus the 12.4 CLI corrections.
  • writing-agent-relay-workflows 1.6.24 → 2.0.0 — DEPRECATED. It documents the superseded v1 @relayflows/core WorkflowBuilder engine. A notice at the top of SKILL.md, and in the frontmatter description / prpm.json description / README row (that description is what an agent picks a skill on), points new work at writing-relayflows for the v2 authoring surface and relay-80-100-workflow for the v2 validation shape. All v1 reference material stays intact below the notice.
  • migrating-persona-to-relayflow 1.0.0 → 1.1.0 — same pointer, and its stale "v2 is still under construction" bullet corrected.
  • relay-80-100-workflow → 2.1.0 — two engine-independent lessons retargeted out of the v1 skill: don't add a repair step to a gate with nothing to repair, and grade computable things deterministically, never with an LLM. The idle-detection / per-turn-spawn material is genuinely v1-only (v2 has no interactive channel agents) and stayed put.
  • writing-relayflows 1.2.0 → 1.3.0 — reconciles "always gate an agent step" with this PR's "enforce after the agent, not on it." The two skills contradicted each other.
  • agent-relay-starter collection 1.1.0 → 1.2.0 — writing-relayflows replaces the deprecated skill as the required workflow-authoring package.
  • Root agent-workforce-skills 1.5.0 → 1.6.0.

All 14 open review threads here, and all 3 on #108, are answered inline.

🤖 Generated with Claude Code


What this is

Friction found while authoring a real Relayflows v2 flow — a 58-step native-delivery migration campaign for AgentWorkforce/relay (flows/migrate/native-delivery.spec.ts), run against CLI 2.0.22 — plus the corroborated findings from the Relayflows v2 Field Report (2026-09-18, Julian Fann).

Two things in here each cost a full run, and neither skill mentioned them.

writing-relayflows 1.0.0 → 1.1.0

--local-agent is required for any local run with an agent step. Without it the run parks at the first agent step with a message that reads as your infrastructure is missing a worker, not pass this flag. Plus the three sharp edges around it:

  • the remedy is appended only for flows run on a YAML/JSON spec path — a .flow.ts gets no hint, and flows resume never does (packages/sdk/src/cli/run.ts:627-640);
  • flows resume --local-agent <run-id> accepts the flag and ignores it on a spec run (resumeFlow attaches a worker only on the authored-TS path, run.ts:209), so it parks again identically;
  • flows schedule has no --local-agent at all, so a scheduled agent flow parks forever on a timer.

A failing subprocess_gate tells you nothing. The lowering runs the command under stdio: 'inherit' and the daemon's stdio is captured nowhere. My implement-rust step succeeded and journaled all four required sources; its gate then failed three times and exhausted retries, reporting:

{"completionReason":"retries_exhausted","output":{"exit_code":1,"stderr_tail":"","stdout_tail":""}}

The gate command prints a verdict on every path. That verdict was in none of: the journal, .relayflowd/relayflowd.log (0 bytes), the CLI output. The skill now says to prefer artifact_exists/regex_match, and to put enforcement in a deterministic step after the agent rather than in a gate on it.

Also corrected:

  • eight gate types, not three (regex_match, artifact_exists, subprocess_gate, references_input, word_count_bounds were all missing), plus the TypeScript .gate() postfix form on Step<T>;
  • the three-argument flow(name, header, body) and where a TypeScript budget lives;
  • f.run's default lease is 30s, max 15m (packages/surface/src/context.ts:60) — invisible in the documented signature and long enough to bite git fetch, cargo build or gh pr create in their bad case;
  • there is no failOnError: false — both workarounds documented, with why || true is the weaker one;
  • permissions is journaled and not enforced, and options.cwd is declared by surface+sdk and rejected by the runtime at the same version;
  • a green flows check says nothing about whether the daemon will accept the spec, so budget a shakedown run and treat green unit tests plus CHECK PASSED as necessary but not sufficient.

relay-80-100-workflow 1.0.9 → 1.1.0

Every code example in it is the v1 builder (failOnError, captureOutput, {{steps.X.output}}, .onError()). None of those exist in v2, so following the skill literally for a v2 flow produces something that will not compile. Added:

  • an up-front statement of which engine the examples are;
  • a v1→v2 translation table;
  • the evidence-recorder pattern that replaces failOnError + captureOutput + {{steps.X.output}} — a script that runs a command, journals {name, command, exitCode, verdict, tail} and always exits 0, with a require-green gate reading it back. This is what I actually had to build, and it buys something v1 didn't: final acceptance recomputes green from recordings instead of trusting an agent's report;
  • "don't gate agent steps in v2", for the reason above;
  • two anti-pattern rows.

Verification

Every claim is cited to a file and line in AgentWorkforce/flows@e73b315e (CLI 2.0.22) or to an observed run — I checked each one against the tree rather than repeating the field report. Where a finding is the report's and I could not cheaply re-derive it (the f.gitlab writeback catalog), it is attributed and the part I did verify (providers.ts marking both supported: true identically) is what's cited.

Upstream issues filed from the same material: AgentWorkforce/flows#502–#511, all labelled factory-ready.

Both package descriptions stay under the 500-character limit that #105 fixed (475 and 492).

🤖 Generated with Claude Code


[!NOTE]
Low Risk
Documentation and package metadata only; no runtime code paths change, though mis-routed agents could follow wrong engine guidance until packages are republished.

Overview
This PR repositions the skills repo around Relayflows v2 and bumps the root package to 1.7.0, with coordinated prpm.json / README version and description updates.

Deprecation and routing: writing-agent-relay-workflows is marked DEPRECATED (2.0.0) for the v1 @relayflows/core WorkflowBuilder; new work is directed to writing-relayflows and relay-80-100-workflow. The agent-relay-starter collection now requires @agent-relay/writing-relayflows and lists the v1 skill as optional. migrating-persona-to-relayflow (1.1.0) clarifies v1 vs v2 and drops the stale “v2 under construction” wording.

relay-80-100-workflow (2.1.0) is rewritten for v2 flows: the evidence recorder (record / require-green, runId stamping) replaces v1 failOnError / captureOutput, plus edit/hazard gates, gate cross-checks, fresh-eyes review, and explicit guidance on when not to add repair steps or use LLMs as graders.

writing-relayflows (1.4.0) is reconciled with @relayflows/surface / @relayflows/sdk 2.0.22: permissions (journaled, unenforced), working predicate / artifact_exists gates, executable f.human (while f.dispatch still isn’t), and enforce-after-agent vs terminal gates aligned with the 80–100 skill. The v1 workflow skill picks up matching repair/LLM-grading cautions and idle-detection / per-turn spawn notes.

orchestrating-agent-relay (2.4.0) adds GitHub PR-owner integration subscribe (four globs, rebinding after respawn, no helper duplicate bindings, unsubscribe before release, verify real events not just --list), plus fleet inventory/release and expanded troubleshooting.

Reviewed by Cursor Bugbot for commit b373c76ea82ae05644d2317b7e5e9c79de71999c. Bugbot is set up for automated code reviews on this repo. Configure here.


Agent Relay sessions

  • claude session a2501064 · contributor · pushed commits · last active 2026-09-21
  • claude session a32d0191 · contributor · ran gh pr commands · last active 2026-09-21
  • claude session a5de37a1 · contributor · ran gh pr commands · last active 2026-09-21