A persistent agent’s tasks and results. The trigger carries agentId; completions add agentType, agentId, kind. Never consumed by rsc-core.
Agent Check-In
agency.<name>
Your cron → your router
{ agentType, date, slot, at, nextAt }
Create Agent Session
readysetcloud.agent
App → agent
A session request from another stack; consumed by create-session-from-event
Schedule Event / Cancel Scheduled Event
any
App → core
{ at | delay, timezone?, name?, whenPast?, event }; the deferred-event primitive delayed tasks ride
Diagram
Apps never read the agent table. Requests go in as events, results come out as events, and a delayed request rides Schedule Event, which republishes it on the same bus when the time comes.
Dependencies: the AWS SDK v3 DynamoDB and EventBridge clients, the Strands SDK pinned exact at 1.9.0, and zod. src/stream.ts is the one SDK coupling point, and a contract test guards it.
Environment
Read at module scope
Variable
Required
Default
Used by
TABLE_NAME
Yes
Snapshots, session config, task rows, agent state, trigger gates. Every data-plane call also takes an explicit tableName.
BEDROCK_MODEL_ID
No
us.amazon.nova-lite-v1:0
Default chat and task model
BEDROCK_REGION / AWS_REGION
No
us-east-1
Bedrock region
BEDROCK_MAX_TOKENS, BEDROCK_TEMPERATURE
No
4096, 0.7
Sampling defaults
AGENT_MEMORY_ID
Runtime only
The AgentCore Memory resource the chat runtime builds its memory manager from
MCP_ALLOWED_HOSTS
Host
empty (rejects all)
From the McpAllowedHosts parameter; checked by create-session
SYSTEM_TASK_PRINCIPALS
Host
empty (rejects all)
From the SystemTaskPrincipals parameter; checked by create-task
Storage
One table · pk/sk · TTL on expiresAt
Item
pk
sk
Notes
Snapshots
SESSION#{sessionId}
SNAPSHOT#…, LATEST#…, MANIFEST#…
Strands conversation state; 30-day TTL
Session config
SESSION#{sessionId}
CONFIG
Owner, prompt, model, tools, MCP specs
Task record
TASK#{taskId}
STATUS
Status and result; 24-hour TTL
Agent state
AGENT#{agentId}
STATE#{name}[#{scope}]
Revision-checked documents; definePersistentAgent uses <type>.agenda, <type>.commitments, and <type>.usage (the task cap). In your table, for persistent agents.
Trigger gate
TRIGGER#{[prefix#]slot}
GATE
owner, lastTriggeredAt; 30-day TTL
Nobody reads this table from another stack. Results cross as Agent Task Completed events and session requests cross as Create Agent Session.
Diagram
One table, five item families, four partitions. Each family has exactly one writer, and nothing outside its stack reads it.