tongs 1.0.2
Released 2026-09-27. This patch release fixes two security issues in how
tongs handles forge credentials, shows where links point in the desktop app,
and pins every dependency the release builds install. Everyone should upgrade,
and especially anyone who runs the tongs-mcp server. Nothing in your
configuration or drafts changes, unless you relied on one of the behaviors
described under Security.
Install
Section titled “Install”pipx install tongs==1.0.2pip install tongs==1.0.2 and uv tool install tongs==1.0.2 work the same
way. To upgrade an existing installation, run pipx upgrade tongs, or
uv tool upgrade tongs, or pip install --upgrade tongs. If you use the
per-user desktop app, install the matching desktop release after the core:
tongs desktop updateSecurity
Section titled “Security”Both issues affect tongs 1.0.0 and 1.0.1 and are fixed in 1.0.2.
tongs-mcponly talks to configured hosts. (GHSA-4cw3-82cv-q28x, high) The MCP server accepted any hostname that containedgithuborgitlab, looked up a token for it and sent that token to the host. Because MCP tools are driven by a language model that also reads merge request text, untrusted text could steer a tool call toward such a host. The MCP server now accepts onlygithub.com,gitlab.comand the hosts in yourconfig.toml, exactly like the terminal and desktop apps, and rejects anything else before any credential lookup or request. tongs also no longer guesses the forge type from a hostname anywhere: a self-hosted GitHub or GitLab instance must be listed inconfig.toml, as the configuration reference already required.~/.netrcis read more strictly. (GHSA-v7v3-jh3w-pj3h, medium) tongs used thedefaultentry of~/.netrcwhen nomachineline named the forge host, and sent that password as a forge token. Only amachineentry that names the host is used now. A~/.netrcthat cannot be parsed produces an error that names the line, never its contents. Error text returned by the MCP server is redacted, and redaction now also coversghr_andglrt-tokens and credentials written into URLs.
If you kept a forge token in the default entry of ~/.netrc, move it to a
machine <host> entry. Security and signing describes
the full credential lookup.
Reviews
Section titled “Reviews”These apply to the terminal app and the desktop app.
- A comment or approval the forge rejects as invalid (GitHub 422, GitLab 400) is reported as a rejected request that you can correct, instead of an unknown outcome that asks you to reconcile the review. Approving your own pull request on GitHub says that GitHub does not allow it. (#315, #333)
The desktop app (beta)
Section titled “The desktop app (beta)”- Links show where they go. Every link in a merge request description or
comment names its destination host in its tooltip and to screen readers.
When the link text looks like a web address on a different host, such as a
link reading
github.com/org/repothat points elsewhere, the real host is shown next to it. (#321) - Desktop plugin assets are checked for symlinks along the whole path from the plugin package, including packages split across several directories, and archive entries with extended tar headers are rejected before they are read. (#329, #334)
- An unexpected failure while submitting a review says so, offers Retry, and no longer suggests refreshing. The desktop service logs the operation and a redacted cause. (#233, #280)
The terminal app
Section titled “The terminal app”- The inbox has a Forge column that shows GH or GL for each merge request, matching the repository list. (#254, #262)
Release and packaging
Section titled “Release and packaging”- Pinned release builds. The jobs that sign and publish the desktop release, and the job that builds the PyPI packages, install only hash-locked Python packages, including the build backend. The desktop archive builder installs only pinned, hash-checked RPMs with every package repository disabled. Every CI workflow keeps its checkout credentials out of the working tree and has a timeout, and a test checks all of this for every workflow. (#303)
- The companion Python RPM changelogs name the project’s packaging address. (#327, #335)
- The pull request template reminds contributors to update the known issues page when a fix lands. (#332)
Release assets
Section titled “Release assets”The GitHub Release
carries the same set of assets as 1.0.1, for version 1.0.2: the per-user
archive with its release manifest and Sigstore attestation, the unsigned Fedora
44 RPMs with their source-built companion packages, the archive SBOM with its
attestation, and SHA256SUMS. Install the RPMs together with
dnf install ./*.rpm.
Known issues
Section titled “Known issues”Known issues lists the defects known in 1.0.2, with the issue and milestone for each fix. The next patch releases, 1.0.3 through 1.0.9, each fix one group of them.
Several fixes in this release were planned for later patch releases and arrived early as community contributions. Thanks to @GhostCoder6969, @tayfuryldz and @Tiyatrotist for their work.