CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

petrinaut

Using the Petrinaut tools and writing net code. Use before the first net change, before writing lambda, kernel, dynamics, visualizer, metric or scenario code, before drafting or creating an experiment, and when the USER asks how something in the Petrinaut UI works.

Quality

92%

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

92%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.

An exceptionally well-operationalized skill body: concrete examples for every code surface, an explicit acceptance checklist and validation feedback loop, and a clean Routing section over three verified one-level references. The only notable inefficiency is duplicated extension-availability rules between the Extensions and Code surfaces sections.

Suggestions

Deduplicate the availability/empty-code rules stated in both the Extensions section and the Code surfaces entries (e.g., lambda availability and 'leave kernel code empty when no coloured outputs') by stating them once and cross-referencing.

Consider moving the detailed uuid/distribution output-token rules from the kernel code-surface entry into references/examples.md, keeping only the decision rules inline.

DimensionReasoningScore

Conciseness

The body is dense and telegraphic, assumes competence (no primers on Petri nets, TypeScript, or React) and nearly every sentence carries non-obvious domain rules. The main trimmable redundancy is that lambda/kernel availability and empty-code rules are stated twice — once in the Extensions bullets ('Leave kernel code empty when the transition has no coloured output places') and again nearly verbatim in the Code surfaces entries.

4 / 5

Actionability

Every common code surface has a copy-paste-ready example ('return input.Queue[0].priority > parameters.threshold;', 'return tokens.map(({ level }) => ({ level: -level * parameters.decay_rate }));'), plus exact idioms (Array.from instead of loops), an exact place-name regex, and exact tool flags (askUserFirst: false only when the net was empty). Deferring payload shapes to the mounted schemas is explicitly justified ('The mounted schemas, not this prose, govern exact payload fields').

5 / 5

Workflow Clarity

The workflow is fully sequenced with explicit validation checkpoints: read before the first change, fragments in dependency order, a literal acceptance checklist after each step, a compile-validate feedback loop ('call getNetCompilationErrors once for the whole step, and send every repair it calls for in one further step'), and error-recovery rules ('Never repeat a change that succeeded or may have').

5 / 5

Progressive Disclosure

A dedicated Routing section clearly signals three real, one-level-deep references (references/docs.md, examples.md, experiments.md — all verified present, none referencing further files), each with a stated purpose and when-to-read condition. The daily-use operational core stays inline and appropriately split from the worked example, user-guide pages, and experiment details.

5 / 5

Total

19

/

20

Passed

Description

87%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 description with an explicit, detailed when-clause covering all the skill's trigger scenarios and a clearly named niche. The main weakness is that the what-clause is terse and generic about what the tools do, and net-element synonyms (places, transitions, simulation) are absent from the triggers.

DimensionReasoningScore

Specificity

The what-clause ('Using the Petrinaut tools and writing net code') is brief, but the trigger list enumerates six concrete code surfaces (lambda, kernel, dynamics, visualizer, metric, scenario) plus experiments and UI questions. Several specific items are named, though what the tools themselves do (reading/changing nets) is left generic, so it sits above anchor 3 but short of comprehensive anchor 5.

4 / 5

Completeness

Both parts are explicit: what ('Using the Petrinaut tools and writing net code') and a detailed when with four concrete trigger scenarios ('Use before the first net change, before writing lambda, kernel, dynamics, visualizer, metric or scenario code, before drafting or creating an experiment, and when the USER asks how something in the Petrinaut UI works'). This mirrors the anchor 5 example structure.

5 / 5

Trigger Term Quality

Natural domain terms a Petrinaut user would actually say — 'net change', 'lambda', 'kernel', 'scenario', 'metric', 'experiment', 'Petrinaut UI' — are all present. Common variations users might say (places, transitions, tokens, simulation) are missing, so it falls short of the comprehensive synonym coverage of anchor 5.

4 / 5

Distinctiveness Conflict Risk

'Petrinaut' is a uniquely named domain and every trigger is domain-specific (net changes, the enumerated code types, the Petrinaut UI), giving a clear niche with minimal conflict risk against other skills.

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

hashintel/hash

Path

apps/brunch-agent/src/agents/petrinaut/skills/petrinaut/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.