diff --git a/README.md b/README.md
index 01a9093..a947069 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,11 @@
-
+
+
+
## Why not just `/resume`?
@@ -168,7 +172,7 @@ opened the session *asking for*, so it's weighted hardest; **length normalizatio
sprawling transcript that mentions your term once no longer outranks a short, on-point session.
Near-ties are then nudged by **recency** and by how often you've actually resumed that session
(read off agsearch's own resume log). Badge `N/T` = query terms matched. A word that barely exists
-anywhere (a typo like `alibrry`) falls back to subsequence matching. No modes or flags.
+anywhere (a typo like `conection`) falls back to subsequence matching. No modes or flags.
**Honest limit:** this is lexical, not semantic. Ranking beats an unordered `rg` dump, but it
is not a guarantee that row one is the session you meant. Because transcripts are large,
diff --git a/agsearch b/agsearch
index 6578cdb..04339bb 100755
--- a/agsearch
+++ b/agsearch
@@ -1041,7 +1041,7 @@ def build_sessions(lines):
fh.write("\n".join(out))
-# Common words that add noise, not signal, to a search ("migration OF alibrary").
+# Common words that add noise, not signal, to a search ("migration OF the database").
_STOP = {"of", "the", "a", "an", "to", "for", "in", "on", "and", "or", "is", "it", "this",
"that", "with", "from", "by", "at", "as", "be", "are", "was", "were", "how", "do",
"i", "my", "me", "we", "you", "about", "into", "using", "use", "some", "any"}
@@ -1219,7 +1219,7 @@ def rank_sessions(rows, qterms, usage=None, now=None):
length normalization, so a sprawling session no longer outranks a short exact match, and
what a session was *opened to do* outweighs a passing mention buried in it. The result is
then nudged by recency and how often you've resumed that session. A term that exists almost
- nowhere as text (a typo like 'alibrry') falls back to subsequence matching.
+ nowhere as text (a typo like 'conection') falls back to subsequence matching.
"""
usage = usage or {}
n = len(rows) or 1
diff --git a/docs/demo.gif b/docs/demo.gif
new file mode 100644
index 0000000..c26cd4c
Binary files /dev/null and b/docs/demo.gif differ
diff --git a/docs/demo.tape b/docs/demo.tape
deleted file mode 100644
index 0d38c2a..0000000
--- a/docs/demo.tape
+++ /dev/null
@@ -1,42 +0,0 @@
-# VHS tape for the README demo GIF. https://github.com/charmbracelet/vhs
-#
-# brew install vhs
-# vhs docs/demo.tape # writes docs/demo.gif
-#
-# The tape is committed rather than just the GIF on purpose: re-recording after
-# a UI change is `vhs docs/demo.tape`, not getting the take right again.
-#
-# Keep it under ~15 seconds. The demo's whole job is to show that row one is
-# the session you meant — not to tour the flags.
-
-Output docs/demo.gif
-
-Set Shell "zsh"
-Set FontSize 16
-Set Width 1200
-Set Height 640
-Set Padding 20
-Set Theme "Catppuccin Mocha"
-Set TypingSpeed 60ms
-
-Hide
-Type "clear" Enter
-Show
-
-Sleep 700ms
-Type "agsearch"
-Sleep 400ms
-Enter
-
-# Cold list settles, then type the thing you half-remember.
-Sleep 2s
-Type "stripe tax"
-Sleep 2500ms
-
-# The point of the whole product: the preview pane already shows the matched
-# line, highlighted, before spending a token.
-Sleep 1500ms
-
-# Enter resumes — into Claude Code or Codex, whichever the session came from.
-Enter
-Sleep 3s