✅ v1 — 2026-04-25: Created both templates (media_contract, secondary_use) + both examples + the corporate information registry. Bothmodak smoke test passed (43318 bytes vs baseline 43340 bytes), BCG smoke test passed (46031 bytes). The semantic diff from baseline is mainly differences in refining the official EO address notation/wording (the skill is more accurate based on parties.py). The first editions already sent for BCG (2026-04-14) and Modudak (2026-04-23) are as legacy
scripts/contracts/build_eo_*.py가 source of truthand are preserved as-is.
When to use
Trigger keywords: "contract", "video production contract", "promotion contract", "clean version license", "secondary use", "branded contract", "EO standard contract" — if any one of these is included, activate this skill.
Prerequisites:
- The client must be
lib/parties.pyregistered in the registry (if not, add it first) - Do not bypass the 7-step playbook (
memory/reference_contract_drafting_playbook.md)
When NOT to use
- Modifying a contract that has already been sent →
scripts/contracts/replace_modoodoc_body.pyuse the in-place string replace path of the pattern. This skill is first-edition generation only. (Basis:.claude/rules/contract-docx.md) - A contract outside the EO standard structure (e.g., shareholders' agreement, investment agreement, NDA) → Lisa legal advisor + separate template search
- Party information uncertain → start by collecting
memory/reference_<거래처>_legal.mdfirst
Directory structure
.claude/skills/my-eo-contract-drafter/
├── SKILL.md # 이 파일
├── lib/
│ ├── eo_docx.py # docx 서식 헬퍼 (폰트·여백·표·페이지)
│ └── parties.py # 법인정보 레지스트리 (EO·프레인·모두닥)
├── templates/
│ ├── media_contract.py # 영상제작 및 홍보계약서 (14조 + 별지 2호)
│ └── secondary_use.py # 클린본 2차 활용 라이선스 (10조 + 별지 1호)
└── examples/
├── build_bcg.py # BCG 건 재현 (legacy 호환 테스트)
└── build_modoodoc.py # 모두닥 건 재현 (legacy 호환 테스트)
Usage (I/O contract)
Video production contract
from lib.parties import EO_KOREA, PRAIN_GLOBAL
from templates.media_contract import build_media_contract
path = build_media_contract(
partner=PRAIN_GLOBAL, # dict (상호·사업자번호·주소·서명자·담당자)
eo=EO_KOREA,
project_name="[BCG 코리아 파트너 인터뷰 시리즈] 영상 제작 및 홍보",
supply_price=41_000_000, # int — VAT 별도
start_date="2026년 4월 24일",
end_date="2026년 6월 30일",
deliverables=[
"1. 롱폼 인터뷰 영상 1편 제작",
"2. 쇼츠 영상 4편 제작 (인물별 1편)",
"3. EO Korea 유튜브 채널 업로드",
],
cast="송지연, 박영호, 이중훈, 장진석 (BCG 코리아 파트너 4인)",
ad_client="보스턴컨설팅그룹 코리아(BCG)",
eo_contact={"name": "김중철", "role": "한국사업총괄",
"email": "chiri@eoeoeo.net"},
internal_memos=[...], # 리스트[(제목, 본문)] — 내부 검토 메모 페이지
checklist=[...], # 발송 전 체크리스트
output_path="~/Downloads/파일명.docx", # expanduser 권장 (Mac/Windows 호환)
)
Returns: the absolute path of the generated docx.
Clean version secondary use license contract
from lib.parties import EO_KOREA, MODOODOC
from templates.secondary_use import build_secondary_use_contract
path = build_secondary_use_contract(
partner=MODOODOC,
eo=EO_KOREA,
original_contract_date="2025년 8월 12일",
original_project_name="모두닥 다큐멘터리",
original_video_url="https://youtu.be/TdyJD6zfDUo",
original_upload_date="2025년 10월 20일",
supply_price=5_000_000,
usage_purpose="\"파트너\"의 채용광고 용도",
usage_media="YouTube, Meta..., TikTok, LinkedIn 등 — 제한 없음",
duration="무기한",
...
)
7-step playbook check
Once this skill is activated, complete the following in the conversation before calling generation:
- Declare entry into the contract-review 4-stage framework
- Summon Lisa legal lens (
/consult legal) - 7 lookups: Gmail + EO corporate information + client corporate information + eo-templates.ts + eo-contract-samples.txt + docx formatting standard + 4/7 learning thread
- Stage 1–4 verification (contract period / damages cap / number of revisions / confidentiality·no DB provision / force majeure)
- Replicate EO standard structure (generic templates prohibited)
- Inject corporate information — extract only from
lib/parties.py(no fabrication) - Call generation → attach internal review memo page
Formatting standard (fixed)
- Page: A4, margins top 3 / bottom 2 / left and right 2.5 cm
- Title: Gulim 18pt Center Bold
- Clause title: Gulim 10pt Bold (
제 1 조【 계약의 목적 】) - Body: Batang 10pt Justify, line spacing 1.23
- Item number: circled numeral
①②③...or1) 2) 3)(left_indent 0.5/1.0cm) - Tab characters prohibited (indent via paragraph properties)
- Cell label: background #F2F2F2 + center alignment + cell margin injection (OOXML
w:shd·w:tcMar)
Regression verification
Binary identity with the existing contract is not guaranteed (python-docx's zip compression is nondeterministic). Instead, semantic equivalence is verified via paragraph/table fingerprints:
python3 /tmp/deslop_baseline/fingerprint.py <원본.docx> > baseline.json
python3 /tmp/deslop_baseline/fingerprint.py <생성본.docx> > current.json
diff baseline.json current.json
If the diff is empty, they are semantically identical. examples/build_bcg.py와 examples/build_modoodoc.pyis
this equivalence test casepinned down as.
Related assets
memory/reference_contract_drafting_playbook.md— 7-step playbook (original)memory/reference_eo_korea_corporate_info.md— EO Korea Corporation official informationmemory/reference_prain_global_legal.md— Frein Globalmemory/reference_modoodoc_legal.md— Modudocmemory/feedback_contract_drafting_failures_20260413.md— Rocky failure error notes.claude/rules/contract-docx.md— No edits after sending + 3-tier backup rulescripts/contracts/— Legacy first-edition generation script (deprecated after 2026-04-25)