SOP Memori Tim AI

Satu sumber aturan untuk semua staf AI (Akbar, Ary, Opi, Dika, Eko) dan Pak Adi: memori kita ada di mana, bentuknya apa, cara mengisi, dan cara mengambilnya. Hasil diskusi Pak Adi & Akbar 12/10/2026. Status: rancangan untuk DIUJI beberapa hari. Tabel database di bawah belum dibangun; yang dibangun nanti mengikuti halaman ini.

Isi:
1. Kenapa perlu2. Tujuh model memori2b. Detail + contoh3. Struktur tabel4. Aturan kunci & versi5. Sesi chat6. Pengingat7. Cara MENULIS8. Cara MENGAMBIL9. Larangan10. Per peran11. Skrip12. Database & sinkron

1. Kenapa perlu

Memori yang acak-acakan merugikan dua hal:

  1. Boros token. Untuk mencari satu hal, AI harus menyisir banyak teks. Makin banyak klien, makin boros, sampai jatah mingguan bisa habis dalam sehari.
  2. Jawaban tidak relevan. Aturan lama & baru tercecer di beberapa tempat, sesi chat panjang di-compact, akhirnya jawaban ke prospek melenceng atau berputar-putar.

Prinsipnya sama dengan relational database: data ditata per tabel, punya indeks, jadi mencari tidak perlu menyisir semuanya. Menulis memang sedikit lebih repot (harus ditaruh di tempat yang benar); mencari jadi murah dan cepat.

Prinsip kedua: jangan mengandalkan ingatan sesi chat. Yang diandalkan adalah memori yang tertulis di tempatnya.

2. Tujuh model memori (HANYA tujuh ini)

Patokan tempat simpan: data yang bentuknya sama berulang-ulang & dicari per kolom → Postgres. Tulisan yang harus dibaca sebagai teks bersama kode / harus tetap terbaca walau database mati → berkas.

#ModelIsinyaDisimpan diDipakai oleh
1Profil orang (prospek/konsumen/member)Siapa orangnya, produk yang ia minati/beli + tahapnya, rangkuman obrolanPostgresCS (Ary, Opi), Akbar
2Product knowledge (PK)Pengetahuan untuk MENJUAL & MELAYANI: harga, isi/layanan, cara order, cara pakai, keberatan + jawaban, batas klaim, eskalasiPostgres (angka & penjelasan)CS, Akbar
3Brainstorming + MAPUntuk MEMBUAT produk. MAP = yang SUDAH dibangun, Brainstorming = yang BARU direncanakan. Begitu dibangun: masuk MAP, dihapus dari BrainstormingBerkas MD di folder kode proyeknyaEko, Dika, tim pembuat
4CLAUDE.mdKarakter & aturan yang SELALU berlaku. Umum untuk semua (mis. aturan gambar, salam, jujur, tanpa janji seumur hidup). Plus satu per peran: aturan cara kerja khusus peran itu (pendek)Berkas CLAUDE.md (otomatis termuat)Semua
5Akses & alatCara masuk server/PC, alat apa di mana, cara menyalakan ulang penjaga WA/tunnel, resep teknis panjang. TANPA isi password; hanya menunjuk tempatnyaBerkas MD kecil (sengaja bukan database: harus tetap terbaca walau database mati)Semua
6Papan tugas + pengingatPekerjaan yang SEDANG berjalan: siapa, apa, kapan, status, langkah berikut. Pengingat = tugas yang punya jamPostgresSemua; Akbar memantau
7Arsip log harianCatatan kejadian (siapa, kapan, apa). Hanya ditambah, tidak pernah dibaca utuhPostgresSemua (menulis), menelusuri bila perlu
Tidak ada kategori lain. Tidak ada lagi "SOP" terpisah dan tidak ada "feedback" terpisah. Masukan/koreksi dari Pak Adi atau pengambil keputusan: Bukan model memori: data transaksi (order Monyil, lisensi Magic, akun Caang, order Blitz) tetap di database sistemnya sendiri. Cukup dibaca lewat API/alat baca-saja, tidak disalin.

2b. Penjelasan tiap model + contoh

Model 1 — Profil orang

Untuk apa: supaya CS langsung tahu siapa yang sedang chat, tanpa membaca ulang semua obrolan lama. Kapan diisi: saat orang pertama kali chat (baris orang dibuat), tiap tahap berubah (orang_produk), dan tiap sesi ditutup (profil dirangkum ulang).

Contoh isi (contoh FIKTIF: Budi, kode org-0412):

orang_produktahapcatatan_produk
org-0412 · cncmemberMember CNC VIP sejak Agt 2026, aktif bertanya soal rules Meta.
org-0412 · tbatertarikTanya trial Rp50rb 12/10; belum kirim bahan LP.

Profil (versi berlaku): "Budi, jualan perlengkapan bayi di Bekasi. Member CNC sejak Agustus, paham dasar Meta Ads, suka penjelasan pakai angka. 12/10 tertarik TBA trial, keberatan: takut LP tidak sesuai brand. Janji: kirim foto produk 13/10. Gaya: santai, panggil 'Mas Budi'."

Profil = rangkuman UTUH yang ditulis ulang tiap sesi ditutup. Bukan tumpukan catatan per tanggal.

Model 2 — Product knowledge (PK)

Untuk apa: semua yang perlu diketahui untuk MENJUAL & MELAYANI satu produk, baik produk sendiri (Labbaik, TBA, Magic) maupun produk klien (Otopia). Kapan diisi: saat produk mulai dijual, dan setiap ada keputusan baru soal produk dari Pak Adi/pemilik produk.

Contoh baris pk_harga: otopia · anti-karat · avanza · bali · Rp2.100.000 · berlaku sejak 07/10 · berlaku

Contoh baris pk_penjelasan:

produk · topikisi
otopia · definisi-anti-karatLapisan pelindung kolong & rangka supaya tidak berkarat; proses ±1 hari, mobil bisa dipakai besoknya…
labbaik · keberatan-sudah-ada-buku-manasikBuku manasik tetap berguna; Labbaik melengkapi di HP: urutan langkah + doa tiap tahap, bisa dibuka saat tawaf…
labbaik · batas-klaimJangan klaim "pasti mabrur" / pengganti pembimbing; tanpa "seumur hidup".

Harga berubah → baris lama jadi usang, baris baru ditambah (slug sama). Tidak ada lagi harga di tiga tempat.

WAJIB: setiap informasi baru/tambahan tentang produk yang dijual atau dilayani (aturan diskon, promo, harga baru, garansi, jadwal, cara booking, jawaban keberatan) dimasukkan ke PK produk itu sendiri, BUKAN ke dokumen/berkas terpisah.
Contoh: Pak Obi memberi aturan diskon Otopia → masuk PK Otopia (topik aturan-diskon; kalau berupa angka/promo → pk_daftar jenis promo), menggantikan aturan diskon versi lama. SALAH: membuat berkas "ATURAN_DISKON_OBI.md", atau menulisnya di catatan lain, atau menempel di ekor dokumen.

Model 3 — Brainstorming + MAP (untuk MEMBUAT produk)

Untuk apa: supaya pembuat produk (Eko, Dika, atau AI lain di kemudian hari) bisa melanjutkan pekerjaan tanpa bertanya ulang. Dua berkas berpasangan di folder kode proyek: <PROYEK>_MAP.md dan <PROYEK>_BRAINSTORMING.md.

MAP = peta yang SUDAH dibangun, dibagi per modul (tampilan, database, pembayaran, dll.) dengan petunjuk "modul ini ada di file mana". Contoh potongan MAP Caang:

## Publish
- Alur: editor → cfpages.go CreatePagesProject → deploy. Kuota per paket di tabel subscriptions.
## Reset password
- /forgot-password → token → /reset-password; link email dibangun dari Host permintaan.

BRAINSTORMING = yang BARU direncanakan. Contoh: "Catat kode error Cloudflare saat publish gagal (usul Eko 12/10, menunggu izin)". Begitu dibangun: tulis di MAP, HAPUS dari brainstorming (tanpa tanda "done").

MAP hanya mencerminkan kode yang benar-benar ada. Kalau kode dan MAP berbeda, kode yang benar dan MAP diperbarui.

Model 4 — CLAUDE.md

Untuk apa: karakter & aturan yang harus SELALU dipegang, otomatis termuat tiap sesi. Dua tingkat:

Kalau CLAUDE.md mulai panjang, itu tanda ada isi yang seharusnya masuk PK, Akses & alat, atau papan tugas.

Model 5 — Akses & alat

Untuk apa: "peta mesin": cara masuk, alat apa di mana, cara menyalakan ulang. Contoh isi:

Sengaja berkas, bukan database: kalau database/servernya bermasalah, cara masuk & memperbaikinya harus tetap bisa dibaca. Password tidak pernah ditulis.

Model 6 — Papan tugas + pengingat

Untuk apa: tahu siapa sedang mengerjakan apa, dan tidak ada janji yang terlewat. Contoh baris:

tugassiapadarijatuh tempostatus
FU Budi, minta foto produk untuk LP trial TBAAryBudi (janji)13/10 09.00baru
Video Belajar IoT +27DikaPak Adi–selesai (hasil: galeri)
Perbaiki pesan error publish CaangEkoAkbar–menunggu izin Pak Adi
Laporan harian ke Pak AdiAkbarPak Aditiap hari 20.00berulang

Begitu selesai, status = selesai (tidak dihapus, tapi tidak tampil di daftar kerja).

Model 7 — Arsip log

Untuk apa: jejak kejadian kalau suatu saat perlu ditelusuri ("kapan pelanggan X dikirimi link reset?"). Contoh baris: 12/10 15:10 · Eko · caang · org-0099 · kirim ulang link Lupa password ke email pelanggan.

Hanya ditambah. Tidak pernah dibaca semua; dicari per tanggal/orang/produk.

3. Struktur tabel (Postgres)

Satu database "kerja tim" untuk SEMUA proyek & klien. Tiap baris diberi label proyek/produk. Klien baru = tambah satu baris produk, bukan membuat database baru. Kolom detail (bebas per produk) untuk hal yang unik.

Model 1: Profil orang

TabelKolomKeterangan
orangkode_orang (tetap), nomor_wa (unik), nama, profil_umum, status, dibuat, diubah1 baris per orang. kode_orang dibuat sekali, TIDAK pernah berubah. Nomor & nama hanya isi.
produkslug_produk (tetap: labbaik, tba, cnc, otopia…), nama, jenis (buatan sendiri / klien), statusDaftar produk & klien.
orang_produkkode_orang, slug_produk, tahap (tanya/tertarik/order/lunas/member), catatan_produk, detail, status, berlaku_sejak, diubah_oleh1 baris per orang × produk. Budi member CNC + tertarik TBA = 2 baris.
profil_versikode_orang, ringkasan (rangkuman utuh), status (berlaku/usang), dibuat, oleh_sesiRangkuman obrolan. Tiap sesi ditutup = versi baru yang MENGGANTI (versi lama tetap jadi arsip).

Model 2: Product knowledge

TabelKolomKeterangan
pk_hargaslug_produk, slug_item (layanan/paket), varian (mis. ukuran mobil), lokasi (cabang, boleh kosong), harga, berlaku_sejak, berlaku_sampai, status, diubah_olehSatu baris = satu harga. Contoh: otopia · anti-karat · avanza · bali.
pk_daftarslug_produk, jenis (promo / ukuran-mobil / cabang / dll.), slug_baris, isi, detail, berlaku_sejak, berlaku_sampai, status, diubah_olehDaftar pendek lain yang berupa angka/fakta.
pk_penjelasanslug_produk, slug_topik (mis. definisi-anti-karat, keberatan-kemahalan, gaya-bahasa-bali), judul, isi (teks), berlaku_sejak, status, diubah_olehSatu baris = satu topik PENDEK. Ditanya satu hal → ambil satu baris.

Model 6: Papan tugas + pengingat

TabelKolomKeterangan
tugasslug_tugas (tetap), siapa (yang mengerjakan), dari (yang meminta), slug_produk, kode_orang (boleh kosong), tugas (1 kalimat), bahan, jatuh_tempo (boleh kosong), status (baru/dikerjakan/menunggu/selesai/batal), menunggu_apa, langkah_terakhir, langkah_berikut, hasil, dibuat, diubahSatu tabel untuk semua peran. Pengingat = tugas yang jatuh_tempo-nya ada jam. Janji FU ke konsumen = baris tugas (siapa = Ary, kode_orang terisi, jatuh_tempo = jam FU).

Model 7: Arsip log

TabelKolomKeterangan
logwaktu, siapa, slug_produk, kode_orang, slug_tugas, kejadian (singkat)Hanya ditambah. Dicari per kolom (tanggal, orang, produk), tidak pernah dibaca semua.

Pendukung (bukan model memori): tabel sesi

TabelKolomKeterangan
sesiid_sesi (dari Claude), peran, kode_orang ATAU slug_tugas (tepat satu terisi, dijaga aturan database), status (aktif/ditutup), dibuka, terakhir_aktif, ditutupMencatat sesi chat mana yang sedang dipakai untuk orang/tugas tertentu. Dua kolom terpisah supaya tiap kolom selalu menunjuk satu tabel yang sama.

4. Aturan kunci & versi (wajib dipahami)

  1. Soft delete. Data tidak pernah benar-benar dihapus/ditimpa. Mengubah = baris lama diberi status usang, lalu baris baru ditambah. Menghapus = status dihapus. Seperti revisi halaman WordPress.
  2. Relasi pakai KUNCI TETAP, bukan ID baris. Karena tiap versi menambah baris (ID baris berubah), tabel saling menyambung lewat slug_produk, slug_item, slug_topik, slug_tugas, kode_orang. ID baris hanya penanda versi.
  3. Yang berlaku = baris dengan kunci itu yang statusnya berlaku. Satu kunci hanya boleh punya satu baris berlaku.
  4. Nama & nomor WA bukan penghubung (nama bisa sama, nomor bisa ganti).
  5. Tiap perubahan mencatat berlaku_sejak dan diubah_oleh.

5. Sesi chat: kapan dibuka & ditutup

Sesi dibuka per SATUAN KERJA, seperti cara Pak Adi membuka chat "Monyil 1, Monyil 2": satu masalah satu sesi.

PeranSatuan kerjaDitutup saat
CS (Ary, Opi)Satu ORANG (konsumen/prospek)Orang itu diam 30 menit
Dika, EkoSatu TUGASTugas selesai / berhenti lama (mis. menunggu izin). Tugas panjang boleh dipecah per kelompok/hari
AkbarSatu TOPIK diskusi dengan Pak Adi, atau satu tugas pengawasanDiam 30 menit / tugas selesai

Alur CS (contoh Budi chat)

  1. WA masuk → skrip penyambung (bridging) cari kode_orang dari nomor WA (belum ada = dibuat).
  2. Cari di tabel sesi: sesi aktif milik orang itu yang terakhir aktif < 30 menit.
  3. Ada → lanjutkan sesi itu. Tidak ada → buat sesi baru, diisi paket: profil terbaru + baris orang_produk + 10–15 chat terakhir (diambil dari WA) + bagian PK yang relevan.
  4. Pesan beruntun dalam 30–60 detik digabung jadi satu panggilan.
  5. Sebelum ditutup: sesi menulis profil BARU yang merangkum ulang secara utuh (profil lama + obrolan sesi ini), bukan ditempel di bawah profil lama. Tahap di orang_produk & janji FU (baris tugas) diperbarui.

6. Pengingat (tanpa Claude berjaga)

7. Cara MENULIS memori

Ada informasi baru tentang…Tulis ke
Orang (kebutuhan, keberatan, rencana, sudah beli)Model 1: orang_produk (tahap) + profil saat sesi ditutup
Janji FU / pekerjaan yang harus dilakukanModel 6: baris tugas (dengan jam kalau ada)
Harga, layanan, garansi, promo, cara order, jawaban keberatanModel 2: PK, di topik yang tepat
Rencana fitur / yang sudah dibangun di produk buatan sendiriModel 3: Brainstorming / MAP proyeknya
Aturan cara kerja satu peranModel 4: CLAUDE.md peran itu
Aturan untuk semua staf / karakterModel 4: CLAUDE.md umum
Cara masuk mesin, alat, cara menyalakan ulangModel 5: Akses & alat
Kejadian (untuk jejak)Model 7: log

Aturan menulis

  1. Cari dulu tempatnya (produk + topik yang tepat), lalu UPDATE di situ (lihat kotak "Arti UPDATE" di bawah). Jangan menempel di ekor, jangan membuat berkas/dokumen baru.
  2. Satu hal hanya ada di satu tempat. Kalau menemukan hal yang sama di dua tempat, laporkan ke Akbar.
  3. Tulis saat itu juga, bukan menunggu akhir hari (tahan compact).
  4. Tulis ringkas & pasti: kesimpulan, bukan salinan obrolan.
  5. Selalu isi tanggal berlaku & siapa yang mengubah.
  6. Hal yang masih diskusi dengan Pak Adi belum boleh ditulis sebagai aturan, diteruskan ke staf, atau dikerjakan sampai Pak Adi menyatakan final.

Arti UPDATE (wajib dipahami)

UPDATE bukan menghapus isi lama lalu menggantinya dengan potongan baru. UPDATE = isi lama tetap dipakai, hanya bagian yang berhubungan dengan informasi baru yang diganti atau ditambah. Bagian lain tidak boleh hilang.

Contoh benar: topik garansi Otopia berisi 6 poin; ada keputusan baru soal masa garansi anti karat → poin "masa garansi anti karat" saja yang diganti; 5 poin lainnya tetap utuh di versi baru.

Contoh SALAH (pernah terjadi): seluruh catatan dihapus, diganti satu kalimat informasi baru, sehingga banyak catatan lama hilang.

Cara aman: (1) baca isi versi yang berlaku, (2) ubah hanya bagian yang relevan, (3) simpan sebagai versi baru utuh (versi lama tetap tersimpan sebagai arsip), (4) bandingkan: tidak ada poin lama yang hilang tanpa alasan.

8. Cara MENGAMBIL memori

  1. Ambil hanya yang dibutuhkan: satu orang, satu produk, satu topik, satu tugas. Pakai alat/kueri yang menyaring per kolom.
  2. Jangan pernah menyisir semuanya (full scan) untuk mencari satu hal. Jangan membaca berkas besar sekaligus.
  3. Pertanyaan sederhana dijawab langsung dari yang sudah ada; jangan menggali arsip untuk hal remeh.
  4. Arsip log hanya dibuka untuk menelusuri kejadian tertentu, disaring per tanggal/orang/produk.
  5. Kalau data tidak ketemu → laporkan (Akbar/Eko), jangan mengarang.

9. Larangan

10. Ringkasan per peran

PeranPaling sering membacaPaling sering menulis
CS (Ary, Opi)Profil orang, PK, tugas FU miliknyaProfil (saat tutup sesi), orang_produk, tugas FU, log
Desainer (Dika)Tugas miliknya, PK (fakta produk untuk naskah), Akses & alatTugas (progres, hasil), log
Programmer (Eko)Tugas miliknya, MAP/Brainstorming proyek, Akses & alatMAP/Brainstorming, tugas, log
Manajer (Akbar)Papan tugas semua staf (belum selesai / lewat jatuh tempo / menunggu Pak Adi)Tugas, PK & CLAUDE.md (meneruskan keputusan Pak Adi yang sudah final), log

11. Skrip yang akan dibuat (sesudah rancangan disetujui)

Bukan aplikasi besar. Beberapa skrip Linux kecil di server uranus (dikerjakan Eko, diawasi Akbar):

#SkripTugasnyaJalan kapan
1Pembuat databaseMembuat tabel-tabel di atas (orang, produk, orang_produk, profil_versi, pk_*, tugas, log, sesi) beserta aturan kunci tetap & soft delete.Sekali
2Penyambung WA → Claude (bridging)WA masuk → cari kode orang → cari sesi aktif di tabel sesi → lanjutkan atau buat sesi baru (claude -p, diisi paket profil + produk + chat terakhir + PK) → kirim balasan. Menggabung pesan beruntun 30–60 detik.Terus-menerus (dipicu tiap WA masuk)
3Alarm per menit(a) cari tugas yang jatuh tempo menit ini → taruh pesan ke kotak masuk staf yang bersangkutan; (b) cari sesi CS yang diam > 30 menit → minta rangkum profil → tutup sesi.Tiap menit (timer sistem, 0 token)
4Alat baca/tulis untuk stafPerintah pendek: lihat/ubah profil orang, ambil PK per produk+topik, tambah/selesaikan tugas, tulis log. Selalu menyaring, tidak pernah menampilkan semuanya.Dipakai staf saat bekerja
5Halaman lihat-saja untuk Pak AdiMelihat papan tugas, profil, PK, dan koreksi PK.Kapan saja
6Pemindah data lamaMemindahkan isi berkas lama (KASUS_TERBUKA, product knowledge yang tercecer, dll.) ke tabel baru; satu kali, diperiksa sebelum dipakai.Sekali, sesudah 1–4 siap

Uji coba dulu di satu produk/peran (mis. CS Labbaik), bandingkan mutu & token dengan cara sekarang, baru diperluas.

12. Letak database & sinkron antar server

Satu database untuk semua server

Sinkron "Akses & alat" dan CLAUDE.md antar server

  1. Satu naskah induk (Akses & alat + CLAUDE.md umum + CLAUDE.md per peran) disimpan di satu tempat (usulan: mars) dalam repositori git. Git mencatat tiap perubahan (siapa, kapan, apa) dan bisa dikembalikan kalau keliru.
  2. Git di sini bukan GitHub: cukup folder git di server induk itu sendiri; server lain menariknya lewat SSH jaringan rumah (akses sudah ada). Sengaja tidak di layanan luar karena isi Akses & alat sensitif.
  3. Menyunting HANYA di induk.
  4. Server lain (uranus, dll.) menyimpan salinan baca-saja. Skrip kecil menarik versi terbaru dari induk tiap 5 menit. Salinan dikunci supaya tidak ada yang menyunting di salinan.
  5. Kalau induk/jaringan mati, salinan terakhir tetap ada di tiap server, jadi cara masuk dan cara memperbaiki tetap terbaca.
  6. CLAUDE.md per peran hanya dipakai di server tempat peran itu bekerja (Ary di uranus, Opi di mars), tetapi tetap disunting di induk yang sama.

Skrip tambahan untuk ini masuk daftar skrip (bagian 11): penarik salinan tiap 5 menit + pengaturan akun database per staf.

Rancangan ini diuji beberapa hari. Perubahan apa pun pada halaman ini hanya atas keputusan Pak Adi.