---
slug: "hmm"
source_type: "skill_md"
source_url: "https://cdn.jsdelivr.net/gh/ryanlchan/hmm@main/SKILL.md"
repo: "https://github.com/ryanlchan/hmm"
source_file: "SKILL.md"
branch: "main"
---
---
name: hmm
description: Send LLM output to a browser-based feedback and commenting UI for review. Use when the user wants to annotate, comment on, or edit an LLM response with inline track changes and structured feedback export.
license: MIT
metadata:
  author: ryanlchan
  version: "1.1"
allowed-tools: Bash Read
---

Send your last response to the llm-feedback commenting UI for review, then wait for the user to send feedback back.

## Steps

1. Determine the skill root directory (the directory containing this `SKILL.md` file).
2. Check for a saved mode preference:
   ```bash
   MODE="$(bash "$SKILL_ROOT/scripts/mode-preference.sh" get || true)"
   ```
3. If there is no saved preference, ask:
   `Do you want to use the local hmm UI with direct send-back, or the hosted web UI at https://hmm.saddlepeaks.com? I can remember that choice for later.`
   After the user answers, save it:
   ```bash
   bash "$SKILL_ROOT/scripts/mode-preference.sh" set local
   # or
   bash "$SKILL_ROOT/scripts/mode-preference.sh" set web
   ```
   If the user explicitly asks to switch modes later, update the saved preference.
4. Write your last response to a temporary file:
   ```
   TMPDIR=$(mktemp -d)
   cat > "$TMPDIR/.hmm_preload.txt" << 'PRELOAD_EOF'
   <your last response here>
   PRELOAD_EOF
   ```
5. If `MODE=local`, run the local server and poll for feedback:
   ```bash
   FEEDBACK_FILE=$(bash "$SKILL_ROOT/scripts/serve.sh" "$TMPDIR/.hmm_preload.txt")
   ```
   Tell the user the feedback UI is open at http://localhost:8723. Let them know they can click **"Send to Claude"** in the summary modal to send feedback directly back.
   Then poll:
   ```bash
   while [ ! -f "$FEEDBACK_FILE" ]; do sleep 2; done
   cat "$FEEDBACK_FILE"
   ```
6. If `MODE=web`, open the hosted app with the response preloaded:
   ```bash
   WEB_URL="$(node "$SKILL_ROOT/scripts/build-web-url.js" "https://hmm.saddlepeaks.com" "$TMPDIR/.hmm_preload.txt")"
   open "$WEB_URL"
   ```
   The preload is encoded in the URL fragment, so it stays out of query params and referer headers, and the app removes it from the address bar after load.
   Tell the user the feedback UI is open at `https://hmm.saddlepeaks.com`, and that in web mode they should use **Copy to Clipboard** or **Download Markdown** and paste the feedback back into chat when ready.
7. When feedback arrives, read it and act on it. The feedback is structured markdown containing the user's comments and edits.

## What the UI does

- Displays the text in an editable view with inline track changes
- Users can select text and add comments
- The "Summarize" button exports all comments and edits as structured markdown
- Local mode includes "Send to Claude" and posts feedback back so Claude can act on it
- Hosted web mode supports copy/download export instead of direct send-back
- Supports both desktop (sidebar comments) and mobile (bottom sheet) layouts
