{
  "id": 18939017,
  "title": "How I made \"jump to message\" work in ChatGPT, Claude and Gemini",
  "url": "https://urgent.news/2026/11/08/how-i-made-jump-to-message-work-in-chatgpt-claude-and-gemini",
  "topic": "ai",
  "section": "AI",
  "published": "2026-11-08T13:11:30.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/rishit_sharma_4bb94fecd6f/how-i-made-jump-to-message-work-in-chatgpt-claude-and-gemini-2po7"
  },
  "original_language": "en",
  "account": "The author, a third-year student, built a Chrome extension called DogEar that adds a ☆ under every answer in AI chat platforms like ChatGPT, Claude, and Gemini. The extension allows users to star an answer, and later click it in a list to have the chat scroll straight back to the starred message. However, making this feature reliable proved challenging due to several issues.\n\nFirstly, Claude's chat virtualizes messages, keeping only those visible on the screen in the DOM. If an answer is saved and the user is now far down the chat, querying for the saved message in the DOM won't yield any results, even though the answer still exists in the chat.\n\nSecondly, AI chat platforms load messages lazily, meaning older messages arrive in batches as the user scrolls up. This results in a shift of positions on the page every time a new batch is loaded, making it difficult to maintain consistent message referencing.\n\nLastly, the websites used by these AI chat platforms frequently change their markup and redesigns, often without a public API for accessing chat messages. This constant change makes it hard to reliably recognise the starred message in the future.\n\nTo overcome these challenges, DogEar uses a multi-step approach. Firstly, it saves multiple ways to recognise the message later, such as the site's own message ID (when available), a hash of the text, or the first few words of the text. The FNV-1a hash function is used to generate a small hash of the text, ensuring that small layout changes won't break the recognition.\n\nWhen the user stars an answer, DogEar remembers its position in one of three ways: using the site's own message ID, matching the hashed text, or matching the first few words of the text. If an item was saved with a message ID, DogEar uses that ID to find the message. If not, it searches for a match based on the hashed text or the first few words. This process works when the message is still on the page.\n\nHowever, the primary challenge lies in finding the message when it's not on the page, especially after lazy loading by the chat platform. To tackle this, DogEar measures the distance from the answer to the bottom of the chat. This distance remains constant as older messages load at the top, allowing the extension to compute the target position accurately. The chat scrolls from the top when the message isn't found, loading batches of older messages until the chat is tall enough to reach the target position. Finally, the extension scrolls straight to the starred message within the chat.",
  "summary": "I'm a third-year student, and a lot of my studying and project work happens in AI chats. The chats get long. The useful answer is always somewhere around message 78, and finding it again means a lot of scrolling. So I built DogEar , a Chrome extension that adds a ☆ under every answer in ChatGPT, Claude, Gemini, Perplexity and Grok. You star an answer, and later you click it in a list and the chat…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 2,
    "also_reported_by": [
      {
        "outlet": "Engadget",
        "title": "Claude Personal Finance vs. ChatGPT Finances: What sets them apart?",
        "url": "https://urgent.news/2026/11/07/claude-personal-finance-vs-chatgpt-finances-what-sets-them-apart",
        "published": "2026-11-07T23:10:20.000Z"
      }
    ]
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}