digitalarchivst/open-genealogy/gedcom-creator
Claude Code and agent skill by digitalarchivst/open-genealogy
- community
Checking that the SKILL.md file is still in the repository.
Create GEDCOM 5.5.1 compliant genealogy files from natural language, JSON, or markdown table input. Use when the user wants to generate a family tree interchange file from research data.
Install
npx vskill@latest install digitalarchivst/open-genealogy/gedcom-creatorSKILL.md
GEDCOM Creator — GEDCOM 5.5.1 File Generator
Create standards-compliant GEDCOM 5.5.1 files from user-provided genealogical data. Accepts natural language, structured JSON, or markdown tables.
This tool records only what you provide. It never invents people, dates, or places.
Design Principle
The LLM parses and reasons. Code handles mechanics.
You (Claude) interpret user input and build a canonical JSON intermediate. The Python script (scripts/gedcom_builder.py) handles GEDCOM rendering, pointer wiring, CONC/CONT splitting, validation, and file output. You NEVER generate raw GEDCOM text directly.
Dependencies
Python 3.6+ standard library only. No pip install required.
When to Auto-Invoke
Auto-invoke when the user wants to create, generate, or build a GEDCOM file from genealogical data. Trigger phrases:
- "create a GEDCOM"
- "generate a GEDCOM file"
- "build me a GEDCOM"
- "turn this into a GEDCOM"
- "export this as GEDCOM"
- "make a .ged file"
Do NOT auto-invoke for GEDCOM reading, analysis, or visualization.
What You Can Say
Example prompts to get started:
Image Input
When the user uploads an image (document, chart, headstone, certificate, screenshot) instead of text:
- Describe what you see: document type, layout, readability.
- Extract what you can read with confidence.
- For text you cannot read clearly, use
[illegible]as a
placeholder value and note it.
- For structural positions visible but unnamed (e.g., a box in
a pedigree chart with unreadable text), create the individual as Unknown /Unknown/ and preserve family links.
- When an image explicitly shows gender (colored icons, M/F
markers, or HUSB/WIFE column position), use it. The prohibition on assuming gender from names does not apply to explicit visual indicators.
- Report what you could and could not read before showing the
confirmation preview.
Pedigree charts: The subject is at the left or center. Lines connect to ancestors (parents, grandparents), not spouses. Spouses may appear adjacent but are linked by marriage, not descent. Read carefully — do not confuse a parent with a spouse.
Processing Pipeline
Step 1: Detect Environment
Determine the correct Python command and script path:
| Environment | Python | Script Path | |
|---|---|---|---|
| MINGW64 / VS Code | py or python | ~/.claude/skills/gedcom-creator/scripts/gedcom_builder.py | |
| WSL2 | python3 | ~/.claude/skills/gedcom-creator/scripts/gedcom_builder.py | |
| macOS / Linux | python3 | ~/.claude/skills/gedcom-creator/scripts/gedcom_builder.py |
Step 2: Parse User Input to JSON Intermediate
Accept input in any of four modes:
Mode 1 — Conversational (Primary): Parse natural language descriptions of people and families into the canonical JSON format. This is the most common input path.
Mode 2 — Structured JSON (Advanced): Accept JSON matching the canonical schema (see below). Validate and pass through.
Mode 3 — Markdown Table (Advanced): Parse tabular data into the canonical JSON format.
Mode 4 — Image (Vision): Follow the Image Input protocol above, then build the canonical JSON from extracted data.
Parsing Rules
- Extract every individual mentioned with all stated facts
- Identify family relationships (spouse, parent, child)
- Normalize dates to GEDCOM format (see Date Mapping below)
- Normalize places to 4-level depth when possible
(Locality, County, State, Country)
- NEVER invent data not explicitly stated by the user
- NEVER narrow imprecise dates ("the 1920s" is NOT "ABT 1925")
- When the same name appears multiple times, treat as the same
person unless context indicates otherwise. If ambiguous, ASK.
- Contradictions across sources: When different documents disagree,
present both readings and ask the user to resolve.
- Contradictions within a single source: Record the most internally
consistent reading. Add a NOTE documenting both values and flag it in the confirmation preview. Example: "Source gives marriage as both 1789 and 1791. ABT 1789 used; user should verify." Tiebreaker: If no reading is more internally consistent than another, record BOTH readings in a NOTE and leave the DATE field empty. Flag for user resolution in the confirmation preview. Do not silently pick one.
- For gender, use what the user states or
Uif unknown.
NEVER assume gender from names.
Parish Register Table Formats
When the user provides data from English parish registers, expect these table structures:
Baptisms:
Parsing notes for baptisms:
- Mother is frequently absent in pre-1640 registers. Do NOT infer
her. Treat blank as unrecorded, not "unknown wife."
- "base born" / "bastard" / "illegitimate" means no father should
be assigned to the family unit. Link child to mother only.
- Use
BAPM(baptism) for English parish register entries, not
CHR (christening) unless the register explicitly says christening.
- Folio references (f.12r, f.14v) are standard manuscript citations.
Marriages:
Parsing notes: "By" column (banns/licence) is genealogically significant. Bride's maiden surname is often absent in early registers — do NOT fabricate it.
Burials:
Parsing notes: The Descriptor column is critical for disambiguation. Preserve descriptors verbatim ("senior," "the elder," "wife of William," "widow," "son of Robert"). These are primary disambiguation evidence. A burial with no descriptor in a period when multiple people share the name is genuinely ambiguous — flag it in the confirmation preview with an AMBIGUOUS: prefix and list candidate IDs. Do not create a GEDCOM record for the burial until the user resolves which individual it belongs to.
Important: When a burial entry mentions a person (e.g., "Anne, wife of William"), ensure that person gets a BURI event on their own INDI record — not just a mention in someone else's NOTE. This helps the living-person filter correctly identify them as deceased.
Wills (supplementary):
The Relationships column provides direct evidence for family links. Each named relationship becomes a source citation on the FAM record (see Family-Level Source Citations below).
Name Disambiguation for Recycled Names
When processing registers where the same given names repeat across generations (e.g., successive William Whitchurches), maintain a mental "person register" with active date windows:
Step 1: Assign active windows. Each known individual gets a plausible active range: baptism + 16 years to baptism + 55 years (for fathering children).
Step 2: When a new entry names a person, check candidates.
- Exactly one candidate in the active window: assign
tentatively. Add a NOTE: "Assigned to [ID] based on date plausibility."
- Zero candidates: create a new individual. Add a NOTE:
"New individual — no existing candidate in active window."
- Multiple candidates: DO NOT ASSIGN. Flag as ambiguous:
"AMBIGUOUS: [entry] could be [I3] (bapt. 1580) or [I7] (bapt. 1610). User must resolve."
Step 3: Use register descriptors as primary evidence. "Senior" / "junior" / "the elder" / "wife of" / "son of" — these disambiguate directly. Note: in English registers, senior/junior means elder/younger currently alive in the parish, NOT necessarily father/son.
Step 4: Use wills to confirm or resolve. A will naming "my son William" written by a William who was buried the following week is direct relationship evidence.
Step 5: Use spousal co-occurrence. If baptism entries name the mother as "Anne" from 1601-1615 and "Joan" from 1618-1630, check the burial register for an Anne between 1615-1618. If found: one man, sequential wives. If not: possibly two different men.
NEVER silently merge ambiguous individuals. Present all ambiguities in the confirmation step for the user to resolve.
Date Mapping
| User says | GEDCOM output | |
|---|---|---|
| "March 15, 1845" or "15 Mar 1845" | 15 MAR 1845 | |
| "around 1868" / "circa 1868" / "about 1868" | ABT 1868 | |
| "before 1870" / "by 1870" | BEF 1870 | |
| "after 1865" / "since 1865" | AFT 1865 | |
| "between 1860 and 1870" | BET 1860 AND 1870 | |
| "the 1860s" | BET 1860 AND 1869 | |
| "from 1870 to 1880" / service period | FROM 1870 TO 1880 | |
| "mid-1800s" or vague decades | ASK the user | |
| "aged 20 at marriage in 1789" | CAL 1769 (calculated from stated age) | |
| "2 Feb 1731/32" (dual-dating) | 2 FEB 1731/32 |
The builder accepts these canonical lexical forms:
- A three- or four-digit year,
MON YEAR, orDAY MON YEAR, with an
optional dual year such as 1731/32
- A simple date prefixed by
ABT,BEF,AFT,CAL, orEST BET date AND dateFROM date TO date,FROM date, orTO date
Months must use uppercase GEDCOM abbreviations. Natural-language, numeric ISO, calendar-escape, and interpreted INT phrases are not accepted in the JSON intermediate. Omit an unknown date instead of guessing. Validation is lexical; it does not prove that a date existed on a particular calendar.
Step 3: Show Confirmation (MANDATORY)
Before generating the GEDCOM, display a human-readable summary and ask the user to confirm. This step is NOT optional.
Format:
Family Role column format:
- Single role:
Spouse in F1orChild in F1 - Multiple roles:
Child in F1; Spouse in F2(semicolon-separated) - No family links:
Unlinked
This column is derived from family_child and family_spouse in the JSON — it is display-only and not stored.
If the user says yes (or equivalent), proceed. If they correct anything, update the JSON intermediate and re-confirm.
Step 4: Generate GEDCOM via Python Script
Write the canonical JSON to a temp file, then invoke the builder:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/gedcom-creator/SKILL.md
Popularity
- Repository stars
- 50
- Repository forks
- 4
- 7-day trend score
- 20
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 11 Jun 2026, 5 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/digitalarchivst/open-genealogy/gedcom-creator)