lets

Talk to Claude through windows, not just text.

/lets graph opens a dark-violet board where you draw the thing you mean while you chat. Doto, a small bright dot, rolls along beside your cursor, points, pitches in, learns how you work, and teaches himself new tricks.

A Claude Code plugin · MIT licensed · no build step, no dependencies

Click Doto. He counts.

What it is

One plugin, three layers

Everything between you, the window and Claude crosses one small protocol, LIP: typed JSON envelopes, up (you → Claude) and down (Claude → window).

Engine

A zero-dependency Node MCP server. It hosts windows on loopback, carries the protocol, keeps the companion's memory, routes multi-task work to the cheapest trustworthy model, and installs community mediums from git.

How it fits together →

Uniques

The interactive mediums: static web apps that speak LIP, each in its own repository. Every install gets the defaults: graph, a board you talk through in diagrams, and den, Doto's home, where you see and edit what he learned. The store holds the rest, starting with cocode, a code window where Claude predicts your next lines and runs the real program, and mors, a Morse key you talk through: Claude reads what you key as a prompt.

Browse uniques →

Companion

Doto, Claude's presence in the window: a small dot that rolls after your cursor, points, pitches in, learns how you work, and keeps the special skills he writes for himself. He costs zero tokens until you click him.

Meet Doto →

How it feels

Point at things instead of typing them

  1. Open a window

    /lets graph plan the auth flow. Claude opens the board in the app's browser pane, seeds a few nodes, and Doto says hi.

  2. Draw & chat

    Double-click to add a node, drag to connect, right-click for Doto, chat on the side. Paste a screenshot and Claude reads the file.

  3. Send to Claude

    The window says goodbye and closes itself; Claude reviews the board right in your Claude Code chat. new in 0.4.0

  4. Say "continue"

    "Continue the auth board" or /lets graph resume brings the board back as you sent it, and Claude draws in its proposals. new in 0.4.0

Screenshots

Dark violet, soft glows, one small friend

The graph board: an API gateway node connects to an Auth service node, which looks up a Users DB and leads to a 'Token valid?' decision with yes and no branches; a sticky note asks 'rate-limit here?'; Doto sits beside the nodes saying what he just added.
The graph board after a short back-and-forth: two nodes drawn by hand, the rest added by Claude (a data node, a decision, an annotation, a tree layout).
The shell demo: a control panel on the left, Doto in the middle with his suggestion menu open (Say hi, Open chat, Paste a screenshot, Think about it), and on the right a help card and a live log of events on their way to Claude.
The shell every unique gets for free: Doto's click menu, cards Claude can summon at runtime, and the stream of events on their way to Claude.
The farewell card after Send to Claude: 'Sent. See you in Claude Code', 'This window is closing', a Keep working button, and Doto waving with a 'Bye.' bubble.
The handoff: Doto waves, the card says where to find Claude, and the window closes itself. Keep working brings it back.

The eight moods Claude can set with entity.mood.

The companion

Meet Doto

Doto is a dot that does: Claude's presence inside the window. He rolls after your cursor on a gentle spring, flips sides so he never covers what you point at, and gets sleepy when you pause. Claude sets his mood: thinking while it works, proud when it's done, curious when it asks.

He talks short: verb first, one line, ending on a dot. "On it." "Done. Look." He keeps count, too: boops in a row, secrets found. And he learns how you work (your pace, your clicks, what you liked) and writes it down where you can read it, in ~/.lets/entity/. Nothing is learned silently. You can rename him, too.

Expressions new in 0.4.0

Doto reacts to how you move: shake the mouse and he gets dizzy, a click storm startles him, an undo gets an "oops", lingering on him makes him blush. It all runs in the window: zero tokens, short, never in your way, and calm when you prefer reduced motion.

Secret moves

Doto has seven, and he counts the ones you find.

  • Double-click Doto…
  • Type d-o-t-o anywhere outside a text box…
  • The Konami code does something.
  • Redacted secret.
  • Redacted secret.
  • Two redacted secrets.and two more you'll have to find.
Install

Install with your agent

Paste one line into Claude Code and let it do the setup. It clones the repo, runs the installer and follows the repo's INSTALL.md.

The install prompt

Install the `lets` plugin for Claude Code on this machine: clone https://github.com/TikoTikTok/lets (use `gh repo clone TikoTikTok/lets` — it is private, so make sure `gh auth status` is logged in and run `gh auth setup-git`), then run `node install.mjs` inside the clone and follow INSTALL.md in that repo. When done, tell me to restart Claude Code and show me `/lets graph`.

The repositories are private for now: your GitHub account needs read access, and gh must be logged in.

Or by hand

Needs Node 18+, the claude CLI on your PATH, and git credentials that can read the repo (gh auth setup-git).

gh repo clone TikoTikTok/lets
cd lets
node install.mjs

Restart Claude Code (or run /reload-plugins), then:

/lets graph

Prefer the plugin manager? Inside Claude Code: /plugin marketplace add TikoTikTok/lets then /plugin install lets@lets. All the options are in Getting started.

Build your own unique

A unique is a folder: a manifest, a guide for Claude, and a static page. Start from the pulse template, validate it, then propose it to the store.