"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 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.
youwhatknow sits between Claude and the filesystem. "You can have more if you want, but here's what's on your plate already."
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-readFiles with 30 lines or fewer are waved through without intervention. Targeted reads with offset/limit also pass.
line_threshold = 30Instead 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 + summaryClaude asked twice, so it genuinely needs the file. Goes through with no context injection, no nudge, no friction.
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 sessionOn SessionStart, Claude gets a full project map injected automatically. No more "let me explore the codebase" spirals.
POST /hook/session-startAfter 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.
Claude gets description, symbols, and line ranges. Has to ask twice for the full file. Less context waste.
After 41+ intervening file reads, stale counts reset automatically. No manual cleanup.
Per-session tracking nudges Claude on 3rd+ reads to use offset/limit.
One command: youwhatknow setup. Hooks, daemon, indexing — all handled. No YAML nightmares.
The daemon loads project indexes lazily. First request for a new project? Indexed in the background. Zero waiting.
Daemon not running? Claude works normally. HTTP hooks fail silently. It's there when you want it, gone when you don't.
$ 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 fileIf 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"
}
]
}
}# ~/.config/youwhatknow/config.toml
# All settings have sensible defaults.
port = 7849
session_timeout_minutes = 60
idle_shutdown_minutes = 30