A useful travel agent needs two abilities. It must ask other agents for specialist work. It must also remember a traveller's preferences between trips.
Wayfinder explores both abilities with a road-trip planner. The orchestrator delegates route, places and food research through Agent2Agent (A2A). AgentCore Memory supplies facts from previous trips.
This article follows the Wayfinder repository. The examples illustrate the code. They do not run agents or call AWS.
A2A gives each agent a communication boundary
A function call works when one process owns all the code. A distributed system needs an interface that separates the caller from the specialist's implementation. A2A supplies a protocol for that exchange.
The protocol defines agent discovery, messages, tasks and results. An Agent Card describes an agent's capabilities and connection details. Tasks can represent work that continues beyond one immediate response. The A2A concepts explain these protocol objects.
Wayfinder uses Strands Agents rather than implementing the protocol transport itself.
The orchestrator creates an A2AAgent client for each configured endpoint.
It sends the request through invoke_async and collects the returned report.
Each specialist starts a Strands A2AServer around an agent factory.
The endpoints come from configuration. This project does not implement a separate discovery directory. The wrapper handles protocol details. The application code handles the trip workflow.


The route agent returns driving legs first. The orchestrator adds that report to requests for the places and food agents. Those agents then research towns along the proposed route. The dependency matters more than the speed comparison: downstream agents need useful route context.
A2A carries work, while MCP exposes tools
Model Context Protocol (MCP) standardizes access to tools and resources. A2A standardizes communication between agents. Wayfinder uses both because the system needs both boundaries.
The orchestrator asks the food scout for a report through A2A. The food scout searches venues through MCP. The orchestrator does not need to implement the venue search itself.
| Boundary | Caller | Receiver | What crosses it |
|---|---|---|---|
| A2A | Orchestrator | Specialist agent | Trip request and specialist report |
| MCP | Specialist agent | Tools server | Tool arguments and returned data |
| Memory API | Orchestrator | AgentCore Memory | Saved events and retrieved facts |
The shared server exposes geocode_place, driving_route, find_venues_near and daily_forecast.
Its sources include OpenStreetMap, BRouter and Open-Meteo.
Those public data tools need no API keys. Bedrock and other AWS services still require credentials.
Inspect an agent exchange and a remembered preference
Choose a specialist below. Step through the sequence diagram to follow A2A delegation, the model call and the MCP tool exchange. Then change the memory stage and traveller. An event saved for Alex does not become an immediately available fact, or a fact for Sam.
Explore A2A delegation and long-term memory
Route planner · one tool cycle
Select a message, or use Previous and Next.
1. Delegate trip request · A2A
The orchestrator sends a request to the route planner's configured endpoint. The SDK handles the protocol exchange.
This diagram shows an application exchange, not a raw A2A payload. It omits optional Agent Card discovery, task updates and repeated tool calls. Wayfinder uses configured endpoints.
Sample previous trip: Alex said, “I prefer vegetarian meals.”
/traveller/alex/
Brief for the next trip
Plan a road trip. No preference from Alex's sample event is added.
A saved event is not yet an extracted long-term fact.
These examples simplify the application data. They are not raw A2A messages or a live memory service.
Long-term memory is more than conversation history
A conversation event records what a user and agent said. A long-term memory record stores a fact or preference that can help in a later session. Wayfinder saves an event after each completed plan. AgentCore extracts reusable information from those events in the background.
The memory setup script configures two strategies:
USER_PREFERENCEextracts preferences, such as dietary choices.SEMANTICextracts factual information that can help with later requests.
The script configures a 30-day expiry for events. That setting does not establish a 30-day expiry for every extracted memory record. Events and extracted facts are different objects.


Before the next trip, load_profile searches the traveller's namespace.
It requests up to ten relevant records using the new trip request as the query.
The namespace follows /traveller/{id}/.
The brief function adds retrieved facts to the specialist request.
After the plan, save_run creates a USER and ASSISTANT event with a new session ID.
Later trips use the same traveller ID to retrieve the extracted facts.
The memory path requires both a traveller ID and configured memory.
Without them, the orchestrator skips retrieval and storage.
The namespace scopes retrieval. It does not authenticate the person who supplies a traveller ID. A production application needs a trusted identity-to-traveller mapping and controls for correcting or deleting memory. The current flow does not guarantee that a remembered preference remains accurate.
Where the AWS services fit


| Service | Its role in Wayfinder |
|---|---|
| Amazon Bedrock | Supplies models for specialist reasoning and final composition. |
| AgentCore Memory | Stores events and extracts facts for later trips. |
| Amazon EKS | Runs the specialist and tools containers. |
| Amazon ECR | Stores container images for deployment. |
| Amazon VPC | Defines the cluster's AWS network. |
| AWS IAM | Grants scoped permissions to workload roles. |
| Terraform | Defines the cloud infrastructure. |


Keep the boundaries honest
If a specialist call fails, the orchestrator returns an unavailable note for that report. The composer receives the note and instructions to identify the missing part. If the route call fails, the current code still sends that note to downstream agents.
The food scout must cite dietary claims and preserve caveats about incomplete public data. The composer receives instructions to preserve those caveats. These prompts describe intended behavior. They do not prove every generated plan follows it.
The key design is a set of explicit boundaries: agent requests, tool calls and memory records. Each boundary needs separate checks. Read the orchestrator, A2A server, and memory implementation. For a regional data boundary, read Sovereign RAG.