Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
}
]
}
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 4 additions & 4 deletions plugins/ambush-streams/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
9 changes: 5 additions & 4 deletions plugins/ambush-streams/README.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
27 changes: 24 additions & 3 deletions plugins/ambush-streams/skills/manage-ambush-streams/SKILL.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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.
Expand All @@ -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.
Expand All @@ -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.
Expand All @@ -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.