Dokümantasyon / Referans
Yetkiler ve ön ayarlar
Yetki (capability), bir ajanın ne tür bir güce sahip olduğunu belirten, adı olan bir izindir. Bu sayfada bütün yetkiler, her uzmanın aldığı temel küme, strict profilinin neleri kaldırdığı ve uzmanların ve ana ajanın kurulduğu preset'ler anlatılıyor.
Yetki nedir
Yetki, shell.full ya da git.commit gibi domain.grade biçiminde tek bir addır. Bir preset bu adlardan bir küme tanımlar; ivralo da her birine karşılık gelen araçları bağlar. Böylece "bu uzmanın hangi araçları var" sorusunun cevabı tek satırlık bir veridir.
Yetki hiçbir zaman kuralları atlatmak demek değildir. shell.full'a sahip olmak, uzmanın shell aracını taşıdığı anlamına gelir, o kadar; her komutu yine shell politikası değerlendirir. Neyin bağlanacağına yetkiler karar verir, neye izin verileceğine araçlar karar verir; onay isteyen şeyi de yine bir insan onaylar.
Her yetkinin pratikte önemli olan üç özelliği vardır:
- Koşul. Bazı yetkiler yalnızca bir ayar onları desteklediği sürece geçerlidir; örneğin bir anahtar ayarlanmışsa ya da çalışma alanı bir git repo'suysa. Google ve GitHub'ın yazma seviyeleri ayrıca onaylayacak birinin başta olmasını gerektirir.
- Onay. Her kullanımda "evet" diyen kim: hiç kimse (
none), shell politikasının o komut için verdiği karar (verdict), her çağrıda onay veren ve bunu oturum boyunca kaldırabilen bir kişi (call) ya da her çağrıda, kaldırma imkânı olmadan onay veren bir kişi (always). - Strict.
strictprofilinin bu yetkiyi kaldırıp kaldırmadığı.
Yetki listesi
| Yetki | Neye izin verir | Koşul | Onay | Strict |
|---|---|---|---|---|
python.run | Çalışma alanında, ayrı bir worker sürecinde Python çalıştırmak. | - | none | korur |
filesystem.read | Dosya okumak: çalışma alanı ve kullanıcının okuyabildiği her yer. Yalnızca .env dosyaları reddedilir. | - | none | korur |
filesystem.write | Çalışma alanının içine, geçmişi tutan yazma koruması üzerinden dosya yazmak. | - | none | korur |
user.ask | Kişiye bir soru sorup cevabını beklemek. | - | none | korur |
team.ask | Bir ekip arkadaşına tek bir soru sorup cevabını almak. Soruyu alan yalnızca okur. | IVRALO_ASK_MEMBER | none | korur |
team.run | Bir işi bir uzmana devretmek: o uzmanın yeni bir instance'ını açıp raporunu geri almak. Instance o uzmanın kendi yetkileriyle çalışır. | IVRALO_INSTANCES 0'dan büyük | none | korur |
database.read | Kendi veritabanlarınızı, her birini adıyla, salt okunur sorgulamak. | IVRALO_SQL_URL ya da databases.json | none | kaldıramaz |
photos.fetch | Unsplash'ten çalışma alanına stok fotoğraf indirmek. | IVRALO_UNSPLASH_ACCESS_KEY | none | kaldıramaz |
shell.full | Çalışma alanında, shell politikasından geçen bir shell komutu çalıştırmak. | - | verdict | kaldırır |
index.search | Çalışma alanının bilgi dizininde arama yapıp kaynağın yerini belirtmek. | IVRALO_KNOWLEDGE | none | korur |
network.web | API anahtarı olmadan web'de arama yapmak, sayfa okumak ve kaydetmek. | IVRALO_WEB | none | kaldırır |
mail.send | Belirttiğiniz adreslere e-posta göndermek. | IVRALO_MAIL | always | kaldırır |
message.send | Yapılandırılmış Telegram ya da Slack sohbetine kısa bir mesaj atmak. | IVRALO_TELEGRAM_BOT_TOKEN ya da IVRALO_SLACK_WEBHOOK_URL | always | kaldırır |
google.read | Google takviminizi, e-postanızı, Drive'ınızı ve Sheets'inizi okumak. | IVRALO_GOOGLE_SERVICES | none | korur |
google.write | Google Workspace'te taslak hazırlamak, oluşturmak ve güncellemek; hiçbir zaman göndermemek. google.read'i de kapsar. | IVRALO_GOOGLE_WRITE ve başta biri | call | kaldırır |
github.read | GitHub'da repo'ları, issue'ları, pull request'leri ve kodu okumak. | GITHUB_ACCESS_TOKEN | none | korur |
github.write | GitHub'da oluşturmak ve düzenlemek; hiçbir zaman repo silmemek. github.read'i de kapsar. | IVRALO_GITHUB_WRITE ve başta biri | call | kaldırır |
code.read | Çalışma alanı olan repo'nun kodunu okumak: dosyalar, bir taslak, bir arama. | çalışma alanının kökünde .git | none | korur |
code.edit | Bir dosyayı birebir değiştirme yoluyla düzenlemek; çalışma alanının içinde, önce okunmuş olarak, her düzenleme gösterilip onaylanarak. code.read'i de kapsar. | çalışma alanının kökünde .git | call | kaldırır |
git.commit | HEAD'den branch açmak, stage etmek, commit atmak, revert etmek, bir dosyayı geri yüklemek; her çağrı gösterilip onaylanarak. Hiçbir zaman push değil. code.read'i de kapsar. | çalışma alanının kökünde .git | call | kaldırır |
git.push | ivralo'nun açtığı bir branch'i push etmek ve onun için taslak bir pull request açmak. Hiçbir zaman varsayılan branch'i ya da remote'ta zaten olan bir branch'i push etmez, force push yapmaz, merge etmez. code.read'i de kapsar. | çalışma alanının kökünde .git ve ana dizindeki gitconfig'de ivralo'nun kendi kimliği | always | kaldırır |
incident.read | Bir kanıt paketini ve repo'nun geçmişini okuyup ivralo'nun kendi özetine çevirmek. İzin verilmedikçe barındırılan bir modelde reddedilir. | - | none | korur |
incident.report | Incident raporunu, kanıta göre kontrol edilmiş olarak .ivralo/incidents/ altına yazmak. | - | none | korur |
ivralo doctor bu tabloyu, her uzmanın yapılandırmanıza göre sahip olduğu yetkileri ve ana ajanın nelere sahip olduğunu yazdırır.
Temel küme
Her uzman sekiz yetkiyi tanımlamaya gerek kalmadan alır:
| Yetki | Neden temel kümede |
|---|---|
python.run | Her uzman işini Python çalıştırarak yapar. |
filesystem.read, filesystem.write | İş çalışma alanında yapılır. |
user.ask | Her uzmanın size bir şey sorması gerekebilir. |
team.ask | Her uzman bir ekip arkadaşına soru sorabilir. |
team.run | Her ajan bir işi temiz bir bağlamda bir uzmana devredebilir; uzman kendi yetkileriyle çalışır ve rapor verir. |
database.read, photos.fetch | Python worker'ı ikisini de ivralo'dan ister; bu yüzden Python çalıştıran her uzman bunlara ulaşabilir. Gizlemek yerine açıkça listelenirler. |
Bir preset temel kümedeki bazı yetkilerden vazgeçebilir. Incident Investigator Python'dan, yazmadan, ekip arkadaşına soru sormaktan, veritabanlarından ve fotoğraflardan vazgeçer; böylece kanıtın içine gizlenmiş bir talimatın kullanabileceği hiçbir aracı olmaz.
Strict profili
IVRALO_PROFILE=strict ya da bir komuttaki --profile strict, çalışma alanının dışına uzanan ya da repo'nuzu değiştiren her şeyi kaldırır: shell.full, network.web, mail.send, message.send, google.write, github.write, code.edit, git.commit ve git.push. MCP sunucuları da bağlanmaz. code.read kalır; yani strict bir ekip kodu yine okuyabilir.
Profil, kapsanan yetkiler eklendikten sonra ad ad uygulanır; bu yüzden google.write kaldırılınca onun kapsadığı google.read yerinde kalır. Profil yalnızca kısıtlar. Yapacak işi kalmayan bir uzman ekipten çıkar; strict altında Courier'nin çıkması gibi.
database.read ve photos.fetch temel kümenin parçası olduğu için şimdilik kaldırılamaz.
Başında kimse olmayan run'lar ve sunucu modu
Başında kimsenin olmadığı bir run'a, örneğin bir pipe'a, bir zamanlamaya, bir job'a ya da bu şekilde gönderilmiş bir API isteğine, onay isteyecek hiçbir yetki verilmez. İstisnaları mod belirler:
IVRALO_MODE | Başında kimse yokken verilenler |
|---|---|
developer (varsayılan) | Onay isteyen hiçbir şey. |
server | git.commit ve git.push: branch açmak, stage edip commit atmak, ivralo'nun açtığı branch'i push etmek, taslak bir pull request açmak. Hiçbir şey merge edilmez. |
permissions.json içindeki allow_tools de, adı yazılan düzenleme ve git araçlarını bu tür run'lar için açar. Ayrıntılar Sunucu modu sayfasında.
Preset'ler
Preset, bir uzmanın kurulduğu tanımdır: bir anahtar, görünen bir ad, temel kümenin dışında sahip olduğu yetkiler, ne işe yaradığını anlatan tek bir cümle ve bir araç çağrısı sınırı. Kendine ait bir prompt'u yoktur. Her uzman skill rafının tamamıyla kurulur; kendi sahip olduğu skill'ler en önde gelir ve /skill <name> bir isteği bu sahibe gönderir.
| Anahtar | Ad | Temel kümenin dışında | Sahip olduğu skill'ler | Araç çağrısı |
|---|---|---|---|---|
analyst | Data Analyst | - | analysis, xlsx | 20 |
spreadsheet | Spreadsheet Builder | - | xlsx, analysis | 20 |
visualizer | Chart Designer | - | charts, analysis | 20 |
reporter | Report Writer | shell.full | pdf-generate, charts, unicode, photos | 20 |
scribe | Document and Deck Writer | shell.full | docx, pptx, unicode, photos | 20 |
librarian | Librarian | index.search, network.web | documents, web-research | 20 |
pdf_operator | PDF Operator | shell.full | pdf-manipulate, pdf-forms | 20 |
courier | Courier | mail.send, message.send | mail, notify | 20 |
secretary | Secretary | google.read, google.write | google | 20 |
github | GitHub Clerk | github.read, github.write, shell.full | github | 20 |
coder | Code Engineer | code.read, code.edit, shell.full, git.commit, git.push | coding | 200 |
investigator | Incident Investigator | code.read, incident.read, incident.report; python.run, filesystem.write, team.ask, database.read, photos.fetch'ten vazgeçer | incident | 40 |
20 araç çağrısı IVRALO_TOOL_CALL_LIMIT'in varsayılanıdır; tek bir uzmanın sınırını IVRALO_TOOL_CALL_LIMIT_<KEY>, modelini IVRALO_MODEL_<KEY> belirler. Code Engineer'ın Python kodu dosya yazamaz: değişiklikleri, her değişikliği gösterip onay isteyen düzenleme araçlarından geçer.
Koşullu yetkiler tanımlayan bir uzman, bunlardan en az biri geçerli olduğu sürece ekipte kalır; shell.full gibi koşulsuz bir yetki onu ekipte tutmaya yetmez. Bu yüzden dizin ve web ikisi de kapalıysa Librarian, e-posta altyapısı ya da sohbet kanalı yoksa Courier, Google hizmeti yoksa Secretary, token yoksa GitHub Clerk, git repo'sunun dışındaysanız Code Engineer ekipten çıkar.
Ana ajan
Konuştuğunuz ajan ana ajandır. Bir uzman gibi kurulur: main preset'inden, aynı araç setleri, onaylar ve sınırlarla. İşin çoğunu kendisi yapar: dosyaları ve kodu okur, yalnızca okuyan Python çalıştırır, kodu onay isteyen düzenleme araçlarıyla değiştirir ve projenin kontrollerini çalıştırır. Temiz bir bağlam ya da daha dar bir yetki gerektiğinde işi bir uzmana devreder.
Yetkileri miras alınmaz, tek tek tanımlanır. Preset'lerin tanımladığı bütün yetkilerin birleşimine ve temel kümeye sahip olabilir; şunlar hariç:
- hesaplarınızdan birini okuyan bütün yetkiler:
google.read,google.write,github.read,github.writevedatabase.read. Bunlar sizin onayladığınız uzmanda kalır; team.ask, çünkü ana ajan soru sormak yerine işi devreder;incident.readveincident.report, çünkü incident raporunu yalnızca Investigator yazar.
Geriye şunlar kalır: python.run, filesystem.read, filesystem.write, user.ask, team.run, photos.fetch, shell.full, index.search, network.web, mail.send, message.send, code.read, code.edit, git.commit ve git.push. Her biri yine kendi koşuluna, profile ve onay kuralına tabidir.
| Ayar | Ana ajandaki değeri |
|---|---|
| Model | IVRALO_COORDINATOR_MODEL, yoksa ana model |
| Run başına araç çağrısı | 200 ya da IVRALO_TOOL_CALL_LIMIT_COORDINATOR |
| Python | Code Engineer'daki gibi salt okunur |
| Skill'ler | Rafın tamamı, hiçbirinin sahibi değil |
IVRALO_MAIN_GRANTS bu kümeyi daraltır: virgül ya da boşlukla ayrılmış yetki adları ya da none. Tanımlı kümenin dışındaki ya da var olmayan bir ad kümeyi hiçbir zaman genişletmez; hangi adların yok sayıldığını ivralo doctor söyler. Küme ne kadar daraltılırsa daraltılsın ana ajan team.run'ı korur; böylece işi her zaman bir uzmana devredebilir.
# Ana ajan yalnızca okur; yazmayı uzmanlar yapar.
IVRALO_MAIN_GRANTS="filesystem.read code.read python.run"
ivralo incident ve POST /incident, iş devretmekten başka hiçbir yetkisi olmayan bir ana ajan kurar; böylece incelemeyi Investigator yapar.