Braintrust Trace Analysis
Bu skill Elçi AI agent'ın Braintrust'a loglanan Odoo run trace'lerini analiz eder. Amaç: prompt mühendisliği ve agent mimari iyileştirmeleri için gerçek run verisinden kanıt çıkarmak.
When to use
Tetikleyici ifadeler:
- "son N trace'i analiz et"
- "Braintrust loglarına bak"
- "trace yorumlarını oku"
- "prompt iyileştirme için trace incele"
- "son run'larda ne ters gitti"
Hardcoded references — DO NOT search for these
| Field | Value |
|---|---|
| Braintrust project name | browser-agent (NOT elci-ai — BRAINTRUST_PROJECT env override aktif) |
| Braintrust project ID | 158d767d-faf1-4a17-a39d-baf59e7877f6 |
| Root span name | elci-agent-execute (type task) |
| Step span name pattern | step-{N} (type llm) |
| Tracing source code | packages/server/src/agent/braintrustTracing.ts |
| Agent loop source | packages/server/src/agent/ElciAgentLoop.ts |
| System prompt source | packages/server/src/agent/prompts/elciSystemPrompt.ts |
Context-saving rule (iki ayrı kural):
Step span'larındaki system messages'ları okuma. Her step'in
input.messages[0]slotunda system prompt'un tam kopyası vardır ve 20 step × 3KB = ~60KB boşuna context harcar. Step data çekerken bunları tamamen atla (Step 3 filtresi bunu zorunlu kılar).
elciSystemPrompt.tsdosyasını okuma izni VAR — fakat zamanlama kritik: önce step data'yı çek ve failure mode'ları belirle, SONRA eğer analiz gerçekten prompt'un içeriğine bağlıysa (örn. "system prompt'taki X kuralı yeterince net mi?", "Y davranışı prompt'tan mı kaynaklanıyor?") o zamanelciSystemPrompt.ts'yi Read et. Peşinen okuma — çoğu trace analizi prompt içeriğine bakmadan sonuca varabilir.
Workflow
Step 1 — Fetch last N traces (root spans)
mcp__braintrust__sql_query çağır:
object_type:project_logsobject_ids:["158d767d-faf1-4a17-a39d-baf59e7877f6"]shape:summaryselect:id, span_id, root_span_id, input, output, metrics, scores, metadata, createdwhere:span_attributes.name = 'elci-agent-execute'order_by:created DESCpreview_length:-1(metadata.eval için tam metin gerekli)limit: N (kullanıcı istediği sayı, default 5)
Her satırdan çıkarılacak metadata:
input.task→ kullanıcı task'ı (Türkçe komut)input.model→ kullanılan LLM (örn.google/gemini-3-flash-preview)input.maxSteps→ step bütçesimetrics.llm_calls→ toplam step sayısımetrics.total_tokens,metrics.prompt_tokens,metrics.completion_tokensmetrics.estimated_cost(USD)metrics.duration(saniye)scores.success(0 veya 1),scores.stepCountoutput.message,output.finalPageUrlmetadata.eval→ human review notu (bkz. Step 4)created,root_span_id(Step 2'de kullanılacak)
Step 2 — Per-trace step spans
Her root_span_id için ayrı sorgu:
object_type:project_logsobject_ids:["158d767d-faf1-4a17-a39d-baf59e7877f6"]shape:spansselect:span_id, span_attributes, input, output, metrics, metadata, commentswhere:root_span_id = '<root_span_id>' AND span_attributes.type = 'llm'order_by:metadata.stepIndex ASCpreview_length:-1(tam içerik gerekli — sadece bu sorguda kullan, summary'de KULLANMA)limit: 100
Step 3 — Filter messages (CONTEXT GUARD — critical)
Her step span'ının input.messages dizisinde her bir mesaj için:
| Role | Action |
|---|---|
system |
TAMAMEN ATLA. Okuma, özetleme, render etme. |
user |
İçeriği koru |
assistant |
content + tool_calls[*].function.name + tool_calls[*].function.arguments koru |
tool |
tool_call_id + content koru (tool result'u) |
output alanından koru: text, finishReason, toolCalls, toolResults.
DOM snapshot'ları gibi büyük tool result'ları 500 char ile truncate et. Kullanıcı tam içerik isterse ayrıca sorgula.
Step 4 — Collect human review (iki kaynak)
Kaynak A — metadata.eval (BİRİNCİL — nihai kullanıcı değerlendirmesi)
Projede Braintrust "Human Review" ekranı eval adlı serbest metin alanıyla konfigüre edilmiştir. Kullanıcı bir trace üzerine yorum yazdığında bu, root span'ın metadata.eval string alanına düşer.
- Step 1 sorgusunda
metadatakolonunu zaten çektin →row.metadata?.evalkontrolü yap - Bu alan varsa ve doluysa: kullanıcının o trace için yazdığı nihai değerlendirmedir. Diğer tüm sinyallerden (metrik, success score, kendi analizin) daha yüksek güvenle ele al.
- Nasıl değerlendir:
- Analiz raporunun başına "📝 Human Review notu" başlığı altında tam metnini alıntıla
- Yorumdaki her iddiayı somut failure mode / aksiyon maddesine dönüştür
- Kendi analiz çıkarımın yorumla çelişiyorsa, yorumu doğru kabul et ve kendi çıkarımını revize et (kullanıcı ekranı görmüş, sen görmedin)
- "Patterns & Improvement Hypotheses" bölümündeki aksiyon maddeleri yorumla hizalı olmalı; değilse neden olmadığını belirt
Kaynak B — Span-level comments alanı (İKİNCİL)
Step 2 sorgusundaki comments field'ı — Braintrust UI'nin "Comment" butonuyla span'a eklenen yorumlar. Bu yolun kullanılma ihtimali düşük (proje metadata.eval workflow'unu tercih ediyor) ama doluysa:
comments[*].comment.text,user_id,createdçıkar- Output'a ilgili step'in altında
💬 "yorum metni"formatında ekle
null olanları atla.
Step 5 — Report format
Her trace için aşağıdaki şablonu üret:
## Trace {idx}: {created} — {task[:80]}
- Model: {model} | Steps: {llm_calls}/{maxSteps} | Tokens: {total_tokens} | Cost: ${estimated_cost}
- Duration: {duration}s | Result: {success ? '✅' : '❌'}
- Final: {output.message}
- URL: {finalPageUrl}
### 📝 Human Review (metadata.eval) ← sadece doluysa
> "{metadata.eval tam metni}"
### Steps
1. [tool: {toolName}] {assistant.text[:200]}
→ {toolResult[:200]}
💬 "span-level comment varsa burada"
2. ...
Tüm trace'lerin sonunda kısa bir analiz bölümü:
## Patterns & Improvement Hypotheses
- {tekrarlayan failure mode'lar}
- {tool kullanım anomalileri}
- {prompt iyileştirme önerileri}
- {comments üzerinden çıkarılan aksiyon maddeleri}
Failure modes & guards
BRAINTRUST_API_KEYyok: MCP 401 döner. Kullanıcıya.envkontrolünü söyle.- Çok fazla span (>100):
OFFSETile paginate et veya kullanıcıyalimitbelirt. - Büyük DOM tool results: 500 char truncate; full içerik için kullanıcı açıkça istesin.
preview_length: -1token-pahalı: Step 2 (spans) sorgusunda ve Step 1'demetadatakolonunu çekerken kullan — aksi haldemetadata.evaltruncate olabilir. Metrik-only sorgularda default'ta bırak.- System prompt sızıntısı: Step span'larından çekilen
input.messages[0]system rolü analiz çıktısına asla düşmemeli — filtre (Step 3) bunu garanti eder.elciSystemPrompt.ts'yi kasıtlı Read etmek farklı: bu okuma context'e gelir, sızıntı sayılmaz ama sadece gerçekten gerektiğinde yap. metadata.evalatlanması: Human review notu varsa ve rapora dahil edilmemişse skill hatalı çalışıyor demektir — analiz öncesi her trace'inmetadata.evalalanını kontrol ettiğinden emin ol.