That surface is better understood as the attention area. It sits at the tail when the timeline is rendered with include_sources=True and include_announce=True. The attention area has two parts: SOURCES POOL and ANNOUNCE. ANNOUNCE is the live signal board inside that area. The no-cache property matters, but it is not the main idea. The main idea is location.

The attention area is not decoration. SOURCES POOL and ANNOUNCE form a dedicated tail pair. The agent learns that this is the place to look first for fresh sources and must-see operational signals.

1. The timeline is history. The attention area is the tail pair.

React’s append-only timeline is the durable conversation record. It stores user prompts, attachments, tool calls and results, assistant completions, summaries, and other persistent blocks. That history matters, but it is the wrong place for everything that changes every round.

A long timeline is searchable, but it is not a reliable attention surface. If something must always be looked up in the same place, the model should not have to hunt for it. Budget counters, workspace publish state, active-plan summaries, fresh prune notices, steer, and follow-up signals are all things React should know: look at the attention area, it is there. At the same time, discovered source rows should also have one fixed tail home, and that is why SOURCES POOL travels together with ANNOUNCE.

Stable history and the uncached attention area at the tail The timeline holds the durable history of prompts, tool calls, results, completions, and summaries, anchored by cache points. At the tail, the uncached attention area is a fixed pair: SOURCES POOL for the rolling source registry and ANNOUNCE for the live signal board. The context has two surfaces The timeline is the durable history. The attention area is the fixed tail pair the agent learns to look at first. stable history Durable append-only record: prompts, tool calls, results, completions, summaries. user prompt tool call tool result completion summary cache points anchor this stable stream Append-only. Structured. Durable across turns.stored: artifact:conv.timeline.v1 uncached attention area appended after cache points · every round SOURCES POOL rolling source registry SIDs · titles · snippets stored: conv:sources_pool ANNOUNCE live signal board [BUDGET] [ATC] [PLANS] [WORKSPACE] · notices ephemeral · persisted on exit never cached must-see state
The attention area is the uncached tail pair. SOURCES POOL carries the rolling registry. ANNOUNCE carries the live signal board. The agent learns to look here first.

2. What lives in the attention area

The attention area is not one undifferentiated blob. It has a clean internal split: SOURCES POOL on one side, ANNOUNCE on the other.

SOURCES POOL carries the rolling registry of canonical source rows for the conversation. ANNOUNCE stays intentionally compact and focused on operational guidance. Typical ANNOUNCE contents include:

  • iteration budget and elapsed time inside the turn
  • authoritative temporal context such as current UTC timestamp and user timezone
  • open-plan summaries instead of full plan history
  • compact workspace status
  • fresh system notices such as cache TTL pruning
  • feedback/incorporation signals that must stay visible while the turn is hot
  • steer / follow-up / urgent runtime signals that should be directly in front of the model

The important rule is not just what ANNOUNCE contains. It is also what the attention area does not contain: raw git refs, full tool payloads, whole plan artifacts, or large source bodies. The attention area is what the agent glances at first. It is not where the full historical record lives.

A good second diagram for this article should make that split literal: SOURCES POOL as the rolling source registry, and ANNOUNCE as the compact signal board with [BUDGET], [AUTHORITATIVE TEMPORAL CONTEXT], [OPEN PLANS], [WORKSPACE], and fresh notices / steer / follow-up signals.

Operational guidance, not debug exhaust. If something is low-level enough that only engineering or audit tooling should care, it belongs in internal blocks or persisted artifacts, not on the ANNOUNCE side of the attention area.
Inside the attention area: SOURCES POOL and ANNOUNCE Two-column diagram showing SOURCES POOL on the left (rolling source registry with SID rows) and ANNOUNCE on the right (compact signal board with budget, time, plans, workspace, and notices). Both columns live under the Attention Area title band. Attention Area uncached · appended at tail · refreshed each decision round SOURCES POOL rolling source registry · canonical rows S:1 Anthropic Context Caching Guide docs.anthropic.com/context-caching · added r3 S:2 React Agent Design Notes react-announce-README.md · added r1 S:3 Timeline Architecture Overview timeline-README.md · added r2 S:4 Source Pool Design source-pool-README.md · added r4 · · · more rows · · · full pool stored as conv:sources_pool react.read(["so:sources_pool[1-3]"]) compact snapshot rendered at tail each round ANNOUNCE compact signal board · refreshed each decision round [BUDGET] tokens used · limit · round count [AUTHORITATIVE TEMPORAL CTX] current date · turn index authoritative over model priors [OPEN PLANS] ▸ plan-1 · step 2 of 4 ▸ plan-2 · in progress persisted as conv:plans [WORKSPACE] active files · pending writes [NOTICES] ⚠ fresh steer · feedback follow-up items · round notes signal board lifecycle refreshed each decision round — never cached final snapshot persisted on session exit in-memory announce cleared after persistence must-see · not archival · not the history
The attention area is not one blob. SOURCES POOL keeps the rolling source registry. ANNOUNCE keeps the compact runtime signal board: budget, time, plans, workspace, and fresh notices.

3. SOURCES POOL is adjacent, not identical

People tend to lump SOURCES POOL and ANNOUNCE together because both sit at the tail. That is understandable, but they serve different jobs.

Surface Job Persistence shape Why it stays at the tail
Timeline durable conversation history stored in artifact:conv.timeline.v1 this is the stable narrative and execution record
SOURCES POOL rolling registry of canonical source rows stored separately as conv:sources_pool keeps citations and discovered sources fresh without duplicating them across turns
ANNOUNCE live operational signal board ephemeral during the loop; final snapshot persisted on exit lets the runtime refresh must-see state every round without rewriting the stable stream

So when people say “keep evolving conversation-wide things at the tail,” the accurate React answer is: use the tail pair. Put the rolling registry in SOURCES POOL. Put the urgent control-surface facts in ANNOUNCE.

4. Why non-cached still matters

The fixed-location idea comes first. But the non-cached property is what makes that idea operationally cheap. If ANNOUNCE were just another normal cached block in the main history stream, every small runtime update would fight the cache strategy.

A changing round counter, a new prune notice, a workspace publish status update, or a fresh piece of operator steering would keep perturbing the same expensive prefix. The result would be the worst of both worlds: a noisier prompt and a less effective cache.

Why fresh signals belong in announce instead of cached history Runtime events like pruning, workspace publish, and steer requests route into announce so the agent sees them immediately without disturbing stable cached history. Fresh signals route into ANNOUNCE because they must stay easy to find A runtime that can speak between rounds needs one direct surface. Otherwise notices either disappear into history or keep perturbing the cached stream. cache TTL pruning tell React to use react.read workspace publish state pending / failed / succeeded operator steering follow-up, steer, immediate hints feedback status visible until incorporated ANNOUNCE fresh every round never cached always near the model’s eyes compact by design Cached history durable narrative turn blocks tool records summaries
ANNOUNCE gives the runtime a place to speak immediately. The timeline keeps the durable story; the uncached board keeps the current operating conditions visible.

5. Lifecycle: refresh now, persist once, clear

ANNOUNCE is updated round by round during the loop. At exit, the final announce is persisted into the turn log blocks, and the in-memory announce surface is cleared. That balance matters:

  • during the turn, ANNOUNCE stays hot, transient, and easy to refresh
  • after the turn, the final state remains inspectable for humans and downstream consumers
  • the runtime does not pretend ANNOUNCE is the durable history itself
The design is not “hide things from history.” It is “give live operational state the right surface, then record the final visible outcome once the turn closes.”

6. Why this matters beyond React

ANNOUNCE is one example of a broader pattern: once an agent becomes part of a real distributed system, the runtime needs a voice of its own. Not everything important is a tool call. Not everything current belongs in the cached transcript. And not everything urgent should wait until the next cleanly-persisted turn block.

React makes that explicit. The attention board is where the runtime keeps the agent oriented. The stable timeline is where the conversation remains durable. Trying to collapse both responsibilities into one surface usually produces either a noisy prompt or a blind agent. ANNOUNCE exists to avoid both failures.