silueta
Profile the shape of your data — never the values.
silueta turns a dataset — CSV, Parquet, and soon multi-tab Excel and databases — into a compact, machine-readable profile of its shape: types, nulls, cardinality, value-shape masks, semantic PII/PHI flags, and red-flag anomalies. The profile contains no raw cell values, by construction, so an AI agent (or a teammate, or a ticket) can work from it safely.
The motivating workflow: you get a vendor workbook full of PII/PHI and need to model it — dbt sources, Snowflake landing tables, relationships. Most of what modeling needs is how the data behaves, not what it says. silueta captures the behavior so an agent like Claude Code can scaffold the models for data it is never allowed to read.
$ uvx silueta scan patients.csv --report report.md
wrote profile.json
wrote report.md
patients: 30 rows, 7 columns, 2 alerts
The profile tells the agent things like:
mrn— VARCHAR, 100% unique, maskAAA-999999→ this is your keyssn— matches SSN structure at 100% with plausibility checks → sensitive, alertamount— typed as text but 100% castable numeric, magnitude 10^2 → DECIMAL, fix at landingclinic— constant column (and that is all it says about it)visit_date— dates spanning 2025 (year granularity only)
The contract
A silueta profile never contains:
- raw cell values, sample rows, or frequent-value lists
- min/max for strings or dates (those are raw values) — numerics report order-of-magnitude and precision facts, dates report year spans
- serialized sketches or value hashes (hashing is not anonymization)
- any statistic derived from values observed in fewer than k rows (default 5); constant columns report nothing but their constancy
This contract is enforced by tests that scan every output for source values, and it travels inside the artifact itself (profile.json → silueta.contract).
What it is and is not: silueta protects against accidental context leakage — values ending up in an LLM conversation, a log, a pasted ticket. It does not claim formal anonymity (differential privacy) against an adversary reconstructing small populations from aggregates. The wording is "no raw values by construction," never "anonymized."
Status
Early alpha — CSV, Parquet, and multi-sheet Excel profiling work today, including messy-workbook recovery: title/footer rows skipped, multi-row headers merged, numbers-stored-as-text promoted to real types with confidence scores, non-tabular sheets flagged and skipped. On deck (see issues): cross-table foreign-key candidates, dbt/Snowflake scaffold emitters, database connections.
Install
uvx silueta # zero-install run
uv tool install silueta
pipx install silueta
Agent setup
silueta is built for agent-driven data work: the profile is the interface an agent reads, and the repo ships a Claude Code skill plus a lockdown recipe that blocks raw data reads (Read-tool denies + a shell hook) while allowlisting the profiler — the agent models data it is never allowed to read.
License
MIT
Metadata
Release files for silueta 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| silueta-0.3.0.tar.gz | 55.3 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| silueta-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 83.0 kB
Release files / silueta-0.3.0.tar.gz
| Download URL | silueta-0.3.0.tar.gz |
|---|---|
| Size | 55.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8664e08d9cca30eccfd80c6157a9a946732f57e6e4ee2618cea9a684fe67d733
|
|
BLAKE2b-256 checksum How to use checksums |
f900c6fbfacfb45f74634c84404165937116beb39c313c03daf4c80cd1ca1af6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 24, 2026.
Transparency logRelease files / silueta-0.3.0-py3-none-any.whl
| Download URL | silueta-0.3.0-py3-none-any.whl |
|---|---|
| Size | 27.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
afc2e3cff247b503608f3746221c803a7fb45d7b176f85dbffbcd170ec8d7fa4
|
|
BLAKE2b-256 checksum How to use checksums |
bc0977b594456bba3dcd0c2ea494982b95653c47a78a9fc0eea06fdc529fcf74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 24, 2026.
Transparency logSecurity for silueta 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for silueta-0.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 24, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.