İçeriğe geç
ivralo
Bölümler

Dokümantasyon / Katkı

Mimari

ivralo'nun nasıl kurgulandığı: üç istemcisi olan bir çekirdek kütüphane, çekirdeğin içinde üç katman, preset'lerden kurulan ajanlar ve PostgreSQL'de tutulan durum. Koda girmeden önce bu sayfayı okuyun.

Bir çekirdek, üç istemci

ivralo bir Python kütüphanesidir: src/ivralo/ altındaki çekirdek. Ajanlar, araçlar, depolama, incident'lar, job'lar, egress politikası; yapabildiği her şey oradadır. Çekirdeğin üstünde üç ince istemci bulunur:

İstemciPaketNedir
Komut satırıcli/Typer ile yazılmış ivralo komutu ve alt komutları
Oturumtui/Komutsuz ivralo'nun açtığı, Textual ile yazılmış tam ekran terminal oturumu
Yerel APIapi/ivralo serve: yalnızca 127.0.0.1 üzerinde, bir token ve X-Ivralo-Api-Version başlığıyla korunan HTTP

Kural şu: istemcilerde hiçbir yetenek bulunmaz. İstemci ekranı çizer, girdiyi okur ve çekirdeği çağırır; iki istemcinin birden ihtiyaç duyduğu mantık çekirdeğe taşınır. Bu sınırı testler korur: çekirdek Typer ya da Textual olmadan import edilebilir, cli/ ve tui/ dışında hiçbir şey bir istemciyi import etmez ve her API route'u, diğer istemcilerin de çağırabildiği bir çekirdek fonksiyonunu çağırır. API'nin hiçbir şeyi ikinci kez yazmadan üçüncü bir istemci olarak eklenebilmesi bu sayede oldu.

   ivralo (cli)      ivralo (tui)      ivralo serve (api)
         \                 |                  /
          +---------- çekirdek ---------------+
          |  agents   tools   storage   incident   jobs   egress  ... |
          +-------------------------------------------------------+
                  |                                 |
           PostgreSQL (durum)              çalışma alanı (bir git repo'su)

Üç katman

Çekirdeğin içinde üç katman birbirinden ayrı tutulur:

KatmanNeredeNe içerir
Bilgiskills/, skills.local/Skill'ler: bir tekniğin ne zaman kullanılacağını, kesin kuralları ve çalışan örnek kodu anlatan markdown paketleri
Yeteneksrc/ivralo/engine/Skill'lerin çağırdığı kütüphane: belgeler, sunumlar, çalışma kitapları, PDF'ler, grafikler, dosyalar üzerinde SQL, OCR
Ajanlarsrc/ivralo/agents/Bilerek ince tutulan ajanlar

Uzmanlık ajanın talimatlarında değil, skill'lerde birikir. Uzun bir talimat metni gerekse de gerekmese de yüklenir ve testler onu göremez; skill ise sürümlenebilir, kurulabilir, lint'ten geçirilebilir ve ölçülebilir. Ajan raftaki skill'lerin tek satırlık bir listesini görür ve bir skill'in tam metnini yalnızca bir görev gerektirdiğinde yükler; bağlamın orta boy bir yerel modele sığacak kadar küçük kalması bu sayede olur.

Ajanlar preset'lerden kurulur

Her ajan tek bir factory tarafından bir preset'ten kurulur: bir anahtar, görünen bir ad, bir yetki kümesi, ne işe yaradığını anlatan tek cümlelik bir ipucu, bir araç çağrısı sınırı ve Python kodunun dosya yazıp yazamayacağı. Preset'in kendine ait bir prompt'u yoktur. Her ajan skill rafının tamamını ve aynı ortak kuralları alır; yani bir ajanı diğerinden ayıran, ona ne söylendiği değil, neleri yapabildiğidir.

Kurulan her ajan üç şeyden oluşur: bir model, ayrı bir worker sürecinde çalışan bir Python runtime'ı ve skill rafı.

AnahtarAjanNe zaman açık
mainAna ajanHer zaman
analystData AnalystVarsayılan olarak
spreadsheetSpreadsheet BuilderVarsayılan olarak
visualizerChart DesignerVarsayılan olarak
reporterReport WriterVarsayılan olarak
scribeDocument and Deck WriterVarsayılan olarak
librarianLibrarianBilgi dizini ya da web araçları açıksa
pdf_operatorPDF OperatorVarsayılan olarak
courierCourierE-posta ya da bir sohbet kanalı yapılandırılmışsa
secretarySecretaryGoogle Workspace yapılandırılmışsa
githubGitHub ClerkBir GitHub token'ı yapılandırılmışsa
coderCode EngineerÇalışma alanı bir git repo'suysa
investigatorIncident InvestigatorÇalışma alanı bir git repo'suysa

Hiçbir preset'e ait olmayan yerel bir skill kendi başına bir preset olur; yetkileri, kendi frontmatter'ında tanımlananlardır.

Ana ajan, konuştuğunuz ajandır. Ekibin bir bütün olarak yapabildiği her şeye sahiptir; yalnızca hesap okumaları (Google, GitHub, veritabanları) ve incident raporu yazmak hariçtir. Onay kuralları ve sınırları herkesinkiyle aynıdır. Bir isteği kendisi yapabiliyorsa kendisi cevaplar; işi ancak temiz bir bağlam ya da daha dar bir yetki gerektiğinde devreder: bir uzmana ya da bir instance'a. Instance, bir görev tanımı ve kendi bağlamıyla açılan, sonunda bir rapor döndüren bir preset kopyasıdır. Bir instance hiçbir zaman onu açandan daha fazla yetkiye sahip olamaz. IVRALO_MAIN_GRANTS ana ajanın yetkilerini daraltır; hiçbir şey genişletemez.

Yetki, code.edit, shell.full ya da git.commit gibi adı olan bir izindir. Her ajanın sekiz yetkilik bir temel kümesi vardır (Python, çalışma alanındaki dosyaları okumak ve yazmak, size soru sormak, bir ekip arkadaşına soru sormak ya da iş devretmek, yapılandırılmış bir veritabanını okumak, stok fotoğraf indirmek). Preset'ler buna ekleme yapar; Investigator ise bir kısmından vazgeçer. Tam liste Yetkiler ve ön ayarlar sayfasında.

Modlar birer yetki kümesidir

Geliştirici modu ve sunucu modu iki ayrı program değildir. Mod, başında kimsenin olmadığı, yani hiçbir şeyi onaylayacak kimsenin bulunmadığı bir run'ın sahip olduğu yetki kümesidir:

IVRALO_MODEBaşında kimse olmayan bir run ek olarak ne yapabilir
developer (varsayılan)Hiçbir şey
serverCommit atabilir ve ivralo'nun açtığı branch'i taslak bir pull request için push edebilir

Mod yalnızca ortamdan ve ana dizindeki .env'den okunur, hiçbir zaman bir repo'nun .ivralo/.env'inden okunmaz; böylece bir repo kendine push yetkisi veremez.

Durum nerede tutulur

Konuşmalarla ilgili bütün durum PostgreSQL'de, ivralo şemasında tutulur: oturumlar, run geçmişi, uzun süreli hafıza, bilgi dizini (pgvector ile) ve job'lar. İkinci bir makineyi aynı veritabanına bağlarsanız aynı konuşmalar orada da görünür. Veritabanı sizin belirttiğiniz bir veritabanı, Docker'ın compose servisi ya da ivralo'nun ana dizin altında kurduğu bir küme olabilir; ayrıntılar PostgreSQL sayfasında.

Diskte ise yapılandırma ve çalışma alanının kendi çalışma dosyaları bulunur:

NeredeNe
Ana dizin.env, permissions.json, mcp.json, brand.json, identifiers.json, skills.local/, güvenilen klasörler, API token'ı
Çalışma alanındaki .ivralo/Dosya geçmişi, değişiklik kayıtları, planlar, kod dizini (SQLite), incident'lar ve raporları, changeset'ler, kayıtlar

.ivralo/ klasörü .git/info/exclude'a eklenir; böylece içindekilerin hiçbiri bir commit'e girmez. Tam liste Durum sayfasında.

Paketler

PaketNe içerir
config/, settings/Ortamdan ve .env'den okunan ayarlar; kişinin kendi dosyaları
llm/Model referansları ve her sağlayıcı için model kurulumu
storage/PostgreSQL'deki her şey
skills/İki raf: yükleme, kurma, lint
agents/Preset'ler, factory, ana ajan, sınırlar
tools/Bir ajanın yapabildikleri: Python worker'ı, dosyalar, shell ve politikası, git, verify, worktree'ler, changeset'ler, e-posta
egress/Web, tarayıcı, worker ve shell için tek bir host politikası
incident/, jobs/İncelemeler, alert alımı ve kalıcı job'lar
lsp/, index/, code/Dil sunucuları, kod dizini ve kod okuma araçları
workflow/, scheduling/Plan modu ve zamanlanmış istekler
lineage/, replay/Bir iddianın nereden geldiği; bir run'ı kaydetmek ve yeniden oynatmak
engine/Belge ve veri kütüphanesi
evals/Eval çalıştırıcısı; ayrıntılar ivralo nasıl ölçülür sayfasında
cli/, tui/, api/Üç istemci

Repo'daki CLAUDE.md dosyası kodun dizinidir; .claude/rules/ altında her alan için bir dosya bulunur. Yapının neden böyle olduğu karar kayıtlarında anlatılıyor; bkz. Kararlar.