Skill Pack SDK

Skill Pack SDK Documentation

Buat, publikasikan, dan distribusikan custom skill untuk AI Agent ConAI. Skill Pack SDK memungkinkan developer memperluas kemampuan AI Agent dengan logika bisnis kustom — tanpa mengubah core platform.

Zero Boilerplate

Mulai dengan satu file YAML. Tidak perlu framework atau dependency tambahan.

Plugin-Ready

Skill Pack bisa di-install, di-update, dan di-uninstall tanpa restart Agent.

Sandboxed Execution

Setiap skill berjalan di sandbox terisolasi dengan permission boundary yang ketat.

Quick Start

Mulai dari nol ke Skill Pack yang siap publikasi dalam 5 langkah.

  1. 1Install ConAI CLI: npm install -g @conai/cli
  2. 2Inisialisasi project: conai sdk init my-skill-pack
  3. 3Edit manifest.yaml dan tulis skill logic di src/index.ts
  4. 4Jalankan test lokal: conai sdk test --local
  5. 5Publikasi: conai sdk publish

Struktur Project

Struktur default yang di-generate oleh conai sdk init.

my-skill-pack/
├── manifest.yaml          # Metadata, permissions, triggers
├── src/
│   ├── index.ts           # Entrypoint — handler utama
│   ├── handlers/          # Handler per trigger type
│   │   ├── keyword.ts     # Handler untuk keyword trigger
│   │   ├── intent.ts      # Handler untuk intent trigger
│   │   └── schedule.ts    # Handler untuk scheduled trigger
│   └── utils/             # Helper functions
│       └── api-client.ts  # HTTP client wrapper
├── tests/
│   ├── unit.test.ts       # Unit tests
│   └── integration.test.ts # Integration tests (sandbox)
├── conai.config.ts        # SDK configuration
├── package.json
└── README.md

Manifest Reference

Setiap Skill Pack harus memiliki file manifest.yaml di root project.

FieldTipeRequiredDeskripsi
namestring YaNama unik skill pack (lowercase, dash-case, max 64 chars)
versionsemver YaVersi semantic versioning (e.g. 1.2.0)
descriptionstring YaDeskripsi singkat maksimal 256 karakter
authorstring YaNama atau organisasi pembuat skill
licensestringOpsionalSPDX license identifier (default: MIT)
entrypointstring YaPath ke file utama skill (e.g. src/index.ts)
permissionsstring[] YaDaftar permission yang dibutuhkan (network, database, http, filesystem)
triggersTrigger[] YaDaftar trigger: keyword, intent, schedule, webhook, atau manual
parametersParameter[]OpsionalDefinisi parameter konfigurasi yang bisa diisi user
dependenciesstring[]OpsionalSkill pack lain yang menjadi dependency
min_platform_versionsemverOpsionalVersi minimum ConAI platform yang dibutuhkan
tagsstring[]OpsionalTag untuk discoverability di Marketplace

Contoh Manifest

# manifest.yaml
name: isp-troubleshoot
version: 1.0.0
description: "Skill Pack untuk troubleshooting ISP — cek bandwidth, latency, dan status ONU."
author: "ConAI Engineering"
license: MIT
entrypoint: src/index.ts

permissions:
  - network:http
  - database:read
  - secret:access

triggers:
  - type: keyword
    keywords: ["cek bandwidth", "troubleshoot", "status onu"]
  - type: intent
    intent: "network_diagnostics"

parameters:
  - name: mikrotik_host
    type: string
    required: true
    description: "Hostname atau IP MikroTik router"
  - name: customer_pppoe
    type: string
    required: false
    description: "Username PPPoE pelanggan untuk cek spesifik"

tags:
  - isp
  - troubleshooting
  - mikrotik
  - network

min_platform_version: "2.0.0"

Skill Handler

Setiap skill handler mengekspor fungsi execute() yang menerima context dan parameters.

// src/index.ts
import { SkillContext, SkillResponse } from "@conai/sdk";

export async function execute(
  ctx: SkillContext,
  params: Record<string, unknown>
): Promise<SkillResponse> {
  const { mikrotik_host, customer_pppoe } = params;

  // Invoke ConAI Provisioning API untuk cek bandwidth
  const bandwidth = await ctx.api.get(
    `${mikrotik_host}/rest/interface/pppoe-active`,
    { headers: ctx.auth.mikroTikHeaders() }
  );

  const activeSessions = bandwidth.data.filter(
    (s: { name: string }) =>
      !customer_pppoe || s.name === customer_pppoe
  );

  return {
    status: "success",
    message: `Ditemukan ${activeSessions.length} sesi aktif.`,
    data: { sessions: activeSessions },
    suggest_runbook: activeSessions.length === 0
      ? "isp-onu-reboot"
      : undefined,
  };
}

Permissions System

Setiap Skill Pack harus mendeklarasikan permission yang dibutuhkan. Permission dievaluasi saat installasi dan saat runtime.

PermissionScopeRisk Level
network:httpHTTP request ke endpoint eksternalMedium
network:websocketKoneksi WebSocket real-timeMedium
database:readBaca data dari database pelangganLow
database:writeTulis/update data ke database pelangganHigh
filesystem:readBaca file dari workspace terisolasiLow
filesystem:writeTulis file ke workspace terisolasiMedium
agent:invokeInvoke agent/skill lain secara internalMedium
secret:accessAkses environment variables tersimpanHigh

API Endpoints

Manage Skill Packs melalui REST API. Semua request memerlukan API key di header.

MethodEndpointDeskripsi
POST/api/v1/sdk/packsUpload & publikasi Skill Pack baru
GET/api/v1/sdk/packsList semua Skill Pack yang tersedia
GET/api/v1/sdk/packs/:idDetail Skill Pack berdasarkan ID
PUT/api/v1/sdk/packs/:idUpdate metadata Skill Pack
DELETE/api/v1/sdk/packs/:idHapus Skill Pack dari registry
POST/api/v1/sdk/packs/:id/installInstall Skill Pack ke Agent tertentu
DELETE/api/v1/sdk/packs/:id/installUninstall Skill Pack dari Agent
POST/api/v1/sdk/packs/:id/testJalankan test suite Skill Pack di sandbox

Error Codes

CodeHTTP StatusDeskripsi
PACK_NOT_FOUND404Skill Pack dengan ID/name tidak ditemukan
INVALID_MANIFEST400manifest.yaml tidak valid atau field required hilang
VERSION_CONFLICT409Versi yang di-upload sudah ada di registry
PERMISSION_DENIED403Skill Pack meminta permission yang tidak diizinkan
SANDBOX_VIOLATION422Skill Pack melanggar sandbox boundary saat test
QUOTA_EXCEEDED429Batas upload Skill Pack per hari tercapai
DEPENDENCY_MISSING422Dependency Skill Pack tidak ditemukan di registry
PLATFORM_INCOMPATIBLE422Skill Pack memerlukan versi platform yang lebih baru

Best Practices

Keep It Focused

Satu Skill Pack = satu domain masalah. Jangan buat Skill Pack yang menangani terlalu banyak hal.

Minimal Permissions

Deklarasikan hanya permission yang benar-benar dibutuhkan. Ini meningkatkan trust dan mempercepat review.

Idempotent Execution

Pastikan handler bisa dipanggil berulang dengan input yang sama tanpa side effect ganda.

Structured Responses

Selalu return SkillResponse dengan status, message, dan data. Ini memudahkan agent reasoning.

Semantic Versioning

Ikuti semver: patch untuk fix, minor untuk fitur baru, major untuk breaking changes.

Documentation

Sertakan README.md dengan contoh penggunaan, parameter, dan expected output.

Butuh bantuan?

Ikuti workshop interaktif kami di Documentation Hub atau hubungi tim developer relations di [email protected].

← Documentation HubAPI Reference →Runbook Library →