#3B35F3 measured 2.4:1 against a dark background — below the 3:1
legibility floor. rgb(124,120,250) measures 4.7:1 on dark and 3.5:1 on
light; shimmer tiers re-derived from the new base.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Injected memories are hashed into a per-session recalled.json (pruned
with statusline state, capped at 500) so a memory already in context is
never re-injected — the banner reports only fresh hits, with repeats as
a gray '… already in context' tail. Banners share lib/colors.js: brand
blue for the ◪ mark, red for recall failures.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fixes#25: on Windows the stdin 'end' event never fires for hook
subprocesses, hanging every hook for its full timeout. readStdin now
parses incrementally and resolves as soon as the payload is complete
JSON, with a 3s fallback timer — the same pattern the statusline
renderer already used. Also drops dead formatRelativeTime code.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The recall directive was advisory — the model had to choose to spend a
tool call, so mid-session recall almost never happened. The
UserPromptSubmit hook now searches supermemory with the prompt itself
(4s timeout, skips short prompts and /, !, # inputs) and injects the
top matches directly, with a visible '◪ recalled N memories' notice
and statusline search state. A configured recallDirective restores
advisory mode.
Also fixes recall-approve missing the claude.ai connector namespace
(mcp__claude_ai_supermemory__*), which silently dropped the recall
notice and statusline count when the model did search.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Resting label is now a session tally (N loaded · N captured · N recalls)
that ticks on every turn and every recall, instead of a static count with
decaying flashes. First session shows a one-time notice teaching that ◆
marks anything sourced from supermemory.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>