File Comments

Attach comments to specific lines or selections in supported files. Comments are persistent, threaded, and accessible to AI agents through the crispy CLI.

Adding a comment

  1. Select text in a supported file, HTML preview, or browser page.
  2. Click the 💬 Add Comment button that appears near your selection.
  3. Type your comment in the inline composer and press Cmd+Return to submit.

In code/source mode, right-click and choose Add Comment to Selection, or press Ctrl+Shift+C. The comments panel opens on the right.

A blue dot appears in the gutter and a subtle highlight underlines the anchored text.

When line numbers are on, the comment dot sits in its own lane to the left of the numbers, so the two never overlap and stay aligned with the line as you scroll. In rich Markdown with All Text Views, the comment button and the source-line labels also keep separate lanes. See Code Editor for the line-number setting.

Comments panel

Toggle the panel with Option+Cmd+C. Each thread shows:

  • Anchor context — the code or text you commented on
  • Author and timestamp
  • Comment body
  • Action buttons — Reply, Resolve, Delete

Each pane controls its own panel, so you can keep it open in one split and closed in another.

Replying and resolving

Click a thread to reply. Click the green checkmark to resolve a thread. Resolved threads fade and disappear from the active list. Use the panel filter (Active / Resolved / Stale / All) to show them again.

Stale comments

If the anchored text changes beyond recognition, the comment is marked stale with a dashed underline. The original anchor text is preserved so you can see what it referred to.

Cross-file view

Open View > All Comments in Vibespace (Ctrl+Shift+Cmd+C) to see every comment across all files, grouped by file.

Bulk operations

The panel toolbar provides bulk actions:

  • Copy All / Copy Unresolved — copies threads as formatted markdown (designed for pasting into agent conversations)
  • Delete Resolved / Delete All — bulk cleanup

HTML preview and browser comments

In HTML previews and browser pages, comments anchor to DOM elements via CSS selectors. Selecting text in a rendered preview shows the same 💬 Add Comment button. URLs are canonicalized (tracking params stripped, fragments dropped) for stable anchoring across page reloads.

Browser comments are scoped to the canonical URL. Navigating to a different page hides unrelated threads.

Notebook comments

In Jupyter notebooks, comments anchor to a cell’s id rather than a line. A thread stays attached to its cell even as you reorder others, and the panel labels each notebook thread by position: Cell 1, Cell 2, and so on.

Agent integration

AI agents can manage comments via the crispy CLI:

crispy comments list --file src/foo.swift
crispy comments add --file src/foo.swift --line 42 --comment "consider a guard here"
crispy comments reply --id <comment-id> --comment "fixed in abc123"
crispy comments resolve --id <comment-id>

Comments authored by agents display an agent badge.

Keyboard shortcuts

ActionShortcut
Add comment to selectionCtrl+Shift+C
Toggle comments panelOption+Cmd+C
Cross-file comments viewCtrl+Shift+Cmd+C
Submit commentCmd+Return

Known limitations

  • Anchor relocation searches ±50 lines. If text moves further, the comment goes stale.
  • Comments are single-user; real-time collaboration is unavailable.
  • Typst, AsciiDoc, and Graphviz render previews do not support comments.
  • Cross-origin iframes in browser pages cannot be commented on.