Context is precious. Execution is sacred. Trust is earned.Python 3.10–3.13

Framework guide

AWS Strands Agents

Use Agent-Gantry with Strands' model-driven agent loop. This page covers basic setup and the first production-friendly path; continue to the advanced page for per-turn dynamic retrieval, LLM calls, and operations.

Advanced Strands usage →

Basic page: register once, adapt at the edge

  1. Create a Gantry instance near application startup.
  2. Register deterministic Python functions with descriptions and input schemas.
  3. Export framework-native tools for Strands immediately before constructing the agent.
  4. Keep authorization, rate limits, and audit metadata in Gantry instead of duplicating it inside framework glue code.
from agent_gantry import AgentGantry
from agent_gantry.strands import StrandsAdapter
from strands import Agent

gantry = AgentGantry()

def get_order_status(order_id: str) -> str:
    """Return the current shipping status for an order."""
    return "in_transit"

gantry.register_tool(get_order_status, tags=["support", "orders"])
adapter = StrandsAdapter(gantry)
framework_tools = await adapter.select("check an order", limit=3)  # Native DecoratedFunctionTool objects.

agent = Agent(tools=framework_tools)

First tool-calling loop

Let Strands own the conversation lifecycle while Gantry owns the tool catalog. Start with a small tool set and assert that the framework receives only safe, documented functions.

Basic testing checklist: verify tool names, JSON schemas, auth metadata, and a happy-path invocation before wiring a live model.

Basic LLM call guidance

For early prototypes, use the model provider already recommended by Strands (Amazon Bedrock by default; Anthropic, OpenAI, and others via strands.models). Wrap that client with a thin policy function that records model name, prompt tokens, completion tokens, tool calls, and latency. Once the integration stabilizes, move the policy into Agent-Gantry's LLM adapter layer so other frameworks share the same rules.