Skip to content
Apothem
Referensi

Spesifikasi Skema Artefak

Skema frontmatter YAML kanonik dan field wajib untuk semua tipe artefak di pohon sumber Apothem, dengan templat per-kelas dan aturan validasi.

Templat frontmatter YAML per-kelas dan field wajib untuk semua artefak ekosistem Apothem.

Sumber kebenaran. Kontrak yang terbaca mesin dan ditegakkan gerbang adalah JSON Schema per-kelas di bawah src/apothem/schemas/ (agent.schema.json, command.schema.json, skill.schema.json, …). Skema skill dan command mendeklarasikan additionalProperties: false, sehingga menolak kunci yang tidak dikenal; skema agent, output-style, dan plan mendeklarasikan additionalProperties: true. Halaman ini dan frontmatter-schema.mdx adalah dua proyeksi yang dapat dibaca manusia dari skema-skema tersebut — halaman ini memuat templat dan contoh lengkap per-kelas, sedangkan frontmatter-schema memuat indeks kunci wajib yang ringkas. Jika sebuah halaman tidak sesuai dengan JSON Schema, skema yang berlaku.

Ikhtisar

Semua artefak di pohon sumber Apothem (di bawah src/apothem/ dan permukaan konfigurasi root) harus menyertakan blok frontmatter YAML (di antara pembatas ---) dengan field wajib dan opsional yang spesifik untuk tipe artefaknya. Dokumen ini mendefinisikan skema kanonik untuk setiap tipe.

Aturan Universal:

  • Frontmatter mematuhi YAML 1.2
  • Semua nilai string menggunakan tanda kutip ganda, dan string kosong ditulis ""
  • Urutan field: field wajib lebih dulu, field opsional dikelompokkan menurut relevansi
  • Komentar dalam frontmatter menggunakan # dengan spasi: # comment
  • Nilai jalur harus relatif (tanpa / di awal) dan menggunakan garis miring maju (/) untuk kompatibilitas lintas platform

Konvensi Versioning (kelas artefak berversi — command, pembantu, skill, CLAUDE.md):

  • version bersifat semantik (MAJOR.MINOR.PATCH). Naikkan MAJOR untuk perubahan skema atau kontrak yang tidak kompatibel; MINOR untuk perubahan aditif yang tidak merusak (field opsional baru, bagian tambahan, anti-pola tambahan); PATCH untuk perubahan perilaku yang memperbaiki direktif yang sudah ada tanpa merusak kontrak.
  • Perbaikan salah ketik, perbaikan tautan, pemformatan, serta suntingan yang hanya menyentuh komentar atau dokumentasi tidak mengubah version. Hanya perubahan perilaku yang menaikkannya.
  • updated adalah tanggal ISO 8601 (YYYY-MM-DD) dari suntingan terbaru. Nilainya harus berubah pada setiap kenaikan version, dan juga berubah pada perbaikan salah ketik atau tautan yang tidak menaikkan versi.
  • Artefak baru dimulai pada v0.Y.Z. Promosi ke vX.Y.Z menandakan bahwa kontrak artefak cukup stabil untuk menjadi komitmen publik.
  • Suite rencana berada di luar konvensi ini. Perbaikan salah ketik pada suite rencana menaikkan nomor PATCH dari versi suite (vX.Y.Z menjadi vX.Y.(Z+1)) dan menambahkan baris Revision History. Panduan pengembang menjelaskan aturan suite rencana pada bagian revisi suite rencana.

Skema: Aturan

Pola jalur: src/apothem/rules/*.md

Tujuan: Mandat perilaku dan direktif operasional.

Field Wajib

---
name: "kebab-case-identifier"
description: "One-line description"
pathFilter: "**/*.py, **/*.toml"
alwaysApply: true | false
---
FieldTipeTujuanContoh
namestringPengidentifikasi yang terbaca mesin"operational-mandates"
descriptionstringDeskripsi satu baris untuk registri"Operational mandates CM-1–10"
pathFilterstringDaftar glob yang dipisahkan koma yang membatasi cakupan aturan berfilter jalur; string kosong ("") pada aturan yang selalu aktif"**/*.py, **/*.toml"
alwaysApplybooleantrue untuk aturan yang selalu aktif (dimuat di mana saja); false untuk aturan berfilter jalur (dimuat ketika pathFilter cocok)true

Field Opsional

Aturan tidak membawa field frontmatter opsional, dan — tidak seperti kelas artefak lainnya — juga tidak membawa field version / updated / scope / portability. Empat field wajib di atas adalah kontrak frontmatter aturan yang lengkap, yang ditegakkan oleh frontmatter_grep.

Contoh

---
name: "operational-mandates"
description: "Behavioral definitions for CM-1 through CM-10: violation indicators and recovery actions"
pathFilter: ""
alwaysApply: true
---

# Rule: Operational Mandates
...

Skema: Command

Pola jalur: src/apothem/commands/*.md

Tujuan: Definisi slash command (/plan-execute, /freshify, dsb.).

Field Wajib

---
name: "command-name"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "What this command does"
argument-hint: "[argument-pattern]"
disable-model-invocation: true | false
portability: "universal"
allowed-tools: "Read, Glob, Grep"
---
FieldTipeTujuanContoh
namestringNama command (tanpa / di awal)"plan-execute"
versionstringVersi semantik"X.Y.Z"
updatedstring (ISO 8601)Tanggal pembaruan terakhir"2026-04-20"
descriptionstringDeskripsi singkat"Executes a phase with quality gates"
argument-hintstringPola penggunaan, atau "[args...]" jika tidak ada"[path/to/plan] [phase-id]"
disable-model-invocationbooleanJika true, hanya operator yang memulai command; model tidak pernah memanggilnya atas inisiatifnya sendiritrue
portabilitystringKlasifikasi portabilitas lintas adapter harness"universal"
allowed-toolsstringTool yang disetujui sebelumnya selama command berjalan: tool baca-saja, ditambah tool yang memiliki efek samping hanya sebagai aturan bercakupan seperti Bash(git log *). Wildcard "*" polos ditolak"Read, Glob, Grep"

Field Opsional

Command tidak membawa field frontmatter opsional — delapan field wajib di atas adalah kontrak frontmatter command yang lengkap, yang ditegakkan oleh command.schema.json (additionalProperties: false).

Contoh

---
name: "plan-execute"
version: "X.Y.Z"
updated: "2026-04-20"
description: "Executes a specific phase from a Master Plan Suite with conformity checking and quality gates"
argument-hint: "[path/to/plan-suite/] [phase-id] [--dry-run]"
disable-model-invocation: true
portability: "universal"
allowed-tools: "Read, Glob, Grep"
---

# /plan-execute — Execute a Specific Phase
...

Skema: Pembantu

Pola jalur:

src/apothem/agents/*.md

Tujuan: Definisi pembantu persisten (disebut juga pekerja terdelegasi) untuk eksplorasi paralel, audit, dan gerbang kualitas.

Field Wajib

---
name: "agent-name"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "What this agent specializes in"
tools: "Tool1, Tool2, Tool3"
disallowedTools: "Write, Edit"
maxTurns: 20
effort: "high" | "medium" | "low"
---
FieldTipeTujuanContoh
namestringPengidentifikasi pembantu"codebase-explorer"
versionstringVersi semantik"X.Y.Z"
updatedstring (ISO 8601)Tanggal pembaruan terakhir"2026-04-20"
descriptionstringDeskripsi spesialisasi"Deep codebase exploration"
toolsstring (dipisahkan koma)Tool yang diizinkan"Read, Glob, Grep, Bash"
disallowedToolsstring (dipisahkan koma)Tool yang dilarang"Write, Edit, TodoWrite"
maxTurnsintegerJumlah maksimum giliran percakapan (umumnya 5–20; nilai di atas 20 memerlukan komentar alasan sebaris)20
effortenumCakupan komputasi"high"

Field Opsional

permissionMode: "default"       # Permission handling
memory: user | project | local  # Persistent-memory scope; omit for none
pattern: "Research" | "Audit" | "Implementation" | "Quality"  # Agent team pattern
portability: "universal"

Contoh

---
name: "codebase-explorer"
version: "X.Y.Z"
updated: "2026-04-20"
description: "Deep codebase exploration — find patterns, trace dependencies, discover conventions, map architecture"
tools: "Read, Glob, Grep, Bash"
disallowedTools: "Write, Edit, TodoWrite"
maxTurns: 20
effort: "high"
permissionMode: "default"
portability: "universal"
---

You are a codebase exploration specialist...

Skema: Skill

Pola jalur: src/apothem/skills/*/SKILL.md

Tujuan: Definisi teknik yang dapat digunakan ulang, dengan sinyal deteksi dan prosedur eksekusi.

Field Wajib

---
name: "skill-name"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "What this skill teaches"
archetype: "workflow-template"
userInvocable: true | false
disable-model-invocation: true | false
allowed-tools: "Read, Glob, Grep"
---
FieldTipeTujuanContoh
namestringPengidentifikasi skill"plan-suite"
versionstringVersi semantik"X.Y.Z"
updatedstring (ISO 8601)Tanggal pembaruan terakhir"2026-04-20"
descriptionstringApa yang disediakan skill"Master Plan Suite template"
archetypestringKelas bentuk, berupa pengidentifikasi <class>-template dalam kebab-case"workflow-template"
userInvocablebooleanJika true, pengguna dapat meminta skill ini secara eksplisitfalse
disable-model-invocationbooleanJika true, skill hanya dicapai melalui pemanggilan eksplisittrue
allowed-toolsstringTool yang disetujui sebelumnya selama skill berjalan: tool baca-saja, ditambah tool yang memiliki efek samping hanya sebagai aturan bercakupan seperti Bash(git log *). Wildcard "*" polos ditolak"Read, Glob, Grep"

Field Opsional

argument-hint: "[args...]"                           # Usage pattern if userInvocable

Contoh

---
name: "ecosystem-audit"
version: "X.Y.Z"
updated: "2026-04-20"
description: "Comprehensive blind audit of the apothem ecosystem"
archetype: "audit-template"
userInvocable: true
disable-model-invocation: false
allowed-tools: "Read, Glob, Grep, Agent, TodoWrite"
argument-hint: "[--focus area] [--fix]"
---

## Purpose
...

Skema: Hook

Pola jalur: blok hooks pada settings.json ditambah implementasi Python di bawah src/apothem/hooks/.

Tujuan: Mendeklarasikan validator yang dipicu peristiwa dan handler manajemen status yang dipanggil host pada titik siklus hidup yang terdefinisi dengan jelas.

Skema Berkas Pengaturan

Kunci tingkat atas hooks memetakan nama peristiwa ke array blok matcher:

"hooks": {
  "<EventName>": [
    {
      "matcher": "<pattern>",
      "hooks": [
        {
          "type": "command",
          "command": "${PYTHON_BIN}",
          "args": ["${HARNESS_ROOT}/.apothem/support/hooks/dispatch.py", "<EventName>", "<message-name>"],
          "timeout": <seconds>,
          "statusMessage": "<short human-readable label>"
        }
      ]
    }
  ]
}

Bentuk -m apothem.hooks.dispatch diperuntukkan bagi pengembangan dari checkout sumber dengan PYTHONPATH=src.

FieldTipeTujuanContoh
matcherstringPola nama tool (atau "*" untuk peristiwa yang tidak bergantung pada tool)"Write"
hooks[].typeliteral "command"Satu-satunya tipe handler hook yang didukung saat ini"command"
hooks[].commandstringPerintah yang dapat dieksekusi; Apothem menggunakan placeholder ${PYTHON_BIN}, yang di-resolve saat pemasangan"${PYTHON_BIN}"
hooks[].argsarray stringArgumen bentuk exec: jalur skrip di bawah ${HARNESS_ROOT}/.apothem/support/, lalu argumennya["${HARNESS_ROOT}/.apothem/support/hooks/dispatch.py", "SessionStart"]
hooks[].timeoutinteger detikWaktu jalan maksimum sebelum host menghentikan hook30
hooks[].statusMessagestringLabel singkat yang ditampilkan di UI host"Session start"

Peristiwa Wajib

Templat Claude Code mendaftarkan empat peristiwa: SessionStart, PreToolUse, PostToolUse, dan Stop. scripts/dev/validate_hooks.py memeriksa settings.json untuk lima peristiwa pada tabel di bawah, yang merupakan kumpulan yang berbeda, dan melaporkan setiap peristiwa yang tidak ditemukannya sebagai peringatan, bukan kegagalan. PostToolUse terdaftar tetapi bukan salah satu dari kelima peristiwa itu. PreCompact dan PostCompact termasuk di antara kelima peristiwa itu tetapi tidak didaftarkan pada Claude Code (referensi hook), sehingga pemeriksa memberi peringatan untuk keduanya di sana.

Nilai timeout mencerminkan anggaran peristiwa hook kanonik — tabel di bawah mereproduksinya demi kemudahan pembaca; sumber kanonik yang berlaku.

PeristiwaTimeout UmumTujuan
SessionStart30 detikMembaca memori, memeriksa status rencana, melaporkan kesiapan
PreToolUse10 detikMemvalidasi penulisan terhadap kebijakan isolasi konten + frontmatter
PreCompact30 detikMemverifikasi bahwa status telah dieksternalisasi sebelum pemadatan konteks
PostCompact30 detikMemulihkan status kerja setelah pemadatan konteks
Stop60 detikEksternalisasi akhir sesi — status untuk melanjutkan, keluaran, keputusan

dispatch.py juga menerima UserPromptSubmit dan Notification dalam daftar izin peristiwanya demi kompatibilitas ke depan; tidak satu pun dari keduanya terhubung di templat yang dikirimkan. Tambahkan blok matcher dengan pola bentuk-exec yang sama untuk mengaktifkannya.

Lapisan Python

Setiap perintah hook dirutekan melalui dispatcher Python yang sama:

BerkasPeran
src/apothem/hooks/dispatch.pyMerutekan SessionStart ke session_start_bootstrap.main() dan setiap peristiwa lain dalam daftar izin ke emit_hook_context.main(). Selalu keluar dengan kode 0.
src/apothem/hooks/session_start_bootstrap.pySkrip hook awal sesi — memancarkan konteks memori dan ringkasan suite rencana.
src/apothem/hooks/emit_hook_context.pyPemancar hook default — menulis amplop valid yang membawa payload --context-file yang terdaftar.
src/apothem/hooks/messages/*.mdPayload konteks statis yang dirujuk oleh --context-file.

Validasi

scripts/dev/validate_hooks.py menegakkan kontrak hook:

  • settings.json dapat diurai sebagai JSON dan mendeklarasikan masing-masing dari lima peristiwa pada tabel; peristiwa yang hilang adalah peringatan, bukan kegagalan.
  • Ketiga skrip Python ada dan dapat diurai sebagai Python yang valid.
  • Semua berkas pesan yang dirujuk oleh argumen --context-file ada.
  • Tidak ada jalur pengguna absolut yang di-hardcode (C:\Users\... dsb.) yang muncul di src/apothem/hooks/**.py.
  • Artefak shell di bawah src/apothem/hooks/ dan scripts/ dibatasi pada stub locator / bootstrap yang disetujui.

Skema: CLAUDE.md

Jalur: CLAUDE.md (root)

Tujuan: Instruksi Claude Code yang berlingkup proyek.

Frontmatter YAML Wajib

---
name: "CLAUDE"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "Project-scoped Claude Code instructions for the Apothem source repository"
scope: "project"
portability: "project-local"
---

Bagian

CLAUDE.md ditulis dalam bagian-bagian prosa, yang dijelaskan di CLAUDE.md. Tidak ada validator yang mewajibkan daftar bagian yang tetap: scripts/dev/validate_ecosystem.py memeriksa kunci frontmatter di atas.


Daftar Periksa Validasi

Setiap artefak harus memenuhi pemeriksaan berikut:

Validasi Frontmatter

  • YAML valid secara sintaksis (tanpa galat penguraian)
  • Semua field wajib untuk tipe artefak tersebut ada
  • name mengikuti konvensi kebab-case
  • version bersifat semantik (MAJOR.MINOR.PATCH)
  • updated berformat tanggal ISO 8601 (YYYY-MM-DD)
  • description berupa string yang tidak kosong dan terdiri dari satu baris
  • Field opsional cocok dengan nilai enum yang diharapkan (jika berlaku)
  • Tidak ada salah ketik pada nama field (gunakan nama kanonik dari skema)
  • Tidak ada spasi berlebih atau masalah format

Validasi Konten

  • Konten dimulai pada baris baru setelah --- penutup; pada berkas keluarga Markdown, baris header SPDX kanonik adalah konten pertama setelahnya
  • Tidak ada rujukan internal rencana (kepatuhan CM-7)
  • Rujukan silang dapat di-resolve (jika mencantumkan artefak lain)
  • Tautan menggunakan jalur relatif dengan garis miring maju

Validasi Portabilitas

  • Tidak ada jalur absolut yang di-hardcode (gunakan jalur relatif)
  • Tidak ada sintaks khusus Windows dalam artefak berlingkup universal
  • Pemisah jalur menggunakan garis miring maju
  • Variabel lingkungan menggunakan format yang tidak bergantung pada platform (${VAR} atau format native tool)

Catatan

  • Konsistensi sebagai Keamanan: Frontmatter kanonik memungkinkan validasi otomatis, perkakas, dan verifikasi lintas artefak. Penyimpangan cepat menumpuk.
  • Deklarasi Portabilitas: Tidak semua artefak dapat bersifat universal. Deklarasikan batasan secara eksplisit — lebih baik mendokumentasikan sebuah catatan peringatan daripada mengirimkan bug yang senyap.
  • Kebab-case untuk Nama: Mudah digunakan dalam URL, skrip, dan konteks baris perintah. Hindari spasi, garis bawah, dan camelCase untuk nama.
  • Higiene Kenaikan Versi: Setiap suntingan yang mengubah perilaku harus menaikkan version dan updated bersamaan. Perbaikan salah ketik, perbaikan tautan, dan perubahan format tidak mengubah versi; bagian opsional atau anti-pola baru menaikkan MINOR; reorganisasi struktural atau perubahan kontrak menaikkan MAJOR.

On this page