Install CheatNt in
Minutes
The CheatNt agent runs entirely on the student's machine — no cloud required during the session. Download the package, run the setup script, and start monitoring in under five minutes.
Choose Your Platform
macOS
Monterey 12.0+
cheatnt_client + cheatnt_server
Shell scripts (init, track, start…)
VS Code extension (.vsix)
install.sh dependency setup
macos-cheatnt-v1.0.zip · ~12 MB
Linux
Ubuntu 22.04+
apt / snap support will mirror the macOS feature set. Join our mailing list to be notified.
Windows
Windows 11
Native Windows support is on the roadmap. The web dashboard already works on all platforms.
Verify your download: sha256sum cheatnt-macos-latest.zip
· SHA-256 checksum published on the
About page.
Requirements
System
-
macOS 12 Monterey or later
-
Apple Silicon or Intel — both supported
-
~150 MB disk space for binaries + deps
Software
-
Visual Studio Code — for the extension
-
Python 3 — usually pre-installed on macOS
-
Bash or Zsh shell
Auto-installed by install.sh
Run once — the script handles everything below automatically
Installation Guide
Complete walkthrough — from download to first session
Install Homebrew (skip if already installed)
Homebrew is the package manager used by CheatNt's setup script to install its C++ dependencies. Open Terminal and paste:
# Install Homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Download & Extract the Package
Download the zip from the button above, then move it somewhere permanent — the scripts call the binary from that folder, so don't delete it after installation.
# Move to your Applications folder and unzip mv ~/Downloads/cheatnt-macos-latest.zip ~/Applications/ cd ~/Applications/ unzip cheatnt-macos-latest.zip cd cheatnt
Run the Setup Script
install.sh installs
all C++ library dependencies via Homebrew and makes all scripts executable.
You only need to run this once on a machine.
chmod +x install.sh && ./install.sh
Navigate to Your Project Folder
All CheatNt commands must be run from inside your project directory —
the folder where your source code lives. Each command determines its working directory from $(pwd).
cd ~/Desktop/MyProject # ← your actual project folder
Initialize the Session
Run cheatnt_init.sh
with the session keyword given to you by your instructor.
This creates a hidden .cheatnt/ directory containing
the local SQLite database.
~/Applications/cheatnt/cheatnt_init.sh <session-keyword> # Expected output: "initialized"
~/Applications/cheatnt to your PATH so you can call scripts without the full path. See the Troubleshooting section below.
Create & Track Your Files
Every file you want monitored must be created empty first, then tracked immediately — before adding any content. Tracking a file that already has content will be rejected.
# Create empty files first touch main.cpp utils.cpp # Track each file immediately ~/Applications/cheatnt/cheatnt_track.sh main.cpp ~/Applications/cheatnt/cheatnt_track.sh utils.cpp
touch filename) before writing any code.
Install the VS Code Extension
CheatNt needs its VS Code extension to capture keystroke-level events. Install it from the
.vsix file included in the downloaded package.
Option A — Command line (recommended)
code --install-extension ~/Applications/cheatnt/cheatnt-vscode.vsix
Option B — VS Code UI
- 1. Open VS Code and press ⌘ Shift P
- 2. Type
Extensions: Install from VSIXand press Enter - 3. Navigate to
~/Applications/cheatnt/and select the.vsixfile - 4. Click Reload when prompted
Start the Monitoring Agent
Start the agent from your project directory. It runs silently in the background, recording file-system and VS Code events into the local SQLite database.
~/Applications/cheatnt/cheatnt_start.sh # The agent is now running — start coding in VS Code!
Stop, Zip & Submit
When you're done, stop the agent, create the submission zip, and upload it to your instructor's CheatNt project portal.
# Stop monitoring ~/Applications/cheatnt/cheatnt_stop.sh # Create SUBMIT_ME.zip containing your code + monitoring data ~/Applications/cheatnt/cheatnt_zip.sh # Upload SUBMIT_ME.zip to your instructor's CheatNt portal
.cheatnt/ metadata directory. No other files from your machine are included.
Command Reference
All scripts must be run from your project directory
| Command | Arguments | What it does |
|---|---|---|
| cheatnt_init.sh | <keyword> | Initializes .cheatnt/ database in the current directory |
| cheatnt_track.sh | <filename> | Registers an empty file for monitoring — run before adding content |
| cheatnt_untrack.sh | <filename> | Removes a previously tracked file from monitoring |
| cheatnt_start.sh | — | Starts the background monitoring agent process |
| cheatnt_stop.sh | — | Stops the agent and flushes all pending events to the database |
| cheatnt_zip.sh | — | Creates SUBMIT_ME.zip with tracked files + monitoring data |
| cheatnt_clear.sh | — | Removes .cheatnt/ entirely — resets the session (irreversible) |
# Add to your shell profile to call scripts without the full path: export PATH="$HOME/Applications/cheatnt:$PATH" # Then reload: source ~/.zshrc
Troubleshooting
You tried to track a file that already has content. CheatNt requires files to be empty at tracking time so it can build an accurate insertion history from scratch.
Fix:
# Delete the file and recreate it empty rm myfile.cpp touch myfile.cpp cheatnt_track.sh myfile.cpp # Now open in VS Code and start writing
Every CheatNt command reads $(pwd) to find the .cheatnt/ directory. If you run the script from a different folder, it won't find it.
Fix: always run commands from your project root:
cd ~/Desktop/MyProject # ← must be here cheatnt_start.sh
The extension communicates with cheatnt_client over a Unix socket at /tmp/cheatnt.sock. If the socket isn't there, the client isn't running.
Checks:
# Verify the socket exists ls -la /tmp/cheatnt.sock # Verify the client process is running pgrep -x cheatnt_client # If neither, restart the agent cheatnt_stop.sh && cheatnt_start.sh
The scripts may have lost their executable bit, especially if the zip was transferred. Fix by making them executable again:
chmod +x ~/Applications/cheatnt/*.sh chmod +x ~/Applications/cheatnt/cheatnt_client chmod +x ~/Applications/cheatnt/cheatnt_server
macOS Gatekeeper blocks unsigned binaries from the internet. Remove the quarantine attribute to allow execution:
xattr -dr com.apple.quarantine ~/Applications/cheatnt/
Alternatively: System Settings → Privacy & Security → scroll to the blocked binary → click Allow Anyway.
The most common reasons for an empty report:
- •VS Code was not open during the session — the extension only sends events while VS Code is running.
- •Files were edited outside VS Code — file-system events are still recorded, but keystroke-level data requires the extension.
- •The agent was not running when edits were made — always start with
cheatnt_start.shbefore opening VS Code. - •Files were not tracked before editing — only tracked files appear in the report.
# Check which files are tracked: cat .cheatnt/tracked # Check how many events were recorded: sqlite3 .cheatnt/cheatnt.sqlite3 "SELECT COUNT(*) FROM vscode_events;"
Still stuck? We're happy to help.
Contact Support