Independent Temporal State Breakthrough

August 28, 2025

I’ve been silent since May. Not because I stopped working—because I’ve been heads down building.

Took all those conceptual ideas from the early blog posts (beliefs, context, expectations, trigger-action loops) and tried to turn them into a working system. An actual AI agent that could learn from experience and operate professionally.

It’s been messy. Let me walk through what I figured out.

The Context Contamination Bug (June)

Remember my post about context-conditional beliefs? The idea that agents should have different confidence levels for different contexts instead of averaging?

Built it. Immediately hit a weird bug: updating beliefs for Client A would corrupt beliefs for Client B. Completely unrelated contexts bleeding into each other.

Took me three weeks to figure out the problem: shared temporal state.

I had one last_updated timestamp per belief, shared across all contexts. When I updated ClientA’s context, the global timestamp changed, which affected belief strength calculations for ClientB even though ClientB hadn’t been touched.

The fix: Each context needs completely independent temporal state. Each one tracks its own lastupdated, lastoutcome, success/failure counts—everything.

Seems obvious in retrospect, but it was subtle. The bug only showed up in production with multiple contexts interacting.

The Dead End: Episodic Memory (July)

Hit another wall with working memory. The agent would either remember too much (context window full of irrelevant stuff) or too little (forgot important context).

I got obsessed with episodic memory for a few weeks. What if instead of extracting beliefs, the agent just stored interaction episodes and retrieved them when relevant?

Built a prototype. It was terrible. Retrieval was slow, most episodes were noise, and it didn’t scale at all.

That failure taught me something though: you can’t treat all information the same. “Currently processing invoice” is different from “user prefers detailed explanations” is different from “review this report later.”

The Breakthrough: Three-Column Memory (August)

That realization led to the three-column structure:

Column 1: Active Tasks (3-4 slots max)

  • What’s being worked on right now
  • Rich state tracking
  • Top priority

Column 2: Notes (acknowledged queue with TTL)

  • Things to address later
  • Auto-expire so they don’t pile up
  • Surface when contextually relevant

Column 3: Objects (ambient context)

  • People with relationship beliefs
  • Entities, high-strength beliefs
  • Loaded based on salience, not everything

Key insight: Different information types need different management policies. Active work needs focus. Queued work needs TTL. Background context needs smart filtering.

Been running this for 3 weeks now:

  • Context window usage: down 40%
  • Task completion: up 23%
  • Relationship quality scores: up 31%

It actually works.

What’s Next

I’ve got maybe 15-18 concepts that came out of this build process. Some feel genuinely novel (independent temporal state, three-column memory, time-based context activation). Others are creative applications of existing ideas.

Going to start writing these up formally. Not as blog posts—as proper technical papers with evaluations and citations. Partly for prior art, partly to force myself to be rigorous about what actually works vs what was speculation.

More on that soon. Back to building.