|
| 1 | +--- |
| 2 | +feature: nixpkgs-review-mcp |
| 3 | +start-date: 2026-04-01 |
| 4 | +author: Morgan Jones |
| 5 | +co-authors: (find a buddy later to help out with the RFC) |
| 6 | +shepherd-team: (names, to be nominated and accepted by RFC steering committee) |
| 7 | +shepherd-leader: (name to be appointed by RFC steering committee) |
| 8 | +related-issues: (will contain links to implementation PRs) |
| 9 | +--- |
| 10 | + |
| 11 | +# Summary |
| 12 | +[summary]: #summary |
| 13 | + |
| 14 | +Many projects, especially ones that converge around complex tools, are standardizing around creating MCPs for giving external agents access to useful utilities. In this RFC, I propose a new MCP for nixpkgs-review with a live implementation that contributors can use right now to speed along their PR reviews. |
| 15 | + |
| 16 | +# Motivation |
| 17 | +[motivation]: #motivation |
| 18 | + |
| 19 | +## Long PR delays |
| 20 | + |
| 21 | +It is well known that getting anything reviewed in nixpkgs takes a long time. Assuming an average of 30 minutes of review time, the 10,800 open PRs would take 0.6 years to review. As the amount of software in the world is expected to grow exponentially in the next few years, additional methods for contributors to review things will reduce friction and result in faster updates and additions of packages. |
| 22 | + |
| 23 | +(Ask Claude to make a graph here of nixpkgs growth vs the heat death of the universe) |
| 24 | + |
| 25 | +## Contributor agency |
| 26 | + |
| 27 | +Contributors are using new tools to review their PRs, and the concept of MCPs is not new as a form of [in-band signaling](https://en.wikipedia.org/wiki/In-band_signaling). |
| 28 | + |
| 29 | +For instance, engineers used [Q codes](https://en.wikipedia.org/wiki/Q_code#Later_use) in the days of telegraphy as tools to ask their conversation partner their distance and bearing. When telephony became automated, we got the famous [2600 hertz](https://en.wikipedia.org/wiki/2600_hertz) tones to control telephone backplanes. Sometimes in-band signaling is just convenient, more recently with systems like [chatops](https://aws.amazon.com/chatbot/) to manage EC2 resources from Slack. |
| 30 | + |
| 31 | +We should let people contribute how they feel comfortable ⸻ hence the need for a nixpkgs-review MCP. |
| 32 | + |
| 33 | +# Detailed design |
| 34 | +[design]: #detailed-design |
| 35 | + |
| 36 | +Note: The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. |
| 37 | + |
| 38 | +This document specifies the **nixpkgs-review Morse Code Protocol** (MCP), which can be used to do reviews at up to 75 tokens per minute, depending on skill. |
| 39 | + |
| 40 | +## Reviewer requirements |
| 41 | + |
| 42 | +To correctly implement the nixpkgs-review MCP, reviewers MUST advertise a frequency on an amateur radio band that allows transmitting CW (continuous wave) signals including Morse code. Receivers SHOULD additionally advertise a grid square in [Maidenhead](https://en.wikipedia.org/wiki/Maidenhead_Locator_System) format, so contributors can know which heading to point their antenna. Reviewers MAY advertise a callsign, though callsigns are not required to receive MCP commands. |
| 43 | + |
| 44 | +### Band plan |
| 45 | + |
| 46 | +For ease of use, we define frequencies in many bands that can be used for the MCP: |
| 47 | + |
| 48 | +|Band|Frequency| |
| 49 | +|:---|:--------| |
| 50 | +|160 meters|1.899 MHz| |
| 51 | +|80 meters|3.599 MHz| |
| 52 | +|60 meters|5.349 MHz| |
| 53 | +|40 meters|7.099 MHz| |
| 54 | +|30 meters|10.109 MHz| |
| 55 | +|20 meters|14.099 MHz| |
| 56 | +|17 meters|18.099 MHz| |
| 57 | +|15 meters|21.099 MHz| |
| 58 | +|12 meters|24.899 MHz| |
| 59 | +|10 meters|28.099 MHz| |
| 60 | +|6 meters|50.099 MHz| |
| 61 | +|2 meters|144.099 MHz| |
| 62 | +|1.25 meters|222.99 MHz| |
| 63 | +|70 cm|420.69 MHz| |
| 64 | + |
| 65 | +This has the benefit of giving us more 9s than GitHub, since 9s are in high demand these days. |
| 66 | + |
| 67 | +### Software |
| 68 | + |
| 69 | +It is RECOMMENDED for reviewers to have software running that allows for the automatic decoding of CW, [like this one](https://github.com/numinit/ifttx) based on [fldigi](https://search.nixos.org/packages?channel=unstable&query=fldigi). Alternatively, reviewers MAY do so by hand, provided that they are willing to enter nixpkgs-review commands manually and do not have a skill issue. |
| 70 | + |
| 71 | +Correct review messages follow this ABNF: |
| 72 | + |
| 73 | +``` |
| 74 | +MCP = [RECEIVER PAUSE] [SENDER PAUSE] "PR" PAUSE (NUMBER / RESULT) |
| 75 | +RECEIVER = "CQ" / CALLSIGN |
| 76 | +SENDER = CALLSIGN |
| 77 | +CALLSIGN = 3*6(ALPHA / DIGIT) |
| 78 | +PAUSE = [SP] |
| 79 | +NUMBER = 6*7DIGIT |
| 80 | +RESULT = ("LGTM" / "NAK") PAUSE NUMBER |
| 81 | +``` |
| 82 | + |
| 83 | +Note that we define the PAUSE symbol as an optional space. There is frequent disagreement on what counts as a "space" in Morse code, so this definition SHOULD make everyone happy. (If it doesn't, you know exactly where to complain). |
| 84 | + |
| 85 | +Callsigns are OPTIONAL in the protocol to facilitate correct decoding of more MCP commands, though they SHOULD be sent. If they are successfully decoded, they SHOULD be compared against the receiver's callsign, if any. Note that CQ is a valid callsign referring to anyone, because there are [always other receivers.](https://local58.tv/) |
| 86 | + |
| 87 | +### Correct nixpkgs-review invocation |
| 88 | + |
| 89 | +Reviewers SHOULD use an invocation similar to `nixpkgs review pr $NUMBER --post-result` given a MCP message `PR $NUMBER`. |
| 90 | + |
| 91 | +Reviewers MAY include, in the result template, details about the frequency and grid square that the review was performed from, as well as information about their antenna. |
| 92 | + |
| 93 | +Reviewers MAY also attach a [QSL card](https://en.wikipedia.org/wiki/QSL_card) to the review comment confirming contact. |
| 94 | + |
| 95 | +If the PR is reviewed successfully, the reviewer MAY send back a result message, e.g. `PR LGTM $NUMBER` or `PR NAK $NUMBER`. However, the GitHub issue is the place that takes priority. |
| 96 | + |
| 97 | +## Contributor requirements |
| 98 | + |
| 99 | +To use the nixpkgs-review MCP, a contributor MUST have a radio transmitter and antenna tuned to the correct frequency, and SHOULD have an amateur radio license. |
| 100 | + |
| 101 | +The contributor simply performs the opposite of the reviewer; that is, encodes the MCP message as CW and sends it to a reviewer. |
| 102 | + |
| 103 | +# Examples and Interactions |
| 104 | +[examples-and-interactions]: #examples-and-interactions |
| 105 | + |
| 106 | +- `CQ K1ABC PR 123456`: K1ABC wants anyone to review #123456 |
| 107 | +- `K1ABC W2DEF PR NAK 123456`: W2DEF says you need to fix #123456 |
| 108 | +- `W2DEF K1ABC WTF SRSLY`: K1ABC is annoyed that their PR got a NAK |
| 109 | + |
| 110 | +## Live instance |
| 111 | + |
| 112 | +21.099 MHz, grid DM13. Receive only mode for now, will reply using nixpkgs-review on the GH issue. |
| 113 | + |
| 114 | +Yes, this is real. If you get CW down to southern California and fldigi decodes it, you'll get your PR merged if it passes review (and other checks). Try it. |
| 115 | + |
| 116 | +(If you want a review on another frequency, let me know, I'll likely be switching to 30 and 40 at night in the US). |
| 117 | + |
| 118 | +# Drawbacks |
| 119 | +[drawbacks]: #drawbacks |
| 120 | + |
| 121 | +Everyone needs a radio and a large antenna. While this may use a similar amount of power to a GPU, it runs in multiplayer mode by default. |
| 122 | + |
| 123 | +# Alternatives |
| 124 | +[alternatives]: #alternatives |
| 125 | + |
| 126 | +Model Context Protocol, which was briefly considered before more token-efficient alternatives were chosen. |
| 127 | + |
| 128 | +# Prior art |
| 129 | +[prior-art]: #prior-art |
| 130 | + |
| 131 | +- https://github.com/NixOS/nixpkgs/pull/441048#issuecomment-3265365059 |
| 132 | +- https://github.com/NixOS/nixpkgs/pull/427048#issuecomment-3265399043 |
| 133 | +- https://github.com/NixOS/nixpkgs/pull/486609 |
| 134 | +- https://github.com/Mic92/nixpkgs-review |
| 135 | +- https://sourceforge.net/projects/fldigi/ |
| 136 | + |
| 137 | +# Unresolved questions |
| 138 | +[unresolved]: #unresolved-questions |
| 139 | + |
| 140 | +- Can we use RTTY for review comments? |
| 141 | +- What about WEFAX for faxing each other diffs? |
| 142 | +- Does Morse Code actually have spaces? |
| 143 | +- Will amateur radio tools ever have good UX? |
| 144 | +- How do we improve the experience for people who live in grid square RR73? |
| 145 | + |
| 146 | +# Future work |
| 147 | +[future]: #future-work |
| 148 | + |
| 149 | +- [Nix Village at DEF CON 34](https://nix.vegas). If you like more hacks like this, our [call for projects](https://cfp.nix.vegas/2026/) is out ;) |
0 commit comments