diff --git a/README.md b/README.md
index 510f568..f913062 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,6 @@ Search, inspect, chat with, and resume your local Claude Code and Codex history
[](LICENSE)
[](https://python.org)
-[](#development)
[](#privacy)
[](#providers)
@@ -32,7 +31,7 @@ Coding agents leave behind useful local transcripts, but built-in resume pickers
- "the Docker healthcheck that broke deploys"
- "the branch where the OAuth callback tests were added"
-**code-recall turns those transcripts into a searchable memory layer.** It indexes Claude Code and Codex sessions, ranks results with keyword search, semantic search, reranking, and graph signals, then lets you jump back into the right project with the right provider command.
+code-recall indexes Claude Code and Codex sessions, ranks results with keyword search, semantic search, reranking, and graph signals, then lets you jump back into the right project with the right provider command.
## What It Does
@@ -46,19 +45,15 @@ Coding agents leave behind useful local transcripts, but built-in resume pickers
## Screenshots
-All README media is generated from synthetic demo data using [scripts/generate_demo_assets.py](scripts/generate_demo_assets.py). It does not come from a real work index.
+Generated from synthetic demo data via [scripts/generate_demo_assets.py](scripts/generate_demo_assets.py) — not from a real index.
-| Search across providers | Understand why it matched |
+| Search across providers | Why this matched |
|---|---|
-|
|
|
+|
|
|
-| Inspect activity | Find related sessions |
-|---|---|
-|
|
|
-
-| Chat with a transcript |
-|---|
-|
|
+
+
+
## Install
@@ -195,17 +190,16 @@ code-recall keeps the index fresh in two ways:
- Every search/TUI startup runs a quick incremental index over Claude Code and Codex sources before searching.
- On first run or `code-recall install-hooks`, code-recall installs a Claude Code `SessionEnd` hook that runs `code-recall index --quiet` when Claude Code sessions end.
-Codex sessions are indexed on the next incremental index/search run. There is no Codex session-end hook installed today because Codex does not expose the same `SessionEnd` hook surface in this repo's integration path.
+Codex doesn't currently expose a session-end hook, so Codex sessions are picked up on the next incremental index or search.
## Privacy
-code-recall is designed for local developer recall:
+code-recall runs locally:
- The index is a local SQLite database under your app data directory.
- Keyword and graph search do not require network calls.
- Semantic search uses local embeddings.
- AI investigation and transcript chat are explicit actions, not automatic background calls.
-- README screenshots are synthetic and reproducible from [scripts/generate_demo_assets.py](scripts/generate_demo_assets.py).
## Architecture
@@ -300,27 +294,7 @@ uv run pytest tests/test_search_quality.py -v
## Release
-Releases are tag driven. CI verifies the version declarations match before publishing. The release workflow builds distributions, publishes to PyPI through Trusted Publishing, and creates or updates the matching GitHub release.
-
-Trusted Publisher fields:
-
-| Field | Value |
-|-------|-------|
-| PyPI project name | `code-recall` |
-| Owner | `lupuletic` |
-| Repository name | `code-recall` |
-| Workflow name | `release.yml` |
-| Environment name | `pypi` |
-
-```bash
-uv run python scripts/check_version.py
-uv run pytest -q
-uv run python -m compileall -q src tests
-uv build --no-sources
-
-git tag v0.2.2
-git push origin main --tags
-```
+Release workflow and Trusted Publisher details: [docs/RELEASE.md](docs/RELEASE.md).
## License
diff --git a/docs/RELEASE.md b/docs/RELEASE.md
new file mode 100644
index 0000000..d0c6e77
--- /dev/null
+++ b/docs/RELEASE.md
@@ -0,0 +1,25 @@
+# Releasing code-recall
+
+Releases are tag driven. CI verifies the version declarations match before publishing. The release workflow builds distributions, publishes to PyPI through Trusted Publishing, and creates or updates the matching GitHub release.
+
+## Trusted Publisher fields
+
+| Field | Value |
+|-------|-------|
+| PyPI project name | `code-recall` |
+| Owner | `lupuletic` |
+| Repository name | `code-recall` |
+| Workflow name | `release.yml` |
+| Environment name | `pypi` |
+
+## Cutting a release
+
+```bash
+uv run python scripts/check_version.py
+uv run pytest -q
+uv run python -m compileall -q src tests
+uv build --no-sources
+
+git tag v0.2.2
+git push origin main --tags
+```
diff --git a/docs/assets/code-recall-activity.svg b/docs/assets/code-recall-activity.svg
index 2472ba7..389856e 100644
--- a/docs/assets/code-recall-activity.svg
+++ b/docs/assets/code-recall-activity.svg
@@ -19,226 +19,226 @@
font-weight: 700;
}
- .terminal-964672681-matrix {
+ .terminal-2635179419-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-964672681-title {
+ .terminal-2635179419-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-964672681-r1 { fill: #c5c8c6 }
-.terminal-964672681-r2 { fill: #a0a0a0;font-weight: bold }
-.terminal-964672681-r3 { fill: #a0a0a0 }
-.terminal-964672681-r4 { fill: #121212 }
-.terminal-964672681-r5 { fill: #656565 }
-.terminal-964672681-r6 { fill: #e0e0e0 }
-.terminal-964672681-r7 { fill: #c9c9c9 }
-.terminal-964672681-r8 { fill: #494949 }
-.terminal-964672681-r9 { fill: #6f6f6f }
-.terminal-964672681-r10 { fill: #e0e0e0;font-weight: bold }
-.terminal-964672681-r11 { fill: #7d7d7d;font-weight: bold }
-.terminal-964672681-r12 { fill: #7d7d7d }
-.terminal-964672681-r13 { fill: #737373 }
-.terminal-964672681-r14 { fill: #616161 }
-.terminal-964672681-r15 { fill: #424242 }
-.terminal-964672681-r16 { fill: #5c5c5c }
-.terminal-964672681-r17 { fill: #717171;font-weight: bold }
-.terminal-964672681-r18 { fill: #717171 }
-.terminal-964672681-r19 { fill: #2d2d2d }
-.terminal-964672681-r20 { fill: #525252 }
-.terminal-964672681-r21 { fill: #353535 }
-.terminal-964672681-r22 { fill: #ededed }
-.terminal-964672681-r23 { fill: #b0b0b0;font-weight: bold }
-.terminal-964672681-r24 { fill: #515151 }
+ .terminal-2635179419-r1 { fill: #c5c8c6 }
+.terminal-2635179419-r2 { fill: #a0a0a0;font-weight: bold }
+.terminal-2635179419-r3 { fill: #a0a0a0 }
+.terminal-2635179419-r4 { fill: #121212 }
+.terminal-2635179419-r5 { fill: #0178d4 }
+.terminal-2635179419-r6 { fill: #e0e0e0 }
+.terminal-2635179419-r7 { fill: #398280 }
+.terminal-2635179419-r8 { fill: #ff2c7a }
+.terminal-2635179419-r9 { fill: #6f6f6f }
+.terminal-2635179419-r10 { fill: #e0e0e0;font-weight: bold }
+.terminal-2635179419-r11 { fill: #6b8095;font-weight: bold }
+.terminal-2635179419-r12 { fill: #6b8095 }
+.terminal-2635179419-r13 { fill: #068ea3 }
+.terminal-2635179419-r14 { fill: #4a6580 }
+.terminal-2635179419-r15 { fill: #065530 }
+.terminal-2635179419-r16 { fill: #98a84b }
+.terminal-2635179419-r17 { fill: #717171;font-weight: bold }
+.terminal-2635179419-r18 { fill: #717171 }
+.terminal-2635179419-r19 { fill: #7f0c7f }
+.terminal-2635179419-r20 { fill: #525252 }
+.terminal-2635179419-r21 { fill: #0c460c }
+.terminal-2635179419-r22 { fill: #d08442 }
+.terminal-2635179419-r23 { fill: #ffa62b;font-weight: bold }
+.terminal-2635179419-r24 { fill: #495259 }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- code-recall v0.2.2
+ code-recall v0.2.2
-
-
-
- code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
-▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
-▊stripe webhook signature▎
-▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
-Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
-
-▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
-2 of 2 results for "stripe webhook signature"in all providers▎
-▎Fix Stripe webhook signature verification
- 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
-strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
-2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
-why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
-2 cmds▎Files touched
-▎- src/webhooks/stripe.ts
- 2CodexDebug checkout webhook retry handling▎- src/routes/webhooks.ts
-weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎- tests/webhooks/stripe-signature.test.ts
-2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎
-why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎Commands run
-▎- pnpm test tests/webhooks/stripe-signature.test.ts
-▎- stripe listen --forward-to localhost:3000/api/webhooks/stripe
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
- esc Close/Quit ^o Settings ▏^k palette
+
+
+
+ code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
+▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
+▊stripe webhook signature▎
+▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
+Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
+
+▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+2 of 2 results for "stripe webhook signature"in all providers▎
+▎Fix Stripe webhook signature verification
+ 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
+strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
+2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
+why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
+2 cmds▎Files touched
+▎- src/webhooks/stripe.ts
+ 2CodexDebug checkout webhook retry handling▎- src/routes/webhooks.ts
+weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎- tests/webhooks/stripe-signature.test.ts
+2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎
+why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎Commands run
+▎- pnpm test tests/webhooks/stripe-signature.test.ts
+▎- stripe listen --forward-to localhost:3000/api/webhooks/stripe
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+ esc Close/Quit ^o Settings ▏^k palette
diff --git a/docs/assets/code-recall-ai-chat.svg b/docs/assets/code-recall-ai-chat.svg
index eaaa771..ec42802 100644
--- a/docs/assets/code-recall-ai-chat.svg
+++ b/docs/assets/code-recall-ai-chat.svg
@@ -19,228 +19,228 @@
font-weight: 700;
}
- .terminal-2132318520-matrix {
+ .terminal-741049693-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-2132318520-title {
+ .terminal-741049693-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-2132318520-r1 { fill: #c5c8c6 }
-.terminal-2132318520-r2 { fill: #a0a0a0;font-weight: bold }
-.terminal-2132318520-r3 { fill: #a0a0a0 }
-.terminal-2132318520-r4 { fill: #121212 }
-.terminal-2132318520-r5 { fill: #191919 }
-.terminal-2132318520-r6 { fill: #e0e0e0 }
-.terminal-2132318520-r7 { fill: #c9c9c9 }
-.terminal-2132318520-r8 { fill: #494949 }
-.terminal-2132318520-r9 { fill: #6f6f6f }
-.terminal-2132318520-r10 { fill: #656565 }
-.terminal-2132318520-r11 { fill: #e0e0e0;font-weight: bold }
-.terminal-2132318520-r12 { fill: #7d7d7d;font-weight: bold }
-.terminal-2132318520-r13 { fill: #7d7d7d }
-.terminal-2132318520-r14 { fill: #737373 }
-.terminal-2132318520-r15 { fill: #616161 }
-.terminal-2132318520-r16 { fill: #424242 }
-.terminal-2132318520-r17 { fill: #999999 }
-.terminal-2132318520-r18 { fill: #717171;font-weight: bold }
-.terminal-2132318520-r19 { fill: #717171 }
-.terminal-2132318520-r20 { fill: #2d2d2d }
-.terminal-2132318520-r21 { fill: #525252 }
-.terminal-2132318520-r22 { fill: #353535 }
-.terminal-2132318520-r23 { fill: #5c5c5c }
-.terminal-2132318520-r24 { fill: #797979 }
-.terminal-2132318520-r25 { fill: #b0b0b0;font-weight: bold }
-.terminal-2132318520-r26 { fill: #515151 }
+ .terminal-741049693-r1 { fill: #c5c8c6 }
+.terminal-741049693-r2 { fill: #a0a0a0;font-weight: bold }
+.terminal-741049693-r3 { fill: #a0a0a0 }
+.terminal-741049693-r4 { fill: #121212 }
+.terminal-741049693-r5 { fill: #191919 }
+.terminal-741049693-r6 { fill: #e0e0e0 }
+.terminal-741049693-r7 { fill: #398280 }
+.terminal-741049693-r8 { fill: #ff2c7a }
+.terminal-741049693-r9 { fill: #6f6f6f }
+.terminal-741049693-r10 { fill: #0178d4 }
+.terminal-741049693-r11 { fill: #e0e0e0;font-weight: bold }
+.terminal-741049693-r12 { fill: #6b8095;font-weight: bold }
+.terminal-741049693-r13 { fill: #6b8095 }
+.terminal-741049693-r14 { fill: #068ea3 }
+.terminal-741049693-r15 { fill: #4a6580 }
+.terminal-741049693-r16 { fill: #065530 }
+.terminal-741049693-r17 { fill: #999999 }
+.terminal-741049693-r18 { fill: #717171;font-weight: bold }
+.terminal-741049693-r19 { fill: #717171 }
+.terminal-741049693-r20 { fill: #7f0c7f }
+.terminal-741049693-r21 { fill: #525252 }
+.terminal-741049693-r22 { fill: #0c460c }
+.terminal-741049693-r23 { fill: #98a84b }
+.terminal-741049693-r24 { fill: #797979 }
+.terminal-741049693-r25 { fill: #ffa62b;font-weight: bold }
+.terminal-741049693-r26 { fill: #495259 }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- code-recall v0.2.2
+ code-recall v0.2.2
-
-
-
- code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
-▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
-▊stripe webhook signature▎
-▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
-Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
-
-▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
-2 of 2 results for "stripe webhook signature"in all providers▎
-▎Fix Stripe webhook signature verification
- 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
-strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
-2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
-why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
-2 cmds▎Transcript chat
-▎Assistant provider: Claude Code
- 2CodexDebug checkout webhook retry handling▎
-weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎You: What changed and what should I verify before resuming?
-2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎
-why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎Claude Code: Session demo-claude-001 switched Stripe
-▎verification to the raw request body, added timestamp
-▎tolerance, and covered valid, tampered, and replayed
-▎signatures. Resume with `claude --resume
-▎claude-demo-claude-001`, then run `pnpm test
-▎tests/webhooks/stripe-signature.test.ts` and the Stripe CLI
-▎forwarding command.
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
-▎▊Ask this transcript... e.g. what did we conclude about cost▎
-▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
-▎
- esc Close/Quit ^o Settings ▏^k palette
+
+
+
+ code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
+▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
+▊stripe webhook signature▎
+▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
+Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
+
+▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+2 of 2 results for "stripe webhook signature"in all providers▎
+▎Fix Stripe webhook signature verification
+ 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
+strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
+2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
+why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
+2 cmds▎Transcript chat
+▎Assistant provider: Claude Code
+ 2CodexDebug checkout webhook retry handling▎
+weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎You: What changed and what should I verify before resuming?
+2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎
+why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎Claude Code: Session demo-claude-001 switched Stripe
+▎verification to the raw request body, added timestamp
+▎tolerance, and covered valid, tampered, and replayed
+▎signatures. Resume with `claude --resume
+▎claude-demo-claude-001`, then run `pnpm test
+▎tests/webhooks/stripe-signature.test.ts` and the Stripe CLI
+▎forwarding command.
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
+▎▊Ask this transcript... e.g. what did we conclude about cost▎
+▎▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
+▎
+ esc Close/Quit ^o Settings ▏^k palette
diff --git a/docs/assets/code-recall-demo.gif b/docs/assets/code-recall-demo.gif
index 743e4a1..6adf921 100644
Binary files a/docs/assets/code-recall-demo.gif and b/docs/assets/code-recall-demo.gif differ
diff --git a/docs/assets/code-recall-related.svg b/docs/assets/code-recall-related.svg
index bb2af70..a421009 100644
--- a/docs/assets/code-recall-related.svg
+++ b/docs/assets/code-recall-related.svg
@@ -19,225 +19,225 @@
font-weight: 700;
}
- .terminal-3830932642-matrix {
+ .terminal-3534508471-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-3830932642-title {
+ .terminal-3534508471-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-3830932642-r1 { fill: #c5c8c6 }
-.terminal-3830932642-r2 { fill: #a0a0a0;font-weight: bold }
-.terminal-3830932642-r3 { fill: #a0a0a0 }
-.terminal-3830932642-r4 { fill: #121212 }
-.terminal-3830932642-r5 { fill: #656565 }
-.terminal-3830932642-r6 { fill: #e0e0e0 }
-.terminal-3830932642-r7 { fill: #c9c9c9 }
-.terminal-3830932642-r8 { fill: #494949 }
-.terminal-3830932642-r9 { fill: #6f6f6f }
-.terminal-3830932642-r10 { fill: #e0e0e0;font-weight: bold }
-.terminal-3830932642-r11 { fill: #7d7d7d;font-weight: bold }
-.terminal-3830932642-r12 { fill: #7d7d7d }
-.terminal-3830932642-r13 { fill: #737373 }
-.terminal-3830932642-r14 { fill: #616161 }
-.terminal-3830932642-r15 { fill: #424242 }
-.terminal-3830932642-r16 { fill: #999999 }
-.terminal-3830932642-r17 { fill: #717171;font-weight: bold }
-.terminal-3830932642-r18 { fill: #717171 }
-.terminal-3830932642-r19 { fill: #2d2d2d }
-.terminal-3830932642-r20 { fill: #525252 }
-.terminal-3830932642-r21 { fill: #353535 }
-.terminal-3830932642-r22 { fill: #b0b0b0;font-weight: bold }
-.terminal-3830932642-r23 { fill: #515151 }
+ .terminal-3534508471-r1 { fill: #c5c8c6 }
+.terminal-3534508471-r2 { fill: #a0a0a0;font-weight: bold }
+.terminal-3534508471-r3 { fill: #a0a0a0 }
+.terminal-3534508471-r4 { fill: #121212 }
+.terminal-3534508471-r5 { fill: #0178d4 }
+.terminal-3534508471-r6 { fill: #e0e0e0 }
+.terminal-3534508471-r7 { fill: #398280 }
+.terminal-3534508471-r8 { fill: #ff2c7a }
+.terminal-3534508471-r9 { fill: #6f6f6f }
+.terminal-3534508471-r10 { fill: #e0e0e0;font-weight: bold }
+.terminal-3534508471-r11 { fill: #6b8095;font-weight: bold }
+.terminal-3534508471-r12 { fill: #6b8095 }
+.terminal-3534508471-r13 { fill: #068ea3 }
+.terminal-3534508471-r14 { fill: #4a6580 }
+.terminal-3534508471-r15 { fill: #065530 }
+.terminal-3534508471-r16 { fill: #999999 }
+.terminal-3534508471-r17 { fill: #717171;font-weight: bold }
+.terminal-3534508471-r18 { fill: #717171 }
+.terminal-3534508471-r19 { fill: #7f0c7f }
+.terminal-3534508471-r20 { fill: #525252 }
+.terminal-3534508471-r21 { fill: #0c460c }
+.terminal-3534508471-r22 { fill: #ffa62b;font-weight: bold }
+.terminal-3534508471-r23 { fill: #495259 }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- code-recall v0.2.2
+ code-recall v0.2.2
-
-
-
- code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
-▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
-▊stripe webhook signature▎
-▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
-Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
-
-▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
-2 of 2 results for "stripe webhook signature"in all providers▎
-▎Fix Stripe webhook signature verification
- 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
-strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
-2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
-why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
-2 cmds▎Related sessions
-▎- Debug checkout webhook retry handlingshared files: 1
- 2CodexDebug checkout webhook retry handling▎
-weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎
-2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎
-why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
- esc Close/Quit ^o Settings ▏^k palette
+
+
+
+ code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
+▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
+▊stripe webhook signature▎
+▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
+Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
+
+▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+2 of 2 results for "stripe webhook signature"in all providers▎
+▎Fix Stripe webhook signature verification
+ 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
+strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
+2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
+why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
+2 cmds▎Related sessions
+▎- Debug checkout webhook retry handlingshared files: 1
+ 2CodexDebug checkout webhook retry handling▎
+weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎
+2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎
+why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+ esc Close/Quit ^o Settings ▏^k palette
diff --git a/docs/assets/code-recall-search.svg b/docs/assets/code-recall-search.svg
index dfcaba3..831c474 100644
--- a/docs/assets/code-recall-search.svg
+++ b/docs/assets/code-recall-search.svg
@@ -19,226 +19,226 @@
font-weight: 700;
}
- .terminal-3799872596-matrix {
+ .terminal-3903611056-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-3799872596-title {
+ .terminal-3903611056-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-3799872596-r1 { fill: #c5c8c6 }
-.terminal-3799872596-r2 { fill: #a0a0a0;font-weight: bold }
-.terminal-3799872596-r3 { fill: #a0a0a0 }
-.terminal-3799872596-r4 { fill: #121212 }
-.terminal-3799872596-r5 { fill: #656565 }
-.terminal-3799872596-r6 { fill: #e0e0e0 }
-.terminal-3799872596-r7 { fill: #c9c9c9 }
-.terminal-3799872596-r8 { fill: #494949 }
-.terminal-3799872596-r9 { fill: #6f6f6f }
-.terminal-3799872596-r10 { fill: #e0e0e0;font-weight: bold }
-.terminal-3799872596-r11 { fill: #7d7d7d;font-weight: bold }
-.terminal-3799872596-r12 { fill: #7d7d7d }
-.terminal-3799872596-r13 { fill: #737373 }
-.terminal-3799872596-r14 { fill: #616161 }
-.terminal-3799872596-r15 { fill: #424242 }
-.terminal-3799872596-r16 { fill: #5c5c5c }
-.terminal-3799872596-r17 { fill: #717171;font-weight: bold }
-.terminal-3799872596-r18 { fill: #717171 }
-.terminal-3799872596-r19 { fill: #2d2d2d }
-.terminal-3799872596-r20 { fill: #525252 }
-.terminal-3799872596-r21 { fill: #353535 }
-.terminal-3799872596-r22 { fill: #999999 }
-.terminal-3799872596-r23 { fill: #b0b0b0;font-weight: bold }
-.terminal-3799872596-r24 { fill: #515151 }
+ .terminal-3903611056-r1 { fill: #c5c8c6 }
+.terminal-3903611056-r2 { fill: #a0a0a0;font-weight: bold }
+.terminal-3903611056-r3 { fill: #a0a0a0 }
+.terminal-3903611056-r4 { fill: #121212 }
+.terminal-3903611056-r5 { fill: #0178d4 }
+.terminal-3903611056-r6 { fill: #e0e0e0 }
+.terminal-3903611056-r7 { fill: #398280 }
+.terminal-3903611056-r8 { fill: #ff2c7a }
+.terminal-3903611056-r9 { fill: #6f6f6f }
+.terminal-3903611056-r10 { fill: #e0e0e0;font-weight: bold }
+.terminal-3903611056-r11 { fill: #6b8095;font-weight: bold }
+.terminal-3903611056-r12 { fill: #6b8095 }
+.terminal-3903611056-r13 { fill: #068ea3 }
+.terminal-3903611056-r14 { fill: #4a6580 }
+.terminal-3903611056-r15 { fill: #065530 }
+.terminal-3903611056-r16 { fill: #98a84b }
+.terminal-3903611056-r17 { fill: #717171;font-weight: bold }
+.terminal-3903611056-r18 { fill: #717171 }
+.terminal-3903611056-r19 { fill: #7f0c7f }
+.terminal-3903611056-r20 { fill: #525252 }
+.terminal-3903611056-r21 { fill: #0c460c }
+.terminal-3903611056-r22 { fill: #999999 }
+.terminal-3903611056-r23 { fill: #ffa62b;font-weight: bold }
+.terminal-3903611056-r24 { fill: #495259 }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- code-recall v0.2.2
+ code-recall v0.2.2
-
-
-
- code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
-▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
-▊stripe webhook signature▎
-▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
-Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
-
-▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
-2 of 2 results for "stripe webhook signature"in all providers▎
-▎Fix Stripe webhook signature verification
- 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
-strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
-2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
-why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
-2 cmds▎Score: strong (100%)
-▎Resume:claude --resume claude-demo-claude-001
- 2CodexDebug checkout webhook retry handling▎Provider capabilities: resume, model, branch, files, commands,
-weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎transcript
-2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎Model: claude-sonnet-4
-why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎Branch: fix/stripe-webhook-signature
-▎Messages: 23
-▎Source: Claude transcript ·
-▎/Users/demo/.code-agent-history/demo-claude-001.jsonl
-▎
-▎Started
-▎Production webhooks are failing signature verification after a
-▎framework upgrade.
-▎
-▎Left off
-▎Added raw body parsing and replay tests for Stripe webhook
-▎signature checks.
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
- esc Close/Quit ^o Settings ▏^k palette
+
+
+
+ code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
+▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
+▊stripe webhook signature▎
+▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
+Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
+
+▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+2 of 2 results for "stripe webhook signature"in all providers▎
+▎Fix Stripe webhook signature verification
+ 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
+strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
+2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
+why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
+2 cmds▎Score: strong (100%)
+▎Resume:claude --resume claude-demo-claude-001
+ 2CodexDebug checkout webhook retry handling▎Provider capabilities: resume, model, branch, files, commands,
+weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎transcript
+2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎Model: claude-sonnet-4
+why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎Branch: fix/stripe-webhook-signature
+▎Messages: 23
+▎Source: Claude transcript ·
+▎/Users/demo/.code-agent-history/demo-claude-001.jsonl
+▎
+▎Started
+▎Production webhooks are failing signature verification after a
+▎framework upgrade.
+▎
+▎Left off
+▎Added raw body parsing and replay tests for Stripe webhook
+▎signature checks.
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+ esc Close/Quit ^o Settings ▏^k palette
diff --git a/docs/assets/code-recall-why.svg b/docs/assets/code-recall-why.svg
index 38bfd20..f5c165a 100644
--- a/docs/assets/code-recall-why.svg
+++ b/docs/assets/code-recall-why.svg
@@ -19,226 +19,226 @@
font-weight: 700;
}
- .terminal-2897396268-matrix {
+ .terminal-3176050267-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-2897396268-title {
+ .terminal-3176050267-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-2897396268-r1 { fill: #c5c8c6 }
-.terminal-2897396268-r2 { fill: #a0a0a0;font-weight: bold }
-.terminal-2897396268-r3 { fill: #a0a0a0 }
-.terminal-2897396268-r4 { fill: #121212 }
-.terminal-2897396268-r5 { fill: #656565 }
-.terminal-2897396268-r6 { fill: #e0e0e0 }
-.terminal-2897396268-r7 { fill: #c9c9c9 }
-.terminal-2897396268-r8 { fill: #494949 }
-.terminal-2897396268-r9 { fill: #6f6f6f }
-.terminal-2897396268-r10 { fill: #e0e0e0;font-weight: bold }
-.terminal-2897396268-r11 { fill: #7d7d7d;font-weight: bold }
-.terminal-2897396268-r12 { fill: #7d7d7d }
-.terminal-2897396268-r13 { fill: #737373 }
-.terminal-2897396268-r14 { fill: #616161 }
-.terminal-2897396268-r15 { fill: #424242 }
-.terminal-2897396268-r16 { fill: #5c5c5c }
-.terminal-2897396268-r17 { fill: #717171;font-weight: bold }
-.terminal-2897396268-r18 { fill: #717171 }
-.terminal-2897396268-r19 { fill: #2d2d2d }
-.terminal-2897396268-r20 { fill: #525252 }
-.terminal-2897396268-r21 { fill: #353535 }
-.terminal-2897396268-r22 { fill: #999999 }
-.terminal-2897396268-r23 { fill: #b0b0b0;font-weight: bold }
-.terminal-2897396268-r24 { fill: #515151 }
+ .terminal-3176050267-r1 { fill: #c5c8c6 }
+.terminal-3176050267-r2 { fill: #a0a0a0;font-weight: bold }
+.terminal-3176050267-r3 { fill: #a0a0a0 }
+.terminal-3176050267-r4 { fill: #121212 }
+.terminal-3176050267-r5 { fill: #0178d4 }
+.terminal-3176050267-r6 { fill: #e0e0e0 }
+.terminal-3176050267-r7 { fill: #398280 }
+.terminal-3176050267-r8 { fill: #ff2c7a }
+.terminal-3176050267-r9 { fill: #6f6f6f }
+.terminal-3176050267-r10 { fill: #e0e0e0;font-weight: bold }
+.terminal-3176050267-r11 { fill: #6b8095;font-weight: bold }
+.terminal-3176050267-r12 { fill: #6b8095 }
+.terminal-3176050267-r13 { fill: #068ea3 }
+.terminal-3176050267-r14 { fill: #4a6580 }
+.terminal-3176050267-r15 { fill: #065530 }
+.terminal-3176050267-r16 { fill: #98a84b }
+.terminal-3176050267-r17 { fill: #717171;font-weight: bold }
+.terminal-3176050267-r18 { fill: #717171 }
+.terminal-3176050267-r19 { fill: #7f0c7f }
+.terminal-3176050267-r20 { fill: #525252 }
+.terminal-3176050267-r21 { fill: #0c460c }
+.terminal-3176050267-r22 { fill: #999999 }
+.terminal-3176050267-r23 { fill: #ffa62b;font-weight: bold }
+.terminal-3176050267-r24 { fill: #495259 }
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- code-recall v0.2.2
+ code-recall v0.2.2
-
-
-
- code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
-▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
-▊stripe webhook signature▎
-▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
-Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
-
-▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
-2 of 2 results for "stripe webhook signature"in all providers▎
-▎Fix Stripe webhook signature verification
- 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
-strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
-2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
-why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
-2 cmds▎Why this result matched
-▎Primary reason: matched text: Fix **Stripe** **webhook**
- 2CodexDebug checkout webhook retry handling▎**signature** verification
-weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎Keyword signal: rank 0.000
-2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎
-why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎Matched evidence
-▎- Fix **Stripe** **webhook** **signature** verification
-▎- Production **webhooks** are failing **signature**
-▎verification after a framework upgrade.
-▎- Added raw body parsing and replay tests for **Stripe**
-▎**webhook** **signature** checks.
-▎- Debugged **Stripe** **webhook** **signature** validation. The
-▎middleware parsed JSON before constructing the event, so the
-▎signed payload bytes no longer...
-▎- Edited: src/webhooks/stripe.ts
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
-▎
- esc Close/Quit ^o Settings ▏^k palette
+
+
+
+ code-recall v0.2.2 8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18
+▊▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▎
+▊stripe webhook signature▎
+▊▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▎
+Scope: All providers Mode: hybrid Visible:Claude 1Codex 1p provider f filters ? help Ctrl+K commands
+
+▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
+2 of 2 results for "stripe webhook signature"in all providers▎
+▎Fix Stripe webhook signature verification
+ 1ClaudeFix Stripe webhook signature verification▎Session: Claude Code · Project:
+strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎/Users/demo/Projects/payments-api · Activity: 2026-05-18
+2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-4▎1 Overview 2 Why 3 Activity 4 Related 5 Ai
+why: matched text: Fix **Stripe** **webhook** **signature** verification 3 files ·▎
+2 cmds▎Why this result matched
+▎Primary reason: matched text: Fix **Stripe** **webhook**
+ 2CodexDebug checkout webhook retry handling▎**signature** verification
+weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·▎Keyword signal: rank 0.000
+2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex▎
+why: matched text: Debug checkout **webhook** retry handling 3 files · 2 cmds▎Matched evidence
+▎- Fix **Stripe** **webhook** **signature** verification
+▎- Production **webhooks** are failing **signature**
+▎verification after a framework upgrade.
+▎- Added raw body parsing and replay tests for **Stripe**
+▎**webhook** **signature** checks.
+▎- Debugged **Stripe** **webhook** **signature** validation. The
+▎middleware parsed JSON before constructing the event, so the
+▎signed payload bytes no longer...
+▎- Edited: src/webhooks/stripe.ts
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+▎
+ esc Close/Quit ^o Settings ▏^k palette
diff --git a/scripts/generate_demo_assets.py b/scripts/generate_demo_assets.py
index e3ff2d0..0f1d053 100644
--- a/scripts/generate_demo_assets.py
+++ b/scripts/generate_demo_assets.py
@@ -9,6 +9,7 @@
import argparse
import asyncio
+import io
import json
import shutil
import subprocess
@@ -16,6 +17,9 @@
from dataclasses import dataclass
from pathlib import Path
+from rich.console import Console
+from rich.terminal_theme import SVG_EXPORT_THEME
+
from code_recall.db import (
build_session_chains,
get_connection,
@@ -337,7 +341,44 @@ async def _render_screenshot(
assistant_label="Claude Code",
)
await pilot.pause()
- app.save_screenshot(filename=filename, path=str(asset_dir))
+ _export_svg_with_theme(app, asset_dir / filename)
+
+
+# Remap from Rich's DEFAULT_TERMINAL_THEME palette (pure ANSI: harsh #00ffff
+# cyan, #ff00ff magenta) to SVG_EXPORT_THEME palette (softer monokai-style)
+# so README screenshots look like a real iTerm/Ghostty rendering. We post-
+# process because Textual's compositor resolves ANSI->RGB before Rich's SVG
+# theme parameter would take effect.
+_ANSI_TO_SVG_THEME_MAP = {
+ "#000000": "#4b4e55", "#800000": "#cc555a", "#008000": "#98a84b",
+ "#808000": "#d0b344", "#000080": "#608ab1", "#800080": "#98729f",
+ "#008080": "#68a0b3", "#c0c0c0": "#c5c8c6", "#808080": "#9a9b99",
+ "#ff0000": "#ff2627", "#00ff00": "#00823d", "#ffff00": "#d08442",
+ "#0000ff": "#1984e9", "#ff00ff": "#ff2c7a", "#00ffff": "#398280",
+ "#ffffff": "#fdfdc5",
+}
+
+
+def _export_svg_with_theme(app: RecallApp, svg_path: Path) -> None:
+ width, height = app.size
+ console = Console(
+ width=width,
+ height=height,
+ file=io.StringIO(),
+ force_terminal=True,
+ color_system="truecolor",
+ record=True,
+ legacy_windows=False,
+ safe_box=False,
+ )
+ screen_render = app.screen._compositor.render_update(
+ full=True, screen_stack=app._background_screens, simplify=False,
+ )
+ console.print(screen_render)
+ svg = console.export_svg(title=app.title, theme=SVG_EXPORT_THEME)
+ for harsh, soft in _ANSI_TO_SVG_THEME_MAP.items():
+ svg = svg.replace(harsh, soft)
+ svg_path.write_text(svg, encoding="utf-8")
async def render_assets(asset_dir: Path) -> None: