I am writing a historical novel that questions the dominant narrative told about an Italian girl named Maria Goretti.
Maria Goretti died in 1902, and then in 1950 the Catholic Church canonized her the patron saint of purity and forgiveness. Her sainthood and designation as a virgin martyr arose from two assertions: she not only heroically defended her virginity to the death, but she also forgave the man who assaulted and murdered her.

The story goes…
The surgeons had done what little could be done, but everyone who looked upon the child knew the truth: little Maria would not see another dawn. She lay upon the narrow hospital bed in Nettuno, her golden hair spilling across the pillow like a halo wrought by God’s own hand, and though her small body had been pierced through with fourteen cruel wounds, no shadow of hatred crossed her face. About her gathered the physicians, her devoted mother Assunta, and the venerable archpriest, Father Temistocle, each of them marveling that one so young and so grievously wounded could be wrapped in such heavenly peace. Then, in a voice gentle and untroubled, the dying child spoke the words that would echo down through the ages: “I forgive him and want him with me in Paradise.”

While Maria’s story contains the flourishes of other virgin martyrs (Agnes, Cecilia, Agatha, Lucy, Philomena, and more), she uniquely died in the 20th century, when journalists, police departments, courts, and hospitals maintained their own record of events.
Across all sources, religious and secular, there is a skeleton of agreed upon events:
- In 1902, a girl named Maria Goretti was attacked by Alessandro Serenelli.
- She was brought to a hospital in Nettuno, where she died the next day.
- A trial found Alessandro guilty of attempted rape and murder.
- She was canonized a Catholic saint in 1950.
The details, however, drift.
Was Maria 11, 12, or 14 years old? Was she half-starved or blond and buxom? Was Alessandro a neighbor, a hired field hand, the family gardener, a passing sailor, or a fellow sharecropper who had lived in her house for years? Did he use a farm awl from his tool belt or a gleaming dagger? Was this the first time he had assaulted her or the last in a pattern?
And, critical to her sainthood, did she forgive him on her dying breath?
To answer this question, I needed to reconstruct the moment Maria offered her pardon: who was there, what was said, who documented it, and how did it change over time.
This post focuses on how I used Copilot CLI, Claude Opus 4.8, and a small team of helper agents to figure out, with as much precision as possible, what really happened that afternoon in the hospital.
An Agent in the Terminal
In my last article about using AI for Italian-to-English translation, I used ChatGPT. For this effort, I used Copilot CLI (pronounced “cl-eye,” rhymes with sly).
CLI stands for command line interface. The command line is a plain text window, also called a terminal, where you interact directly with your computer. You know, the thing that looks like a hacker movie from 1998: blank screen, blinking cursor, and a sense of impending doom.
I accessed Copilot CLI within Microsoft’s software called Visual Studio Code (which is itself a whole other blog post, so stay tuned).
Copilot CLI puts an AI inside the terminal that can both understand me (without having to use computer code) and can carry out tasks like building/installing/running programs and creating/reading/editing files. Because this AI can take action on my behalf, it’s called an “agent.”

That sounds complicated, Melissa! Why not just use ChatGPT?
In my non-hacker brain, here’s why.
ChatGPT is like talking to an AI on the phone about how I want to repaint my house. It can help me brainstorm and tell me what paint to buy. But in the end, I still have to grab the roller and do the painting myself. In contrast, Copilot CLI is like letting the AI put on work gloves, hire some contractors, and do the work for me.
For this reconstruction task, I didn’t need to chat about it. I needed an assistant to read my primary sources, flag and extract mentions of “forgiveness,” track citations, and chart the chronological narrative evolution.
In the terminal, you can choose any AI model to be the brains behind your agent. I chose Claude Opus 4.8 because it’s built for long, complex tasks. It’s known for being good at planning, reasoning, and coordination. A premium model, large and in charge. Boss Agent.
Let’s Start with a /plan
Okay, so, here we are: command line, blinking cursor, Boss Agent on deck and ready.
I pointed it to the folder with my primary sources and then /plan. That’s plan mode. Plan mode instructs the agent to stop and think before starting the task.
In plan mode, Boss Agent listened to my goal, asked clarifying questions, prepared a step-by-step approach, and waited for my approval.
Use existing knowledge? No.
One of the first questions Boss Agent asked was whether it could use its existing knowledge about Maria Goretti. Meaning: the material it had been trained on.
No.
Then it asked whether it could use the Internet to find more information.
Also no.
For this job, I wanted the AI to behave like an archivist: read only my primary sources and tell me what they say. This is important because the online story, and thus the data the model was trained on, reflects the dominant narrative that I’m questioning.

Create a human-in-the-loop verification system
In AI research, “human in the loop” means a person stays part of the process to verify and validate claims.
So, as part of the plan, I asked the Boss Agent to figure out a way to make it easy for me to be a human-in-the-loop. It created this approach:
Verification structure
- Convert all seven sources into plain Markdown text.
- Label every paragraph in every source with a tag like
[P0001],[P0002], and so on.- Attach every claim to a citation in the form source, year, paragraph.
- Make every major conclusion traceable back to the exact paragraph that supports it.
That way, a sentence like “Maria said, ‘Well then, if it be so, I will remember you,’” would always point back to a source marker, such as Marini 1904, P0122. This made it easier for me, the human, to easily validate and examine the surrounding context.

Establish a historical reconstruction framework
I also told Boss Agent that before it begins, it needs to establish a framework. I mean, this is expert-historian-level work, and I didn’t feel confident giving it my own guidance. Here are the instructions it gave itself:
Historical reconstruction checklist
- Define the event narrowly. Ask Melissa to be as specific as possible. Only reconstruct a specific episode, not generalities like “Maria Goretti’s death.” Date, place, people, institutions, and central uncertainty all need to be named.
- Rank the sources before analyzing claims. Put contemporary legal, medical, police, and newspaper evidence first. Put near-contemporary devotional evidence second. Put later Church, canonization, and modern biographies after that. Treat the ranking as a starting presumption, not an automatic verdict.
- Separate event-history from reception-history. Ask two different questions: what most likely happened at the time, and how was the story later retold, moralized, simplified, or made useful?
- Break sources into individual claims. Do not call a whole source reliable or unreliable. Extract each assertion, identify when it first appears, and test whether later repetitions are independent or copied.
- Evaluate motive and genre. Ask who produced the claim, for whom, when, from what evidence, and with what possible narrative function.
- Classify confidence claim by claim. Use labels like documented, probable, plausible but unproven, doubtful, contradicted, late accretion, devotional reframing, or unrecoverable.
- Produce a layered reconstruction. Show the earliest recoverable version, later developments, contradictions, source-critical analysis, and the most defensible reconstruction.
Recruit helper agents
The primary sources were long and complex, so instead of reading them one after another, Boss Agent asked me if it could enlist the help of subagents.
Eyes wide, I responded, um sure…
Boss Agent assigned an individual helper agent to each of my primary sources so they could work in parallel. Each helper had a narrow job: read their assigned source, find every place the forgiveness or deathbed scene came up, and bring back the passage with its paragraph tag.
The neat part was that Boss Agent did not simply clone itself four times. It chose a lighter, faster, cheaper model called Claude Sonnet 3.6 for the helpers, which as you’ll see later, saved me some serious coin.
Validate before publishing
Lastly, Boss Agent built in a verification pass. After the reconstruction was complete, Boss Agent planned to reopen the extracted source text, check the quotations and paragraph markers, and compare the final claims against the evidence trail.
During this step, Boss Agent did catch an error: one of the Helper Agents had mis-numbered the paragraphs. Their numbering was off by a count of 11. Boss Agent corrected the numbering and then confirmed that the text that was extracted had been accurate, so the final conclusions were not impacted.

AI Models Ain’t Free
Given the recent tokenpocalypse discourse, I wanted to share the costs of this reconstruction.
Copilot CLI logs every call it makes to an AI model. For each call, it records the model used, number of tokens in, and number of tokens out. A token is essentially a chunk of text (very roughly 3/4 of a word), and they’re what you pay for.
For my reconstruction, here is the token count:
| Model | What it did | Calls | Total input tokens | Output tokens |
|---|---|---|---|---|
| Claude Opus 4.8 | Boss Agent: planning, analyzing, synthesizing, validating | 70 | 7,610,496 | 162,650 |
| Claude Sonnet 4.6 | Helper agents: reading and tagging source material | 57 | 2,815,667 | 74,730 |
| Total | 127 | 10,426,163 | 237,380 |
That 10+ million number looks alarming, but—not that this wasn’t already totally complicated—the price of a token varies depending on what it’s doing.
Here are the four token types:
- Fresh input is text the model sees for the first time, like my initial description of the project, my answers to the Boss Agent’s questions, and tweaks to the plan ($ $)
- Output is the text the model writes back to me: the reconstruction document itself, the side-by-side variant tables, each helper’s list of tagged passages, and the citations like (Marini, 1904, P0125) ($ $ $ $)
- Cache write is storing a chunk of text the first time so it can be reused, like the first load of each of my sources and the reconstruction framework. ($ $ $)
- Cache read is re-reading text that is already stored, like going back to those same seven sources again and again to compare the forgiveness wording and check every paragraph tag during validation. ($)
Here are the 2026 rates, per million tokens for each token type.
| Model | Fresh input | Cache write | Cache read | Output |
|---|---|---|---|---|
| Claude Opus 4.8 (Boss Agent) | $5.00 / 1M | $6.25 / 1M | $0.50 / 1M | $25.00 / 1M |
| Claude Sonnet 4.6 (Helper Agents) | $3.00 / 1M | $3.75 / 1M | $0.30 / 1M | $15.00 / 1M |
To calculate the total cost of this effort, I multiplied the cost of each token type by the number of those tokens used. And then added it all together.
The total cost for the reconstruction of the forgiveness narrative was $14.65.
The table below shows a breakdown of the token type and corresponding rates that the Boss Agent (Opus 4.8) consumed. This added up to $11.35.
| Opus token type | Tokens | Rate | Cost |
|---|---|---|---|
| Fresh input | 1,893 | $5.00 / 1M | $0.01 |
| Cache write | 603,866 | $6.25 / 1M | $3.77 |
| Cache read | 7,004,737 | $0.50 / 1M | $3.50 |
| Output | 162,650 | $25.00 / 1M | $4.07 |
| Opus total | $11.35 |
The table below shows a breakdown of the token type and corresponding rates that the Helper Agents (Sonnet 4.6) consumed. This added up to $3.30.
| Sonnet token type | Tokens | Rate | Cost |
|---|---|---|---|
| Fresh input | 42,652 | $3.00 / 1M | $0.13 |
| Cache write | 352,714 | $3.75 / 1M | $1.32 |
| Cache read | 2,420,301 | $0.30 / 1M | $0.73 |
| Output | 74,730 | $15.00 / 1M | $1.12 |
| Sonnet total | $3.30 |
And finally, the table below shows the consumption costs by stage in the reconstruction process. Interestingly, validation, the re-checking of every citation, cost the most.
| Stage | Who | Calls | Cost |
|---|---|---|---|
| Read and tag the seven sources | Helper Agents (Sonnet 4.6) | 57 | $3.30 |
| Read my instructions and make plan | Boss Agent (Opus 4.8) | 2 | $0.45 |
| Analyze and write the reconstruction | Boss Agent (Opus 4.8) | 33 | $4.45 |
| Validate the citations | Boss Agent (Opus 4.8) | 35 | $6.46 |
| Total | 127 | $14.65 |
So, for a job that would have taken me days (weeks? months? A PhD in source criticism?), roughly fifteen dollars felt fair.
Drumroll Please… The Forgiveness Narrative Reconstruction
Did Maria Goretti forgive her attacker, Alessandro Serenelli, on her deathbed?
None of the sources immediately following her death mention forgiveness. Not the locally published newspapers or the hospital or murder trial records. Specifically, it is not mentioned by Nurse Regina Medei who cared for Maria at the hospital and provided detailed description of events while under oath at the trail in October 1902.
Forgiveness is also not mentioned in the first religious document written about Maria. This book, called To the Lily of Chastity was published in 1904 with the help of Archpriest Temistocle who presided over her funeral and very likely administered Maria’s Last Rites in the hospital.
(Fun note: my novel is told form the perspective of Nurse Regina Medei and follows the conception and publication of To the Lily of Chastity).
So when did forgiveness come into the story?
The earliest forgiveness claim is a secondhand reprinting of a prayer left by a man who donated to a cause to build a monument for Maria. Donations for this monument likely occurred in 1903 and 1904 and also funded the publication of To the Lily of Chastity. This claim is documented in the 1947 hagiography written by Father Aurelio. Aurelio writes, “Donor Monsignor Antonio Marini…concluded with a prayer: O dear little virgin, you who showed such generous forgiveness to your killer, calling him sweetly by name and correcting him with such charity, warning him of hell.”
The next earliest forgiveness claim arises from a 1962 religious book called I Killed Maria Goretti, where the author interviews Alessandro. In the interview, Alessandro remembers, “around 1909 I read that she had forgiven me before dying.”
The next account, and the first one that mentioned “Paradise,” surfaces in a 1930 article written by Armida Barelli and was published in a magazine founded and run by Barelli herself. Barelli was head of the Girls’ Youth of Catholic Italy and ultimately lobbied for opening the cause for Maria’s sainthood. In her 1930 the article, she wrote about visiting Alessandro following his release from prison. Barelli writes, “To comfort him, we reminded him that Maria Goretti, on her deathbed, when the Priest, before administering the last Sacraments, had asked her whether she had truly forgiven her killer, had replied: ‘But of course I have forgiven him! And I will pray for him. Alessandro will come with me to Paradise.’”

The next and most complete claim comes from Father Aurelio’s 1947 hagiography titled St. Agnes of the Twentieth Century: Blessed Maria Goretti, Martyr of Purity. Aurelio uses Barelli’s article to cite his description of the deathbed scene where Archpriest Temistocle tells Maria the story of the Good Thief and then says, “…do you forgive your attacker from the heart?” And Maria responds, “Yes…and I want him to come with me to Paradise!” Aurelio’s book is cited in most modern accounts when referencing the forgiveness scene.

So, according to and written by Boss Agent, here’s the most probable reconstruction of what happened:
Fatally stabbed defending herself on 5 July 1902, Maria was carried to the Nettuno hospital and operated on without anesthesia. Through roughly twenty conscious hours she accused Alessandro by name, feared he would come back (“Don’t let Serenelli in”), and repeated the warning she had cried during the attack (“God doesn’t want this; you’ll go to hell”) — the words even her killer confirmed at trial. On the morning of 6 July, clergy and pious attendants — the Archpriest Temistocle and her mother — asked her to forgive Alessandro. After prolonged urging and hesitation, Maria assented in words later remembered and rendered many different ways: possibly “I forgive everyone” or a mere “yes.” She died at 3:45 p.m. Over the following decades — as her killer’s conversion was cultivated and her cause for sainthood advanced — that solicited “Yes, I forgive him and want him with me in Paradise” was selected, scripted into direct speech, fitted with the Gospel’s “with me in Paradise,” and made the emotional engine of both her canonization and his redemption.
Read the full forgiveness narrative reconstruction here.
Writing in the open
Thank you! This article is part of my experiments with AI in creative writing: to be curious, transparent, and thoughtful with this new technology.
