Palapa
Autonomous AI agent lokal berbasis Ollama. Berjalan sepenuhnya offline, tanpa cloud API, dengan arsitektur yang bisa dimodifikasi bebas.
Fitur
- ReAct agent loop — multi-turn, tool-calling, dengan context compaction otomatis
- 6 tools bawaan — bash, file, web search, web fetch, browser (Playwright), memory
- 3-layer memory — episodic (SQLite FTS5) + semantic (USER.md/MEMORY.md) + procedural (skills/)
- Skills auto-extraction — Evaluator otomatis menulis skill baru setelah task kompleks, tanpa konfirmasi
- Skills portabilitas — export skills ke git repo lokal, import dari remote, sync antar mesin
- Agent delegation — main agent bisa mendelegasi sub-task ke child agent specialist, paralel
- Network tools — Mikrotik RouterOS + Ruckus ICX + Cisco/Juniper/Aruba/Huawei via Netmiko, bundled whitelist per vendor/OS, read-only
- MCP client — koneksi ke MCP server eksternal (stdio + HTTP)
- CLI interaktif — history, multi-line input, slash commands, first-run wizard
- REST API — FastAPI, streaming SSE, stateless per request
- Provider configurable — Ollama default, swap via
model.base_urldi config
Instalasi
Pengguna umum
pip install palapa-agent
palapa chat # wizard berjalan otomatis saat pertama kali
Developer
git clone https://github.com/indi9o/palapa-agent
cd palapa-agent
uv sync
# Pertama kali pakai browser tool:
uv run playwright install chromium
Jalankan uv run palapa chat — wizard otomatis muncul kalau config belum ada.
Penggunaan
Catatan: Contoh perintah di bawah menggunakan
palapalangsung — berlaku setelahpip install palapa-agent. Kalau kamu pakai mode developer (uv sync), tambahkan prefixuv run:uv run palapa,uv run palapa devices list, dst.
CLI
# Sesi interaktif
palapa
# Satu perintah, tanpa REPL
palapa --once "ringkasan interface eth0 di router X"
# Inventory perangkat jaringan
palapa devices add # tambah perangkat secara interaktif
palapa devices list # lihat daftar perangkat
# Kelola skills
palapa skills list
palapa skills show <nama>
palapa skills delete <nama>
palapa skills install-defaults # install 17 bundled starter skills
palapa skills install-defaults --overwrite
# Export/import skills antar mesin
palapa skills export --repo <path> # copy ke git repo lokal + auto-commit
palapa skills import git+<url> # clone dari remote, register sebagai sumber
palapa skills pull # update dari semua remote terdaftar
palapa skills pull <remote-name>
palapa skills remotes # lihat daftar remote terdaftar
# Cari sesi sebelumnya (episodic memory)
palapa sessions search <query>
Slash commands di dalam palapa chat:
| Command | Fungsi |
|---|---|
/status |
Info sesi + model aktif + token usage |
/clear |
Reset histori percakapan |
/compact |
Paksa compaction konteks sekarang |
/verbose |
Toggle tampilan tool call raw/ringkas |
/audit |
Toggle audit log tool call |
/skills |
Daftar skills yang ter-load sesi ini |
/<skill-name> |
Inject skill langsung ke agent |
REST API
uv run uvicorn palapa.gateway.api:app --reload
POST /chat — kirim pesan, respons streaming SSE
GET /skills — daftar semua skills
GET /health — health check
Konfigurasi
Config dicari di dua lokasi (prioritas atas ke bawah):
./config.yaml— developer, per-project~/.palapa/config.yaml— user install (dibuat oleh wizard)
model:
base_url: "http://localhost:11434/v1" # override via env PALAPA_BASE_URL
name: "qwen3.6:27b"
context_length: 64000
tools:
bash:
enabled: true
browser:
enabled: true
network:
enabled: false # aktifkan kalau pakai NetworkTool
inventory_path: "~/.palapa/inventory.yaml"
scripts_enabled: false # opt-in eksplisit untuk run_skill_script
# whitelist_extend: # tambah command di luar bundled default
# mikrotik:
# ros7: ["/my-cmd"]
memory:
skills_dir: "~/.palapa/skills/"
db_path: "~/.palapa/sessions.db"
user_model: "~/.palapa/USER.md"
memory_md: "~/.palapa/MEMORY.md"
soul_md: "~/.palapa/SOUL.md" # persona agent, ditulis manual
audit:
enabled: false # catat semua tool call ke SQLite
api:
host: "127.0.0.1"
port: 8000
# Agent presets untuk delegation
delegation:
max_parallel: 2
agents:
network-specialist:
alias: "Budi"
model: "qwen3.6:27b"
exclusive: true # tool preset hanya via delegasi, disembunyikan dari main agent
timeout: 120
tools: [network, bash, memory]
Lihat config.yaml.example untuk contoh lengkap.
Inventory perangkat tersimpan terpisah di ~/.palapa/inventory.yaml — kelola via palapa devices add/list atau edit manual.
Arsitektur
AgentLoop.run(pesan)
→ bangun system prompt (SOUL.md + USER.md + skills relevan + episodic hits)
→ LLM call
→ parse tool calls → ToolDispatcher.dispatch()
→ feed hasil → ulang sampai respons final / max iterasi
→ sesi tutup: persist ke episodic, jalankan Evaluator (background)
| Komponen | Tanggung jawab |
|---|---|
agent/core.py |
ReAct loop — prompt, LLM call, dispatch tools |
agent/evaluator.py |
Post-session skill extractor — skor kompleksitas, tulis SKILL.md |
tools/ |
Satu file per tool (bash, file, web_search, web_fetch, browser, memory) |
tools/network.py |
NetworkTool — Netmiko, bundled whitelist, whitelist_extend |
tools/network_whitelist.py |
BUNDLED_WHITELIST per vendor/OS |
mcp/ |
MCP client manager (stdio + HTTP) |
memory/session.py |
Episodic memory — SQLite FTS5 |
memory/user_model.py |
Semantic memory — USER.md dan MEMORY.md |
memory/skills.py |
Procedural memory — folder {slug}/SKILL.md, dual dir, auto-migration |
providers/ollama.py |
OpenAI-compat adapter ke Ollama |
setup/ |
Wizard, devices, skills installer, skills git export/import |
gateway/runtime.py |
Wiring collaborator bersama (build_agent_loop) |
gateway/cli.py |
Interactive REPL + --once scripted mode + semua subcommand |
gateway/api.py |
FastAPI REST API — SSE streaming, stateless |
Testing
uv run python -m pytest # semua test
uv run python -m pytest tests/unit/ # unit test (tidak butuh Ollama)
uv run python -m pytest tests/integration/ # integration test (butuh Ollama berjalan)
Dokumentasi
Riset, keputusan arsitektur, eksperimen, dan progress implementasi dikelola di palapa-wiki. ADR ada di docs/adr/. Domain glossary ada di CONTEXT.md.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file palapa_agent-0.1.3.tar.gz.
File metadata
- Download URL: palapa_agent-0.1.3.tar.gz
- Upload date:
- Size: 293.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
735c7f84df71324df20e4ac0be6b874aadc5f03cf5b8ed24288c6ddb7a22a83b
|
|
| MD5 |
ba1191e985f3fdd7f7944c8ddcc1f317
|
|
| BLAKE2b-256 |
e23ce27a706addd13f126c22d35e21179bccfbc6279c16486955f5480b1cad8b
|
File details
Details for the file palapa_agent-0.1.3-py3-none-any.whl.
File metadata
- Download URL: palapa_agent-0.1.3-py3-none-any.whl
- Upload date:
- Size: 104.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b14cb9ef9049836afee2dfc5f66cf19cc567c6fe0adc134b3c1246b089a074a8
|
|
| MD5 |
5cf84d4c4da3e932fde8e87ef8d1e3f4
|
|
| BLAKE2b-256 |
fe5cfe22b97f15b38a6bb5c463b2331cf463d1cef9984fd6d468b8586923f8c0
|