CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

iii-observe

Use when observing iii functions with iii.observe, writing filters, reacting to engine events, writing observable functions with owner delivery (onObserverAdded, obs.emit, obs.call), tuning local dispatch, or migrating from the deprecated registerTrigger / registerTriggerType across TypeScript, browser, Python, Rust, and Go.

Quality

86%

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

SKILL.md
Quality
Evals
Security

Quality

Content

82%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 dense, highly actionable reference: complete multi-language executable examples, explicit validation via ready() and error-code tables, and well-organized sections with external links for deep material. The main costs are token duplication from repeating examples across four-plus languages inline and the absence of local reference files to split the filter spec, error codes, and per-language variants out of SKILL.md.

Suggestions

Reduce conciseness cost from language duplication: keep the primary worked example in one or two languages inline and move the remaining Python/Rust/Go variants to a references/ file (e.g., references/examples-by-language.md), signaling it clearly from each section.

Split exhaustive reference material into one-level-deep bundle files — e.g., references/filters.md for the operator/limits spec and references/error-codes.md for the code tables — keeping only a quick example and the most common codes inline in SKILL.md.

Strengthen workflow clarity with a short ordered quick-start checklist (register target → observe → await ready() → dispose) and, for the owner-delivery flow, an explicit fix-and-retry loop for ObserveRejection (INVALID_ARGS / OWNER_TIMEOUT) during onObserverAdded.

DimensionReasoningScore

Conciseness

Nearly every sentence carries iii-specific facts (field tables, limits like "depth 8, 64 nodes, 256 $in items", state transitions, error codes) with no padding of concepts Claude already knows, and version-sensitive material is properly quarantined in the deprecated "Migrating from triggers" section. The main trimmable cost is repetition: the same observe and owner-delivery examples are reproduced in four to five languages inline, so not every token earns its place — matching anchor 4 rather than 5.

4 / 5

Actionability

Fully executable, copy-paste-ready code in TypeScript, Python, Rust, and Go for the core flows ("Register the target first, then observe", complete registerFunction/observe/ready()/dispose() examples), plus concrete filter JSON, a 0.24→0.25 migration table, and error-code tables. The common cases are covered end-to-end; the only gaps are explicitly marked placeholders like "// your validator", which anchor 5 tolerates.

5 / 5

Workflow Clarity

The main flow has a clear sequence ("Register the target first, then observe") with an explicit validation checkpoint — "await failures.ready() // rejects with ObserveRejection (error.code)" — plus a documented state machine (pending → active/error, suspended, disposed) and per-failure error-code tables that enable recovery. It falls short of anchor 5 because, as a reference-style document, several tasks (owner delivery, local dispatch, migration) lack explicit step-by-step sequences with feedback loops; it is above anchor 3 since checkpoints are explicit rather than implicit for the primary workflow.

4 / 5

Progressive Disclosure

No bundle files exist; the single-file body is well-sectioned with clear headers, and bulk detail is offloaded via clearly signaled one-level external links ("Full reference: https://iii.dev/docs/reference/filters", "Full guide: https://iii.dev/docs/creating-workers/observable-functions", "Guide: https://iii.dev/docs/upgrading/from-0-24-x"). It does not reach anchor 5 because nothing is split into local reference files — the ~385-line body inlines material (full filter operator/limits spec, error-code tables, five-language code variants) that could live in references/; it stays above anchor 3 because structure and reference signaling are good.

4 / 5

Total

17

/

20

Passed

Description

83%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 strong, dense description: it names the exact APIs and scenarios that trigger the skill, includes deprecated-API names for migrating users, and is highly distinctive. Its only weakness is structural — the 'what' exists only inside the 'Use when…' clause rather than as a standalone capability statement, and a few natural synonym phrases are absent.

DimensionReasoningScore

Specificity

The description lists multiple specific concrete actions with named APIs — "observing iii functions with iii.observe, writing filters, reacting to engine events, writing observable functions with owner delivery (onObserverAdded, obs.emit, obs.call), tuning local dispatch, or migrating from the deprecated registerTrigger / registerTriggerType" — comprehensively covering every major section of the skill body. Not 4: there are no coverage gaps; each capability maps to a concrete, named operation.

5 / 5

Completeness

The explicit "Use when…" clause answers 'when' with concrete trigger scenarios (observing, filter writing, engine events, owner delivery, migration), and the gerund action list embeds a clear 'what'. However, there is no standalone 'what' statement preceding the trigger clause (e.g., "Connects iii functions so one runs when another fires"), so it does not clearly and separately answer both like the anchor-5 example; it is well above anchor 3 because 'when' is explicit, not weakly implied.

4 / 5

Trigger Term Quality

Good keyword coverage with the exact terms an iii user would say: "iii.observe", "filters", "engine events", "local dispatch", and the deprecated "registerTrigger / registerTriggerType" names a migrating user would literally mention. A few natural synonyms are missing (e.g., "subscribe"/"listen to" a function, "run X when Y fails"), which keeps it below the comprehensive-synonym anchor 5 but well above anchor 3.

4 / 5

Distinctiveness Conflict Risk

A clear niche — the iii SDK's observe/observer API — with unique trigger terms ("iii.observe", "onObserverAdded, obs.emit, obs.call", "registerTriggerType") plus an explicit language list ("TypeScript, browser, Python, Rust, and Go"). No realistic overlap with another skill's triggers, matching the clear-niche anchor 5.

5 / 5

Total

18

/

20

Passed

Validation

100%

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

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

iii-hq/iii

Path

skills/iii-observe/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.