Belajar Hermes AI Agent - Agent Customization & Extensions
Episode 16 of 23

Belajar Hermes AI Agent - Agent Customization & Extensions

Episode ini mengubah agent generik menjadi agent khusus: menulis custom actions dan plugin dengan hooks, membangun tool domain-spesifik yang mudah dipahami model, serta mengemas semuanya menjadi modul yang bisa dipasang dan dipakai ulang lintas project.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 15 kalian membuat agent hemat dan cepat: anggaran token, semantic cache untuk respons berulang, tool cache ber-TTL, dan profiling latensi untuk menemukan titik hambat. Agent kalian kini efisien. Tapi efisiensi tidak menambah kemampuan — untuk masalah bisnis yang spesifik, tool bawaan Hermes sering belum cukup.

Roadmap episode ini: memahami anatomi plugin Hermes, menulis custom actions dan hooks, membangun tool khusus domain yang dipahami model, lalu mengemas semuanya menjadi modul yang bisa dipakai ulang. Ini adalah episode di mana agent kalian mulai "dibentuk" untuk domain kalian sendiri.

Anatomi Plugin Hermes

Plugin Hermes adalah satu paket kecil berisi dua hal: manifest yang mendeskripsikan plugin, dan entry module yang mendaftarkan action, tool, dan hook. Pemisahan ini penting: manifest dipakai untuk resolusi dan instalasi, kode dipakai untuk runtime.

plugin.yml - manifest plugin
name: support-autopilot
version: 1.2.0
entry: index.ts
hooks:
  - on_turn_start
  - on_tool_invoked
capabilities:
  - action:order_status
  - tool:get_stock

Field capabilities semacam "label" yang bisa dibaca oleh agent orkestrator atau permission system (ingat episode 11) untuk memutuskan kapan plugin ini boleh dipakai. Versioning manifest juga menjadi dasar upgrade — versi yang berubah berarti perilaku plugin bisa berubah, dan itu harus disadari oleh tim yang memasangnya.

Action adalah unit kerja paling sederhana: sebuah fungsi bernama dengan schema input yang dipanggil model berdasarkan deskripsi. Kuncinya ada di description — model memutuskan memakai action ini atau tidak dari kalimat tersebut, bukan dari nama kodenya.

actions/order-status.ts - custom action
import { action } from "@hermes/plugin";
 
export default action({
  name: "order_status",
  description: "Cek status order berdasarkan nomor order. Pakai saat user menanyakan posisi pesanannya.",
  input: {
    orderId: { type: "string", required: true },
  },
  async run({ orderId }) {
    return queryOrder(orderId);
  },
});

Perhatikan tiga hal. Pertama, input disertai tipe dan required sehingga argumen divalidasi sebelum run dipanggil. Kedua, run mengembalikan data terstruktur yang akan disitasi model dalam jawabannya. Ketiga, deskripsi ditulis sebagai kalimat yang menjelaskan kapan action dipakai, bukan cara kerjanya — model jauh lebih pintar memilih action dari deskripsi fungsional seperti ini.

Membangun Tool Domain-Spesifik

Action sederhana menangani satu pertanyaan. Untuk integrasi yang lebih dalam — misalnya cek stok gudang, hitung ongkir, atau ambil data dari sistem internal — bangun tool dengan schema input dan output yang lengkap. Schema output penting supaya model tahu cara membaca hasilnya.

import { tool } from "@hermes/plugin";
 
export const stockTool = tool({
  name: "get_stock",
  description: "Ambil jumlah stok untuk SKU tertentu. Pakai saat user menanyakan ketersediaan barang.",
  input: {
    sku: { type: "string", required: true },
  },
  async run({ sku }) {
    return warehouse.queryStock(sku);
  },
});

Tool di daftarkan lewat config sehingga bisa digabungkan dengan tool bawaan (builtin), tool dari plugin (plugin), atau file lokal (local). Urutan dalam daftar memengaruhi preferensi model — tool yang paling relevan untuk domain kalian sebaiknya ditaruh lebih atas.

Hook: Menyuntik Perilaku ke Lifecycle

Selain menambah kemampuan, plugin juga bisa menyuntik perilaku ke lifecycle agent lewat hooks. Ini mekanisme yang sama yang dipakai tim observability di episode 7 untuk mencatat event, atau yang akan dipakai untuk guard layer di episode 18.

hooks/audit-hook.ts - catat pemanggilan tool
import { hook } from "@hermes/plugin";
 
export const auditHook = hook({
  on: "on_tool_invoked",
  async run(event) {
    await auditLog(event.toolName, event.args, event.sessionId);
  },
});

Hook seperti on_turn_start berjalan sebelum agent menyusun jawaban — cocok untuk menyuntikkan konteks dari sistem internal. on_tool_invoked berjalan tepat sebelum tool dieksekusi — cocok untuk audit, rate limiting, atau pemblokiran. Satu aturan praktis: hook harus cepat dan tidak boleh melempar error yang tidak ditangani, karena ia ikut berada di jalur kritis percakapan.

Mengemas & Memasang Modul Agent

Setelah action, tool, dan hook dirangkai, kalian punya modul agent yang bernilai. Jangan biarkan ia terkurung di satu project — kemas menjadi tarball, simpan di registry, dan pasang di project lain. Hermes menyediakan perintah kemasan dan pemasangan:

hermes plugin pack --output dist/support-autopilot-1.2.0.tgz

Sekali dikemas, plugin bisa dipublikasikan ke registry npm internal maupun didistribusikan sebagai tarball. hermes plugins list menampilkan plugin terpasang beserta versinya, dan versi di-pin supaya tim tidak diam-diam memakai perilaku yang berubah. Kalau project kalian sudah memakai semantic-release (seperti repo ini), bump versi manifest plugin bisa mengikuti konvensi commit yang sama: feat: menaikkan minor, fix: menaikkan patch, dan breaking change menaikkan major.

Penutup

Episode 16 mengubah agent generik menjadi alat yang dibentuk untuk domain kalian. Kalian memahami anatomi plugin lewat manifest dan entry module, menulis custom action dengan deskripsi yang membuat model tahu kapan memakainya, membangun tool domain-spesifik dengan schema lengkap, menyuntik perilaku lewat hooks, dan mengemas semuanya menjadi modul yang terpasang dan ter-versioning dengan rapi.

Inti yang harus dibawa pulang:

  • Manifest mendeskripsikan plugin; kode entry mendaftarkan action, tool, dan hook.
  • Deskripsi action adalah "mata" model — tulis kapan dipakai, bukan bagaimana bekerja.
  • Tool domain-spesifik butuh schema input dan output yang lengkap agar model bisa menggunakannya.
  • Hook menyuntik perilaku ke lifecycle tanpa mengubah kode agent inti.
  • Kemas plugin sebagai tarball, pasang dengan hermes plugins install, dan pin versinya.

Episode 17 berikutnya kita merangkai semua agent yang sudah kalian bentuk menjadi sebuah tim: Multi-agent Coordination — pola komunikasi antar agent, orkestrator yang mendelegasikan subtask ke worker, serta strategi arbitrasi dan konsistensi ketika banyak agent bekerja serempak. Sampai jumpa!

Belajar Hermes AI Agent - Agent Customization & Extensions | Belajar Hermes AI Agent