Dm Writer logo

Dm Writer

Community
duncan-buildroom
dm-writer

Write one short, human DM or message to a specific person for a specific goal (start a conversation, share your offer, or follow up) — in your voice, so it opens a dialogue instead of pitch-slapping them. Trigger whenever the user says "write a DM", "help me message this person", "what do I say to", "reach out to [name]", "draft a message", "follow up with", "how do I bring up my offer to", or "I don't know how to word this".

Overview

Publisherduncan-buildroom
Repositoryfreeskills
Skill namedm-writer
Stars
65
Forks
15
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by duncan-buildroom on GitHub. Read the source before you install it.

Installation

Install the Dm Writer AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/duncan-buildroom/freeskills/tree/main/dm-writer
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/duncan-buildroom/freeskills.git /tmp/freeskills
mkdir -p .claude/skills
cp -r /tmp/freeskills/dm-writer .claude/skills/dm-writer
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Dm Writer in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Dm Writer on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Dm Writer is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

DM Writer — one real message to one real person

A good DM is not a broadcast. It's a message to this person, referencing this relationship, with one clear reason for reaching out. This skill takes the context you give it and writes a short message that sounds like you texting someone you respect — not a funnel.

Use it for a single person. If you want a whole ranked list of who to contact first, run warm-outreach first, then bring individuals here.

Personalization

This skill works in your brand voice. Before running, load the brand profile at ~/.claude/brand-profile.md.

  • If it doesn't exist, run the personalize skill first (or just tell me your name, niche, offer, and audience — I'll create it).
  • If a field this skill needs is blank, I'll ask one or two quick questions and save the answers back to the profile so you only answer once.
  • Never invent facts or results about the user — use only what's in the profile, or ask.

Steps

1. Get the three things a good DM needs

Ask the user for these (accept short answers; infer the rest from the profile):

  • Who — the recipient: name, what they do, and any detail that makes them them (their work, a recent post, how you met).
  • Relationship — how well you know them and when you last spoke (close, warm-but-quiet, barely know them, cold-but-mutual-connection).
  • Goal — pick one: start a conversation (no ask yet) · share the offer (they've shown a fit) · follow up (you already messaged and want to nudge or re-open).

If the user only gives a name, ask the one or two questions that actually change the message — usually relationship and goal.

2. Match the message to the relationship

The register shifts with warmth, not with the goal:

  • Close / warm: casual, lowercase-fine, get to the point, a real question at the end.
  • Warm-but-quiet: reconnect first. Acknowledge the gap honestly ("been a minute"), lead with genuine interest in them, earn the right to mention what you're building.
  • Barely know / mutual connection: name the connection or the specific reason they came to mind up front, keep it very short, make the ask tiny.

3. Write the message — the non-pushy rules

  • Lead with them. First line is about the recipient or the shared context, never "So I have this offer."
  • One reason, one ask. No stacked links, no multi-paragraph pitch, no life story.
  • End on an easy question. The goal is a reply, not a yes. A question they can answer in one line beats a call-to-action.
  • Only name the offer if the goal is "share the offer" — and even then, frame it as "this might be relevant to you because [specific reason]," not a feature dump.
  • Honor the profile's words-to-avoid and tone. No fake urgency, no "quick question" bait, no flattery the user doesn't mean.
  • Keep it to 2–5 sentences. If it's longer than a text you'd actually send, cut it.

4. Add a one-line follow-up

Always include a single follow-up line the user can send if there's no reply after a few days. It should add value or lightness, never guilt ("just bumping this" / "did you see my message?"). Good follow-ups reference something new, or gracefully let it go ("no worries if the timing's off — door's open"). One follow-up only, then stop.

5. Save it

Append the message + follow-up to ~/dm-drafts.md under a heading with the recipient's name and date, so the user builds a personal swipe file of what they've sent. Confirm the path and remind them to swap in the one personal detail before sending.

Input → output example

Input: "Message Sam — we did a bootcamp together last year, haven't talked in months. He runs a small Shopify agency. Goal: share my offer (I build automated post-purchase email flows)."

Output (warm-but-quiet + share offer):

hey Sam! been way too long — how'd the agency end up going after the bootcamp? i actually thought of you because i've been building automated post-purchase email flows for Shopify stores lately, and i remember you had a bunch of clients who'd probably want that. worth a quick chat, or not really your thing right now?

Follow-up (if no reply in ~4 days):

no pressure either way Sam — if post-purchase flows aren't a priority right now, all good. would still love to catch up sometime.

Saved to ~/dm-drafts.md.

Notes / edge cases

  • If the goal is "share the offer" but the relationship is cold and there's no real fit signal, say so — recommend the "start a conversation" version instead. Pitching a stranger is exactly the move that makes selling feel gross and doesn't work.
  • Never fabricate a shared memory or a result. If the personal detail slot can't be filled truthfully, the message drops to a lighter register.
  • One message, one follow-up. If they want a whole sequence or a list of people, that's the warm-outreach skill — not more follow-ups to one person.

Frequently asked questions

What does the Dm Writer AI skill do?

Write one short, human DM or message to a specific person for a specific goal (start a conversation, share your offer, or follow up) — in your voice, so it opens a dialogue instead of pitch-slapping them. Trigger whenever the user says "write a DM", "help me message this person", "what do I say to", "reach out to [name]", "draft a message", "follow up with", "how do I bring up my offer to", or "I don't know how to word this".

Why use Dm Writer on TypingMind?

Because you install it once and use it with any model. Dm Writer is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Dm Writer in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/duncan-buildroom/freeskills/tree/main/dm-writer. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Dm Writer?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Dm Writer?

As many as you like. As long as a model supports skills, you can use Dm Writer with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Dm Writer AI skill free?

It is published on GitHub by duncan-buildroom. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇