A local-first CLI and Agent Skill

Message Like Me

Draft messages that sound like you

You text different people differently. Message Like Me studies your past conversations with one person, then gives your agent examples and patterns to work from. You get a draft to review, never an automatically sent message.

Local-first, drafts only, and free under the MIT license. macOS with Bun 1.3.14 or newer.

Incoming message

yes to friday. also can you send me that link?

Unsent draft

perfect, friday it is
yep one sec

More than word choice

Tone
Lowercase, casual, and direct.
Rhythm
Two short messages instead of one paragraph.
Attention
Acknowledge the plans and the link request.

You review the draft. Nothing is sent.

An illustrative, unsent draft—not a measured result. Every message and pattern shown here is synthetic.Synthetic example · no real message history
Read your history
Read Apple Messages, an X archive, or a Beeper or WhatsApp bundle from Ghostget without changing any of them.
Understand
Measure how you write to one person: word choice, timing, bubble shape, and how you answer several things at once.
Draft
Hand your agent the evidence and get an unsent draft back. You decide what, if anything, gets sent.

Your history comes in from the apps you already use.

Read Apple Messages or an X archive directly. For Beeper and WhatsApp, import a finished local export from Ghostget. Contacts can add familiar names. Expand a source for its import command and limits.

Messaging history

Apple Messages

SupportedNative · read-only

Reads a stable private copy of the current macOS user’s iMessage database.

Import command and limits for Apple Messages

Message Like Me never modifies Messages, chat.db, or its transactional sidecars.

messagelikeme ingest imessage

Messaging history

Beeper via Ghostget

SupportedBounded local bundle

Adds a finished Beeper bundle from Ghostget v0.17.1 and adapter 2.4.0 to the private local evidence corpus.

Import command and limits for Beeper via Ghostget

All 32 reviewed operations stay in Ghostget: 26 through one pinned Beeper CLI 0.6.2 executable, including supported actions and writes, plus six fixed Desktop loopback reads. Message Like Me receives no provider credentials, calls no Ghostget or Beeper operation, never sends, and does not claim complete history.

messagelikeme ingest bundle --input /absolute/private/bundle

Messaging history

WhatsApp via Ghostget

SupportedNative · bounded local bundle

Ingests one native WhatsApp linked-device observation exported by Ghostget through official Wacli.

Import command and limits for WhatsApp via Ghostget

Ghostget omits reaction-shaped rows when Wacli cannot prove current state; Message Like Me verifies the finished bundle and never operates WhatsApp.

messagelikeme ingest bundle --input /absolute/private/whatsapp-bundle

Messaging history

X data archive

SupportedCaller-owned archive

Reads supported direct-message entries from a private X archive ZIP without extracting it.

Import command and limits for X data archive

This path covers archive DMs, not X Chat, and never accesses X or downloads media.

messagelikeme ingest x-archive --input /absolute/private/archive.zip

Label enrichment

macOS Contacts

SupportedOptional · read-only

Adds private local names to exact email and phone matches across direct conversations.

Import command and limits for macOS Contacts

Contacts supplies labels only; it is not messaging history and ambiguous matches stay separate.

messagelikeme ingest contacts

The CLI measures. Your agent writes.

The command-line tool reads and measures your history on your Mac. The installed Agent Skill teaches your existing agent how to use those examples and patterns. You choose what it can read, then review its draft.

  1. Read historymessagelikeme ingest imessage --json

    Read a stable copy of Apple Messages, or bring an X archive or a Ghostget bundle. Nothing in the source changes.

  2. Find patternsmessagelikeme inspect tempo <contact-id> --json

    See counts, timing, and reply habits for one person. This view uses contact IDs instead of names and leaves out message text.

  3. Preparemessagelikeme study prepare <contact-id> --output /absolute/private/study.json --json

    Write one evidence packet with real excerpts to a path you name, with owner-only filesystem permissions.

  4. DraftUse $message-like-me in your agent

    Your agent reads the packet, keeps what is uncertain uncertain, and stops at a draft you can edit or discard.

The evidence profile

Voice has a rhythm.

Word choice matters. So do the pauses, the bursts, the afterthought, and the decision to answer three things in one message or three.

  1. Prose

    Case, punctuation, vocabulary, warmth, humor, and uncertainty.

  2. Tempo

    Response latency, turns, bursts, and where a conversation pauses.

  3. Shape

    One long message versus several deliberate bubbles.

  4. Context

    What changes across play, planning, support, conflict, and reflection.

  5. Coverage

    How several incoming questions or emotional beats get resolved.

  6. Replies

    When explicit reply links clarify a dense or delayed thread.

Evidence for a draft.

Message Like Me measures your outgoing prose and reply shape for one person across the sources you import, then gives your agent a profile it can cite line by line.

What it is not

Not a model of you.

It does not train a model, represent your identity, predict your beliefs, or send a message. What you mean now always outranks how you wrote before.

Your data

Choose what your agent can read.

The CLI keeps your history local. If you open a study packet in a hosted agent, that agent handles its excerpts under its own privacy terms. Share only what you are comfortable giving it.

It stays on your machine
Imported history, measurements, and profiles live in a private local data root with owner-only permissions.
Everyday output has no prose
Ordinary commands report counts and timing under pseudonymous IDs. They omit message bodies, handles, and contact names.
You choose what an agent sees
A study packet holds real excerpts. It reaches an agent only when you write it to a path you name and open it in an environment you trust.
No account, server, or model
There is no Message Like Me account, server, AI-provider call, telemetry, or sync. This website is an informational page.
Nothing sends
Drafting ends as text on your screen. There is no command that sends, reacts, schedules, or operates a messaging app.

Install v0.8.9

Start with an empty store.

  1. bun add --global @hraness/message-like-me@0.8.9
  2. messagelikeme skill install
  3. messagelikeme init
  4. messagelikeme doctor --json

The first check imports no history. It reports where Message Like Me will work and whether its private store is healthy, before you choose a source. Requires Bun 1.3.14 or newer. Inspect the release on GitHub

Questions

Before you install.

Does the website receive my messages?

No. messagelikeme.com is an informational project page. It has no upload, account, message-history, profile, or drafting surface. Everything the CLI reads and writes stays on your machine in private local paths you choose.

Do I need an account or an API key?

No. There is no Message Like Me account, sign-in, server, telemetry, or sync. The CLI never calls a model or an AI provider. Drafting happens in the agent you already use, under that agent’s own account and terms.

Can it send or schedule a message?

No. Message Like Me has no send, react, schedule, provider-authentication, or messaging-application command. Drafting ends as text on your screen, and you decide what to do with it.

Which sources are supported?

Apple Messages, caller-owned X data archives, bounded Beeper and native WhatsApp bundles exported through compatible Ghostget releases, and optional macOS Contacts labels. Every path is read-only; Messages, Contacts, archives, and bundles are never changed.

What does it cost?

Nothing. Message Like Me is open source under the MIT license. Install the exact public npm package; the same reviewed bytes are mirrored by an immutable GitHub release. The only cost is whatever the agent you draft with already charges you.

Which platforms does it run on?

macOS with Bun 1.3.14 or newer. Apple Messages and Contacts are read from the current macOS user’s local databases. Version 0.8.9 is the current release.

Does Message Like Me include an AI model?

No. The CLI performs deterministic local ingestion and measurement. Semantic analysis and unsent drafting happen through the agent environment you already chose, using the installed Agent Skill.

Is the result a digital clone?

No. The result is revisable evidence for a draft. It does not establish identity, beliefs, intent, consent, or what you would write now. What you mean today always outranks how you wrote before.

Can I use it from TypeScript?

Yes. The @hraness/message-like-me package exports the versioned corpus, metrics, study-packet, and profile types plus canonical JSON and SHA-256 helpers, with no filesystem or network work on import.

Who made it?

Ben Guo, a musician and builder, formerly a founder and engineering leader at companies including Venmo and Stripe, now building from Puerto Rico. The source is public on GitHub under the MIT license.

Built by

Built by Ben Guo

Message Like Me is built by Ben Guo, a musician and builder, formerly a founder and engineering leader at companies including Venmo and Stripe, now building from Puerto Rico. The source, the method, and the research review are public.

Draft with an agent. Sound like you.

Install the CLI, import one source, and hand your agent the evidence. Every draft stays on your screen until you decide.

Local-first, drafts only, and free under the MIT license. macOS with Bun 1.3.14 or newer.