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 via OpenAI-compatible endpoint (
/v1/chat/completions); swap ke LM Studio, vLLM, Groq, atau OpenAI cukup ubahmodel.base_urldi config.yaml
Instalasi
Pengguna umum
pipx install palapa-agent
palapa chat # wizard berjalan otomatis saat pertama kali
pipxmenginstall CLI tool di virtualenv terisolasi — direkomendasikan agar tidak konflik dengan paket Python lain. Kalau belum punya pipx:pip install pipxataubrew install pipx. Alternatif tanpa pipx:pip install palapa-agent(install ke environment aktif).
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" # Ollama OpenAI-compat endpoint; 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.
Provider lain: Palapa terhubung ke Ollama via OpenAI-compatible endpoint (
/v1/chat/completions). Endpoint yang sama dipakai oleh LM Studio, vLLM, Groq, Together, dan OpenAI sendiri — cukup ubahmodel.base_url(danmodel.api_keybila perlu) untuk swap provider tanpa ubah kode.
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.
Metadata
Release files for palapa-agent 0.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| palapa_agent-0.1.9.tar.gz | 422.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| palapa_agent-0.1.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 614.8 kB
Release files / palapa_agent-0.1.9.tar.gz
| Download URL | palapa_agent-0.1.9.tar.gz |
|---|---|
| Size | 422.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e896afe1c2937399f9b8ae4c37b3cbf2098b3a9f60c5e1862ea98f1e5f09065
|
|
BLAKE2b-256 checksum How to use checksums |
d735c80a1736a206c6e76cc1508f70981ea102e9940176e7a910195c0f25818e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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":true}
|
Release files / palapa_agent-0.1.9-py3-none-any.whl
| Download URL | palapa_agent-0.1.9-py3-none-any.whl |
|---|---|
| Size | 192.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a53f0c0a0e8010c75784058bb058d5b7815c97f98aebeb587d8d586eea59657e
|
|
BLAKE2b-256 checksum How to use checksums |
9fe9e48a2ccf72fe27ac4f51425f59cc47e87b68488e8fff5abe49d1c4df2d90
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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":true}
|