← Back to Skills Marketplace
audiojak

Draft Machine

by John Kennedy · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ Security Clean
134
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install draft-machine
Description
Use this skill whenever the user wants to send a batch of personalized emails, do a mail merge, or draft outreach emails for multiple recipients using Gmail....
README (SKILL.md)

DraftMachine — Gmail Mail Merge via CLI

DraftMachine creates Gmail drafts from a CSV list + Markdown template. Drafts land in the user's Gmail Drafts folder for review before sending — nothing gets sent automatically.

Step 1 — Check installation

draftmachine --version

If the command is not found, install it:

pip install draftmachine

Step 2 — Check Gmail credentials

Two files must exist:

File Purpose
~/.draftmachine/client_secret.json OAuth app credential downloaded from Google Cloud Console
~/.draftmachine/creds.json Cached OAuth token (created automatically by draftmachine setup)

Check for them:

ls ~/.draftmachine/

If client_secret.json is missing — walk the user through GCP setup

Tell the user they need to do a one-time setup to connect DraftMachine to their Gmail:

  1. Go to Google Cloud Console and create a project (or pick an existing one).
  2. Navigate to APIs & Services → Enable APIs & Services and enable the Gmail API.
  3. Go to APIs & Services → Credentials → Create Credentials → OAuth client ID.
  4. Choose Desktop app as the application type.
  5. Click Download JSON and save the file to ~/.draftmachine/client_secret.json.
    • You may need to mkdir ~/.draftmachine first.
  6. Run draftmachine setup — this opens a browser window, asks for Gmail permission (draft-only scope), and saves the token.

If client_secret.json exists but creds.json is missing

Run draftmachine setup to complete the OAuth consent flow.

If both files exist

Credentials are ready — skip to Step 3.

Step 3 — Gather the recipient list and compose the template

CSV file

The CSV needs at minimum an email column (default column name: email). Any other columns become available as template variables. Ask the user what data they have. If they paste data in the conversation, write it to a .csv file.

Example:

email,first_name,company
[email protected],Jane,Acme Corp
[email protected],Bob,

Markdown template

The template is a .md file with a YAML frontmatter block for the subject line and a Markdown body using Jinja2 syntax. Ask the user what the email should say, then write the template.

---
subject: "Quick note for {{ first_name }}"
---
Hi {{ first_name }},

{% if company %}
I came across {{ company }} and thought you might find this useful.
{% endif %}

[Body of the message here]

Best,
[Sender name]

Tips for good templates:

  • Use {{ variable }} to insert CSV column values.
  • Wrap optional content in {% if variable %}...{% endif %} so missing values don't cause awkward blanks.
  • The subject line supports Jinja2 too.
  • Filters like {{ first_name | title }} and loops are supported.

Step 4 — Preview before creating drafts

Always run --preview first. It renders the first row only to the terminal — no API calls, no drafts created. This is a fast sanity check for template errors and formatting.

draftmachine send list.csv template.md --preview

If the rendered output looks right, proceed. If there are errors (undefined variables, broken conditionals, etc.), fix the template and re-preview.

Step 5 — Create the drafts

Once the preview looks good:

draftmachine send list.csv template.md

If the email address is in a column other than email, use --to-column:

draftmachine send list.csv template.md --to-column work_email

DraftMachine uses a two-pass strategy: it renders all rows first (aborting early if any row has template errors), then creates all drafts via the Gmail API. This means it's all-or-nothing per run — no partial draft batches on template errors.

Step 6 — Report back

After the command completes, tell the user:

  • How many drafts were created.
  • That the drafts are in their Gmail Drafts folder, ready to review and send.
  • A reminder to check for any rows that were skipped (DraftMachine warns about empty/missing to addresses in the terminal output).

Error reference

Error Fix
command not found: draftmachine pip install draftmachine
No such file: client_secret.json Complete GCP + OAuth setup (Step 2)
403 Forbidden OAuth token lacks correct scope — re-run draftmachine setup
429 Too Many Requests Gmail API rate limit hit; DraftMachine retries 3× with backoff. If it persists, wait and re-run
UndefinedError: '...' is undefined CSV column name in template doesn't match actual column header
Partial drafts on 429 No resume; re-run the full command after a short wait (may create duplicates — delete extra drafts)
Usage Guidance
This skill appears to do what it says (create Gmail drafts from a CSV + template), but before installing/using it you should: 1) Verify the 'draftmachine' pip package and source repository (check PyPI owner and the GitHub repo referenced in README) to ensure you're installing the expected code. 2) Use your own Google Cloud project and create the OAuth client (desktop app) so you control the client_secret.json; confirm the OAuth scopes requested are draft-only. 3) Be careful pasting sensitive data into chat — the skill instructs the agent to write CSV/template files to disk (~/.draftmachine and working dir). 4) Always run the suggested --preview first to validate rendering before creating drafts. 5) Optionally test with a throwaway Gmail account to confirm behavior before running on real recipients. 6) Note the registry metadata omission: the SKILL.md expects ~/.draftmachine/client_secret.json and creds.json even though the skill metadata lists no required config paths; treat that as a documentation inconsistency and verify those files are stored where you expect.
Capability Analysis
Type: OpenClaw Skill Name: draft-machine Version: 1.0.0 The DraftMachine skill is a legitimate utility designed to facilitate Gmail mail merges by guiding an AI agent through the installation and use of the 'draftmachine' CLI tool. It follows security best practices by requiring users to provide their own Google Cloud credentials and emphasizes a 'preview' step before creating drafts. No evidence of data exfiltration, malicious execution, or prompt injection was found in SKILL.md or README.md.
Capability Assessment
Purpose & Capability
Name/description match the instructions: the skill guides the agent to use the DraftMachine CLI to create Gmail drafts from a CSV and Jinja2/Markdown template. However, the registry metadata lists no required config paths or credentials while the SKILL.md explicitly requires two files in ~/.draftmachine (client_secret.json and creds.json). That mismatch is a documentation/metadata inconsistency (not evidence of malicious intent) and should be noted before install.
Instruction Scope
The SKILL.md stays narrowly focused on preparing CSVs, writing a Jinja2 Markdown template, running a local 'draftmachine' CLI (preview then send), and performing the OAuth setup. It does instruct the agent to write pasted user data to disk (CSV/template), which is within scope for a CLI-oriented mail-merge but is a privacy consideration: user data will be persisted locally.
Install Mechanism
This is an instruction-only skill (no install spec or code). It tells users to install the external package via 'pip install draftmachine' if needed. That is a normal, reasonable mechanism, but because it pulls code from PyPI, users should verify the package and source (PyPI package owner and upstream GitHub) before installing.
Credentials
No environment variables or credentials are declared in the registry metadata, but the runtime instructions require a Google OAuth client_secret.json and a cached creds.json under ~/.draftmachine. Those files and the OAuth flow are proportionate to the stated Gmail-drafts purpose, but the metadata omission is an inconsistency worth noting.
Persistence & Privilege
The skill does not request always:true and does not attempt to modify other skills or system-wide settings. It requires creating/reading files under ~/.draftmachine and will create Gmail drafts via the user's OAuth token — appropriate for the stated functionality.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install draft-machine
  3. After installation, invoke the skill by name or use /draft-machine
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
- Initial release of DraftMachine skill for Gmail mail merge through the CLI. - Guides users to create Gmail drafts (not send them) using a CSV of recipients and a Markdown/Jinja2 template. - Step-by-step setup instructions for installation, Gmail OAuth credential setup, and error troubleshooting. - Details CSV and template requirements, including variable and conditional logic usage. - Emphasizes previewing before draft creation and explains the all-or-nothing batch strategy. - Error explanations and user reporting included for a smooth drafting workflow.
Metadata
Slug draft-machine
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Draft Machine?

Use this skill whenever the user wants to send a batch of personalized emails, do a mail merge, or draft outreach emails for multiple recipients using Gmail.... It is an AI Agent Skill for Claude Code / OpenClaw, with 134 downloads so far.

How do I install Draft Machine?

Run "/install draft-machine" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Draft Machine free?

Yes, Draft Machine is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Draft Machine support?

Draft Machine is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Draft Machine?

It is built and maintained by John Kennedy (@audiojak); the current version is v1.0.0.

💬 Comments