Agentic AI yang tools-nya banyak tapi payload-nya kecil. Prinsip: Lazy Tool Loading — model cuma lihat manifest (nama+deskripsi), router yang eksekusi. Bukan 37 schema penuh kayak framework lain.
Linux/macOS:
curl -fsSL https://raw.githubusercontent.com/dianrestu/ringan/main/install.sh | bash
cd ~/ringan && python main.pyWindows (PowerShell):
irm https://raw.githubusercontent.com/dianrestu/ringan/main/install.ps1 | iex
cd ~\ringan; python main.py⚙️ Auto-dependency: installer cek SEMUA kebutuhan sendiri. Kalau Python 3.10+ tidak ada / versinya rendah → download & install otomatis (Linux: apt/dnf/yum/pacman/apk/brew · Windows: python.org silent, system-wide dulu, fallback per-user — exit 1603 itu normal, patokannya python kepanggil). git tidak ada → di-install otomatis, atau fallback download ZIP. Tidak ada langkah manual, cukup satu baris.
Atau manual:
git clone https://github.com/dianrestu/ringan.git && cd ringan
./install.sh # Linux · Windows: python install.py
python main.pySemua otomatis: download repo → venv → install deps (httpx, pyyaml, python-telegram-bot, playwright+chromium, pyautogui) → git init → tanya memory cloud. Kalau ada dep yang gagal → agent tetap jalan, cuma fitur itu yang nonaktif.
Wizard setup muncul otomatis pas main.py pertama kali jalan:
pilih provider (OpenAI/OpenRouter/Groq/Mistral/Ollama/LM Studio/Custom)
→ endpoint keisi otomatis → isi API key → pilih model dari list → selesai.
Beda dengan /compact-nya Hermes (manual, re-summarize seluruh history tiap
kali penuh), RINGAN kompres incremental per pesan — sekali ekstrak, dipakai
terus. DB tetap nyimpen pesan LENGKAP; yang dikirim ke AI cuma ringkasannya.
payload ke AI = system prompt + 10 pesan terakhir MENTAH + konteks pesan lawas
- Konteks per pesan: di jawaban final, AI nempel blok
[[KONTEKS]](USER: ringkasan pesan user · AI: ringkasan jawaban) — diparse & di-strip dari tampilan, disimpan kedata/contexts.db. Model lemah yang gak nurut → fallback rule-based (list-aware: item "1. 2. 3. 4." semuanya kepotong rata biar gak ada yang ilang). - Konteks SESSION: akumulasi konteks 1 sesi (dedup, cap 1500 chars),
selalu ada di payload — reset tiap
/new. - Pesan lawas (di luar 10 terakhir): TIDAK dikirim mentah — posisinya diganti konteks per pesannya. Fakta tetep ada, token jauh lebih kecil.
- Config:
compress.keep_recent(10),compress.context_block(true).
Contoh: pesan "gw punya 4 usaha: 1. haircut... 2. print... 3. fashion... 4. store..." (230+ char) → konteks: "Aydin menyebutkan 4 usahanya: haircut, print, fashion, store (PPOB)." — 1 baris, 0 fakta hilang.
Tool delegate(goal, context) — spawn sub-agent dengan session & history
SENDIRI (memory & approval shared). Yang balik cuma jawaban final — konteks
parent gak kebanjiran tool noise sub-agent. Kedalaman maks 3 level (anti
infinite loop). Cocok: riset paralel, coding terisolasi, tugas yang bisa
dikerjakan independen.
Skill = folder berisi SKILL.md (frontmatter name + description, body =
instruksi). Agent liat daftar skill di system prompt → pas cocok, panggil
load_skill(name) → instruksi masuk konteks → agent ikutin.
ringan --skill-install ./folder-skill # dari folder/file lokal
ringan --skill-install https://.../SKILL.md # dari web (raw GitHub dll)
ringan --skill-list / --skill-rm <name>Di REPL: /skills. Contoh isi skill: cara setup bot PPOB, checklist deploy,
konvensi coding project lo — apa aja yang reusable.
Tugas terjadwal ala Hermes:
ringan --cron-daemon # scheduler headless (jalan di background)/cron list # daftar job
/cron add 30m 'cek harga pulsa ppob' # tiap 30 menit
/cron add daily 07:30 'daily briefing singkat'
/cron rm <id> / cron run <id>
Hasil tiap eksekusi → data/cron-output/<id>_<timestamp>.txt.
- Vision: kirim foto (Telegram langsung, atau tool
vision(image, question)buat path/URL) → model vision (auto/best-vision, configvision.model). Di Telegram, foto user otomatis ke-save kedata/uploads/& agent bisa deskripsikan. - Transkrip: tool
video_transcript(url)— subtitle YouTube dkk via yt-dlp (gak download video).⚠️ IP datacenter kadang kena rate-limit YouTube.
--lite (atau lite: true di config) — buat model kecil (7B/3B, Ollama):
manifest dipangkas ke 10 tool inti (terminal, calculator, memory, web, skill,
vision, delegate), system prompt lebih pendek, blok konteks dimatiin.
RINGAN tetep jalan di model sekecil apa pun — endpoint + model name bebas.
./backup.sh # Linux → backup.py
python backup.py # WindowsOtomatis tiap 30 menit (Linux):
crontab -e # tambah: */30 * * * * /root/agentic/backup.sh >> /root/agentic/data/backup-cron.log 2>&1Restore setelah install ulang (VPS baru / pindah):
./restore.sh origin # Linux — memory balik dari cloud
python restore.py origin # WindowsAtau dari repo memory terpisah: python restore.py https://github.com/lo/ringan-memory.git
🔑 VPS baru & git belum login? Gak usah setup manual — pas restore gagal (atau pas install wizard nanya memory cloud), RINGAN otomatis nawarin sekalian login GitHub: masukin username + PAT sekali → kredensial disimpen (credential.helper=store,
~/.git-credentialschmod 600) → tes koneksi → langsung lanjut restore/push. Satu flow, beres semua.
Setiap chat tercatat realtime (meniru Hermes):
data/sessions/YYYY-MM-DD.md— log percakapan lengkap + timestampdata/memories/YYYY-MM-DD.md— ingatan + kategori + timestamp + sourcedata/memory.db+data/sessions.db— versi SQLite terstruktur- Export ke Obsidian:
python3 -c "from ringan.config import Config; from ringan.agent import Agent; Agent(Config()).export_memory_obsidian('/path/vault')"
python3 main.pyWizard setup: Endpoint → API Key → API Mode → Fetch models → Pilih model → Aliases.
Bot Telegram via python-telegram-bot. /models nampilin daftar model + tombol inline pilihan (kayak Hermes).
Ganti model / restart / token abis → konteks TETAP, langsung lanjut dari tugas sebelumnya:
- History ke-save ke
sessions.dbtiap pertukaran pesan (termasuk tool call/result) /resumeatau--resume→ load history dari DB → persis lanjut dari yang terakhir/model flashmid-session → client baru tapi history tetep (bisa switch model berkali-kali tanpa lupa)- Fallback chain otomatis: model utama gagal → coba fallback → konteks gak ilang
/stats→ dashboard token per-session, per-model (buktikan payload diet)- Fitur unik: Hermes juga punya ini — RINGAN sekarang setara (tapi tetap 100x lebih hemat token)
browser_navigate, browser_snapshot, browser_click, browser_type, browser_scroll. Kalau playwright belum keinstall, agent tetep jalan — cuma tool browser yang nonaktif.
web_search cari info di web tanpa API key: Bing (primary) → DuckDuckGo (fallback).
URL decoded otomatis — hasil bisa langsung di-fetch pakai web_fetch.
computer_screenshot, computer_click, computer_type, computer_key,
computer_scroll, computer_position, computer_windows (Windows/macOS).
Kalau pyautogui nggak tersedia / headless → tool nonaktif, agent tetap jalan.
Agent gak bisa sembarangan eksekusi hal penting — tapi juga gak nanya terus-terusan. Dua lapis:
Lapis 1 — Smart gate (agent yang nilai): command/aksi diklasifikasi otomatis (rule-based, instan, tanpa token):
df -h,free -h,ls,cd,cat,git status,ps, dll → auto-jalan, gak nanya (ditandai[auto-aman]di log)rm -rf /,mkfs,dd of=/dev/sd,shutdown,curl | bash,git push --force,apt remove,Remove-Item -Recurse, nulis ke/etc/.ssh/.env→ approval- Sisanya (ambigu, mis.
terraform apply) → tanya (conservative)
Lapis 2 — Approval mode (config.yaml → approval.mode):
ask(DEFAULT) — CLI:Jalankan? [y/N]· Telegram: tombol ✅/❌allow— semua langsung jalan (trusted, hati-hati)deny— cuma yang auto-aman yang jalan, sisanya ditolak
Tool berbahaya (yang kena gate): terminal, file_write,
browser_click/type, computer_click/type/key/scroll — ditandai
⚠️(butuh approval) di manifest, jadi model juga sadar & gak maksa.
Fail-safe: one-shot -q / bukan tty → yang aman auto-jalan, yang
berbahaya/ambigu DITOLAK (agent jelasin & minta izin). Kecuali
RINGAN_ALLOW_DANGEROUS=1 untuk scripted/CI trusted.
approval.auto_safe: false → matiin smart gate (balik ke tanya semua).
Yang ditolak masuk log session (approval: deny <tool>), ada jejak.
Skenario: lagi coding → token/kuota model abis → ganti model → langsung lanjut dari tugas sebelumnya.
- Mid-chat:
/model <nama|alias>— history TETAP di agent, cuma client LLM-nya yang diganti. Step berikutnya lanjut dari titik terakhir. - Restart / pindah proses:
python main.py --resume(atau/resumedi REPL) — semua pesan (user, assistant, tool call, tool result) di-load ulang darisessions.db, konteks kebangun penuh. - Error model (429/403/token abis):
fallback_chainotomatis coba model cadangan (active → default → auto/coding:free) di step yang sama — konteks gak ilang, tinggal lanjut. - Statistik pemakaian:
/stats— total/per-model token session ini.
Session = nyambungin percakapan. Ini nyambungin PROSES-nya, dengan
checkpoint lengkap (data/tasks.json, di-save realtime tiap step):
{
"goal": "deploy aplikasi...",
"status": "paused", // in_progress / paused / done
"steps": 4,
"last_message": "...", // pesan/tugas terakhir
"process": [ // FULL proses (max 30 step, ringkas)
{"tool": "web_search", "args": "...", "ok": true, "preview": "..."},
{"tool": "terminal", "args": "...", "ok": false, "preview": "exit=1..."},
...
],
"last_terminal": [ // 2 eksekusi TERMINAL terakhir
{"cmd": "npm run build", "exit": 1, "ok": false},
{"cmd": "npm run build --fix", "exit": 0, "ok": true}
]
}
- Pesan terakhir dicatat (user & assistant) — agent tau persis di mana percakapan berhenti.
- Full proses — semua tool call + hasilnya (ringkas), biar agent paham konteks dalam.
- 2 eksekusi terminal terakhir — karena dalam 1 tugas terminal bisa kebuka banyak;
yang gagal (exit≠0/ERROR) DITONJOLKAN di checkpoint dengan instruksi:
"kalau ada yang GAGAL, ULANGI dulu sampai sukses, baru lanjut" — pas
/continue, agent cek eksekusi terakhir & ngulangin yang belum berhasil. - DB local (
sessions.db) mencatat per pesan (role, content, tool_calls, timestamp) + FTS5 searchable.
Alur: token abis / kill -9 / crash → --resume → deteksi otomatis →
/continue → agent lanjut dari posisi EXAK (retry dulu yang gagal).
- Setiap chat langsung ke-log:
data/sessions/YYYY-MM-DD.md+ SQLite - Setiap ingatan langsung ke-save:
data/memories/YYYY-MM-DD.md+ SQLite - Export ke Obsidian vault dengan link structure
- Backup auto-commit via git (aman dari VPS mati)
agent:
name: ringan
max_steps: 15
window_size: 20
hard_cap_tokens: 8000
tool_result_max_chars: 4000
db_path: data/memory.db
endpoint: <isi endpoint OpenAI-compatible kamu, lihat config.example.yaml>
api_key_env: RINGAN_API_KEY
api_mode: chat_completions # auto / chat_completions / responses
model_name: auto/coding:free
aliases:
flash: Gemini_3.6_flash_low
approval:
mode: ask # ask / allow / deny — gerbang tool berbahaya
auto_safe: true # smart gate: command aman (df -h, ls...) auto-jalan
timeout: 180
max_retries: 3| Framework | Token per request | Tools terlihat |
|---|---|---|
| RINGAN | ~280-350 | 1 universal call_tool + manifest ringkas |
| Hermes | 15,000-30,000+ | 37 schema penuh |
| OpenClaw | 10,000+ | Full function calling |
| Atomic | 5,000-15,000 | Full tool schemas |
agentic/
├── install.sh # Portable installer (pindah VPS = clone + install)
├── backup.sh # Auto backup memory + session (git commit)
├── config.yaml # Konfigurasi (endpoint, model, aliases)
├── main.py # Entry point: CLI REPL + one-shot
├── blueprint.md # Desain arsitektur
├── ringan/
│ ├── config.py # Config loader + setup wizard + fetch models
│ ├── llm.py # LLM client (SSE-aware, retry, fallback)
│ ├── context.py # Lite context builder (budget-aware)
│ ├── router.py # Tool registry + lazy execution
│ ├── memory.py # SQLite memory + markdown mirror + Obsidian export
│ ├── sessions.py # Session logger realtime (SQLite + markdown)
│ ├── agent.py # Agent loop (realtime recording)
│ ├── gateway/
│ │ └── telegram.py # Telegram adapter (inline model buttons)
│ └── tools/
│ ├── terminal.py # shell exec
│ ├── file.py # read/write/list
│ ├── web.py # web fetch
│ ├── calculator.py # math eval
│ ├── memory_tool.py # memory add/search
│ └── browser.py # Playwright (lazy, opsional)
└── data/
├── memory.db # Memory SQLite
├── memories/*.md # Memory markdown (per hari)
├── sessions.db # Session SQLite
└── sessions/*.md # Session log markdown (per hari)
| Phase | Status | Isi |
|---|---|---|
| 1. MVP | ✅ | Core loop, router, tools, CLI, wizard, memory |
| 2. Gateway + Browser | ✅ | Telegram adapter (inline buttons), Playwright (lazy) |
| 3. Memory Upgrade | ✅ | Realtime session log, markdown mirror, Obsidian export, git backup |
| 4. Power | TODO | Computer use, delegation, cron, skills |
MIT