Inspiration

Stephen: sgsgsg, yeye fsss, nahhh
Jyoti: .-. | .__. | :)
Krish: say less, i’m blessed

AI auto-generates, but doesn’t sound like you.
Do you use ‘:)’ a lot when you text?
What about your signature emoji ( ◡̈ ) that makes your digital you, you?

Double is an attempt to cross the uncanny valley for your most personal conversational contexts: friends, colleagues, or other people you never want to fall out of the loop with.

It's a thought experiment to see how far we can get towards hyper-personalized AI experiences. We built your very own digital stunt double that channels your voice, perfectly informed by your memories and texting style.

With Double by your side, you'll never ghost anyone's texts ever again.

What it does

Double analyzes tens of thousands of your real messages to learn your unique texting style, then automatically responds to incoming texts in your voice.

How we built it

We built a data pipeline (Bash scripting + Python) that extracts your entire message history from iMessage, Instagram DMs, and Discord. The pipeline downloads the raw data, then parses, merges, filters, partitions, encrypts it, and securely uploads it to Hugging Face.

Our training pipeline then performs supervised fine-tuning with LoRA and pairs it with prompt optimization using GEPA, tightening the fit to your voice and texting style.

For retrieval, we use a GraphRAG/vector search approach powered by Neo4j to find examples of how you’ve responded in similar situations, so the system can fetch relevant memories and mirror your natural tone in the current context. Double also keeps track of your recent conversation history with someone, so it can respond more coherently.

Finally, Double auto-responds in real time through the Beeper API, so your relationships stay warm even when you’re busy.

Side note: we also created a semantic text-embedding space that highlights the quirks that make your style distinctive. Using this, you can visualize how your tone, style, and language shift depending on who you’re talking to, what you’re talking about, and even the time of day.

Challenges we ran into

  • We ran into out-of-memory errors during fine-tuning, and at times the model loss refused to go down.
  • We had little time for hyperparameter tuning, and some outputs drifted into gibberish.
  • Our memory retrieval occasionally pulled the wrong references.
  • We also had to consolidate multiple data formats across the repository.

Accomplishments we’re proud of

We built something we can trust (for the most part) to text our contacts. Now we can finally get some sleep knowing Double can handle replying to anyone!

What we learned

How to design a automated texting agent that sounds just like you and passes the Turing test on some of your friends :)

What’s next for Double

It would be awesome to design mobile controls so you can toggle auto-reply just like read receipts, and choose exactly which contacts it applies to. We also plan to fine-tune larger models on a more carefully aligned dataset, and deepen persona characterization - so tone and mood stay true to you across different contexts (texting your friend vs. a professional colleague).

For conversations where you’d rather stay in the loop than on full autopilot, we plan to add a drafts mode, so you can approve replies before they send. Contact controls such as whitelists, blacklists, and sensitive-message approval will make that even more flexible. We'd want to expand platform support to WhatsApp, Telegram, and Slack.

We’re also exploring local, on-device fine-tuning with Llama 3.2 for full privacy, and smart service integration so Double can schedule check-ins, sync with external tools, and act as a lightweight digital concierge.

Given more time, we would also love to build an interactive iMessage Wrapped that would let you explore your digital double, visualizing how your language shifts by time, topic, and friend!

Built With

Share this project:

Updates