Files
arkts-skills/AGENTS.md
2026-01-26 10:50:52 +08:00

6.3 KiB

AGENTS.md - OpenCode Skills Repository

This repository contains AI coding agent skills for HarmonyOS/ArkTS development. Skills teach AI assistants how to build, deploy, and develop HarmonyOS applications.

Repository Structure

skills/
├── arkts-development/          # ArkTS/ArkUI development skill
│   ├── SKILL.md               # Main skill definition
│   ├── assets/                # Code templates (.ets files)
│   └── references/            # API docs, migration guide, patterns
└── harmonyos-build-deploy/    # Build & deploy skill
    ├── SKILL.md               # Main skill definition
    └── references/            # Device installation guide

Build/Lint/Test Commands

This is a documentation repository - no build system for the repo itself. However, the skills document these HarmonyOS CLI tools:

Build Commands (hvigorw)

# Incremental build (default for development)
hvigorw assembleApp --mode project -p product=default -p buildMode=release --no-daemon

# Clean build
hvigorw clean --no-daemon
hvigorw assembleApp --mode project -p product=default -p buildMode=release --no-daemon

# Build single module (faster iteration)
hvigorw assembleHap -p module=entry@default --mode module -p buildMode=release --no-daemon

# Run tests
hvigorw onDeviceTest -p module=entry -p coverage=true    # On-device test
hvigorw test -p module=entry                              # Local test

Package Manager (ohpm)

ohpm install --all              # Install all dependencies
ohpm clean && ohpm cache clean  # Deep clean

Code Linter (codelinter)

codelinter                      # Check current project
codelinter --fix                # Check and auto-fix
codelinter -f json -o report.json  # JSON output
codelinter -i                   # Incremental (Git changes only)
codelinter --exit-on error,warn # CI/CD with exit codes

Device Commands (hdc)

hdc list targets                # List devices (returns UDID)
hdc -t <UDID> file send <local> <remote>  # Push files
hdc -t <UDID> shell "bm install -p <path>" # Install app
hdc -t <UDID> shell "aa start -a EntryAbility -b <bundleName>" # Launch app

Code Style Guidelines

ArkTS Language Constraints

ArkTS is stricter than TypeScript. These are prohibited:

Prohibited Use Instead
any, unknown Explicit types, interfaces
var let, const
Dynamic property obj['key'] Fixed object structure
for...in, delete, with for...of, array methods
#privateField private keyword
Structural typing Explicit implements/extends

Naming Conventions

Element Convention Example
Components (struct) PascalCase HomePage, UserCard
Methods camelCase loadData(), handleClick()
Properties/Variables camelCase isLoading, userName
Interfaces PascalCase UserInfo, ApiResponse
Constants camelCase or UPPER_SNAKE maxRetries, API_URL
Files (skill docs) kebab-case api-reference.md
Skill directories kebab-case arkts-development

Type Annotations

Always use explicit type annotations:

// Required: Explicit types on declarations
@State isLoading: boolean = false;
@State items: ItemType[] = [];

// Required: Return types on methods
async loadData(): Promise<void> { }
navigateToDetail(item: ItemType): void { }

// Required: Parameter types
ForEach(this.items, (item: ItemType) => { ... }, (item: ItemType) => item.id)

Component Structure

Follow this standard component layout:

@Entry
@Component
struct ComponentName {
  // 1. State decorators
  @State isLoading: boolean = false;
  @State errorMessage: string = '';

  // 2. Lifecycle methods
  aboutToAppear(): void { this.loadData(); }
  aboutToDisappear(): void { /* cleanup */ }

  // 3. Business methods
  async loadData(): Promise<void> { }

  // 4. Builder methods (reusable UI blocks)
  @Builder ItemCard(item: ItemType) { }

  // 5. Build method (always last)
  build() { }
}

Error Handling Pattern

async loadData(): Promise<void> {
  this.isLoading = true;
  try {
    // async operation
  } catch (error) {
    this.errorMessage = 'Failed to load data';
  } finally {
    this.isLoading = false;
  }
}

Import Style

Use HarmonyOS Kit imports:

import { router } from '@kit.ArkUI';
import { http } from '@kit.NetworkKit';
import { preferences } from '@kit.ArkData';

Skill File Format

Each skill follows this structure:

---
name: skill-name
description: Detailed description for AI agent matching
---

# Skill Title

## Quick Start / Quick Reference
## Main Content Sections
## Troubleshooting
## Reference Files

YAML Frontmatter

Required fields:

  • name: kebab-case identifier matching directory name
  • description: Detailed description for AI agent matching (trigger keywords)

Documentation Conventions

  • Use tables for command references and parameters
  • Include code blocks with language specifiers (typescript, bash)
  • Cross-reference related skills and reference files
  • Use bilingual content (Chinese/English) for HarmonyOS context
  • Structure: Quick Reference first, then detailed sections

File Organization

  • Main skill definition: SKILL.md (uppercase)
  • Code templates: assets/*.ets
  • Reference documentation: references/*.md
  • All filenames: kebab-case

Common Patterns

State Management Decorators

Decorator Direction Usage
@State Internal Component's own mutable state
@Prop Parent → Child One-way binding (child copy)
@Link Parent ↔ Child Two-way binding (pass with $var)
@Provide/@Consume Ancestor → Descendant Cross-level state sharing

Layout Components

Column({ space: 10 }) { }  // Vertical layout
Row({ space: 10 }) { }     // Horizontal layout
Stack() { }                 // Overlay layout
List({ space: 10 }) { }    // Scrollable list

ForEach Pattern

Always provide explicit types and key generator:

ForEach(this.items, (item: ItemType) => {
  ListItem() { Text(item.title) }
}, (item: ItemType) => item.id)  // Key generator for efficient updates