Persistent memory for Amazon Bedrock AgentCore Runtime agents using Hindsight
Project description
hindsight-agentcore
Persistent memory for Amazon Bedrock AgentCore Runtime agents using Hindsight.
AgentCore Runtime sessions are explicitly ephemeral — they terminate on inactivity and reprovision fresh environments. This package adds durable cross-session memory so agents remember users, decisions, and learned patterns across any number of Runtime sessions.
How It Works
AgentCore Runtime invocation
│
▼
before_turn() ← Recall relevant memories from Hindsight
│
▼
Agent executes ← Prompt enriched with prior context
│
▼
after_turn() ← Retain output to Hindsight (async)
Memory is keyed to stable user identity — not the runtimeSessionId. Banks survive session churn.
Default bank format:
tenant:{tenant_id}:user:{user_id}:agent:{agent_name}
Installation
pip install hindsight-agentcore
Quick Start
import os
from hindsight_agentcore import HindsightRuntimeAdapter, TurnContext, configure
configure(
hindsight_api_url="https://api.hindsight.vectorize.io",
api_key=os.environ["HINDSIGHT_API_KEY"],
)
adapter = HindsightRuntimeAdapter(agent_name="support-agent")
# Your AgentCore Runtime handler
async def handler(event: dict) -> dict:
context = TurnContext(
runtime_session_id=event["sessionId"],
user_id=event["userId"], # from validated auth — never client-supplied
agent_name="support-agent",
tenant_id=event.get("tenantId"),
request_id=event.get("requestId"),
)
result = await adapter.run_turn(
context=context,
payload={"prompt": event["prompt"]},
agent_callable=run_my_agent,
)
return result
async def run_my_agent(payload: dict, memory_context: str) -> dict:
prompt = payload["prompt"]
if memory_context:
prompt = f"Past context:\n{memory_context}\n\nCurrent request: {prompt}"
output = await call_bedrock(prompt)
return {"output": output}
Lower-Level Hooks
# Manual recall → execute → retain
memory_context = await adapter.before_turn(context, query=user_message)
result = await run_my_agent(payload, memory_context=memory_context)
await adapter.after_turn(context, result=result["output"], query=user_message)
Retrieval Modes
Recall (default)
Fast multi-strategy retrieval (semantic + keyword + graph + temporal):
from hindsight_agentcore import RecallPolicy
adapter = HindsightRuntimeAdapter(
recall_policy=RecallPolicy(mode="recall", budget="mid", max_tokens=1500)
)
Reflect
LLM-synthesized context for complex reasoning tasks:
adapter = HindsightRuntimeAdapter(
recall_policy=RecallPolicy(mode="reflect")
)
Use reflect selectively — it's slower. Reserve it for explicit planning steps or routing decisions.
Async Retention
By default, after_turn() fires retention as a background task — the user turn is never delayed:
configure(retain_async=True) # default
configure(retain_async=False) # await retention before returning
Async and Long-Running Workflows
For jobs spanning multiple Runtime sessions, retain at start and completion:
# Task start
await adapter.after_turn(
context,
result="Started QBR analysis for Acme Corp",
query=task_description,
)
# ... long-running work across potentially multiple sessions ...
# Task completion
await adapter.after_turn(
context,
result=f"Completed QBR analysis. Finding: {summary}",
query=task_description,
)
Identity and Auth
Never use runtimeSessionId as the bank ID. Sessions expire. Memory must survive session churn.
Preferred identity sources (in order):
- Validated user ID from AgentCore JWT/OAuth context
X-Amzn-Bedrock-AgentCore-Runtime-User-Idheader- Application-supplied user ID in trusted server-side deployments
context = TurnContext(
runtime_session_id=event["sessionId"],
user_id=jwt_claims["sub"], # stable identity from validated token
agent_name="support-agent",
tenant_id=jwt_claims.get("tenant"),
)
Configuration Reference
| Option | Env Variable | Default | Description |
|---|---|---|---|
hindsight_api_url |
HINDSIGHT_API_URL |
Hindsight Cloud | Hindsight server URL |
api_key |
HINDSIGHT_API_KEY |
— | API key for Hindsight Cloud |
recall_budget |
— | "mid" |
Search depth: low, mid, high |
recall_max_tokens |
— | 1500 |
Max tokens recalled |
retain_async |
— | True |
Non-blocking retention |
timeout |
— | 15.0 |
HTTP timeout in seconds |
tags |
— | [] |
Tags applied to all retained memories |
verbose |
— | False |
Log memory operations |
Custom Bank Resolution
Override the default tenant:user:agent format:
from hindsight_agentcore import TurnContext
def my_resolver(context: TurnContext) -> str:
return f"acme:{context.user_id}:{context.agent_name}"
adapter = HindsightRuntimeAdapter(bank_resolver=my_resolver)
Security rule: The resolver must fail closed (BankResolutionError) rather than leak memory across users when identity is missing.
Failure Modes
| Failure | Behavior |
|---|---|
| Hindsight unavailable | before_turn() returns "", agent continues |
| Recall timeout | Returns "", agent continues |
| Retain failure | Logged as warning, user turn unaffected |
| Bad bank resolution | Fails closed — no cross-user memory leakage |
Deployment
Hindsight Cloud — sign up, set hindsight_api_url to your Cloud endpoint.
Self-hosted on AWS — run Hindsight on ECS/EKS with RDS PostgreSQL (pgvector). Network path stays in your AWS account.
Requirements
- Python 3.10+
hindsight-client>=0.4.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hindsight_agentcore-0.1.1.tar.gz.
File metadata
- Download URL: hindsight_agentcore-0.1.1.tar.gz
- Upload date:
- Size: 96.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
215fd292e94dd15cb4130565d97b23f1f77cc6c6972fc9141b2f3daa7ab4867e
|
|
| MD5 |
5f61609037ebc9200b322cec53d82613
|
|
| BLAKE2b-256 |
f34ad2ef26194f657c6c9c09f613b57ab2868bc1fbe40b8c14e7c79ac2034712
|
Provenance
The following attestation bundles were made for hindsight_agentcore-0.1.1.tar.gz:
Publisher:
release-integration.yml on vectorize-io/hindsight
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hindsight_agentcore-0.1.1.tar.gz -
Subject digest:
215fd292e94dd15cb4130565d97b23f1f77cc6c6972fc9141b2f3daa7ab4867e - Sigstore transparency entry: 1399514889
- Sigstore integration time:
-
Permalink:
vectorize-io/hindsight@b50a86a87f3ebcc50ff50d3b2e80e1bb745bd2d0 -
Branch / Tag:
refs/tags/integrations/agentcore/v0.1.1 - Owner: https://github.com/vectorize-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-integration.yml@b50a86a87f3ebcc50ff50d3b2e80e1bb745bd2d0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file hindsight_agentcore-0.1.1-py3-none-any.whl.
File metadata
- Download URL: hindsight_agentcore-0.1.1-py3-none-any.whl
- Upload date:
- Size: 12.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f25e06fc81bd23a08bb6b7da7dbe0bf113a3c728b3e95571351e36d456fa2e57
|
|
| MD5 |
5ce784fec3332453266510b3d1643932
|
|
| BLAKE2b-256 |
77a78204187e8882a6e6743a2064d3ac577d69ed3886b75f19c58be623c53835
|
Provenance
The following attestation bundles were made for hindsight_agentcore-0.1.1-py3-none-any.whl:
Publisher:
release-integration.yml on vectorize-io/hindsight
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hindsight_agentcore-0.1.1-py3-none-any.whl -
Subject digest:
f25e06fc81bd23a08bb6b7da7dbe0bf113a3c728b3e95571351e36d456fa2e57 - Sigstore transparency entry: 1399514904
- Sigstore integration time:
-
Permalink:
vectorize-io/hindsight@b50a86a87f3ebcc50ff50d3b2e80e1bb745bd2d0 -
Branch / Tag:
refs/tags/integrations/agentcore/v0.1.1 - Owner: https://github.com/vectorize-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-integration.yml@b50a86a87f3ebcc50ff50d3b2e80e1bb745bd2d0 -
Trigger Event:
push
-
Statement type: