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
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Ambush AI plugins for Codex

This repository is the official Codex marketplace for Ambush AI. It currently publishes the Ambush Streams plugin, which connects Codex to the production Ambush MCP server and teaches Codex how to manage personalized news streams safely.
This repository is the official Codex marketplace for Ambush AI. It currently publishes the Ambush Streams plugin, which connects Codex to the production Ambush MCP server and teaches Codex how to manage, process, and deliver personalized news streams safely.

This repository is intentionally separate from the other Ambush distribution formats:

Expand All @@ -22,7 +22,7 @@ Install Ambush Streams:
codex plugin add ambush-streams@ambush-ai
~~~

Restart Codex if it is already open. When prompted, connect your Ambush account through OAuth. You can then ask Codex to create, list, update, pause, resume, or permanently delete a stream, or review its emitted news items.
Restart Codex if it is already open. When prompted, connect your Ambush account through OAuth. You can then ask Codex to create, list, update, process, route, mute, pause, resume, or permanently delete a stream, or review its emitted news items.

## Repository layout

Expand Down
15 changes: 8 additions & 7 deletions plugins/ambush-streams/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
{
"name": "ambush-streams",
"version": "0.1.0",
"description": "Create, review, and manage personalized Ambush news streams from Codex.",
"version": "0.2.0",
"description": "Create, process, deliver, and manage personalized Ambush news streams from Codex.",
"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/codex-plugins",
"keywords": ["ambush", "streams", "news", "monitoring", "alerts"],
"keywords": ["ambush", "streams", "news", "monitoring", "alerts", "delivery"],
"skills": "./skills/",
"interface": {
"displayName": "Ambush Streams",
"shortDescription": "Manage personalized news streams",
"longDescription": "Turn a plain-language monitoring request into an Ambush stream, review existing streams and their emissions, update prompts or names, and pause, resume, or delete streams without leaving Codex.",
"shortDescription": "Manage streams, processing, and delivery",
"longDescription": "Turn a plain-language monitoring request into an Ambush stream, process and route every future event to a connected destination, review emissions, update prompts or names, and pause, resume, or delete streams without leaving Codex.",
"developerName": "Ambush AI",
"category": "Productivity",
"capabilities": ["Interactive", "Read", "Write"],
"websiteURL": "https://ambush.ai",
"websiteURL": "https://app.ambush.ai/feeds",
"privacyPolicyURL": "https://reflex.app/privacy",
"defaultPrompt": [
"List my Ambush streams and summarize their status.",
"Create a stream that monitors a topic for me.",
"Process every event from one of my streams and send it to a connected channel.",
"Show the latest emissions from one of my streams."
],
"brandColor": "#12BFAE",
Expand Down
7 changes: 4 additions & 3 deletions plugins/ambush-streams/README.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
# Ambush Streams for Codex

Ambush Streams lets a consumer create and manage personalized news streams from Codex. The plugin combines the production OAuth MCP server with workflow guidance for reliable stream discovery, creation, updates, pause and resume, deletion, and emission review.
Ambush Streams lets a consumer create, process, deliver, and manage personalized news streams from Codex. The plugin combines the production OAuth MCP server with workflow guidance for reliable stream discovery, event-time transformation, destination routing, updates, pause and resume, deletion, and emission review.

## Consumer experience

After installing and authenticating once, a consumer can ask in ordinary language:

- "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."
- "What did my semiconductor supply-chain stream emit this week?"

The assistant resolves the appropriate stream and tool arguments. Consumers do not configure an API URL, copy tokens, or need to know that pause and resume are implemented through an update request.

## Package contents

- .mcp.json connects Codex to https://api.ambush.ai/mcp with OAuth.
- skills/manage-ambush-streams teaches the stream-management workflow and deletion safeguards.
- skills/manage-ambush-streams teaches stream management, event processing, safe destination routing, irreversible route-muting behavior, and deletion safeguards.
- .codex-plugin/plugin.json contains Codex presentation and package metadata.
- submission contains listing copy, review cases, release notes, and the pre-submission checklist.

Expand All @@ -25,4 +26,4 @@ The production MCP API retains legacy identifiers such as list_feeds, create_fee

## Status

Version 0.1.0 is prepared for repository-based testing. It has not been submitted to OpenAI's public plugin directory.
Version 0.2.0 is prepared for repository-based testing. It has not been submitted to OpenAI's public plugin directory.
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.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
interface:
display_name: "Manage Ambush Streams"
short_description: "Create and manage personalized news streams"
default_prompt: "Use $manage-ambush-streams to review and manage my Ambush streams."
short_description: "Manage stream processing and delivery"
default_prompt: "Use $manage-ambush-streams to review and manage my Ambush streams, event processing, and delivery routes."
dependencies:
tools:
- type: "mcp"
Expand Down
4 changes: 2 additions & 2 deletions plugins/ambush-streams/submission/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Use this directory as the source of truth for a future Ambush Streams submission
- [x] Production MCP uses HTTPS at `https://api.ambush.ai/mcp`.
- [x] OAuth authorization, dynamic client registration, and PKCE work with Codex.
- [x] MCP discovery metadata and protected-resource challenges are public.
- [x] Tool annotations distinguish reads, writes, and destructive deletion.
- [x] Tool annotations distinguish reads, writes, destructive deletion, and destructive route muting.
- [x] A privacy policy is public at `https://reflex.app/privacy`.
- [x] Support is public at `https://reflex.app/support` and `support@ambush.ai`.
- [ ] Publish legal-approved Ambush terms of service at a public HTTPS URL, add `termsOfServiceURL` to the plugin manifest, and replace the pending value in the listing copy.
Expand Down Expand Up @@ -51,5 +51,5 @@ Only after every required item above is complete:
1. Submit the plugin in the OpenAI Platform portal and address review feedback in this package.
2. Publish the approved version to the public plugin directory.
3. Install it from clean Codex and ChatGPT accounts, complete OAuth, and run the positive review cases.
4. Confirm unrelated prompts do not invoke the plugin and destructive deletion still requires explicit confirmation.
4. Confirm unrelated prompts do not invoke the plugin, destructive deletion still requires explicit confirmation, and route muting warns that cancelled pending work is not restored by unmuting.
5. Record the published version and approval date in the release notes.
10 changes: 5 additions & 5 deletions plugins/ambush-streams/submission/listing.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,25 @@ Ambush Streams

## Short description

Manage personalized news streams
Manage streams, processing, and delivery

## Long description

Ambush Streams turns a plain-language monitoring request into a personalized news stream. Create focused streams, review what each stream monitors, rename or refine prompts, pause and resume monitoring, and inspect emitted news items directly from Codex or ChatGPT. Your streams remain scoped to your authenticated Ambush account.
Ambush Streams turns a plain-language monitoring request into a personalized news stream. Create focused streams, review or refine what they monitor, process every accepted event into a tailored output, route future results to an existing Slack, webhook, or iMessage destination, pause and resume monitoring, and inspect emitted news directly from Codex or ChatGPT. Your streams and destinations remain scoped to your authenticated Ambush account.

## End usage

A consumer installs Ambush Streams from the plugin directory, signs in to Ambush once, and then works in natural language. For example, they can ask to monitor material developments about an industry, pause a stream during a quiet period, or summarize the newest emissions without navigating away from their conversation. The plugin translates those requests into the production Ambush MCP server; consumers never copy API tokens or configure endpoint URLs.
A consumer installs Ambush Streams from the plugin directory, signs in to Ambush once, and then works in natural language. For example, they can ask to monitor material developments about an industry, turn every accepted event into a structured analysis delivered to a connected Slack channel, pause a stream during a quiet period, or summarize recent emissions without leaving the conversation. The plugin uses Ambush's native event pipeline rather than scheduled polling; consumers never copy API tokens or destination credentials into chat.

## Category and discovery terms

- Category: Productivity
- Terms: personalized news, monitoring, alerts, streams, market intelligence, emissions
- Terms: personalized news, monitoring, alerts, streams, market intelligence, emissions, Slack delivery, event processing

## Publisher and links

- Publisher: Ambush AI
- Website: https://ambush.ai
- Website: https://app.ambush.ai/feeds
- Privacy policy: https://reflex.app/privacy
- Support: https://reflex.app/support
- Support email: support@ambush.ai
Expand Down
8 changes: 8 additions & 0 deletions plugins/ambush-streams/submission/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Release notes

## 0.2.0 — event-driven workflows

- Configures prompt-based or structured post-processing for every future accepted stream event.
- Discovers preconfigured Slack, webhook, and iMessage destinations without exposing credentials.
- Routes streams to delivery channels through the native Ambush event pipeline instead of scheduled polling.
- Mutes and unmutes individual stream-to-channel routes while accurately warning that muting permanently cancels pending work.
- Guides trade-analysis workflows to allow an explicit no-trade result and avoid unsupported certainty.

## 0.1.0 — initial package

- Connects Codex to the production Ambush Streams MCP server with OAuth.
Expand Down
Loading