{"id":50226072,"url":"https://github.com/bencode/relay","last_synced_at":"2026-05-26T15:46:38.077Z","repository":{"id":359914088,"uuid":"1247347766","full_name":"bencode/relay","owner":"bencode","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-24T04:59:12.000Z","size":32,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T15:46:35.536Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bencode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-23T07:31:27.000Z","updated_at":"2026-05-24T04:59:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bencode/relay","commit_stats":null,"previous_names":["bencode/relay"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bencode/relay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bencode%2Frelay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bencode%2Frelay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bencode%2Frelay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bencode%2Frelay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bencode","download_url":"https://codeload.github.com/bencode/relay/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bencode%2Frelay/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33528089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"ssl_error","status_checked_at":"2026-05-26T15:22:15.568Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-26T15:46:36.848Z","updated_at":"2026-05-26T15:46:38.066Z","avatar_url":"https://github.com/bencode.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# relay\n\nAn **AI-agent collaboration skill for GitHub Issues**. It teaches Claude Code (and any agent that reads SKILL.md) to collaborate on GitHub Issues by a fixed set of conventions: verifiable issue structure, a lifecycle state machine, and two-stage acceptance (machine `verify` + human acceptance).\n\nThe source of truth is **GitHub Issues**, driven entirely by the `gh` CLI; multi-step logic (lint / verify / close) goes through the bundled `relay.py`. **No local issue files, ever.**\n\n## Install\n\n### Recommended: transparent steps (agents use these too)\n\nHand the repo URL (`https://github.com/bencode/relay`) to Claude Code / an agent and ask it to \"install relay into this project per the README\". Run these from the **target project root** (each command is readable and individually approvable — no `curl | bash` needed):\n\n```bash\ngit clone --depth 1 https://github.com/bencode/relay /tmp/relay\nmkdir -p .claude/skills \u0026\u0026 cp -r /tmp/relay/skills/relay .claude/skills/ \u0026\u0026 rm -rf /tmp/relay\nbash .claude/skills/relay/init-labels.sh      # ① create the 7 labels on this repo (idempotent)\nbash .claude/skills/relay/setup-check.sh       # ② self-check: gh / auth / python / issue access\n```\n\nThen commit `.claude/skills/relay/` into git so teammates get it on clone.\n\n### Quick: one-liner\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/bencode/relay/main/install.sh | bash\n```\n\nEquivalent to the steps above (copy skill → create labels → self-check). Note: `curl | bash` downloads and runs a remote script — AI agents and sandboxed environments will (and should) block it, so use the transparent steps there.\n\n## Requirements\n\n- [`gh`](https://cli.github.com/) CLI, authenticated via `gh auth login`\n- `python3` ≥ 3.9 (stdlib only — no pip / venv)\n- the current directory is inside a repo with a GitHub remote\n\n## How to use it after install\n\nOnce installed, Claude Code follows the conventions in `.claude/skills/relay/SKILL.md`. The essentials:\n\n- **Every issue has 3 sections**: `## Goal` (quantified) / `## Verification` (one executable `bash` block — a formal \"done\" sensor) / `## Refs`.\n- **Lifecycle**: `state:in-progress` → `state:needs-verification` (switched automatically by `relay.py close`) → `state:verified` (creator accepts in person).\n- **Closing goes through `relay.py close \u003cnum\u003e`**: it lints the structure, runs Verification, and only then closes, switches labels, and cc's the creator.\n- Single-step actions (list / view / create / edit / comment / reopen) use `gh` directly.\n- **Labels**: relay matches labels by name, so names + colors are the contract; their descriptions are cosmetic — localize them (e.g. Chinese) freely. `init-labels.sh` is create-only and won't overwrite labels you already have.\n\nFull conventions, the state machine, and end-to-end examples are in [`skills/relay/SKILL.md`](skills/relay/SKILL.md).\n\n## Codex / other agents\n\nCodex doesn't support the Claude skill / plugin mechanism. To use relay there: copy `relay.py` into the project and lift the conventions from SKILL.md into the project's `AGENTS.md`. `relay.py lint/verify/close` is a standalone CLI any agent can call.\n\n## Roadmap\n\nDistribution is currently \"copy files + self-check\". Once it matures it will be packaged as an official Claude Code plugin and published to a marketplace — the skill already references its bundled scripts via `${CLAUDE_SKILL_DIR}`, so that migration needs zero path changes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbencode%2Frelay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbencode%2Frelay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbencode%2Frelay/lists"}