CtrlK
BlogDocsLog inGet started
Tessl Logo

imperative-to-declarative-flet

Convert an imperative Flet Python app in which controls are mutated and then page.update is called to declarative style using flet.component, flet.observable and state hooks.

64

Quality

80%

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 ./.agents/skills/imperative-to-declarative-flet/SKILL.md
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 lean, well-structured single-file skill with genuinely non-obvious guidance (state-strategy choice, routing centralization, Flet-specific pitfalls) and mostly executable snippets. Its main gaps are the absence of an explicit validate-the-port checkpoint in the workflow and no complete runnable example or reference material for the longer conversion details.

Suggestions

Add an explicit validation step to the workflow, e.g. 'Run both the original and declarative apps side by side and confirm each screen, dialog, and route behaves identically before cleanup.'

Include one complete, copy-paste-ready minimal example (entry point + one component using @ft.observable or ft.use_state) so the fragments combine into a runnable starting point.

Move the 'Common pitfalls' section (or extended component-conversion recipes) into a references/ file, keeping SKILL.md as a tighter overview with well-signaled one-level-deep references.

DimensionReasoningScore

Conciseness

Every line carries non-obvious, project-specific information ('TemplateRoute params are dynamic', 'Font registration uses the dict key as the font family name', 'flet run can set FLET_ASSETS_DIR and override assets_dir='), with no padding and no explanation of concepts Claude already knows. Lean and efficient, matching the anchor-5 example.

5 / 5

Actionability

Concrete, mostly executable guidance throughout: 'ft.run(lambda page: page.render(App), assets_dir=...)', 'page.fonts = {"Pacifico": "Pacifico-Regular.ttf"}', 'page.show_dialog(ft.AlertDialog(content=DialogContent(...)))', 'raw = getattr(troute, "id", None)'. However, these are inline fragments rather than a complete runnable example, leaving minor gaps versus anchor 5.

4 / 5

Workflow Clarity

A clear 6-step sequence (new declarative copy, components-mode entrypoint, centralized routing, componentize UI, dialog conversion, assets/fonts) with a safety property stated up front ('Original folder unchanged'). It lacks an explicit validation checkpoint (e.g., run both apps and compare behavior), and while the operation is non-destructive, the missing verification step keeps it at anchor 4 rather than 5.

4 / 5

Progressive Disclosure

No bundle files exist (references/, scripts/, assets/ are absent) and no paths are referenced, so nothing dangles; sections are well organized and navigable. At roughly 72 lines it exceeds the under-50-line simple-skill exception, and material such as the pitfalls section could plausibly live in a reference file, placing it at anchor 4 rather than 5.

4 / 5

Total

17

/

20

Passed

Description

70%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 specific, distinctive, third-person description that clearly conveys the transformation and its mechanisms, but it entirely lacks a 'Use when...' trigger clause, capping completeness at 3 and slightly limiting natural trigger coverage.

Suggestions

Add an explicit 'Use when...' clause, e.g. 'Use when the user wants to port, refactor, or modernize an existing Flet app to declarative/components mode.'

Include common trigger variations such as 'components mode', 'port', 'refactor', and 'page.update spam' so users phrasing the request differently still match.

Consider trimming the embedded mechanism detail ('in which controls are mutated and then page.update is called') into the trigger clause so the 'what' stays crisp and the 'when' gets the pattern-matching language.

DimensionReasoningScore

Specificity

The description names the domain ('imperative Flet Python app'), the source pattern ('controls are mutated and then page.update is called'), and the concrete mechanisms ('flet component, flet.observable and state hooks'). It goes beyond 1-2 bare actions but describes a single transformation rather than a comprehensive list of multiple capabilities, matching anchor 4.

4 / 5

Completeness

It has a clear 'what' (convert an imperative Flet app to declarative style with named mechanisms) but no 'Use when...' clause or equivalent explicit trigger guidance, which caps completeness at 3 per the judging guidelines.

3 / 5

Trigger Term Quality

Terms like 'imperative', 'declarative', 'Flet', 'page.update', and 'state hooks' are what a user porting a Flet app would naturally say, giving good keyword coverage. A few natural variations are missing ('components mode', 'port', 'refactor', 'modernize'), so it does not reach comprehensive coverage with synonyms.

4 / 5

Distinctiveness Conflict Risk

Framework-specific terms ('Flet', 'page.update', 'flet.observable', 'flet component') establish a clear niche with minimal overlap risk; virtually no other skill would trigger on this description.

5 / 5

Total

16

/

20

Passed

Validation

93%

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

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

Total

15

/

16

Passed

Repository
flet-dev/flet
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.