Skip to content

Behaviour settings

These settings shape how a universe behaves. In the dashboard they are under Settings: AI writing, pace, who exists, Spam & Junk and links on Realism, faults on Chaos, retention on Data.

With AI writing on, people write their own replies in their own voice, and the AI settles close calls, such as whether someone clicks a link. Each AI call uses one of your plan’s AI credits.

With it off, people reply from templates and the rules decide everything. Replies still arrive on schedule, threaded and in each person’s temperament, so most tests behave the same, but they are instant, repeatable and use no credits. It suits CI and trying out the API. The World’s new senders and their emails come from templates too, and attachments are not read.

{ "mode": "on" }

Body: {"mode": "off"}. mode is on or off. Changing it needs the member role.

Pace scales how long every person takes to reply. It is separate from the clock.

CallBody
GET /api/pace
PUT /api/pace{"factor": 0.1, "ignore_hours": true}
FieldMeaning
factor1 is as configured, 0.1 ten times faster, 2 twice as slow. 0 means 1.
ignore_hourstrue: people reply at any hour, any day.

Changing pace needs the member role.

Recipient rules decide what is on the other side of addresses: which exist, which are dead, full or blocking, and who (if anyone) is behind a never-seen address. Changing them needs the admin role.

Call
GET /api/recipientsThe rules.
PUT /api/recipientsReplaces them.
PUT /api/mailboxes/{address}/statusSets one address’s status (member role).
{
"default": { "create": true, "bad_rate": 0.05, "stranger": "ai" },
"domains": {
"yourcompany.test": { "create": true, "stranger": "off" },
"closed.test": { "create": false }
},
"status": { "[email protected]": "disabled" },
"seed": ""
}
FieldMeaning
defaultThe rule for addresses simmail has not seen.
domainsRules for particular domains, which win over default.
statusFixed outcomes for single addresses: unknown, domain, full, disabled or blocked.
seedChange it to pick a different set of “bad” addresses.

A rule:

FieldMeaning
createtrue: make a mailbox and deliver. false: refuse never-seen addresses at RCPT with 550 5.1.1.
bad_rateShare (0 to 1) of never-seen addresses that are bad. The same address is always the same.
bad_kindsWhich kinds bad addresses are. Default: mostly unknown, some domain, full and blocked.
fail_atdsn (default): accept, then send a bounce notice a little later, as many providers do. rcpt: refuse in the SMTP conversation.
strangerWho is behind a never-seen address: off, basic or ai. See strangers.
silenttrue: accept and discard.

An address with a fixed status is bad even if its mailbox already exists. Otherwise, mailboxes that already exist always receive.

What each bad kind sends back:

KindReply
unknown550 5.1.1 User unknown
domain550 5.1.2 Domain not found
full552 5.2.2 Mailbox full
disabled550 5.2.1 Mailbox disabled
blocked554 5.7.1 Rejected under policy

The rules for people opening links. See Links and sender look-up. Changing them needs the admin role and the lifelike behaviour feature of your plan.

Call
GET /api/links{"policy": {…}, "habits": [...], "default_user_agent": "…"}
PUT /api/linksReplaces the policy. Send every field.
FieldDefaultMeaning
enabledtrueWhether people open links at all.
allow_privatefalse; can’t be switched onWhether links to localhost and private networks may be opened.
allowIf set, only these hosts (exact, or *.example.com).
denyNever these hosts.
max_links3Links opened per email.
unsubscribefalseWhether people may follow unsubscribe links.
user_agentsimmail’sWhat the requests say they are.
sender_check0.35How often (0 to 1) people look up a sender they do not know.
missing_siteimagineWhen the sender’s site does not exist: imagine or notice.
local_linksignoreLinks to the sender’s own machine: ignore them as testing links, or click and find them broken.

Only http and https links are opened, and mail ports are always refused.

How long mail and the activity log are kept, in simulated days. Changing it needs the admin role.

Call
GET /api/retention{"mail_days": 0, "event_days": 0}
PUT /api/retention{"mail_days": 30, "event_days": 90}. 0 keeps forever.
POST /api/retention/pruneApplies it now. Answers with how many messages, events and jobs were removed.

Old mail is also pruned every hour. Your plan’s retention limit caps both values. People keep their notes on each other when old mail goes.