Persist lightweight user and app preferences with DataStore, schema-safe models, and migration-aware defaults.
41
27%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./.github/skills/android-local-persistence-datastore/SKILL.mdQuality
Discovery
32%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 identifies a specific technology domain (DataStore) and mentions relevant concepts like schema safety and migrations, giving it moderate specificity. However, it lacks an explicit 'Use when...' clause, which is critical for skill selection, and misses common trigger term variations that developers would naturally use. The description reads more like a feature tagline than actionable selection guidance.
Suggestions
Add an explicit 'Use when...' clause, e.g., 'Use when the user asks about Android Jetpack DataStore, persisting app preferences, migrating from SharedPreferences, or Proto/Preferences DataStore.'
Include common trigger term variations such as 'SharedPreferences', 'Jetpack DataStore', 'Proto DataStore', 'Android preferences', 'key-value storage', and 'app settings'.
List more concrete actions like 'define typed schemas, read and write preferences, handle schema migrations, convert from SharedPreferences' to improve specificity.
| Dimension | Reasoning | Score |
|---|---|---|
Specificity | Names the domain (DataStore preferences) and some actions (persist preferences, schema-safe models, migration-aware defaults), but the actions are more like feature descriptors than concrete verbs. It doesn't list multiple distinct user-facing operations like 'read preferences', 'write defaults', 'migrate schemas'. | 2 / 3 |
Completeness | Describes what the skill does (persist preferences with DataStore) but completely lacks a 'Use when...' clause or any explicit trigger guidance for when Claude should select this skill. Per rubric guidelines, a missing 'Use when...' clause caps completeness at 2, and since the 'what' is also somewhat vague, this scores a 1. | 1 / 3 |
Trigger Term Quality | Includes 'DataStore', 'preferences', 'migration', and 'schema' which are relevant technical terms a developer might use. However, it misses common variations like 'Proto DataStore', 'Preferences DataStore', 'Android settings', 'key-value store', 'SharedPreferences replacement', or 'Jetpack DataStore'. | 2 / 3 |
Distinctiveness Conflict Risk | 'DataStore' is a fairly specific technology (Android Jetpack DataStore), which helps distinguish it. However, without explicit scoping (e.g., Android, Jetpack), it could overlap with other data persistence or preferences-related skills. The term 'preferences' alone is quite broad. | 2 / 3 |
Total | 7 / 12 Passed |
Implementation
22%Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.
This skill reads like a generic template that was filled in with high-level descriptions rather than actionable DataStore-specific guidance. It completely lacks code examples for setting up Preferences DataStore or Proto DataStore, defining serializers, performing migrations from SharedPreferences, or handling coroutine-based reads/writes. The workflow and guardrails are so abstract they could apply to any Android data layer skill.
Suggestions
Add concrete, executable Kotlin code examples showing: (1) Preferences DataStore setup with a preferencesDataStore delegate, (2) reading/writing typed preferences with edit{} and data flow, (3) Proto DataStore with a .proto schema and serializer, and (4) SharedPreferences migration using SharedPreferencesMigration.
Replace the generic workflow steps with DataStore-specific sequencing: define schema → create DataStore instance → implement read/write flows → add migration from SharedPreferences → validate with unit test → handle CorruptionException.
Add a validation checkpoint in the workflow for verifying migration correctness (e.g., 'Run migration test to confirm old SharedPreferences keys map correctly to new DataStore fields before removing legacy code').
Remove or significantly condense the generic guardrails and anti-patterns that aren't DataStore-specific (e.g., 'Blocking the main thread with disk or network calls' is general Android knowledge Claude already has).
| Dimension | Reasoning | Score |
|---|---|---|
Conciseness | The content avoids explaining what DataStore is at a basic level, which is good. However, the workflow and guardrails sections are generic boilerplate that could apply to almost any Android persistence skill—they don't add DataStore-specific value and waste tokens. | 2 / 3 |
Actionability | There is no executable code anywhere—no Kotlin/Gradle snippets showing how to set up DataStore, define a serializer, read/write preferences, or migrate from SharedPreferences. The examples section only lists shell commands to run tests in hypothetical example projects, not actual implementation guidance. | 1 / 3 |
Workflow Clarity | The workflow steps are extremely generic ('Model contracts explicitly before wiring network, storage, media, or background APIs') and not specific to DataStore at all. There are no validation checkpoints, no feedback loops, and no concrete sequencing of DataStore-specific operations like defining a schema, creating a DataStore instance, or handling migrations. | 1 / 3 |
Progressive Disclosure | The document has clear section headings and references to handoff skills and official documentation links. However, the references to example projects (orbittasks-compose, orbittasks-xml) and scripts are opaque—there's no indication of what's in those files or how they relate to the skill content, and the main document itself lacks the core instructional content that would make the references meaningful. | 2 / 3 |
Total | 6 / 12 Passed |
Validation
90%Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.
Validation — 10 / 11 Passed
Validation for skill structure
| Criteria | Description | Result |
|---|---|---|
metadata_field | 'metadata' should map string keys to string values | Warning |
Total | 10 / 11 Passed | |
c5bf673
Table of Contents
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.