CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

ink-app-builder

Adds inking and freehand drawing capabilities to an Android app using Jetpack Ink (androidx.ink) and Compose. Use this skill when implementing stylus or touch drawing surfaces, rendering wet and dry ink strokes, configuring stock brushes (pressure pen, marker, highlighter), implementing geometry-based erasing, linear undo and redo history, or stroke persistence with Room. Delivers working Compose and ViewModel implementations. Don't use for View-based (XML) inking or programmatic custom BrushFamily creation. For custom BrushFamily creation, custom tip shapes, or behavior node graphs, suggest the ink-custom-brush-builder skill.

Quality

89%

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

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

The content is a strong, highly actionable skill body: executable Compose code with non-obvious flicker-prevention details, exact dependency wiring, and clean progressive disclosure to real one-level-deep references. The two minor weaknesses are a duplicated epsilon explanation and the absence of an explicit build/run validation step in the workflow.

Suggestions

Remove the duplicated epsilon parameter explanation — keep it either in the prose before createDefaultPenBrush or in the code KDoc, not both, and note that Step 3 already routes epsilon details to drawing-and-brushes.md.

Add an explicit validation checkpoint after Step 1, e.g., 'Sync gradle and build the app; UnsatisfiedLinkError or ClassNotFoundException means ink-nativeloader / ink-authoring-android are missing', turning the Antipatterns failure modes into a feedback loop.

The version-selection section mixes time-sensitive version rules (1.0.0 vs 1.1.0-alpha03) into the setup flow; consider consolidating them into a short table so the section reads as a decision rule rather than nested prose.

DimensionReasoningScore

Conciseness

The body is largely lean and domain-specific (wet/dry ink model, @OptIn/RestrictTo version rules, module requirements) with no padding of concepts Claude already knows, but the 'epsilon' parameter is explained twice — once in prose ('The epsilon parameter defines the minimum distance between two input points, in stroke-space units...') and again in the code KDoc ('The epsilon parameter sets the geometric tolerance (minimum point distance in stroke units)...'). This duplication keeps it at the level-4 anchor (efficient, minor instances that could be trimmed) rather than the level-5 anchor where every token earns its place.

4 / 5

Actionability

Fully executable, copy-paste-ready guidance: a complete 'DrawingSurface' composable with the flicker-prevention 'pendingStrokes' pattern, exact version-catalog TOML, concrete gradle module wiring, and a working 'createDefaultPenBrush' example. The Antipatterns section pairs each prohibition with the specific runtime failure it prevents ('missing ink-nativeloader throws UnsatisfiedLinkError', 'AppDatabase_Impl does not exist'), matching the level-5 anchor covering the common cases.

5 / 5

Workflow Clarity

The 'Workflow and task routing' section provides a clearly sequenced 5-step flow with per-step conditions and a verification checkpoint in Step 1 ('Verify that ink-nativeloader, ink-authoring-android, and androidx.input:input-motionprediction are present'). It falls short of the level-5 anchor because there is no explicit post-setup build/run validation step or feedback loop (e.g., build the project and confirm no UnsatisfiedLinkError/ClassNotFoundException), though the sequencing itself is unambiguous and well above the level-3 anchor.

4 / 5

Progressive Disclosure

The body is a well-organized overview that keeps core patterns (setup, drawing surface, default brush) inline and routes detailed topics to 8 real, one-level-deep reference files (verified present: 5 android/... guides plus drawing-and-brushes.md, editing-and-architecture.md, persistence-and-advanced.md, none of which nest further references). References are clearly signaled with descriptive 'review'/'MUST follow' language per topic, matching the level-5 anchor exactly.

5 / 5

Total

18

/

20

Passed

Description

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

The description is exemplary: it states concrete capabilities, provides explicit 'use when' triggers covering all major feature areas, and delimits boundaries with negative triggers and a sibling-skill redirect. The only minor gap is a few missing natural synonyms (e.g., handwriting, sketch) in the trigger terms.

DimensionReasoningScore

Specificity

The description lists multiple concrete, specific actions: 'implementing stylus or touch drawing surfaces, rendering wet and dry ink strokes, configuring stock brushes (pressure pen, marker, highlighter), implementing geometry-based erasing, linear undo and redo history, or stroke persistence with Room', giving comprehensive coverage of the skill's capabilities. It goes beyond the level-4 anchor (several specific actions with minor gaps) by covering the full feature surface.

5 / 5

Completeness

It explicitly answers both questions: what it does ('Adds inking and freehand drawing capabilities to an Android app using Jetpack Ink (androidx.ink) and Compose') and when to use it ('Use this skill when implementing stylus or touch drawing surfaces, rendering wet and dry ink strokes...'), plus explicit negative triggers ('Don't use for View-based (XML) inking or programmatic custom BrushFamily creation'). This matches the level-5 anchor with concrete trigger phrases, exceeding the level-4 anchor where 'when' could be more specific.

5 / 5

Trigger Term Quality

Good coverage of natural terms users would say: 'inking', 'freehand drawing', 'stylus', 'touch drawing', 'undo and redo', and concrete brush names ('pressure pen, marker, highlighter'). A few natural synonyms such as 'handwriting', 'sketch', or 'annotate' are missing, so it fits the level-4 anchor rather than the comprehensive level-5 anchor.

4 / 5

Distinctiveness Conflict Risk

A clear niche (Jetpack Ink / androidx.ink on Android) with distinct triggers, explicit exclusions ('Don't use for View-based (XML) inking'), and an explicit redirect to the sibling 'ink-custom-brush-builder' skill for custom BrushFamily work. Conflict risk is minimal, matching the level-5 anchor.

5 / 5

Total

19

/

20

Passed

Validation

75%

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

Validation — 12 / 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

relative_links

Relative link issues: 5 deeper-than-1-level

Warning

referenced_paths_exist

Referenced path issues: 5 deeper-than-1-level

Warning

Total

12

/

16

Passed

Repository

android/skills

Path

jetpack-compose/ink/ink-app-builder/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.