ctrlrelay
Assign an issue. Get a reviewed pull request. Answer questions from your phone.
ctrlrelay turns the coding agent you already use into a teammate that works your GitHub backlog in the background. It picks up issues, writes the code in a clean branch, opens a pull request, waits for CI, gets the change reviewed, and pings you on Telegram or Mattermost only when it truly needs you.
It runs on your own machine. Your code, your credentials, your agent subscription. No hosted service in the middle.
Documentation · Get started · Why ctrlrelay
Why ctrlrelay
Coding agents are great when you sit and watch them. ctrlrelay is for the work you don't want to sit and watch.
- Your backlog is the to-do list. No new tool to learn. Assign an issue (or add a label) and the work starts. The result is a normal pull request your team already knows how to review.
- Runs where your code already lives. ctrlrelay is a small program on your laptop or server — not a cloud service. Nothing leaves your machine except the calls your agent and GitHub already make. No per-seat platform fee on top of the agent you already pay for.
- It asks instead of guessing. When the agent is stuck, you get the question in chat. You reply from your phone and the same session picks up where it stopped.
- Safe by default. Every issue gets its own isolated copy of the repo. One job per repo at a time. Optional Linux sandbox that hides your secrets from the agent. Nothing merges without your rules allowing it.
- Done means done. It waits for CI, fixes failing checks, and posts an independent review on the pull request — so what reaches you is ready to read, not a first draft.
- Pick your agent per repo. Claude Code today, or OpenCode — which can run on a local model — for the repos where that fits.
- Grows with you. Start on one laptop. Add more machines later; they share the work without stepping on each other.
- Open source. Apache 2.0. Read every line of what runs on your machine.
What it does
- Issues → pull requests. Watches every repo you choose and works each new issue end to end.
- Questions in your chat. Telegram (a private bot) or Mattermost (a channel on your own server).
- Automatic review. Every agent pull request gets a second-opinion review comment before you look at it.
- Daily security sweep. Reviews Dependabot alerts and pull requests across your repos every morning.
- Status page. See what each agent is doing, what is waiting, and what needs you — at a glance.
- Many machines, one account. Spread work across machines, with one chat and one status page.
- Settings follow you. Optional sync of your agent setup across machines through a private GitHub repo.
How it works
flowchart LR
GH[("GitHub<br/>issues")] -->|new issue| CR["ctrlrelay<br/>on your machine"]
CR -->|works in a clean branch| AG["Coding agent<br/>Claude Code · OpenCode"]
AG -->|stuck?| CH["Your chat<br/>Telegram · Mattermost"]
CH -->|your answer| AG
AG -->|opens| PR["Pull request"]
PR -->|CI + review| YOU(["You merge"])
- You assign an issue to yourself, or add a label you pick.
- ctrlrelay starts the agent in a fresh, isolated copy of the repo.
- If the agent has a question, it lands in your chat. Your reply goes straight back to the same session.
- A pull request opens. ctrlrelay waits for CI, fixes what fails, and posts a review.
- You merge — or ask for changes, like with any teammate.
Quick start
pipx install ctrlrelay
ctrlrelay setup # finds your repos and writes your config
ctrlrelay poller start # starts working assigned issues
You need Python 3.12+, the GitHub CLI, and a coding agent CLI. The getting started guide covers prerequisites, chat setup and running it as a background service.
Documentation
Everything lives at ainvirion.github.io/ctrlrelay:
- Getting started — install and first run
- Chat bridge — set up Telegram or Mattermost
- Configuration — every setting
- Operations — background services, status page, several machines
- CLI reference — every command
Contributing
Contributions are welcome. Read the contributing guide and the code of conduct. First-time contributors sign a one-time Contributor Assignment Agreement in the pull request.
Security
Found a vulnerability? Please follow the security policy and open a private advisory — not a public issue.
License
Apache License 2.0 — see LICENSE.
Copyright (c) 2026 AInvirion LLC. All Rights Reserved.
Metadata
Release files for ctrlrelay 0.25.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ctrlrelay-0.25.0.tar.gz | 1.3 MB | With provenance | Details for ctrlrelay-0.25.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ctrlrelay-0.25.0-py3-none-any.whl | Python 3 | none | any | Details for ctrlrelay-0.25.0-py3-none-any.whl |
Total release size: 1.9 MB
Release files / ctrlrelay-0.25.0.tar.gz
| Download URL | ctrlrelay-0.25.0.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
316d352fe1435c143fd1e60128c7b9fac6a37cf5c9d438d7e8a60ba7c1f81392
|
|
BLAKE2b-256 checksum How to use checksums |
42cb66731d793c68b98655afe15a96525c6a3e5dc80c8e9726323fe7bfa9734b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / ctrlrelay-0.25.0-py3-none-any.whl
| Download URL | ctrlrelay-0.25.0-py3-none-any.whl |
|---|---|
| Size | 620.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
451d1fdbb7c790d6f14743e2601d6c90f5e6118784c28e1aed0a93ce68c74453
|
|
BLAKE2b-256 checksum How to use checksums |
faed304210ce8838f6e1089526b69e34e990cb451962e59bb3bd80b1926256c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logSecurity for ctrlrelay 0.25.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for ctrlrelay-0.25.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.