agentsclimarketplace

Push and notify

Skill techstay/some-skills/skills/push-and-notify

A collection of AI agent skills that extend LLM capabilities with Obsidian task management, multi-backend web search, and more.

Install
npx -y skills add techstay/some-skills --skill push-and-notify

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Push message notifications to multiple endpoints. Supports Telegram, ntfy, and WxPusher. Use when the user asks to send a notification, push a message, alert via Telegram/ntfy/WxPusher, or notify endpoints. Each subcommand takes a title and content; services without native title support merge them internally.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.2 KB, as published. Nobody here has run it

Push and Notify

Sends push notifications to Telegram, ntfy, or WxPusher from a single CLI script. Each service is an independent subcommand — set credentials only for the ones you use.

Quick Reference

cd skills/push-and-notify/scripts

# Telegram
uv run notify.py telegram "Server Alert" "CPU usage exceeded 90%"

# ntfy
uv run notify.py ntfy "Build Done" "Deployment completed successfully"

# WxPusher
uv run notify.py wxpusher "Hello" "world"

# No title (pass empty string)
uv run notify.py telegram "" "Quick message without a title"

Subcommands

SubcommandServiceNative titleExample
telegramTelegramNouv run notify.py telegram "Title" "Content"
ntfyntfyYesuv run notify.py ntfy "Title" "Content"
wxpusherWxPusherYesuv run notify.py wxpusher "Title" "Content"

Services without native title support (Telegram) merge the title into the message body.


Setup

  1. Copy scripts/.env.example to scripts/.env.
  2. Fill in the variables for the service(s) you want to use.
  3. .env is gitignored and never committed.

Each subcommand is independent — set only the environment variables for the service you intend to use.

Telegram

VariableRequiredDescription
TELEGRAM_BOT_TOKENYesBot token from @BotFather
TELEGRAM_CHAT_IDYesTarget chat ID or user ID

ntfy

VariableRequiredDescription
NTFY_TOPICYesntfy topic name
NTFY_SERVERNontfy server URL (default: https://ntfy.sh)
NTFY_TOKENNoBearer token if the topic requires auth

WxPusher

VariableRequiredDescription
WXPUSHER_APP_TOKENYesWxPusher application token
WXPUSHER_UIDYesUID(s), comma-separated for multiple recipients

Output Format

Each subcommand prints YAML-like status text to stdout; loguru writes errors to stderr. Determine success by reading the status field (success or failed).

Success (Telegram also returns message_id):

status: success
service: telegram
message_id: 42

Failure (always includes an error field):

status: failed
service: ntfy
error: NTFY_TOPIC must be set in .env or environment.

ntfy HTTP failures additionally include http_status.


Key Rules

RuleDescription
Title and content are always positionalInvoke as uv run notify.py <service> <title> <content>.
Use empty string for no titlePass "" as the title when a service should not display a title.
Each subcommand is independentSet only the environment variables for the service you intend to use.
Read status from stdoutOutput is status: success or status: failed; failures include an error field (see above).
Multi-line content is normalizedLine endings and literal \n escapes are converted to real newlines before sending (see below).

Multi-line Content

All subcommands normalize content before sending, so newlines render correctly on every service:

  1. Windows/old-Mac line endings (\r\n, \r) are converted to LF (\n).
  2. Literal \n escape sequences (two characters: backslash + n, as typically passed by shell arguments) are converted to real newline characters (0x0A).

This means multi-line content works regardless of how you pass it:

# Literal \n in shell quotes (converted to real newlines)
uv run notify.py wxpusher "Report" "Line 1\nLine 2\nLine 3"

# Real newlines via command substitution
uv run notify.py telegram "Log" "$(cat logfile.txt)"

# Heredoc-style real newlines
uv run notify.py ntfy "Build" "Step 1
Step 2
Step 3"

All three services render real newline characters as line breaks. WxPusher uses contentType=1 (text), which correctly displays newlines in WeChat — no need to switch to HTML or markdown just for line breaks.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.