Blog

42 posts · EN + TR · RSS available

Notes on shipping AI dev-tools, the Claude API, agent design, and the frontend craft underneath.

Written while building a four-tool open-source suite for the Anthropic Messages API. Each post is the long-form behind a decision.

/
EN · 9 min

Two AI vulnerabilities that never throw an exception

An insurance claim auto-approves when it should escalate. An agent emails a customer's itinerary to an address nobody typed. Neither system logs an error. Schema drift (LLM05) and indirect prompt injection via tool results (LLM01) are different OWASP categories wearing the same shape: a syntactically valid response that is semantically wrong, invisible to every monitoring tool built around exceptions.

LLMSecurityPrompt InjectionGuardrails
TR · 8 min

Hiç exception fırlatmayan iki yapay zeka açığı

Bir sigorta talebi eskale edilmesi gerekirken otomatik onaylanıyor. Bir agent, kimsenin yazmadığı bir adrese müşterinin seyahat planını yolluyor. İki sistem de hata loglamıyor. Şema kayması (LLM05) ve tool sonuçları üzerinden dolaylı prompt injection (LLM01), aynı şeklin iki farklı OWASP kategorisi giymiş hali: sözdizimsel olarak geçerli ama anlamsal olarak yanlış bir yanıt, exception etrafında kurulu her monitoring'e görünmez.

LLMSecurityPrompt InjectionGuardrails
EN · 7 min

Your context window bills you every turn

Auto-compaction feels like losing your context, but the raw usage numbers from three real Claude Code sessions say the opposite: 1.99 billion tokens read from cache against 62 million written, a 32:1 ratio, and four compactions that each reset a bill that had been climbing since turn one. Compaction isn't the tax. It's the tax getting paid off.

LLMClaudeDeveloper ToolsPerformance
TR · 5 min

Bağlam biriktirilmez, her turda yeniden faturalanır

Otomatik compaction bağlamı kaybetmek gibi hissettiriyor, ama üç gerçek Claude Code oturumundan çıkan ham usage verisi tam tersini söylüyor: cache'ten okunan 1,99 milyar token, cache'e yazılan 62 milyona karşı, 32:1 oran, ve her biri birinci turdan beri tırmanan faturayı sıfırlayan dört compaction. Compaction vergi değil. Verginin ödenme anı.

LLMClaudeDeveloper ToolsPerformance
EN · 10 min

The failures that don't throw

One call in forty comes back with “HIGH” instead of “high”, your switch falls through to the default branch, and the permissive branch auto-approves what the model flagged as maximum risk. Nothing errors. Schema failures are distributional, a single compliance percentage averages over the only distinction that matters, and zero failures in fifty runs is not a zero failure rate.

LLMGuardrailsStructured OutputTesting
TR · 8 min

Patlamayan hatalar

Kırk çağrının biri “high” yerine “HIGH” dönüyor, switch default dalına düşüyor, ve izin veren dal modelin maksimum risk dediği şeyi otomatik onaylıyor. Hiçbir şey hata vermiyor. Şema hataları dağılımsaldır, tek bir uyum yüzdesi önemli olan tek ayrımın üstünden ortalama alır, ve elli çalıştırmada sıfır hata sıfır hata oranı demek değildir.

LLMGuardrailsStructured OutputTesting
TR · 7 min

Çalıştığında değil, onlar değiştirebildiğinde bitti

En çok düşündüğüm deployment başarısız olmadı — UAT'yi geçti, canlıya çıktı, ve altı ay sonra kimse ona bir kez bile dokunmamıştı. Bir sistem çalışmayı bıraktığında ölmez; değiştirilmeyi bıraktığında ölür, ve isteklere cevap verirken aylarca ölü kalabilir. Devir teslim dokümantasyon değildir: bir ekibin bir değişiklik yapıp güvenli olduğunu bilip bilemediğidir.

Forward Deployed EngineeringEnterprise AIHandoverDeployment
TR · 7 min

İkinci müşteri ne yaptığını söyler

Forward-deployed iş SaaS şeklini tersine çeviriyor — çok müşteriye genişlik yerine tek müşteriyle derinlik — ve bu, ürün keşfinden hızlı yetenek üretip hangilerinin genelleşeceğini anlamanın yolunu vermiyor. İki müşterinin aynı özelliği istemesi sinyal değil. Ona aynı alttaki kısıtla varması sinyal, ve en güçlü kanıt istek bile değil: zaten elleriyle kurdukları geçici çözüm.

Forward Deployed EngineeringEnterprise AIProductDeployment
EN · 9 min

The second customer tells you what you actually built

Forward-deployed work inverts the SaaS shape — depth with one customer instead of breadth across many — which produces capabilities faster than product discovery does and no way to tell which ones generalise. Two customers asking for the same feature isn't the signal. Two customers arriving at it through the same underlying constraint is, and the strongest evidence isn't the request at all: it's the workaround they already built by hand.

Forward Deployed EngineeringEnterprise AIProductDeployment
EN · 9 min

You're not done when it works. You're done when they can change it.

The deployment I think about most didn't fail — it passed UAT, went live, and six months later nobody had touched it once. A system doesn't die when it stops working; it dies when it stops being changed, and it can be dead for months while still answering requests. Handover isn't documentation: it's whether a team can make a change and know it was safe.

Forward Deployed EngineeringEnterprise AIHandoverDeployment
EN · 10 min

“That library will hurt performance” is not a number

Every performance tool reports what a page costs right now. None of them answer the question the meeting is actually about, which is what it would cost without the thing you're arguing over — so the argument gets settled by whoever sounds most confident. A 410 KB image that loads after LCP is worth zero points; a 124 KB render-blocking script is worth eleven. Sorting by file size sends teams to fix the wrong thing.

Web PerformanceCore Web VitalsLighthouseLCP
TR · 8 min

“Performansı bozar” dediğin şey bir sayı değil

Bütün performans araçları sayfanın şu anki maliyetini raporluyor. Hiçbiri toplantının asıl konusu olan “o şey olmasa ne olurdu” sorusuna cevap vermiyor — ve karar, elinde sayı olmadığı için daha kendinden emin konuşana kalıyor. LCP’den sonra yüklenen 410 KB’lık bir görsel sıfır puan; 124 KB’lık render-blocking bir script on bir puan. Dosya boyutuna göre sıralamak ekipleri yanlış şeyi düzeltmeye gönderiyor.

Web PerformanceCore Web VitalsLighthouseLCP
TR · 7 min

Teslim ettiğin şey prompt değil. Eval.

Her saha rehberi inşa etmeden önce eval'lerini tanımla diyor — ve müşteri sahasındaki üçüncü günde etiketli verin, alan uzmanlığın ve birinin ekranından aldığın beş örnekten başka bir şeyin yok. Tavsiye doğru, çerçeve yanlış. “Bu iyi mi?” ground truth ister. “Bu değişti mi?” sadece dondurulmuş bir snapshot ister, ve ona bu öğleden sonra sahip olabilirsin.

Forward Deployed EngineeringEvalsLLMPrompt Engineering
EN · 9 min

The deliverable isn't the prompt. It's the eval.

Every field guide says define your evals before you build — and on day three at a customer site you have no labelled data, no domain expertise, and five examples off someone's screen. The advice is right; the framing is wrong. "Is this good?" needs ground truth. "Did this change?" needs only a frozen snapshot, and that one you can have this afternoon.

Forward Deployed EngineeringEvalsLLMPrompt Engineering
TR · 8 min

Kazara bir forward-deployed engineer saha çantası kurmuşum

Bir yıl önce bir SDK'yı silip yerine 150 satır yazdım ve bunu bir bundler hikâyesi sandım. Meğer adını hiç koymadan bir deployment problemi çözüyormuşum. Beş aracın her mimari kararına geri dönüp baktığımda hepsinin altında aynı dile getirilmemiş kısıt vardı: kurulacak bir şey yok, sınırdan çıkan veri yok, savunulacak bağımlılık yok.

Forward Deployed EngineeringEnterprise AIDeveloper ToolsFrontend
EN · 11 min

I accidentally built a forward-deployed engineer's field kit

I dropped the Anthropic SDK for 150 lines of TypeScript and called it a bundler problem. It wasn't. Browser-only, BYOK, no backend, minimal dependencies — the constraints I picked out of preference turn out to be the exact constraints of working inside someone else's regulated environment. What five tools look like when you finally name the rule you were following.

Forward Deployed EngineeringDeveloper ToolsClaudeAnthropic
TR · 7 min

Kimsenin modeli patlamadı. Arayüz patladı.

Kurumsal AI pilotları %70–90 oranında başarısız olurken forward-deployed engineer ilanları %800 arttı. Kanonik başarı hikâyesi 6–8 haftalık entegrasyonun ardından dört aylık adoption çalışması, ve raporlanan kazanma koşulu %98 adoption — doğruluk değil. Adoption sayısı bir arayüz sayısıdır, ve rol ona göre kadrolanmıyor.

Forward Deployed EngineeringEnterprise AIAdoptionFrontend
EN · 9 min

Nobody's model failed. The interface did.

Enterprise AI pilots fail at 70–90% while forward-deployed engineer postings jump 800%. The canonical success story is 6–8 weeks of integration followed by four months of adoption work, and the reported win condition is 98% adoption — not accuracy. An adoption number is an interface number, and the role isn't staffed against that.

Forward Deployed EngineeringEnterprise AIAdoptionFrontend
TR · 8 min

Google'un göremediği bir blog yayınladım

Sitemdeki her yazı tarayıcıda iyi görünüyordu — ama `curl` çekince yazı gövdesi boştu. Marked `onMount` içinde parse oluyor, prerender iskelet görüyor, arama motorları hiçbir şey indekslemiyordu. Düzeltme, ortaya çıkardığı üç ikincil hata, ve hiç kazanmadığım doğrulama alışkanlığı.

SvelteKitSEOSSRMarkdown
EN · 10 min

How I shipped a blog Google couldn't see

Every post on my site rendered fine in a browser — but `curl` showed the article body was empty. Marked was being parsed inside onMount, so prerender saw a skeleton and search engines indexed nothing. The fix, the three secondary failures it uncovered, and the verification habit I should have had.

SvelteKitSEOSSRMarkdown
TR · 8 min

İki hafta sonunda dört açık kaynak Claude dev-tool shiplerken neler öğrendim

Dört tool'lu Claude dev-tool suite'i üzerine meta yazı: SDK'nın kırılması neden işi mümkün kılan kısıt oldu, "içgörü başına bir tool" ayrıştırması, BYOK + tarayıcı-only neden güvenilirlik çarpanı, ve yeniden başlasam önden yapacağım dört şey.

ClaudeAnthropicOpen SourceDeveloper Tools
EN · 8 min

See the prompt before you ship it

Token cost, context-window position, and prompt-caching layout are all knowable from the prompt alone — you don't need to send the request. A worked example where 'feels about the same' was hiding a 6.3× input-length difference, and the pre-flight habit that catches it.

ClaudeAnthropicTokensPrompt Engineering
TR · 6 min

Prompt'u shiplemeden önce gör

Token cost, context-window pozisyonu ve prompt-caching layout'u — hepsi prompt'tan tek başına bilinebilir. "Yaklaşık aynı" hissinin gizlediği 6.3× input-uzunluk farkını yakalayan pre-flight alışkanlığı.

ClaudeAnthropicTokensPrompt Engineering
TR · 7 min

Prompt'un daha iyi değil. Sadece daha iyi hatırlıyorsun.

Çoğu ekip prompt'u hisle iterate edip hafızayla shipliyor. Minimum işe yarayan karşılaştırma: aynı input üzerinde iki prompt'u paralel çalıştırıp output, latency ve cost'u yan yana görmek — side-by-side'ın sıralı versiyonun göremediği şey.

ClaudeAnthropicPrompt EngineeringLLM
TR · 7 min

Tek bir tool yazmadan önce sandbox'ı kur

Çoğu agent ekibi önce tool'ları yazıyor, sonra tasarımın yanlış olduğunu keşfediyor. Tool yanıtlarını mock'la, loop'u el ile rol-yap, kötü tool tasarımlarını codebase'ine dokunmadan on beş dakikada öldür.

ClaudeAnthropicAgentsTool Use
TR · 7 min

Claude agent'larını trace replay ile debug ediyorum

Agent trace'leri garip bir çalışmayı debug etmek için gereken her şeyi içeriyor, ama wall of nested JSON olarak saklanıyor. Yeniden çerçeveleme: onları döküman olarak okumayı bırak, kararların timeline'ı olarak izle. Bir editörde 30 dakika alan bug'lar 30 saniyede bariz oluyor.

ClaudeAnthropicAgentsDebugging
EN · 9 min

Your prompt isn't better. You just remember it being better.

Most teams iterate on prompts by feel and ship by memory. The minimum useful comparison is two prompts in parallel, surfacing output, latency and cost on the same input — what side-by-side reveals that sequential never does.

ClaudeAnthropicPrompt EngineeringA/B Testing
EN · 8 min

Build the sandbox before you write a single tool

Most agent teams write the tools first, then discover the design was wrong. Mock the tool responses, role-play the loop by hand, and kill the bad tool designs in fifteen minutes — before they touch your codebase.

ClaudeAnthropicAgentsTool Use
EN · 9 min

How I debug Claude agents by replaying their trace

Agent traces contain everything you need to debug a weird run, but they're stored as walls of nested JSON. The reframe: stop reading them as documents, start watching them as timelines of decisions. Bugs that take 30 minutes in an editor become obvious in 30 seconds.

ClaudeAnthropicAgentsDebugging
TR · 7 min

Tarayıcıda Claude'a streaming çağrı — SDK olmadan

Resmi Anthropic SDK'sını tarayıcı tarafına almak için neden uğraşmadığım ve onu replace eden ~150 satır TypeScript: tool-use destekli SSE parser'ı, temiz iptal, anlamlı hatalar.

ClaudeAnthropicSSEStreaming
TR · 7 min

Prompt caching, Claude'un en ucuz optimizasyonu. Kimse ölçmüyor.

Her Claude response'u cache-hit verisi taşıyor. Çoğu uygulama bunu hiçbir yere loglamıyor — ve bunun bedelini ödüyor. Kimsenin grafiklemediği hit oranı metriği, ve kendini bir haftada amorti eden dört alanlı log satırı.

ClaudeAnthropicPrompt CachingObservability
TR · 3 min

Gerçekten işe yarayan kurallar ve komutlar

.cursorrules ve slash komutlarını unutulmuş değil faydalı hale getirmek: teoriden değil acıdan başla, listeyi kısa tut, gerçek kullanımdan iterasyon yap.

CursorRulesCommandsWorkflow
EN · 3 min

Rules and Commands That Actually Stick

How to make .cursorrules and slash commands useful instead of forgotten: start from pain, keep the list short, iterate from real usage.

CursorRulesCommandsWorkflow
TR · 2 min

Neden Bazen Sadece Boş Ekrana Bakıyorum

Hiçbir tuşa basmadan ekrana bakmak da işin parçası. Verimlilik kültürüne ters bir itiraf.

MindsetProductivityReflection
TR · 2 min

Bitmemiş Projeler Mezarlığım ve Neden Rahatım

Yarım kalan side project'ler başarısızlık mı? Bence bazen sadece keşfin kendisi.

Side ProjectsMindsetLearning
TR · 2 min

"Best Practice" Dediklerimizin Yarısı Ezber

DRY, test coverage, yorum yazmak… Kurallar bağlam olmadan anlamsız. Cesur bir tez.

Code QualityOpinionSoftware Design
TR · 2 min

Yapay Zeka ile Yazılım Geliştirme: MCP, GPT ve Cursor

LLM araçları, Model Context Protocol (MCP) ve Cursor ile günlük geliştirme pratiğinde nasıl daha verimli olunur.

AIMCPCursorLLM
TR · 1 min

Model Context Protocol (MCP) Nedir?

MCP, AI asistanlarının dosya sistemine, API'lere ve araçlara güvenli erişimini standartlaştıran açık protokol.

MCPAIProtocolDeveloper Tools
TR · 1 min

Cursor IDE ve Prompt Mühendisliği

Cursor’da @dosya, @web kullanımı, net talimatlar ve .cursorrules ile daha tutarlı ve verimli AI kullanımı.

CursorAIPrompt EngineeringIDE