Skip to content

Commit f506895

Browse files
committed
v1.3.3
Context: Issue #38 reported Telegram notifications failing after following the documented NOTIFY_TELEGRAM example. Apprise 1.11.0 accepts tgram:// and rejects tg://, so the fix needs corrected docs plus runtime compatibility for existing compose files. What changed: Updated Telegram examples to tgram://, normalized legacy tg:// values before Apprise receives them, added dry-run/debug diagnostics with redacted output, covered notification parsing with unittest, and disabled Docker metadata's automatic latest tag so slim builds cannot publish latest. Verification: Ran python -m py_compile scripts/notify.py tests/test_notify.py; python -m unittest discover -s tests -p "test_*.py"; verified Apprise 1.11.0 rejects tg:// and accepts tgram://; validated compose configs; built and smoke-tested slim/full images with dry-run notification diagnostics; parsed docker-publish.yml with js-yaml; verified v1.3.2 workflow attempt 2 succeeded and Docker Hub tags point to expected full/slim digests. Release: v1.3.3 fixes issue #38 and hardens Docker release tagging. Constraint: Existing users may already have NOTIFY_TELEGRAM=tg://... in compose files Rejected: Docs-only fix | existing containers would still fail after following the old value Confidence: high Scope-risk: moderate Directive: Keep tgram:// as the documented Telegram scheme; do not remove legacy tg:// normalization without a migration window Tested: py_compile; unittest; Apprise 1.11.0 URL acceptance; compose config; local slim/full Docker builds; slim/full dry-run smoke; workflow YAML parse; v1.3.2 release workflow/tag verification Not-tested: v1.3.3 GitHub release workflow before tag push Related: #38
1 parent 2b0369b commit f506895

22 files changed

Lines changed: 274 additions & 44 deletions

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ workspace/
1919
.omc/
2020
evidence/
2121
.evidence/
22+
tests/
2223

2324
# Environment and credentials
2425
.env

.github/workflows/docker-publish.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ jobs:
7070
images: |
7171
${{ env.DOCKERHUB_IMAGE }}
7272
${{ env.GHCR_IMAGE }}
73+
flavor: |
74+
latest=false
7375
tags: |
7476
type=raw,value=latest,enable=${{ matrix.variant == 'full' }}
7577
type=raw,value=slim,enable=${{ matrix.variant == 'slim' }}

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ services:
398398
# inside the container: touch ~/.claude/notify-on
399399
#
400400
# - NOTIFY_DISCORD=discord://webhook_id/webhook_token
401-
# - NOTIFY_TELEGRAM=tg://bot_token/chat_id
401+
# - NOTIFY_TELEGRAM=tgram://bot_token/chat_id
402402
# - NOTIFY_PUSHOVER=pover://user_key@app_token
403403
# - NOTIFY_SLACK=slack://token_a/token_b/token_c
404404
# - NOTIFY_EMAIL=mailto://user:pass@gmail.com?to=you@gmail.com
@@ -955,10 +955,17 @@ Walk away from your computer and know when a task is done. Claude Code hooks, ra
955955
1. Add one or more `NOTIFY_*` variables to your compose `environment`:
956956
```yaml
957957
- NOTIFY_DISCORD=discord://webhook_id/webhook_token
958-
- NOTIFY_TELEGRAM=tg://bot_token/chat_id
958+
- NOTIFY_TELEGRAM=tgram://bot_token/chat_id
959959
```
960960
2. Inside the container: `touch ~/.claude/notify-on`
961961

962+
Telegram uses Apprise's `tgram://` scheme. Legacy Telegram values are still accepted, but new setups should use `tgram://`.
963+
964+
Test the setup without sending a message:
965+
```bash
966+
docker compose exec holyclaude /usr/local/bin/notify.py test --dry-run --debug
967+
```
968+
962969
See [configuration docs](docs/configuration.md#notifications-apprise) for all supported variables and URL formats.
963970

964971
**To disable:** `rm ~/.claude/notify-on`

config/claude-memory-full.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ Optional push notifications via [Apprise](https://github.com/caronc/apprise) —
141141
1. Set one or more `NOTIFY_*` environment variables (e.g. `NOTIFY_DISCORD`, `NOTIFY_TELEGRAM`, `NOTIFY_PUSHOVER`)
142142
2. Create the flag file: `touch ~/.claude/notify-on`
143143

144+
Telegram uses `NOTIFY_TELEGRAM=tgram://bot_token/chat_id`. Check setup without sending: `/usr/local/bin/notify.py test --dry-run --debug`.
145+
144146
**To disable:** `rm ~/.claude/notify-on`
145147

146148
**Events:**

config/claude-memory-slim.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ Optional push notifications via [Apprise](https://github.com/caronc/apprise) —
172172
1. Set one or more `NOTIFY_*` environment variables (e.g. `NOTIFY_DISCORD`, `NOTIFY_TELEGRAM`, `NOTIFY_PUSHOVER`)
173173
2. Create the flag file: `touch ~/.claude/notify-on`
174174

175+
Telegram uses `NOTIFY_TELEGRAM=tgram://bot_token/chat_id`. Check setup without sending: `/usr/local/bin/notify.py test --dry-run --debug`.
176+
175177
**To disable:** `rm ~/.claude/notify-on`
176178

177179
## Workspace

docker-compose.full.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ services:
4848

4949
# --- Notifications (uncomment services you want) ---
5050
# - NOTIFY_DISCORD=discord://webhook_id/webhook_token
51-
# - NOTIFY_TELEGRAM=tg://bot_token/chat_id
51+
# - NOTIFY_TELEGRAM=tgram://bot_token/chat_id
5252
# - NOTIFY_PUSHOVER=pover://user_key@app_token
5353
# - NOTIFY_SLACK=slack://token_a/token_b/token_c
5454
# - NOTIFY_EMAIL=mailto://user:pass@gmail.com?to=you@gmail.com

docs/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ All notable changes to HolyClaude will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
66

7+
## [1.3.3] - 06/15/2026
8+
9+
### Fixed
10+
- Corrected Telegram notification examples to use Apprise's `tgram://bot_token/chat_id` scheme and kept legacy `tg://` values working at runtime.
11+
- Added a dry-run notification diagnostic so users can check `notify-on`, `NOTIFY_*` variables, and Apprise URL acceptance without sending a message.
12+
- Kept Docker release metadata from auto-adding `latest` to slim builds, so `latest` stays tied to the full image.
13+
714
## [1.3.2] - 06/15/2026
815

916
### Changed

docs/configuration.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Claude Code hooks, raw CLI hooks for Codex and Gemini CLI, and CloudCLI Codex ch
6868
| Variable | Default | Description |
6969
|----------|---------|-------------|
7070
| `NOTIFY_DISCORD` | *(unset)* | Discord webhook — `discord://webhook_id/webhook_token` |
71-
| `NOTIFY_TELEGRAM` | *(unset)* | Telegram bot — `tg://bot_token/chat_id` |
71+
| `NOTIFY_TELEGRAM` | *(unset)* | Telegram bot — `tgram://bot_token/chat_id` |
7272
| `NOTIFY_PUSHOVER` | *(unset)* | Pushover — `pover://user_key@app_token` |
7373
| `NOTIFY_SLACK` | *(unset)* | Slack webhook — `slack://token_a/token_b/token_c` |
7474
| `NOTIFY_EMAIL` | *(unset)* | Email (SMTP) — `mailto://user:pass@gmail.com?to=you@gmail.com` |
@@ -77,6 +77,13 @@ Claude Code hooks, raw CLI hooks for Codex and Gemini CLI, and CloudCLI Codex ch
7777

7878
Notifications also require the flag file `~/.claude/notify-on` to exist inside the container. Create it with `touch ~/.claude/notify-on`.
7979

80+
Telegram uses Apprise's `tgram://` scheme. Legacy Telegram values are normalized for compatibility, but new setups should use `tgram://`.
81+
82+
Validate notification setup without sending a message:
83+
```bash
84+
docker compose exec holyclaude /usr/local/bin/notify.py test --dry-run --debug
85+
```
86+
8087
**Migrating from Pushover (v1.0.0):** Replace `PUSHOVER_APP_TOKEN` and `PUSHOVER_USER_KEY` with a single variable: `NOTIFY_PUSHOVER=pover://user_key@app_token`
8188

8289
### AI Provider API Keys

docs/dockerhub-description.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ Credentials stored locally in your bind-mounted `./data/claude` directory. We do
8383
| `PGID` | Container user GID | `1000` |
8484
| `CHOKIDAR_USEPOLLING` | Enable polling for NAS/SMB mounts | unset |
8585
| `NOTIFY_DISCORD` | Discord webhook URL for notifications | unset |
86-
| `NOTIFY_TELEGRAM` | Telegram bot URL for notifications | unset |
86+
| `NOTIFY_TELEGRAM` | Telegram bot URL (`tgram://bot_token/chat_id`) | unset |
8787
| `NOTIFY_PUSHOVER` | Pushover URL for notifications | unset |
8888
| `NOTIFY_SLACK` | Slack webhook URL for notifications | unset |
8989
| `NOTIFY_URLS` | Catch-all Apprise notification URLs | unset |

docs/translations/README.de.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ services:
397397
# inside the container: touch ~/.claude/notify-on
398398
#
399399
# - NOTIFY_DISCORD=discord://webhook_id/webhook_token
400-
# - NOTIFY_TELEGRAM=tg://bot_token/chat_id
400+
# - NOTIFY_TELEGRAM=tgram://bot_token/chat_id
401401
# - NOTIFY_PUSHOVER=pover://user_key@app_token
402402
# - NOTIFY_SLACK=slack://token_a/token_b/token_c
403403
# - NOTIFY_EMAIL=mailto://user:pass@gmail.com?to=you@gmail.com
@@ -907,7 +907,7 @@ Geh von deinem Computer weg und erfahre, wenn Claude fertig ist. Verwendet [Appr
907907
1. Füge eine oder mehrere `NOTIFY_*`-Variablen zur compose `environment` hinzu:
908908
```yaml
909909
- NOTIFY_DISCORD=discord://webhook_id/webhook_token
910-
- NOTIFY_TELEGRAM=tg://bot_token/chat_id
910+
- NOTIFY_TELEGRAM=tgram://bot_token/chat_id
911911
```
912912
2. Im Container: `touch ~/.claude/notify-on`
913913

0 commit comments

Comments
 (0)