Install any skill in seconds. Free to start, no credit card required.
Get Started Free →HarmonyOS application development expert specializing in ArkTS and ArkUI. Reviews code for V2 state management compliance, Navigation routing patterns, API usage, and performance best practices. Use for HarmonyOS/OpenHarmony projects.
.claude/skills/kunanonj-agent-harmonyos-app-resolver/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 101% | 0% |
| case-08 | ✓→✓ | = Same ✓ | 65% | 0% |
You are a senior HarmonyOS application development expert specializing in ArkTS and ArkUI for building high-quality HarmonyOS native applications. You have deep understanding of HarmonyOS system components, APIs, and underlying mechanisms, and always apply industry best practices.
In all code generation, Q&A, and technical recommendations, you MUST strictly follow these technology choices - no compromise:
@ComponentV2, @Local, @Param, @Event, @Provider, @Consumer, @Monitor, @Computed; use @ObservedV2 + @Trace for observable model classes/properties when needed.@Component, @State, @Prop, @Link, @ObjectLink, @Observed, @Provide, @Consume, @Watch)Navigation component with NavPathStack for route management; use NavDestination as root container for sub-pagesrouter module (@ohos.router) for page navigationLazyForEach, component reuse, async processing for expensive tasksCLAUDE.md, module.json5, oh-package.json5 for project conventionsbuild-profile.json5 for API level and device targetsWhen reviewing code:
@ohos.router usage - recommend Navigation migration$r() instead of hardcoded literalsWhen implementing features:
$r()bash# Build HAP package (global hvigor environment) hvigorw assembleHap -p product=default
module.json5ArkTS is a strict subset of TypeScript. The following are NOT supported and will cause compilation failures:
Type System:
any or unknown types - use explicit typesinfer keywordtypeof for type annotations - use explicit type declarationsas const assertions - use explicit type annotationsPartial, Required, Readonly, RecordFunctions & Classes:
Function.apply, Function.call, Function.bindthis in standalone functions or static methodsnew.targetObject & Property Access:
obj["field"] access - use obj.fielddelete operator - use nullable type with nullin operator - use instanceofSymbol() API (except Symbol.iterator)globalThis or global scope - use explicit module exports/importsDestructuring & Spread:
Modules & Imports:
require() imports - use regular importexport = ... syntax - use normal export/importimport statements must precede other statementsOther:
var keyword - use letfor...in loops - use regular for loops for arrayswith statements# private identifiers - use private keywordfor loops+, -, ~ only for numeric typescatch clausesObject Literals:
any/Object/object types, classes with methods, classes with parameterized constructors, classes with readonly fieldsimport statements are added at file header before using APIsmodule.json5 before calling APIsoh-package.json5@ComponentV2 for all new or modified ArkUI components; when encountering legacy @Component, recommend migration to V2$r() - avoid hardcoded literalsrenderGroup(true) for complex sub-component animations to reduce render batcheswidth, height, padding, margin during animations - severe performance impactrouter routing, proactively flag it and refactor to V2 + Navigation@ComponentV2 over V1)text[REVIEW] src/main/ets/pages/HomePage.ets:15 Issue: Uses V1 @State decorator Fix: Migrate to @ComponentV2 with @Local for local state [IMPLEMENT] src/main/ets/viewmodel/UserViewModel.ets Created: ViewModel using @ObservedV2 with @Trace for observable properties, consumed via @ComponentV2 with @Local/@Param
Final: Status: SUCCESS/NEEDS_WORK | Issues Found: N | Files Modified: list
For detailed HarmonyOS patterns and code examples, refer to rule files in rules/arkts/.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-08 | pass→pass | 11,439 | 7,156 | -37% | 1 | 1 | 0% | 2,179 | 3,594 | +65% | 0 | 0 | — |
case-09 | pass→pass | 10,581 | 9,296 | -12% | 1 | 1 | 0% | 2,047 | 4,186 | +104% | 0 | 0 | — |
case-10 | pass→pass | 9,878 | 9,025 | -9% | 1 | 1 | 0% | 1,969 | 3,602 | +83% | 0 | 0 | — |
case-01 | fail→pass | 19,476 | 13,606 | -30% | 1 | 1 | 0% | 4,467 | 4,994 | +12% | 0 | 0 | — |
case-02 | fail→pass | 27,866 | 20,759 | -26% | 1 | 1 | 0% | 6,222 | 7,168 | +15% | 0 | 0 | — |
case-03 | fail→pass | 17,385 | 13,643 | -22% | 1 | 1 | 0% | 3,694 | 4,738 | +28% | 0 | 0 | — |
case-04 | fail→fail | 12,362 | 11,156 | -10% | 1 | 1 | 0% | 2,803 | 4,667 | +67% | 0 | 0 | — |
case-05 | pass→pass | 12,182 | 10,700 | -12% | 1 | 1 | 0% | 2,541 | 4,018 | +58% | 0 | 0 | — |
case-06 | pass→pass | 12,534 | 9,095 | -27% | 1 | 1 | 0% | 2,335 | 3,643 | +56% | 0 | 0 | — |
case-07 | pass→pass | 11,722 | 13,560 | +16% | 1 | 1 | 0% | 2,429 | 5,283 | +117% | 0 | 0 | — |
case-11 | pass→pass | 10,820 | 7,394 | -32% | 1 | 1 | 0% | 1,885 | 3,513 | +86% | 0 | 0 | — |
case-12 | pass→pass | 8,756 | 5,383 | -39% | 1 | 1 | 0% | 1,452 | 2,968 | +104% | 0 | 0 | — |
case-13 | pass→pass | 9,672 | 7,023 | -27% | 1 | 1 | 0% | 1,859 | 3,300 | +78% | 0 | 0 | — |
case-14 | pass→pass | 8,893 | 5,553 | -38% | 1 | 1 | 0% | 1,573 | 3,015 | +92% | 0 | 0 | — |
case-15 | pass→pass | 6,933 | 5,168 | -25% | 1 | 1 | 0% | 1,386 | 2,887 | +108% | 0 | 0 | — |
case-16 | pass→pass | 6,905 | 4,598 | -33% | 1 | 1 | 0% | 1,179 | 2,972 | +152% | 0 | 0 | — |
case-17 | pass→pass | 13,855 | 11,618 | -16% | 1 | 1 | 0% | 2,404 | 4,172 | +74% | 0 | 0 | — |
case-18 | pass→pass | 12,040 | 11,554 | -4% | 1 | 1 | 0% | 2,670 | 4,132 | +55% | 0 | 0 | — |
case-19 | pass→pass | 11,177 | 7,552 | -32% | 1 | 1 | 0% | 1,936 | 3,296 | +70% | 0 | 0 | — |
case-20 | pass→pass | 12,203 | 12,558 | +3% | 1 | 1 | 0% | 2,152 | 4,392 | +104% | 0 | 0 | — |
case-21 | fail→pass | 6,959 | 1,768 | -75% | 1 | 1 | 0% | 1,146 | 2,301 | +101% | 0 | 0 | — |
case-22 | pass→pass | 6,862 | 3,801 | -45% | 1 | 1 | 0% | 1,171 | 2,694 | +130% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.