Transcript tools remember what was said. decision_check remembers what you already rejected, and blocks the agent from yes-anding the same bad idea next session.
You (last week): We decided against rewriting auth in Redis. Keep D1 + hashed tokens. Logged as a decision with reason and alternatives.
Agent (this session): For scale we should move auth sessions to Redis…
decision_check({ proposed: "move auth sessions to Redis" }) → status: conflict → prior: "Keep D1 + hashed tokens; Redis rewrite rejected" → why: operational complexity > current traffic; invalidates only if waitlist > 10k/day
Brain OS: Conflict with an active decision. Original reasoning shown. Agent stops reopening the closed choice.
Agent: Right, staying on D1. Next: rate-limit the waitlist endpoint instead.
invalidate_if.decision_check returning conflict, then the agent course-correcting./demo/decision-check/.growth/demo/decision-check-storyboard.md in the website repo.
Every transcript memory tool can show a chat bubble. Almost none can show conflict with prior reasoning. This is the moment that converts multi-tool developers who are tired of re-explaining rejected approaches.