Episode ini membongkar anatomi Hermes AI Agent: controller yang mengorkestrasi lifecycle, kernel yang menjalankan layanan inti, tools yang memberi kapabilitas, memory yang menyimpan konteks, dan environment tempat agent beroperasi, dilengkapi integrasi LLM dan custom action.

Di episode 1 kalian memahami mengapa Hermes AI Agent unggul: event-driven, plugin extensibility, dan orchestration. Sekarang kita naik satu tingkat lebih dalam: bagaimana Hermes benar-benar bekerja dari dalam.
Roadmap episode ini: kita akan mengenal lima komponen utama — controller, kernel, tools, memory, dan environment — memetakan lifecycle agen dari perception, planning, action, hingga reflection, lalu melihat bagaimana LLM terintegrasi, bagaimana tool invocation berjalan, dan bagaimana menulis custom action pertama.
Hermes dibangun sebagai lima lapis yang saling terhubung. Setiap lapis punya tanggung jawab yang jelas:
| Komponen | Peran | Analogi |
|---|---|---|
| Controller | Mengorkestrasi lifecycle dan conversation loop | Dirigen orkestra |
| Kernel | Layanan inti: provider, context, iterasi, persistensi | Mesin pesawat |
| Tools | Kapabilitas yang bisa dipanggil agent | Tangan dan alat |
| Memory | Penyimpanan konteks dan ingatan jangka panjang | Notepad |
| Environment | Tempat eksekusi dan antarmuka komunikasi | Panggung |
Controller adalah komponen yang mengatur alur: menerima pesan masuk, menyusun konteks, memanggil model, mengeksekusi tool, dan mengulang sampai jawaban final. Kernel menyediakan layanan yang dipakai controller — resolusi provider LLM, manajemen konteks, batas iterasi, dan persistensi sesi. Tools adalah fungsi yang terdaftar di registry dan bisa dipanggil model. Memory menyimpan apa yang agent "ingat" lintas sesi. Environment menentukan di mana agent berjalan — CLI, server, atau container — dan lewat platform apa dia diajak bicara.
Pesan Masuk
|
v
Controller -> Kernel (provider, konteks) -> LLM
| |
|--- tool call? -----------------------> |
v v
Tools (registry) <-------- hasil eksekusi <- model
|
v
Memory & Environment (persistensi, observability)Setiap putaran conversation di Hermes mengikuti empat fase yang bisa diamati lewat event:
todo untuk mencatat subtask dan melacak progres.const agent = new HermesAgent({ profile: "./profiles/support.ts" });
agent.on("perception", (ctx) => log.perceive(ctx.userMessage));
agent.on("planning", (plan) => log.plan(plan.tasks));
agent.on("action", (toolCall) => log.act(toolCall.name));
agent.on("reflection", (summary) => log.reflect(summary));
const answer = await agent.run("Analisis log hari ini dan kirim ringkasan.");Empat fase ini bukan sekadar teori — dengan men-subscribe event seperti di atas, kalian bisa memantau apa yang agent pikirkan dan lakukan, yang menjadi dasar observability di episode 7.
Setiap fase lifecycle mengarah ke satu hal: pertukaran pesan dengan LLM. Controller menyusun riwayat percakapan plus definisi tool (schema) ke dalam satu request, lalu model memilih jawaban teks atau satu atau lebih tool call.
{
"type": "function",
"function": {
"name": "getStockLevel",
"description": "Mengambil level stok produk berdasarkan SKU",
"parameters": {
"type": "object",
"properties": {
"sku": { "type": "string" }
},
"required": ["sku"]
}
}
}Saat model mengembalikan tool call, controller mencarinya di registry, mengeksekusi handler-nya, lalu memasukkan hasilnya sebagai pesan tool ke riwayat dan mengirim request berikutnya. Loop ini berjalan dalam batas iterasi yang diatur kernel — default 90 iterasi — untuk mencegah agent berputar tanpa akhir. Paham alur ini penting sebelum kita menulis custom action.
Custom action adalah fungsi biasa yang didaftarkan ke registry. Contoh nyata: tool untuk mengecek stok dari API internal.
import { defineTool } from "@hermes/sdk";
export const getStockLevel = defineTool({
name: "getStockLevel",
description: "Mengambil level stok produk berdasarkan SKU",
parameters: {
type: "object",
properties: {
sku: { type: "string" },
},
required: ["sku"],
},
async handler(args, ctx) {
const res = await ctx.http.get(`/api/inventory/${args.sku}`);
return JSON.stringify({ sku: args.sku, level: res.data.level });
},
});Perhatikan anatominya: name dan description menjadi petunjuk bagi model kapan tool ini dipakai; parameters adalah schema JSON yang memvalidasi argumen; handler adalah eksekusi sebenarnya, dengan akses ke konteks seperti ctx.http. Daftarkan di config agent dan tool ini langsung tersedia untuk dipanggil model — tanpa menyentuh kernel sama sekali.
Info
Handler tool sebaiknya mengembalikan string yang ringkas dan siap dibaca model. Hasil panjang sebaiknya dirangkum atau disimpan ke file yang dirujuk — ingat, setiap karakter hasil tool masuk ke konteks dan menghabiskan token.
Episode 2 membuka kotak hitam Hermes: lima komponen yang saling terhubung, lifecycle empat fase yang bisa diamati lewat event, integrasi LLM melalui tool invocation yang ter-loop, dan custom action pertama yang berdiri sendiri tanpa menyentuh kernel.
Inti yang harus dibawa pulang:
Di episode 3 selanjutnya kita akan turun ke praktik nyata: instalasi dan setup dasar — menyusun project Hermes Agent, menginstal dependensi, mengonfigurasi runtime dan provider model, lalu menjalankan agent lokal pertama kalian. Arsipkan pemahaman arsitektur ini, karena akan menjadi peta saat kita mulai ngoprek!