Personal AI Agent berbasis Telegram + Groq AI (Llama 3.3 70B). Terinspirasi dari Hermes Agent by Nous Research (open-source self-improving AI agent β open-claw style).
Status: Phase 1 PR1 β gateway abstraction + sessions store dengan FTS5 search. Phase 0 (security hardening) sudah merged. Fitur lanjutan (multi-platform, MCP, delegation) ada di Phase 1+ roadmap.
aiagentgres/
βββ main.py # Telegram entry point (allow-list, callback router)
βββ agent.py # Core agent loop + action handlers
βββ config.py # Env loader
βββ auth.py # OWNER allow-list + dangerous-cmd approval
βββ paths.py # Path resolution (JAGRESMAN_HOME override)
βββ logging_setup.py # Logging config
βββ memory.py # Thin adapter di atas sessions.py (back-compat)
βββ sessions.py # Sessions store (FTS5 search) β Hermes-style
βββ gateways/ # Platform abstraction (Telegram + future Discord/Email)
β βββ base.py # Gateway ABC, IncomingMessage, OutgoingMessage
β βββ telegram.py # TelegramGateway impl
β βββ stub.py # In-memory gateway buat testing
βββ skill_loader.py # Load skills dari folder skills/
βββ skill_executor.py # Eksekusi kode dari skill
βββ skill_writer.py # Self-improving β nulis skill sendiri via LLM
βββ morning_briefing.py # Generator briefing pagi (jadwal cron jam 07:00 WIB)
βββ auto_trader.py # Auto-trader Binance Futures (separate process)
βββ webhook_server.py # TradingView webhook listener
βββ backtest*.py # Backtest scripts
βββ knowledge.txt # Fakta personal user (legacy, akan dipisah di Phase 1)
βββ AGENTS.md # Project context (Hermes-style)
βββ SOUL.md # Personality (Hermes-style)
βββ pyproject.toml # Project metadata + dep list
βββ requirements.txt # Pinned dependency versions
βββ .env.example # Env var template
βββ .gitignore # Hardening biar gak commit secret lagi
βββ tests/ # Pytest test suite
β βββ test_smoke.py
β βββ test_auth.py
β βββ test_sessions.py
β βββ test_gateway.py
βββ .github/workflows/ # GitHub Actions CI (ruff + pytest)
Catatan path: Default
BASE_DIR= direktori repo. Override pakai env varJAGRESMAN_HOMEkalau lo butuh deploy di luar VPS produksi (/root/aiagent/udah gak hardcoded lagi).
git clone https://github.com/jagres0039/aiagentgres.git
cd aiagentgres
python3.11 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txtcp .env.example .env
# Edit .env, isi setidaknya TELEGRAM_BOT_TOKEN, GROQ_API_KEY, OWNER_TELEGRAM_IDSCari user ID lo dengan chat ke @userinfobot di Telegram. Lalu set:
OWNER_TELEGRAM_IDS=123456789
Multi-owner: OWNER_TELEGRAM_IDS=123,456,789. Kalau env ini kosong, bot
bakal reject semua pesan.
=== TENTANG PEMILIK AGENT ===
Nama: [nama lo]
Kota: Bandung, Indonesia
Timezone: WIB (UTC+7)
Untuk personality dan project context, edit SOUL.md dan AGENTS.md.
python3.11 main.pySetiap handler Telegram di main.py dibungkus @require_owner. User yang
gak ada di OWNER_TELEGRAM_IDS di-reject sebelum agent dipanggil. Sebelum
Phase 0, hanya EXECUTE_BASH yang punya owner check di dalam agent.py β tapi
action lain (SKILL, SCREENSHOT, AUTO_*) bisa ditrigger LLM dari pesan user
sembarangan. Sekarang gak bisa.
Setiap LLM-output EXECUTE_BASH: ... lewat classifier (lihat auth.py):
| Risk | Behavior |
|---|---|
safe (ls, df, free, uptime, ...) |
Auto-run kalau AUTO_APPROVE_SAFE_COMMANDS=true (default) |
moderate (git push, pip install, kill, ...) |
Tombol Approve/Skip di Telegram |
dangerous (rm -rf, sudo, curl | bash, ...) |
Tombol Approve/Skip di Telegram |
Approval lewat tombol di Telegram dengan InlineKeyboardButton. Pending
approval timeout di 10 menit. Cross-user attack diblok β user lain gak bisa
nge-approve command yang di-trigger user A.
EDIT_FILE di-disable sementara di Phase 0 sampai approval flow buat
file-write selesai (Phase 1).
Memory schema lama (single conversations table) di-replace sama dua tabel:
sessionsβ metadata:session_uid,user_id,platform,title,summary,created_at,updated_at,closed. Tiap percakapan = satu session, bisa di-resume, di-close, di-list.messagesβ full log:session_id,role,content,metadata(JSON),timestamp. Plus FTS5 virtual tablemessages_ftsbuat pencarian full-text instan.
Migration: kalau lo upgrade dari Phase 0, tabel conversations lama
diambil otomatis pas pertama kali jalan β semua message di-import ke
session "Migrated from Phase 0" per user. Tabel lamanya dibiarin
read-only (gak di-drop) biar destructive op-nya manual.
Search pakai /search <query>:
- Single word:
/search bitcoinβ prefix match (bitcoin*) - Multi word:
/search btc tradingβ AND match - Advanced:
/search btc OR eth NOT memeβ operator FTS5
API programmatic (lihat sessions.py):
import sessions
s = sessions.get_or_create_active_session(user_id=42)
sessions.append_message(s.id, "user", "halo")
hits = sessions.search_messages("halo", user_id=42)gateways/ package memisahin platform messaging dari core agent. Tujuan:
nanti tambah Discord/Email/Slack tinggal bikin gateways/<nama>.py yang
inherit Gateway ABC. Agent core gak peduli platform-nya apa β dia cuma
consume IncomingMessage dan emit OutgoingMessage.
Status sekarang: TelegramGateway udah punya send() functional, tapi
inbound handler registration masih lewat main.py legacy. Migrasi
lengkap di Phase 1 PR berikutnya.
.env, *.db, *.log, service_account.json, playwright_cookies.json,
tmp_*.py, __pycache__/ semua di-ignore dari git. Kalau lo upgrade dari
versi sebelum Phase 0, jangan force-push β file lama di history-nya udah
gua hapus dari latest commit, tapi history-nya tetep ada (lo perlu revoke
session Twitter/X manual kalau pernah commit cookie).
pip install -e ".[dev]" # install ruff + pytest
ruff check . # lint
pytest # unit testsCI otomatis jalanin keduanya di GitHub Actions tiap push & PR (.github/workflows/ci.yml).
/start - Halo
/clear - Hapus history chat (session aktif)
/memory - Lihat semua memory tersimpan
/sessions - List session aktif lo
/search <query> - Full-text search di history (FTS5)
/briefing - Trigger morning briefing manual
/mode - Switch trading mode (scalping / swing)
"cariin info terbaru soal Bitcoin"
"buat event meeting besok jam 10 sampai jam 11"
"cek inbox gua"
"berapa harga BTC sekarang?"
"buatin skill buat cek jadwal sholat"
"inget ini: gua biasanya trading jam 9 malem"
"screenshot https://example.com"
"like https://x.com/some/tweet"
Upload PDF/Word/Excel β bot baca & analisis. Voice note β bot transcribe (Whisper) & proses.
- OWNER_TELEGRAM_IDS allow-list (multi-owner support)
- Dangerous-command approval flow via Telegram buttons
- Replace
/root/aiagent/hardcoded paths denganBASE_DIR -
pyproject.toml+requirements.txt(pinned) -
.env.example,AGENTS.md,SOUL.mdHermes-style - Proper logging (
logging_setup.py) -
.gitignorehardening + remove.env/*.db/*.log/cookies dari tracked files - GitHub Actions CI (ruff + pytest)
- Smoke tests + auth tests
- PR1: Gateway abstraction + Sessions (current)
-
GatewayABC +IncomingMessage/OutgoingMessagedataclasses -
TelegramGatewayskeleton dengan outboundsend()functional -
StubGatewaybuat testing - Sessions store dengan FTS5 search
-
/sessions+/searchcommands - Auto-migrate legacy
conversationstable ke sessions
-
- PR2: Profile system + AGENTS.md/SOUL.md auto-load + persona switching
- PR3: Natural-language cron (replace hardcoded
JobQueue) - PR4: Structured action dispatcher (replace LLM string parsing)
- PR5: Provider abstraction (Groq / OpenAI / Anthropic / Ollama)
- PR6: Skill curator + auto-improve
- PR7: Discord + Email gateway impl beneran
- PR8: EDIT_FILE re-enabled dengan approval flow
- Delegation / subagents (parallel isolated work)
- Persistent goals (Ralph loop)
- MCP client
- Image generation tool
- TTS output
- Plugin system + hooks
- API server (OpenAI-compatible)
- Docker sandbox untuk EXECUTE_BASH
- Git worktree multi-agent
- Kanban task board
- Batch processing
- Local Ollama provider
| Service | Daftar | Harga |
|---|---|---|
| Telegram Bot | @BotFather di Telegram |
Free |
| Groq AI | console.groq.com | Free |
| Tavily Search | tavily.com | Free (1000/bln) |
| Google Calendar | console.cloud.google.com | Free |
| Gmail App Password | myaccount.google.com/apppasswords | Free |
| Binance Futures | binance.com (opsional, untuk auto-trader) | Free |
| Alpha Vantage | alphavantage.co (opsional) | Free |
Dibuat oleh jagresman (eki) β Bandung, Indonesia. Terinspirasi dari Hermes Agent by Nous Research.