Nested Agent Skeleton:
The session is over and the recording is up. This page is the build guide that goes with it. Steps 1 to 4 are the setup, Step 5 is everything we built live.
Step 1
Download the blueprint
Import this into a new Make scenario. It contains the Orchestrator and the Memory Agent. Step 5 is where the rest gets built.
nested-agent-skeleton-start.json
Step 2
Data structure JSON
Open any Data store module, click Create a data store, then Create a data structure. Use the Generator and paste the JSON below.
Data store name
Nested Agent SkeletonData structure name
Nested Agent SkeletonData storage size
1 MB
JSON
{
"type": "memory",
"subject": "Laura Bennett, Kestrel Systems",
"category": "agreement",
"content": "Laura agreed to renew for 12 months at 4800 EUR.",
"recorded_on": "2026-08-05",
"title": "Send the revised proposal to Kestrel Systems",
"status": "open",
"due": "2026-08-12",
"source_id": "mem_laura_kestrel",
"context": "Laura asked for a revised proposal after the call.",
"last_updated": "2026-08-05 14:30:00"
}- Every field must be of type Text.
- No field may be set to Required.
Step 3
Connect the AI provider
The blueprint ships without a connection. Open the Orchestrator and the Memory Agent and pick one in each — the connection is not inherited. Do the same for the Task Agent once you build it in Step 5.
- Make AI Provider runs on your Make credits. No OpenAI or Anthropic account needed.
- A full three-hop run costs around 225 credits and takes a bit over a minute. Single-hop runs are far cheaper.
- On a free Make plan you only get the smaller models. The bigger ones sit on paid plans. If you have your own provider connection, use it. The connection is just the route.
- What matters is the model itself, because it has to carry a record key across two agents. Start on a capable model, get it working, then test your way down.
- The Orchestrator runs on reasoning effort medium.
- The Memory Agent runs on reasoning effort low, same as the Task Agent in Step 5.
Step 4
Seed the data store
Send these two prompts, one after another. They create the three memories everything else runs against.
Prompt 1
Remember this: Sarah Chen at Northwind Logistics agreed I'd send a revised onboarding proposal. She wants pricing split into setup fee and monthly.
Prompt 2
Remember this: Sarah Chen prefers short async updates over calls. She asked to be cc'd on anything involving her ops team. Also remember: Daniel Okafor at Meridian Retail wants a pilot before signing anything longer than three months.
Step 5
Build the rest
This is the part we built live. Every description below goes into Make exactly as it is. Copy, don't retype.
5.1 Attach Web Search
Add Make AI Web Search as a tool on the Orchestrator, not as an agent. Then give it this description.
WEB SEARCH — TOOL DESCRIPTION
Search the public web for current information. Use only when the answer cannot come from memory or the task list.
5.2 Create the Task Agent and describe it
Add a second AI Agent on the Orchestrator. The form asks for a name and a description first, so start here. This is the text the Orchestrator routes on, and the last sentence does most of the work.
TASK AGENT — TOOL DESCRIPTION
The to-do list. Use for creating, listing, updating and closing tasks. Also use when the user asks what is open, what is due, or what needs doing. This agent cannot look anything up about people, companies or past agreements.
5.3 Settings and system prompt
With the description in place, set these three:
Model
Claude Sonnet 5Reasoning effort
lowMaximum conversation history
0TASK AGENT — SYSTEM PROMPT
You own the task list. One data store, nothing else. You never read or write memories. If you are asked what the user agreed or remembers, reply that memory belongs to another specialist. Rules: - title: one imperative line, under 80 characters. - status: "open" or "done". - due: YYYY-MM-DD. If no date is given, leave it empty. - context: one sentence explaining why this task exists. If the context came from a memory, keep its wording. - source_id: if the caller provided record keys, copy them exactly, character for character, comma-separated if there are several. If no key was provided, leave it empty. Never invent one. - When creating a new task, set the key yourself in the form "tsk_" followed by four lowercase letters or digits, for example tsk_c4m2. Keep it short enough to read aloud. When a task is completed, set status to "done". Do not delete it.
5.4 Add its five tools
Five Data store operations, each on the same data store you created in Step 2. Build one tool at a time, top to bottom. Field descriptions are cut off at 128 characters. These all fit.
Add a record
ADD A RECORD
Create a new task. Use this when the user asks for something to be done or followed up. To change an existing task, use Update instead.
Key
Let AI Agent decideCheck the box, then leave the description empty.
Overwrite an existing record
NoLeave "Let AI Agent decide" unchecked here.
Field descriptions
Check "Let AI Agent decide" on each field first. It is off by default, and the description box only appears once it is checked.
title
One imperative line under 80 characters. Example: Send the revised proposal to Kestrel Systems
status
Either "open" or "done", lowercase. Nothing else.
due
YYYY-MM-DD. Date only. Leave empty if no date was given.
source_id
Record keys of the memories this task came from, copied exactly. Comma-separated if several. Empty if none. Never invent one.
context
Why this task exists, 1-2 sentences. Name the person, the company and what was agreed.
Fixed mappings
These two are not for the agent to decide. Leave "Let AI Agent decide" unchecked and map the values yourself.
TYPE
task
Only Add maps type. Update never touches it, and an empty field is not written, so the original value survives.
LAST UPDATED
{{formatDate(now; "YYYY-MM-DD HH:mm:ss")}}
A model has no clock. Never let it fill a timestamp.
Update a record
UPDATE A RECORD
Change an existing record, for example to mark a task as done. Use only when you already know the key. Fails if the key does not exist.
Insert missing record
NoCreating is what Add does. If the key is missing, this tool should fail instead of quietly writing a new record.
Leave "Let AI Agent decide" unchecked here.
Overwrite an existing array in the record
YesMake concatenates arrays by default. An update that appends is not an update.
Leave "Let AI Agent decide" unchecked here.
Field descriptions
Check "Let AI Agent decide" on each field first. It is off by default, and the description box only appears once it is checked.
Update a record — key
Exact task key of the task to change. Search first if you only have a keyword.
title
One imperative line under 80 characters. Example: Send the revised proposal to Kestrel Systems
status
Either "open" or "done", lowercase. Nothing else.
due
YYYY-MM-DD. Date only. Leave empty if no date was given.
source_id
Record keys of the memories this task came from, copied exactly. Comma-separated if several. Empty if none. Never invent one.
context
Why this task exists, 1-2 sentences. Name the person, the company and what was agreed.
Fixed mapping
Not for the agent to decide. Leave "Let AI Agent decide" unchecked and map the value yourself.
LAST UPDATED
{{formatDate(now; "YYYY-MM-DD HH:mm:ss")}}
A model has no clock. Never let it fill a timestamp.
Search records
SEARCH RECORDS
Find tasks by keyword. Leave the value empty to list the whole task list. Use this when asked what is open or what is on the list.
Filter
title — Contains (case insensitive)OR
context — Contains (case insensitive)Use "Add OR rule" for the second one, not "Add AND rule". Two separate rules, not two conditions in one.
Make defaults the operator to "Equal to". Leave it and nothing will ever match.
Field descriptions
Check "Let AI Agent decide" on each field first. It is off by default, and the description box only appears once it is checked.
Filter 1
Keyword from the task title. Empty = no restriction.
Filter 2
Keyword from the task context. Empty = no restriction.
Advanced settings
Switch on "Advanced settings" at the bottom left of the tool window. The next two settings do not exist until you do.
Continue the execution of the route even if the module returns no results
YesAn empty task list is a valid answer. Without this, "What's on my list?" fails instead of coming back empty.
Limit
20Caps how many records come back in one call. An unbounded list is a real cost once the store grows.
Get a single record
GET A SINGLE RECORD
Retrieve one task when you already know its exact key.
Field description
Check "Let AI Agent decide" on this field first. It is off by default, and the description box only appears once it is checked.
Get a single record — key
Exact task key. If you only have a keyword, use Search records instead.
Delete a single record
DELETE A SINGLE RECORD
Permanently remove a task. Use this only when explicitly asked to delete. A completed task is marked done, not deleted.
Field description
Check "Let AI Agent decide" on this field first. It is off by default, and the description box only appears once it is checked.
Delete a single record — key
Exact task key. Only when explicitly asked to delete. A finished task is marked done, not deleted.
5.5 Trim what comes back
Every tool hands its output to the agent above it, and every agent hands its output to the Orchestrator. Both are yours to control. This is the difference between a lean context and a flood.
On the five tools
Add a record
Leave as isUpdate a record
Leave as isSearch records
Key and Record, both onBoth stay checked. Without the Record you get keys and nothing to read.
Get a single record
Turn off Subject, Category, Content, Recorded onThose four belong to memories, not tasks. This agent has no business seeing them.
Delete a single record
Nothing to set hereOn the Orchestrator
Memory Agent
Response onlyThis one arrived already trimmed. Open it and look, then open your Task Agent and compare.
Task Agent
Response onlyAll six are on when you build the agent yourself. Everything except Response goes off.
Make AI Web Search
Result onlyDetails is on by default. Switch it off. It carries the raw search payload, sources, annotations and token counts, and none of that helps the Orchestrator answer.
Step 6
Run it
Work down this list once the Task Agent and Web Search are attached. Each one exercises a different path.
Memory only
What do you remember about Northwind?
Task only
What's on my list?
Task only, creating
Add a task: book the meeting room for Monday.
Web search only
What's the latest news on AI agents in the automation platform Make.com?
Nothing stored
What do you know about Marcus Feld?
The update path
Sarah now wants a single monthly fee instead of a split. Update what you know about her.
The proof
What did Daniel Okafor ask for? Create a task for the next step.
THE FINALE
What did I agree with Sarah at Northwind? Check the latest news on AI agents and sub-agents in the automation platform Make.com, it needs to be incorporated into the offer. Then create a task for the next step.
- Three creates, three different paths: no memory, one memory, memory plus web.
- The task list starts empty. "What's on my list?" returning nothing is correct.
- On the standalone task, source_id stays empty. Nothing was handed down, and the field description says never invent one.
- THE PROOF and THE FINALE both build a task out of memory. Open the new record: source_id holds the keys of the memories it came from. Paste one of them into the data store search and the original comes back.
- THE FINALE runs all three in one pass. Give it about 70 seconds.
- Nothing is stored about Marcus Feld. The answer should say so rather than fill the gap.
- After the update: last_updated has moved, recorded_on has not, and the other rows are untouched.
The pattern doesn't stop at two agents. Adding a third is in the cheat sheet.
Or skip the build
The blueprint on this page is the starting point. The finished scenario is the one we ended up with: all three agents and the web search tool, wired and tested. It comes with the cheat sheet, five pages covering the setup, the two data structure traps and the recipe for adding a third agent.