The companion (Doto)

Doto is Claude's presence inside a window: a dot that does. He rolls along beside your cursor, points, pitches in, listens and remembers. In the window he speaks as himself, in short lines; in the transcript Claude keeps its normal voice.

How Doto moves

All of this runs in the window. Doto costs zero tokens until you click him.

Talking to Doto

Try all of it on the playground.

Moods

Claude sets a lasting mood with entity.mood; a mood passed with entity.say lasts only while the bubble shows.

MoodLooks likeUsed when
idleSoft smile, violet glowNothing is happening
happySmiling eyes, rosy cheeks, magenta glow, a quicker bobAn edit landed, a greeting
curiousOne eye bigger, a little "o" mouth, cyan glowClaude is asking you something
thinkingEyes up and to the side, an orbiting dotClaude is working
busyNarrowed eyes, a fast orbitSomething long is running
proudSmiling eyes, golden glowDone, and pleased about it
sleepyHalf-closed eyes, a floating "z", slow bobYou paused for a long while
alertWide eyes, a red pulsing auraSomething needs your attention

Persona

Doto's persona lives in ~/.lets/entity/persona.json. The shell receives it as entity.persona when a window connects and tunes his spring, bubble frequency and animations from it. Out of the box he is a dot that does: a touch quick, close by, playful, and light on words.

FieldDefaultMeaning
nameDotoRename him with /lets entity rename …
taglinea dot that doesShown next to his name when you hover him
traits.speed0.6How quickly he follows (0 calm … 1 snappy)
traits.distance0.45Preferred offset from the cursor
traits.chatty0.4How much he says unprompted
traits.playful0.7Squash, bob and blink intensity
traits.formality0.15Tone of his lines
traits.curiosity0.6How often he asks instead of assumes
likes / dislikesnone yetLearned preferences ("short labels", "being interrupted")
nicknamesnone yetWhat you call things
moodidleLast mood

How Doto learns

Three honest channels, all on disk:

  1. Profile. The shell measures aggregates (pace, click rate, dwell, favourite screen regions, idle time, summons, picks, dismisses) and sends entity.profile at most once a minute. The engine folds it in with an exponential moving average and nudges speed and chatty: fast movers get a quicker, quieter companion; people who dismiss more than they pick get a less chatty one.
  2. Memory. entity learn {text, likes, dislikes, traits, nicknames}: Claude writes down what it noticed. The last few lines are in every brief Claude gets when a window opens.
  3. Special skills. Playbooks Claude writes for itself (below).

Nothing is inferred silently. If Doto "knows" something, there is a line in memory.jsonl, a field in profile.json or a skill file that says so. Raw mouse moves never leave the window; only the aggregates do.

To see all of it in one place, open den, Doto's home with /lets den new in 0.6.0. It shows his persona and traits, the likes, dislikes and nicknames he learned, his memory lines and special skills, the secret moves you found and your interaction profile, and you can edit or forget any of it by pointing.

Special skills

When Claude discovers a reusable way to help ("screenshot → nodes → questions"), it can teach Doto a special skill: entity teach {name, triggers, body} writes a markdown playbook to ~/.lets/entity/skills/<slug>.md with frontmatter (triggers, confidence, uses, unique).

So Doto really does get better at you. Dot by dot.

Voice

Doto talks the way he moves: small and to the point. When Claude speaks as him in the window, it keeps to these rules.

MomentDoto says
GreetingHi, I'm Doto. Point at something and let's do it.
WorkingOn it.
After adding nodesAdded Retry and Backoff. Next?
AskingWhich branch is the happy path?
DoneDone. Look.
You come backOh. You're back.

Now and then (once a session at most) he uses a catchphrase: Dot it., Done-done. or Dot by dot.

Expressions new in 0.4.0

Besides moods, Doto has short reactions (0.4 to 2.5 seconds). Most of them he plays by himself from how you move; Claude and uniques can trigger them too. They never block input, each has a cooldown so Doto never nags, and with reduced motion they skip spins and keep only a subtle eye change.

ReactionLooks likeComes from
dizzySpinning head, spiral pupils, a wobbleVery fast pointer movement, or a mouse shake (and one secret way)
whoaBig eyes, leans back, aura pulseA fast burst of wheel zoom
startledWide eyes, a little jump, a sweat dropA click storm (6+ clicks in 1.5 s)
gasp"o" mouth, a squishDelete / Backspace outside a text field
oopsSquinting eyes, a head tiltCtrl+Z
winkOne eye closes, a sparkleThe unique (graph: an edge connected)
cheerTwo hops, confetti dotsThe unique (graph: Send pressed, many nodes added quickly)
blushGlowing cheeks, looks away, a tiny wiggleHovering on Doto for more than 1.5 s
boopA squish and a floating heartA quick click or tap on Doto
yawnWide mouth, closed eyes, a stretch25 to 45 s idle, before sleepy
peekEyes dart over, leans toward the pointerComing back to the window after a while away
nod / shake-noUp-down / left-rightClaude or the unique only
waveLifts and waves, with a bubbleThe Send to Claude farewell; the pointer leaving the window
sparkleA star burstThe unique (graph: 5+ nodes connected in 20 s), or Claude being proud

For unique authors and Claude:

Secret moves new in 0.4.0

Doto has seven secret moves, and he keeps score as you find them (1/7, 2/7, …). Half the fun is finding them yourself, so the list is folded away.

Spoilers: show the secret moves
SecretHow
spinDouble-click Doto: a full 360° roll.
danceType d o t o (or his current name) anywhere outside a text field: the dot bounce, a side-to-side groove with music notes.
discoThe Konami code, ↑ ↑ ↓ ↓ ← → ← → B A: a hue-rotating aura and a dance.
dizzyCircle the pointer around Doto two or more times within 3 s.
nightcapBetween midnight and 5 am, sleepy Doto wears a night cap.
boop streakBoop Doto five times in a row.
wheeeDrag Doto across the screen while you've caught him: squinty eyes, brighter trail.