Membedah arsitektur inti A2A: dua peran client agent dan remote agent, Agent Card sebagai gerbang discovery, lifecycle Task sebagai kontrak komunikasi, Message/Part untuk konten multimodal, dan empat binding protokol JSON-RPC, HTTP, gRPC, serta SSE.

Di episode 1 kita memahami kenapa A2A lahir: agent dari framework berbeda butuh bahasa bersama, dan interaksi dipilih sebagai peer yang opaque. Sekarang saatnya melihat bagaimana protokol ini terstruktur.
Episode 2 adalah peta konsep. Kalian akan memahami dua peran utama — client agent dan remote agent — lalu empat blok penyusun: Agent Card, Task, Message/Part, dan binding protokol. Setiap blok akan dibedah lebih dalam di episode 3 sampai 5, jadi fokuslah pada bagaimana semuanya terangkai menjadi satu alur.
Seluruh arsitektur A2A bertumpu pada dua peran:
Penting untuk dipahami: peran ini tidak permanen. Satu agent bisa menjadi client dalam satu kolaborasi dan remote agent dalam kolaborasi lain. Inilah sifat peer-to-peer yang kita bahas di episode 1 — tidak ada hierarki abadi antara kedua peran.
Client Agent --(1) ambil Agent Card--> Server endpoint
Client Agent --(2) kirim task--------> Remote Agent
Remote Agent --(3) balas status------> Client Agent
Remote Agent --(4) kirim hasil-------> Client AgentSebelum mengirim task, client agent harus menemukan dan memahami remote agent. Di sinilah Agent Card berperan — sebuah dokumen JSON yang dipublikasikan remote agent di URL publiknya. Isinya mendeskripsikan siapa agent itu dan apa yang bisa dilakukannya:
{
"name": "Agent Dukungan",
"description": "Membantu troubleshooting produk",
"url": "https://dukungan.example.com",
"capabilities": {
"streaming": true
}
}Konsepnya persis analog dengan OpenAPI: sebelum memanggil API, client membaca spec-nya. Hanya saja, Agent Card fokus pada kemampuan agent, bukan sekadar daftar endpoint. Episode 3 akan membedah seluruh field-nya. Untuk melihat card dalam bentuk aslinya, coba curl -s https://dukungan.example.com/.well-known/agent-card.
Satu unit kerja dalam A2A disebut Task. Task-lah yang menjadi "benang" penghubung seluruh percakapan antara client dan remote agent. Setiap task memiliki identifier, status, dan riwayat pesan.
{
"id": "task-123",
"status": {
"state": "working"
},
"messages": []
}Status task mengalir melalui state machine: dari submitted, menjadi working, bisa berhenti di input-required jika agent butuh informasi tambahan, dan berakhir di completed, failed, atau canceled. Detail state machine ini akan kita bedah tuntas di episode 4.
Percakapan dalam sebuah task direpresentasikan sebagai rangkaian Message, dan setiap message berisi satu atau lebih Part. Keindahan model ini: konten tidak terbatas pada teks.
| Tipe Part | Contoh |
|---|---|
| text | instruksi, penjelasan, hasil ringkas |
| file | PDF laporan, gambar, dokumen |
| structured | data JSON ber-schema |
Seorang agent bisa mengirim hasil berupa teks plus file CSV plus data terstruktur dalam satu message. Kemampuan multimodal inilah yang membedakan A2A dari sekadar API teks biasa — dan akan kita praktikkan di episode 8.
A2A tidak mengikat diri pada satu transport. Model datanya didefinisikan di atas JSON-RPC 2.0, tetapi bisa diangkut lewat beberapa binding:
Pemisahan antara model data dan transport ini membuat A2A fleksibel: logika protokol tidak berubah saat kalian pindah dari HTTP ke gRPC. Inilah salah satu alasan desainnya bertahan sampai v1.0.
Info
Jangan bingung dengan istilah "binding" di sini. Binding hanyalah cara membungkus pesan JSON-RPC ke dalam transport tertentu — isi pesannya tetap sama, hanya bungkusnya yang beda.
Sekarang mari kita rangkai seluruh blok menjadi satu alur utuh. Kolaborasi A2A berjalan seperti ini:
message/send melalui binding JSON-RPC over HTTP.submitted ke working.completed, membawa hasil akhir multimodal.tasks/get.Secara teknis, langkah kedua terlihat seperti ini lewat HTTP:
curl -s -X POST https://dukungan.example.com \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":"1","method":"message/send","params":{"message":{"role":"user","parts":[{"text":"Bantu analisis log error"}]}}}'Semua langkah ini bekerja tanpa client pernah melihat state internal, memory, atau tools milik remote agent — konsisten dengan prinsip opaque yang kita pelajari di episode 1.
Inilah inti yang harus dibawa pulang:
Di episode 3 kita membedah komponen pertama secara menyeluruh: Agent Card & discovery — mulai dari field agentName, description, capabilities, skills, authentication, hingga security card bertanda tangan di v1.0. Kalian akan belajar membaca dan menyusun Agent Card sendiri. Sampai jumpa!