CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

angular-rxjs-interop

Bridge Observables and Signals using toSignal and toObservable in Angular. Use when converting between RxJS Observables and Angular Signals.

60

Quality

76%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./skills/angular/angular-rxjs-interop/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

71%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A lean, well-structured skill with strong progressive disclosure (one real, clearly-linked reference) and clear decision principles. The main gaps are the absence of any complete copy-paste code example and minor redundancy between the Auto-Unsubscribe and Race Conditions bullets and earlier principles.

Suggestions

Add one complete executable example, e.g., `users = toSignal(this.http.get<User[]>(url).pipe(catchError(() => of([]))), { initialValue: [] });`, so the common HTTP-to-template case is copy-paste ready.

Delete the standalone 'Auto-Unsubscribe' bullet and the 'Race Conditions' bullet's restated initialValue advice, keeping each fact in one place.

For the POST/PUT path, specify when to prefer `lastValueFrom()` vs `subscribe()` (e.g., fire-and-forget vs awaited result) instead of just listing both.

DimensionReasoningScore

Conciseness

The body is dense and assumes competence (no explanation of what Observables or Signals are), but it is not a 5 because of redundancy: "toSignal auto-unsubscribes on component destroy" is repeated verbatim in the 'Auto-Unsubscribe' bullet, and the 'Race Conditions' bullet re-states the initialValue advice from the first principle.

4 / 5

Actionability

Concrete API names, the import path (@angular/core/rxjs-interop), and pipe fragments like `http.get<User[]>(...).pipe(catchError(() => of([])))` are given, but the code is elided (`...`) and no complete executable snippet shows an actual toSignal/toObservable conversion, matching the 'concrete guidance but incomplete / missing key details' anchor rather than level 4's 'concrete code with minor gaps'.

3 / 5

Workflow Clarity

For a simple single-purpose skill the decision rules are clear and unambiguous (async-to-sync via toSignal with initialValue in injection context; sync-to-async via toObservable when operators are needed; takeUntilDestroyed for manual subscriptions), but it stops short of level 5 because there is no explicit decision sequence or checkpoint for the POST/PUT path beyond 'trigger explicit subscribe() or lastValueFrom()'.

4 / 5

Progressive Disclosure

The skill is under 50 lines, well-organized into labeled sections (Principles, Guidelines, Anti-Patterns, References), and its single reference [references/observables-vs-signals.md] is a real, one-level-deep file clearly signaled under a References heading — meeting the simple-skill exception for a top score.

5 / 5

Total

16

/

20

Passed

Description

73%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A tight, third-person description that clearly states what the skill does and when to use it, with strong niche distinctiveness. Its main weaknesses are limited action coverage (only the two conversion directions) and a when-clause that mirrors the what instead of broadening the trigger surface.

Suggestions

Extend the what-clause with one or two more concrete actions, e.g., 'and clean up manual subscriptions with takeUntilDestroyed'.

Broaden the when-clause with trigger phrasings users actually type, e.g., 'Use when converting an Observable to a signal, applying RxJS operators to signal state, or wiring HTTP responses into templates'.

DimensionReasoningScore

Specificity

"Bridge Observables and Signals using toSignal and toObservable in Angular" names the domain and exactly two concrete actions (Observable-to-Signal, Signal-to-Observable), matching the '1-2 concrete actions, but not comprehensive' anchor; it does not reach level 4 because it omits related capabilities a comprehensive interop skill covers (e.g., takeUntilDestroyed cleanup, httpResource, injection-context requirements).

3 / 5

Completeness

Both parts are present: a clear 'what' ("Bridge Observables and Signals using toSignal and toObservable in Angular") and an explicit 'when' ("Use when converting between RxJS Observables and Angular Signals"); it is not a 5 because the when-clause merely restates the what rather than adding distinct concrete trigger phrases.

4 / 5

Trigger Term Quality

Natural terms a developer would say are present — "toSignal", "toObservable", "RxJS Observables", "Angular Signals", "converting" — giving good keyword coverage; it falls short of level 5 because common phrasings like "observable to signal", "stream", or "unsubscribe" are not covered.

4 / 5

Distinctiveness Conflict Risk

This is a clear niche (Angular RxJS/Signals interop) with named APIs (toSignal, toObservable) that no other plausible skill would claim, so conflict risk is minimal.

5 / 5

Total

16

/

20

Passed

Validation

87%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

metadata_field

'metadata' should map string keys to string values

Warning

Total

14

/

16

Passed

Repository

HoangNguyen0403/agent-skills-standard

Path

skills/angular/angular-rxjs-interop/SKILL.md

Reviewed

Table of Contents

Is this your skill?

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.