Autonomous agents with memory and context — patent filed with the USPTO

Operations · Reports and documents

The report written by the agent, with numbers it never typed

The Squad queries your systems, analyzes what it finds and publishes an analytical document: sections, tables fed straight from the API, charts drawn by the server and a PDF. Then it sends the report by email — only to people on the authorized list.

Part of the Hal-AI Agentic platform. The same agent that does the work is the one that reports on it.

Chart on a dark screen with bar and line series, representing the reading of a period's data
Publish a document

The report the agent writes

Publishing a document is one of the agent's tools, like querying the ERP or sending a message. It decides the analysis is worth a report, assembles the piece and delivers it — with nobody opening an editor.

Sections with written analysis

The agent organizes the document into sections and writes the text for each one: what it looked at, what it found and what it recommends. That is where its reasoning adds value — and it is the only part it drafts.

Reference blocks

Tables and charts are never typed out. The agent declares which API call the data comes from, which list to use and how to join it with another source. The server reads the response and builds the block.

PDF generated on the server

The same document comes out as HTML for reading on screen and as a PDF to attach to an email. The stylesheet belongs to the platform: the agent writes content, never appearance.

The agent chooses what to show. The server does the math and the drawing.

1

Wakes up and queries

At the scheduled time, the Squad calls your systems' APIs and receives the data for the period.

2

Analyzes case by case

With the subagent fan-out enabled, dozens of readings run in parallel — one per order, per patient, per contract — each answer validated against a declared schema.

3

Declares the blocks

It writes the sections and points every table and every chart at a call it already made in the same run.

4

Publishes and delivers

The server assembles the document, generates the PDF and emails it to the authorized recipients. The run is logged with everything that was done.

Below is a representation of the document as it reaches the manager. The stylesheet is light and serifed on purpose — the deliverable does not look like the console, it looks like a report.

Hal-AI · Document published by the Squad PDF · 214 KB

Appointment Confirmation · run #47

Who confirmed, who went silent and what is left for tomorrow

Report published by the Squad at the end of the 8:00 AM run, covering this week's appointments.

period Aug 18–25 source api_get_appointments run #47
01The week at a glance

There were 412 appointments in the period. The routine reached out to the 318 with no confirmation on record and got an answer from 244 people the same day. The 29 contacts outside the 24-hour window are still pending and can only be approached with an approved template.

Confirmed 244 76.7% of those contacted
No answer 45 retry tomorrow at 8:00 AM
Outside the window 29 require an approved template
02Outcome by share
Contacted318 Confirmed244 No answer45 Rescheduled29

Figure 1 — share of each outcome across the 318 contacts reached in run #47.

03Locations covered
Appointment confirmation outcome by location, in run #47
Location Shift Contacted Confirmed State
Victoria Clinic — Downtown morning 126 108 fully booked
Victoria Clinic — North afternoon 94 71 fully booked
Aurora Site morning 61 42 19 open slots
Route 12 Site afternoon 37 23 outside the window
Total for the period 318 244
What the manager has to decideThe Aurora Site is left with 19 open slots on Wednesday morning. Releasing those slots to the waiting list takes a human decision — the Squad does not rearrange the schedule on its own.

What you are looking at

The header names the routine and the run that produced the piece, and the mono line declares which API call each block in that document came from. Every row of the site table ends in a state seal — fully booked, 19 open slots, outside the window — and every number card says underneath it what happens next, like the retry set for 8:00 AM the following day.

The block that closes the document is the only one that does not report: it separates what the Squad already handled from what needs a person to decide.

The advantage

The piece arrives with the cases already flagged and the open item named, so nobody has to open the system to find out where to look. Exporting the period's spreadsheet, cross-checking the lists and writing the summary stops being manual work — and it comes out overnight, before the operation opens.

Because the structure is the same on every run, today's document can be compared with last week's without anyone redoing the math to line the two readings up.

Only on Hal-AI

With the subagent fan-out enabled, every case in the table comes from a reading of its own: dozens of analyses run in parallel, one per order, per patient or per contract, each with dedicated reasoning and an answer checked against a schema declared before it can become a row.

A flow automation walks a tree and hands back the total for the set. Here the set is looked at case by case — and the subagents inherit read-only tools: writing, emailing or firing off a message does not exist in their world.

The same document comes back into the run's chat as a clickable attachment, with the file name, format and size — that is how the manager opens the piece without leaving the conversation with the orchestrator.

Appointment Confirmation — Aug 25, 2026 PDF · appointment-confirmation-0825.pdf · 214 KB Open document

The published document bubble, as it appears in the Squad's run chat.

Reference tables

The data comes from the API, not from the model's memory

A table retyped by a language model is a plausible table. The difference here is architectural, not a matter of careful wording.

The model retypes the table

  • Every cell is a decision by the model — and a place where it can be wrong without looking wrong.
  • Long lists wear it down: rows disappear, columns go silent, the total stops matching the parts.
  • Checking the work means running the query again by hand, item by item.
  • June's report does not look like May's.

Reference block

  • The agent says which call, which list and which key to join on. The server does the rest.
  • Subagent results flow straight into the table, with the model copying nothing.
  • When the same tool was called twice with different filters, the agent has to say which one — or the block is not built.
  • The shape is the same every month; only the data changes.
9 chart types drawn by the server
6 color states with declared meaning
3 ready-made reports in the operations console
Charts

Nine chart types, drawn by the server

The agent declares the shape of the data — ranking, series, distribution — and the angle. Calculating the scale, positioning the bars and writing the legend is the server's job.

The nine chart types available in the document and the data shape each one represents
Type Data shape it shows
Horizontal barsA ranking of items by one value — who leads and who trails.
Stacked columnsThe makeup of each group, with the segments adding up inside the column.
Line seriesOne or more series over time, to spot trends and breaks.
DonutEach part's share of the whole, when there are only a few parts.
CompositionSide-by-side proportions across groups, in absolute values or percentages.
Scatter by groupWhere each case falls inside its group — clustering and outliers.
MatrixTwo dimensions crossed, with the intensity shown in each cell.
WaterfallWhere it started and where it ended: what added and what subtracted along the way.
HistogramThe distribution of values by range, to see the shape of the sample.

Color with meaning, not color for looks

The agent never picks a hex code. It picks a meaning — ok, warning, bad, missing, info, neutral — and the palette belongs to the server.

When nothing is declared, the chart comes out in a single color. That is deliberate: in a report where red means open this case first, seventeen bars in seventeen colors teach the reader to ignore color altogether. The exceptions are donut and composition charts, where color identifies the slice.

  • The same piece has to work on screen and in the printed PDF.
  • Changing the company's visual identity does not require touching a single prompt.
  • What makes a state critical is the manager's business rule, not the design.
Delivery

Sending, scheduling and the closed list

An agent that sends email on its own needs a hard limit on who it can send to. At Hal-AI that limit is not a line of instructions: it is a registry.

Authorized recipients only

The list of people who can receive a report is registered by the manager in the console. During a run the agent chooses from that list — it does not type in a new address, does not edit the list and does not improvise a forward. Every recipient is checked before the send.

Recurring schedules

The daily, weekly or month-end report goes out at the agreed time. The Squad wakes up, reads its own context and decides what that run calls for — including concluding that there is nothing new to report.

"Do it like this one, every month"

The manager attaches the report the team already builds by hand and asks for that same shape using API data. The Squad works out the structure once and keeps the template — declared sections, tables and charts. After that it only fills in the text for each gap.

Auditable runs

Every run keeps a record of what was queried, what was decided and what was sent. There is a simulation mode to rehearse without sending anything and a stop button to halt it immediately.

On the console side, that same delivery shows up as configuration.

Hal-AI · Squad · Schedule and recipients Delivery
Report scheduling and delivery When the Squad wakes up, what it publishes and who the piece is delivered to.
Frequency Daily — Monday to Friday, at 8:00 AM The schedule is set by the manager. When it wakes up, the Squad reads its own context and may conclude there is nothing new to report that day.
Next run tomorrow · 8:00 AM data window: current week
Output format HTML for reading on screen and PDF attached to the email The stylesheet belongs to the server: the agent writes content, never appearance.
Mode Live sending Simulation available
Closed recipient list 4 registered · 3 active every address is checked before dispatch — anyone off the list does not receive it
management@victoriaclinic.example north.coordination@victoriaclinic.example downtown.frontdesk@victoriaclinic.example audit@victoriaclinic.example · paused
History of the latest report deliveries, with recipients reached and outcome
Run Document Format Recipients Outcome
#47 · today 8:04 AM Appointment Confirmation PDF 3 Delivered
#46 · yesterday 8:03 AM Appointment Confirmation PDF 3 Delivered
#45 · Aug 21, 8:02 AM 0 No report · nothing new
#44 · Aug 20, 8:06 AM Appointment Confirmation PDF 2 1 address off the list
Total across the 4 sends 8 3 + 3 + 0 + 2

What you are looking at

On the left, the routine's tabs, with Schedule and delivery open. In the center, the frequency and the next run, the format the piece goes out in and the mode it runs in. Below that, the closed-list banner and the registered addresses: three active and one paused by the manager.

The history underneath is the record of each send — how many recipients were reached, the run that published nothing and the one with an address blocked — with the period total showing the parts that add up to it.

The advantage

Delivery stops depending on someone remembering to run the report and forward the file. When the manager asks whether Tuesday's piece went out and to whom, the answer is on the same screen, with no digging through an inbox.

Taking someone off the list is a registry change, not a rewrite of the agent's instructions — and an address outside the list is blocked before dispatch, so a document holding your customer's data never goes out by mistake to someone who should not receive it.

Only on Hal-AI

A scheduled automation fires because the clock struck. Here, waking up is not an order to act.

  • Before reaching out to anyone, the Squad talks to the Channel Agent in natural language and gets an answer back — this customer already confirmed yesterday, I did not send. It is not fire and forget.
  • The resend lock is anchored to the occurrence, not to the template name: whoever was already handled in that case is not contacted again on the next run.
  • The run that published nothing still counts as successful — checking and concluding there is nothing to report is a declared outcome, not a failure for the supervisor to investigate.

It is the same difference on the inside: the agent decides what that particular run calls for, instead of walking a tree drawn up in advance.

Console

Operational reports, ready in the console

Alongside the documents the agent publishes, the console ships three operational reports a supervisor can pull on the spot — filtered by queue and by channel, with the PDF generated on the server, email delivery and recurring schedules.

Chats per operator

How much each person handled in the period, with the count of distinct conversations always shown next to the per-operator total.

Human chats per period

The volume that went through human service, separated from what the agent resolved on its own.

Customers per period

Who talked to the company in the chosen window, broken down by queue and by channel.

A transferred conversation takes credit from no one

When a conversation changes hands, counting by queue alone erases the work of whoever handled it first. The count uses the union of the queue with the card movement log — and the report shows both readings side by side, so the per-operator total is never mistaken for the total number of conversations.

An aggregate figure printed alongside its parts is a figure the supervisor can actually check.

Written analysis inside the PDF

The PDF also carries a plain-language reading of that period's numbers: what went up, what went down and where it is worth looking. The text comes from the AI; the table still comes from the query.

See the call center and the operations audit trail

HAL Copilot

The Copilot answers with charts too

Not every question deserves a scheduled report. The manager opens the Copilot, asks in plain language and gets the answer already formatted — text, table and chart right on the screen.

  • Queries only your company's data, in read-only mode.
  • Exports the result as a PDF and can send it by email or WhatsApp.
  • Runs as an autonomous process: the manager asks, closes the page and is notified when it is ready.
  • Schedules recurring checks and offers a deep analysis that reads conversation by conversation.

Two ways to ask for the same number

Right now, in the chat

The Copilot answers the manager with the chart on screen and the PDF ready to forward.

On its own, on schedule

The Squad publishes the full document and delivers it to the authorized list, with nobody asking.

The memory and the tools are the same on both sides. What changes is who pulls the trigger.

Why this matters

The number the agent cannot invent, because it never passes through it

AI reporting usually fails in a way that is hard to notice: the document reads well, the axis is there, and the data is approximate. Here the data takes a different path.

A single source

Table and chart read the same API response, resolved in the same place. There is no table version and chart version.

The arithmetic belongs to the server

Scale, sums, percentages and the position of every element are computed outside the model. What it would get wrong is no longer its job.

Delivery is verified

A document with no content does not go out. A recipient outside the list does not receive it. Every run is logged with what was done and what was not.

This difference is easier to see in the deliverable than to explain. Below, the weekly route close for a carrier: the same API call feeds the chart and the table on the following page.

Hal-AI · Published document — route close HTML and PDF

Route Close · run #31

Where the delays piled up this week and what the operation needs to look at

Report published by the Squad at the end of the Saturday run, covering the week's four reference routes.

period Aug 18–23 source api_get_deliveries run #31
01The week at a glance

There were 1,453 deliveries across Meridiano Transport's four reference routes. 1,325 arrived inside the window agreed with the customer and 128 ran late — 47 on Route 41 and 41 on Route 58, which together account for 88 of the 128 occurrences.

Deliveries in the period 1,453 486 + 402 + 351 + 214
Late 128 8.8% of the 1,453 deliveries
Routes with occurrences 2 Route 41 and Route 58
02Delays by business day

Wednesday holds the peak: 31 of the 128 occurrences fall on a single day, against 11 on Saturday, when local volume is lower.

Late deliveries by business day source: api_get_deliveries · scale and drawing from the server

Figure 1 — late occurrences by business day: 14 + 19 + 31 + 26 + 27 + 11 add up to the 128 in the period.

03Reference routes
Deliveries and late occurrences by reference route, in run #31
Route Shift Deliveries Late Status
Route 12 — Downtown morning 486 22 on target
Route 27 — Coastal afternoon 402 18 on target
Route 41 — Highlands morning 351 47 delays concentrated
Route 58 — Inland night 214 41 off target
Period total 1,453 128

Table 1 — the same api_get_deliveries call that fed Figure 1, grouped by route.

What the manager has to decideRoute 41 holds 47 of the 128 occurrences with the lowest volume of the three daytime routes. Reworking the stop sequence is a call for whoever runs the operation — the Squad reports, it does not redraw the route.

What you are looking at

This is the document as it reaches the manager: light page, numbered sections, and a metadata line declaring the period, the run and the API call that fed the piece. The chart in Figure 1 and the table in section 03 read the same api_get_deliveries response — one grouped by day, the other by route.

No number in the text is left without its parts: the 1,453 deliveries appear as 486 + 402 + 351 + 214, and the six bars in the chart add up to exactly the 128 occurrences in the table column.

The advantage

Because the sum, the scale and the height of every bar are computed outside the model, checking the piece means looking at two figures on screen — not rerunning the query in the system. If the chart and the table disagreed, it would be because the data changed at the source, never because the text was retyped.

And what the piece asks of the manager comes separated from what it reports: Route 41 is named at the end of the document as a human decision, not buried in the middle of the analysis.

A report exists so you can decide. Deciding on approximate numbers is worse than having no report at all.

Questions

Frequently asked questions

Does the number shown in the report table pass through the AI model?

No. In reference blocks, the agent declares which API call the data comes from, which list to use and how to join it with another source. The server reads that response, builds the table and draws the chart. The model writes the analysis and chooses the angle; the arithmetic and the drawing are not its job.

Who can receive the report by email?

Only people on the authorized recipient list, registered by the manager in the console. The agent does not type in a new address or edit the list during a run, and every recipient is checked before delivery. A published report with no valid recipient does not go out.

Can we reproduce every month the report my team already builds by hand?

Yes. The manager attaches the existing document in the Squad chat and asks for that same shape using API data. The Squad works out the structure once and keeps a template: the sections, the tables and the charts already declared. On later runs it fills in the text for each gap and the server rebuilds the document, so the monthly series stays comparable.

Bring us the report you build by hand

We will show you how the agent queries your systems, publishes the document and delivers it on schedule — with every number coming from the source.