Metadata-Version: 2.4
Name: ancestryllm
Version: 0.2.0
Summary: Local-first, privacy-preserving genealogy CLI with modular LLM providers.
Author: Justin Soderberg
License-Expression: MIT
Project-URL: Homepage, https://github.com/sodejm/AncestryLLM
Project-URL: Documentation, https://github.com/sodejm/AncestryLLM/wiki
Project-URL: Repository, https://github.com/sodejm/AncestryLLM
Project-URL: Issues, https://github.com/sodejm/AncestryLLM/issues
Project-URL: Changelog, https://github.com/sodejm/AncestryLLM/blob/main/CHANGELOG.md
Project-URL: Security, https://github.com/sodejm/AncestryLLM/security/policy
Keywords: cli,gedcom,genealogy,rootsmagic,privacy,llm
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Sociology :: Genealogy
Requires-Python: <3.15,>=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: alembic<2,>=1.18
Requires-Dist: httpx<1,>=0.28
Requires-Dist: jsonschema<4.27,>=4.25.1
Requires-Dist: keyring<26,>=25.7
Requires-Dist: platformdirs<5,>=4.5
Requires-Dist: prompt-toolkit<4,>=3.0.52
Requires-Dist: pydantic<3,>=2.12
Requires-Dist: python-dateutil<3,>=2.9
Requires-Dist: rapidfuzz<4,>=3.14
Requires-Dist: rich<16,>=15
Requires-Dist: sqlalchemy<3,>=2.0
Requires-Dist: sqlcipher3<0.7,>=0.6.2
Requires-Dist: sqlglot<31,>=28
Requires-Dist: tomli-w<2,>=1.2
Provides-Extra: ollama
Requires-Dist: ollama<1,>=0.6; extra == "ollama"
Provides-Extra: openai
Requires-Dist: openai<3,>=2.45; extra == "openai"
Provides-Extra: anthropic
Requires-Dist: anthropic<1,>=0.71; extra == "anthropic"
Provides-Extra: gemini
Requires-Dist: google-genai<3,>=2.12; extra == "gemini"
Provides-Extra: openrouter
Requires-Dist: openai<3,>=2.45; extra == "openrouter"
Provides-Extra: all-llm
Requires-Dist: anthropic<1,>=0.71; extra == "all-llm"
Requires-Dist: google-genai<3,>=2.12; extra == "all-llm"
Requires-Dist: ollama<1,>=0.6; extra == "all-llm"
Requires-Dist: openai<3,>=2.45; extra == "all-llm"
Provides-Extra: dev
Requires-Dist: build<2,>=1.3; extra == "dev"
Requires-Dist: check-wheel-contents<1,>=0.6.1; extra == "dev"
Requires-Dist: click<9,>=8.3.3; extra == "dev"
Requires-Dist: cyclonedx-bom<8,>=7.2; extra == "dev"
Requires-Dist: coverage[toml]<8,>=7.12; extra == "dev"
Requires-Dist: mypy<3,>=1.19; extra == "dev"
Requires-Dist: packaging<27,>=25; extra == "dev"
Requires-Dist: pip-audit<3,>=2.10; extra == "dev"
Requires-Dist: pre-commit<5,>=4.5; extra == "dev"
Requires-Dist: pytest<10,>=9; extra == "dev"
Requires-Dist: pytest-cov<8,>=7; extra == "dev"
Requires-Dist: pytest-mock<4,>=3.15; extra == "dev"
Requires-Dist: ruff<1,>=0.15; extra == "dev"
Requires-Dist: setuptools<84,>=83; extra == "dev"
Requires-Dist: twine<7,>=6.2; extra == "dev"
Requires-Dist: types-python-dateutil<3,>=2.9; extra == "dev"
Requires-Dist: uv==0.12.0; extra == "dev"
Requires-Dist: wheel<1,>=0.45; extra == "dev"
Requires-Dist: zizmor==1.28.0; extra == "dev"
Dynamic: license-file

# 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](https://pipx.pypa.io/):

```bash
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](https://github.com/sodejm/AncestryLLM/blob/main/docs/CLI.md);
see [the console guide](https://github.com/sodejm/AncestryLLM/blob/main/docs/CONSOLE.md)
for interactive use and
[the file-ingress policy](https://github.com/sodejm/AncestryLLM/blob/main/docs/FILE_INGRESS.md)
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

```bash
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](https://github.com/sodejm/AncestryLLM/blob/main/ARCHITECTURE.md),
[desktop ADR](https://github.com/sodejm/AncestryLLM/blob/main/docs/ADR-0025-electron-fastapi-desktop.md),
[CLI guide](https://github.com/sodejm/AncestryLLM/blob/main/docs/CLI.md),
[privacy and consent](https://github.com/sodejm/AncestryLLM/blob/main/docs/PRIVACY_AND_CONSENT.md),
[provider guide](https://github.com/sodejm/AncestryLLM/blob/main/docs/PROVIDERS.md),
[GEDCOM compatibility](https://github.com/sodejm/AncestryLLM/blob/main/docs/GEDCOM_COMPATIBILITY.md),
[encrypted backups](https://github.com/sodejm/AncestryLLM/blob/main/docs/ENCRYPTED_BACKUPS.md),
[bounded file ingress](https://github.com/sodejm/AncestryLLM/blob/main/docs/FILE_INGRESS.md),
and [threat model](https://github.com/sodejm/AncestryLLM/blob/main/docs/THREAT_MODEL.md).

Versioning follows [Semantic Versioning 2.0.0](https://semver.org/). The
[versioning policy](https://github.com/sodejm/AncestryLLM/blob/main/docs/VERSIONING.md)
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.
