This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.5.0 instead.
Reason given by maintainers: secrets!!
borehole
Survey a codebase without sending it anywhere.
borehole reads a git repository on the machine you run it on and sends a
bundle of facts about it — counts, file paths, line numbers and a small
number of short quoted lines. Your source code does not leave. You get back
a report with a commit, a path and a line range behind every finding.
pip install borehole
export BOREHOLE_TOKEN=bh_… # from borehole.dev/account
borehole collect . --dry-run # print exactly what would be sent
borehole collect . # send it, get a report
Run --dry-run first
It prints the entire bundle and sends nothing about your repository. You are being asked to send facts about your codebase to a third party, and you should be able to read those facts before the first time and whenever you like afterwards.
Run it with your token set. The detection patterns are not in this package; they are fetched for each run, and a dry run with a token fetches them too, so it prints the quoted lines a real run would send. That fetch is the only request it makes, and its body is empty.
Without a token it makes no network request at all, and prints everything except the pattern matches.
What leaves, precisely
| Sent | Not sent |
|---|---|
| Commit SHAs, dates, subjects, insertion and deletion counts | File contents |
| Which files changed in which commit | Author names and email addresses |
| The list of tracked file paths, and tags | Anything not produced by a registered extractor |
| The remote's host and path, or the directory name if there is none | |
| Where a pattern matched: path and line number | |
| Up to 120 characters of the matched text | |
| Two counts about the tree: files, lines |
Author names and addresses are hashed before they leave, salted per repository, so the same person is the same identity within one survey and not across surveys. Every measurement counts and compares; none of them needs a name.
The hash is a pseudonym, not anonymity. The salt is the repository's head commit, and that commit is in the bundle. So anyone holding a bundle could test whether a guessed address belongs to one of its authors. Borehole does not, and a report stores authorship only as counts.
One honest caveat. Three checks quote the line they matched, because for
those the line is the evidence — a TODO's wording, a commit subject, an
unpinned dependency. If somebody wrote a colleague's name in a TODO, that
text crosses. --dry-run shows you, and the report's owner can strip quoted
evidence afterwards.
Any git repository
GitHub, GitLab, Bitbucket, Azure DevOps, a self-hosted install of any of
them — or no host at all. A bare repository on a file server, a clone
inside a data room, a laptop with the wifi off. If git log works, this
works.
Without a host to ask there are no stars, no language breakdown and no repository size. That is audience data rather than engineering data, and a private repository never had it either.
What this package is not
This is the collector. The assessment itself — the thresholds, the bands, the rejection reasons, the wording that makes a finding worth acting on — runs on Borehole's servers and is not in this package. Detection patterns are fetched for each run rather than shipped here.
So reading this source tells you exactly what leaves your machine, which is the question this package exists to let you answer. It does not tell you how the judgement is made. Both of those are deliberate.
Requires
Python 3.10 or newer, and git on the PATH. No other dependencies.
Release files for borehole 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| borehole-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Release files / borehole-0.2.0-py3-none-any.whl
| Download URL | borehole-0.2.0-py3-none-any.whl |
|---|---|
| Size | 48.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a90c143cd0d0bfd3127053755062beab2e9587cf306a6408c8d11f8906af0ee5
|
|
BLAKE2b-256 checksum How to use checksums |
928765a91fbb4dc43aaef5e750ec5c6ef3097d525de6c381c7ae1358fffc8842
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.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 Sep 24, 2026.
Transparency log