{"id":50821518,"url":"https://github.com/xfiveco/review-relay","last_synced_at":"2026-06-13T14:12:02.592Z","repository":{"id":360814549,"uuid":"1168250351","full_name":"xfiveco/review-relay","owner":"xfiveco","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-28T00:24:44.000Z","size":116,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T02:19:56.380Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/xfiveco.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-02-27T07:06:17.000Z","updated_at":"2026-05-28T00:24:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/xfiveco/review-relay","commit_stats":null,"previous_names":["xfiveco/review-relay"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/xfiveco/review-relay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfiveco%2Freview-relay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfiveco%2Freview-relay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfiveco%2Freview-relay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfiveco%2Freview-relay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xfiveco","download_url":"https://codeload.github.com/xfiveco/review-relay/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfiveco%2Freview-relay/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34287314,"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":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-06-13T14:12:02.062Z","updated_at":"2026-06-13T14:12:02.587Z","avatar_url":"https://github.com/xfiveco.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Review Relay\n\nA CLI tool that syncs GitLab merge request discussions with a local `feedback.md` file, designed for AI-assisted code review workflows.\n\n## AI-assisted project setup\n\nPaste the following into an AI coding agent to set up review-relay in your project:\n\n```\nSet up review-relay in this project:\n\n1. Detect the package manager from lock files and install review-relay as a\n   dev dependency.\n2. Read node_modules/review-relay/README.md, then interactively walk the user\n   through auth and configuration in the context of this project — ask\n   questions, confirm choices, and explain decisions as you go.\n3. Add review:read and review:write scripts to package.json based on the\n   chosen auth approach.\n4. Add a brief section to the project README or other relevant documentation\n   describing the review:read and review:write scripts and their agentic\n   workflow — omit one-time setup details.\n5. Offer to add /feedback.md to .gitignore — it's a generated per-session file\n   that shouldn't be committed.\n```\n\n## How It Works\n\nReview Relay bridges GitLab MR discussions and your local filesystem with two commands:\n\n1. **`read`** — fetches unresolved discussions from a GitLab MR and writes them to `feedback.md`\n2. **`write`** — parses responses from `feedback.md` and submits them back to GitLab as discussion replies\n\n### AI-assisted review workflow\n\nThe generated `feedback.md` includes instructions tailored for an AI coding agent. The intended flow is:\n\n1. Run `npx review-relay read` to export unresolved MR discussions to `feedback.md`.\n2. Hand `feedback.md` to your AI agent — it reads the discussions, analyzes the referenced files, makes necessary code changes, and fills in the responses.\n3. Run `npx review-relay write` to submit the responses back to GitLab.\n\nThe agent is instructed to replace each `TODO` with either `👍` (feedback accepted and applied) or a detailed technical explanation if it disagrees.\n\n## Installation\n\nRequires Node.js \u003e= 20. Install locally in your project:\n\n```bash\nnpm install --save-dev review-relay\n```\n\nThen run via `npx` or add scripts to `package.json`:\n\n```bash\nnpx review-relay read\nnpx review-relay write\n```\n\n## Configuration\n\nReview Relay is configured via environment variables. You can export them in your shell or use a tool like [`dotenv-cli`](https://github.com/entropitor/dotenv-cli) to load them from a `.env` file:\n\n```bash\n# .env\nREVIEW_RELAY_GITLAB_PRIVATE_TOKEN=your-token-here\n# or\nGITLAB_TOKEN=your-token-here\n```\n\n```bash\nnpx dotenv review-relay read\nnpx dotenv review-relay write\n```\n\nOr add convenience scripts to `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"review:read\": \"dotenv review-relay read\",\n    \"review:write\": \"dotenv review-relay write\"\n  }\n}\n```\n\n### Environment variables\n\n#### Required\n\n| Variable                                              | Description                                                                         |\n| ----------------------------------------------------- | ----------------------------------------------------------------------------------- |\n| `REVIEW_RELAY_GITLAB_PRIVATE_TOKEN` or `GITLAB_TOKEN` | GitLab access token with `api` scope. The relay-specific variable takes precedence. |\n\nA **project access token** is recommended over a personal access token — it scopes permissions to a single project. Create one under **Settings → Access Tokens** in your GitLab project. The token needs at least the **Reporter** role to read discussions and post notes.\n\n#### Optional\n\n| Variable                                | Default                  | Description                                             |\n| --------------------------------------- | ------------------------ | ------------------------------------------------------- |\n| `REVIEW_RELAY_GITLAB_HOST`              | Inferred from git remote | GitLab instance URL (e.g. `https://gitlab.example.com`) |\n| `REVIEW_RELAY_GITLAB_PROJECT_PATH`      | Inferred from git remote | Project path (e.g. `group/subgroup/project`)            |\n| `REVIEW_RELAY_GITLAB_MERGE_REQUEST_IID` | Auto-detected by branch  | Override which MR to use by IID                         |\n\n### Read options\n\n| Option                        | Description                                                              |\n| ----------------------------- | ------------------------------------------------------------------------ |\n| `--include-current-user`      | Include discussions where the latest note is by the current GitLab user. |\n| `--output \u003cfile\u003e`             | Write feedback to a file path. Defaults to `feedback.md`.                |\n| `--stdout`                    | Print feedback markdown to stdout instead of writing a file.             |\n| `--agent`                     | Print feedback as an agent prompt; replies should be MR notes.           |\n| `--skip-instructions`         | Omit generated instructions from the feedback markdown.                  |\n| `--extra-instructions \u003ctext\u003e` | Append extra instructions to the feedback markdown.                      |\n| `--include-context`           | Include review context such as branches and description.                 |\n| `--include-resolved`          | Include resolved discussions.                                            |\n| `--include-standalone-notes`  | Include standalone merge request notes.                                  |\n\n#### Auto-detection\n\nBy default, the GitLab host and project path are read from `git remote.origin.url`. Supported formats:\n\n- `git@gitlab.com:group/project.git`\n- `ssh://git@gitlab.com/group/project.git`\n- `https://gitlab.com/group/project.git`\n\nThe current git branch is used to find the matching open MR. Set `REVIEW_RELAY_GITLAB_MERGE_REQUEST_IID` to override if multiple open MRs exist for the same branch.\n\n## Discussion filtering\n\nThe `read` command only includes discussions that need attention:\n\n- **Resolved discussions** are excluded unless `--include-resolved` is set.\n- **System notes** (auto-generated by GitLab) are excluded.\n- **Standalone MR notes** are excluded unless `--include-standalone-notes` is set.\n- **Discussions where you already replied last** are excluded unless `--include-current-user` is set.\n\nResolved discussions included with `--include-resolved` are marked with `(resolved)` in the\ndiscussion heading.\n\n## Commands\n\n```\nreview-relay read [options]  Fetch unresolved merge request discussions\nreview-relay write          Submit responses from feedback.md\nreview-relay --help         Show help\nreview-relay --version      Show version\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxfiveco%2Freview-relay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxfiveco%2Freview-relay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxfiveco%2Freview-relay/lists"}