Skip to content
Back to skills

Relay To Issue

ASecurity

Turn a finished /relay producer↔reviewer thread into a single checklist-style GitHub issue, filed in the repo the relay was actually about. Reviews the relay transcript, summarizes the conclusion (including agreements AND unresolved disagreements), and synthesizes the actionable findings into a markdown checklist issue body so each box can be spun off into a quick task. Use when the operator says "file this relay as an issue", "turn the relay into a GitHub issue", "open an issue from the rela...

  • 5 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 25, 2026
ai-agentsbashgit

Works with

  • cli

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 25, 2026

npx -y skills add HiQS-Labs/XYZ-forge --skill relay-to-issue --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Relay To Issue?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Relay To Issue
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hiqs-labs-relay-to-issue/badge)](https://www.skillsdirectory.com/skills/hiqs-labs-relay-to-issue)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: relay-to-issue
description: >-
  Turn a finished /relay producer↔reviewer thread into a single checklist-style
  GitHub issue, filed in the repo the relay was actually about. Reviews the relay
  transcript, summarizes the conclusion (including agreements AND unresolved
  disagreements), and synthesizes the actionable findings into a markdown
  checklist issue body so each box can be spun off into a quick task. Use when
  the operator says "file this relay as an issue", "turn the relay into a GitHub
  issue", "open an issue from the relay review", "spin the review into tasks",
  "capture the relay follow-ups", or asks for the actionable summary of a relay
  to land in a repo's GitHub issues — typically AFTER a relay closes. Auto-detects
  the newest relay-system/<date>/<slug>.md thread (or takes a path/slug), resolves
  the target repo (cross-repo aware), dedups against an already-filed issue, and
  auto-posts via `gh`. NOT for scaffolding or running a relay (that is /relay or
  /relay-xyz); this runs once a relay has produced a thread.
---

# relay-to-issue

Convert a closed relay thread into one trackable GitHub issue: a short conclusion
plus a markdown checklist of the actionable follow-ups, posted to the right repo.

**Split of work:** the shipped `relay-to-issue.sh` does the deterministic plumbing
(locate the thread, resolve which repo, dedup, preflight `gh`, create the issue,
stamp provenance back). **You** do the judgment — reading the transcript and writing
the title + body. Don't reimplement the plumbing inline; call the script.

`SKILLDIR` below = this skill's directory (where this file and `relay-to-issue.sh`
live). Always call the script by its absolute path so it resolves from any CWD.

---

## Step 1 — Resolve + preflight (always first)

```bash
bash "$SKILLDIR/relay-to-issue.sh" resolve            # newest thread
bash "$SKILLDIR/relay-to-issue.sh" resolve --thread 2026-06-22/dueling-claudes
```

Read the printed block and gate on it **before reading the thread**:

- `GH_AUTH: missing` → STOP. Tell the operator to run `gh auth login`; do nothing else.
- `ALREADY_FILED: <url>` (not `NONE`) → STOP. This thread was already filed — report
  the existing URL. Only proceed if the operator explicitly wants a second issue
  (then pass `--force` in Step 4).
- `TARGET_REPO: AMBIGUOUS` → the thread cites paths in more than one repo. Show the
  `TARGET_CANDIDATES` and ask the operator which repo (or to add a `TARGET-REPO: owner/name`
  header to the thread). Pass the chosen repo as `--repo owner/name` in Step 4.
- `TARGET_REPO: UNRESOLVED` → ask the operator for `--repo owner/name`.
- Otherwise note `TARGET_REPO` + `TARGET_SOURCE` (explicit / declared / inferred /
  current-repo). If `inferred`, state which repo you're about to file into so a wrong
  inference is visible before posting.

## Step 2 — Read the thread

Read the resolved `THREAD` file in full — every block under `## Log`. Identify the two
roles (Producer/Reviewer, or Reporter/Maintainer) and **every graded finding**
(`[Blocker]` / `[Should]` / `[Nit]` / `[Pass]`) and its disposition.

## Step 3 — Empty-relay guard (don't file noise)

If the relay closed `Approved`/`Closed` with **no** `[Blocker]`/`[Should]` items, no
parked/disagreed items, and nothing actionable left to do → **STOP. Do not create an
issue.** Report: "Relay closed clean — no actionable items, nothing filed." A hollow
issue is worse than none.

## Step 4 — Write the body and file it

Write the issue body to a temp file using the template below, then file:

```bash
bash "$SKILLDIR/relay-to-issue.sh" file \
  --thread "<abs thread path from resolve>" \
  --title  "Relay follow-ups: <slug> — <one-line gist>" \
  --body-file "$TMPDIR/relay-issue-body.md" \
  --labels relay-followup
  # [--repo owner/name]  only if resolve said AMBIGUOUS/UNRESOLVED
  # [--inbox]            also drop a PROJECT/1-INBOX/GH-<n> pointer (only when the
  #                      issue lands in THIS repo) — keeps the ledger closed-loop
  # [--force]            file a second issue for a thread already filed
```

The script auto-posts, prints the issue URL, and appends a provenance+dedup stamp to
the thread (`<!-- relay-to-issue: filed <url> @ <hash> on <date> -->`). Report the URL
to the operator.

### Issue body template

```markdown
## Relay follow-ups — <slug>

**Source:** `relay-system/<date>/<slug>.md` @ `<HEAD short hash>` · target repo `<owner/name>`
**Outcome:** <Closed | Approved | Changes requested> after <N> round(s) · Producer `<id>` ↔ Reviewer `<id>`

### Conclusion
<2–4 sentences: what the two agents concluded, and whether they converged.>

**Agreed / dispositioned**
- <finding that was accepted, fixed, or explicitly declined-with-reason>

**Disagreements / parked** (or "None")
- ⚠️ <unresolved point — also appears as a DECIDE box below>

### Actionable checklist
- [ ] <task> — `[Blocker]` _(Round N)_
- [ ] <task> — `[Should]` _(Round N)_
- [ ] ⚠️ DECIDE: <unresolved/disagreed item> _(needs a human call)_
- [ ] <optional cleanup> — `[Nit]` _(Round N)_

<!-- Each box is a spin-off-ready task. Generated by relay-to-issue. -->
```

**Body rules**
- One issue, one checklist (the operator's chosen shape). Every box must be a concrete,
  independently-actionable task — not a restatement of a whole round.
- Keep `[Blocker]` and `[Should]` items; fold `[Nit]`s in only if genuinely worth doing.
- Never drop a disagreement or parked item — surface it as a `⚠️ DECIDE` box.
- Preserve grades and cite the source round so each task is traceable.

---

## Cross-repo notes

- The "repo the relay was about" is the repo whose files were under review — often **not**
  the harness repo (relays can review a foreign repo; see GH-11 cross-repo targeting).
- Threads don't declare their subject repo in a machine-readable field today, so the script
  **infers** it from the absolute paths cited in the thread. To make it explicit and remove
  any ambiguity, add a header line to the thread: `TARGET-REPO: owner/name`. That always wins
  over inference.
- The script **never auto-posts to a guessed repo**: if paths point at more than one repo it
  exits ambiguous and asks for `--repo`.

## Prerequisites

- `gh` installed and authenticated (`gh auth login`), with access to the target repo.
- Run un-sandboxed if `gh` needs the keychain.

## What this skill does NOT do

- It does not scaffold or run a relay — that's `/relay` (portable) or `/relay-xyz` (this repo's
  harness). This is the **post-relay** step.
- It does not edit code or the thread's review content — its only writes are the issue, the
  one-line provenance stamp, and (opt-in) a 1-INBOX pointer.

Files in this skill

  • SKILL.md6.6 KB
  • install.sh2.4 KB
  • relay-to-issue.sh12.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…