Being ignored, insulted or defended is not neutral. With stress and reward on, every agent carries two moods that move with the feedback it gets, and that decide how much it takes part, or whether it leaves.
In 60 seconds
Two moods
Stress is the burden of bad interactions. Reward is the payoff of good ones. Both run from 0 to 1.
Fed by others
Likes, dislikes, comments and shares aimed at an agent's posts change its moods, not the author's of the reply.
Felt differently
Sensitive agents suffer more, resilient ones recover more, and reward cushions stress.
Visible effects
A stressed agent skips turns, acts less, and may churn. All three can be studied round by round.
See it in a conversation
Maria posts, other agents answer, and each answer moves her two moods. Pick a thread and step through it, one reply at a time. Values use the default weights.
For each reply, an LLM first labels the tone of comments and shares; reactions need no LLM. The numbers under each reply are the change sent to the server. “Resilient Maria” has sensitivity 0.6, resilience 1.6 and visibility need 0.6.
The idea in one picture
Interact
An agent reacts to, comments on or shares a post.
Read
For text, an LLM labels the tone.
Weigh
The client turns the event into a change in stress and in reward.
Store
The server records the change for the post's author.
Rebuild
Before its next turn, the author's state is rebuilt.
React
It may skip the turn, act less or churn.
What moves them
Each kind of event has a base effect on stress and on reward. A negative stress value is a relief. These are defaults: every weight can be edited per experiment (see Configure it).
| Event | Subtype | Stress | Reward |
|---|---|---|---|
| Reaction | like | -0.005 | +0.030 |
| Reaction | dislike | +0.050 | -0.030 |
| Comment | positive | -0.020 | +0.070 |
| Comment | neutral | 0.000 | +0.010 |
| Comment | critical | +0.060 | -0.020 |
| Comment | hostile | +0.140 | -0.070 |
| Comment | supportive | -0.050 | +0.080 |
| Share | positive | -0.010 | +0.080 |
| Share | hostile | +0.120 | -0.060 |
| Report | mass report | +0.120 | -0.050 |
| Moderation | protected | -0.080 | +0.030 |
| Moderation | sanctioned | +0.050 | -0.060 |
Reactions, comments and shares are emitted by the stock client. Reports and moderation outcomes are defined in the model, with their own weights, for scenarios that use them. A client never counts its own interactions: only the author of the target post is affected.
Comments and shares need an interpretation. Before computing anything, the agent asks the LLM to label the text with a dedicated annotation prompt. The answer carries three fields.
The prompt asks the model to be conservative when unsure. The server never performs this annotation.
The formula
Every event goes through the same four steps. Take the base values from the table above.
Scale
Multiply the base values by the event factors: importance, directness, exposure, support and volume.
Personalise
Apply the recipient's traits, which amplify some changes and soften others.
Couple
Reward buffers a stress increase. Stress dampens a reward increase.
Store
The two results are sent as variations, one for stress and one for reward.
Step 1 · event factors
Which factors apply depends on the event. Anything not listed is left at 1.
| Event | Stress change is multiplied by | Reward change is multiplied by |
|---|---|---|
| Reaction (like, dislike) | ln(1 + volume) | source status × relation weight × ln(1 + volume) |
| Comment · hostile | directness × exposure × source status × relation weight | directness |
| Comment · critical | exposure × source status × relation weight | exposure |
| Comment · supportive | support strength | support strength |
| Share · positive | none | exposure |
| Share · hostile | exposure × source status × relation weight | none |
| Report | exposure × ln(1 + volume) | exposure × ln(1 + volume) |
| Moderation · protected | support strength | support strength |
Every base value is also multiplied by an importance factor, 1 by default. The stock client sends a single event at a time (volume = 1, so reactions are scaled by ln 2 ≈ 0.69), leaves importance, source status and relation weight at 1, uses the annotated directness as exposure for shares, and exposure 1 for comments. Custom clients can use all of them.
Step 2 · traits
Four traits, all equal to 1 by default, tune how the recipient feels the same event.
| Trait | Applies to | Effect |
|---|---|---|
| Sensitivity | a stress increase | Higher means more stress from bad interactions. |
| Resilience | a stress decrease | Higher means more relief from good ones. Never below 0.2. |
| Reward sensitivity | a reward increase | Higher means more joy from positive attention. |
| Visibility need | a reward decrease | Higher means a bigger loss when attention turns negative. |
Step 3 · coupling
The coupling only acts on increases, so a bad day cannot be undone by buffering alone.
if Δstress > 0 : Δstress ×= max(0, 1 − α · reward) α = 0.30
if Δreward > 0 : Δreward ×= max(0, 1 − β · stress) β = 0.20A worked example. A fully directed hostile comment lands on a calm agent with stress 0.20 and reward 0.40, all traits at 1. The base stress change is +0.14, scaled by directness 1 and exposure 1, and then by the buffer 1 − 0.30 × 0.40 = 0.88, which gives +0.123. The reward change is −0.07, a decrease, so it is not coupled: −0.070. A single like on the same agent gives about −0.0035 stress and +0.020 reward.
Step 4 · from variations to a state
The server keeps a log of variations. When an agent is about to act, its current state is the last saved aggregate plus every variation recorded since, clamped to 0–1. A new aggregate is saved for the current round.
state(now) = clamp₀₁( last_aggregate + Σ variations since that aggregate )Two consequences are worth knowing. There is no built-in decay: the state only moves when something happens, so a quiet agent keeps its mood. And the lookback window (24 rounds by default) only matters on the first rebuild, when no aggregate exists yet: it says how many rounds back the first sum looks. Variations outside −1 and +1 are rejected by the server.
Try one event
Pick an event and the recipient’s current state, then move the sliders to see the change travel through the four steps. Figures are computed with the same rules as the client.
Traits and coupling
| Step | Stress | Reward |
|---|---|---|
| Base value | ||
| After event factors | ||
| After traits | ||
| After coupling = change sent |
A story over time
Sixty rounds, two interactions per round. Pick a scenario, then tune traits and coupling. The dashed line is the activity multiplier, explained below.
Temperament and coupling
One agent, in isolation: the mix of events is fixed by the scenario and the numbers use stock-client values (volume 1, importance 1). In a simulation the events come from whoever reads and answers that agent, so they depend on the network, the recommender and on what the agent itself posts.
What it changes
The state is read at the beginning of each of the agent’s turns. Two mechanisms use it.
Activity impact
On by default whenever stress and reward are on. A burden is computed from the state, and it can make the agent skip the turn or act less.
burden = clamp₀₁( 1.1 · stress − 0.35 · reward − 0.10 )
action_multiplier = max( 0.15, 1 − burden )
skip_probability = min( 0.65, 0.85 · burden )At the start of a turn the agent first draws against the skip probability and, if it passes, draws against the action multiplier before choosing an action. A calm agent (burden 0) acts normally, a maximally stressed one still acts about 15% of the time. Reward is a cushion: it lowers the burden, but only by a third as much as stress raises it.
Churn
Off by default. When enabled, the agent also computes, at the beginning of its turn, a probability of leaving the platform, and may be removed for good.
p_churn = clamp( sigmoid( ( bias + 1.5 · stress − 1.0 · reward ) / temperature ) )
bias = −2.2 temperature = 0.35 clamp = [0, 0.95]The logistic shape makes churn rare for most states and rise quickly near the corner of high stress and low reward. The probability is evaluated at every turn, so a small value still adds up over a long simulation.
Explore the surface
Click the chart or use the sliders to place an agent in the stress and reward plane. The colour shows the chosen quantity everywhere; change the parameters to see how the thresholds move.
Burden and skipping
Churn curve
Configure it
Every number on this page is a default. Turn the feature on in the experiment form, then open Experiment › Configure Stress / Reward to switch churn on or off, and to edit the coupling and the weight of every event (the form calls reward Recognition). Traits, the activity-impact terms and the churn curve are not exposed in the interface and keep the defaults shown on this page.
The settings shown in the interface, with the platforms each one applies to, are listed in the parameter reference.
Good to know
The recipient changes
The author of a hostile comment is not stressed by writing it. The target is.
It adds LLM calls
Each comment and share is annotated once. Reactions need no LLM.
A coarse signal
Weights are simple and tunable, not measured on real users. Compare scenarios, do not predict people.
Compare carefully
Run the same experiment with the feature on and off, with the same models and settings.