{
  "markdown": "# @helloaigent-dev/subscriber\n\nThe **Hello Aigent reference subscriber** — an MCP server that lets any agent subscribe to any\n[Hello Aigent](https://helloaigent.dev) feed, fetch signed updates, verify them, and act on them.\nPlus **watch mode**: a standing poller that collects verified updates into a digest between agent runs.\n\n```bash\nnpx @helloaigent-dev/subscriber            # MCP server (stdio)\nnpx @helloaigent-dev/subscriber watch      # standing watcher (default cadence: daily)\n```\n\n## WebMCP (browser)\n\nThe in-tab on-ramp for [ChatGPT’s built-in browser](https://learn.chatgpt.com/docs/webmcp) and Chrome (`chrome://flags/#enable-webmcp-testing`). The page registers three tools (`hello_aigent_check_feed`, `hello_aigent_subscribe`, `hello_aigent_fetch_updates`) so an agent can use the feed **without installing MCP**. One classic script tag — no build step, no API key.\n\n```html\n<script src=\"/webmcp/hello-aigent-webmcp.js\"></script>\n```\n\nLive demo: [https://helloaigent.dev](https://helloaigent.dev). This repo is the public source. Details, judge test steps, and CORS notes: [webmcp/README.md](webmcp/README.md).\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| `hello_aigent_subscribe(discovery_url, feed_id?, principal?, consent_scope?)` | Reads the site's `/.well-known/hello-aigent.json`, subscribes (defaults come from your policy) |\n| `hello_aigent_fetch(subscription_id?, max?)` | Pulls only-new-since updates via the stored cursor; **verifies every envelope signature** |\n| `hello_aigent_unsubscribe(subscription_id)` | Revokes consent (idempotent) — the one-call undo |\n| `hello_aigent_list_subscriptions()` | Lists stored subscriptions (tokens are never exposed) |\n| `hello_aigent_check_site(url)` | Checks a site you're visiting for a feed; auto-subscribes per your standing policy (`origin: auto`) |\n| `hello_aigent_digest()` | Returns unread digest entries collected by `watch` and marks them surfaced |\n| `hello_aigent_setup_watch(cadence?)` | Emits ready-to-apply standing-schedule recipes (scheduled task, recurring task, cron) |\n\n## Watch mode\n\n```bash\nnpx @helloaigent-dev/subscriber watch --once            # one pass (what schedulers call)\nnpx @helloaigent-dev/subscriber watch --every 6h        # long-running loop (floor: hourly)\nnpx @helloaigent-dev/subscriber watch --once --exec \"my-agent-cmd\"   # trigger a run on new updates\n```\n\nEach pass polls every active subscription, verifies signatures, and appends new updates to the\ndigest file. The server-side mailbox means a missed run loses nothing. `--exec` runs your command\nwhen new updates land, with `HELLO_AIGENT_NEW_UPDATES` and `HELLO_AIGENT_DIGEST` set.\n\n## Policy\n\nWritten to `~/.hello-aigent/policy.json` on first run — everything automatic by default, and this\nfile is where you change that:\n\n| Key | Default | Meaning |\n|---|---|---|\n| `principal` | `user@host` | Your stable identity across all feeds — set it once (e.g. your email) |\n| `auto_subscribe` | `on` | Subscribe when your agent visits a Hello Aigent site: `on` / `ask` / `off` |\n| `watch_cadence` | `daily` | How often watch polls (`hourly` floor) |\n| `act` | `safe` | What the agent may do unprompted: `none` / `safe` (side-effect-free) / `thresholds` |\n| `pseudonymous` | `false` | Opt-in: per-site pseudonymous principals |\n\nFeeds nobody reads decay: after 30 idle days watch stops polling them; after 60 it unsubscribes\n(noted in the digest). Reading the digest or fetching a feed keeps it alive.\n\n## Guarantees\n\n- **Signature verification before anything is actionable.** Envelopes are Ed25519-verified\n  (RFC 8785 JCS canonicalization) against the feed's discovery public key. Anything that fails\n  verification is returned under `unverified` with its `actions` stripped.\n- **Consent is standing policy.** Subscribing records `principal` + `consent_scope`; your policy\n  file is the consent layer, and unsubscribe is always one idempotent call.\n- **Local state only.** Subscriptions (including bearer tokens), policy, and the digest live in\n  `~/.hello-aigent/` (mode 0600). Override with `HELLO_AIGENT_STATE` / `HELLO_AIGENT_POLICY` /\n  `HELLO_AIGENT_DIGEST`.\n\n## MCP client config\n\n```json\n{\n  \"mcpServers\": {\n    \"hello-aigent\": { \"command\": \"npx\", \"args\": [\"@helloaigent-dev/subscriber\"] }\n  }\n}\n```\n\n## Cursor / Grok Bot plugin\n\nThis repo is also packaged as an [Agent Plugins](https://agent-plugins.org) bundle (MCP + skill) that Cursor and Grok Bot can load. Cursor Marketplace plugins are that same format — there is no separate Grok Bot package. **This plugin is not listed on the Cursor Marketplace yet.**\n\n### 1. Custom MCP connector (works today)\n\nPoint any MCP client, including Cursor, at the published npm package:\n\n```json\n{\n  \"mcpServers\": {\n    \"hello-aigent\": { \"command\": \"npx\", \"args\": [\"-y\", \"@helloaigent-dev/subscriber\"] }\n  }\n}\n```\n\nNo API key. Then in chat: ask the agent to subscribe to a feed (try [https://helloaigent.dev](https://helloaigent.dev)).\n\n### 2. Local plugin (MCP + skill)\n\nTo load the skill and MCP together while developing:\n\n```bash\nmkdir -p ~/.cursor/plugins/local\nln -s /path/to/helloaigent-subscriber ~/.cursor/plugins/local/hello-aigent\n```\n\nRestart Cursor, or run **Developer: Reload Window**. Confirm the Hello Aigent skill and MCP server appear under **Customize**. Grok Bot uses the same plugin files.\n\nLayout:\n\n| File | Role |\n|---|---|\n| `plugin.json` | Agent Plugins 1.0 manifest (portable; Cursor loads this as-is) |\n| `.cursor-plugin/plugin.json` | Cursor marketplace metadata + relative `assets/logo.svg` |\n| `assets/logo.svg` | Official [Hello Aigent favicon](https://helloaigent.dev/favicon.svg): orange `#E0531C` tile, white H, dark chevron A |\n| `mcp.json` | stdio MCP → `npx -y @helloaigent-dev/subscriber` (same server as this package) |\n| `skills/hello-aigent/SKILL.md` | When/how to subscribe, fetch, verify, and unsubscribe |\n\n### 3. Official marketplace listing (later)\n\nWhen this is submitted and approved, install from the Cursor Marketplace. Until then, use the custom connector or the local plugin path above. Do not submit from this README — maintainers will submit at [cursor.com/marketplace/publish](https://cursor.com/marketplace/publish) when ready.\n\n## License\n\nMIT\n",
  "bytes": 6211,
  "sha": "048b2cbc0c9d832d9c537615d68a0b3180664783fbab58d8c1c9aa18814a7ee6",
  "repo_slug": "helloaigent-dev/helloaigent-subscriber",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_helloaigent_dev_helloaigent_su_2c6e7484/readme"
}