Drop-in Anthropic SDK wrapper for AgentLoop — adds memory retrieval and turn logging to messages.create calls. Supports streaming.
Project description
agentloop-py-anthropic
Drop-in wrapper that adds AgentLoop memory
retrieval and turn logging to every anthropic.messages.create call.
from anthropic import Anthropic
from agentloop import AgentLoop
from agentloop_anthropic import wrap_anthropic
anthropic = wrap_anthropic(
Anthropic(),
loop=AgentLoop(api_key="ak_..."),
)
msg = anthropic.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[{"role": "user", "content": "What's the Pix limit at night?"}],
)
That's the whole integration.
What happens under the hood
For every messages.create call:
- Extracts the last user message as the query
- Calls
loop.search(query)— pulls any relevant corrections - Appends them to your
systemprompt (or creates one if absent) - Calls Anthropic with the augmented system prompt
- Calls
loop.log_turn(question, answer)with the assembled text
If either AgentLoop call fails, your Anthropic call still succeeds.
Install
pip install agentloop-py agentloop-py-anthropic anthropic
Per-call options
msg = anthropic.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[...],
agentloop={
"user_id": "u_123", # tag the logged turn (per-user analytics)
"search_user_id": "u_123", # OPTIONAL: scope memory retrieval to this user
"session_id": "sess_abc",
"signals": {"thumbs_down": True},
"metadata": {"latency_budget_ms": 500},
"skip": False,
"search": False, # or {"limit": 5, "tags": ["pix"]}
},
)
What user_id does (changed in v0.2.2)
user_id tags the logged turn for per-user dashboard filtering. It does
not filter memory retrieval — search returns the full org-wide
memory corpus by default, regardless of which user this call is for.
That's almost always what you want: any correction your team has ever
made should be available to inform the next response.
If you have a specific reason to want per-user retrieval (e.g. a
personal-assistant agent where each end-user has their own preference
history), set search_user_id explicitly:
agentloop={
"user_id": "u_123", # tag the log
"search_user_id": "u_123", # opt-in: scope retrieval too
}
Migration note: Prior to v0.2.2, the wrapper silently forwarded
user_idto search as well, which suppressed retrieval of org-wide corrections. The fix is non-breaking for the default case. If you previously relied on per-user retrieval, setsearch_user_idto preserve that behavior.
Configuration (passed at wrap time)
anthropic = wrap_anthropic(
Anthropic(),
loop=loop,
# Custom memory injection. Default: append to system prompt.
# Handles both string and array-of-text-blocks system forms.
inject_memories=lambda memories, existing_system: ...,
# Auto-detect signals from the response before log_turn.
detect_signals=lambda question, answer, memories: {
"agent_punted": "not sure" in answer.lower(),
},
search_limit=3,
search_tags=["production"],
only_log_when_signaled=False,
)
Low-level API
from agentloop_anthropic import ask_with_agentloop, PerCallOptions
from agentloop_anthropic._ask import WrapOptions
resp = ask_with_agentloop(
anthropic, # raw, unwrapped Anthropic client
messages=[{"role": "user", "content": question}],
per_call=PerCallOptions(user_id="u_123"),
config=WrapOptions(loop=loop),
model="claude-opus-4-7",
max_tokens=1024,
)
Not mutated
wrap_anthropic(client) returns a distinct wrapper. Your original
client stays unwrapped and usable.
Streaming
Not supported in v0.1. Same note as agentloop-py-openai — planned
for a later release.
License
MIT
Project details
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 agentloop_py_anthropic-0.2.2.tar.gz.
File metadata
- Download URL: agentloop_py_anthropic-0.2.2.tar.gz
- Upload date:
- Size: 13.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
977849cdc12bf6f3a8aad535a78590e1e369a730838349e798aa4521fe62982f
|
|
| MD5 |
2eff8a4654ae9757a76c15c442566698
|
|
| BLAKE2b-256 |
ca250a658996a83346f4c7fca6054109360f5a0157c8a6f16de35c3ad6d05381
|
File details
Details for the file agentloop_py_anthropic-0.2.2-py3-none-any.whl.
File metadata
- Download URL: agentloop_py_anthropic-0.2.2-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8da33c5893263617390c4e425e9be24b99e6eba71df234f5eecf6a2b103a6e9a
|
|
| MD5 |
c1408e8943536fade57f36a499acc40f
|
|
| BLAKE2b-256 |
782fe2c7ffe45a5705879c44be13fcf9956b63f8e3df541a60c048e9cbe3a004
|