Track your real coding effort — typing speed, AI usage, focus metrics, and developer personality.
Project description
⌨️ AI Typing Stats
Track your real coding effort.
A terminal-based developer productivity tool that tracks your typing behavior and tells you how much work you actually typed versus what came from AI or clipboard pastes.
✨ Features
- Real-time Dashboard — Live WPM, self vs AI bars, focus score, and correction count
- Paste Detection — Detects Cmd/Ctrl+V and rapid-input bursts as AI-assisted input
- Developer Personality — Classifies you as Code Monk 🧘, AI Collaborator 🤝, or Prompt Engineer 🚀
- Focus Score — Measures active typing time vs idle time
- Fun Alerts — Real-time messages like "Speed Demon ⚡" and "Perfection mode ON ✨"
- Session History — Tracks daily streaks, lifetime averages, and past sessions
- Beautiful Terminal UI — Powered by Rich
🚀 Installation
pip install aitypingstats
macOS Note
On macOS, you need to grant Accessibility permissions to your terminal app for keyboard tracking:
System Settings → Privacy & Security → Accessibility → Enable your terminal app
📖 Usage
Start a tracking session
aitype start
Type anywhere while the tracker is running. Press Ctrl+C to stop and see your results.
View session history
aitype stats
Reset all data
aitype reset
About
aitype about
📊 What It Tracks
| Metric | Description |
|---|---|
| Self Typed % | Characters you typed manually |
| AI/Pasted % | Characters from paste or rapid input |
| WPM | Words per minute |
| Corrections | Backspace + Delete count |
| Focus Score | Active typing time / total session time |
| Dev Type | Code Monk, AI Collaborator, or Prompt Engineer |
| Streak | Consecutive days with sessions |
🧑💻 Developer Personality Types
| Self Work % | Type | Emoji |
|---|---|---|
| ≥ 80% | Code Monk | 🧘 |
| 50–79% | AI Collaborator | 🤝 |
| < 50% | Prompt Engineer | 🚀 |
🏗️ Project Structure
aitypingstats/
├── pyproject.toml
├── requirements.txt
├── README.md
├── LICENSE
├── aitypingstats/
│ ├── __init__.py
│ ├── __main__.py
│ ├── cli.py # Typer CLI commands
│ ├── tracker.py # Keyboard tracking (pynput)
│ ├── analytics.py # Stats & classification
│ ├── ui.py # Rich dashboard & summary
│ └── storage.py # JSON session storage
└── tests/
├── __init__.py
└── test_analytics.py
🛠️ Development
git clone https://github.com/ritvikmudgal/aitypingstats.git
cd aitypingstats
python -m venv .venv
source .venv/bin/activate
pip install -e .
aitype start
📦 Publishing to PyPI
pip install build twine
python -m build
twine upload dist/*
📝 License
MIT — see LICENSE
👤 Author
Ritvik Mudgal
Built with ❤️ for developers who care about their craft.
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 aitypingstats-1.0.0.tar.gz.
File metadata
- Download URL: aitypingstats-1.0.0.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c5111a97adb1b572199c7be7e8627bf759769480aee585879970a79a9407473
|
|
| MD5 |
7ab8553938ae3c10f33866c68c7cdfb2
|
|
| BLAKE2b-256 |
b74ed0129e4ae6abbe3b4ab718f159199bf903f8c3349e3f185e6d83dca52802
|
Provenance
The following attestation bundles were made for aitypingstats-1.0.0.tar.gz:
Publisher:
publish.yml on ritvikmudgal/aitypingstats
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aitypingstats-1.0.0.tar.gz -
Subject digest:
5c5111a97adb1b572199c7be7e8627bf759769480aee585879970a79a9407473 - Sigstore transparency entry: 1073615810
- Sigstore integration time:
-
Permalink:
ritvikmudgal/aitypingstats@e0ae22fe8329e2c057e5992ecd086af100705018 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/ritvikmudgal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e0ae22fe8329e2c057e5992ecd086af100705018 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aitypingstats-1.0.0-py3-none-any.whl.
File metadata
- Download URL: aitypingstats-1.0.0-py3-none-any.whl
- Upload date:
- Size: 13.5 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 |
c31685848ec1189abd4dbebec7c6d239fa7eded6906f824fe5f3b182eabb0239
|
|
| MD5 |
33820a7197cf6bdf3423163aa38d2c1f
|
|
| BLAKE2b-256 |
971d3a1a8c5c4e7828a0b19aa5096f064ddeca68516de1348afd81b4a4cb4888
|
Provenance
The following attestation bundles were made for aitypingstats-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on ritvikmudgal/aitypingstats
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aitypingstats-1.0.0-py3-none-any.whl -
Subject digest:
c31685848ec1189abd4dbebec7c6d239fa7eded6906f824fe5f3b182eabb0239 - Sigstore transparency entry: 1073615865
- Sigstore integration time:
-
Permalink:
ritvikmudgal/aitypingstats@e0ae22fe8329e2c057e5992ecd086af100705018 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/ritvikmudgal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e0ae22fe8329e2c057e5992ecd086af100705018 -
Trigger Event:
push
-
Statement type: