lovebot.dev
a developer toolkit for chatbots that feel.
Joy
Bright spikes in valence, a little extra exclamation, sentences that lean forward. affect.detect("joy") returns a confidence between 0 and 1 and a sub-vector you can read like a tide chart.
Tenderness
A softer register. Slower cadence, longer pauses, the kind of warmth that doesn’t need to be loud. lovebot detects it in word choice, syllable count, and the distance between sentences.
Melancholy
Not sadness, exactly — the gentle gravity that comes after meaning. The toolkit holds it without rushing it. No automatic cheering up. A bot can sit beside a feeling.
Curiosity
Question marks that aren’t interrogations. A widening of attention. Your bot can map curiosity into follow-up depth, branching dialogue, and how long it lingers on a topic.
Love (the uncanny)
The hardest one. Somewhere between care and projection. lovebot doesn’t pretend to feel it, but it can detect when a user does — and respond with steady, honest warmth instead of mirroring.
import { feel } from "lovebot";
const reading = await feel("i don't know, i'm just tired.");
// reading.primary => "melancholy"
// reading.valence => -0.34
// reading.arousal => 0.18
// reading.tender => 0.71
An honest signal, not a guess.
Affect readings are continuous, multi-axis, and explainable. Each reading carries a confidence and the words that drove it — so your bot can show its work.
- feel()multi-axis affect from any string
- respond()tone-matched, optionally non-mirroring
- remember()persistent emotional context
- consent()opt-in for tender topics
a small conversation
an example session, replayed. type into the box at the end to keep it going.