seam
seam
A side-by-side diff viewer for the terminal that knows your code: hover a symbol in the diff for its type and docs from the language server, and leave review notes at lines for an agent such as Claude Code to answer. One key switches between the changed hunks and the whole file.

seam is not a pager like delta or diff-so-fancy, which colour the output of
git diff: it reads the repository itself, holds both versions of each
file, and lets you move through them.
Features
Side by side, or one column when the terminal is narrow
The changed hunks or the whole file, one file at a time or all of them in one stream
Hover and go-to-definition through the language server, on the new side and the old one, also when comparing commits
Syntax colours for Go, Rust, JavaScript, TypeScript, JSX, TSX, HTML, PHP and Python, and any other language chroma knows, by configuration
Changed words marked within a line
Review notes: questions and findings at lines of the diff, set with a key or a click in the gutter, which follow their lines through edits and belong to the branch they were set on
seam mcp, so that an agent such as Claude Code or OpenCode reads your notes and answers them at the line, andSsends the waiting notes to a running Claude Code session (see Agents)Files or directories on disk compared with
--files, also asgit difftoolA file list grouped by folder, and reload on change with
--watchKeys, colours and servers configurable in one TOML file

Related MCP server: nvim-mcp
Requirements
Linux or macOS
git 2.36 or newer
A terminal with mouse support for hover; without one, the caret does it
For hover, the language server of the language, see Language servers
To build: Go 1.27
Install
Each release has a static
binary for Linux and macOS on amd64 and arm64, which needs nothing else
but git:
# macOS, with Homebrew
brew install --cask dturcinovic/tap/seam
# Debian, Ubuntu
sudo apt install ./seam_<version>_amd64.deb
# Fedora and other rpm systems
sudo dnf install ./seam-<version>-1.x86_64.rpm
# Any Linux: unpack and put seam on the PATH
tar -xzf seam_<version>_linux_amd64.tar.gz seam && mv seam ~/.local/bin/checksums.txt in the release holds the SHA-256 of each file.
With Go 1.27:
go install github.com/dturcinovic/seam/cmd/seam@latestOr from a clone, with Task:
task build # bin/seamseam --version names the release, the commit and its date, and
seam upgrade brings an install to the latest release (see
Upgrading).
Quick start
In a git repository with changes:
seam # HEAD against the worktree
seam main # main against the worktree
seam HEAD~1 HEAD # the last commit
seam --staged # what is staged
seam --files a b # two files or directories on diskKey | Does |
| Next, previous file |
| Next, previous change |
| Hunks or the whole file |
| Side by side or one column |
| One file or all files in a stream |
| File list |
mouse at rest | Hover |
| Go to the definition, |
| Caret: |
| A note at the caret's line, or click |
| All notes |
| Quit |
Documentation
Usage: what seam compares, the views, the keys and the mouse, notes and agents
Language servers: which ones, how to install them, and their workspaces
Configuration:
config.tomlwith every key
Contributing
See CONTRIBUTING.md.
License
Available Tools
3 toolsseam_notesA
Take review notes the user left in seam, a terminal diff viewer, in order to answer them: without arguments the open and sent notes, leaving out notes of other branches than the checked-out one; with ids those notes; with batch the notes the user sent to this session. Giving both ids and batch fails, and so does a batch that does not exist. Taking reserves the notes for this session so that no other agent session answers them; they stay reserved until this session exits or the user gives them back, and after a crash only the user can, so take only what you will answer. Each note comes with its file, its lines and the lines around them, the user's text and earlier answers; the call returns one claim to give seam_reply with each answer. Notes it cannot take come back under refused with the reason: unknown, taken (by any session, this one too), answered, resolved, other_session (the batch went to another session) or rebatched (sent again or edited since; leave those). It takes at most 20 notes per call; when more is true, call again for the rest. To read notes without reserving them, use seam_notes_view.
Inputs: ids, batch. Returns: more, claim, notes, refused
seam_notes_viewARead-only
Read the user's review notes without taking them: those of ids, or without ids every note that is not resolved, leaving out notes of other branches than the checked-out one, and including notes another session has taken. It reserves and changes nothing, and leaves out ids it does not know; use it to look before taking or to see what was answered. To answer notes, take them with seam_notes first and reply with seam_reply.
Inputs: ids. Returns: notes
seam_replyAIdempotent
Answer a review note, giving the claim seam_notes returned with it; the answer, in Markdown, shows at the note's lines in seam right away and the note is marked answered. Sending the same text under the same claim again adds nothing and returns the earlier reply, so a lost answer can be sent again. An answer under an older claim, after the user gave the note back and it was taken again, is kept but leaves the note to the newer taker, and late is true. It fails on an unknown or resolved note, an empty answer, or one over 64 KiB.
Inputs: id (required), text (required), claim (required). Returns: late, reply
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
Each tool has a distinct role: seam_notes claims notes for answering, seam_notes_view inspects them without side effects, and seam_reply submits answers. The potentially overlapping read operations are explicitly differentiated by reservation behavior and intended use.
All names use snake_case and a consistent seam_ prefix, making them readable as one tool family. However, they mix noun-based and verb-based forms, and seam_notes_view places the action after the resource rather than following a uniform verb_noun pattern.
Three tools are well matched to the narrowly scoped review-note workflow. Each earns its place by covering inspection, exclusive claiming, and replying without adding redundant operations.
The surface covers the complete agent workflow of discovering notes, safely inspecting or claiming them, and submitting idempotent answers. Pagination, refusal states, stale claims, and other workflow edge cases are also addressed without obvious dead ends.
Maintenance
Related MCP Connectors
Human feedback for AI agents: share HTML, get a live review link, read anchored notes as markdown.
Publish agent output for human review; collect comments; agents read them back in-session.
A notebook your coding agents write to: notes that track the code's commit, and handoffs.
Live PR/MR code reviews via review_url_code. OAuth or portal Bearer auth.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables agents to review GitLab merge requests by fetching MR metadata and diff SHAs, reading changed files and raw diffs, and posting inline comments on specific lines of a merge request diff via the GitLab REST API. Works with self-hosted or gitlab.com instances using an environment-provided personal access token.-
- AlicenseNot gradedqualityBmaintenanceEnables coding agents and human reviewers to share a single live view of code, letting the agent open and annotate specific lines while the human marks ranges to ask about, all without any write access to the underlying files.1MIT
- AlicenseAqualityBmaintenanceLocal code review for people and their coding agents: an agent opens a review of its changes and hands over a link, the person comments on lines, and the agent reads the threads, replies and resolves what it fixed. Reads the git worktree directly, uncommitted work included; nothing leaves the machine.17104 npm131GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables agents to create, list, and keyword-search scoped in-memory notes for user IDs over stdio, with state preserved between calls.MIT