Local-first, privacy-preserving genealogy CLI with modular LLM providers.
Project description
AncestryLLM
AncestryLLM is a local-first platform for genealogy research tools. It combines deterministic RootsMagic and GEDCOM workflows with optional, explicitly selected LLM providers. The CLI and its interactive console are the only supported product surfaces in the 0.2.0 release. The accepted local Electron and private FastAPI desktop architecture remains unshipped and is not a public API.
Install and start
Python 3.12 through 3.14 and a working OS credential store are required. Install the isolated command with pipx:
pipx install ancestryllm
ancestry --version
ancestry --help
Install every optional LLM provider with
pipx install 'ancestryllm[all-llm]'. Remote providers are never selected from
installed packages or environment keys: every cloud call still requires an
explicit profile and consent.
Run ancestry with no arguments for the prompt-toolkit/Rich interactive
console. It is the only supported interactive console; the
prompt stays responsive while background operations render live, sanitized
spinner or completed-unit progress above it. One-shot and JSON output never
emit terminal animation. The canonical command reference, examples, offline
defaults, and privacy rules are
in the CLI guide;
see the console guide
for interactive use and
the file-ingress policy
for per-format input limits and stable rejection codes.
Included modules
rootsmagic: immutable, bounded SELECT/CTE queries and deterministic GEDCOM export.gedcom: merge, rooted subtree, quality analysis, incremental update, and rebase.prompts: immutable prompt revisions with declared variables and output schemas.people: curated research people, identifiers, facts, links, and provenance.providers: explicit Ollama, OpenAI, Anthropic, Gemini, and OpenRouter profiles.ocr: schema-validated extraction through the same provider boundary.secrets: no-echo OS-keyring management; values never appear in status output.
Development
git clone https://github.com/sodejm/AncestryLLM.git
cd AncestryLLM
make setup
make test
make lint
make typecheck
make security
make sbom
make setup creates .venv and installs the checkout in editable mode with
locked development and provider dependencies. The equivalent manual command is
.venv/bin/pip install --editable '.[all-llm,dev]'; it is for contributors,
not end-user installation.
The dependency graph is locked in uv.lock. Never commit real family trees,
GEDCOM exports, databases, logs, reports, secrets, or research-person data.
Read the architecture, desktop ADR, CLI guide, privacy and consent, provider guide, GEDCOM compatibility, encrypted backups, bounded file ingress, and threat model.
Versioning follows Semantic Versioning 2.0.0. The versioning policy defines the CLI contracts covered by a release.
Interoperability status
Automated round-trip and preservation tests run in CI. Ancestry, Geni, and MyHeritage imports must still be manually smoke-tested for each release; this repository does not claim production interoperability until that checklist is completed and recorded.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ancestryllm-0.2.0.tar.gz.
File metadata
- Download URL: ancestryllm-0.2.0.tar.gz
- Upload date:
- Size: 221.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7da3ecb69a315c489042b200efcc7250820615ddb1e824e8764efe83cbb314f2
|
|
| MD5 |
d2aaee46c545d1d3e6c8b153d8a77fd8
|
|
| BLAKE2b-256 |
140192eb846391e585fdf1d755e79b2c33a2bf4e66e721412dca1d71f769d904
|
Provenance
The following attestation bundles were made for ancestryllm-0.2.0.tar.gz:
Publisher:
release.yml on sodejm/AncestryLLM
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ancestryllm-0.2.0.tar.gz -
Subject digest:
7da3ecb69a315c489042b200efcc7250820615ddb1e824e8764efe83cbb314f2 - Sigstore transparency entry: 2286483936
- Sigstore integration time:
-
Permalink:
sodejm/AncestryLLM@078c2e642939bf583816f218ad321098e1e99332 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/sodejm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@078c2e642939bf583816f218ad321098e1e99332 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ancestryllm-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ancestryllm-0.2.0-py3-none-any.whl
- Upload date:
- Size: 222.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6927c5666fc41e47295b9666bb0e2fcf1d2d6661ea35ce3ce07fbbc4c28cce42
|
|
| MD5 |
9256928f37d7329ce98ee6f84b3dcdb3
|
|
| BLAKE2b-256 |
182883f67225d79302409c862ec87a9f445f90790dc78adb360d707f13932023
|
Provenance
The following attestation bundles were made for ancestryllm-0.2.0-py3-none-any.whl:
Publisher:
release.yml on sodejm/AncestryLLM
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ancestryllm-0.2.0-py3-none-any.whl -
Subject digest:
6927c5666fc41e47295b9666bb0e2fcf1d2d6661ea35ce3ce07fbbc4c28cce42 - Sigstore transparency entry: 2286484049
- Sigstore integration time:
-
Permalink:
sodejm/AncestryLLM@078c2e642939bf583816f218ad321098e1e99332 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/sodejm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@078c2e642939bf583816f218ad321098e1e99332 -
Trigger Event:
push
-
Statement type: