"Hunting Fable 5, so you don't have to."
A lightweight watcher that monitors the Claude Code CLI around the clock for Claude Fable 5 to become available again, and sends you a notification the very moment it is back — across all your devices.
| Date | Event |
|---|---|
| 2026-06-09 | Anthropic releases Claude Fable 5 (Mythos-class): the most capable publicly available model, exceptional at software engineering, science and vision. Available on Claude API, Amazon Bedrock, GitHub Copilot and Claude Code. |
| 2026-06-12 | The US government issues an export-control directive. Anthropic suspends access for all users worldwide. Anthropic publicly disagrees and is "working to restore access as soon as possible" — no timeline given. |
| Today | Fable 5 is down everywhere. Thousands of Claude Code users are waiting. This hunter tells you the second it is back. |
Source: Anthropic — Fable 5 & Mythos 5 Status
The hunter talks directly to the model using the Claude Code CLI you already have — no API key required:
claude -p "<unique token>" --model claude-fable-5| State | Exit code | Output |
|---|---|---|
| Unavailable (current) | 1 |
Claude Fable 5 is currently unavailable. Learn more: … |
| Available (target) | 0 |
the model echoes the unique token back |
Available is only declared when the unique token appears in stdout and the exit code is 0. This makes false positives from error messages or fallback models impossible.
Important: The model ID must be exactly
claude-fable-5. A typo likeclaude-fabel-5produces the same "unavailable" error — and the hunter would never fire. The default is set correctly, so just leavemodel_idunchanged unless Anthropic publishes an alias.
# 1. One-shot check (prints status, exits 0/1/2)
python fable_hunter.py check
# 2. Test notifications (fires all active channels)
python fable_hunter.py test-notify
# 3. Start as a persistent daemon (checks every 30 min, daily heartbeat)
python fable_hunter.py runZero dependencies — Python standard library only (Python >= 3.9).
No pip install, no virtual environment needed.
Before relying on the hunter, run the self-test to confirm that both the detection trigger and every configured delivery channel work:
python fable_hunter.py --test # or: python fable_hunter.py testThis does two things:
- Runs the real detection once (
check_fable5) and prints the current status. - Sends a clearly marked TEST notification through all configured
notifiers (telegram, discord, ntfy, desktop, file). The message contains the
real "HOORAY, IT'S BACK!" alert text, prefixed with
TEST --and a(delivery test only)note — so you see exactly what the real alert will look like, and confirm a TEST message arrives on every channel.
Per-channel OK / FAILED is printed. Exit code is 0 if at least one channel
delivered, otherwise 1.
All active notifiers fire for every alert. The "HOORAY" notification is only
considered delivered once at least one channel returns success — guaranteeing
you will not miss the moment. If no channel gets through, the hunter retries
quickly (alert_retry_seconds, default 60s) without spamming on success.
| Notifier | Setup required | Best for |
|---|---|---|
desktop |
None — works out of the box | Windows Toast / macOS / Linux notify-send |
file |
None — last-resort fallback | Writes FABLE5_IS_BACK.txt to your Desktop |
telegram |
Bot token + chat ID | Push to phone via Telegram (recommended) |
discord |
Webhook URL | Discord channel or DM |
ntfy |
Pick a topic name | Lowest barrier: no account, free push via ntfy app |
Default (["desktop", "file"]) works for 100 % of users without any configuration.
Add telegram, discord or ntfy to notifiers in your config.json to reach your phone.
Pro tip: Telegram and Discord reach your phone even when your computer is off. If you run the hunter on an always-on machine (e.g. a home server or Mac Studio), these channels ensure you get the alert no matter where you are.
A single-instance lock (~/.config/fable5hunter/hunter.lock, heartbeat-based)
prevents a second accidental start from sending a duplicate alert.
- Open Telegram, search for @BotFather, create a new bot → copy the token.
- Send any message to your new bot, then visit:
https://api.telegram.org/bot<TOKEN>/getUpdates→ note thechat.id. - Either add them to
config.jsonunder"telegram"or set environment variablesTELEGRAM_BOT_TOKEN/TELEGRAM_OWNER_ID.
- Install the ntfy app on your phone.
- Subscribe to any unique topic name (e.g.
fable5-myname). - Set
"ntfy": {"topic": "fable5-myname"}inconfig.jsonand add"ntfy"to"notifiers".
Windows (no administrator rights needed):
powershell -ExecutionPolicy Bypass -File install\install_windows.ps1Registers the Task Scheduler task Fable5Hunter (start at login, restart on crash, hidden).
Remove: add -Uninstall to the command above.
macOS:
bash install/install_macos.shCreates the LaunchAgent com.fable5hunter.agent (RunAtLoad + KeepAlive).
Remove: bash install/install_macos.sh --uninstall.
Copy config.example.json to config.json and adjust as needed.
Search order: $FABLE5_CONFIG env var → ./config.json → ~/.config/fable5hunter/config.json.
| Key | Default | Description |
|---|---|---|
model_id |
claude-fable-5 |
Model ID to check |
check_interval_minutes |
30 |
Polling interval while unavailable |
post_found_interval_minutes |
360 |
Slower interval after detection |
claude_timeout_seconds |
120 |
Timeout per claude call |
notifiers |
["desktop","file"] |
Active notification channels |
alert_retry_seconds |
60 |
Retry interval when no channel gets through |
lang |
"en" |
UI language: "en", "de", "es", "zh", "ja", "ru", "auto" |
telegram.bot_token |
"" |
Telegram bot token |
telegram.owner_id |
"" |
Telegram chat ID |
discord.webhook_url |
"" |
Discord webhook URL |
ntfy.topic |
"" |
ntfy topic name |
ntfy.server |
"https://ntfy.sh" |
ntfy server (default: public ntfy.sh) |
messages.* |
(locale file) | Override built-in notification texts |
State (detection result, last heartbeat date) is stored in ~/.config/fable5hunter/state.json.
Built-in messages ship in six languages: English (en, default), German (de),
Spanish (es), Chinese (zh), Japanese (ja) and Russian (ru).
Set e.g. "lang": "de" in config.json, or "lang": "auto" to detect from the OS locale.
Additional languages can be added by placing a locales/<lang>.json file next to the script
(see locales/en.json for the key reference). Override individual messages at any time via
cfg.messages.* without touching locale files.
- First run: sends an immediate heartbeat ("the hunter is watching") so you know it started.
- While unavailable: one heartbeat per day, no spam.
- When found: "HOORAY, IT'S BACK!" fires once across all active channels. Guaranteed delivery.
- If it disappears again: automatically resumes hunting and notifies you.
| Exit code | Meaning |
|---|---|
0 |
Available |
1 |
Unavailable |
2 |
Error (e.g. claude CLI not found) |
MIT — see LICENSE.
Copyright 2026 Lukas Geiger.
