npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mmerterden/multi-agent-toolkit-mcp

v3.26.0

Published

MCP server for iOS Simulator, Android Emulator and headless web control. 208 tools: device automation (tap/swipe/type, one-call tap bursts), element locators, pre-tap target checks that heal a moved element or name what covers it, hit tests, near-miss sug

Readme

@mmerterden/multi-agent-toolkit-mcp

npm version npm downloads GitHub stars License: MIT

🇬🇧 English: README.md

iOS Simulator, Android Emulator ve headless web kontrolü için 208 araç. AI kodlama asistanının mobil uygulamalarını görmesini, onlarla etkileşime girmesini ve denetlemesini sağlayan bir MCP sunucusu - ayrıca tarayıcıları sürer, 18-kurallık bir App Store uyumluluk denetimi çalıştırır ve çok-adımlı batch akışlarını orkestre eder.

Public npm registry üzerinden dağıtılır - npx @mmerterden/multi-agent-toolkit-mcp, auth'suz, token'sız, ~/.npmrc ayarı gerekmeden çözülür.

Claude Code, Copilot CLI ve Codex CLI üzerinde doğrulanmıştır - release kapılarının fiilen çalıştırdığı üç host. Standart bir stdio MCP sunucusu olduğu için Cursor, Antigravity, VS Code Copilot Chat, Claude Desktop ve diğer herhangi bir MCP client'ında da çalışır; bunlar için config parçacıkları aşağıda, ama burada hiçbir şey onları kontrol etmiyor.

Doğrulanmış liste, bir release kapısının başlatıp sorguladığı host'lardan oluşur: hiçbir kapının çalıştırmadığı bir host desteklenen olarak iddia edilmez, çünkü bir client'ın tolere ettiği bir şema başka bir client'ın tüm tools/list'i reddetmesine yol açabilir.

22 kategori:

  • Device Control (60 araç) - screenshot, tap, swipe, type, navigate, dark mode, locale, orientation, location, permissions, push notifications, gerçek start/stop ekran kaydı
  • End-to-end Testing (9 araç) - iOS ve Android'de element tabanlı tap ve yazma (ios_tap_element, ios_type_element, android_tap_element, android_type_element) ve iOS, Android ve web için ui_locate: identifier, role, label, text ya da value ile yazılan bir locator tam bir elemente çözülür ya da adaylarla birlikte LOCATOR_NOT_FOUND / LOCATOR_AMBIGUOUS döner. ui_locator_codegen bir UI ağacı düğümünü identifier'ı üzerinden XCUITest ya da Compose / Espresso locator koduna çevirir; asla indeks ya da label kullanmaz, identifier yoksa NO_HANDLE ile eklenecek handle'ı söyler. agent_run_steps deterministik expect_text / expect_element / expect_url adımları, eksik simülatör ya da kimlik bilgisini asla ürün hatası saymayan passed / failed / blocked verdict'i, diske yazılan hata izi, sapmada kontrolü geri veren kaydet ve tekrar oynat ve değeri her yerde maskeleyen secret_ref yazımı ekler; ekran okumaları önceki bir snapshot'tan bu yana yalnızca değişeni dönebilir
  • Test Results and Coverage (2 araç) - test_results_classify JUnit XML, xcresult test JSON'u ya da Playwright JSON raporunu okur; her testi taban koşumu, teyit koşumu ve proje flake defterine göre passed, regression, preexisting, unstable ya da not_measured olarak sınıflar. Aynı hata imzası tekrar ederse devre kesici sınıflamayı durdurur. coverage_gap ekran ve akış envanterini test kaynaklarının andığı tanımlayıcılarla (testID, accessibilityIdentifier, testTag, route) isimle değil kimlikle eşler; sonuç covered / uncovered / unmatched, her biri exact ya da inferred işaretli
  • Memory (2 araç) - ios_leaks, bir simülatör ya da host süreci üzerinde /usr/bin/leaks çalıştırır; anlık görüntü alır ya da kayıtlı bir memory graph ile karşılaştırır. android_meminfo, dumpsys meminfo okur, aynı şekilde anlık görüntü ya da fark. İkisi de bakamadıklarında temiz bir sonuç değil measurable:false döner
  • Crash Diagnostics (2 araç) - ios_list_crashes host'un DiagnosticReports dizinini okur, android_list_crashes adb crash buffer'ını döker, ikisi de tail-sınırlı
  • Accessibility Audit (3 araç) - ios_accessibility_audit / android_accessibility_audit canlı ağacı okur: eksik label, ekran okuyucunun adlandıramadığı kontrol, küçük tap target, eksik identifier ve görsel düzeni izlemeyen okuma sırası. ios_accessibility_audit_deep ise ağacın gösteremeyeceği şeyler için Apple'ın kendi XCUIAccessibilityAudit'ini XCUITest'iniz üzerinden çalıştırır: kontrast, Dynamic Type, kırpılmış metin. Üçü de bakamadıklarında temiz bir sonuç değil, gerekçesiyle measurable:false döner
  • Store Compliance (5 araç) - App Store / Play Store hazırlığı; 18-kurallık derin ios_app_store_audit, Apple ITMS hata kodları + App Store Review Guidelines'a çapraz referans verir (privacy manifest, required-reason API, Info.plist, code signing, entitlements, gömülü SDK, IPv6, debug-tool sızıntısı, ...)
  • Web Automation (38 araç) - Playwright-destekli, izole paralel oturumlarla (web_session_open / web_session_list / web_session_close) ve kullanıcının kendi Chrome'unda (CDP ile bağlanarak ya da kalıcı profille) çalışan, kalıcı sonuç doğuran aksiyonları önce onaya sunan oturumlarla: goto, click, type, tuş basma, seçenek seçme, JS eval, bir noktada fare aksiyonu (web_mouse), selector bekleme, metin çıkarma, screenshot; ayrıca diğer araçların CSS selector yerine kabul ettiği ref tutamaklarını üreten erişilebilirlik snapshot'ı, son navigasyondan beri toplanan console ve network kayıtları, sekme ve storage durumu, okunabilir makale çıkarımı, sitemap'i de okuyan site haritası, path kapsamı ve llms.txt çıktısı olan sınırlı bir crawl, format seçilebilen, selector'dan yapılandırılmış veri çıkaran, paylaşılan cache'li ve değişiklik takipli tek atımlık web_scrape, ayrıca istek mock'lama, offline mod, saat kontrolü, dialog, dosya yükleme, sürükle-bırak, trace, locator üretimi ve ARIA snapshot doğrulaması için test araçları. Çekilen metin güvenilmez olarak çitlenir ve prompt-injection kalıpları için işaretlenir (çözülmüş Unicode tag karakterleri ve Latin'i Kiril ya da Yunan harfleriyle karıştıran kelimeler dahil); okuyucudan gizlenmiş metin çıkarılan içeriğe girmez, ayrıca raporlanır. Chromium / WebKit / Firefox motorları. playwright peer dependency'si gerektirir.
  • Design Audit (7 araç) - mock-mode vs Figma uygunluğu: scenario envanteri, mock tespiti, mock launch, canlı UI geometrisi, component varyant çözümleme, piksel/geometri/tipografi karşılaştırması, ve coverage kapısı ile modül özetiyle birlikte HTML/PDF rapor
  • Code Intelligence (8 araç) - Swift ve Kotlin kaynağı hakkında derleyici seviyesinde cevaplar, her platformun zaten getirdiği dil sunucusu üzerinden: tanım, referanslar, hover, dosya ve proje geneli semboller, tam build olmadan tanılamalar, ve bu makinenin soruyu cevaplayıp cevaplayamayacağını söyleyen code_index_status. Çapraz dosya cevapları arka plan index'ine bağlı olduğu için, "kullanılmıyor" diye okunan boş bir liste yerine index'in oturup oturmadığını raporlar
  • Wallet Passes (4 araç) - Apple Wallet pass'i üret, imzala, doğrula ve incele. Beş stilin hepsi, çevrimdışı ve deterministik; düz metin parola bilerek kabul edilen bir girdi değil: çağıran taraf bir ortam değişkeninin adını ya da bir keychain kaydını verir. Doğrulayıcı bulguları sonucuna göre derecelendirir, çünkü asıl önemli hatalar sessiz olanlar - tanınmayan tek bir PKPassengerCapability değeri hiçbir uyarı üretmez ve gelişmiş pass'i sessizce eski düzene düşürür
  • Context Index (4 araç) - büyük bir sonuç yalnızca dosyaya yazılmaz, parçalanıp SQLite FTS5'e indekslenir; context_search bm25() ile sıralar ve hangi parçanın neyle ilgili olduğunu yaklaşık 50-100 token'da söyler. context_get tek bir parçayı id ile açar, dosya yolu ise her şey için orada durur. Grep hangi satırların bir dizgiyi içerdiğini söyler; sıralama hangi parçanın o konuyla ilgili olduğunu. Bağımlılık yok: node:sqlite Node ile geliyor. context_render uzun metni bir görsel model için yoğun monospace sayfalara dizer ve ölçülen token dengesini raporlar
  • Research (2 araç) - sağlayıcı destekli arama (Brave, Perplexity, arXiv), {title, url, snippet} şemasına normalize edilmiş, istenirse ilk sonuçları okuyup index'e yazar; ve Perplexity Sonar üzerinden quick / pro / reasoning / deep modlu, tarih, alan adı ve akademik filtreli, takip sorusu thread'li atıflı cevap. Sonuçlar cache'lenir, 429/5xx'te yeniden denenir ve güvenilmez olarak çitlenir. Anahtarlar çağrı anında ortamdan okunup doğrudan bir başlığa gider; düz metin anahtar kabul edilen bir argüman değil - Wallet imzalayıcısının kullandığı sözleşmenin aynısı
  • Free Models (2 araç) - llm_delegate basit bir metin işini (özet, JSON Schema ile çıkarım, etiketlere sınıflandırma, çeviri, taslak) ücretsiz katmandaki bir modele verir; Claude token'ları karara, koda ve review'a kalır. Sağlayıcılar sırayla denenir (Groq, Mistral, Gemini, OpenRouter ücretsiz modelleri, Z.AI GLM Flash, yerel Ollama), her hata sınıfının kendi bekleme süresi var. Her cevap dönmeden önce doğrulanır: kesik ya da ret değil, şema ve etiket kontrolü, cevaptaki her tanımlayıcı, sayı, dosya adı ve kod parçası kaynakta geçmeli. Hiçbiri geçmezse sonuç sağlayıcı başına bir gerekçeyle ESCALATE_TO_CLAUDE olur, asla daha zayıf bir cevap değil. Girdideki anahtar biçimli dizgiler temizlenir; varsayılan olarak metni yalnız prompt'larla eğitim yapmayan sağlayıcılar görür. llm_providers neyin yapılandırıldığını gösterir. Bkz. Ücretsiz modeller
  • Media (1 araç) - media_frames, bir kaydın anahtar karelerini ffmpeg ile çıkarır ve birbirine benzeyenleri eler; böylece ios_record_video'nun ürettiği video bir modelin gerçekten bakabileceği bir şeye dönüşür
  • Autonomous Agent DSL (2 araç) - agent_run_steps, tek bir MCP round trip'inde {tool, args, continue_on_error?, wait_ms?} adımlarından oluşan bir batch dizisini çalıştırır. Scriptlenmiş login akışları, form doldurma, çok-adımlı QA yolları için ideal. agent_query_output, satır içi dönemeyecek kadar büyük olan önceki bir çağrının tam çıktısını arar; böylece bir takip sorusu pahalı aracı yeniden koşturmak anlamına gelmez.
  • Security (2 araç) - çevrimdışı, egress yok: security_cvss_score bir CVSS 3.1 temel vektörünü FIRST aritmetiğiyle skora ve banda çevirir, böylece bir bulgunun sayısı vektöründen sapamaz; security_dep_inventory bir lockfile'ı (npm, yarn, pnpm, CocoaPods, pip, Go, Cargo, RubyGems) {ecosystem, name, version} listesine normalize eder, ayrı bir CVE aramasının tüketmesi için. İkisi de bir registry'ye bağlanmaz
  • Related Repositories (6 araç) - bir ürünü oluşturan diğer repolara (diğer platformun uygulaması, web istemcisi, backend servisleri, ortak şema reposu) en güncel entegrasyon branch'inden salt-okunur erişim: remote'ta varsa develop, yoksa remote'un varsayılan branch'i. Her remote working tree'si olmayan bare ve sığ bir klon olarak cache'lenir, her cevap okunduğu commit'i taşır ve ulaşılamayan bir remote hata vermek ya da güncelmiş gibi görünmek yerine son fetch'inden stale: true ile sunulur. repo_find_keys bir join anahtarı kümesini (Figma node id, localization key, endpoint path, analytics event) birden fazla repoda aynı anda arar ve her birini implemented ya da not_found_at_sha olarak işaretler. Token'lar credential store'dan mantıksal anahtarla alınır ve git'e argv ile değil ortamı üzerinden ulaşır. GitHub ve Bitbucket Data Center ikisi de çalışır
  • Documents (3 araç) - document_pdf_inspect uygulamanın ürettiği bir PDF'i denetler (sayfalar, sayfa başına metin katmanı, yerine geçen karakterler, beklenen dizgiler; opsiyonel pdfjs-dist peer), ayrıca MRZ ve belge tarama özellikleri için sentetik pasaport (TD3), oturma izni (TD1) ve vize (MRV-A / MRV-B) test fixture'ları: document_mrz_build her check digit ile ICAO 9303 zone satırlarını döner, document_generate ayrıca simülatör fotoğraf arşivine konabilecek bir PNG yazar (beyaz tuval, OCR-B zone, düz veri bloğu, sabit "TEST SPECIMEN - NOT A TRAVEL DOCUMENT" etiketi). Saf JS, çevrimdışı, deterministik
  • Voice (6 araç) - Unix soketi üzerinden yerel bir ses host'unun ince istemcisi (protokol): voice_status, voice_speak, voice_ask (sesli soru, metne dökülmüş cevap), voice_stop, host'un adlandırılmış aksiyonları için voice_action ve Claude Code'un --permission-prompt-tool sorusunu sesle cevaplayan, host'a sorulamadığı her durumda reddeden voice_permission. Protokolü uygulayan her host çalışır; soket, mevcut kullanıcıya ait değilse ya da grup/herkes tarafından yazılabiliyorsa reddedilir
  • Store APIs (30 araç) - App Store Connect ve Google Play Console tek ailede. Uygulamalar, sürümler, build'ler ve sıradaki boş build numarası, kullanıcı yorumları ve yanıtları, mağaza metinleri, abonelikler ve ülke bazında fiyatları, uygulama içi ürünler, TestFlight grupları, satış raporları, Play kanalları, Android vitals (crash ve ANR oranı), satın alma token kontrolü, iadeler, iki mağazada abonelik fiyatlarının yan yana karşılaştırması ve "ödedim ama premium gelmedi" teşhisi için hazır araçlar. store_search / store_schema / store_call, Apple'ın ve Google'ın kendi API tanımlarından üretilen bir katalog üzerinden iki mağazanın geri kalan tüm operasyonlarına (yaklaşık 1440) ulaşır. store_play_validate_bundle, bir .aab'yi sonradan silinen ve hiç commit edilmeyen geçici bir edit içinde Google'a doğrulatır. Her yazma işlemi onaylanana kadar yalnızca önizleme döner ve gözetimsiz modda reddedilir. Anahtarlar Keychain'den ya da ortam değişkeninde adı verilen dosyalardan okunur, hiçbir zaman argüman olarak alınmaz
  • Virtual iPhone (10 araç) - senin kurduğun vphone-launchpad-cli üzerinden vphone sanal iPhone'larını sürer: host hazırlığı, makine listesi, var olan makineleri başlatma ve durdurma, ekran görüntüsü, tap, swipe, tuş, erişilebilirlik ağacı ve salt-okunur guest metotlarından oluşan bir izin listesi için vphone_rpc. Process öldüren, yeniden başlatan, kaldıran, silen ya da force isteyen metotlar reddedilir; makine oluşturma, bundle ve firmware kurulumu ve host ayarları erişilebilir değildir

Hızlı Başlangıç

Seçenek A - Kaynaktan kur (önerilen, auth gerekmez)

En basit yol. ~/.npmrc'yi henüz yapılandırmasan bile çalışır.

git clone [email protected]:mmerterden/multi-agent-toolkit-mcp.git
cd multi-agent-toolkit-mcp
npm install

# Opsiyonel: web araçları Playwright gerektirir
npm i -g playwright && npx playwright install chromium

# 'multi-agent-toolkit-mcp' olarak global kullanılabilir yap
npm link

Sonra klonun içinde git pull && npm install ile güncelle. İlgili tag'i checkout ederek belirli bir versiyona pinle (git tag -l ile listele).

Seçenek B - npx (kurulum gerekmez - public registry)

npx @mmerterden/multi-agent-toolkit-mcp

Kurulum (Seçenek A veya B'den sonra)

Claude Code / Claude Desktop

{
  "mcpServers": {
    "multi-agent-toolkit": {
      "command": "npx",
      "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
    }
  }
}

Cursor

.cursor/mcp.json'a ekle:

{
  "mcpServers": {
    "multi-agent-toolkit": {
      "command": "npx",
      "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
    }
  }
}

Antigravity

.agent/mcp_config.json'a (ya da global ~/.gemini/antigravity/mcp_config.json'a) ekle:

{
  "mcpServers": {
    "multi-agent-toolkit": {
      "command": "npx",
      "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
    }
  }
}

Copilot CLI

~/.copilot/settings.json'a ekle:

{
  "mcpServers": {
    "multi-agent-toolkit": {
      "command": "npx",
      "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
    }
  }
}

Codex CLI

Kendi config'ini Codex'in yazmasına izin ver - ~/.codex/config.toml'u o sahiplenir (marketplace ve plugin durumu da orada yaşar), ve komut idempotent'tir:

codex mcp add multi-agent-toolkit -- npx -y @mmerterden/multi-agent-toolkit-mcp
codex mcp list                 # doğrula
codex doctor --json            # checks["mcp.config"] "ok" okumalı

Referans olarak, bu şunu üretir:

[mcp_servers.multi-agent-toolkit]
command = "npx"
args = ["-y", "@mmerterden/multi-agent-toolkit-mcp"]

Multi-agent pipeline'ın install --codex'i codex mcp add adımını senin için çalıştırır.

Ücretsiz modeller (llm_delegate)

llm_delegate rutin metin işini Claude'dan alır: build log özeti, bir dokümandaki ticket alanları, commit türü etiketi, çeviri taslağı. Kod, plan, review ya da güvenlik kararı için değildir; multi-agent pipeline onu yalnız model yönlendirmesi açıkken (/multi-agent:route-on --free) bu basit işler için çağırır.

Anahtarlar. Her sağlayıcı kendi değişkenini, sonra credential store'da llm-<id> anahtarını okur (~/.claude/lib/credential-store.sh); boş env ile başlatılan bir sunucu da bulur. Anahtar asla argüman değildir, okunduğu anda maskeleme defterine eklenir ve yalnız kendi sağlayıcısının hostuna gider.

| Sağlayıcı | Değişken | Varsayılan model | Ücretsiz katman veri kullanımı | Anahtar | |---|---|---|---|---| | groq | GROQ_API_KEY | openai/gpt-oss-120b | eğitimde kullanılmaz | console.groq.com | | mistral | MISTRAL_API_KEY | mistral-small-latest | eğitimde kullanılabilir | console.mistral.ai | | gemini | GEMINI_API_KEY / GOOGLE_API_KEY | gemini-2.5-flash | eğitimde kullanılabilir | aistudio.google.com | | openrouter | OPENROUTER_API_KEY | openrouter/free (yalnız :free modeller kabul edilir) | upstream'e bağlı | openrouter.ai | | zai | ZAI_API_KEY / ZHIPU_API_KEY | glm-4.5-flash (yalnız -flash modeller) | belirtilmemiş | z.ai | | ollama | yok, OLLAMA_MODEL ayarla | yerel modelin | makinede kalır | ollama.com |

LLM_MODEL_<ID> modeli, LLM_PROVIDER_ORDER sırayı değiştirir. Veri kullanımı sütunu sağlayıcıların yayımladığı koşullardan okunmuştur ve değişebilir; güvenmeden önce kontrol et.

Veri politikası. Varsayılanda (LLM_DATA_POLICY=no-training) metni yalnız Groq ve yerel Ollama alır. allow_training: true ya da LLM_DATA_POLICY=any diğerlerini ekler; bunu yalnız bir eğitim setinde görmekten rahatsız olmayacağın metin için yap. Anahtar biçimli dizgiler (private key, AWS, GitHub, GitLab, OpenAI tarzı, Groq, Google, Slack, npm token'ları, JWT) iki modda da makineden çıkmadan değiştirilir.

Doğrulama. Ücretsiz modelin yazdığı hiçbir şey geçmeden dönmez; hiçbir model bir diğerini kontrol etmediği için başarısızlık token harcamaz:

  • boş değil, token sınırında kesilmemiş, ret değil, INSUFFICIENT değil (modelin "kaynakta cevap yok" deme yolu);
  • cevaptaki her kod parçası, üç ve daha fazla haneli sayı, dosya adı, yol, hash, URL ve e-posta kaynakta geçer;
  • schema ile extract: cevap JSON olarak çözülür, şemayı sağlar ve çıkarılan her değer kaynakta geçer;
  • classify: cevap tam olarak labels'tan biridir;
  • translate: placeholder'lar ({name}, %d, %@, ${x}, backtick içindeki kod) korunur, uzunluk 0.4x-2.5x içinde kalır;
  • summarize: uzun bir kaynaktan kısadır;
  • kaynakta olmayan bir prompt-injection kalıbı yoktur.

Hatalar ve kota. Bir hata, sonraki sağlayıcıdan önce sınıflandırılır. 401/403 sağlayıcıyı 6 saat, 402 bir gün, 429 sağlayıcının söylediği kadar (Retry-After, x-ratelimit-reset-*, "try again in", "resets in") ya da bir dakika, 400/404/422 bir saat, timeout ya da 5xx 30 saniye dinlendirir; tekrarlar bekleme süresini bir tavana kadar ikiye katlar. Art arda üç doğrulama hatası sağlayıcıyı on dakika dinlendirir. 413 bekleme olmadan sıradakine geçer. Her sağlayıcının tek çağrı için bir girdi tavanı da var (Groq 20.000 karakter, çünkü ücretsiz katmanı dakikada yalnız birkaç bin token kabul ediyor; Mistral ve Z.AI 300.000; Gemini 400.000; OpenRouter 100.000; Ollama 32.000); daha uzun bir kaynak o sağlayıcıyı çağrı yapmadan atlar. Bir iş için en fazla dört sağlayıcı çağrılır. Durum index'in yanında llm-quota.json (0600) dosyasında tutulur, makinedeki her sunucu paylaşır. Her iş llm-usage.jsonl'a bir satır ekler; pipeline'ın route-status komutu bunu tasarruf raporuna çevirir.

MCP dışında. multi-agent-toolkit-llm delegate --task summarize --prompt "..." --path build.log aynı sonucu JSON olarak basar; doğrulanmış cevapta 0, ESCALATE_TO_CLAUDE'da 3 ile çıkar. Diğer komutlar providers, probe (yapılandırılmış her sağlayıcıya tek küçük istek) ve usage --days 7.

Yaklaşım. Yönlendirme fikirleri OmniRoute'ta (MIT) incelendi ve burada yeniden yazıldı; ondan hiçbir şey kurulmaz, hiçbir istek onun üzerinden geçmez.

| Fikir | Burada | Fark | |---|---|---| | Yeniden denemeden önce hatayı sınıflandır; auth ve hatalı istek körlemesine tekrarlanmaz | tools/llm/quota.js classifyStatus | Her sınıfın kendi bekleme süresi ve artışı var | | Bekleme süresini sağlayıcının kendi reset başlıklarından ve ifadelerinden al | parseCooldownMs | Groq'un 2m59.5s sürelerini de çözer | | Sağlayıcılar arası sınırlı deneme | tools/llm/chain.js | Dinlenen, anahtarsız ve politika dışı sağlayıcıları çağrı yapmadan atlar | | Hard-stop bayraklı ücretsiz katman kataloğu | tools/llm/providers.js | Ücretsiz katman veri kullanımını ve prompt'ları eğitim yapan sağlayıcılardan uzak tutan politikayı ekler | | - | tools/llm/verify.js | Her cevap kaynağa karşı kontrol edilir, tutmazsa atılır; iş çağırana döner |

Sorun Giderme

npx @mmerterden/multi-agent-toolkit-mcp 401/404 veriyor, ya da eski bir versiyonu çözüyor

Bu paket public npm registry'de - token gerekmez. Hâlâ başarısız oluyorsa, en olası sebep bu paketin GitHub Packages'tan taşınmadan önceki bir kalıntı scope override'ı: ~/.npmrc'de @mmerterden:registry=https://npm.pkg.github.com gibi bir satır olup olmadığına bak. O satır her @mmerterden-scope'lu install/publish'i (bu paket dahil) GitHub Packages'a yönlendirir, ki o da public görünümlü bir paket adı için bile auth'suz bir okumaya 401 döner. O satırı kaldır (ya da gerçekten GitHub Packages'a ihtiyacı olan @mmerterden paketine scope'la) ve tekrar dene.

VS Code Copilot Chat

.vscode/mcp.json'a ekle:

{
  "servers": {
    "multi-agent-toolkit": {
      "command": "npx",
      "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
    }
  }
}

Gereksinimler

  • Node.js 22.13+ (context araçları node:sqlite kullanır, 22.13'ten itibaren bayraksız; daha eski bir Node'da sunucunun geri kalanı yine açılır ve context_* bu gerekçeyle cevap verir)
  • iOS araçları: macOS + Xcode (xcrun simctl'i sağlar)
  • Android araçları: Android SDK Platform-Tools (adb'yi sağlar)
  • Virtual iPhone araçları (opsiyonel): Apple Silicon, macOS 15+, vphone-launchpad 2.x ve gerektirdiği host değişiklikleri - bkz. Virtual iPhone (vphone)
  • Web araçları (opsiyonel): playwright - bir kere kur:
    npm i -g playwright && npx playwright install chromium
    (ya da webkit / firefox - motoru her web_goto çağrısında seç.)

Xcode kurulu değilse, iOS araçları crash etmek yerine anlaşılır bir mesaj döner. Android ve Web araçları için de aynı - elindekini kullan.

Virtual iPhone (vphone)

vphone_* araçları vphone-cli (MIT) ile oluşturulmuş sanal iPhone'ları sürer. Bu araçlar onun vphone-launchpad-cli komutunun istemcisidir; o projeden hiçbir şey burada paketlenmez, toolkit yalnızca senin kurduğun CLI'ı çalıştırır.

Ön koşullar (upstream kurulum rehberinden):

  • macOS 15 veya üstü çalışan, kendisi sanal makine olmayan bir Apple Silicon Mac.
  • Releases sayfasından indirilip /Applications altına taşınmış, 2.x serisinde 2.1.0 veya üstü vphone-launchpad ve PATH üzerinde CLI'ı:
    mkdir -p ~/.local/bin
    ln -sf /Applications/vphone-launchpad.app/Contents/MacOS/vphone-launchpad-cli ~/.local/bin/
    CLI PATH üzerinde değilse /Applications/vphone-launchpad.app içindeki kopya kullanılır. Sürüm uygulamanın Info.plist dosyasından okunur.
  • Launchpad'in Host Setup adımı tamamlanmış olmalı: helper kurulu (yönetici şifresi), Developer Tools erişimi verilmiş, bir VPhone.bundle aktif ve Launchpad'de en az bir makine oluşturulmuş.
  • Host güvenlik değişiklikleri. vphone'un VM binary'si Apple'a özel sanallaştırma entitlement'ları taşır, bu yüzden macOS'un onu kabul etmesi gerekir. Upstream iki yapılandırma tarif eder; ikisi de Mac'in sahibi tarafından macOS Recovery'de yapılır ve ikisi de csrutil allow-research-guests enable ister: ya SIP kapalı ve amfi_get_out_of_my_way=1 boot argümanı, ya da SIP --without debug ile açık artı imzalı build için bir AMFI izin listesi. İkisi de Mac'in korumasını düşürür. Karar vermeden önce upstream host-setup.md dosyasını oku.

Toolkit'in asla yapmadıkları. SIP, boot argümanları, nvram, AMFI ya da başka bir host ayarını asla değiştirmez; makine oluşturamaz, bundle kuramaz ya da kabul edemez, custom firmware kuramaz, exec çalıştıramaz: bu komutların hiçbirine bir araçtan ulaşılamaz. vphone_status hangi host kontrolünün eksik olduğunu söyler ve kararı sana bırakır. vphone_rpc yalnızca salt-okunur guest metotlarından, jestlerden ve uygulama açmadan oluşan bir izin listesini çalıştırır; force isteyen, process öldüren, yeniden başlatan, respring yapan, uygulama kaldıran, silen, dosya ya da ayar yazan, kod kuran, kimlik ya da güvenlik durumunu değiştiren veya keychain öğelerini okuyan bir metot, toolkit'in tanımadığı her metot gibi, CLI çalışmadan reddedilir. vphone_screenshot yalnızca sunucunun çalışma dizinine, ev dizinine ya da geçici dizine yazar.

Sunucunun erişimini kısıtlamak

Varsayılan olarak kapalı; ayarlanmadığında aşağıdakilerin hiçbiri davranışı değiştirmez.

  • MCP_TOOLKIT_URL_POLICY=strict - web araçları http(s) olmayan her URL'yi ve loopback (127.0.0.0/8, ::1, localhost), belirtilmemiş (0.0.0.0/8, ::), link-local (169.254.0.0/16, fe80::/10), özel ağ (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, CGNAT 100.64.0.0/10, IPv6 ULA fc00::/7, kullanımdan kaldırılmış IPv6 site-local fec0::/10), IETF protokol (192.0.0.0/24), benchmark (198.18.0.0/15), multicast ya da ayrılmış (224.0.0.0/4, 240.0.0.0/4, ff00::/8, yerel kullanım NAT64 64:ff9b:1::/48) ya da bulut metadata adresi (metadata.google.internal, fd00:ec2::254, 100.100.100.200) olan veya bunlara çözümlenen her host'u reddeder. İçinde IPv4 adresi taşıyan bir IPv6 adresi (IPv4-mapped, IPv4-compatible, IPv4-translated, NAT64 64:ff9b::/96, 6to4 2002::/16, Teredo 2001::/32) taşıdığı IPv4 adresine göre değerlendirilir. Çözümlenemeyen host reddedilir. Kontrol yalnızca web_goto'ya verilen URL'yi değil, tarayıcının yaptığı her isteği kapsar: tarayıcı bağlamındaki bir route reddedilen navigasyonları, alt kaynakları, fetch'leri, popup'ları ve WebSocket'leri keser; tarayıcı ayrıca yerel bir proxy'nin (yalnızca 127.0.0.1) arkasında başlatılır, bu proxy bir yönlendirme zincirinin her adımını kontrol eder ve kontrol ettiği adrese bağlanır; bağlantıyı MCP_TOOLKIT_PROXY_CONNECT_TIMEOUT_MS (varsayılan 15000) içinde kabul etmeyen bir upstream 504 ile yanıtlanır. Navigasyonun vardığı URL de kontrol edilir, web_crawl reddedilen bir adrese yönlenen sayfayı atlar ve indekslemez, okuma araçları (web_get_text, web_extract, web_snapshot, web_screenshot, web_eval ve diğerleri) adresi reddedilen bir sayfayı okumaz. Bu modda service worker'lar engellenir ve HTTP önbelleği kapalıdır, çünkü ikisi de route'u atlar. WebRTC, ne route'un ne de proxy'nin gördüğü doğrudan UDP'den uzak tutulur: Chromium --force-webrtc-ip-handling-policy=disable_non_proxied_udp ile, Firefox media.peerconnection.enabled=false ile başlatılır, WebKit sayfalarında RTCPeerConnection bulunmaz. Proxy'nin loopback hedeflerini kapsadığı Chromium üzerinde doğrulanmıştır. strict ya da off dışındaki her değer stderr'de uyarılır ve strict sayılır.
  • MCP_TOOLKIT_URL_ALLOW - strict politikaya virgülle ayrılmış istisnalar: host adları (birebir, büyük/küçük harf duyarsız eşleşir), IP adresleri ve CIDR'ler, ör. wiki.corp.example,10.20.0.0/16,127.0.0.1. Listelenen bir host, listelenen bir aralıktaki IP ya da reddedilen tüm cevapları listelenen bir aralığa düşen bir host geçirilir. http(s) dışı bir şemaya asla izin vermez, hatalı bir girdi stderr'de bildirilip yok sayılır ve strict olmadan etkisi yoktur.
  • MCP_TOOLKIT_INDEX_DENY - context_index'in indekslemeyi reddettiği, context_get / context_search'ün döndürmeyi reddettiği, virgülle ayrılmış yollar (~/ açılır, symlink'ler çözülür; macOS'ta karşılaştırma, varsayılan APFS birimi gibi büyük/küçük harfe bakmaz, yani ~/.SSH/id_rsa ile ~/.ssh/id_rsa aynıdır). strict altında varsayılan liste ~/.ssh, ~/.aws, ~/.gnupg, ~/Library/Keychains, ~/.netrc, ~/.git-credentials, ~/.config/gh, ~/.docker, ~/.kube, ~/.npmrc, ~/.config/gcloud, ~/.azure, ~/.pypirc, ~/.cargo/credentials, ~/.cargo/credentials.toml olur. Değişken ayarlandığında yolları bu varsayılanlara eklenir ve strict politikadan bağımsız uygulanır. ! ile başlayan bir değer ise varsayılanların yerine geçer (!~/work,~/notes yalnızca bu ikisini reddeder; tek başına ! hiçbir şeyi reddetmez ve sunucu bunu açılışta stderr'e yazar).
  • MULTI_AGENT_UNATTENDED=1 - operatörün koşuyu kimsenin izlemediğini bildirmesi; multi-agent pipeline'ın guard'ı da aynı değişkeni kullanır. Bu modda ios_xcodebuild, bir build ayarını ezen (CC=/tmp/x ya da SWIFT_EXEC=... gibi her AD=değer token'ı) veya -xcconfig / -toolchain geçen extra_args'ı reddeder, çünkü her biri xcodebuild'in çalıştırdığı ya da yüklediği bir derleyici, linker veya ayar dosyasını adlandırır. Bu modda mağazaya yazan çağrılar doğrudan reddedilir.
  • MCP_TOOLKIT_STORE_READ_ONLY=1 - mağazaya yazan her çağrı (store_asc_review_reply, store_asc_localization_update, store_play_review_reply, store_play_validate_bundle ve okuma olmayan bir operasyonda store_call) reddedilir; okuma operasyonlarındaki store_call dahil tüm okumalar çalışmaya devam eder.

~/.claude/logs/multi-agent-toolkit/ altına offload edilen sonuçlar yalnızca sahibine açık yazılır (dizin 0700, dosyalar 0600); context indeks dizini de her açılışta, daha geniş izinlerle önceden var olmuş olsa bile, 0700'e daraltılır. web_storage_state hiç offload edilmez: cookie'leri ve localStorage'ı satır içinde döner.

Agent DSL Örneği

Tek bir MCP çağrısında scriptlenmiş bir login akışı çalıştır:

{
  "tool": "agent_run_steps",
  "args": {
    "steps": [
      { "tool": "web_goto", "args": { "url": "https://example.com/login" } },
      { "tool": "web_type", "args": { "selector": "#email", "text": "[email protected]" } },
      { "tool": "web_type", "args": { "selector": "#password", "secret_ref": "demo_login_password" } },
      { "tool": "web_click", "args": { "selector": "button[type=submit]" } },
      { "tool": "expect_url", "args": { "contains": "/dashboard", "timeout_ms": 5000 } },
      { "tool": "expect_text", "args": { "platform": "web", "text": "Welcome back" } }
    ]
  }
}

Parola çağrıda, cevapta ya da izde hiç görünmez: secret_ref, sunucunun kendisinin çözdüğü mantıksal bir anahtarı adlandırır (bkz. Uçtan uca test).

Agent'ın hata durumunda kendini düzeltebilmesi için adım-başına durum döner.

Uçtan uca test

Host agent'ın sürdüğü e2e akışları için deterministik yapı taşları. Sunucu kendi agent döngüsünü çalıştırmaz ve model çağırmaz: locator, assertion ve verdict, cihazın ya da sayfanın bildirdiği veri üzerinde çalışan düz koddur.

Locator'lar. ios_tap_element, ios_type_element, android_tap_element, android_type_element ve ui_locate koordinat yerine bir locator nesnesi alır: id (accessibility identifier, paket önekli ya da öneksiz Android resource-id, web'de data-testid ya da id, tam eşleşme), role (button, textbox, text, image, switch, checkbox, cell, link ya da AXButton, android.widget.EditText gibi platform yazımı), label, text (label, text ya da value), value, exact (varsayılan true; false büyük/küçük harf duyarsız alt dize demek) ve index (bilerek N'inci eşleşmeyi seç). Birden fazla alan verilirse hepsi eşleşmelidir. Text ya da label sorgusu yalnızca en içteki eşleşmeyi tutar, çünkü cihaz ağacı bir çocuğun label'ını kapsayıcısında tekrarlar. Element araçları yalnızca tam bir eşleşme üzerinde işlem yapar: sıfır eşleşme LOCATOR_NOT_FOUND, birden fazlası LOCATOR_AMBIGUOUS olur ve locator'ı daraltmak için en fazla 10 aday (id, label, frame, merkez) döner. iOS ekranı idb ui describe-all ile okur (idb ui tap'in kullandığı point uzayı), Android uiautomator ile. ui_locate aynı soruyu iOS, Android ya da açık web sayfası için işlem yapmadan cevaplar ve eşleşmemeyi hata değil veri olarak bildirir.

Assertion adımları. agent_run_steps model gerektirmeyen üç adım kabul eder: expect_text (platform, text, varsayılanı true olan present, exact, ignore_case), expect_element (platform, locator, opsiyonel value / label) ve expect_url (web; equals, contains, matches alanlarından tam biri). Her biri yoklama için timeout_ms alır (varsayılan: tek kontrol). precondition: true işaretli bir adım testin dayandığı veriyi kontrol eder: tutmazsa koşu başarısız değil, SEED_DATA_MISSING ile bloklanmış sayılır. budget_ms tüm koşuyu sınırlar.

Verdict. Rapor verdict alanını (all_ok / partial / all_failed) korur ve test_verdict ekler: ilk başarısız adımın belirlediği passed, failed ya da blocked; yanında failure: {code, category, cause, step, message} ve başarısız her adımda bir code. Ürün hataları (failed): ASSERTION_FAILED, ACTION_FAILED. Bloklanmış, her biri bir cause ile: LOCATOR_NOT_FOUND, LOCATOR_AMBIGUOUS, REPLAY_DIVERGED (aksiyon adımında automation: locator ya da kayıt artık ekrana uymuyor, bu uygulama hakkında bir şey söylemez; elementi ekranda olmayan bir expect_element ise ASSERTION_FAILED olur), CREDENTIAL_MISSING (credentials), ENVIRONMENT_UNAVAILABLE (environment: boot edilmiş simülatör, cihaz, tarayıcı ya da sayfa yok), SEED_DATA_MISSING (seed_data), BUDGET_EXCEEDED (budget), INVALID_STEP (step). Bloklanmış bir koşu hiçbir zaman ürün hatası olarak raporlanmaz.

Hata izi. Geçmeyen bir koşu, sunucunun çalışma dizini altında ($TMPDIR/mobile-dev-mcp, 7 gün tutulur) yeni bir dizine trace.md ve trace.json yazar ve yolu trace alanında döner: maskelenmiş girdisi ve tam sonucuyla her adım, başarısız adım, son locator'ın çözdüğü element (ya da adayları), web koşusunda sayfanın son console ve network kayıtları ve hata anındaki ekranın metin hali (web'de accessibility snapshot, cihazda element listesi).

Sırlar. web_type, ios_type_text, android_type_text, ios_type_element ve android_type_element, text yerine secret_ref kabul eder. Anahtar ~/.claude/lib/credential-store.sh get <key> ile (ardından ~/.copilot/lib ve ~/.codex/lib kopyaları), CI'da ise MULTI_AGENT_TOOLKIT_SECRET_<KEY> ile çözülür (demo.password, MULTI_AGENT_TOOLKIT_SECRET_DEMO_PASSWORD okur). Store'a yalnızca anahtar verilir; değer stdout'tan gelir. Kimsenin onboard etmediği bir anahtar CREDENTIAL_MISSING ile düşer; 4 karakterden kısa bir değer reddedilir, çünkü sıradan metni bozmadan maskelenemez. Çözüldükten sonra değer her sonuçta, hatada, offload edilmiş dosyada, batch raporunda ve izde <secret:key> ile değiştirilir: yazıldığı gibi, URL-encoded, form-encoded ya da JSON-escaped, her harf büyüklüğünde. Pikseller maskelenemez; bu yüzden bir sır yazıldıktan sonra o hedefin screenshot'ları hedef sıfırlanana kadar PIXEL_TAINTED ile tutulur (web: sonraki web_goto ya da web_close; iOS: ios_launch_app, ios_terminate_app ya da ios_erase_device; Android: android_launch_app, android_stop_app ya da android_clear_app_data); allow_secret_pixels: true yine de yakalar. Sınırlar: idb ve adb shell input text metni komut satırı argümanı olarak alır, bu yüzden değer host'taki yerel süreçlere kısa süre görünür; ekran kayıtları ve design-check yakalamaları tutulmaz.

Kaydet ve tekrar oynat. agent_run_steps, save_as: "<ad>" ile geçen bir koşuyu kaydeder: yazıldığı haliyle adımlar (sırlar yalnızca secret_ref olarak; sır değeri taşıyan bir adım kaydedilmez) ve son ekranın parmak izi (fingerprint: web varsayılanı url+text, cihaz varsayılanı text, ayrıca url ya da none). replay: "<ad>" kayıtlı adımları host'un yeniden çıkarmasına gerek kalmadan tekrar çalıştırır, sonra parmak izini karşılaştırır. Başarısız bir adım ya da farklı bir son ekran tekrar oynatmayı REPLAY_DIVERGED ile blocked olarak bitirir; replay.diverged_at (adım numarası ya da final_state) ve replay.remaining_steps döner, böylece host oradan devralır; tekrar oynatma bir sapmanın ötesini asla tahmin etmez. String argümanlar {{unique}} (her koşuda bir yeni değer, ör. qa-{{unique}}@example.com) ve {{timestamp}} kullanabilir; parmak izi bu koşunun değerlerini yer tutuculara geri katlar, böylece yeni değerlerle yapılan tekrar oynatma yine eşleşir. Kayıtlar MULTI_AGENT_TOOLKIT_RECORDINGS_DIR altında, varsayılanı <cache>/multi-agent-toolkit-mcp/recordings (macOS'ta ~/Library/Caches, diğerlerinde $XDG_CACHE_HOME ya da ~/.cache).

Hedef kontrolleri. Bir ekran okumasıyla çözülen tap, bir an sonra başka bir şeye denk gelebilir. ui_target_check ekranı yeniden okur ve daha önce görülen bir eleman için cevap verir (önce id, sonra benzerliğe göre metin, sonra sınırlar): ok, shifted (max_shift_px içinde kaydı; 1080 genişlikte 200 px, ekrana göre ölçeklenir; düzeltilmiş point'e tap yap), occupied (merkezinde daha sonraki bir pencere ya da başka bir etkileşimli eleman üstte, occupant adını verir), disappeared (eşleşme yok ya da çok uzağa kaydı; yalnızca öneri olarak near_misses) ya da ambiguous. Çizim sırası belge sırasıdır; uygulamadan sonra listelenen bir dialog onu örter. Element tap ve type araçlarındaki verify: true aynı kontrolü tap'ten hemen önce, 400 ms arayla iki yeniden denemeyle çalıştırır; örtülü ya da kaybolmuş hedef TARGET_OCCUPIED / TARGET_DISAPPEARED ile düşer, batch verdict'i bunu ürün hatası değil blocked (automation) sayar. ui_hit_test bir noktanın altındakileri listeler; etiketsiz container'lar ve ikon butonları dahil. save_as ile yapılan bir kayıt her koordinat tap'inin neye denk geldiğini hatırlar, replay onu yeniden bulur: kaymış eleman şimdiki yerine tap'lenir (adım sonucunda healed), örtülü ya da kayıp olan TARGET koduyla ayrışır. Hiçbir şey bulamayan locator yakın adayları listeler.

Yalnızca fark dönen ekran okumaları. web_snapshot, ios_get_ui_tree ve android_get_ui_tree, since alır. since: "none" ile ilk çağrı tam ağacı bir snapshot_id ile JSON olarak döner; sonraki since: <snapshot_id> çağrısı yalnızca added, removed ve changed düğümleri ve bir unchanged sayısı döner, düğümler sabit kimliklerle anahtarlanır (web: snapshot'ın ref'leri; cihazlar: role, identifier ya da label ve kardeşler arasındaki konumdan türetilen kimlikler). Bilinmeyen ya da başka platforma ait bir kimlik tam ağaçla cevaplanır. since olmadan cevaplar değişmez. iOS'ta since modu ui_locate'in kullandığı element listesini okur (kuruluysa idb).

Paralel web oturumları. web_session_open çağırana kendi tarayıcı context'ini verir (sayfa, cookie, storage, console, network, ref'ler, sır lekesi); her web_* aracı, ui_locate ve web assertion'ları session alır. session verilmeyen çağrılar eskisi gibi davranan varsayılan oturumu kullanır. web_session_list ve web_session_close oturumları yönetir; motor ve headless modu başına tek tarayıcı süreci paylaşılır ve hiçbir oturum kullanmadığında kapanır. MULTI_AGENT_TOOLKIT_WEB_MAX_SESSIONS açık oturum sayısını sınırlar, varsayılan oturum dahil (varsayılan 4).

Headless modları. Launch oturumu (web_session_open ya da varsayılan oturumda web_goto) headless_mode alır: shell (varsayılan) Playwright'ın paketle gelen chromium-headless-shell'idir, en hızlısı; new yeni headless modunda tam Chromium'dur, kullanıcının çalıştırdığı tarayıcının aynısı, shell'de farklı çizilen ya da davranan sayfalar için (yalnızca chromium); headed koşuyu izlemek için görünür bir pencere açar ve MULTI_AGENT_UNATTENDED=1 altında reddedilir. Profil modunda channel: "chromium" ile headless: true de yeni headless modunda çalışır.

Claude in Chrome. Anthropic'in tarayıcı eklentisi, kullanıcının kendi sekmelerinde etkileşimli iş için kendi başına bir MCP sunucusudur; bu sunucu ona köprü kurmaz, çünkü köprü aşağıdaki önizle-ve-onayla kapılarını ve URL politikasını atlar. Kullanıcının Chrome'unda betikli ve kapılı akışlar için mode: "attach" kullanılır.

Gerçek tarayıcı oturumları. Headless bir context cookie'siz, geçmişsiz ve paketle gelen bir tarayıcıyla başlar; bot kontrolleri tam olarak bunu arar ve kullanıcının zaten giriş yaptığı hesaplar kullanılamaz. web_session_open mode: "attach" ile kullanıcının --remote-debugging-port=9222 --user-data-dir=<ayrı dizin> ile başlattığı Chrome'a CDP üzerinden bağlanır (Chrome 136 ve sonrası varsayılan profilde portu yok sayar; adres loopback olmalı); mode: "profile" kurulu Chrome'u görünür şekilde, kullanıcının bir kez giriş yaptığı kalıcı bir profil dizininde (varsayılan ~/.multi-agent-toolkit/chrome-profile) açar. Profil modunda tarayıcıyı sunucu başlattığı için tarayıcı navigator.webdriver = true bildirir; kullanıcının başlattığı, bağlanılan tarayıcı bildirmez. Bunu kontrol eden siteler için attach tercih edilir. Bundan sonra her web_* aracı o tarayıcıda çalışır, üç farkla. Submit kontrolü, metni kalıcı bir iş yapan buton ya da link (send, pay, apply, post, save, delete, connect, gönder, başvur, öde, kaydet, sil...), form alanında Enter, web_upload, web_eval ve bir web_webmcp çağrısı önce önizleme döner ve ancak confirm: true ile tekrarlanınca uygulanır; tanımlanamayan bir hedef kalıcı iş yapıyor sayılır. Bu aksiyonlar agent_run_steps içinde ve MULTI_AGENT_UNATTENDED=1 altında reddedilir. Etkisi tüm tarayıcı context'ine yayılan araçlar (web_storage_state, web_route, web_clock, web_network_state, web_crawl, web_trace) reddedilir. Bağlanılmış bir oturumu kapatmak yalnızca bağlantıyı keser; profil oturumunu kapatmak açtığı tarayıcıyı kapatır, profili korur. İki mod da MCP_TOOLKIT_URL_POLICY=strict altında kullanılamaz, çünkü o modun proxy'si ve context route'u kullanıcının başlattığı bir tarayıcıya uygulanamaz. Parmak izi gizleme ve captcha çözme yoktur: captcha ya da giriş ekranı kullanıcıya bırakılır. LinkedIn dahil bazı siteler kullanım koşullarında otomatik erişimi yasaklar.

iOS Araçları (42)

| Araç | Açıklama | |------|-------------| | ios_list_devices | Mevcut tüm simulator'ları listele | | ios_boot_device | Bir simulator'ı boot et | | ios_screenshot | Screenshot yakala (base64 PNG) | | ios_tap | Koordinatlara tap yap | | ios_swipe | Swipe hareketi | | ios_type_text | Odaklanmış alana metin ya da yazılıp hiç yankılanmayan bir secret_ref yaz | | ios_tap_element | locator'ın adlandırdığı tek elemente merkezinden tap yap (aksi halde adaylarla LOCATOR_NOT_FOUND / LOCATOR_AMBIGUOUS) | | ios_type_element | locator'ın adlandırdığı elementi odakla ve içine text ya da secret_ref yaz | | ios_launch_app | Bundle ID ile uygulama başlat | | ios_terminate_app | Uygulamayı sonlandır | | ios_list_apps | Kurulu uygulamaları listele | | ios_go_home | Home tuşuna bas | | ios_set_appearance | Açık/koyu modu ayarla | | ios_set_content_size | Dynamic Type boyutunu ayarla | | ios_set_locale | Uygulama dilini değiştir | | ios_open_url | URL veya deep link aç | | ios_status_bar | Status bar'ı override et - preset'leri destekler (App Store screenshot'ları için clean 9:41/%100, testing, low-battery, airplane) artı manuel zaman/pil | | ios_push_notification | Simüle edilmiş push gönder | | ios_grant_permission | Gizlilik izni ver | | ios_revoke_permission | İzni geri al | | ios_reset_permissions | Tüm izinleri sıfırla | | ios_set_location | Simüle edilmiş GPS ayarla | | ios_clear_location | Konumu temizle | | ios_set_increase_contrast | Increase Contrast'ı aç/kapat | | ios_record_video | Ekran kaydı - action:"start" arka planda kaydeder, action:"stop" video dosyasını döner | | ios_add_media | Fotoğraf kütüphanesine ekle | | ios_keychain_reset | Keychain'i sıfırla | | ios_get_app_container | Uygulama dosya yolunu al | | ios_erase_device | Simulator'ı fabrika ayarlarına döndür | | ios_get_ui_tree | Accessibility UI ağacı; since önceki bir okumadan bu yana yalnızca değişen düğümleri döner | | ios_accessibility_audit | Otomatik denetim: eksik label'lar, küçük tap target'ları, eksik identifier'lar | | ios_biometric | Face ID / Touch ID'yi simüle et (eşleşme veya başarısızlık) | | ios_archive_audit | .xcarchive'ı App Store uyumluluğu için denetle (daha hafif, deprecated - ios_app_store_audit'i kullan) | | ios_app_store_audit | .xcarchive üzerinde derin 18-kurallık App Store uyumluluk denetimi - privacy manifest, required-reason API, Info.plist, code signing, entitlements, gömülü SDK, IPv6, debug-tool sızıntısı, binary boyutu, ölü referanslar, duplicate kaynaklar, team ID, provisioning profile, Swift ABI, extension signing, asset doğrulama, production hijyeni, SDK tabanı (ITMS-90725) kapsar. Apple ITMS hata kodları + App Store Review Guidelines'a çapraz referans verir | | ios_export_ipa | xcodebuild -exportArchive üzerinden bir .xcarchive'ı imzalı bir .ipa'ya export et. exportOptions.plist'i argümanlardan üretir (method varsayılan olarak app-store-connect). 0 ile çıkıp .ipa üretmeyen bir çalıştırma başarısızlık olarak raporlanır | | ios_testflight_validate | Apple'ın kendi pre-submission doğrulaması, xcrun altool --validate-app üzerinden, dönen ITMS kodları ima ettikleri App Store kuralına eşlenmiş halde. Statik analizin yapısal olarak yakalayamayacağını yakalar: kayıtsız bundle ID, profile/app-record uyuşmazlığı, zaten kullanılmış bir version+build, App ID için provision edilmemiş entitlement'lar. 3-katmanlı auth (ASC API key → Apple ID + app-specific şifre keychain/env referansıyla → gerekçesiyle SKIPPED). SKIPPED bir pass değildir | | ios_xcodebuild | Bir Xcode projesini build / test / clean / archive et. Tek satırlık özet + xcresult ID döner; tam log context dışında kalır | | ios_xcresult | ID ile önceki bir build'e derinlemesine gir - modlar: summary, errors, warnings, log, tests. Token-verimli kademeli açığa çıkarma | | ios_visual_diff | İki PNG screenshot'ı karşılaştır (pixelmatch). diff_pct, threshold'a karşı pass/fail, opsiyonel diff PNG döner. Açık/koyu mod, locale, dynamic type genelinde snapshot regresyonları için kullanışlı | | ios_list_crashes | Host'un DiagnosticReports dizinindeki güncel crash raporlarını listele - süreç adına göre filtrele, yaş ve sayı ile sınırla |

Android Araçları (34)

| Araç | Açıklama | |------|-------------| | android_list_devices | Bağlı cihazları listele | | android_screenshot | Screenshot yakala (base64 PNG) | | android_tap | Koordinatlara tap yap | | android_tap_sequence | 2-10 noktaya tek shell çağrısında, delay_ms arayla tap yapar; ayrı tap'ler gelene kadar kapanan menü ve toast'lar için | | android_swipe | Swipe hareketi | | android_type_text | Metin ya da yazılıp hiç yankılanmayan bir secret_ref yaz | | android_tap_element | locator'ın adlandırdığı tek elemente bounds merkezinden tap yap | | android_type_element | locator'ın adlandırdığı elementi odakla ve içine text ya da secret_ref yaz | | android_key_event | Tuş olayı gönder (HOME, BACK, ENTER) | | android_launch_app | Package ile uygulama başlat | | android_stop_app | Uygulamayı zorla durdur | | android_list_packages | Kurulu package'ları listele | | android_go_home | Home'a bas | | android_go_back | Back'e bas | | android_get_ui_tree | UI hiyerarşisi (uiautomator XML) - path ham dökümü dosyaya yazar, filter:"interactive" kompakt aksiyon-elemanı listesi döner, since yalnızca değişen düğümleri döner | | android_set_dark_mode | Koyu modu aç/kapat | | android_set_font_scale | Font ölçeğini ayarla | | android_set_locale | Locale'i değiştir | | android_set_location | Sahte GPS konumu | | android_grant_permission | Runtime izni ver | | android_revoke_permission | İzni geri al | | android_record_screen | Ekran kaydı - action:"start" arka planda kaydeder, action:"stop" videoyu cihazdan çeker | | android_install_apk | APK kur | | android_uninstall_app | Uygulamayı kaldır | | android_logcat | Logları görüntüle | | android_get_screen_size | Ekran çözünürlüğünü al | | android_open_url | URL veya deep link aç | | android_clear_app_data | Uygulama verisini temizle | | android_accessibility_audit | Otomatik denetim: eksik contentDescription, küçük touch target'lar, eksik resource-id | | android_launch_time | Soğuk başlangıç süresini ölç (ms) | | android_apk_audit | APK'yı Play Store uyumluluğu için denetle | | android_list_crashes | adb crash log buffer'ını dök, tail-sınırlı | | android_set_orientation | Portrait/landscape'e döndür (user_rotation'ı sabitler, auto-rotate'i kapatır) |

Design Araçları (7)

Mock-mode vs Figma tasarım denetimi. Jenerik ve platform-bağımsız - ağır orkestrasyonun (Figma çekme, varyant eşleme, ekran navigasyonu, rapor derleme) çağıranda yaşaması beklenir; bunlar mekanik ilkel işlemleri açığa çıkarır.

| Araç | Açıklama | |------|-------------| | design_mock_detect | Bir projenin mock/stub modunu desteklediğini (true / false / debug-only) isimlendirme konvansiyonları, #if DEBUG DI, MockData fixture'ları ve bilinen runtime switch key'leri (genişletilebilir) üzerinden tespit et. Aktivasyon + varyant ipuçları + kanıt döner. | | design_scenario_inventory | Mock build'in açığa çıkardığı her state sürücüsünü enumerate et - relaunch flag'leri, *Scenario / *Outcome enum case'leri (yalnızca debug kanıtıyla sayılır: #if DEBUG altında ya da Android debug/mock source set'inde tanımlı, yalnızca debug/mock koddan referanslanan veya runtime key'den okunan; aynı son eki taşıyan production tipi rejectedSelectors içinde raporlanır), reference-prefix varyantları (ekran-başına mock repository'ler içindeki hasPrefix("R1EX") dalları, genelde en büyük grup), akış-geneli senaryo kodları, MockData fixture'ları, custom-scheme deep link'ler - her biri dosya+satır kanıtıyla. Her hedefi (relaunch vs in-app) fiyatlandırır ve bir çalıştırma planına gruplar, böylece bir relaunch o ekrandaki her in-app state'e hizmet eder. targets_file / targets[] hedef setini tarama yerine harici bir katalogdan verir; plan, gruplar, relaunch sayısı ve coverage kapısı aynı şekilde çalışır. Bir denetime "UI'da bitmiş hissedene kadar gez" yerine sayılabilir bir hedef seti verir. | | design_mock_launch | Kurulu bir uygulamayı mock modda başlat (iOS UserDefaults launch arg / Android intent extra). | | design_ui_geometry | Piksel-seviyesi boşluk ölçümü için mevcut ekranın düz element bounding box'ları + ekran boyutu. | | design_component_variants | Bir tasarım node'unu component set'ine çözümle ve varyantlarını (State=Error, Rows=3) listele; veri çağıranın zaten çektiği Figma verisidir (REST nodes yanıtı ya da MCP get_metadata XML'i, artı kütüphanenin component_sets listesi; sunucu Figma'ya hiç bağlanmaz). Varyant başına geometri spec'i, frame, render isteği ve Code Connect adı döner, denetlenen state'leri isimle varyantlara eşler, hâlâ çekilmesi gereken node ve render'ları listeler. Canlı component bölgesini kendi varyantıyla karşılaştırmak fixture satır sayısı farkını geometri bulgularından çıkarır. | | design_visual_compare | Bir Figma render'ını canlı bir screenshot ile boyut uyuşmazlığında başarısız olmadan karşılaştır: ölçeği normalize eder, chrome'u kırpar, algısal diff %'sini, boşluk/boyut/pozisyonu (px), rengi (ΔE) ve tipografiyi raporlar. figma/live/diff/overlay/side-by-side PNG'leri yazar. | | design_report | Bir tasarım-denetim rapor nesnesini kendi kendine yeten HTML'e (base64 görseller, CSS-konumlandırılmış annotasyonlar) + opsiyonel PDF'e render et. Bir coverage kapısı zorlar: her hedef denetlenmeli ya da açık bir gerekçeyle atlanmalı, böylece kısmi bir denetim temiz bir rapor olarak render edilemez. Metin bir label pack'ten gelir (varsayılan İngilizce, Türkçe dahili olarak yerleşik). Özet modu (modules[]) modül başına bir satır render eder - kapsam, kapı, sapmalar, modül raporuna link - ve herhangi bir modül kendi kapısını geçemezse başarısız olur. |

Code Intelligence Araçları (8)

Swift ve Kotlin kaynağı hakkında, her platformun zaten getirdiği dil sunucusu üzerinden derleyici seviyesinde cevaplar. Kotlin tarafı JetBrains kotlin-lsp (Alpha) kullanır ve bu repo'daki hiçbir kapı onu çalıştırmaz.

| Araç | Açıklama | |------|----------| | code_definition | Bir sembolün tanımlandığı yer; 1-tabanlı satır+sütun ya da symbol adı alır | | code_references | Workspace genelinde her referans; index'in oturup oturmadığını raporlar | | code_hover | Bir konumdaki tip, imza ve doc comment | | code_document_symbols | Tek bir dosyanın sembol ağacı | | code_workspace_symbols | Workspace genelinde isimle sembol arama | | code_diagnostics | Tam build olmadan tek dosyanın derleyici tanılamaları | | code_index_status | Dil başına: sunucu kurulu mu, hangi build sistemi bulundu, diskte index var mı | | code_server_reset | Havuzdaki dil sunucularını durdurur |

Wallet Pass Araçları (4)

| Araç | Açıklama | |------|----------| | pass_validate | pass.json, .pass dizini ya da .pkpass'i Apple kurallarına göre denetler, bulguları sonucuna göre derecelendirir | | pass_build | .pkpass üretir, imzalar ve arşivler; önce doğrular | | pass_inspect | Bir .pkpass'in içeriğini raporlar: stil, semantik etiketler, görseller, manifest bütünlüğü, imza zinciri | | pass_certificates | İmza materyalini raporlar; anahtar materyalini okumaz |

Web Araçları (38)

Opsiyonel peer dependency olan Playwright üzerinden headless tarayıcı kontrolü. session verilmeyen çağrılar tek bir varsayılan context kullanır; web_session_open paralel çağıranlar için izole context ekler.

| Araç | Açıklama | |------|----------| | web_goto | Bir URL açar. browser (chromium / webkit / firefox), wait_until, timeout_ms, viewport, locale ve user_agent alır | | web_pdf | Mevcut sayfayı yazdırma penceresinin yapacağı gibi PDF'e basar: varsayılan olarak print stil sayfası (ekrandaki için media: "screen"), format ya da sayfanın @page boyutu, landscape, print_background, margin. Yalnızca Chromium launch oturumları, yalnızca headless; yolu, sayfa sayısını ve boyutu döner | | web_screenshot | Mevcut sayfanın screenshot'ı: varsayılan olarak satır içi 800 px JPEG (tam PNG diskte) ya da path'e yazılmış PNG | | web_click | CSS selector, metin, web_snapshot'tan bir ref ya da ui_locate locator nesnesi ile tıklar | | web_type | Selector, ref ya da locator nesnesi ile eşleşen input'a yazar; secret_ref hiç yankılanmayan bir sır yazar | | web_eval | Sayfada JavaScript çalıştırır, sonucu JSON döner | | web_mouse | Viewport koordinatında tıklar, çift tıklar, fareyi taşır, kaydırır ya da sürükler; koordinatı istenirse screenshot genişliğinden ölçekler | | web_wait_for | Bir selector'ın belirli bir duruma gelmesini bekler | | web_get_text | Selector ya da ref'in ilk eşleşmesinin textContent'i | | web_close | Oturumun tarayıcı context'ini, hiçbir oturum kullanmıyorsa tarayıcıyı da kapatır | | web_session_open | İzole bir oturum açar (kendi sayfası, cookie'leri, storage'ı, kayıtları); kimliğini herhangi bir web aracına session olarak ver | | web_session_close | Bir oturumu ve context'ini kapatır | | web_session_list | Açık oturumları motor, URL ve sayfa sayısıyla ve oturum sınırını listeler | | web_snapshot | Her düğümde sabit bir [ref=eN] olan erişilebilirlik snapshot'ı; since yalnızca değişen düğümleri döner | | web_console | Son web_goto'dan beri console mesajları | | web_network | Son web_goto'dan beri istekler: id, method, status, tip, URL; request_id başlıkları, gövdeleri ve süreyi döner | | web_tabs | Açık sayfaları listeler, aktif olanı değiştirir | | web_storage_state | Cookie ve localStorage'ı okur ya da kayıtlı bir durumu geri yükler | | web_extract | Sayfanın makale içeriği Markdown (ya da metin) olarak, prompt-injection işaretleriyle güvenilmez olarak çitlenmiş. Okuyucunun göremediği metin (display none, opacity 0, piksel altı font, şeffaf, kırpılmış, ekran dışı, aria-hidden, hidden) makaleye girmez, çitin içinde makaleden sonra, yalnızca orada geçen URL'lerle listelenir (include_hidden onu korur) | | web_map | Sayfadan ve sitemap'ten (robots.txt Sitemap: satırları, iç içe index'ler) aynı-origin URL'ler; arama, include/exclude kalıpları ve query katlama ile | | web_crawl | url'den ya da mevcut sayfadan sınırlı aynı-origin crawl: RFC 9309'a göre robots.txt (Allow, joker, Crawl-delay), include/exclude path regex'leri, sitemap'ten tohumlama, query katlama, isteğe bağlı llms.txt; her sayfa context_search için indekslenir | | web_press_key | Bir tuşa basar, isteğe bağlı olarak bir elemana odaklanarak | | web_select_option | Bir <select> seçeneğini değer ya da etiketle seçer | | web_scrape | Tek bir URL'yi tek kullanımlık bir oturumda istenen formatlarda döner: markdown, text, html, links, screenshot, selectors (CSS'ten modelsiz yapılandırılmış JSON), structured_data (JSON-LD, microdata, Open Graph, Twitter; bozuk bir JSON-LD bloğu konumuyla (index) listelenir, diğerleri yine döner) ve change_tracking (new / same / changed / removed, diff ile). Çıkarım öncesi aksiyonlar, include/exclude etiketleri, çağıranlar arasında paylaşılan disk cache'i (max_age_ms, cache_only) | | web_find | Erişilebilirlik snapshot'ında metin ya da regex araması; yalnızca eşleşen düğümleri canlı ref'leri ve ataları ile döner | | web_form_inventory | Bir formun alanlarını doldurmadan listeler: web_fill_form'un kabul ettiği selector, görünen etiket, tip, required, autocomplete, uzunluk, pattern, aralık, seçenekler, disabled / readonly ve has_value; değerler hiç dönmez, gizli input'lar yalnızca sayılır | | web_fill_form | Metin input'larını, checkbox, radio ve select'leri tek çağrıda doldurur | | web_hover | Bir elemanın üzerine gelir | | web_drag | Bir elemanı diğerinin üzerine sürükler | | web_upload | Dosyaları bir file input'a ya da bir tıklamanın açtığı seçiciye ekler | | web_dialog | Sıradaki alert / confirm / prompt'u yanıtlar (kabul, ret, prompt metni) ve görülen dialog'ları listeler | | web_route | İstekleri glob ya da regex ile mock'lar (fulfill), iptal eder ya da engeller; gecikme ve isabet sayısı ile | | web_network_state | Context'i offline'a alır ya da geri çevrimiçi yapar | | web_clock | Sahte zamanlayıcılar: kurma, Date.now'ı dondurma, sistem saatini ayarlama, duraklatma, ileri sarma, bir süre çalıştırma, devam | | web_trace | Playwright trace'i kaydeder, npx playwright show-trace için trace.zip yazar | | web_generate_locator | Bir snapshot ref'ini Playwright koduna ve ui_locate locator'ına çevirir, her birinin anlık eşleşme sayısıyla | | web_assert_aria | Sayfayı bir ARIA snapshot şablonuna karşı doğrular (contain ya da equal, regex adlar); expect_aria batch adımı olarak da var | | web_webmcp | Sayfanın WebMCP ile kaydettiği araçları listeler ya da çağırır (Playwright 1.64+, Chromium) |

web_extract, web_scrape, web_crawl ve research araçlarının döndürdüğü sayfa metni güvenilmez veri olarak çitlenir; çit başlığı bulduğu prompt-injection kalıplarını adlandırır (talimat ezme, rol değiştirme, chat-template token'ları, tool çağrısı taklidi, sızdırma talebi, görünmez karakterler). Metnin kendisine dokunulmaz.

Context Index Araçları (4)

| Araç | Açıklama | |------|----------| | context_index | Bir metin dosyasını SQLite FTS5 index'ine ekler; değişmemiş dosya no-op | | context_search | bm25 ile sıralanmış parçalar, her sonuçta kısa snippet ve chunk id | | context_get | Bir parçanın tamamı, dosyası ve satır aralığıyla | | context_render | Uzun metni bir görsel model için monospace PNG sayfalara dizer (light / balanced / dense preset'leri, satır uzunluğuna göre 1-3 sütun); ölçülen metin-token / görsel-token oranını ve kesin tanımlayıcıları (hash, UUID, path, URL, sayı) metin olarak döner |

context_render, Glyph (arXiv:2510.17800) gibi görsel-metin sıkıştırma çalışmalarının yaptığı gibi metni sayfaya dizer; onların öğrenilmiş render-ayarı aramasını içermez, çünkü o döngü bir görsel model ister. Markdown'da dense preset metne göre yaklaşık 1.8 kat daha az girdi token'ı ölçer; light ve balanced genelde kazandırmaz ve cevap bunu söyler.

Research Araçları (2)

| Araç | Açıklama | |------|----------| | research_search | Brave, Perplexity ya da arXiv (anahtarsız) üzerinden arama, title / url / snippet'e normalize. fetch_content ilk sonuçları web_scrape ile okuyup indeksler; bir saat cache'lenir, 429/5xx'te yeniden denenir. Anahtar BRAVE_API_KEY ya da PERPLEXITY_API_KEY'den, asla argüman olarak değil | | research_ask | Perplexity Sonar'dan atıflı cevap. mode quick / pro / reasoning / deep modeli seçer; recency, domains ve sources (web, academic, sec) filtreler; thread_id önceki turlarla takip sorusu sorar; incognito hiçbir şey saklamaz. Anahtar PERPLEXITY_API_KEY'den |

Free Models Araçları (2)

| Araç | Açıklama | |------|----------| | llm_delegate | task'ı (summarize / extract / classify / translate / draft) text ya da mutlak bir path üzerinde ücretsiz katmandaki bir modele verir. schema extract çıktısını doğrular, labels classify'ı sınırlar, providers sırayı seçer, allow_training veri politikasını genişletir. Doğrulanmış cevap başlıkta sağlayıcı, model, çağrı ve token ile güvenilmez olarak çitlenir; her yerde başarısızlık sağlayıcı başına bir gerekçeyle ESCALATE_TO_CLAUDE. Doğrulanmış cevaplar bir gün cache'lenir (max_age_ms). agent_run_steps içinde çalışamaz | | llm_providers | Yapılandırılmış sağlayıcılar, anahtar kaynağı (env değişkeni adı ya da credential-store anahtarı, asla değer), model, ücretsiz katman veri kullanımı, bekleme ve geçti/kaldı sayıları. Salt okuma, ağ yok |

Media Araçları (1)

| Araç | Açıklama | |------|----------| | media_frames | Bir videodan anahtar kareler PNG olarak, benzerleri elenmiş. ffmpeg gerektirir |

Agent Araçları (2)

| Araç | Açıklama | |------|----------| | agent_run_steps | ios / android / web / ui / design adımlarından ve expect_* assertion'larından oluşan bir batch'i tek çağrıda çalıştırır; adım başına durum ve kod, eski verdict, passed / failed / blocked test_verdict, geçmezse iz yolu ve kayıtlı koşular için save_as / replay döner | | agent_query_output | Satır içi dönemeyecek kadar büyük önceki bir çağrının kaydedilmiş tam çıktısını arar |

UI Araçları (5)

| Araç | Açıklama | |------|----------| | ui_locate | Bir locator'ı iOS, Android ya da web sayfasında işlem yapmadan çözer: code (OK / LOCATOR_NOT_FOUND / LOCATOR_AMBIGUOUS), match_count ve en fazla 10 aday | | ui_target_check | Daha önce görülen bir elemana dokunmadan önce: ok, shifted (düzeltilmiş point ve shift_px), occupied (üstteki occupant), disappeared (near_misses ile) ya da ambiguous. Canlı ekran ya da kayıtlı bir tree | | ui_hit_test | (x, y) altındaki her eleman, en üstteki önce, ve oraya bir tap'in etki edeceği interactive_hit | | ui_region_changed | İki ekran görüntüsü arasında (x, y) çevresindeki piksellerin değişip değişmediği (bir kırpıntı üzerinde pixelmatch, model yok); boyutlar farklıysa ya da nokta ekran dışındaysa gerekçesiyle measurable: false | | ui_locator_codegen | Bir ios_get_ui_tree / android_get_ui_tree düğümü için identifier'a dayalı locator kodu: role göre tiplenmiş app.buttons["id"], onNodeWithTag("id"), onView(withId(R.id.x)). Identifier yoksa { code: null, error: "NO_HANDLE", suggestion } |

Test Results Araçları (1)

| Araç | Açıklama | |------|----------| | test_results_classify | Bir head raporu ve isteğe bağlı base, confirm, flake_ledger ile test başına passed / regression / preexisting / unstable / not_measured. Her unstable ve not_measured testte reason var; ilk 8 hatanın 5'i aynı imzayı taşırsa breaker döner. Boş, yarım ya da bozuk head hata döner; yalnızca hataları listeleyen head measured: false döner. Deftere yalnızca ölçülmüş dönüşleri ekler, defteri asla budamaz |

Coverage Araçları (1)

| Araç | Açıklama | |------|----------| | coverage_gap | Ekran ve akış inventory'sini test_root altındaki kaynakların andığı tanımlayıcılarla eşler: covered (file:line ile), uncovered, unmatched (ölçülemedi; eksik kalan b