you what (k)now?
"Wait, are you reading that file again?"
You know the look. Claude's halfway through a task and decides to read src/main.rs for the fifth time. 847 lines. Again. You stare at your token counter and whisper "you what now?"
Instead of 2000 lines of code, Claude gets a summary. If it still wants the full file, it has to ask twice.
A typical Tuesday with Claude (dramatized only slightly)
We need to talk about Claude's reading habits.
We love Claude. Claude is great. But Claude has a problem. It reads files like someone who opens the fridge every 10 minutes hoping new food appeared.
If this is enough, don't read the file. Read again if you need it.
A polite but firm intervention.
youwhatknow sits between Claude and the filesystem. "You can have more if you want, but here's what's on your plate already."
Claude reaches for a file
Claude Code fires a PreToolUse hook before every Read. youwhatknow gets the file path and session ID via HTTP before the read happens.
POST /hook/pre-readSmall files get a free pass
Files with 30 lines or fewer are waved through without intervention. Targeted reads with offset/limit also pass.
line_threshold = 30First read: denied with a summary
Instead of 2000 lines of code, Claude sees: file description, public symbols, line-range map. "If this is sufficient, do not read the file. Read again for the full file."
deny + summarySecond read: allowed clean
Claude asked twice, so it genuinely needs the file. Goes through with no context injection, no nudge, no friction.
Repeat offenders get nudged
Third read and beyond: allowed, but with a reminder. "This file has been read 3x this session. Consider using offset/limit for targeted reads."
read 3x this sessionDay-one orientation
On SessionStart, Claude gets a full project map injected automatically. No more "let me explore the codebase" spirals.
POST /hook/session-startFiles fade. Context stays fresh.
After more than 40 other file reads, a file's read count resets to zero. Next read shows the summary again. No stale state, no manual cleanup — the working set stays current automatically.
Configurable via eviction_threshold in your project config. Or use youwhatknow reset <path> to do it manually.
One daemon. All projects.
Six reasons to stop the madness.
Summary first, file second
Claude gets description, symbols, and line ranges. Has to ask twice for the full file. Less context waste.
Working set eviction
After 41+ intervening file reads, stale counts reset automatically. No manual cleanup.
"You already read that"
Per-session tracking nudges Claude on 3rd+ reads to use offset/limit.
Stupid simple setup
One command: youwhatknow setup. Hooks, daemon, indexing — all handled. No YAML nightmares.
All projects, one process
The daemon loads project indexes lazily. First request for a new project? Indexed in the background. Zero waiting.
Invisible when off
Daemon not running? Claude works normally. HTTP hooks fail silently. It's there when you want it, gone when you don't.
Three commands. Maybe two.
$ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/wavefunk/youwhatknow/releases/latest/download/youwhatknow-installer.sh | sh
# Or: nix flake (see docs)
# Or: build from source
$ cargo build --release$ cd your-project
$ youwhatknow setup
# Creates .claude/ and .claude/summaries/
# Merges hook config into .claude/settings.local.json
# Starts the daemon if not already running
# Triggers initial project indexing
# That's genuinely it.$ youwhatknow setup --shared # writes to .claude/settings.json (team-shared)
$ youwhatknow setup --no-index # skip initial indexing
$ youwhatknow status # daemon uptime, active sessions, projects
$ youwhatknow summary src/main.rs # preview a file's summary
$ youwhatknow reset src/main.rs # reset read count for a fileManual hook setup
If you prefer to configure hooks manually, add this to .claude/settings.local.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Read",
"url": "http://localhost:7849/hook/pre-read"
}
],
"PostToolUse": [
{
"matcher": "Read",
"url": "http://localhost:7849/hook/post-read"
}
],
"SessionStart": [
{
"url": "http://localhost:7849/hook/session-start"
}
]
}
}Optional config.toml
# ~/.config/youwhatknow/config.toml
# All settings have sensible defaults.
port = 7849
session_timeout_minutes = 60
idle_shutdown_minutes = 30