Quickstart
1. Install
Python 3.13 or newer. The core package pulls onlypydantic and pyyaml; the heavy stages sit
behind extras. The full pipeline needs detector, gliner, and llm; add pdf to read .pdf
inputs.
2. Configure
One file,tacit_deid.yaml, that you own. Credentials are not in it: LiteLLM reads them from the
environment or disk.
EndpointNotAllowedError. See Configuration for every field.
3. Check the input
4. Run
REFUSED: <reason> and exits 2; no artifact exists and nothing was sent. By default the
run also writes runs/<id>/ with the local ledger and every model call; that folder holds real
identifiers and stays inside your boundary (--no-trace skips it).
A directory, a JSON Lines file, or a CSV runs as a batch with --out-dir: one engine build, one
artifact per record, and an owner-only manifest.json.
5. Send, regenerate, pull
send, pull, and roundtrip read TACIT_API_URL and TACIT_API_KEY from a key file or the
environment. The key is an ak_ key from an org you administer.
send re-validates the file against the wire contract first, so a ledger or a transcript can
never be sent by mistake. See The Tacit side.
As a library
build_deps wires one LiteLLMClient for extraction and one LLMJudge for the loop, both behind
the same endpoint gate, plus the configured detectors and the base-rate provider. Pass a
TraceCollector as on_trace to keep every model call in the returned ledger.