Parley is a terminal-first review tool for local Git diffs with structured, line-anchored discussion threads and optional AI-assisted replies/refactors.
It is designed for iterative review loops where code changes are generated or assisted by AI, but review state and thread resolution remain explicit and human-controlled.
Primary docs site: https://parley.cloudflavor.io
- Review threads are anchored to specific diff lines, not loose notes.
- Thread status is explicit:
open,pending,addressed. - Review state exists for compatibility, but TUI completion is thread-based.
- TUI workflow is keyboard-first and optimized for rapid navigation.
- AI operations integrate into the same thread model instead of bypassing review state.
Parley separates:
- Diff source: what code you are reviewing (
working tree,--commit, or--base/--headrange) - Review session: repo-scoped state under the active Parley store (review name, threaded comments, status history)
By default, Parley stores repo-scoped state under $HOME/.config/parley/repos/<repo-name>-<hash>/. If the repository already has a .parley/ directory, Parley uses it instead. To opt a repository into local checked-in or shared state explicitly, run:
parley config use-local- New comment ->
open - Reply by original thread author ->
open - Reply by different author (including AI in normal flows) ->
pending - Explicit resolution by original thread author ->
addressed
- Any
openthread keeps review work active. pendingmeans waiting for human review.addressedmeans the individual thread is resolved.
Prerequisites:
- Rust toolchain
- Git repository as working directory
- Terminal with TUI support
Install the parley binary:
cargo install parley-cliBuild locally:
cargo build --releaseRun from source:
cargo run -- tuiCreate and start a review session:
parley review create my-review
parley review start my-reviewOpen TUI on current working tree changes:
parley tui --review my-reviewDisable mouse capture for SSH/terminal compatibility:
parley tui --review my-review --no-mouseReview historical diffs:
parley tui --review my-review --commit HEAD~2
parley tui --review my-review --base main --head feature/my-branch
parley tui --review my-review --base v0.1.0
# everything after HEAD~2 (exclude that commit)
parley tui --review my-review --base HEAD~2 --head HEAD
# everything after and including HEAD~2
parley tui --review my-review --base HEAD~2^ --head HEADReview the repository root as files instead of a git diff:
parley tui --review my-review --rootRoot mode lazy-loads file contents. JSON files are displayed with pretty formatting, and Markdown files are rendered into readable text rows.
Top-level commands:
parley tuiparley review <subcommand>parley mcp
Common review subcommands:
create <name>start <name>(shortcut forset-state <name> under_review)listshow <name> [--json]set-state <name> <open|under_review>add-comment ...add-reply ...mark-addressed ...mark-open ...run-ai-session ...
Thread actions:
morc: create thread on selected liner: reply to selected threada: mark addressedo: mark openf: force-address selected threadN/P: next/previous thread
Review state actions:
s: setopenw: setunder_review- Thread completion is handled with
a/o.
AI actions:
x: AI refactor selected threadX: AI reply selected threadA: AI refactor reviewK: cancel active AI runH: per-file AI logsL: global AI activity/session list
Useful navigation:
h/l: previous/next filej/k: line up/down/query: searchR: refresh diff and review data?: in-app help
Providers:
codexclaudeopencode
Modes:
refactorreply
Eligibility summary:
refactortargetsopenandpendingthreads.replytargetsopenandpendingby default.- Explicit selected-thread AI actions target the selected thread regardless of status.
- Provider startup/config errors and stderr are surfaced in the per-file AI logs popup.
Run MCP server over stdio:
parley mcpParley exposes JSON-RPC MCP tooling for review automation, including:
list_reviewsget_reviewlist_open_commentsadd_replymark_comment_addressedmark_comment_openset_review_staterun_ai_session
Parley stores review data in the active store. By default that is:
$HOME/.config/parley/repos/<repo-name>-<hash>/
If .parley/ already exists in the repository, Parley uses it as the active store. Run parley config use-local to create it explicitly for repositories that should keep Parley state in the project.
By default, .parley/ is excluded from review diff file lists when local storage is active.
To include it again, set:
ignore_parley_dir = falsein:
<active-store>/config.toml
Main docs website:
Project docs in this repository:
Docs site source and deployment tooling:
Apache-2.0

