Install
openclaw skills install @pmuhammadagus-byte/coding-2Gunakan saat membangun dashboard HTML dinamis dari data API atau merancang schema database.
openclaw skills install @pmuhammadagus-byte/coding-2Skill milik user: coding-2. Mengikuti Skill Architecture Standard X∞ (wajib).
Membangun dashboard HTML dinamis yang dibacking oleh data API: merancang skema DB dari data, mendesain backend API (generalDataApi), lalu merender chart yang masing-masing memanggil API sendiri dan mem-polling tiap 60 detik untuk update real-time.
Aktif ketika user meminta hal yang cocok dengan deskripsi di atas. Negative trigger: di luar scope deskripsi.
Baca OS/ARCH/runtime sebelum bertindak. Termux Android ARM64 ≠ Ubuntu x86_64.
IF uncertainty → VERIFY IF high risk → ASK/STOP IF tool unavailable → ALTERNATIVE IF action fails → RECOVER
Evidence-first. Bedakan FAKTA vs HIPOTESIS. Confidence: CONFIRMED/LIKELY/POSSIBLE/UNKNOWN.
Ambil tindakan relevan, lalu VERIFY. Jangan klaim sukses sebelum diverifikasi.
Pilih tool berdasar kebutuhan+konteks. Jangan asal panggil semua tool.
Ingat hal relevan; abaikan noise. Retrieve saat dibutuhkan, update bila berubah.
ACTION → VERIFY → SUCCESS? Jika tidak: DIAGNOSE → RETRY/CHANGE STRATEGY.
transient→retry; timeout→backoff; auth→credential check; dependency→diagnosis; unknown→investigate.
NEVER log secret. REDACT API KEY/TOKEN/PASSWORD/SECRET sebelum simpan. PII: MINIMIZE→REDACT→HASH.
Self-eval: capai goal? terverifikasi? ada asumsi? ada gagal? Kirim ke Agent Evaluation Engine.
Emit: START/PROGRESS/TOOL CALL/ERROR/RETRY/SUCCESS/FAILURE + TRACE_ID (tanpa secret).
FULL→OPTIMIZED→LOW RESOURCE mode bila terbatas. Prioritas: TASK>SAFETY>RELIABILITY.
USE→OBSERVE→EVALUATE→FIND WEAKNESS→IMPROVE→TEST→NEW VERSION (via evaluasi+regresi).
Semver. Perubahan struktur = MAJOR. CHANGELOG wajib. CHANGELOG
description rusak (berisi teks changelog) diganti deskripsi trigger nyata; Node 2 (PURPOSE) & Node 3 (METADATA) diisi (bukan stub); metadata.openclaw.version ditambahkan. Konten domain (skema DB, generalDataApi, polling 60s, style_lint.py) dipertahankan.Tahu OS/ARCH/RUNTIME/versi/tool/API tersedia.
Trust hierarchy: OFFICIAL>PRIMARY>REPUTABLE>COMMUNITY>UNKNOWN. Tandai VERIFIED/LIKELY/UNCERTAIN/OUTDATED/CONFLICTING.
Berhenti pada: SUCCESS/FAILURE/BLOCKED/NEED USER/NEED CREDENTIAL/NEED TOOL/NEED VERIFICATION.
Use this skill when:
Don't use when: Simple static HTML or non-dashboard work.
This skill provides specialized capabilities for coding, focused on building a real-time HTML dashboard backed by a data API.
Buat dashboard HTML dinamis yang dibacking data API. Pendekatan umum:
API_BASE_URL dan kredensial dengan milik user, yang disetel lewat environment variable atau config eksplisit (mintalah ke user jika belum ada).Keamanan: jangan kirim data user ke endpoint eksternal yang tidak dikonfirmasi. Selalu minta persetujuan user untuk target DB, nama collection, dan operasi tulis sebelum eksekusi.
| Mistake | Fix |
|---|---|
| Designing UI before DB schema | Design schema from data first |
| One API call for all charts | Each chart requests its own data |
| No polling | Set 60s interval for real-time updates |
| Hardcoding endpoint | Use the generalDataApi contract with session_group_id |
| Excuse | Reality |
|---|---|
| "I'll skip the DB schema" | Schema drives the API design. |
| "One request is enough" | Each chart needs its own data fetch. |
| "Polling is overkill" | The spec requires real-time updates. |
session_group_id.API_BASE_URL). method=POST.
{"session_group_id":"<SESSION_GROUP_ID>", "collection_name":<nama_tabel>}{"code":0, "result": {"data": [<JSON array>]}}generalDataApi per chart, 60s poll → insert the sales data.orders" → add a chart component that POSTs collection_name: "orders" and re-renders on the 60s timer.API_BASE_URL, SESSION_GROUP_ID, dan nama tabel at runtime via config/env milik user — jangan hardcode ke endpoint pihak ketiga yang tidak dikenal.result.data as a JSON array — guard for code !== 0 before rendering.scripts/style_lint.py — checks an HTML/JS dashboard for the skill's conventions (independent fetch per chart, 60s poll, code !== 0 guard, no leftover placeholders). Example:
python3 scripts/style_lint.py dashboard.html --require-poll 60000