Ketika video demo Manus pertama kali menyebar di linimasa beberapa waktu lalu, reaksi komunitas teknologi terbelah menjadi dua kutub. Sebagian besar orang terpukau melihat sebuah sistem yang mampu meriset pasar, menulis kode, men-deploy aplikasi, dan menyusun laporan investasi hanya dari satu baris prompt. Namun, bagi para engineer yang terbiasa mengutak-atik sistem terdistribusi, ada rasa penasaran sekaligus skeptis: Berapa banyak dari demo tersebut yang merupakan teater pemasaran, dan berapa banyak yang murni kecerdasan komputasi otonom?

Jawabannya tidak butuh waktu lama untuk terkuak. Dalam hitungan hari, proyek open-source bernama OpenManus lahir. Repositori ini membuktikan sebuah tesis fundamental yang sering diulang oleh Paul Graham: perangkat lunak yang hebat kerap kali dibangun bukan dari sihir hitam yang rumit, melainkan dari susunan komponen sederhana yang dieksekusi dengan disiplin logika yang sangat ketat.

OpenManus meruntuhkan ilusi bahwa membangun autonomous agent kelas dunia membutuhkan akses ke ekosistem tertutup bernilai miliaran dolar. Dengan membedah kode sumbernya, kita bisa melihat bagaimana orkestrasi loop eksekusi, isolasi tool-calling, dan pembagian tugas antar-agen dapat dirangkai di mesin lokal Anda sendiri.


Anatomi di Balik Hype: Mengapa OpenManus Berbeda?

Sebagian besar framework agentic yang beredar belakangan ini menderita penyakit yang sama: over-engineering. Mereka membungkus prompt sederhana dengan puluhan lapis abstraksi, rantai class yang membingungkan, dan dependensi raksasa yang membuat proses debugging menjadi mimpi buruk. Ketika agen mengalami kegagalan (looping tanpa henti atau memanggil fungsi yang salah), developer kesulitan mencari akar masalahnya.

OpenManus mengambil rute sebaliknya. Arsitekturnya mengingatkan kita pada filosofi Unix: perkakas kecil, fungsi spesifik, dan komunikasi berbasis teks transparan.

python
+-------------------------------------------------------------------+
|                        USER OBJECTIVE                             |
+-------------------------------------------------------------------+
                                  │
                                  ▼
+-------------------------------------------------------------------+
|                        Manus Orchestrator                         |
|   (Loop ReAct: Thought -> Action Plan -> Step Dispatcher)        |
+-------------------------------------------------------------------+
            │                                     │
            ▼                                     ▼
+-----------------------+             +-----------------------+
|   Sub-Agent: Browser  |             |    Sub-Agent: Bash    |
|   (Playwright Runner) |             |  (Sandbox Shell Exec) |
+-----------------------+             +-----------------------+
            │                                     │
            └─────────────────┬───────────────────┘
                              ▼
+-------------------------------------------------------------------+
|                     Observation & Evaluation                      |
|          (Memory Buffer & Dynamic Context Window Trimming)        |
+-------------------------------------------------------------------+

Struktur internal OpenManus tidak bertele-tele. Repositori ini dibangun di atas tiga pilar utama:

  1. Loop Eksekusi Determinasionis (ReAct Engine): Siklus evaluasi berbasis status (state-driven cycle) yang memaksa model berpikir sebelum bertindak.

  2. Tool-Calling Sandboxing: Mekanisme eksekusi perintah terminal dan otomatisasi peramban yang terisolasi dari sistem utama pengguna.

  3. Multi-Agent Flow: Pemisahan peran antara perencana (planner) dan eksekutor (specialized sub-agents).


Membedah Mesin Utama: Siklus Loop Eksekusi (The ReAct Core)

Di jantung OpenManus terdapat sebuah kelas dasar bernama BaseAgent yang kemudian diturunkan menjadi kelas Manus. Jika Anda membuka berkas app/agent/base.py, Anda tidak akan menemukan kode misterius. Inti dari otonomi sistem ini terletak pada loop eksekusi step() yang dipanggil secara berulang hingga kondisi terminasi terpenuhi.

Mari kita telaah simplifikasi logika dari loop eksekusinya:

python
class BaseAgent:
    def __init__(self, max_steps: int = 30):
        self.max_steps = max_steps
        self.current_step = 0
        self.memory = Memory()
        self.state = AgentState.IDLE

    async def run(self, request: str) -> str:
        self.state = AgentState.RUNNING
        self.memory.add_message("user", request)

        while self.current_step < self.max_steps:
            self.current_step += 1
            
            # 1. Ambil respons dari LLM berdasarkan riwayat memori
            response = await self.llm.chat(self.memory.get_messages())
            
            # 2. Parsing output: Apakah model ingin memanggil Tool atau memberikan jawaban final?
            thought, tool_calls = self.parser.extract_action(response)
            self.memory.add_message("assistant", response)

            # 3. Terminasi jika model menyatakan tugas telah rampung
            if not tool_calls:
                self.state = AgentState.FINISHED
                return response

            # 4. Eksekusi Tool dan rekam hasilnya ke memori (Observation)
            for tool_call in tool_calls:
                observation = await self.execute_tool(tool_call)
                self.memory.add_message("tool", observation)

        self.state = AgentState.MAX_STEPS_REACHED
        return "Batas langkah maksimal tercapai tanpa penyelesaian penuh."

Mengapa Desain Ini Efektif?

Kunci keberhasilan pendekatan ini bukan pada kecanggihan syntax, melainkan pada disiplin manajemen status (state management). Setiap kali agen berinteraksi dengan lingkungan (misalnya, membaca isi folder atau menjelajah halaman web), output dari interaksi tersebut diumpankan kembali ke context window sebagai pesan bertipe tool (Observation).

Model tidak dibiarkan berasumsi. Jika perintah mkdir project dijalankan, model harus menunggu respons stdout/stderr terminal sebelum merancang langkah berikutnya. Inilah yang membedakan agen fungsional dengan chatbot biasa yang kerap mengalami halusinasi tindakan.


Tool-Calling Sandboxing: Menjinakkan Akses Terminal dan Browser

Memberikan izin eksekusi shell dan browser kepada model AI adalah pedang bermata dua. Tanpa mekanisme pembatasan yang rapi, agen bisa menghapus direktori penting atau terjebak dalam infinite loop saat mencoba menavigasi situs dengan proteksi CAPTCHA.

OpenManus membagi kapabilitas eksekusinya ke dalam modul modular di direktori app/tool/:

python
app/tool/
├── base.py           # Base tool interface
├── bash.py           # Shell execution engine
├── browser_use.py    # Playwright browser integration
├── file_saver.py     # Local file writer & inspector
└── python_execute.py # Isolated Python code runner

1. Eksekusi Terminal (Bash Sandbox)

Alih-alih menjalankan perintah langsung melalui os.system() yang berbahaya, OpenManus membungkus eksekusi shell dalam sesi asyncio.subprocess dengan penanganan timeout yang ketat.
python
async def execute_bash(command: str, timeout: int = 60) -> str:
    # Filter perintah destruktif dasar
    blacklisted = ["rm -rf /", ":(){ :|:& };:", "mkfs"]
    if any(b in command for b in blacklisted):
        return "Error: Perintah berbahaya diblokir oleh sandbox lokal."

    try:
        process = await asyncio.create_subprocess_shell(
            command,
            stdout=asyncio.subprocess.PIPE,
            stderr=asyncio.subprocess.PIPE
        )
        stdout, stderr = await asyncio.wait_for(process.communicate(), timeout=timeout)
        
        output = stdout.decode().strip() or stderr.decode().strip()
        return output if output else "Perintah berhasil dieksekusi tanpa output."
    except asyncio.TimeoutError:
        process.kill()
        return f"Error: Eksekusi melebihi batas waktu({timeout} detik)."

2. Otomatisasi Peramban (Browser Tooling)

Untuk navigasi web, OpenManus mengintegrasikan pustaka otomasi modern seperti Playwright. Alih-alih membebankan seluruh DOM mentah ke dalam model yang akan menghabiskan ribuan token dalam sekejap, OpenManus mengekstrak pohon aksesibilitas (accessibility tree) dan tangkapan layar terkompresi.

Dengan cara ini, LLM hanya menerima informasi struktural penting: ID elemen tombol, kolom input, dan teks utama. Hasilnya adalah penghematan konsumsi token hingga 75% per siklus pencarian web.


Orkestrasi Sub-Agent: Membagi Beban Kognitif

Masalah terbesar agen tunggal (single agent) adalah degradasi memori. Ketika satu model diminta meriset, menulis kode, memverifikasi error, dan menyusun dokumentasi secara beruntun, context window akan terisi sampah informasi yang mengaburkan instruksi awal.

OpenManus mengatasi ini dengan membagi tanggung jawab ke dalam arsitektur sub-agent fungsional:

python
┌──────────────────────┐
                  │    PlanningAgent     │
                  │ (Rencana Makro/To-Do)│
                  └──────────┬───────────┘
                             │ Disposisi Tugas
                             ▼
                  ┌──────────────────────┐
                  │      Manus Core      │
                  │   (Agent Dispatch)   │
                  └────┬────────────┬────┘
                       │            │
       Delegasi Riset  │            │ Delegasi Coding
                       ▼            ▼
         ┌──────────────────┐  ┌──────────────────┐
         │   BrowserAgent   │  │   PythonAgent    │
         │ (Navigasi & Scrape)│ │ (Eksekusi Script)│
         └──────────────────┘  └──────────────────┘
  1. PlanningAgent: Bertindak sebagai manajer proyek. Tugasnya memecah tujuan besar ("Buat dasbor visualisasi data cuaca Jakarta") menjadi 5 langkah atomik terukur.
  2. Specialized Agents: Dieksekusi untuk langkah spesifik. BrowserAgent mencari API cuaca publik gratis, sementara PythonAgent menulis skrip untuk mengambil data dan menyimpannya sebagai file HTML interaktif.
  3. Konteks Terisolasi: Setiap sub-agent hanya menerima konteks yang relevan dengan tugasnya. Saat PythonAgent bekerja, ia tidak perlu membaca log navigasi mentah dari peramban, melainkan hanya data JSON terstruktur yang sudah dibersihkan.

Komparasi Teknis: OpenManus vs Framework Agentic Lain

Sebelum Anda memutuskan arsitektur mana yang tepat untuk kebutuhan Anda, mari kita bandingkan OpenManus dengan beberapa framework populer di industri:

Parameter EvaluasiOpenManusLangGraphCrewAIAutoGPT (Legacy)
Kompleksitas AbstraksiRendah (Python murni, transparan)Tinggi (Graph-based, StateGraph)Menengah (Role-playing metaphor)Sangat Tinggi (Banyak dependensi usang)
Transparansi EksekusiPenuh via CLI & log mentahBergantung pada visualizer graphBergantung pada callback loggerRawan black-box behavior
Konsumsi TokenHemat (Ada mekanisme auto-trim)Bergantung konfigurasi manualMenengah-Tinggi (Prompt peran panjang)Sangat Boros
Kemandirian InfrastrukturTinggi (100% lokal, bebas pilih model)Tinggi (Bisa self-host)MenengahRendah (Kerap terikat OpenAI API)
Integrasi Tool KhususSangat mudah (Fungsi Python biasa)Butuh format ToolNode resmiBerbasis class @tool decoratorRumit
Kurva PembelajaranCepat (< 1 jam membaca repo)Curam (Perlu paham konsep DAG)MenengahCuram

Panduan Implementasi Praktis: Menjalankan OpenManus di Mesin Lokal

Bagi Anda yang ingin menguji ketangguhan sistem ini secara langsung tanpa pusing memikirkan ketergantungan pada layanan SaaS tertutup, berikut langkah-langkah konkretnya.

Langkah 1: Kloning dan Konfigurasi Environment

Pastikan mesin Anda telah terpasang Python 3.11 atau lebih baru.

bash
# Klon repositori OpenManus
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus

# Buat virtual environment terisolasi
python -m venv venv
source venv/bin/activate  # Di Windows: venv\Scripts\activate

# Pasang seluruh dependensi
pip install -r requirements.txt

# Pasang browser Playwright
playwright install

Langkah 2: Mengonfigurasi LLM Gateway Berperforma Tinggi

OpenManus membutuhkan model yang memiliki kemampuan penalaran logika dan function calling yang presisi—seperti Claude 3.5 Sonnet, DeepSeek V3, atau GPT-4o. Masalahnya, mendaftar ke berbagai penyedia model secara terpisah sering kali memakan waktu, terkendala metode pembayaran internasional, serta terkena limitasi kuota yang ketat.

Solusi paling praktis adalah memanfaatkan gateway terpadu seperti AiStudio.id API Gateway. Platform ini menyediakan satu pintu akses (single unified API key) ke puluhan LLM kelas atas dengan standar antarmuka OpenAI-compatible, latensi rendah dari jaringan lokal, serta kemudahan top-up saldo tanpa kartu kredit internasional.

Buka berkas konfigurasi config/config.toml di direktori OpenManus Anda, lalu sesuaikan konfigurasinya:

toml
[llm]
model = &quot;deepseek-ai/deepseek-v3&quot; # Atau &quot;claude-3-5-sonnet-20241022&quot;
base_url = &quot;https://api.aistudio.id/v1&quot;
api_key = &quot;YOUR_AISTUDIO_API_KEY&quot;
max_tokens = 4096
temperature = 0.2

[agent]
max_steps = 25
browser_headless = true
sandbox_mode = true

Langkah 3: Menjalankan Perintah Pertama via CLI

Jalankan agen dengan mengeksekusi skrip utama:

bash
python main.py

Masukkan instruksi nyata, misalnya:
> "Cari 3 repositori GitHub trending hari ini yang membahas WebAssembly, rangkum fitur utamanya, dan simpan hasilnya ke file trending_wasm.md di folder workspace."

Anda akan melihat di terminal bagaimana OpenManus:

  1. Menginisiasi PlanningAgent untuk menyusun rencana pencarian.

  2. Membuka peramban di latar belakang menuju github.com/trending.

  3. Mengekstrak teks dari elemen yang relevan.

  4. Menulis file Markdown ke disk lokal Anda secara otonom.

python
# Contoh implementasi kustom jika Anda ingin memanggil Manus secara programmatic
import asyncio
from app.agent.manus import Manus
from app.config import config

async def main():
    agent = Manus()
    prompt = &quot;Analisis struktur direktori project ini dan buatkan visualisasi README.md&quot;
    
    print(f&quot;[*] Menjalankan tugas: {prompt}&quot;)
    result = await agent.run(prompt)
    print(&quot;\n[+] Tugas Selesai!&quot;)
    print(result)

if __name__ == &quot;__main__&quot;:
    asyncio.run(main())

Mengatasi Bottleneck Nyata: Token, Latensi, dan Halusinasi Loop

Dalam praktiknya, menjalankan autonomous agent lokal bukan tanpa rintangan. Jika Anda berniat mengintegrasikan pola ini ke dalam alur kerja produksi, ada tiga masalah utama yang harus diantisipasi:

1. Ledakan Biaya Token (Context Bloat)

Setiap langkah eksekusi akan menambah panjang riwayat pesan. Jika agen menavigasi 10 halaman web, context window bisa membengkak hingga 80.000 token dalam 5 menit. Solusi: Terapkan pemangkasan riwayat proaktif (sliding memory window). Hapus respons mentah dari tool call lama dan pertahankan hanya ringkasan teks berbobot sebelum model melangkah ke fase berikutnya.

2. Halusinasi Eksekusi Berulang (Deadlock Loop)

Terkadang agen mencoba menjalankan perintah terminal yang gagal, lalu mencoba lagi perintah yang persis sama tanpa modifikasi parameter.
Solusi: Sisipkan detektor repetisi di BaseAgent. Jika perintah yang sama menghasilkan kode error yang identik selama dua kali berturut-turut, paksa sistem menyuntikkan pesan sistem pengingat: "Pendekatan ini gagal 2x. Ubah strategi Anda atau tanyakan pendekatan alternatif."

3. Latensi Jaringan Antar Tool-Calling

Karena agen harus bolak-balik mengirim permintaan ke model setelah tiap aksi kecil, latensi jaringan ke server LLM menjadi faktor penentu kenyamanan. Menggunakan rute gateway lokal yang dioptimalkan seperti AiStudio.id memangkas round-trip time (RTT) secara signifikan dibanding mengakses endpoint luar negeri yang kerap mengalami throttling.

Kebebasan Komputasi di Tangan Builder

Kehadiran repositori seperti OpenManus menegaskan sebuah realitas baru: batasan antara software konsumen tertutup dan kapabilitas open-source kini menyempit hingga ke titik nol. Apa yang awalnya dikemas sebagai produk eksklusif seharga ratusan dolar per bulan ternyata dapat direplikasi dengan beberapa ratus baris kode Python yang bersih, terstruktur, dan transparan.

Bagi para developer dan kreator sistem di Indonesia, ini adalah sinyal kuat untuk berhenti bersikap pasif. Kita tidak perlu menunggu izin atau undangan eksklusif dari raksasa teknologi Silicon Valley untuk mulai membangun asisten otonom yang mampu memproses data internal, mengotomatisasi pekerjaan membosankan, atau membangun produk baru di atas infrastruktur kita sendiri.

Kuncinya terletak pada penguasaan terhadap arsitektur dasar: pahami siklus loop-nya, isolasi eksekusinya dengan aman, sambungkan ke model inferensi yang tangguh melalui gateway yang efisien, dan biarkan kode Anda bekerja secara mandiri di mesin Anda. Kedaulatan teknologi selalu berpihak kepada mereka yang bersedia membongkar mesin dan merakitnya kembali dengan tangan sendiri.


Catatan Penulis

Sandra
Sandra

> Sandra menulis seputar rekayasa prompt, efisiensi arsitektur AI, dan produk digital di AiStudio.id.