OPEN SOURCE · 2026 · MIT LICENSE

gedcom-skills/

A Claude Code plugin that lets AI agents read, search, edit, and report on GEDCOM genealogy files — backed by a Python parser that preserves every byte of the original file.

packages
gedcom-skills · gedcom-lite · gedcom-reports
formats
GEDCOM 5.5.1 · 5.5.5 · 7.0+
python
3.11+ · zero runtime deps (parser)
tests
158 · byte-identical round trips
license
MIT

## why

I wanted an AI agent to reason directly over my family tree: list my immigrant ancestors, find the colonial-era branches, fix a date. GEDCOM is the format every genealogy program exports, but the existing Python parsers reordered records, dropped formatting, or only partly supported the newer versions.

Genealogy data is irreplaceable, and a tool that rewrites a file carelessly will eventually destroy a tree. So the parser treats the original file as sacred: an edit changes exactly the line it targets, and nothing overwrites the input unless you ask for --in-place.

fig. 1 — three layers: the plugin teaches the agent, the packages do the work
AI agentClaude Code gedcom-skills4 skills · no Python gedcom-liteparser · read/search/update gedcom-reportsancestor reports .ged fileround-trips byte for byte uvx

## design

  • A deliberately thin plugin. The plugin is four skills (read-gedcom, search-gedcom, update-gedcom, ancestor-report) and reference docs, with no code. Each skill tells the agent when to act and which command to run through uvx, so users need nothing installed except uv.
  • Byte-faithful round trips. Every parsed structure keeps its original line and line terminator. The writer emits the original bytes unless that structure was edited, and a test asserts that every fixture writes back byte-identical. Editing one name produces a one-line diff.
  • Encodings from four decades. UTF-8 with or without a BOM, UTF-16 in either byte order, and ANSEL, the 1980s library-catalog character set, through a bundled codec. Compliance is verified against the official GEDCOM sample suite, covering UTF-16, ANSEL, extensions, escapes, and GDZ archives: every file in it parses and writes back byte for byte.
  • Opinions live in their own package. gedcom-reports produces Ahnentafel-numbered ancestor reports with a swappable region taxonomy, so editorial choices stay out of the parser.

## try it

/plugin marketplace add vaelen/gedcom-skills
/plugin install gedcom-skills@gedcom-skills

Or run a tool directly:

uvx --from gedcom-reports gedcom-ancestor-report tree.ged --root @I1@ --depth 7 --output report.md

## how it was built

I built it with Claude Code, documentation first: no code was written until the format reference and design docs were done. Claude argued for keeping the reports separate from the parser, and running the first report against my own tree turned up seven pain points, six of which became features in gedcom-lite 0.2.0. The finished report covers ten generations and 218 ancestors.

← cd ../projects