/io-events-filtering
Use when the user wants to filter events, test event registrations with sample events, or manage subscriber defined filters — phrases like "add filter", "create filter", "subscriber filter", "filter events", "define filter", "filter registration", "validate filter", "update
Claude Code
$ npx -y skills add adobe/skills --skill io-events-filtering --agent claude-code
Codex
$ npx skills add adobe/skills --skill io-events-filtering -a codex -y
Cursor
$ npx skills add adobe/skills --skill io-events-filtering -a cursor -y
Gemini CLI
$ npx skills add adobe/skills --skill io-events-filtering -a gemini-cli -y
GitHub Copilot
$ npx skills add adobe/skills --skill io-events-filtering -a github-copilot -y
OpenCode
$ npx skills add adobe/skills --skill io-events-filtering -a opencode -y
Windsurf
$ npx skills add adobe/skills --skill io-events-filtering -a windsurf -y
SKILL.md
io-events-filtering.SKILL.mdname: io-events-filtering
description: Use when the user wants to filter events, test event registrations with sample events, or manage subscriber defined filters — phrases like "add filter", "create filter", "subscriber filter", "filter events", "define filter", "filter registration", "validate filter", "update filter", "edit filter", "delete filter", "remove filter", "show my filters", "list filters", "show sample event", "test my registration", "send test event", "what does the event look like", "sample payload", "send a test event", "view sample payload", "custom event payload", "send custom event".
license: Apache-2.0
I/O Events — Filtering & Sample Events
**Before starting:** invoke the `io-events-registration` skill. ---
Sample Events Flow
Trigger when the user asks about sample events, wants to test their registration, or says things like *"show me a sample event"*, *"test my registration"*, *"what does the event look like"*, *"send a test event"*.
Step 1 — Check availability
Call `check_sample_event` with `providerId` and `eventCode`.
- If `{ available: false }` → tell the user: *"No sample event is available for this event type."* and stop.
- If `{ available: true }` → proceed to Step 2.
Step 2 — Ask the user
*"A sample event is available. Would you like to:* *1. View the sample payload* *2. Send it to your registration as-is (for testing)* *3. Send a custom version of it (edit the payload before sending)* *4. All of the above"*
Step 3a — View sample payload
Call `get_sample_event` with `providerId` and `eventCode`. Display the result:
📦 Sample Event
Format: cloud_events_v1
Payload:
{
"specversion": "1.0",
"type": "ai_cloud_docs_deleted",
...
}Step 3b — Send to registration (as-is)
Call `get_registrations_for_workspace` to fetch existing registrations. Show as a numbered list and ask the user to pick one:
1. My Journal Reg (journal) ID: reg-abc123
2. My Webhook Reg (webhook) ID: reg-def456
Call `post_sample_event` with `providerId`, `eventCode`, `registrationId` and no custom payload.
- If `{ posted: true }` → *"✓ Sample event sent to your registration successfully."*
- If `{ posted: false }` → *"This event type does not support posting sample events."*
Step 3c — Send a custom event
Call `get_sample_event` to fetch the sample payload (if not already done in Step 3a).
To determine the format, use `event_delivery_format` from the provider returned by `list_event_providers` — not the `format` field on the sample payload.
**CloudEvents format** (`event_delivery_format === "cloud_events_v1"`):
Parse `sample_payload` as JSON and show the user every field — marking `type` and `source` as read-only (Adobe enforces these server-side):
📦 Sample Event — customise before sending:
Editable:
specversion: "1.0"
id: "abc-123"
time: "2026-06-30T10:00:00Z"
datacontenttype: "application/json"
data: { ... }
Read-only (set by Adobe):
type: "{type value}"
source: "{source value}"
Change any editable field and I'll send it.Wait for the user's changes. Build the final payload by merging their edits with the canonical `type` and `source` from the original sample.
**Other formats** (`event_delivery_format` is not `"cloud_events_v1"`):
Show the full `sample_payload` as editable — user can change any field including envelope fields. No restrictions apply.
Once ready, confirm before sending:
I'll send this custom event to your registration. Proceed?
Call `get_registrations_for_workspace` if a registration hasn't been selected yet → show list → user picks.
Call `post_sample_event` with `providerId`, `eventCode`, `registrationId`, and `payload` set to the merged payload.
- If `{ posted: true }` → *"✓ Custom event sent to your registration successfully."*
- If `{ posted: false }` → *"This event type does not support posting sample events."*
---
Subscriber Filter Flow
Trigger when user says *"add filter"*, *"create filter"*, *"subscriber filter"*, *"filter events"*, *"define filter"*, *"filter registration"*, *"validate filter"*.
Subscriber Defined Filters use **AWS Event Ruler JSON syntax** to match against event payloads. Only events that match the filter reach the registration's endpoint.
---
Step F1 — Resolve registration context
If `consumerOrgId`, `projectId`, `workspaceId` are not already known, invoke the `io-events-registration` skill Step 1 first.
Call `get_registrations_for_workspace` to get all registrations. Then validate eligibility:
**Step F1a — Filter by delivery type**
Exclude any registration with `delivery_type: "aws_eventbridge"` — AWS EventBridge handles its own filtering natively.
**Step F1b — Validate CloudEvents v1 format**
For the remaining registrations, collect all unique `provider_id` values from their `events_of_interest`. Call `list_event_providers` with `consumerOrgId` and `imsOrgCode` to get provider details.
For each provider, check its `event_delivery_format` field:
- `"cloud_events_v1"` → eligible ✅
- `"adobe_io"` → **not eligible** — Subscriber Defined Filters are not supported for the Adobe I/O format ❌
- Any other value (or missing) → not eligible ❌
A registration is **fully eligible** if all its providers use `"cloud_events_v1"`. A registration is **partially eligible** if only some providers do — show it but warn that events from `"adobe_io"` providers will be delivered unfiltered. A registration is **ineligible** if none of its providers use `"cloud_events_v1"` — exclude it.
**Step F1c — Show eligible registrations**
Eligible: 1. My Journal Reg (journal) 2. My Webhook Reg ⚠️ (webhook)
Not eligible: ✗ My EventBridge Reg (aws_eventbridge)
Ask the user to pick from the eligible list only.
If **no eligible registrations exist**, tell the user:
Subscriber Defined Filters are only supported for journal, webhook, and runtime action
registrations whose events us
Read more
name: io-events-filtering description: Use when the user wants to filter events, test event registrations with sample events, or manage subscriber defined filters — phrases like "add filter", "create filter", "subscriber filter", "filter events", "define filter", "filter registration", "validate filter", "update filter", "edit filter", "delete filter", "remove filter", "show my filters", "list filters", "show sample event", "test my registration", "send test event", "what does the event look like", "sample payload", "send a test event", "view sample payload", "custom event payload", "send custom event". license: Apache-2.0
I/O Events — Filtering & Sample Events
**Before starting:** invoke the `io-events-registration` skill. ---
Sample Events Flow
Trigger when the user asks about sample events, wants to test their registration, or says things like *"show me a sample event"*, *"test my registration"*, *"what does the event look like"*, *"send a test event"*.
Step 1 — Check availability
Call `check_sample_event` with `providerId` and `eventCode`.
- If `{ available: false }` → tell the user: *"No sample event is available for this event type."* and stop.
- If `{ available: true }` → proceed to Step 2.
Step 2 — Ask the user
*"A sample event is available. Would you like to:* *1. View the sample payload* *2. Send it to your registration as-is (for testing)* *3. Send a custom version of it (edit the payload before sending)* *4. All of the above"*
Step 3a — View sample payload
Call `get_sample_event` with `providerId` and `eventCode`. Display the result:
📦 Sample Event
Format: cloud_events_v1
Payload:
{
"specversion": "1.0",
"type": "ai_cloud_docs_deleted",
...
}Step 3b — Send to registration (as-is)
Call `get_registrations_for_workspace` to fetch existing registrations. Show as a numbered list and ask the user to pick one:
1. My Journal Reg (journal) ID: reg-abc123 2. My Webhook Reg (webhook) ID: reg-def456
Call `post_sample_event` with `providerId`, `eventCode`, `registrationId` and no custom payload.
- If `{ posted: true }` → *"✓ Sample event sent to your registration successfully."*
- If `{ posted: false }` → *"This event type does not support posting sample events."*
Step 3c — Send a custom event
Call `get_sample_event` to fetch the sample payload (if not already done in Step 3a).
To determine the format, use `event_delivery_format` from the provider returned by `list_event_providers` — not the `format` field on the sample payload.
**CloudEvents format** (`event_delivery_format === "cloud_events_v1"`):
Parse `sample_payload` as JSON and show the user every field — marking `type` and `source` as read-only (Adobe enforces these server-side):
📦 Sample Event — customise before sending:
Editable:
specversion: "1.0"
id: "abc-123"
time: "2026-06-30T10:00:00Z"
datacontenttype: "application/json"
data: { ... }
Read-only (set by Adobe):
type: "{type value}"
source: "{source value}"
Change any editable field and I'll send it.Wait for the user's changes. Build the final payload by merging their edits with the canonical `type` and `source` from the original sample.
**Other formats** (`event_delivery_format` is not `"cloud_events_v1"`):
Show the full `sample_payload` as editable — user can change any field including envelope fields. No restrictions apply.
Once ready, confirm before sending:
I'll send this custom event to your registration. Proceed?
Call `get_registrations_for_workspace` if a registration hasn't been selected yet → show list → user picks.
Call `post_sample_event` with `providerId`, `eventCode`, `registrationId`, and `payload` set to the merged payload.
- If `{ posted: true }` → *"✓ Custom event sent to your registration successfully."*
- If `{ posted: false }` → *"This event type does not support posting sample events."*
---
Subscriber Filter Flow
Trigger when user says *"add filter"*, *"create filter"*, *"subscriber filter"*, *"filter events"*, *"define filter"*, *"filter registration"*, *"validate filter"*.
Subscriber Defined Filters use **AWS Event Ruler JSON syntax** to match against event payloads. Only events that match the filter reach the registration's endpoint.
---
Step F1 — Resolve registration context
If `consumerOrgId`, `projectId`, `workspaceId` are not already known, invoke the `io-events-registration` skill Step 1 first.
Call `get_registrations_for_workspace` to get all registrations. Then validate eligibility:
**Step F1a — Filter by delivery type**
Exclude any registration with `delivery_type: "aws_eventbridge"` — AWS EventBridge handles its own filtering natively.
**Step F1b — Validate CloudEvents v1 format**
For the remaining registrations, collect all unique `provider_id` values from their `events_of_interest`. Call `list_event_providers` with `consumerOrgId` and `imsOrgCode` to get provider details.
For each provider, check its `event_delivery_format` field:
- `"cloud_events_v1"` → eligible ✅
- `"adobe_io"` → **not eligible** — Subscriber Defined Filters are not supported for the Adobe I/O format ❌
- Any other value (or missing) → not eligible ❌
A registration is **fully eligible** if all its providers use `"cloud_events_v1"`. A registration is **partially eligible** if only some providers do — show it but warn that events from `"adobe_io"` providers will be delivered unfiltered. A registration is **ineligible** if none of its providers use `"cloud_events_v1"` — exclude it.
**Step F1c — Show eligible registrations**
Eligible: 1. My Journal Reg (journal) 2. My Webhook Reg ⚠️ (webhook) Not eligible: ✗ My EventBridge Reg (aws_eventbridge)
Ask the user to pick from the eligible list only.
If **no eligible registrations exist**, tell the user:
Subscriber Defined Filters are only supported for journal, webhook, and runtime action registrations whose events us
Other skills on skills.
More skills from other plugins.
karpathy-guidelines
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid…
agent-builder
Design and build AI agents for any domain. Use when users: (1) ask to "create an agent", "build an assistant", or "design an AI…
Questions about io-events-filtering.
- Which coding agents can use io-events-filtering?
- io-events-filtering installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

