{
  "markdown": "<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/assets/reporelay-logo-dark.png\">\n    <img src=\"docs/assets/reporelay-logo.png\" width=\"440\" alt=\"RepoRelay\">\n  </picture>\n</p>\n\n<p align=\"center\"><b>Give AI access to your repository &mdash; not your machine.</b></p>\n\n<p align=\"center\">RepoRelay lets ChatGPT safely inspect one local repository\nwithout giving it control of the rest of your computer.</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/Lukie-81/RepoRelay/actions/workflows/ci.yml\"><img src=\"https://github.com/Lukie-81/RepoRelay/actions/workflows/ci.yml/badge.svg\" alt=\"CI status\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT license\"></a>\n  <a href=\"#before-you-install\"><img src=\"https://img.shields.io/badge/node-%3E%3D22.19%20%3C27-green.svg\" alt=\"Node.js >=22.19 <27\"></a>\n  <img src=\"https://img.shields.io/badge/protocol-MCP-6e5494.svg\" alt=\"Model Context Protocol\">\n  <a href=\"https://mcpservers.org/servers/lukie-81/reporelay\"><img src=\"https://img.shields.io/badge/mcpservers.org-listed-38bdf8?labelColor=1e1e2e\" alt=\"mcpservers.org listed\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://lukie-81.github.io/RepoRelay/\">Website</a> &middot;\n  <a href=\"https://www.npmjs.com/package/reporelay-mcp\">npm package</a> &middot;\n  <a href=\"https://mcpservers.org/servers/lukie-81/reporelay\">MCP listing</a>\n</p>\n\n<p align=\"center\">\n  <img src=\"docs/assets/reporelay-hero.png\" width=\"720\" alt=\"RepoRelay architecture: an authenticated AI reviewer reaches the loopback bridge, which exposes bounded read and search access to one approved repository and fixed handoff writers for a separate implementer.\">\n</p>\n\n<p align=\"center\"><b>ChatGPT &rarr; Secure MCP Tunnel &rarr; tunnel-client &rarr; RepoRelay &rarr; one approved repository</b></p>\n\n<p align=\"center\"><b>Read safe files &middot; Search code &middot; One approved repository &middot; No shell &middot; No Git &middot; No arbitrary writes</b></p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/Lukie-81/RepoRelay/raw/refs/heads/main/docs/assets/reporelay-demo.mp4\">\n    <img\n      src=\"docs/assets/reporelay-demo.gif\"\n      width=\"760\"\n      alt=\"RepoRelay onboarding demo showing installation, one approved repository selection, ChatGPT connection, and adding RepoRelay to ChatGPT\"\n    >\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/Lukie-81/RepoRelay/raw/refs/heads/main/docs/assets/reporelay-demo.mp4\"><b>Watch the full demo &rarr;</b></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#quick-setup\">Quick Setup</a> &middot;\n  <a href=\"#youre-connected--what-now\">Use It</a> &middot;\n  <a href=\"#chatgpt--coding-agent-handoff\">Handoff</a> &middot;\n  <a href=\"#troubleshooting\">Troubleshooting</a> &middot;\n  <a href=\"#security\">Security</a>\n</p>\n\n## What RepoRelay does\n\nRepoRelay is a local, first-party MCP bridge that gives ChatGPT **bounded\naccess to exactly one approved repository on your computer** &mdash; nothing more.\n\nChatGPT reviews your code through RepoRelay, and can leave a structured task\nfor a separate local coding agent (like Codex or Claude) through fixed handoff\nfiles. RepoRelay is the security boundary between ChatGPT and your machine.\n\n```text\nChatGPT reviews/plans\n        ↓\nRepoRelay\n        ↓\nRepository reads/searches\n+\nfixed .ai-handoff writers\n        ↓\nCodex / another local coding agent implements\n```\n\n## How the safety model works\n\nMCP (Model Context Protocol) is the standard that lets ChatGPT call tools.\nChatGPT is the MCP client. RepoRelay is the local MCP server and security\nboundary: it decides what ChatGPT may access and exposes exactly one approved\nrepository at a time. `tunnel-client` is only the secure networking pipe that\ncarries ChatGPT traffic to your computer.\n\n| Component | Job |\n| --- | --- |\n| ChatGPT | MCP client — chooses RepoRelay tools. |\n| Secure MCP Tunnel | Carries traffic from ChatGPT to your computer. |\n| `tunnel-client` | Local network forwarder; points the tunnel at RepoRelay. |\n| RepoRelay | MCP server + security boundary; enforces authentication and allowed access. |\n| Repository | The one directory ChatGPT is allowed to inspect. |\n\n**What ChatGPT can do through RepoRelay (the normal 7-tool setup):**\n\n```text\n✓ inspect files          open_workspace, list_files, read_file\n✓ find instructions      list_files with instructionsOnly\n✓ search the repository  search_files\n✓ write to three predetermined handoff targets\n                         write_next_task, write_review, update_handoff_state\n```\n\nIn read-only mode, only the four read/search tools are exposed.\n\n**What ChatGPT cannot do:**\n\n```text\n✗ run shell commands\n✗ run PowerShell\n✗ run Git\n✗ launch processes\n✗ arbitrarily edit source files\n✗ delete files\n✗ choose arbitrary write targets\n✗ access outside the approved repository\n```\n\nThis is one of RepoRelay's strongest differentiators: ChatGPT can read and plan\nagainst your code, but it gets **no execution capability** and can only write to\na few fixed handoff files you control.\n\n## Before you install\n\n### Which mode should I use?\n\nRepoRelay runs in two modes. The right one depends on your ChatGPT plan and\nworkspace:\n\n| Mode | Start command | Tools in Scan Tools |\n| --- | --- | --- |\n| **Read-only** | `reporelay quickstart \"<repo>\" --no-handoff-writes` | **4** |\n| **Handoff** (default) | `reporelay quickstart \"<repo>\"` | **7** |\n\n- **Personal ChatGPT workspaces:** if developer mode and the **Tunnel**\n  connection are available for your account, start with **read-only mode**.\n  ChatGPT can open, read, and search the repository, but cannot write handoff\n  files. Expect **4 tools**.\n- **Business / Enterprise / Edu workspaces:** available capabilities depend on\n  your plan and workspace/admin settings. Where developer features and\n  handoffs are enabled, the normal setup exposes **7 tools** (4 read/search +\n  3 fixed handoff writers).\n\nBoth modes share the same security boundary; read-only mode simply disables\nthe three handoff writers. RepoRelay cannot enable ChatGPT developer mode or\ntunnel access. OpenAI plan and workspace behavior changes over time, so check\nthe current\n[OpenAI Secure MCP Tunnel guide](https://developers.openai.com/api/docs/guides/secure-mcp-tunnels)\nfor what your account offers.\n\nYou need:\n\n- **Node.js** `>=22.19` and `<27` (npm is included). Check with\n  `node --version`.\n- **An existing local project or repository** you want ChatGPT to review. It\n  must be a real folder on your computer &mdash; not a drive root and not your\n  whole user folder.\n- **OpenAI Secure MCP Tunnel access.** RepoRelay reaches ChatGPT through\n  OpenAI's Secure MCP Tunnel. See the current\n  [OpenAI Secure MCP Tunnel guide](https://developers.openai.com/api/docs/guides/secure-mcp-tunnels)\n  for availability, permissions, and plan details.\n- **Permission to create/use a custom MCP app** in the target ChatGPT\n  workspace (ChatGPT developer mode).\n\nYou do **not** need to download anything else. RepoRelay installs the official\nOpenAI `tunnel-client` automatically during `reporelay tunnel setup`.\n\nDo not worry about the handoff protocol yet. The quickstart sets up working\nhandoff files for you and explains them as you go.\n\n## Quick setup\n\n### Where setup happens\n\nSetup touches three different surfaces, and the tunnel and the ChatGPT\nintegration are configured in **different places**:\n\n```text\nYOUR MACHINE          reporelay quickstart \"<repo>\"\n                      starts RepoRelay against ONE repository\n        ↓\nOPENAI PLATFORM       create the Secure MCP Tunnel + runtime API key\n                      (reporelay tunnel setup walks you through it)\n        ↓\nCHATGPT               enable developer mode, then add RepoRelay\n                      through the Plugins / custom MCP app flow,\n                      choosing the tunnel you created\n```\n\nThe **Secure MCP Tunnel** is created and configured in OpenAI Platform. The\n**ChatGPT integration** that uses the tunnel is added **inside ChatGPT** — not\non the Platform page where you created the tunnel. If you already have a\ntunnel and are wondering \"where do I actually add RepoRelay to ChatGPT?\", that\nis step 6 below, inside ChatGPT itself.\n\n> **Path examples.** Always quote the repository path:\n>\n> ```bash\n> # macOS / Linux\n> reporelay quickstart \"$HOME/Projects/my-app\"\n> ```\n>\n> ```powershell\n> # Windows PowerShell — keep the backslashes\n> reporelay quickstart \"C:\\Users\\you\\Projects\\my-app\"\n> ```\n>\n> `C:\\Users\\you\\Projects\\my-app` is correct. `C:Users\\you\\Projects\\my-app` is\n> not &mdash; the backslashes matter.\n\n### 1. Install RepoRelay\n\n```bash\nnpm install -g reporelay-mcp@latest\n```\n\nnpm is the supported and tested installer. Check the install:\n\n```bash\nreporelay --version\n```\n\nIf `reporelay` cannot be found (`command not found` on macOS/Linux, `is not\nrecognized` on Windows), see [Troubleshooting](#troubleshooting).\n\n### 2. Start RepoRelay on one repository\n\n```bash\nreporelay quickstart \"$HOME/Projects/my-app\"\n```\n\nReplace the path with the repository you want to expose (Windows example:\n`reporelay quickstart \"C:\\Projects\\my-app\"`). Keep this terminal open.\n\n**No path? The current directory is only a default.** If you omit the\nrepository path, `quickstart` uses the directory you are standing in and says\nso in its summary. Only this default depends on the current directory —\n`reporelay tunnel setup`, `tunnel doctor`, and `tunnel run` read stored\nper-user configuration and work from any directory. The tunnel does not need\nto be started from the repository directory.\n\nYou should see:\n\n```text\nReady.\nLocal MCP: http://127.0.0.1:7676/mcp\n```\n\nThe normal quickstart enables the **7-tool handoff surface** (4 inspection\ntools + 3 fixed handoff writers). RepoRelay now creates a small `.ai-handoff`\nworkspace and an `AGENTS.md` note so ChatGPT can leave structured tasks and\nreviews for a separate local coding agent:\n\n```text\n.ai-handoff/NEXT_TASK.md\n.ai-handoff/REVIEW.md\n.ai-handoff/RESULT.md\n.ai-handoff/STATE.json\nAGENTS.md\n```\n\nUsing read-only mode instead (`--no-handoff-writes`, the recommended starting\nmode for personal ChatGPT workspaces that expose developer mode and Tunnel)?\nRepoRelay exposes the 4 read/search tools and creates\nnone of these files. See [Read-only mode](#read-only-mode---no-handoff-writes).\n\n**Why does RepoRelay create these?** ChatGPT still cannot run commands, use\nGit, or arbitrarily edit your repository. These files are simply a place where\nChatGPT can leave a task, and a separate local coding agent (running on your\nown machine, with your own permission) can leave its result. More below in\n[ChatGPT ↔ coding-agent handoff](#chatgpt--coding-agent-handoff).\n\nTo stop RepoRelay later, press **Ctrl+C** in this window. There is no\n`reporelay quickstart --stop`.\n\n### 3. Audit it\n\nImmediately after quickstart, verify RepoRelay's actual security boundary:\n\n```bash\nreporelay audit \"$HOME/Projects/my-app\"\n```\n\nYou should see:\n\n```text\nRESULT: PASS\n```\n\nAudit starts its own temporary loopback listener and exercises the real\nauthenticated MCP surface, containment checks, and handoff restrictions. It\ndoes not modify your repository. This validates RepoRelay *before* ChatGPT is\nconnected. If you started quickstart with `--no-handoff-writes`, add the same\nflag to the audit command.\n\n### 4. Run RepoRelay tunnel setup\n\nIn a **second** terminal window, run:\n\n```bash\nreporelay tunnel setup\n```\n\nThis starts the RepoRelay setup wizard. It does everything for you:\n\n```text\n✓ installs a RepoRelay-supported OpenAI tunnel-client\n✓ verifies it (pinned version + official SHA-256)\n✓ opens OpenAI tunnel setup\n✓ asks for your tunnel ID\n✓ opens OpenAI runtime-key setup\n✓ securely stores the pasted key\n✓ creates the tunnel profile\n✓ tests the complete connection\n```\n\nYou provide exactly two things, both in OpenAI Platform:\n\n1. **Your Secure MCP Tunnel ID** — the wizard opens\n   <https://platform.openai.com/settings/organization/tunnels> in your\n   browser. Create or select a tunnel, associate it with your ChatGPT\n   workspace, and paste its `tunnel_id` back in the terminal.\n2. **A runtime API key** — the wizard opens\n   <https://platform.openai.com/settings/organization/api-keys>. Create a\n   secret key for the project you use with the tunnel and paste it in the\n   terminal. Input is hidden: nothing appears while you paste. This key\n   authenticates `tunnel-client` to OpenAI; it is **not** the RepoRelay\n   bridge secret.\n\nCreating or editing a tunnel needs the **Tunnels Read + Manage** permission;\nrunning `tunnel-client` or selecting the tunnel needs **Tunnels Read + Use**.\nThese are organization-level permissions granted by your org owner or RBAC\nadmin. Follow the current\n[OpenAI Secure MCP Tunnel guide](https://developers.openai.com/api/docs/guides/secure-mcp-tunnels)\nfor the exact UI and permission details.\n\nWhen the wizard finishes, you should see:\n\n```text\nTesting connection...\n✓ OpenAI runtime credential\n✓ RepoRelay reachable\n✓ Bridge authentication\n\nSetup complete.\n\nNext:\n  reporelay tunnel run\n```\n\nThese checks are genuine: setup validates the runtime API key against the\nOpenAI control plane (the same read-only tunnel lookup `tunnel-client` performs\nat startup) and verifies the bridge secret against the RepoRelay that is\nactually running. A wrong, expired, or mis-pasted key is caught here with a\nclear message &mdash; not after `tunnel run` starts.\n\nIf your RepoRelay runs on a custom port (for example `--port 7677`),\nquickstart already recorded the live endpoint and setup follows it\nautomatically &mdash; no extra flags needed.\n\nUseful options:\n\n- `reporelay tunnel setup --no-open` — do not launch the browser (headless,\n  SSH, or CI); the URLs are still printed.\n- `reporelay tunnel setup --replace-tunnel` — prompt for a new tunnel ID.\n- `reporelay tunnel setup --replace-runtime-key` — prompt for a new runtime\n  API key.\n- `reporelay tunnel setup --tunnel-client-path \"/path/to/tunnel-client\"`\n  (Windows: `tunnel-client.exe`) — **advanced override** for unusual\n  environments; RepoRelay does not verify or manage a custom binary.\n\nRe-running `reporelay tunnel setup` reuses your existing verified client,\ntunnel ID, and stored key, and re-tests the connection without asking for\nanything again.\n\n### 5. Run the tunnel\n\n```bash\nreporelay tunnel run\n```\n\nKeep this window open alongside the RepoRelay quickstart window. Stop it with\nCtrl+C when you are done.\n\nIf the connection ever stops working, `reporelay tunnel doctor` remains\navailable as a standalone troubleshooting command (expect `Ready.` when\neverything is healthy; add `--verbose` for redacted diagnostics).\n\n### 6. Add RepoRelay to ChatGPT\n\nThis step happens **inside ChatGPT** — not on the OpenAI Platform page where\nyou created the tunnel.\n\nNaming note: the current ChatGPT UI may have you enter through **Plugins**,\nwhile OpenAI documentation may still refer to the underlying integration as an\n**App** or **custom MCP app**. This guide just says \"the RepoRelay\nintegration.\" See the current\n[ChatGPT developer-mode and MCP apps guide](https://help.openai.com/en/articles/12584461-developer-mode-and-mcp-apps-in-chatgpt)\nwhen labels move.\n\n```text\nChatGPT\n→ enable Developer Mode in settings\n  (exact location varies by plan/workspace as OpenAI updates the UI)\n→ Plugins / developer features\n→ create custom MCP app\n→ connection: Tunnel\n→ choose RepoRelay's tunnel\n→ authentication: No authentication\n→ Scan Tools\n→ verify the tool count: 4 in read-only mode, 7 with handoffs\n→ create/use the integration\n→ start a new chat\n```\n\nFollow this sequence:\n\n1. Enable **Developer Mode** in ChatGPT settings, or ask your workspace\n   administrator for access. The exact location of the setting may vary by\n   plan or workspace as OpenAI updates the interface.\n2. Create the custom MCP app.\n3. Choose the **Tunnel** connection.\n4. Select the RepoRelay/OpenAI Secure MCP Tunnel.\n5. When ChatGPT asks for authentication, select **No authentication**.\n6. Save or create the integration.\n7. Run **Scan Tools**.\n8. Verify the expected RepoRelay tools appear.\n9. Start a new chat and select the RepoRelay integration.\n\n> **Authentication: No authentication.** RepoRelay already authenticates the\n> local bridge through the protected `X-RepoRelay-Bridge-Secret` used by the\n> tunnel. Do not configure OAuth or another ChatGPT-side authentication method.\n\nNever paste `127.0.0.1`, `localhost`, the RepoRelay bridge secret, or an OpenAI\nruntime API key into ChatGPT. The tunnel connection does all the networking.\n\n### 7. Scan and verify the RepoRelay tools\n\nIn the ChatGPT integration flow, run **Scan Tools** and confirm that the tool\ncount matches your mode.\n\n**Read-only mode (`--no-handoff-writes`) — exactly 4 tools:**\n\n```text\nopen_workspace\nlist_files\nread_file\nsearch_files\n```\n\n**Normal handoff mode — exactly 7 tools** (the four above, plus):\n\n```text\nwrite_next_task\nwrite_review\nupdate_handoff_state\n```\n\nA different count usually means the other mode is running. If Scan Tools shows\nshell, Git, process execution, generic file editing, delete, patching, or any\nother unexpected capability, **stop and investigate** before using the\nintegration &mdash; run `reporelay audit \"<repo>\" --json` and confirm the tool\nlist.\n\n### 8. Test it\n\nStart a new chat, select the RepoRelay integration, and try:\n\n```text\nOpen the approved repository and list its top-level files.\n```\n\nThen test the boundary:\n\n```text\nTry to read .env.\n```\n\nThe second request should be blocked.\n\n## You're connected — now what?\n\nYou now have ChatGPT reviewing your repository through a verified security\nboundary. Useful prompts:\n\n```text\nRead README.md and explain how this project starts.\n```\n\n```text\nSearch the repository for \"authentication\".\n```\n\n```text\nFind every AGENTS.md and CLAUDE.md instruction file before reviewing code.\n```\n\nRepoRelay handles that request through the existing `list_files` tool with\n`instructionsOnly: true`. This recursively discovers recognized instruction\nfiles without adding a broader filename-glob tool or changing the four-tool\nread-only surface.\n\n```text\nReview src/server.ts for error-handling issues and write your findings.\n```\n\n## ChatGPT ↔ coding-agent handoff\n\nThe normal RepoRelay setup lets ChatGPT plan and review while a separate local\ncoding agent (Codex, Claude, or another) does the implementation. RepoRelay\ncoordinates them through a small `.ai-handoff` workspace:\n\n```text\n.ai-handoff/\n├── NEXT_TASK.md   ChatGPT writes the task here\n├── RESULT.md      the local coding agent writes its result here\n├── REVIEW.md      ChatGPT writes its review here\n└── STATE.json     coordinates the cycle\n```\n\nConceptually:\n\n```text\nChatGPT\n  ↓ writes NEXT_TASK.md\n\nCodex / local coding agent\n  ↓ implements\n  ↓ writes RESULT.md\n\nChatGPT\n  ↓ reviews result\n  ↓ writes REVIEW.md\n```\n\n`STATE.json` coordinates the cycle. RepoRelay itself **does not run Codex or\nClaude** &mdash; they are separate local applications you start yourself. The\nhandoff files are just a structured place to hand work back and forth.\n\nChatGPT can only write `NEXT_TASK.md`, `REVIEW.md`, and `STATE.json`. The\nimplementer-owned `RESULT.md` is never writable by ChatGPT.\n\nSee [docs/handoff-cycle.md](docs/handoff-cycle.md) for the detailed protocol\nand [examples/](examples/) for reviewer and implementer prompts.\n\n## Daily use\n\nAfter the one-time setup, do not recreate the tunnel or the ChatGPT\nintegration. Each day:\n\n1. Start RepoRelay:\n\n   ```bash\n   reporelay quickstart \"$HOME/Projects/my-app\"\n   ```\n\n2. Start the tunnel (in a second window):\n\n   ```bash\n   reporelay tunnel run\n   ```\n\n3. Open ChatGPT, start a new chat, and select the existing RepoRelay\n   integration.\n\nBoth commands can be run from any directory: quickstart takes the repository\npath explicitly, and the tunnel reads its stored per-user configuration.\n\nKeep both windows open while you use the integration. If the connection stops\nworking, run `reporelay tunnel doctor` again.\n\n## Switch repositories\n\n**RepoRelay exposes one repository at a time.**\n\n1. Press **Ctrl+C** in the RepoRelay terminal.\n2. Start RepoRelay for the new repository:\n\n   ```bash\n   reporelay quickstart \"$HOME/Projects/another-repo\"\n   ```\n\n3. Keep `tunnel-client` running. It reconnects to the restarted RepoRelay\n   automatically (same port and protected bridge-secret file). If you used a\n   different port, the managed tunnel follows it automatically.\n4. Start a new ChatGPT conversation and select the RepoRelay integration.\n5. Ask ChatGPT to open the new repository.\n\nDo not rescan tools just because the approved repository changed. Rescan only\nif the tool definitions changed or ChatGPT asks you to.\n\n## Troubleshooting\n\n| You see | What to do |\n| --- | --- |\n| `'node' is not recognized` / `node: command not found` | Node.js is not installed, or the terminal was opened before the install finished. Install Node.js from <https://nodejs.org>, close and reopen the terminal, and check `node --version`. |\n| `RepoRelay requires Node.js >=22.19 and <27` | Your Node version is unsupported. Install a supported Node.js LTS release, reopen the terminal, and check `node --version`. |\n| `'reporelay' is not recognized` (Windows) | The npm install did not finish or the terminal was opened before it finished. Re-run `npm install -g reporelay-mcp@latest`, close and reopen the terminal, and try `reporelay --version`. |\n| `reporelay: command not found` (macOS/Linux) | The `reporelay` binary is not on your `PATH`. npm is the supported installer — re-run `npm install -g reporelay-mcp@latest` and reopen the terminal. If you installed globally with another package manager (Bun, pnpm, yarn), its global-bin directory may not be on your `PATH`; fix that package manager's PATH setting or reinstall with npm. Invoking `node .../node_modules/reporelay-mcp/dist/cli.js` through a nested package-manager path is a workaround, not a supported install. |\n| `Cannot find module ... dist\\cli.js` | You are running from a source checkout in the wrong folder. `cd` into the `RepoRelay` folder and run `npm run build` first. |\n| `C:Users\\you\\...` (path looks mangled) | You dropped the backslashes. Quote the full Windows path: `reporelay quickstart \"C:\\Users\\you\\Projects\\my-app\"`. |\n| Repository does not exist / not a directory | RepoRelay requires an existing directory. Double-check the quoted path and that the folder exists. |\n| Repository root is too broad | The approved root must be a real project folder, not a drive root or your whole user folder. |\n| `Port 7676 is already in use` | Another RepoRelay or program is listening on that port. Press Ctrl+C in its window to stop it, or rerun quickstart with a custom port (`--port 7677`) — the managed tunnel follows the new port automatically. There is no `quickstart --stop`; stop RepoRelay with **Ctrl+C**. On Windows, find the listener with `Get-NetTCPConnection -LocalPort 7676 -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess` and inspect it with `Get-Process -Id <PID>`. RepoRelay never kills processes for you. |\n| Quickstart stops about an existing `AGENTS.md` | The repository already has an `AGENTS.md` without the RepoRelay marker. RepoRelay will not overwrite it. Review the file first; if you want RepoRelay to preserve it and append the marked handoff instructions, rerun `reporelay quickstart \"...\" --append-agent-instructions`. |\n| `tunnel-client` missing | Rerun `reporelay tunnel setup`; it re-downloads and verifies the managed client. |\n| Invalid tunnel ID | The ID must look like `tunnel_` followed by 32 hex characters. Copy it again from Platform tunnel settings. |\n| Runtime credential rejected | The runtime API key or tunnel context was not accepted. Check that the tunnel is associated with the target ChatGPT workspace (not only a Platform organization), that the key belongs to the same OpenAI organization/project as the tunnel, and that your account has **Tunnels Read + Use**. Rerun `reporelay tunnel setup --replace-runtime-key`. |\n| Control plane unreachable | RepoRelay could not contact OpenAI to validate the credential. Check your internet connection, then rerun `reporelay tunnel doctor`. |\n| Tunnel doctor cannot reach MCP | Keep the RepoRelay quickstart window running on the configured port, then rerun `reporelay tunnel doctor`. |\n| Bridge authentication failure | Do not paste a secret. Confirm quickstart is using the canonical bridge-secret file, then rerun `reporelay tunnel setup`. |\n| ChatGPT cannot see the tunnel | Check that the tunnel is associated with the target ChatGPT workspace (not only a Platform organization) and that you have tunnel-use permission. |\n| Scan Tools returns zero tools | Keep both the RepoRelay and tunnel windows open, confirm `reporelay tunnel doctor` reports `Ready.`, then rescan in a **new** chat with the RepoRelay integration selected. |\n| Scan Tools shows unexpected tools | Stop and investigate before using the integration: run `reporelay audit \"<repo>\" --json` and confirm the expected list — 4 tools in read-only mode, 7 with handoff writes. |\n| RepoRelay window was closed | RepoRelay stopped. Restart it with `reporelay quickstart \"<repo>\"`, then try again in a new chat. |\n| Tunnel window was closed | `tunnel-client` stopped. Restart it with `reporelay tunnel run`, then try again in a new chat. |\n| Custom port mismatch | Confirm the RepoRelay quickstart port matches what `reporelay tunnel doctor` reports as the local MCP endpoint. Quickstart records the live endpoint automatically, or set it explicitly with `reporelay tunnel setup --port <port>`. |\n\nFor anything else, run `reporelay doctor`. It prints configuration and security\nstatus without printing secret values.\n\n## Read-only mode (--no-handoff-writes)\n\nRead-only mode is the recommended starting workflow for **personal ChatGPT\nworkspaces where developer mode and Tunnel are available** (see\n[Which mode should I use?](#which-mode-should-i-use)), and for anyone who wants\nChatGPT to **inspect only** &mdash; no handoff files, no writes at all:\n\n```bash\nreporelay quickstart \"$HOME/Projects/my-app\" --no-handoff-writes\n```\n\nIn this mode RepoRelay exposes exactly four tools:\n\n```text\nopen_workspace\nlist_files\nread_file\nsearch_files\n```\n\nRead-only mode does **not** create `.ai-handoff`, does **not** create or modify\n`AGENTS.md`, and leaves the approved repository unchanged. All containment,\nauthentication, and security checks still apply. Use the matching audit flag:\n\n```bash\nreporelay audit \"$HOME/Projects/my-app\" --no-handoff-writes\n```\n\nWhen you use this mode, expect **4 tools** in Scan Tools instead of 7.\n\n## Security\n\nRepoRelay's enforced boundary includes:\n\n- loopback-only binding and authentication required;\n- exactly one existing canonical approved root;\n- sensitive paths blocked, including `.env`, VCS metadata, credential stores,\n  and private-key formats;\n- traversal, absolute outside-root paths, symlink/junction/reparse escapes, and\n  hard-link bypasses blocked;\n- bounded reads, searches, results, and handoff content;\n- no shell, PowerShell, Git, process, generic write, patch, delete, artifact,\n  worktree, skill, subagent, or local-agent tool;\n- handoff writes limited to the three fixed pre-existing targets.\n\nRepoRelay is a least-privilege application boundary, not an operating-system\nsandbox against malicious software already running as the same local user. An\nexternal Secure MCP Tunnel is a separate security boundary and must be secured\nindependently. Choose the approved repository carefully.\n\nSee [SECURITY.md](SECURITY.md) for the full security model and\n`reporelay audit` documentation.\n\n## Advanced configuration\n\nMost users never need these. When you do:\n\n- [Configuration](docs/configuration.md) — `REPORELAY_*` environment variables,\n  bridge authentication, ports, logging, and handoff mode.\n- [ChatGPT Web setup details](docs/chatgpt-web.md) — the full tunnel and app\n  reference.\n- [Windows operations](OPERATIONS.md) — lifecycle scripts, scheduled tasks, and\n  managed Windows setup.\n- [`.env.example`](.env.example) — placeholder configuration only. Never put a\n  real bridge secret or tunnel credential in it.\n- **Local MCP clients** — if your MCP client runs on the same computer as\n  RepoRelay, you do not need the tunnel: point it at the local MCP URL printed\n  by quickstart and send the `X-RepoRelay-Bridge-Secret` header loaded from the\n  protected file.\n\nFor configuration and security status without printing secret values:\n\n```bash\nreporelay doctor\n```\n\n## Requirements and platform support\n\n- Node.js `>=22.19 <27` (npm is included);\n- Git for the clone-based install — optional if you download the ZIP instead.\n\nThe quickstart in this README works on Windows, macOS, and Linux; npm is the\nsupported installer. Windows 10/11 is the fully validated lifecycle and\noperational platform, including the PowerShell scripts and tunnel-managed\nrunbook.\n\n## Limitations\n\n- One approved repository is exposed at a time.\n- RepoRelay is not an operating-system sandbox.\n- ChatGPT Web needs external OpenAI Secure MCP Tunnel infrastructure to reach a\n  private local bridge.\n- Windows is the fully validated lifecycle platform; other platforms do not\n  have identical PowerShell/tunnel operations.\n- Codex, Claude, and other coding agents are separate local applications, not\n  components of RepoRelay.\n\n## Documentation\n\n- [ChatGPT Web setup](docs/chatgpt-web.md)\n- [Security model](SECURITY.md)\n- [Configuration](docs/configuration.md)\n- [Windows operations](OPERATIONS.md)\n- [Setup notes](docs/setup.md)\n- [Handoff cycle](docs/handoff-cycle.md)\n- [Handoff examples](examples/)\n- [Contributing](CONTRIBUTING.md)\n\n## License and project lineage\n\nRepoRelay is released under the [MIT License](LICENSE). The project keeps its\nrequired upstream attribution and does not bundle the SDKs or runtimes of\nCodex, Claude, or other implementers.\n\n## Development\n\n```bash\nnpm ci\nnpm run typecheck\nnpm test\nnpm run verify:release\nnpm audit --audit-level=low\nnpm pack --dry-run --json\ngit diff --check\n```\n",
  "bytes": 30035,
  "sha": "47bc2c80ca4370765169f47b9ebb5784f034f0315c04eb3b2ad37fecaadce688",
  "repo_slug": "lukie-81/reporelay",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_lukie_81_reporelay_f07977de/readme"
}