Local security monitor that detects unauthorized screen capture, audio recording, and data exfiltration
Project description
FolkTech Sentinel
Local security monitor that watches your machine for unauthorized screen capture, data exfiltration, and suspicious app behavior. No cloud dependency — everything runs locally.
What It Does
- Process Monitor — Detects apps using screen capture APIs, video recording, or running with dangerous permissions
- Network Monitor — Tracks outbound connections from watched apps, resolves where data is going (IP → hostname → organization)
- TCC Monitor (macOS) — Watches for privacy permission changes (Screen Recording, Camera, Microphone, Accessibility)
Alert Levels
| Level | Meaning | Notification |
|---|---|---|
| RED | Active threat — screen capture detected, unknown destination receiving data | macOS banner + sound + log |
| YELLOW | Suspicious — known telemetry/analytics, new permission granted | macOS banner + sound + log |
| GREEN | Informational — normal traffic, scan complete | Log file only |
Setup
macOS
cd ~/Developer/sentinel
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Windows
cd C:\path\to\sentinel
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
Linux
cd /path/to/sentinel
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Commands
Run Continuously (Daemon Mode)
Scans every 5 seconds. Alerts pop up in real time. Press Ctrl+C to stop.
python sentinel.py
Saves baseline automatically on shutdown.
One-Time Scan
Run all monitors once and exit. Good for a quick check.
python sentinel.py --scan
Full Report
Shows current privacy permissions and all active network connections from watched apps.
python sentinel.py --report
Establish Baseline
Snapshots current network connections as "normal." Future scans flag anything new.
python sentinel.py --baseline
Run this once when you're confident your system is clean.
Log Files
Logs are written to sentinel/logs/ with one file per day:
logs/sentinel-2026-03-29.log
Format:
2026-03-29 14:51:30 | [RED] [process] Screen capture detected: Comet Helper (PID 896) — Pattern matched: 'video_capture.mojom'
Configuration
Edit config.py to customize:
- SCAN_INTERVAL — How often to scan (default: 5 seconds)
- WATCHED_APPS — Which apps to monitor network connections for
- SCREEN_CAPTURE_PATTERNS — Process patterns that indicate screen capture
- KNOWN_TELEMETRY — Known analytics services (flagged YELLOW instead of RED)
- KNOWN_FIRST_PARTY — Expected API endpoints (flagged GREEN)
Adding a watched app
Open config.py and add to the WATCHED_APPS list:
WATCHED_APPS = [
"claude",
"Comet", # Perplexity
"ChatGPT",
"YourNewApp", # ← add here
]
Marking a destination as safe
Add to KNOWN_FIRST_PARTY in config.py:
KNOWN_FIRST_PARTY = {
"anthropic": "Anthropic API",
"github.com": "GitHub", # ← add here
}
Cross-Platform Notes
| Feature | macOS | Windows | Linux |
|---|---|---|---|
| Process Monitor | Full support | Full support (psutil) | Full support (psutil) |
| Network Monitor | Full support | Full support (psutil) | Full support (psutil) |
| TCC Monitor | Full support | N/A (no TCC on Windows) | N/A (no TCC on Linux) |
| WHOIS Lookups | Built-in whois |
Needs whois installed |
Needs whois installed |
| Notifications | macOS banners (osascript) | Needs adaptation (win10toast or plyer) | Needs adaptation (notify-send) |
| Reverse DNS | Full support | Full support | Full support |
Windows/Linux Adaptations Needed
- Notifications — Replace
osascriptinalerts.py:- Windows: use
plyerorwin10toastpackage - Linux: use
notify-sendcommand
- Windows: use
- TCC Monitor — Only works on macOS. On Windows/Linux, the TCC monitor will simply skip (no crash).
- WHOIS — Install
whoiscommand or use Pythonipwhoispackage.
Recommended First Steps
- Run
python sentinel.py --reportto see what's on your machine right now - Review the permissions list — revoke anything you don't recognize
- Run
python sentinel.py --baselineto establish what's normal - Run
python sentinel.pyin a dedicated terminal to monitor continuously
Built by FolkTech AI
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file folktech_sentinel-1.0.0.tar.gz.
File metadata
- Download URL: folktech_sentinel-1.0.0.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2d1252250c35935d7427817beb54f4ad58669e591fcb41d08ba8564a07e50f3
|
|
| MD5 |
754b4729a63b54ce8bcbb028c1ee6c55
|
|
| BLAKE2b-256 |
01c0b0766795b76075f44bb5c9587414cb74e4bb18d1fd71fcf24e7b6e989484
|
Provenance
The following attestation bundles were made for folktech_sentinel-1.0.0.tar.gz:
Publisher:
publish.yml on FolkTechAI/FolkTech-Sentinel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
folktech_sentinel-1.0.0.tar.gz -
Subject digest:
a2d1252250c35935d7427817beb54f4ad58669e591fcb41d08ba8564a07e50f3 - Sigstore transparency entry: 1195483495
- Sigstore integration time:
-
Permalink:
FolkTechAI/FolkTech-Sentinel@ce984cd96276dceff62b3ead6ecda94e894119e1 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/FolkTechAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ce984cd96276dceff62b3ead6ecda94e894119e1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file folktech_sentinel-1.0.0-py3-none-any.whl.
File metadata
- Download URL: folktech_sentinel-1.0.0-py3-none-any.whl
- Upload date:
- Size: 22.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56fd8794296040acadbf2e270fb76a001dc40caf372e132387281ef8fd964f52
|
|
| MD5 |
c609c319ebc513d92d242746a558bec7
|
|
| BLAKE2b-256 |
3a9ea6ed75b97cb29e61517b99c785b2624a9593089e12f709f9a6e26ca936a2
|
Provenance
The following attestation bundles were made for folktech_sentinel-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on FolkTechAI/FolkTech-Sentinel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
folktech_sentinel-1.0.0-py3-none-any.whl -
Subject digest:
56fd8794296040acadbf2e270fb76a001dc40caf372e132387281ef8fd964f52 - Sigstore transparency entry: 1195483501
- Sigstore integration time:
-
Permalink:
FolkTechAI/FolkTech-Sentinel@ce984cd96276dceff62b3ead6ecda94e894119e1 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/FolkTechAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ce984cd96276dceff62b3ead6ecda94e894119e1 -
Trigger Event:
release
-
Statement type: