Skip to main content

A defensive communication CLI for spotting manipulation, holding boundaries, and answering bullies without becoming one.

Project description

IRL Gaslight

Spot the spin. Hold the line. Keep your receipts.

A warm, keyboard-driven defensive communication CLI for recognizing manipulation, rehearsing boundaries, answering bullies without becoming one, and keeping factual local notes.

PyPI Python License GitHub stars

Install · Explore · Commands · Identity · Safety


██╗ ██████╗  ██╗
██║ ██╔══██╗ ██║        IRL GASLIGHT
██║ ██████╔╝ ██║        ─────────────
██║ ██╔══██╗ ██║        A calmer answer,
██║ ██║  ██║ ███████╗   right when pressure hits.
╚═╝ ╚═╝  ╚═╝ ╚══════╝

IRL Gaslight turns a terminal window into a small reality-check toolkit. Open the command palette, choose what happened, and leave with a response you can actually say—not another argument designed to exhaust you.

It does not teach gaslighting, coercion, humiliation, retaliation, or psychological abuse.

Install

pip install --upgrade irl-gaslight

Then open the interactive experience:

irl-gaslight

Use the arrow keys to move and press Enter to choose. On first launch, the shared IRL identity ritual can create your local profile and optionally link Google.

What is inside

Path What you get
Pattern check Phrase-based signals for 20 manipulation tactics
Boundaries Calm lines with consequences you control
Comebacks Calm, dry, and direct answers without abuse
Rehearsal Practice against realistic pressure scenarios
Incident log Factual notes stored only on your machine
Daily grounding One deterministic reality check each day
Favorites A personal response shelf stored locally
Safety resources Clear signals for stepping beyond a comeback
Shared identity Name, pronunciation, pronouns, avatar, and oath
Google OAuth Optional local account link shared across IRL tools

The library contains 110 curated defensive entries across work, school, family, dating, friendship, and online situations. The interface includes a daily streak, clipboard support, favorites, responsive ANSI title art, and the warm burnt-orange IRL-Wisdom command-palette aesthetic.

Commands

irl-gaslight spot "That never happened. You imagined it."
irl-gaslight boundary --context work
irl-gaslight comeback --tone dry
irl-gaslight rehearse
irl-gaslight log
irl-gaslight history
irl-gaslight clear-log
irl-gaslight daily
irl-gaslight favorites
irl-gaslight resources
irl-gaslight upgrade

Add --copy or -c to supported response commands:

irl-gaslight boundary --context school --copy

Interactive lesson cards also offer Copy, Save to favorites, Back, and Exit actions.

Shared IRL identity and Google OAuth

IRL Gaslight uses the same local identity system as IRL Wisdom. A profile created in one ecosystem CLI can appear in the others.

irl-gaslight profile
irl-gaslight profile edit
irl-gaslight profile reset
irl-gaslight avatar
irl-gaslight oath
irl-gaslight oauth configure path/to/client_secret.json
irl-gaslight oauth login
irl-gaslight oauth status
irl-gaslight oauth logout

The Google flow uses OAuth 2.0 Authorization Code with PKCE, a random state value, and a temporary localhost callback. The imported OAuth client is stored locally in ~/.irl/google_client.json, tokens in ~/.irl/google_oauth.json, and profile data in ~/.irl/profile.json. Secrets are never committed or bundled into the package.

Google linking is optional. Cancelling, going offline, or skipping login does not block the defensive tools.

For a browserless terminal:

irl-gaslight oauth login --no-browser

The upgrade ritual

IRL Gaslight checks PyPI, compares versions, and asks before installing:

irl-gaslight upgrade

For scripts and confident terminals:

irl-gaslight upgrade --yes

How it works

irl-gaslight
├── Typer commands
├── Questionary command palette
├── Rich terminal rendering
├── Local JSON defensive library
├── irl_identity
│   ├── first-launch profile ritual
│   ├── avatars and Wisdom oath
│   └── Google OAuth with PKCE
├── ~/.irl_gaslight.json
│   ├── favorites
│   ├── incident notes
│   └── daily streak
└── ~/.irl
    ├── profile.json
    └── google_oauth.json

There is no application database, telemetry, or cloud sync. Gaslight state, the shared profile, and OAuth tokens stay on the local device.

Safety first

The detector is a phrase-based educational aid, not a diagnosis. Context, repetition, power imbalance, and safety matter more than one sentence.

Do not use a comeback when it could increase danger. If someone is threatening, stalking, controlling, or violent, prioritize distance, trusted support, and local emergency or abuse-support services. Use irl-gaslight resources for the built-in safety checklist.

Development

git clone https://github.com/Dev2Creator/irl-gaslight.git
cd irl-gaslight
python -m venv .venv
.venv\Scripts\activate
python -m pip install -e .
irl-gaslight

Build and validate a release:

python -m pytest -q
python -m build
python -m twine check dist/*

Author

Created by Anika Mukherjee

Email: cuteypieanika@gmail.com

GitHub: @Dev2Creator

Copyright and license

Copyright © 2026 Anika Mukherjee.

The source code is licensed under the GNU Affero General Public License v3 or later.


Built for people who want their footing back before they choose their next words.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

irl_gaslight-0.2.1.tar.gz (48.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

irl_gaslight-0.2.1-py3-none-any.whl (50.5 kB view details)

Uploaded Python 3

File details

Details for the file irl_gaslight-0.2.1.tar.gz.

File metadata

  • Download URL: irl_gaslight-0.2.1.tar.gz
  • Upload date:
  • Size: 48.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for irl_gaslight-0.2.1.tar.gz
Algorithm Hash digest
SHA256 88fbcc2cb9447059ae7daade29f408a6f81930e7d509460843b8202255eefec5
MD5 b06b1752a73aee965bf9e4feb06fb2c9
BLAKE2b-256 7101d6ab6e7a966a8601ef8b253574c1158384437e7ce2301607862bbbb80c80

See more details on using hashes here.

File details

Details for the file irl_gaslight-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: irl_gaslight-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 50.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for irl_gaslight-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a68f7d7784310ef0524d9920411a733394201ed110f43e94be0f307a22bfe4d6
MD5 55cb4be47b39917e3926c96e9b46fbee
BLAKE2b-256 2751b10685ce9a2819785418723f0a2d237e514e040354ac96d618cfdd7f5422

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page