ArgeliusLabs/Chasing-Your-Tail-NG
ArgeliusLabs/Chasing-Your-Tail-NG has 2,536 GitHub stars and 450 forks. GitHot measured +2 stars in 24 hours and +66 in 7 days. Last checked 2026-11-12 15:13 UTC. Last push 2025-07-23.
A MUCH improved version of the Python Chasing Your Tail tool to help you determine whether you're being followed
Measured star growth
- in 24h
- +2
- in 7 days
- +66
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalChasing Your Tail — experimental portable observation runtime
CYT reports recurring nearby advertised radio identifiers. Modern phones often send wildcard probes and change addresses. CYT counts observed transmissions without requiring remembered network names and keeps changing addresses separate.
The repository now includes a Kismet packet adapter, persistent storage, a CLI, and a local browser dashboard, merged in PR #38. It is an experimental alpha, with synthetic software tests and no completed Pi/Pager field validation. The original scripts remain separate. Follow the rewrite tracker for the remaining work.
Try it without hardware
Python 3.10 or newer is required. The runtime and tests use only the standard library. Run these commands from the repository root:
python -B -m unittest discover -s tests -v
python -B -m cyt_core replay research/example-route.jsonl --at 1200
python -B research/make_demo.py --output demo-observations.jsonl
python -B -m cyt_core import-jsonl demo-observations.jsonl --db demo.sqlite3
python -B -m cyt_core serve --db demo.sqlite3
Open http://127.0.0.1:8765. The generated observations are labeled synthetic-demo and use current timestamps. The fixed replay fixture uses old timestamps for deterministic tests. The demo generator refuses to overwrite an existing file; use a new output name for another demo. Keep demo and real captures in separate stores.
No WiGLE account, API credentials, desktop toolkit, or network connection is needed for this demo. Stop the server with Ctrl+C. For an installed cyt command, create a virtual environment and run python -m pip install --no-deps .; see setup and operation.
Read a Kismet capture
The adapter targets Kismet database schema v11, based on kismet-2026-10-R1, with packet logging enabled. Kismet must already be configured and capturing; CYT does not configure radios or start Kismet.
python -B -m cyt_core ingest /path/to/capture.kismet --db cyt.sqlite3 --session trip-001 --observer pi-01
python -B -m cyt_core report --db cyt.sqlite3 --window-seconds 1200
python -B -m cyt_core status --db cyt.sqlite3
For a growing capture directory, run this collector in one terminal and the dashboard in another:
python -B -m cyt_core ingest "/path/to/captures/*.kismet" --db cyt.sqlite3 --session trip-001 --observer pi-01 --follow
python -B -m cyt_core serve --db cyt.sqlite3
Use paths for your machine. Quote the glob so newly rotated files can be discovered. Reuse the session name when restarting the same trip; use a new name for a new trip. The dashboard binds only to 127.0.0.1 and offers read-only access. An SSH tunnel can provide access from another computer; see the runtime guide.
What this version does
- Reads supported Wi-Fi probe requests, beacons, and data headers from packet records, using their source timestamps.
- Preserves empty and binary SSIDs. Named probe strings remain optional evidence.
- Commits observations and ingestion checkpoints together. Restarts and unchanged inputs do not manufacture sightings.
- Follows growing and rotated captures; reports missing, unsupported, malformed, and stale input.
- Stores observations in a separate SQLite database, with a configurable row cap and follow-mode age retention.
- Persists normalized known-address exclusions through
cyt knowncommands. - Produces JSON reports and JSONL exports; displays results in a small local dashboard.
The output labels are observed, recurring, and recurring_across_locations. Positions describe where the observer heard a transmission. Recurrence does not prove device identity, a person's identity, intent, or following. An empty display does not establish safety or complete capture coverage.
GPS and BLE: validated positions and BLE observations can be supplied through JSONL. The Kismet adapter currently ingests Wi-Fi packets only and supplies no qualified GPS fixes: its packet table lacks the fix time and accuracy needed by CYT's route rules. Live GPS integration, BLE capture, and Pager deployment remain work to do.
Development and evidence
| Resource | Purpose |
|---|---|
| Runtime guide | Installation, commands, storage, source contract, troubleshooting, and limits |
| Capability assessment | Phone privacy behavior, legacy audit, hardware feasibility, and product direction |
| Field validation plan | Radio, GPS, route, nuisance-alert, and endurance checks |
| Earlier core design | Original replay milestone and migration rationale |
| Rewrite tracker | Community requirements and remaining release gates |
All 53 tests and the installation smoke checks passed on Windows and Linux with Python 3.10 and 3.13 for the merged runtime (CI run). The tests use synthetic captures, including active SQLite WAL writes, restart, rollback, rotation, duplicate input, retention, event-time windows, and HTTP behavior. They do not measure RF detection performance.
Legacy code and contributions
The original scripts remain for migration and audit reproducibility; they do not call this runtime. The old requirements.txt belongs to those scripts. The separate research/reproduce_ng_findings.py reproduces legacy defects and requires the legacy cryptography dependency. It is not the new runtime's acceptance suite.
Community reports informed the rewrite, including the ignore-file proposal in PR #8. Small changes with replayable examples are welcome. Existing issues close when their supported behavior is delivered and verified or explicitly deferred with a rationale. See the tracker before beginning a second UI or collector implementation.
Released under the MIT License.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
562,220 starspublic-apis/public-apis
A collective list of free APIs
498,622 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
456,271 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,423 stars