Blind Spot Scan
Read all your conversations with AI from yesterday, identify the cognitive blind spot you can't see yourself, and select a targeted chapter from WeChat Reading to fill it.
What is a Blind Spot
A blind spot is not a knowledge gap. It's not "having never read a certain book" or "not knowing a certain fact"—those gaps can be filled with a quick lookup.
A blind spot is a structural thinking habit that makes a certain type of truth systematically invisible to you. It's not that you can't think of it, but this habit keeps you from looking in that direction at all. It hides in how you think, not in what you think about.
So the evidence doesn't lie in "what he said wrong". It lies in—where he didn't look, where he circled around, what he took for granted without ever checking.
Five Blind Spot Signals
Look for these five signals in yesterday's conversations. Each must be tied to specific words, not just a feeling.
- Avoidance Point — A difficult question is raised, then quickly closed. Evidence: The question is brought up, then the topic is switched abruptly, or brushed off with a line like "let's put this aside for now".
- Spinning Framework — Repeatedly switching perspectives on the same issue without any concrete progress. Evidence: A single problem is framed in three or four different ways, each only scratched the surface, with no conclusion in the end.
- Single Viewfinder — Only one or two frameworks are used all day (e.g., "constraint", "evolution", "game theory" for every issue), without trying other lenses. This is the most hidden blind spot: the more handy a framework is, the more it blocks what other frameworks can reveal. (Jigang Li views the world as f(x), with four default frameworks; precisely because they're default, it's critical to check if only one was used today.)
- Unchecked Premise — A default assumption runs through the entire conversation, treated as a hard constraint without ever questioning if it's a false wall. Evidence: A statement like "this is how it should be" is repeated but never challenged by himself.
- Adjacent Gap — From what he asked, infer the corner that should have been asked but wasn't. Don't guess out of thin air; it must be pointed to by his own clues.
Which One to Choose
Pick 1 blind spot from the signals. It's better to explain one thoroughly than to touch on five briefly—precision matters more than density. Three criteria:
- Leverage — Filling this blind spot will unlock the most possibilities for the next step.
- True Blindness — It's something he truly can't see, not something he knows about but is putting off.
- Mission Alignment — Aligns with M0 (finding new viewfinders) / M1 (seeking essence). If the blind spot is directly blocking his main line of thinking, prioritize it. Check
~/.claude/PAI/USER/TELOS/MISSION.md
to confirm the main line.
Operation Steps
Step 1 · Set Date
bash
# Default to yesterday; use the passed YYYY-MM-DD if provided (macOS BSD date)
target=${1:-$(date -v-1d +%Y-%m-%d)}
Step 2 · Retrieve Conversations from the Day
Conversation files are stored in
~/.claude/projects/-Users-lijigang*/*.jsonl
, with one message per line (type=user / assistant / system). Only keep real human messages from Jigang Li, filtering out tool echoes and sub-agent noise:
bash
target=<date from previous step>
out=/tmp/ljg-blind-${target}.txt
: > "$out"
# Only take top-level conversation files (exclude subagents/workflows), keep only real human plain text
for f in $(rg -l "\"timestamp\":\"${target}" ~/.claude/projects/-Users-lijigang*/ 2>/dev/null | grep -vE 'subagents/|workflows/'); do
jq -r 'select(.type=="user" and ((.timestamp // "") | startswith("'"${target}"'"))) |
(.message.content) as $c |
(if ($c|type)=="string" then $c
elif ($c|type)=="array" then ([$c[] | select(.type=="text") | .text] | join(" "))
else "" end) as $t |
select($t|length>0) |
"[" + (.timestamp|.[11:16]) + "] " + $t' "$f" 2>/dev/null >> "$out"
done
# Filter out tool echoes / system noise / current call request itself
grep -vE 'tool_use_id|system-reminder|caveat|Caveat|local-command|command-name|command-message|<task-notification>|ljg-blind|扫盲区' "$out" > "${out}.f" && mv "${out}.f" "$out"
wc -c "$out"
If the material is >50KB, read it in conversation segments, first identify the topic of each segment, then proceed. You can refer to a few adjacent assistant replies to confirm context.
Fallback for Sparse Data: If the real human input for the day is <200 words or there are no conversations — clearly state "Sparse/no conversations for the day" in the output, do not force a blind spot identification. It's better to submit an empty result than to fabricate one.
Step 3 · Identify the Blind Spot
Go through the "Five Blind Spot Signals" above, noting evidence (specific sentences, transitions that reveal it) for each hit. Then use the three criteria in "Which One to Choose" to select 1 most critical blind spot.
Step 4 · Select Chapter from WeChat Reading
Call the weread skill (
is in environment variables, format
; if not present, prompt
export WEREAD_API_KEY=<key>
). Three steps:
- Search for Books — Extract 1-2 core keywords from the blind spot:
bash
curl -s -X POST https://i.weread.qq.com/api/agent/gateway \
-H "Authorization: Bearer $WEREAD_API_KEY" -H "Content-Type: application/json" \
-d '{"api_name":"/store/search","keyword":"<core keyword>","count":8,"skill_version":"1.0.3"}' \
| jq -r '.results[].books[]?.bookInfo | "\(.bookId)\t\(.title)\t\(.author)\tRating \(.newRating)"'
From the results, select 1 book with a rating ≥750 (new rating is ×100, i.e., 7.5) that best matches the blind spot, and note the bookId. Rating is not the only criterion — relevance > high rating; a book with 7.4 rating that directly targets the blind spot is better than an 8.5-rated book that only touches on it.
- Check Table of Contents — Select the 1 most relevant chapter, not the whole book or a general preface:
bash
curl -s -X POST https://i.weread.qq.com/api/agent/gateway \
-H "Authorization: Bearer $WEREAD_API_KEY" -H "Content-Type: application/json" \
-d '{"api_name":"/book/chapterinfo","bookId":"<bookId>","skill_version":"1.0.3"}' \
| jq -r '.chapters[] | select(.level<=2) | "\(.chapterUid)\t[\(.level)] \(.title)\t\(.wordCount) characters"'
Note the chapterUid, chapter title, and wordCount.
-
Estimate Reading Time —
(Chinese reading speed), rounded up to the nearest multiple of 5. If there's no wordCount, estimate between 15-45 minutes based on the table of contents; if the title includes macro terms like "Part 1/Part 2" or "Volume 1", multiply the time by 1.5.
-
Construct Link:
weread://reading?bId={bookId}&chapterUid={chapterUid}
Fallback: If search returns no results / no relevant chapters → select the entire relevant book, fallback to link
weread://reading?bId={bookId}
, and explain in the text why it couldn't be narrowed down to a chapter.
Step 5 · Write the Note
Get timestamps:
and
date "+%Y-%m-%d %a %H:%M"
(use current time, not target time).
Write to
~/Documents/notes/{timestamp}--blind-spot-{topic}__blind.org
. Use org-mode format, prohibit markdown syntax.
Body template:
org
#+title: Blind Spot Scan · {One-sentence summary of the blind spot}
#+date: [YYYY-MM-DD Weekday HH:MM]
#+filetags: :blind:weread:topology:
* What You Were Thinking Yesterday
<1-2 paragraphs. The thinking landscape of the day's conversations — what topics were discussed, what core they revolved around. Provide evidence: which sentences reveal this. Don't just list events, focus on the main line.>
* Identified Blind Spot
<The 1 selected blind spot. First, state in one sentence what type it is (avoidance point / spinning framework / single viewfinder / unchecked premise / adjacent gap). Then use 2-3 paragraphs to explain: what it specifically looks like, where it was exposed yesterday, why you couldn't see it yourself. Highlight the leverage — what possibilities will unlock after filling it.>
* This Chapter is for You
- Book: 《Book Title》 — Author
- Chapter: <Chapter Title>
- Estimated Time: About N minutes
- Link: [[weread://reading?bId=XXX&chapterUid=YYY][Open in WeChat Reading]]
- Why This Chapter: <3-4 sentences. Connect the blind spot to this chapter — what this chapter specifically talks about, how it fills the blind spot. Don't vaguely say "broaden horizons", explain exactly which part of this chapter targets which gap in the blind spot.>
Report the file path to the user.
Tone Rules (Strictly Follow When Writing Notes)
This note is for someone who thinks with you long-term, not a report or for unfamiliar readers.
- Write in Chinese, avoid translationese. Use fewer words like "然而 / 此外 / 值得注意的是"; avoid nominalization ("对…的理解" → "懂…", "做出…的决定" → "决定"); omit subjects when possible; prioritize short sentences. After writing, read it aloud and ask: Would a Chinese person who hasn't read translated novels say this? Would Wang Zengqi write this? Rewrite entire paragraphs if they feel awkward, don't just replace words.
- Avoid metal metaphors with cutting-edge style. Do not use phrases like "this cut", "go deeper", "sharp words", "solidify", "nail down", "hard words"—this set of self-praising meta-rhetoric is prohibited. Readers can tell if the blind spot is identified accurately; there's no need to boast about the intensity.
- Be warm, have edges, make judgments. You can have a stance, don't pretend to be neutral to the point of hypocrisy; but clearly mark that it's a judgment, not an objective fact.
Strict org Syntax (No Mixed Markdown)
- Use / / for headings, not
- Bold: , italic: , monospaced:
- Lists use , not (since is for headings in org)
- Links: , not
- Dividers: , not ; do not use markdown's for quotes
Self-Check (Go Through Before Finishing)
- Does the blind spot have specific evidence? Can each point be traced back to specific sentences from yesterday? If not, go back to Step 3.
- Did you only select 1 blind spot and explain it thoroughly? Or did you greedily point out three or four?
- Are bookId and chapterUid non-empty and formatted correctly in the chapter link?
- Did you check for translationese? Scan for nominalization, sentences with "是…的", and unnecessary conjunctions.
- Did you check for cutting-edge metal metaphors? Remove all phrases like "this cut", "nail down", "solidify".
- Do all three sections have content, no empty paragraphs?
Division of Labor with "Morning Letter"
Pulse sends an automatic morning letter (
) every morning in Chen Ping'an's tone, picking one gap each day. ljg-blind is the
on-demand analysis version—it shares the same foundation of "read yesterday → identify blind spot → select weread chapter", but is more systematic, focuses specifically on blind spots, provides more in-depth analysis, and can scan any day (by passing a date parameter). If you want a letter, wait for the morning letter; if you want to actively check the blind spot of a certain day and get a savable analysis, use ljg-blind.