Camoscope
Camoscope is an opt-in local macOS audit utility. Installing or importing the package does not scan windows, read Accessibility content, or quit apps. It does not send scan results to a server. Those actions happen only when you run the corresponding CLI command.
Camoscope is a macOS command-line tool for inspecting on-screen windows whose
WindowServer kCGWindowSharingState is 0. It lists the owning process,
executable path and available code-signing metadata. With Accessibility
permission, it can also read text exposed by the owning app's Accessibility
(AX) tree.
The sharing-state flag is a useful audit signal. It is not a guarantee about what every screen-sharing, screenshot or recording backend captures. Test the capture method you rely on before drawing a conclusion. A scan that finds no matching windows means only that this scan observed none.
Intended use and permissions
Run Camoscope on your own Mac to inspect your own screen-share session. Do not deploy it to inspect someone else's machine without their knowledge and consent.
- Scanning uses macOS WindowServer metadata. macOS may restrict the metadata available to a process; check a real capture when the result matters.
--dump,--stream, and the default scan's content preview need Accessibility permission for the terminal or executable running Camoscope. AX can expose text from all windows of the owning app, not just the flagged window. Apps may expose no readable AX text.--quituses a PID-bound macOS app termination request, thenSIGTERMandSIGKILLif necessary. Signals require permission to act on the process, usually ownership. Camoscope checks the process start time before escalation to reduce the chance of targeting a reused PID. Quit is destructive and is allowed only for a PID present in the current scan; verify the PID before using it. It does not require Accessibility permission.--quitis never run during installation or a scan; it must be explicitly selected in the interactive menu or supplied on the command line.- Code-signing output is inspection metadata, not a signature validity verdict. Unknown, ad-hoc, or unsigned status alone does not establish that an app is malicious.
Install
On macOS with CPython 3.9 through 3.14 (Apple Silicon or Intel):
python3 -m pip install camoscope==0.1.1
camoscope --version
Installation includes PyObjC dependencies for WindowServer, AX and PID-bound app termination. Public distribution is through compiled macOS wheels only; Linux and other platforms have no compatible wheel. There is no Homebrew release yet.
For a local checkout:
python3 -m pip install -e ".[test]"
python3 -m pytest -q
Usage
camoscope --help
camoscope --no-prompt --no-content # one scan without AX content
camoscope # scan with AX preview, then interactive menu
camoscope --watch --no-content # rescan every 2 seconds
camoscope --dump PID # read the app's exposed AX text once
camoscope --stream PID --interval 3 # repeat until stopped or PID exits
camoscope --quit PID # terminate the selected process
Use --no-content for a metadata-only scan. The default scan tries to read
AX content for matching apps, so it requires Accessibility permission. A
denied permission or failed WindowServer enumeration is an error, not a
negative finding. Camoscope prints results to the terminal and does not save
them automatically.
PIDs must be positive integers. --interval must be a positive finite
number. --quit returns a nonzero exit status if the process cannot be
terminated. Scan and AX permission failures also return nonzero status.
The CLI never silently treats a failed WindowServer enumeration as an empty
result.
Release status
Version 0.1.1 is a public beta. Automated tests cover CLI routing and
important safety/error paths. A controlled matrix comparing the flag with
actual capture output across macOS versions and capture backends is still
pending, so this tool should be treated as an audit aid rather than a
conclusive screen-share integrity verdict. The package is built and uploaded
through PyPI Trusted Publishing from a tagged release. The PyPI release
contains compiled extension wheels and no source archive. The Python audit
implementation is not included as readable .py files, but compiled code
can still be reverse engineered; no local software can guarantee secrecy
against someone who has the binary.
License
MIT. The license text is included in the distribution.
Release files for camoscope 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 1.4 MB
Release files / camoscope-0.1.1-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | camoscope-0.1.1-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 111.2 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
36cadf248a1132d382e5969480c40f0fd647508eaee2fca4be8cc086c820c794
|
|
BLAKE2b-256 checksum How to use checksums |
7cf504c85e6df8009d5c4735a5e91715faceff563f852c195dc3362e4fa50fef
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp314-cp314-macosx_10_15_x86_64.whl
| Download URL | camoscope-0.1.1-cp314-cp314-macosx_10_15_x86_64.whl |
|---|---|
| Size | 126.2 kB |
| Tags | CPython 3.14 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
dd10d93c54386fc4e43190c23f9744f8f72fb3a38ca9c0cd2940d3a56dcbfd93
|
|
BLAKE2b-256 checksum How to use checksums |
be95b5706daf5e77ad93af0673abfa842fcdb17bbea079cdad1bed9354c76f3c
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | camoscope-0.1.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 109.3 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f531ef6c34bb68907eb7b0da2ca3b52bddfa6da71a59119d2786efed270b122f
|
|
BLAKE2b-256 checksum How to use checksums |
2adebd2aea7df7011039d0c07084bbee9b2cb80d61646969294abe79cc5ca8c5
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | camoscope-0.1.1-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 125.3 kB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
a66eb3cdf4ead1cc6dea8b7d4eb73b7e56fc57bb1d7919751461a72d53f0563b
|
|
BLAKE2b-256 checksum How to use checksums |
04d54cb4b55fc2e79cb986d43adb66b3b3b83729fc4a225b85bfc34fdbd4beee
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | camoscope-0.1.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 110.1 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0bfdcd629b66ce67daea57b62e48ef1aaa8923431767c2489c2168596fee22a7
|
|
BLAKE2b-256 checksum How to use checksums |
6a54a4ece4e0d34f996c0b947033629f237e71478266580dbb540ac8fd5a36d0
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | camoscope-0.1.1-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 125.6 kB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
05a3e314d403a636d1c15d87fe847ccbc4783bee136223c835dfe7663638667a
|
|
BLAKE2b-256 checksum How to use checksums |
153bd81af1e6328b14115b8ef0be6fcc78a3a29bc7ebbfe5cfdbea86cde2d324
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | camoscope-0.1.1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 113.0 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d7f56788be27141022cc8c1b09b0ade40c86c42c74ca5cf5d3d6bcc0fced0749
|
|
BLAKE2b-256 checksum How to use checksums |
824b6e27427bfca9e654ad6878420c17fdb61dabffc640f8c3a74b24879a1d22
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | camoscope-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 126.4 kB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
20388d92740b01edc1a61bd7f27334ca8e643c9ae4c35b9e45ef93102a390944
|
|
BLAKE2b-256 checksum How to use checksums |
81ee49070999ff063867eb9a263a7bb60fe215080a28403429aecf843c8202f4
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | camoscope-0.1.1-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 114.4 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9fa8469ec2106710e7f7cd6cde39c0de075680d8006a3edbcb545cb0983e324d
|
|
BLAKE2b-256 checksum How to use checksums |
9fa1bb1e3fb264e088a4f15cea0e7f07c695064228de1ac5b470ca8124ecbbdc
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | camoscope-0.1.1-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 127.6 kB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
27afb9fd89bf55ad204baecbc0b3bb927e43a2b9a061bfd04420b6f4f8c56dbf
|
|
BLAKE2b-256 checksum How to use checksums |
2b921f3beb2d8f610e16d50989f5b17c22448e1781e5854d9f6c718651999878
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | camoscope-0.1.1-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 115.0 kB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6117771e7a58a6a752ef0000b255dbd408104286ea35e3f9f0b3c58f66c64e68
|
|
BLAKE2b-256 checksum How to use checksums |
3218bff33ecab0b0d655fc13f7f4c3610dcb337cc892ce114c9d69e478b6cb70
|
| 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 27, 2026.
Transparency logRelease files / camoscope-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl
| Download URL | camoscope-0.1.1-cp39-cp39-macosx_10_9_x86_64.whl |
|---|---|
| Size | 128.5 kB |
| Tags | CPython 3.9 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
373b8f67aaf17ffedc380e53e4f9bb97466a173c236b4d438eaae39a8c73cb1d
|
|
BLAKE2b-256 checksum How to use checksums |
82c3ab7823dfeebbb81ba69d97158d93b2abd9a2251ff271f5079fe771207b8a
|
| 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 27, 2026.
Transparency log