The proposals UI

~3 min read

The proposals UI

Where you review, accept, or reject agent proposals.

How to open it

The proposals queue lives in the Inspector as its own tab — the tray icon in the inspector tab bar. It fills (tray.full.fill) and shows a count when proposals are pending. Click it to see the list.

The layout

The Proposals tab is a single pane: a list of pending proposals at the top, and clicking any row opens a diff sheet over it.

┌─ 3 pending ─────────────────────────────┐
│ ✏ Claude Desktop · 2m       +12 / −3    │
│   write_note  Inbox/random.md           │
│                                         │
│ ✏ Claude Code · 5m          +5          │
│   patch_section  Projects/Lettuce.md    │
│                                         │
│ + Tag Curator · 1h          +2          │
│   write_note  Reading/x.md              │
└─────────────────────────────────────────┘

Each row is compact: an operation icon (create / modify / delete / move), the proposing agent’s key label, a relative timestamp, the MCP tool that produced it, the target path, and the +N / −M line delta.

The diff sheet

Click a row to open the review sheet. It’s a single-pane unified diff — line-by-line, added lines in green (+), removed in red (), context in plain text — with a header showing the tool, agent label, and target path. A move proposal also discloses how many other notes will have their inbound links ([[wikilinks]] and [text](path.md) Markdown links) rewritten if you accept.

Three controls at the bottom:

Button Action
Reject Discards the proposal (see below).
Show in note Opens the target file in the editor and closes the sheet.
Accept (⌘↩) Applies the change.

Accept

Applies the proposal through the same commit path the live write tools use — attribution, soft-locks, link-rewrites, and reindex all behave as if the agent had written directly. On success the proposal file is deleted from .lettuce/proposals/.

Before writing, Lettuce re-checks staleness: it compares the file’s current content to the before content the proposal captured. If they no longer match, the accept is refused with a staleness reason (see Suggestions mode/04 Staleness and conflicts) — there is no merge dialog, the write simply doesn’t happen.

Reject

Discards the proposal — its file is deleted from .lettuce/proposals/. There’s no rejection note; rejecting is silent and immediate. The agent can notice the proposal is gone on its next list_my_proposals call.

Show in note

Opens the target file in the editor and closes the sheet. Useful when you want to fix something the proposal almost-but-not-quite got right — edit the file directly, then come back and reject the proposal.