Skip to main content

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 ubah model.base_url di config.yaml

Instalasi

Pengguna umum

pipx install palapa-agent
palapa chat   # wizard berjalan otomatis saat pertama kali

pipx menginstall CLI tool di virtualenv terisolasi — direkomendasikan agar tidak konflik dengan paket Python lain. Kalau belum punya pipx: pip install pipx atau brew 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 palapa langsung — berlaku setelah pip install palapa-agent. Kalau kamu pakai mode developer (uv sync), tambahkan prefix uv 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):

  1. ./config.yaml — developer, per-project
  2. ~/.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 ubah model.base_url (dan model.api_key bila 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)

Source distribution for palapa-agent 0.1.9
File Size Uploaded
palapa_agent-0.1.9.tar.gz 422.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for palapa-agent 0.1.9
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

0.1.15

2 release files

0.1.14

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

This release

0.1.9 This release

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page