Help us improve
Share bugs, ideas, or general feedback.
From live-feedback
Use whenever you're about to edit a markdown file that might be under live review via the live-feedback plugin (file-backed docs). Edits must flow through the MCP tools so the plugin serializes them back to disk — writing to the .md directly desyncs the live editor and the file.
npx claudepluginhub fryanpan/claude-live-feedback-plugin --plugin live-feedbackHow this skill is triggered — by the user, by Claude, or both
Slash command
/live-feedback:editing-review-docsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The live-feedback plugin supports **file-backed review docs**: the
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.
Share bugs, ideas, or general feedback.
The live-feedback plugin supports file-backed review docs: the
user calls attach_file(docId, path) once to bind a .md file to
a live Yjs doc. After that:
writeFileSync debounced in
rooms.ts:scheduleFileWrite).Write/Edit/str_replace the .md on disk, the live doc does
NOT pick up your change. Bryan keeps seeing the old content in his
browser and his next edit there will overwrite your file change on
the next debounced flush.Therefore: before editing any markdown file, check whether it's under live review. If yes, edit through MCP tools, not the filesystem.
list_docs (from the live-feedback MCP). Look for a doc
whose sourceUrl field equals (or ends with) the path you're
about to edit.Pick the smallest tool that does the job, in this order:
find_and_replace(docId, find, replace, { contextBefore?, contextAfter?, occurrence? }).
Works across all block types including table cells. Use
contextBefore/contextAfter to disambiguate when the same string
appears more than once.rewrite_thread_region(docId, threadId, replacement). Primary
path when you're responding to a reviewer's comment — the anchor
already picks the exact text they pointed at.insert_blocks_after_thread(docId, threadId, markdown). Accepts GFM including tables.seed_doc(docId, markdown).
Fails if the doc already has any content.create_anchor(docId, find, …)
to pin positions, then edit_at_anchor(docId, anchorId, …) for
each. Anchors survive intermediate user edits.Do NOT:
Write / Edit / str_replace on the .md while it's attached
— your change silently loses to the live editor's next flush.git checkout / git stash pop a file that's attached — same
divergence problem.<channel source="live-feedback" ...>.list_docs returns a doc whose sourceUrl matches your target
path. Sole-authoritative check./review/<docId>?as=bryan URL recently.When in doubt, check list_docs before touching a .md — it's
one tool call and the cost of being wrong is a frustrating
out-of-sync bug for Bryan.
For context, so the "edit via MCP" constraint feels grounded:
attach_file(docId, path) binds the doc to the file. Seeds the
Yjs fragment from disk if the fragment is empty.