{
  "markdown": "<p align=\"center\">\n  <h1 align=\"center\">Pushary Agent Skill</h1>\n  <p align=\"center\">\n    Push notifications and human-in-the-loop for AI agents. Approve from your phone.\n    <br />\n    <a href=\"https://pushary.com/ai-coding\"><strong>Get started</strong></a>\n    &nbsp;&middot;&nbsp;\n    <a href=\"https://skills.sh/\">Skills directory</a>\n    &nbsp;&middot;&nbsp;\n    <a href=\"https://github.com/pushary/pushary-skill/issues\">Report a bug</a>\n  </p>\n</p>\n\n<p align=\"center\">\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT License\" /></a>\n  <a href=\"https://skills.sh/\"><img src=\"https://img.shields.io/badge/skills.sh-listed-brightgreen\" alt=\"skills.sh\" /></a>\n  <a href=\"https://www.npmjs.com/package/@pushary/agent-hooks\"><img src=\"https://img.shields.io/npm/v/@pushary/agent-hooks\" alt=\"npm\" /></a>\n  <a href=\"https://pypi.org/project/hermes-plugin-pushary/\"><img src=\"https://img.shields.io/pypi/v/hermes-plugin-pushary\" alt=\"PyPI\" /></a>\n  <a href=\"https://smithery.ai/servers/aadil/pushary\"><img src=\"https://smithery.ai/badge/aadil/pushary\" alt=\"Smithery\" /></a>\n  <a href=\"https://glama.ai/mcp/servers/Pushary/pushary-skill\"><img src=\"https://glama.ai/mcp/servers/Pushary/pushary-skill/badges/score.svg\" alt=\"Glama score\" /></a>\n</p>\n\n---\n\nYour AI agent finishes a 20-minute refactor while you're making coffee. Without Pushary, you'd never know until you checked back. With Pushary, you get a push notification on your phone the moment it's done - or a question on your lock screen when the agent needs a decision. It's the tool behind \"keep going, ping me on my phone if you need anything\".\n\nPushary is a hosted service: $9.99/mo after a 3-day card-first trial. It works with Claude Code, Claude Cowork, Codex, Cursor, Windsurf, Hermes, Lovable, or any MCP client, and it does not need a Claude Max subscription. If you run Claude Code with Claude Max, Anthropic Remote Control covers that one setup for free. Pushary covers what it does not: Codex, Cursor, Claude Code without Max, a cross-agent fleet, enforced policy gating, lock screen answer buttons, and an audit trail of every question and answer.\n\n## How It Works\n\n```\nAI Agent  ->  MCP Protocol  ->  Pushary API  ->  Push Notification  ->  Your Phone\n```\n\nPushary is an [MCP server](https://modelcontextprotocol.io/) that connects your AI coding agent to push notifications. The agent calls Pushary's tools over the Model Context Protocol, and you receive notifications instantly on any device.\n\n**Three question types** - yes/no confirmations, multiple choice, and free text input. Your agent picks the right one for the situation.\n\n**Rich context notifications** - agents can include file changes, error details, and suggested next steps in a detail page you see when tapping the notification.\n\n**Agent identification** - when you run multiple agents, each notification shows which agent is asking so you always know what you're responding to.\n\n**Permission hooks** - route Claude Code's tool approval prompts through push notifications so you can approve or deny from your phone.\n\n---\n\n## Setup: Claude Code\n\n### Option 0: Claude Code plugin (one command)\n\nThis repo is a Claude Code plugin. Install it and you get the MCP tools, the permission hooks, and the skill in one step:\n\n```\n/plugin marketplace add Pushary/pushary-skill\n/plugin install pushary\n```\n\nSet `PUSHARY_API_KEY` in your environment (get a key at [pushary.com](https://pushary.com), $9.99/mo after a 3-day trial). Claude Code expands `${PUSHARY_API_KEY}` in the plugin's MCP config.\n\nPick one install path. If you already ran `npx @pushary/agent-hooks setup`, the same hooks live in your `~/.claude/settings.json`; installing the plugin on top runs each hook twice. Either uninstall the plugin or run `npx @pushary/agent-hooks clean` before switching.\n\n### Option A: MCP Server (notifications + questions)\n\nThe agent calls Pushary tools when it wants to notify you or ask a question.\n\n**1. Sign up** at [pushary.com/sign-up](https://pushary.com/sign-up?from=ai-coding) and get your API key.\n\n**2. Install the skill:**\n\n```bash\nnpx skills add Pushary/pushary-skill\n```\n\n**3. Add the MCP server** to your Claude Code settings (`~/.claude/settings.json` or project `.claude/settings.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"pushary\": {\n      \"url\": \"https://pushary.com/api/mcp/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer pk_xxx.sk_xxx\"\n      }\n    }\n  }\n}\n```\n\nReplace `pk_xxx.sk_xxx` with your API key.\n\n**4. Enable notifications** on your phone by visiting your Pushary dashboard and allowing browser notifications.\n\nThat's it. The agent will proactively send you notifications when tasks complete, errors occur, or decisions are needed.\n\n### Option B: Permission Hooks (approve/deny tools via push)\n\nRoute Claude Code's built-in permission prompts through push notifications. When the agent wants to run a command or edit a file, you get a push notification to approve or deny from your phone.\n\n**1. Install the hook package:**\n\n```bash\nnpm install -g @pushary/agent-hooks\n```\n\n**2. Set your API key** in your shell profile (`~/.zshrc` or `~/.bashrc`):\n\n```bash\nexport PUSHARY_API_KEY=\"pk_xxx.sk_xxx\"\n```\n\n**3. Add the hook** to your Claude Code settings (`~/.claude/settings.json`):\n\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Bash|Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"pushary-hook\",\n            \"timeout\": 120\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**4. Configure timeout policies** in your [Pushary dashboard](https://pushary.com/dashboard/agent/policies):\n\n| Tool | Timeout | If no response |\n|------|---------|----------------|\n| Bash | 60s | Auto-deny |\n| Write | 60s | Ask in terminal |\n| Edit | 45s | Ask in terminal |\n| Read | 0s | Auto-approve |\n\nWhen you don't respond to a push notification in time, the configured fallback kicks in: auto-approve, auto-deny, or fall back to the normal terminal permission prompt.\n\n### Option C: Both (recommended)\n\nUse Option A and Option B together. The MCP server handles notifications and voluntary questions. The permission hook handles tool approvals. They use the same API key and dashboard.\n\n---\n\n## Setup: Hermes Agent\n\n### Option A: Native Plugin (recommended)\n\nFull integration with native Hermes tools and automatic error notifications.\n\n**1. Install the plugin:**\n\n```bash\npip install hermes-plugin-pushary\n```\n\n**2. Enable it:**\n\n```bash\nhermes plugins enable pushary\n```\n\n**3. Set your API key:**\n\n```bash\nexport PUSHARY_API_KEY=\"pk_xxx.sk_xxx\"\n```\n\n**4. (Optional) Set your agent name:**\n\n```bash\nexport PUSHARY_AGENT_NAME=\"Hermes - my-project\"\n```\n\nThe plugin registers 4 native tools (`pushary_notify`, `pushary_ask`, `pushary_wait`, `pushary_cancel`) and automatically sends push notifications when tools return errors.\n\nSet `PUSHARY_AUTO_NOTIFY_SESSION_END=1` to also get notified when a Hermes session ends.\n\n### Option B: MCP Server + Skill\n\nIf you prefer MCP over the native plugin:\n\n**1. Add to `~/.hermes/config.yaml`:**\n\n```yaml\nmcp:\n  servers:\n    pushary:\n      url: https://pushary.com/api/mcp/sse\n      headers:\n        Authorization: \"Bearer ${PUSHARY_API_KEY}\"\n```\n\n**2. Install the skill:**\n\n```bash\nhermes skills tap add Pushary/pushary-skill\nhermes skills install pushary-hermes\n```\n\n---\n\n## Setup: OpenAI Codex\n\nCodex has native MCP support. One command:\n\n**1. Set your API key** in your shell profile (`~/.zshrc` or `~/.bashrc`):\n\n```bash\nexport PUSHARY_API_KEY=\"pk_xxx.sk_xxx\"\n```\n\n**2. Add the MCP server:**\n\n```bash\ncodex mcp add pushary --url https://pushary.com/api/mcp/mcp --bearer-token-env-var PUSHARY_API_KEY\n```\n\nThat's it. Codex now has access to all Pushary tools - notifications, questions, and rich context.\n\n**Or use the setup wizard** (configures everything including the API key):\n\n```bash\nnpx @pushary/agent-hooks setup\n```\n\n---\n\n## Setup: Cursor / Windsurf / Other MCP Agents\n\n**1. Add the MCP server** to your agent's MCP config (usually `.cursor/mcp.json` or similar):\n\n```json\n{\n  \"mcpServers\": {\n    \"pushary\": {\n      \"url\": \"https://pushary.com/api/mcp/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer pk_xxx.sk_xxx\"\n      }\n    }\n  }\n}\n```\n\n**2. Install the skill** (if your agent supports skills.sh):\n\n```bash\nnpx skills add Pushary/pushary-skill\n```\n\n---\n\n## Setup: Lovable\n\n[Lovable](https://lovable.dev) is a hosted app builder, so there is no local install step (`npx skills add` does not apply). You connect the MCP server in Lovable's UI, then paste the skill into Lovable's Knowledge so the agent uses it on its own.\n\n**1. Connect the MCP server.** In Lovable, go to **Settings -> Connectors -> Personal connectors** (paid Lovable plans), click **New MCP server**, set the URL to `https://pushary.com/api/mcp/mcp`, choose **Bearer token**, and paste your API key (`pk_xxx.sk_xxx`).\n\n**2. Add the skill to Knowledge.** Lovable cannot install skills via `npx`, so paste the skill guidance into **Settings -> Knowledge**. Use the condensed [`SKILL-LITE.md`](skills/pushary/SKILL-LITE.md) as the source. This makes the Lovable agent notify you when a build finishes and ask before risky changes, without you prompting each time.\n\nLovable gets notifications and questions only (no enforced gate, since it has no permission hook). Full walkthrough: [Lovable guide](https://pushary.com/docs/agents/guides/lovable).\n\n---\n\n## Setup: Claude Cowork\n\n[Claude Cowork](https://claude.com/) is Anthropic's agentic workspace inside the Claude apps. It is a hosted surface (`npx skills add` does not apply), so you connect Pushary as a custom connector and add the skill through Cowork's own skill upload.\n\n**1. Connect the MCP server.** Get your connector link from the [Pushary dashboard](https://pushary.com/dashboard/agent/settings) (**Settings -> Connections**, Claude section). In Claude, open **Settings -> Connectors -> Add custom connector**, leave the OAuth fields empty, and paste the link. Connectors are account level, so the same connector is available inside Cowork; enable it in a session under **Customize -> Connectors**.\n\n**2. Add the skill.** Zip the [`skills/pushary-cowork`](skills/pushary-cowork) folder and upload it in Cowork under **Customize -> Skills** (skills need code execution enabled). Alternatively, paste the standing instructions block from your Pushary dashboard into Claude **Settings -> Cowork**, so every session pings you on completion and asks before risky steps without you prompting each time.\n\nCowork gets notifications and questions only (no enforced gate; Cowork exposes no hooks). Full walkthrough: [Claude Cowork guide](https://pushary.com/docs/agents/guides/claude-desktop). Dedicated plugin repo: [Pushary/cowork-plugin](https://github.com/Pushary/cowork-plugin).\n\n---\n\n## Tools\n\nThe skill exposes 5 MCP tools:\n\n| Tool | Description |\n|------|-------------|\n| `send_notification` | Send a push notification with optional rich context (file changes, errors, next steps) |\n| `ask_user` | Ask the user a question via push - yes/no, multiple choice, or free text |\n| `wait_for_answer` | Long-poll for the user's response to a question |\n| `cancel_question` | Cancel a pending question that's no longer relevant |\n| `list_sessions` | Read-only view of your live agent sessions and pending questions |\n\nFull tool documentation with parameters, examples, and usage guidelines is in [`skills/pushary/SKILL.md`](skills/pushary/SKILL.md).\n\n## Human-in-the-Loop\n\nThe agent can ask you decisions via push and wait for your answer:\n\n```\nAgent: \"Which auth strategy should I use?\"\n  Options: JWT tokens / Session cookies / OAuth2 + PKCE\n  -> push to your phone\n\nYou: tap \"JWT tokens\"\n\nAgent: proceeds with JWT implementation\n```\n\nSupports three question types:\n- **Confirm** - yes/no binary decisions\n- **Select** - pick from 2-6 options\n- **Input** - free text response\n\nThe flow uses `ask_user` -> `wait_for_answer` with automatic retries. Answers persist for 10 minutes, so there's no rush.\n\n## Packages\n\n| Package | Registry | Description |\n|---------|----------|-------------|\n| [`@pushary/agent-hooks`](https://www.npmjs.com/package/@pushary/agent-hooks) | npm | Claude Code permission hooks |\n| [`hermes-plugin-pushary`](https://pypi.org/project/hermes-plugin-pushary/) | PyPI | Hermes Agent native plugin |\n\n## Compatible Agents\n\nWorks with any agent that supports [skills.sh](https://skills.sh/) or the Model Context Protocol:\n\n- [Claude Code](https://code.claude.com/) (MCP + permission hooks)\n- [Claude Cowork](https://claude.com/) (custom connector + skill upload)\n- [Hermes Agent](https://hermes-agent.nousresearch.com/) (native plugin or MCP)\n- [Cursor](https://cursor.com/) (MCP)\n- [Windsurf](https://windsurf.com/) (MCP)\n- [Lovable](https://lovable.dev/) (MCP connector + skill via Knowledge)\n- [OpenAI Codex](https://openai.com/index/openai-codex/) (MCP)\n- And [39+ more agents](https://skills.sh/)\n\n## Publishing the MCP registry entry\n\n`server.json` is not published by merging it. The [MCP registry](https://registry.modelcontextprotocol.io) serves one record per version, so an edit here reaches nobody until the new version is pushed to the registry, and the old text keeps being what every agent reads.\n\nEveryday path: bump `version` in `server.json` and merge to `main`. The `Release MCP registry entry` workflow picks it up.\n\nThat workflow needs a credential it does not have yet. The registry grants publish rights as `io.github.<repository_owner>/*`, taken from the GitHub OIDC token's `repository_owner` claim. Our server is `io.github.Pushary/pushary` and the monorepo is owned by `aadilghani1`, so tokenless OIDC from the monorepo cannot reach the namespace. Until one of the two fixes in that workflow's header is applied, the run stops with an explicit error rather than passing quietly.\n\nManual fallback, from this directory:\n\n```\ncurl -L \"https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz\" | tar xz mcp-publisher\n./mcp-publisher login github\n./mcp-publisher publish\n```\n\nCheck what the registry actually serves, which is the only number that matters:\n\n```\ncurl -s \"https://registry.modelcontextprotocol.io/v0/servers?search=pushary\"\n```\n\nThat endpoint returns **every** version, oldest first. Read the entry whose `_meta.\"io.modelcontextprotocol.registry/official\".isLatest` is `true`; the first row in the list is the oldest record, not the live one.\n\n## Contributing\n\nContributions are welcome! Please read the [contributing guide](CONTRIBUTING.md) before submitting a pull request.\n\n## Security\n\nIf you discover a security vulnerability, please report it responsibly. See [SECURITY.md](SECURITY.md) for details.\n\n## Funding\n\nThis project is fully funded by **[RalphNex OU](https://ralphnex.com/)**, an Estonian software development agency.\n\n## License\n\n[MIT](LICENSE) - Copyright (c) 2025 RalphNex OU\n",
  "bytes": 15018,
  "sha": "968a5fc93fcc9ad543c7cbf8e7b62058fd0d2897546c50660e94b660fcb0ea9b",
  "repo_slug": "pushary/pushary-skill",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_pushary_pushary_cbc18705/readme"
}