{
  "schemaVersion": "1.0",
  "item": {
    "slug": "familysearch",
    "name": "Familysearch",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/keylimesoda/familysearch",
    "canonicalUrl": "https://clawhub.ai/keylimesoda/familysearch",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/familysearch",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=familysearch",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/gedcom-format.md",
      "scripts/familysearch.py",
      "scripts/gedcom_query.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/familysearch"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/familysearch",
    "agentPageUrl": "https://openagent3.xyz/skills/familysearch/agent",
    "manifestUrl": "https://openagent3.xyz/skills/familysearch/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/familysearch/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "FamilySearch Genealogy Skill",
        "body": "Two modes of operation:\n\nLive API (primary) — Query FamilySearch directly for person search, pedigree, descendants, historical records\nOffline GEDCOM — Parse exported .ged files for local exploration, narratives, and statistics"
      },
      {
        "title": "Prerequisites",
        "body": "FamilySearch Account — Free at https://www.familysearch.org\nDeveloper App Key — Register at https://www.familysearch.org/developers/\nOAuth 2.0 Access Token — Via authentication flow below\n\nStore credentials:\n\nOption A — Environment variable (all platforms):\n\nexport FAMILYSEARCH_TOKEN=\"<TOKEN>\"\n\nOption B — macOS Keychain:\n\nsecurity add-generic-password -a \"familysearch-app-key\" -s \"openclaw-familysearch\" -w \"<APP_KEY>\"\nsecurity add-generic-password -a \"familysearch-token\" -s \"openclaw-familysearch-token\" -w \"<TOKEN>\"\n\nThe script checks FAMILYSEARCH_TOKEN env var first, then falls back to macOS Keychain."
      },
      {
        "title": "Authentication",
        "body": "OAuth 2.0 Authorization Code flow:\n\nDirect user to: https://ident.familysearch.org/cis-web/oauth2/v3/authorization?response_type=code&client_id={APP_KEY}&redirect_uri={REDIRECT_URI}\nUser logs in, grants access\nExchange code for token:\n\ncurl -X POST \"https://ident.familysearch.org/cis-web/oauth2/v3/token\" \\\n  -d \"grant_type=authorization_code&code={AUTH_CODE}&client_id={APP_KEY}\"\n\nStore returned access_token in Keychain\n\nSandbox for testing: https://integration.familysearch.org / https://api-integ.familysearch.org"
      },
      {
        "title": "API Usage",
        "body": "python scripts/familysearch.py <command> [args]\n\nCommandDescriptionsearch --given John --surname Lewis --birth-place OregonSearch persons in Family Treeperson <PID>Get person detailsancestry <PID> --generations 4Ascending pedigree (1-8 generations)descendants <PID> --generations 2Descending treeparents <PID>Get parentsspouses <PID>Get spouseschildren <PID>Get children\n\nSearch parameters: --given, --surname, --birth-date, --birth-place, --death-date, --death-place, --sex\n\nResults use GEDCOM X format (JSON). Key fields: persons[].id, persons[].display.name, .birthDate, .birthPlace, .deathDate, .deathPlace.\n\nAhnentafel numbering in ancestry: 1=subject, 2=father, 3=mother, 4=paternal grandfather, etc."
      },
      {
        "title": "Mode 2: Offline GEDCOM Files",
        "body": "For exported .ged files from FamilySearch, Ancestry, MyHeritage, etc. No API key needed — pure offline."
      },
      {
        "title": "Getting a GEDCOM File",
        "body": "FamilySearch: familysearch.org → Family Tree → Tools → Export GEDCOM"
      },
      {
        "title": "Usage",
        "body": "python scripts/gedcom_query.py <gedcom_file> <command> [args...]\n\nCommandDescriptionsearch <name>Fuzzy name search — returns matches with IDsperson <id_or_name>Full profile: birth, death, parents, spouses, childrenancestors <id_or_name> [depth]Pedigree chart up (default: 4 generations)descendants <id_or_name> [depth]Pedigree chart down (default: 3 generations)story <id_or_name>Narrative biography paragraphtimeline <id_or_name>Chronological life eventsstatsTree summary: counts, surnames, birth decades, completenessfind-date <year>Find people born/died in a given yearcommon-ancestor <name1> <name2>Find closest common ancestor\n\nid_or_name: GEDCOM ID (e.g., I001) or partial name (fuzzy, case-insensitive)."
      },
      {
        "title": "Narrative Genealogy",
        "body": "Beyond data retrieval, this skill supports narrative genealogy — connecting facts to stories:\n\nNote occupations, migrations, life events when exploring a tree\nCross-reference API/GEDCOM data with stories the user shares conversationally\nBuild family narratives that explain why — not just dates and names\nFlag research opportunities: missing records, undocumented branches, conflicting dates\nUse story command (GEDCOM mode) for auto-generated biographical narratives"
      },
      {
        "title": "Agent Workflow",
        "body": "User asks about family history → Check if they have a FamilySearch account (API) or GEDCOM file (offline)\nAPI mode: Search by name → get person ID → explore ancestry/descendants/relationships\nGEDCOM mode: Load file → search → explore\nEither mode: Combine structured data with user's oral history for richer narratives\nCross-reference: Use API to find records that fill gaps in GEDCOM data"
      },
      {
        "title": "Rate Limits & Best Practices",
        "body": "FamilySearch API is free but rate-limited — cache results locally\nNever store FamilySearch usernames/passwords — OAuth tokens only\nTokens expire; re-authenticate on 401 responses\nGEDCOM parser handles files up to ~100K individuals\nFile encoding: auto-detects UTF-8 (with BOM), UTF-8, latin-1"
      }
    ],
    "body": "FamilySearch Genealogy Skill\n\nTwo modes of operation:\n\nLive API (primary) — Query FamilySearch directly for person search, pedigree, descendants, historical records\nOffline GEDCOM — Parse exported .ged files for local exploration, narratives, and statistics\nMode 1: FamilySearch API (Primary)\nPrerequisites\nFamilySearch Account — Free at https://www.familysearch.org\nDeveloper App Key — Register at https://www.familysearch.org/developers/\nOAuth 2.0 Access Token — Via authentication flow below\n\nStore credentials:\n\nOption A — Environment variable (all platforms):\n\nexport FAMILYSEARCH_TOKEN=\"<TOKEN>\"\n\n\nOption B — macOS Keychain:\n\nsecurity add-generic-password -a \"familysearch-app-key\" -s \"openclaw-familysearch\" -w \"<APP_KEY>\"\nsecurity add-generic-password -a \"familysearch-token\" -s \"openclaw-familysearch-token\" -w \"<TOKEN>\"\n\n\nThe script checks FAMILYSEARCH_TOKEN env var first, then falls back to macOS Keychain.\n\nAuthentication\n\nOAuth 2.0 Authorization Code flow:\n\nDirect user to: https://ident.familysearch.org/cis-web/oauth2/v3/authorization?response_type=code&client_id={APP_KEY}&redirect_uri={REDIRECT_URI}\nUser logs in, grants access\nExchange code for token:\ncurl -X POST \"https://ident.familysearch.org/cis-web/oauth2/v3/token\" \\\n  -d \"grant_type=authorization_code&code={AUTH_CODE}&client_id={APP_KEY}\"\n\nStore returned access_token in Keychain\n\nSandbox for testing: https://integration.familysearch.org / https://api-integ.familysearch.org\n\nAPI Usage\npython scripts/familysearch.py <command> [args]\n\nCommand\tDescription\nsearch --given John --surname Lewis --birth-place Oregon\tSearch persons in Family Tree\nperson <PID>\tGet person details\nancestry <PID> --generations 4\tAscending pedigree (1-8 generations)\ndescendants <PID> --generations 2\tDescending tree\nparents <PID>\tGet parents\nspouses <PID>\tGet spouses\nchildren <PID>\tGet children\n\nSearch parameters: --given, --surname, --birth-date, --birth-place, --death-date, --death-place, --sex\n\nResults use GEDCOM X format (JSON). Key fields: persons[].id, persons[].display.name, .birthDate, .birthPlace, .deathDate, .deathPlace.\n\nAhnentafel numbering in ancestry: 1=subject, 2=father, 3=mother, 4=paternal grandfather, etc.\n\nMode 2: Offline GEDCOM Files\n\nFor exported .ged files from FamilySearch, Ancestry, MyHeritage, etc. No API key needed — pure offline.\n\nGetting a GEDCOM File\n\nFamilySearch: familysearch.org → Family Tree → Tools → Export GEDCOM\n\nUsage\npython scripts/gedcom_query.py <gedcom_file> <command> [args...]\n\nCommand\tDescription\nsearch <name>\tFuzzy name search — returns matches with IDs\nperson <id_or_name>\tFull profile: birth, death, parents, spouses, children\nancestors <id_or_name> [depth]\tPedigree chart up (default: 4 generations)\ndescendants <id_or_name> [depth]\tPedigree chart down (default: 3 generations)\nstory <id_or_name>\tNarrative biography paragraph\ntimeline <id_or_name>\tChronological life events\nstats\tTree summary: counts, surnames, birth decades, completeness\nfind-date <year>\tFind people born/died in a given year\ncommon-ancestor <name1> <name2>\tFind closest common ancestor\n\nid_or_name: GEDCOM ID (e.g., I001) or partial name (fuzzy, case-insensitive).\n\nNarrative Genealogy\n\nBeyond data retrieval, this skill supports narrative genealogy — connecting facts to stories:\n\nNote occupations, migrations, life events when exploring a tree\nCross-reference API/GEDCOM data with stories the user shares conversationally\nBuild family narratives that explain why — not just dates and names\nFlag research opportunities: missing records, undocumented branches, conflicting dates\nUse story command (GEDCOM mode) for auto-generated biographical narratives\nAgent Workflow\nUser asks about family history → Check if they have a FamilySearch account (API) or GEDCOM file (offline)\nAPI mode: Search by name → get person ID → explore ancestry/descendants/relationships\nGEDCOM mode: Load file → search → explore\nEither mode: Combine structured data with user's oral history for richer narratives\nCross-reference: Use API to find records that fill gaps in GEDCOM data\nRate Limits & Best Practices\nFamilySearch API is free but rate-limited — cache results locally\nNever store FamilySearch usernames/passwords — OAuth tokens only\nTokens expire; re-authenticate on 401 responses\nGEDCOM parser handles files up to ~100K individuals\nFile encoding: auto-detects UTF-8 (with BOM), UTF-8, latin-1"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/keylimesoda/familysearch",
    "publisherUrl": "https://clawhub.ai/keylimesoda/familysearch",
    "owner": "keylimesoda",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/familysearch",
    "downloadUrl": "https://openagent3.xyz/downloads/familysearch",
    "agentUrl": "https://openagent3.xyz/skills/familysearch/agent",
    "manifestUrl": "https://openagent3.xyz/skills/familysearch/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/familysearch/agent.md"
  }
}