# Codex Reset Alerts 🚀 Petit watcher Node.js qui surveille ton quota global **OpenAI Codex** et envoie des notifications **ntfy** au lancement, puis dès que ce quota global est de nouveau disponible. L'idée est simple : lorsque Codex indique que ton quota global est épuisé, tu lances le watcher et tu peux passer à autre chose. Il surveille le quota global en arrière-plan, t'envoie une notification lors du reset réel, puis s'arrête automatiquement. ## Fonctionnement ```text Quota global Codex épuisé 🔴 │ ▼ npm start │ ▼ Codex App Server │ ├── account/rateLimits/read │ └── account/rateLimits/updated │ ▼ Surveillance du quota global │ ▼ Quota global disponible 🟢 │ ▼ ntfy │ ▼ 📱 Notification │ ▼ Arrêt du watcher ``` Le watcher utilise deux mécanismes : * les événements `account/rateLimits/updated` envoyés par Codex ; * un polling périodique comme filet de sécurité. Codex expose deux fenêtres de quota : `primary` sur 300 minutes, soit 5h, et `secondary` sur 10080 minutes, soit 7 jours. Le watcher ignore la fenêtre 5h et utilise uniquement la fenêtre globale. Le timestamp `resetsAt` global fourni par Codex est également surveillé, mais il n'est **pas considéré comme une garantie** : le quota global peut être réinitialisé avant la date annoncée. Une notification de démarrage est envoyée dès le lancement. La notification de reset n'est envoyée que lorsqu'un passage réel de **quota global épuisé → quota global disponible** est détecté. ## Prérequis * Linux / WSL * Node.js 20+ * OpenAI Codex CLI * un compte ChatGPT connecté dans Codex * l'application ntfy sur ton téléphone ## Installation Clone le dépôt : ```bash git clone ssh://git@git.shinuwa.fr:2222/shinuwa/codex-reset-alerts.git cd codex-reset-alerts ``` Installe Codex CLI si nécessaire : ```bash npm install -g @openai/codex ``` Vérifie l'installation : ```bash codex --version ``` Puis lance une première fois Codex pour t'authentifier : ```bash codex ``` ## Configuration Crée un fichier `.env` à la racine : ```env NTFY_URL=https://ntfy.sh NTFY_TOPIC=mon-topic-secret NTFY_TOKEN= POLL_INTERVAL_SECONDS=60 ``` ### `NTFY_URL` Adresse du serveur ntfy. Par défaut : ```text https://ntfy.sh ``` Tu peux également utiliser une instance ntfy auto-hébergée. ### `NTFY_TOKEN` Token d'accès pour un serveur ntfy privé. Laisse vide si ton topic ne demande pas d'authentification. ### `NTFY_TOPIC` Topic sur lequel la notification sera envoyée. Abonne ton téléphone au même topic dans l'application ntfy. > Sur un serveur ntfy public, utilise de préférence un nom de topic long et difficile à deviner. ### `POLL_INTERVAL_SECONDS` Intervalle entre deux vérifications du quota. Par défaut : ```text 60 secondes ``` Les événements envoyés directement par Codex permettent généralement de détecter les changements plus rapidement ; le polling sert principalement de sécurité. ## Utilisation Lorsque ton quota global Codex est épuisé : ```bash npm start ``` Si le quota est effectivement épuisé : ```text 📱 Notification ntfy de démarrage envoyée. 🔌 Connexion à Codex App Server... ✅ Connecté. 🔎 Source : démarrage 📊 Global utilisé : 100% 📊 Fenêtre 300min ignorée : 100% 🔴 État : quota global épuisé 🕒 Reset global annoncé : jeudi 20 août 2026 à 13:58:03 ⏳ Temps théorique global : 3j 1h 55min 🔴 Quota global épuisé. 👀 Surveillance du reset global activée. 👀 Polling toutes les 60s. ``` Tu peux alors laisser le watcher tourner. Lorsqu'un reset global est détecté : ```text 🎉 RESET GLOBAL RÉEL DÉTECTÉ ! 📉 100% → 0% 📱 Notification ntfy envoyée. ✅ Mission terminée. 👋 Arrêt du watcher. ``` Tu recevras en parallèle une notification sur ton téléphone : ```text 🚀 Ton quota global Codex est de nouveau disponible ! Avant : 100% utilisé Maintenant : 0% utilisé ``` Le watcher s'arrête ensuite automatiquement. ## Si le quota global n'est pas épuisé Tu peux lancer le programme sans risque : ```bash npm start ``` S'il reste du quota global, le watcher ne reste pas inutilement actif : ```text 📊 Global utilisé : 42% 📊 Fenêtre 300min ignorée : 100% 🟢 État : quota global disponible ✅ Ton quota global Codex est encore disponible. 👋 Rien à surveiller, arrêt. ``` ## Tester ntfy Tu peux vérifier manuellement que ton téléphone reçoit bien les notifications : ```bash curl \ -H "Title: Test Codex" \ -H "Tags: robot" \ -H "Authorization: Bearer TON_TOKEN" \ -d "Hello depuis Codex Reset Alerts 🚀" \ https://ntfy.shinuwa.fr/TON_TOPIC ``` ## Lancer le watcher en arrière-plan Pour éviter de garder ton terminal ouvert, tu peux par exemple utiliser `tmux` : ```bash tmux new -s codex-reset npm start ``` Puis détache la session avec : ```text Ctrl+B puis D ``` Pour y retourner : ```bash tmux attach -t codex-reset ``` ## Sécurité Le fichier `.env` ne doit pas être versionné. Vérifie que `.gitignore` contient : ```gitignore .env node_modules/ ``` Évite également d'utiliser un nom de topic ntfy facilement devinable si tu utilises le serveur public. ## Pourquoi ? Parce qu'appuyer sur `/usage` toutes les 20 minutes pour voir si Codex a décidé de rendre du quota, c'est moins amusant que de recevoir : > 🚀 Codex disponible et retourner coder. ## Licence MIT