Catalog PyPI
Back to packageRELEASE DETAILS

0.3.0

PyPI

agentloop-py-anthropic

Drop-in Anthropic SDK wrapper for AgentLoop — adds memory retrieval and turn logging to messages.create calls. Supports streaming.

agentloopagentsanthropicclaudellmmemoryrag
Published15 May 2026
Direct dependencies4
Transitive dependenciesNot calculated

README

Version 0.3.0 documentation

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:

  1. Extracts the last user message as the query
  2. Calls loop.search(query) — pulls any relevant corrections
  3. Appends them to your system prompt (or creates one if absent)
  4. Calls Anthropic with the augmented system prompt
  5. 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_id to 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, set search_user_id to 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

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 4

Native requirements
4 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
agentloop-py
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
agentloop-py>=0.2.0runtime
anthropic
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
anthropic>=0.30.0runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
pytest>=7.0; extra == "dev"runtime
respx
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
respx>=0.20; extra == "dev"runtime

Distribution files

2 collected
agentloop_py_anthropic-0.3.0-py3-none-any.whl

bdist_wheel · 12.75 KB · Python py3

Source file
agentloop_py_anthropic-0.3.0.tar.gz

sdist · 13.49 KB · Python source

Source file

Repository

PENDING
martinembon/agentloop-py

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:38 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:16b8ed356b149945fd3bc6c2c2301de74dec0fd91a2be5a6395c2dabdb601b2c

Other collected versions

View all collected versions →