Skip to content
Agentmart
Submit a tool

redline-emailer

Translates contract redlines into client-ready or opposing-counsel emails.

Skill by bstevescherer

IndexedMIT★ 43
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/bstevescherer-redline-emailer

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Translates contract redlines into client-ready or opposing-counsel emails. Accepts three input modes: (1) a .docx with tracked changes, (2) a redlined PDF with strikethrough/underline formatting, or (3) a verbal description of changes. Produces a copy-paste-ready email, tone-matched to the recipient: plain-English for own clients, professional legal cover for opposing counsel. Use when the attorney says "write the redline email", "summarize these changes for the client", "draft a cover email for the redline", "explain these edits to opposing counsel", or "turn this redline into an email". Do NOT use for drafting contracts or generating redlines — use the relevant drafter skill. Do NOT use for diffing two clean (non-redlined) document versions.

Use cases: documents, writing, productivity, legal

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/redline-emailer

What's inside

Skill name
redline-emailer
Description
Translates contract redlines into client-ready or opposing-counsel emails. Accepts three input modes: (1) a .docx with tracked changes, (2) a redlined PDF with strikethrough/underline formatting, or (3) a verbal description of changes. Produces a copy-paste-ready email, tone-matched to the recipient: plain-English for own clients, professional legal cover for opposing counsel. Use when the attorney says "write the redline email", "summarize these changes for the client", "draft a cover email for the redline", "explain these edits to opposing counsel", or "turn this redline into an email". Do NOT use for drafting contracts or generating redlines — use the relevant drafter skill. Do NOT use for diffing two clean (non-redlined) document versions.
License
MIT
Instructions
196 lines in SKILL.md · view on GitHub

Agent Skills spec issues

  • files: referenced but missing: references/intake-questions.md, references/email-templates.md, references/validation-rules.md

Files (6)

  • README.md
  • SKILL.md
  • email-templates.md · reference/
  • intake-questions.md · reference/
  • validation-rules.md · reference/
  • skill.yml

SKILL.md (first lines)

---
name: redline-emailer
description: >
  Translates contract redlines into client-ready or opposing-counsel emails.
  Accepts three input modes: (1) a .docx with tracked changes, (2) a redlined
  PDF with strikethrough/underline formatting, or (3) a verbal description of
  changes. Produces a copy-paste-ready email, tone-matched to the recipient:
  plain-English for own clients, professional legal cover for opposing counsel.
  Use when the attorney says "write the redline email", "summarize these changes
  for the client", "draft a cover email for the redline", "explain these edits
  to opposing counsel", or "turn this redline into an email". Do NOT use for
  drafting contracts or generating redlines — use the relevant drafter skill.
  Do NOT use for diffing two clean (non-redlined) document versions.
---

## Input Modes

| Mode | Trigger | Input |
|------|---------|-------|
| A: .docx Tracked Changes | User provides a `.docx` with Track Changes | Parse Word XML for `w:del`/`w:ins` elements |
| B: Redlined PDF | User provides a `.pdf` with redline formatting | Parse PDF for strikethrough/underline/color-coded text |
| C: Verbal Description | User describes changes, no file | Work from the attorney's description |

Auto-detect the mode from what the user provides. See `references/intake-questions.md` Q1.

---

## Instructions

### Step 1: Load References

Read before doing anything:
- `references/intake-questions.md` — short intake flow (4 questions, most auto-detectable)
- `references/email-templates.md` — tone guides and structural templates for both recipient types
- `references/validation-rules.md` — quality checks per recipient type

### Step 2: Run Intake

Follow `references/intake-questions.md`. This should take 60 seconds or less.

**What you must know before proceeding:**
1. Input mode (auto-detect from file type)
2. Recipient: client or opposing counsel
3. Contract identity: title, parties
4. Special instructions (if any)

Do NOT re-ask questions the attorney already answered in their initial request.
If the attorney says "write the redline email for opposing counsel" and drops a
.docx, you have all four answers — go straight to Step 3.

### Step 3: Extract Changes

This step varies by input mode.

---

#### Mode A: .docx with Tracked Changes

Extract changes from Word XML. The .docx format uses the same elements that
`redline_engine.py` writes — we're reading them instead.

**Namespace:**
```
W = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'
```

**Element patterns:**
- `<w:del>` → `<w:r>` → `<w:delText>` = deleted text
- `<w:ins>` → `<w:r>` → `<w:t>` = inserted text

**Extraction approach:**

1. Load the .docx with `python-docx`: `doc = Document(filepath)`
2. Walk `doc.element.body` looking for `{W}del` and `{W}ins` elements
3. **Substitutions:** When `w:del` and `w:ins` are siblings in the same `w:p`,
   they represent a substitution (old → new)
4. **Pure deletions:** A `w:del` with no adjacent `w:ins` = text was removed
5. **Pure additions:** A `w:ins` with no adjacent `w:del` = text was added
6. **Comments:** Parse `word/comments.xml` from the .docx zip archive for
   `w:comment` elements — these provide reviewer context for each change.
   Match comments to changes via `w:commentRangeStart` / `w:commentReference` IDs.

**Grouping:** For each change, find the nearest preceding paragraph with a
heading style (e.g., `Heading 1`, `Heading 2`) to determine which contract
section it belongs to. If no heading styles are used, fall back to pattern
matching: "Section X.X", "Article Y", numbered paragraphs.

**Output:** A structured change list:
```
[
  { section: "Section 4.2 — Limitation of Liability",
    type: "substitution",
    old: "twelve (12) months",
    new: "twenty-four (24) months",
    comment: "Per client instruction — doubled the liability cap" },
  ...
]
```

---

#### Mode B: Redlined PDF

Parse the PDF for redline formatting. Redlined PDFs come in two flavors —
detect which one and apply the right strategy.

**Format detection:** Scan the first 2-3 pages using `PyMuPDF` (`fitz`):

```python
import fitz
doc = fitz.open(filepath)
page = doc[0]
blocks = page.get_text("dict")["blocks"]
```

Check text spans for formatting flags:
- Strikethrough flag present → **Strikethrough + underline format**
- Red/colored text without strikethrough → **Track Changes exported to PDF**
- Neither → **Uncertain format** (trigger fallback)

From bstevescherer/heycounsel-community, MIT.

More from bstevescherer/heycounsel-community

Signals

Stars
43
Forks
6
Open issues
0
Last commit (this folder)
Mar 23, 2026 (7 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from bstevescherer

Cite this page

redline-emailer skill. Agent Mart. https://agentmart.dev/skills/bstevescherer-redline-emailer (last updated 2026-10-24)