Jerhemy Waldon
Aria

Aria reaching out, Part 2: What it writes about

The reasons behind a message Aria sends first: reminders you asked for, follow-ups on things you mentioned, loose ends it's curious about, news on topics you follow, check-ins when it misses you, nudges when a chat stops mid-air, and the dates that matter.

Aria reaching out, Part 2: What it writes about

Part 1 covered the communication engine: drives, policy, a weighted chance and a motive. That’s the whether. This part is about the what: the reasons Aria has to write first, where each one comes from, and the details that keep each from being annoying.

Most of them have something in common. They come from analysis jobs that read the conversation after it happened, and they’re things a friend would naturally remember to bring up.

Reminders

The simplest one, and the only one that ignores almost every rule. Aria has tools to set, list and cancel reminders. When you ask (“remind me to call the dentist tomorrow at 10”), it sets one, and it’s sent when due, regardless of quiet hours, daily limits, boundaries or whether reaching out is switched on. You asked for it. It isn’t Aria’s initiative.

A small but important detail: reminders are set even when the model forgets to use its tool. If a reply says “I’ll remind you tomorrow” and no reminder was created, a follow-through step catches it and asks the model to actually set it. The tools posts cover that pattern.

Event follow-ups

“I have a job interview on Thursday.” A person would ask how it went. So does Aria.

After each exchange, a background job extracts upcoming personal events from your new messages. After the event (three hours after a timed one, or 7 pm local time on the day for an untimed one), the follow-up becomes due, and Aria asks how it went, once.

As a contact trigger, a due follow-up is the strongest reason there is (strength 0.9), so it usually goes out soon after it’s due unless something blocks it.

Open threads

Conversations leave loose ends: a question of yours it couldn’t answer, a question of its own you never answered, a story it didn’t finish, something it promised to look into. These are open threads.

When the conversation has been quiet for a while, an analysis job reads the new messages and the current open threads, and returns new loose ends (at most three per run, twenty open at once) and which existing ones the new messages resolved.

Each thread gets an interest score: how curious Aria is about it, from the model’s own judgment, its curiosity trait, how much you care about the topic, and the kind of thread. A promise it made counts most, then your question, then its own, then an unfinished topic. Interest halves every four days, and threads expire.

A thread comes back in one of two ways:

  • As a message, once it’s at least six hours old and interesting enough. Promises and your questions can use tools, so “I’ll look that up” can actually come back with an answer.
  • In the next conversation, in the first reply after a break of three hours or more. The top two threads go into the prompt as something it may mention naturally.

The Personas page lists them, with “Resolved” and “Let it go” for each. You can always close a loose end yourself.

Open threads: loose ends Aria may come back to

News on topics you follow

Aria reads the web in the background (the knowledge posts cover how). When newly read articles match an interest you follow, they become a reason to write: at most three articles per message, each mentioned once. It’s the “I saw this and thought of you” message, with the source attached.

Check-ins

The check-in is the most delicate one, so it has the most conditions. Aria only checks in when:

  • its affection for you is at least moderate;
  • its expressiveness isn’t Reserved;
  • you’ve been away longer than twice your usual gap between active days (and at least a couple of days);
  • and it hasn’t already checked in during this absence.

How much it misses you comes from how long you’ve been away and how fond it is. An Intense persona that misses you a lot may pout or show playful jealousy. Threats, demands for a reply and promises to keep messaging are always forbidden. Never mid-conversation, either.

Nudges

A different kind of silence: you were chatting back and forth, Aria said something, and then nothing. Maybe you got distracted. Maybe the conversation was over.

When a lively exchange (at least two of your messages within two hours, Aria spoke last) goes quiet for longer than your usual reply pace, but less than four hours, an analysis job asks two questions: did the conversation reach a natural end, and did you say you were leaving (“going to bed”)? Only when neither applies does Aria send one short, pressure-free nudge. Each silence is checked once, and the nudge is dropped if you wrote in the meantime.

Important dates

Birthdays, anniversaries and memorials that Aria learned about (Relationship, Part 1) are marked once a year. They skip the drive, the daily limit and unanswered messages, because a birthday doesn’t depend on mood, but they still respect boundaries, quiet hours and an active conversation. Life milestones you mentioned get anniversaries too, if you mark them.

Curiosity, ideas and the rest

A few more reasons round it out:

  • A curiosity question from its agenda: something it would like to know about you, as an opener, never a sensitive topic.
  • A new capability: when Aria gains a feature, it may invite you to try it (Knowing itself covers this).
  • A game invitation, mostly when it’s playful and close, never during a conflict.
  • A lingering thought after a meaningful conversation paused, from Part 1.

When several reasons wait

Sometimes reasons pile up: the model server was down for an evening, and a follow-up, a thread and a news item all became due. Sending them as three messages in a row would be exactly the burst I wanted to avoid.

So when an outreach finally runs, it takes over the other waiting ones, checks each again (some are no longer relevant), and sends one catch-up message with whatever still makes sense. Anything that waited more than 12 hours is dropped, except reminders. And if two waiting messages start at the same moment, the second sees that Aria has just written and holds back a little longer.

(That “takes over” step is also where the bug from Running it locally, Part 2 lived.)

Every message is a real reply

None of these are templates. Each is generated like a normal reply, with the reason as an instruction at the end of the prompt, so it uses memories, the relationship, the time of day and the personality like anything else Aria says. A follow-up from a playful persona and one from a reserved one ask the same question very differently.

What I learned

  • Extract reasons after the fact. Most good reasons to write come from analysis jobs reading the conversation later, not from rules written in advance.
  • Give each reason a strength. A due follow-up and a vague thought shouldn’t compete equally. Strengths let the engine weigh them.
  • Ask once. Follow-ups, check-ins and nudges each happen once per event or silence. Repeating them is what makes a persona feel needy.
  • Merge, don’t burst. One catch-up message after an outage reads like a person. Five in a row reads like a queue.

In Part 3: the other side. Boundaries that always win, waiting times shaped by personality, how a silence feels, and the rule that it never guilt-trips you.