pushary-96d0b7 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited pushary-96d0b7 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Pushary adds web push notifications as a delivery channel for Hermes. Use it when the user is not actively monitoring a chat platform, or when you need to reach them on their phone's lock screen for a time-sensitive decision.
Use Pushary when:
Use the active Hermes platform when:
Use both when:
Add Pushary as an MCP server in your Hermes config.yaml:
mcp:
servers:
pushary:
url: https://pushary.com/api/mcp/sse
headers:
Authorization: "Bearer ${PUSHARY_API_KEY}"Set your API key as an environment variable:
export PUSHARY_API_KEY="pk_xxx.sk_xxx"Sign up at https://pushary.com/sign-up?from=hermes to get your API key.
(Over MCP this tool is named send_notification; the native Hermes plugin exposes the same capability as pushary_notify.)
Send a one-way push notification. Optionally include structured context for a rich detail page.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| title | string | Yes | Notification title (max 100 chars, aim for under 60) |
| body | string | Yes | Notification body (max 500 chars, aim for under 200) |
| agentName | string | No | Identifies this Hermes instance (e.g., "Hermes - daily-briefing") |
| context | object | No | Rich context with type, summary, details, filesChanged, errorMessage, nextSteps |
Example - cron task completed:
{
"title": "Daily briefing ready",
"body": "Compiled 12 news items and 3 calendar events",
"agentName": "Hermes - daily-briefing",
"context": {
"type": "task_complete",
"summary": "Morning briefing compiled from RSS feeds and Google Calendar",
"details": ["12 tech news items", "3 meetings today", "2 PRs awaiting review"],
"nextSteps": "Say 'read briefing' in Telegram to hear the full summary"
}
}Ask a question via push notification and wait for the answer (blocks by default). Three question types: confirm (yes/no), select (multiple choice), input (free text).
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| question | string | Yes | The question to ask (max 500 chars) |
| type | "confirm" / "select" / "input" | No | Question type (default: confirm) |
| options | string[] | No | Choices for select type (2-6 options) |
| placeholder | string | No | Placeholder text for input type |
| context | string | No | What you're working on, shown above the question |
| agentName | string | No | Identifies this Hermes instance |
| wait | boolean | No | Wait for answer before returning (default: true) |
| timeoutMs | integer | No | Max wait in ms (max 55000). Uses the site policy timeout if omitted. |
Returns:
{ "answered": true, "value": "yes" } - user responded{ "answered": false, "timedOut": true } - no response within timeoutExample - dangerous command approval:
{
"question": "Allow: rm -rf /tmp/build-artifacts/*",
"type": "confirm",
"context": "Cleaning up 2.3GB of stale build artifacts from last week",
"agentName": "Hermes - server-maintenance"
}Poll for a response when ask_user was called with wait: false. Not needed with default blocking mode.
| Name | Type | Required | Description |
|---|---|---|---|
| correlationId | string | Yes | The correlationId from ask_user |
| timeoutMs | integer | No | How long to wait (default 30000, max 55000) |
Cancel a pending question that's no longer relevant.
| Name | Type | Required | Description |
|---|---|---|---|
| correlationId | string | Yes | The correlationId to cancel |
One call - ask_user blocks and returns the answer:
result = ask_user({
question: "Deploy the updated config to production?",
type: "confirm",
context: "nginx config updated with new rate limits",
agentName: "Hermes - devops"
})
if result.answered:
if result.value == "yes":
// proceed with deployment
else:
// abort and notify via active platform
else:
// fall back to asking in the active chat platformAlways pass agentName so the user knows which Hermes profile or task is asking.
Format: "Hermes - {profile or task}"
Examples:
"Hermes - daily-briefing""Hermes - server-maintenance""Hermes - code-review""Hermes - personal-assistant"~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.