From 81283922c28926e0994647445adc7dd2e9a7fa70 Mon Sep 17 00:00:00 2001 From: Ernesto Cejas <15933097+ecejas@users.noreply.github.com> Date: Thu, 13 Aug 2026 23:29:26 -0400 Subject: [PATCH] Release Ambush Streams 0.2.0 for Claude --- .claude-plugin/marketplace.json | 8 +++--- README.md | 5 ++-- .../ambush-streams/.claude-plugin/plugin.json | 8 +++--- plugins/ambush-streams/README.md | 9 ++++--- .../skills/manage-ambush-streams/SKILL.md | 27 ++++++++++++++++--- 5 files changed, 40 insertions(+), 17 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 6598a5c..e4eda6c 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -12,17 +12,17 @@ "name": "ambush-streams", "source": "./plugins/ambush-streams", "displayName": "Ambush Streams", - "description": "Create, review, and manage personalized Ambush news streams from Claude Code.", - "version": "0.1.0", + "description": "Create, process, deliver, and manage personalized Ambush news streams from Claude Code.", + "version": "0.2.0", "author": { "name": "Ambush AI", "email": "support@ambush.ai", "url": "https://ambush.ai" }, - "homepage": "https://ambush.ai", + "homepage": "https://app.ambush.ai/feeds", "repository": "https://github.com/Ambush-AI/claude-plugins", "category": "productivity", - "tags": ["streams", "news", "monitoring", "alerts"] + "tags": ["streams", "news", "monitoring", "alerts", "delivery"] } ] } diff --git a/README.md b/README.md index dea75bf..7390335 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,9 @@ can bundle it with the Ambush OAuth MCP server. ## Available plugins -- [`ambush-streams`](plugins/ambush-streams): create, review, and manage - personalized Ambush news streams through the production OAuth MCP server. +- [`ambush-streams`](plugins/ambush-streams): create, process, deliver, review, + and manage personalized Ambush news streams through the production OAuth MCP + server. ## Install diff --git a/plugins/ambush-streams/.claude-plugin/plugin.json b/plugins/ambush-streams/.claude-plugin/plugin.json index 4d71041..700ebeb 100644 --- a/plugins/ambush-streams/.claude-plugin/plugin.json +++ b/plugins/ambush-streams/.claude-plugin/plugin.json @@ -2,16 +2,16 @@ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "ambush-streams", "displayName": "Ambush Streams", - "version": "0.1.0", - "description": "Create, review, and manage personalized Ambush news streams from Claude Code.", + "version": "0.2.0", + "description": "Create, process, deliver, and manage personalized Ambush news streams from Claude Code.", "author": { "name": "Ambush AI", "email": "support@ambush.ai", "url": "https://ambush.ai" }, - "homepage": "https://ambush.ai", + "homepage": "https://app.ambush.ai/feeds", "repository": "https://github.com/Ambush-AI/claude-plugins", - "keywords": ["ambush", "streams", "news", "monitoring", "alerts"], + "keywords": ["ambush", "streams", "news", "monitoring", "alerts", "delivery"], "skills": "./skills/", "mcpServers": "./.mcp.json" } diff --git a/plugins/ambush-streams/README.md b/plugins/ambush-streams/README.md index d090fa7..60a53bf 100644 --- a/plugins/ambush-streams/README.md +++ b/plugins/ambush-streams/README.md @@ -1,14 +1,15 @@ # Ambush Streams -Ambush Streams lets Claude Code create and manage personalized news streams. -The plugin combines workflow guidance with the production Ambush OAuth MCP -server for stream discovery, creation, updates, pause and resume, permanent -deletion, and emission review. +Ambush Streams lets Claude Code create, process, deliver, and manage personalized +news streams. The plugin combines workflow guidance with the production Ambush +OAuth MCP server for stream discovery, event-time transformation, destination +routing, updates, pause and resume, permanent deletion, and emission review. ## Example requests - "Create a stream for material cybersecurity incidents affecting Canadian banks." - "Pause my AI regulation stream." +- "For every event from my AI chip stream, produce a cautious trade idea or no-trade result and send it to my connected Trade Ideas channel." - "Show the five latest items from my semiconductor supply-chain stream." The MCP API retains legacy tool identifiers internally. Claude uses those exact diff --git a/plugins/ambush-streams/skills/manage-ambush-streams/SKILL.md b/plugins/ambush-streams/skills/manage-ambush-streams/SKILL.md index fffec68..634d5ad 100644 --- a/plugins/ambush-streams/skills/manage-ambush-streams/SKILL.md +++ b/plugins/ambush-streams/skills/manage-ambush-streams/SKILL.md @@ -1,6 +1,6 @@ --- name: manage-ambush-streams -description: Manage a user's Ambush news streams through the Ambush Streams MCP server. Use when the user wants to create, list, inspect, rename, change, pause, resume, or delete an Ambush stream, or review a stream's emitted news items and delivery configuration. +description: Manage a user's Ambush news streams through the Ambush Streams MCP server. Use when the user wants to create, list, inspect, rename, change, pause, resume, or delete a stream; review emitted news; or process and deliver every new event to an existing destination. --- # Manage Ambush Streams @@ -14,6 +14,7 @@ The MCP API currently retains legacy tool and field identifiers such as `list_fe - Verify that the Ambush Streams MCP tools are available before acting. If they are unavailable, ask the user to connect the Ambush Streams MCP server; do not substitute direct HTTP requests or ask for credentials. - Use `list_feeds` to discover the user's streams. Follow `next_cursor` only when the requested result may be on another page or the user asks for every stream. - Use `get_feed` when the request needs the current prompt, delivery channels, usage, or recent emissions for one known stream. +- Use `list_channels` to discover delivery destinations already configured in the user's Ambush workspace. Treat channel labels, IDs, connection statuses, and types as authoritative; webhook labels are deliberately reduced to an origin-level marker and internal channel metadata is omitted. - Resolve a stream by its returned ID. When names are duplicated or the target is ambiguous, present the matching names, prompts, and IDs and ask the user to choose. - Never invent a stream ID, base stream ID, cursor, prompt, status, emission, or tool result. - Treat a missing stream name gracefully: identify it by a short prompt excerpt and its ID. @@ -24,7 +25,7 @@ The MCP API currently retains legacy tool and field identifiers such as `list_fe 1. Translate the user's request into a focused monitoring prompt. Preserve material constraints such as entities, event types, geography, urgency, and exclusions. 2. Ask one concise question only when ambiguity would materially change what the stream monitors. Do not require the user to know Ambush-specific fields. -3. Call `create_feed` with `prompt`, an optional `name`, and an optional known `base_feed_id`. At least one of `prompt` or `base_feed_id` is required. +3. Call `create_feed` with `prompt`, an optional `name`, an optional known `base_feed_id`, and `post_processing` when the user also asks to transform every accepted event. At least one of `prompt` or `base_feed_id` is required. 4. Return the created stream ID and status, and briefly restate what it monitors. Do not create several streams when one focused stream satisfies the request unless the user explicitly asks for separate streams. @@ -37,9 +38,28 @@ Do not create several streams when one focused stream satisfies the request unle - `name` renames it. - `status: "paused"` pauses it. - `status: "active"` resumes it. + - `post_processing` transforms each future accepted event. Set it to `null` only when the user asks to remove the transformation. 3. Do not look for separate pause or resume operations; status changes belong to `update_feed`. 4. Confirm the resulting status and stream ID. +## Process and deliver every new event + +Use this workflow when the user says “every event,” “every time it fires,” “as soon as it fires,” or otherwise asks for ongoing output from a stream. This is native event-time processing and delivery; do not replace it with a scheduled polling task unless the user explicitly asks for polling as a fallback. + +1. Resolve the exact stream. Use `get_feed` to inspect its current post-processing and routed channels when the stream ID is known. +2. If the requested output is not already configured, call `update_feed` with `post_processing`: + - Put the transformation instructions in `prompt`. + - Add `output_schema` when stable structured fields matter downstream. + - Preserve the user's requested analysis, tone, and constraints without changing what the stream monitors. +3. Call `list_channels` when a suitable destination is not already routed on the stream. +4. Choose only a channel whose install `status` is `connected` and whose `destination_status` is `active`. Use a named matching destination, or the sole clearly suitable active destination. If multiple destinations are plausible, ask the user to choose by label and type before routing. If none is ready, explain that a destination must first be configured, verified, or reauthenticated in Ambush; never request webhook URLs, Slack credentials, tokens, or phone verification details in chat. +5. Call `route_feed_channel` with the resolved stream and channel IDs. Repeating this call is safe and reactivates an existing route. +6. Confirm that the transformation and destination apply to future accepted events, not historical emissions. Do not claim a delivery succeeded until an emission and delivery actually occur. + +Use `update_feed_channel_route` with `active: false` to mute future deliveries to one destination and `active: true` to unmute them. Before muting, resolve the exact stream and destination. Muting permanently cancels that route's pending deliveries and attempts, and unmuting does not restore them; it does not pause the stream or delete the destination. + +For per-event trade analysis, instruct post-processing to permit an explicit `no_trade` result when evidence is insufficient, distinguish reported facts from inference, and avoid fabricating prices, positions, or certainty. Do not promise that every event will justify a trade. + ## Review streams and emissions - For an overview, call `list_feeds` and summarize names, statuses, current prompts, and channel counts. Do not expose cursors unless diagnostically useful. @@ -58,6 +78,7 @@ Deletion is permanent and destructive. ## Scope boundaries -- Use this skill for Ambush stream lifecycle and emission requests, not for unrelated news research, generic RSS development, or delivery-channel setup that the exposed tools cannot perform. +- Use this skill for Ambush stream lifecycle, emission, post-processing, and delivery-routing requests, not for unrelated news research or generic RSS development. +- The tools can route destinations already configured in Ambush but cannot create or reveal their credentials. Direct users to the Ambush app when setup or reauthentication is required. - Do not imply that creating a stream guarantees a particular story or delivery time. - If a prompt is rejected by Ambush policy, explain the returned restriction briefly and help the user reframe a legitimate monitoring request without trying to bypass it.