Skip to main content

Terminal-based spec review tool with real-time AI conversation

Project description

Revspec

A review tool for AI-generated spec documents with real-time AI conversation. Comment on specific lines, get AI replies instantly, resolve discussions, submit for rewrites, and approve — all without leaving the terminal.

Why

When an AI generates a spec, the human review step breaks the agentic loop. You have to open the file separately, read it, then type unstructured feedback. Revspec closes this loop with a TUI that lets you comment inline and discuss with the AI in real-time — like a chatroom anchored to the spec.

Install

pipx install revspec

Or with pip:

pip install revspec

Requires Python 3.11+. No native dependencies.

Claude Code plugin

Install the /revspec skill for Claude Code:

claude install icyrainz/revspec-py

This adds the /revspec slash command. After generating or editing a spec, use /revspec (or /revspec <path>) to launch an interactive review session with real-time AI conversation.

From source

git clone https://github.com/icyrainz/revspec-py.git
cd revspec-py
uv venv && uv pip install hatchling editables && uv pip install -e . --no-build-isolation

Usage

revspec spec.md

Opens a TUI with vim-style navigation. Press c on any line to open a thread and start commenting.

Keybindings

Navigation

Key Action
j/k Move cursor down/up
gg / G Go to top / bottom
Ctrl+D/U Half page down/up
H/M/L Jump to screen top / middle / bottom
zz Center cursor line in viewport
/ Search (smartcase)
n/N Next/prev search match
Esc Clear search highlights
]t/[t Next/prev thread
]r/[r Next/prev unread AI reply
]1/[1 Next/prev h1 heading
]2/[2 Next/prev h2 heading
]3/[3 Next/prev h3 heading
Ctrl+O/I Jump list back/forward
'' Jump to previous position

Review

Key Action
c Open thread / comment on line
r Resolve thread (toggle)
R Resolve all pending
dd Delete thread (with confirm)
t List threads (Ctrl+F to filter all/active/resolved)
S Submit for rewrite (AI updates spec, TUI reloads)
A Approve spec (finalize and exit)

Toggles

Key Action
\w Toggle line wrapping
\n Toggle line numbers

Commands

Key Action
:q Quit (warns if unresolved threads)
:q! Force quit (also :wq!, :qa!, etc.)
:{N} Jump to line N
:wrap Toggle line wrapping
:submit Submit for rewrite
:approve Approve spec
:resolve Resolve thread
:reload Reload spec
:help Show help
Ctrl+R Reload spec (when modified externally)
Ctrl+C Force quit
? Help

Thread popup

The thread popup has two vim-style modes, indicated by border color and label:

  • Insert mode (mauve border) — type your comment, Tab sends (stays in insert mode for chat-like flow), Esc switches to normal mode
  • Normal mode (blue/green border) — j/k and Ctrl+D/U scroll the conversation, gg/G top/bottom, i/c to reply, r to resolve, q/Esc to close. Border is green when resolved, blue when open.

Markdown rendering

Revspec renders markdown in-place:

  • Headings — colored and bold, #######
  • Inline — bold, italic, bold-italic, strikethrough, code, links
  • Fenced code blocks — markers dimmed, body in green
  • Tables — box-drawing borders, header row bolded, auto-column-widths
  • Lists — unordered, ordered, task lists
  • Blockquotes — bar gutter, italicized text
  • Cursor line highlighting and search highlights

Live AI Integration

Revspec communicates with AI coding tools (Claude Code, etc.) via CLI subcommands:

revspec watch <file.md>

Blocks until the reviewer acts, then returns structured output:

=== New Comments ===
Thread: x1a3f (line 14)
  Context:
      12: The system uses polling...
    > 14: it sends a notification via webhook.
      16: resource state.
  [reviewer]: this is unclear

To reply: revspec reply spec.md x1a3f "<your response>"
When done replying, run: revspec watch spec.md

Watch exits on three events:

  • Comment/reply — returns thread content for AI to respond
  • Submit (S) — returns resolved thread summaries for AI to rewrite the spec
  • Approve (A) — spec is finalized
  • Session end — reviewer quit the TUI

revspec reply <file.md> <threadId> "<text>"

Sends an AI reply that appears instantly in the reviewer's TUI.

The loop

1. AI generates spec
2. AI launches: revspec spec.md (in tmux pane)
3. AI runs: revspec watch spec.md (blocks)
4. Reviewer comments → AI replies → watch again
5. Reviewer resolves threads → presses S (submit)
6. Watch returns resolved thread summaries → AI rewrites spec
7. TUI reloads with new spec → reviewer continues reviewing
8. Repeat 3-7 until A (approve)

Testing

just test             # Unit + integration (pytest)
just pytest-watch     # Watch mode

206 tests covering state, protocol, markdown, watch, reply, and bugfixes.

Protocol

Communication happens through a JSONL file (spec.review.jsonl) — append-only, both sides write to it. The JSONL is the single source of truth for the review session.

Event types

{"type":"comment","threadId":"x1a3f","line":14,"author":"reviewer","text":"unclear","ts":1710400000}
{"type":"reply","threadId":"x1a3f","author":"owner","text":"I'll fix it","ts":1710400005}
{"type":"resolve","threadId":"x1a3f","author":"reviewer","ts":1710400010}
{"type":"submit","author":"reviewer","ts":1710400050}
{"type":"approve","author":"reviewer","ts":1710400060}
{"type":"session-end","author":"reviewer","ts":1710400070}

The submit event acts as a round delimiter — the AI rewrites the spec, and the TUI reloads. Events before a submit reference the previous spec version.

Thread statuses: open (awaiting AI reply), pending (AI replied, awaiting reviewer), resolved, outdated.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

revspec-0.4.0.tar.gz (127.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

revspec-0.4.0-py3-none-any.whl (43.6 kB view details)

Uploaded Python 3

File details

Details for the file revspec-0.4.0.tar.gz.

File metadata

  • Download URL: revspec-0.4.0.tar.gz
  • Upload date:
  • Size: 127.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for revspec-0.4.0.tar.gz
Algorithm Hash digest
SHA256 f1516b33d17a3b7ad1f412f5b98b606cbefbc446f235af59259870c1fc1f6f43
MD5 1ac8bbc22d68bc8f98c3c193455e0621
BLAKE2b-256 61e9af0bda3052a0fb6cbe7e0011fe3381ad0938c2cf6f4d0a7b24e30991093e

See more details on using hashes here.

File details

Details for the file revspec-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: revspec-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 43.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for revspec-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 512c054fef124a9543fa54798e7b3e2605c04d2d8f0552aa13084d996910ed43
MD5 d7248d45d7729ee4ee426fe99f712b96
BLAKE2b-256 fac9e86aaa45b0e301222cd09db6fc8e7b510dd81e4c0a42425daf8eedcbb46f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page