Reactive streams and event-driven programming in Golang using samber/ro — ReactiveX implementation with 150+ type-safe operators, cold/hot observables, 5 subject types (Publish, Behavior, Replay, Async, Unicast), declarative pipelines via Pipe, 40+ plugins (HTTP, cron, fsnotify, JSON, logging), automatic backpressure, error propagation, and Go context integration. Apply when using or adopting samber/ro, when the codebase imports github.com/samber/ro, or when building asynchronous event-driven pipelines, real-time data processing, streams, or reactive architectures in Go. Not for finite slice transforms (→ See `samber/cc-skills-golang@golang-samber-lo` skill).
67
82%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Advisory
Suggest reviewing before use
Quality
Discovery
100%Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.
This is an excellent skill description that is comprehensive, specific, and well-structured. It clearly identifies the library, lists concrete capabilities, provides explicit trigger conditions including import path detection, and even includes a negative boundary with a cross-reference to avoid conflicts with a related skill. The only minor concern is that the description is quite dense and verbose, but the information density is justified given the breadth of the library's capabilities.
| Dimension | Reasoning | Score |
|---|---|---|
Specificity | The description lists numerous specific concrete capabilities: 150+ type-safe operators, cold/hot observables, 5 named subject types, declarative pipelines via Pipe, 40+ plugins with examples (HTTP, cron, fsnotify, JSON, logging), automatic backpressure, error propagation, and Go context integration. | 3 / 3 |
Completeness | Clearly answers both 'what' (reactive streams with specific operators, observables, subjects, plugins, backpressure, etc.) and 'when' with explicit triggers ('Apply when using or adopting samber/ro, when the codebase imports github.com/samber/ro, or when building asynchronous event-driven pipelines...'). It even includes a negative boundary ('Not for finite slice transforms') with a cross-reference. | 3 / 3 |
Trigger Term Quality | Includes strong natural trigger terms users would say: 'reactive streams', 'event-driven', 'samber/ro', 'ReactiveX', 'observables', 'backpressure', 'asynchronous', 'real-time data processing', 'streams', 'reactive architectures', and the import path 'github.com/samber/ro'. These cover both library-specific and conceptual terms. | 3 / 3 |
Distinctiveness Conflict Risk | Highly distinctive — it targets a specific library (samber/ro) with a clear niche (reactive/event-driven programming in Go), and explicitly disambiguates from a related skill (samber/lo for finite slice transforms), minimizing conflict risk. | 3 / 3 |
Total | 12 / 12 Passed |
Implementation
64%Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.
This is a solid skill with strong actionability — executable code, specific operator names, and concrete guidance in the common mistakes and best practices sections. The main weaknesses are moderate verbosity in explaining concepts Claude already understands (ReactiveX fundamentals, why channels are hard), and the absence of referenced bundle files (subjects-guide.md, operators-guide.md, plugin-ecosystem.md, patterns.md) which undermines the progressive disclosure strategy. Workflow clarity could be improved with explicit step-by-step patterns for common reactive pipeline construction.
Suggestions
Trim the 'Why samber/ro' section — Claude understands channel complexity and ReactiveX motivation; keep only the decision table for when to use ro vs lo vs errgroup
Provide the referenced bundle files (subjects-guide.md, operators-guide.md, plugin-ecosystem.md, patterns.md) or remove the references to avoid dead links
Add a concrete multi-step workflow example (e.g., 'Building a WebSocket pipeline') with explicit validation checkpoints like verifying subscription cleanup and error handling
| Dimension | Reasoning | Score |
|---|---|---|
Conciseness | The skill is generally well-structured but includes some unnecessary explanation Claude would already know (e.g., the 'Why samber/ro' section explaining why channels are hard, the lo vs ro comparison table is somewhat verbose). The 'Core Concepts' definitions of Observable/Observer/Operator/Subscription are basic ReactiveX concepts Claude knows. However, the tables and operator references are efficient formats. | 2 / 3 |
Actionability | The skill provides fully executable Go code examples (the core pipeline example with Subscribe and Collect), concrete installation commands, specific function signatures (Pipe2, Pipe3...Pipe25), and precise operator names. The common mistakes table gives specific fixes, and the code is copy-paste ready. | 3 / 3 |
Workflow Clarity | The skill covers individual concepts well but lacks explicit multi-step workflow sequences for building reactive pipelines. There are no validation checkpoints or feedback loops for common operations like setting up hot observables or handling graceful shutdown. The patterns are deferred to a referenced file (patterns.md) that isn't provided in the bundle. | 2 / 3 |
Progressive Disclosure | The skill references four separate guide files (subjects-guide.md, operators-guide.md, plugin-ecosystem.md, patterns.md) which is good structure, but none of these bundle files are actually provided, making the references unverifiable dead links. The main file itself is fairly long with inline tables that could potentially be in reference files, though the overview-level content is appropriate. | 2 / 3 |
Total | 9 / 12 Passed |
Validation
81%Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.
Validation — 9 / 11 Passed
Validation for skill structure
| Criteria | Description | Result |
|---|---|---|
metadata_field | 'metadata' should map string keys to string values | Warning |
frontmatter_unknown_keys | Unknown frontmatter key(s) found; consider removing or moving to metadata | Warning |
Total | 9 / 11 Passed | |
8c7e016
Table of Contents
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.