Yapay Zekâ Koşu Koçum Bir Git Deposu ve Bir Claude Ajanı

Antrenmanı bitiriyorum, saatim senkronize oluyor ve üç dakika sonra analiz depoma yazılmış, hafta yeniden ayarlanmış ve koçum Strava aktivitesinin altına yorumunu bırakmış oluyor. Yazılmış bir uygulama yok, kurulmuş bir sunucu yok, token başına fatura yok: bir Claude aboneliği, AgentsRoom ve Markdown dosyaları. İşte kurulumun tamamı, tekrar edilebilir hâliyle.

Antrenmanımı bitiriyorum. Saatim her zamanki gibi kendiliğinden Strava'ya senkronize oluyor. Duşa giriyorum.

Ben duştan çıkana kadar, hiçbir şeye dokunmadığım hâlde üç şey olup bitiyor. Antrenmanın analizi antrenman depoma yazılıyor. Hafta yeniden ayarlanıyor ve değişikliğin gerekçesi yanına not ediliyor. Strava aktivitesinin altında da koçumun bir yorumu duruyor: antrenmanın ne ettiğini ve cuma için neyi değiştirdiğini söyleyen bir yorum.

Bu koç benim geliştirdiğim bir uygulama değil. Markdown dosyalarından oluşan bir Git deposu, bir Claude aboneliği ve hepsini bir arada tutan AgentsRoom. Yazılmış bir sunucu yok, token başına fatura yok, kurulumu aşağı yukarı bir hafta sonu.

Tamamı şablon olarak yayımlandı: github.com/AgentsRoomDev/running-performance-coach. Klonlayıp boş bırakılan yerleri doldurarak kendinize ait hâle getirebilirsiniz. Bu yazı, kurulumun nasıl çalıştığını parça parça anlatıyor ve "API" sözcüğünü duymuş ama hiç webhook yazmamış birini varsayıyor.

Bağlam olsun diye: uzun zamandır koşuyorum, maratonda 2:47, yarı maratonda 1:13:59, 10 kilometrede 33:45. Bu döngünün hedefi 10 kilometrede yeniden 34 dakikanın altına inmek. Bu, devamı için önemli: bana eşik antrenmanının ne olduğunu yeniden anlatan genel geçer bir koç hiçbir işime yaramaz ve bu kurulumun çözdüğü sorun tam olarak bu.

Antrenmanımın bitişiyle yorum arasında ne oluyor

Zincirin tamamı altı adım:

  1. Saatim aktiviteyi Strava'ya gönderiyor. Bu kısım zaten herkeste oluyor.
  2. Küçük bir Python betiği 15 dakikada bir Strava'ya yeni bir şey olup olmadığını soruyor.
  3. Yeni bir antrenman bulduğunda depomda Markdown biçiminde bir antrenman kartı üretiyor: turlar, ara dereceler, hacim, nabız. Yalnızca ölçülmüş veriler.
  4. Ayrıca aktivitenin Strava'daki başlığını ve açıklamasını yeniden yazıyor ki akışımda artık "Öğleden Sonra Koşusu" yazmasın.
  5. Ardından AgentsRoom'a imzalı bir mesaj gönderiyor, o da antrenman elinde hazır olacak şekilde bir Claude ajanı açıyor.
  6. Bu ajan koçluk işini yapıyor: okuyor, karşılaştırıyor, analizi yazıyor, haftayı yeniden ayarlıyor, commit atıyor, push ediyor, Strava'ya yorum yazıyor ve uzun raporu bana e-postayla gönderiyor.

İlk beş adım teknik tesisat. Altıncısı bu yazının konusu.

Antrenman günlüğü bir veritabanında değil, bir Git deposunda duruyor

Her şeyi değiştiren karar bu ve insanları en çok şaşırtan da bu.

Bir antrenman = bir dosya, journal/2026/2026-09-03.md. Bir hafta = bir dosya, plan/weeks/2026-W36.md. Bir plan değişikliği = mesajında gerekçesiyle birlikte bir commit. Veritabanı yok, şema yok, migrasyon yok, arayüz yok.

Önem sırasına göre üç sonuç:

Koç kendi geçmişini yeniden okuyabiliyor. Üç hafta önce ne yazdığını biliyor ve bunun işe yarayıp yaramadığını kontrol edebiliyor. Antrenmanınızı anlattığınız bir sohbet botu her konuşmada sıfırdan başlar. Deposu olan bir ajanın hafızası vardır ve bu hafızayı bir insan okuyabilir.

Planımı telefonumdan, GitHub uygulamasından okuyorum. Deponun README.md dosyası bir tanıtım sayfası değil, benim gösterge panelim. CLAUDE.md içine yazılmış sözleşme bu konuda açık: README yansıtmadıkça hiçbir planlama bitmiş sayılmıyor. Sonuç: bakımını üstlendiğim hiçbir arayüz yok, buna rağmen bugün ne yapacağımı söyleyen bir ekranım var.

Hiçbir şey geri alınamaz değil. Ajanın yazdığı her şey bir commit. Okuyabilirim, itiraz edebilirim, geri alabilirim. Bu, kendi başına karar veren bir uygulamadan çok farklı bir şey.

Adım 1: Strava küçük bir betiği uyandırıyor

Strava bir API sunuyor: bir programın "bu sporcunun son aktivitelerini bana ver" diye sorabilmesinin yolu. strava_sync.py betiği tam olarak bunu yapıyor ve gelen yanıtı bir antrenman kartına dönüştürüyor.

İlginç olan kısım ağ çağrısı değil, yeniden kurma. Bir saat ham turlar kaydeder. Betiğin bunun hangi antrenman olduğunu çıkarması gerekir:

Lap 1  : 4.40 km in 26'07 (5:56/km)   ← ısınma
Lap 2  : 1.00 km in 3'41  (3:41/km)   ← tekrar 1
Lap 3  : 0.20 km in 1'59  (9:55/km)   ← toparlanma
...                                     → "5 x 1000m r' 2'"

Betik "en hızlı k tur tekrarlardır" biçimindeki bütün bölmeleri deniyor ve ayakta kalanların en iyisini tutuyor. Kulağa basit geliyor ama değil: hıza göre yapılan naif kümeleme, bir ısınma bir toparlanmadan hızlı olur olmaz tuzağa düşüyor.

Her şeyden önce, antrenmanın biçimi saatten yeniden kuruluyor, asla plandan değil. Tersini yapmak cazip geliyor (plan 5 x 1000m diyor, o zaman onu yazalım) ve hata tam olarak bu: bütün mesele başka bir şey yaptığım günleri yakalamak. İkisi ayrıştığında, o ayrışmanın kendisi bulgudur ve koç bunu görür:

Planlanan 3 x 8' → kesintisiz koşuldu

Başlamadan önce iki uyarı.

Strava API'si Haziran 2026'dan beri ücretli bir geliştirici aboneliği istiyor. O olmadan her çağrı 403 Application Status Inactive yanıtı veriyor. Yedek yol var ve şablonun içinde hazır: saatinizden bir TCX dosyası dışa aktarıp import_tcx.py betiğine verin. İçe aktarmadan sonraki her şey aynı şekilde çalışıyor.

Kotalar cömert ama gerçek. Benim uygulamamda okuma için 15 dakikada 300 istek ve günde 3.000 istek. Betik oturmuş düzende geçiş başına bir tane harcıyor, yani günde 96. Tavana çok uzağız ama bu, sonradan değil önceden bakılacak türden bir şey.

Bir Strava API uygulamasının ayarlar sayfası: standart geliştirici katmanı, istemci kimliği, maskelenmiş istemci gizli anahtarı, okuma kapsamındaki erişim ve yenileme belirteçleri ve gösterilen hız sınırları, genel olarak 15 dakikada 600 istek ve günde 6.000 istek, okuma için 15 dakikada 300 ve günde 3.000 istek.

Adım 2: betik ajanı imzayla uyandırıyor

İşin ilginçleştiği yer burası.

Webhook bir sorunun tam tersidir. Beş dakikada bir yeni bir şey var mı diye sormak yerine bir programa bir web adresi verirsiniz, olay gerçekleştiğinde size mesajı o gönderir. Hiçbir şey olmadığı sürece hiçbir şey ödemezsiniz.

AgentsRoom tam olarak bunu sunuyor: bir webhook tetikleyicisi. Uygulamada bir tetikleyici oluşturuyorsunuz, size bir URL ve bir gizli anahtar veriyor. Bu URL'ye JSON mesajı gönderen herkes, yazdığınız prompt ve mesajın içeriği önceden yerleştirilmiş hâlde bir ajan açmış oluyor.

AgentsRoom araç seçici, Triggers simgesinin üzerinde "Agent runs on a schedule or a webhook" yazan bir ipucu balonuyla.

Betiğimin gönderdiği mesaj bilerek çok küçük:

{
  "type": "created",
  "title": "03/09 · 5 x 1000m r' 2'",
  "body": "03/09/2026 antrenmanı Strava'dan içe aktarıldı.\n\nKalite antrenmanı: 5 x 1000m r' 2'\nAra dereceler: 3'41 - 3'40 - 3'38 - 3'40 - 3'35\n\nToplam hacim: 1h07'42 sürede 12.51 km (5:25/km), tırmanış 56 m\nPlanlanan antrenman: RP10-5x1000\n\nAntrenman kartı: journal/2026/2026-09-03.md\nHafta kartı: plan/weeks/2026-W36.md"
}

Orada olmayana dikkat edin: planın metni. Webhook, planlanan antrenmanın kodunu ve kartların yolunu taşıyor, içeriklerini asla. Deposu olan bir ajan onları kendisi gidip okur; olmayan bir ajanın benim iç talimatlarımı almasının bir anlamı yoktur. Kural, Strava'da yayımlanan açıklamalardaki kuralın aynısı.

İmza ve beraberinde gelen tuzak

Bir ajanı açan herkese açık bir URL, onu bulan herkese açık kalamaz. Bu yüzden tetikleyici imzalıdır: betik, paylaşılan gizli anahtarla mesajın bir parmak izini hesaplıyor (terim size bir şey ifade ediyorsa, bir HMAC-SHA256) ve bunu X-AgentsRoom-Signature başlığında gönderiyor. Sunucu aynı parmak izini kendi tarafında yeniden hesaplıyor; tutmazlarsa reddediyor.

İmza olmadan yanıt sert:

{"error":"REJECTED","message":"Signature missing."}

Ve işte bana bir akşama mal olan tuzak. İmza, hatta çıkan tam baytları kapsar, bellekteki nesneyi değil. Bir dosyayı diskteki hâliyle imzalar, sonra başka bir katmanın nesneyi yeniden serileştirmesine izin verirseniz (fazladan bir boşluk, farklı bir anahtar sırası, başka türlü kaçışlanmış bir karakter), sunucunun asla almayacağı bir mesaj için kusursuz geçerlilikte bir imza elde edersiniz. Ret hata ayıklanamaz: iki tarafta da her şey doğru görünür.

Düzeltme tek cümleye sığıyor: serileştirme ve imzalama aynı yerde yapılır. Şablonda ikisini de post_json fonksiyonu yapıyor ve mesajın gövdesine başka hiçbir şeyin dokunmasına izin verilmiyor.

Adım 3: üç katman koça kim olduğunu, burada işlerin nasıl yürüdüğünü ve şu anda ne yapacağını söylüyor

Koçluk yapan bir ajan tek bir büyük prompt değildir. Üç ayrı metindir ve bu ayrım önemlidir.

Katman 1, persona: kim olduğu

AgentsRoom'da ajana iliştirilen bir sistem promptu. Antrenman felsefesini taşıyor ve bilerek spordan bağımsız tutulmuş: herkese koçluk yapabilir.

Göreviniz yalnızca antrenman planları üretmek değil. Sporcunun antrenmanını analiz ederek, güncel formunu anlayarak, gelecek antrenmanları uyarlayarak ona sürekli koçluk yaparsınız. […] Motivasyon botu gibi değil, deneyimli bir antrenör gibi konuşun.

Neyi yapmadığını da söylüyor: bir antrenmanı yalnızca hedef temponun tutturulup tutturulmadığına bakarak yargılamamak, bir derece tahmininin belirsizliğini açıkça belirtmek ve sporcu istiyor diye bir hedefi onaylamamak. Koçu asıl yararlı kılan da bu son satır.

Bunu kendiniz yazmak zorunda değilsiniz: bu persona AgentsRoom ajan kataloğunda Running Performance Coach adıyla yayımlanmış durumda. Tek tıkla kuruluyor, kullanıma hazır.

Katman 2, CLAUDE.md: burada işler nasıl yürüyor

Bu, her oturumun başında okunan sözleşme. İçinde dosya düzeni, düzeni tutarlı tutan kurallar, her öneriyi sınırlayan antrenman ilkeleri ve hepsinden önemlisi ritüel var: bir antrenman bildirildiğinde işletilecek tam sıra.

Kesinlik düzeyini gösterdiği için tek bir alıntı:

Hafta raydan çıktığında feda etme sırası: önce kolay koşulardaki fazladan dakikalar, sonra kuvvet çalışması, sonra uzun koşunun uzunluğu, sonra bir kalite antrenmanı. Asla haftanın tamamı.

Koçun sohbet botu olmaktan çıktığı yer burası. Her seferinde bir iş akışı doğaçlamıyor, benim bir kez yazdığım akışı izliyor. Şablon deposundan tek bir dosya okuyacaksanız, onu okuyun.

Katman 3, tetikleyici promptu: şu anda ne yapılacak

Bu, bir antrenman düştüğünde ajana verilen mesaj. Aktiviteyi şablon değişkenleriyle alıyor: {{event.title}}, {{event.body}}, {{event.url}}. Böylece ajan antrenmanı aramaya gitmek yerine, elinde hazır hâlde başlıyor.

AgentsRoom tetikleyici düzenleyicisi, "Coach · {{event.title}}" adıyla ve "Strava'dan yeni antrenman içe aktarıldı" diye başlayan koç promptuyla, ardından olay değişkenleri, önce CLAUDE.md dosyasını okuma talimatı, gözetimsiz çalışma uyarısı ve ritüelin ilk adımı.

Tetikleyicide durduğu hâliyle iskeleti şöyle:

Strava'dan yeni antrenman içe aktarıldı.

**{{event.title}}** · aktivite {{event.id}}
{{event.url}}

{{event.body}}

---

`training-plan` deposundasın. Önce `CLAUDE.md` dosyasını oku: kanun odur.
Benim dilimde yazarsın ve baştan sona bana doğrudan hitap edersin (§3).

§6 ritüeli geçerli, ama onun **1. adımı zaten yapıldı**: `strava_publish.py`
antrenman kartını oluşturdu ve commit etti. 2. adımdan devam edip sonuna
kadar gidiyorsun. Şu sırayla üç çıktı: **depodaki analiz**,
**Strava aktivitesinin altındaki yorum**, **e-posta**.

⚠️ **Gözetimsiz çalışıyorsun: kimse bir soruyu okumayacak.** Asla hakem
isteme: sen karar verirsin, sen yaparsın ve neyi neden çözdüğünü raporunda
söylersin.

## 1 · Analiz et ve planı ayarla (§6 ritüeli, 2 ile 6 arası adımlar)

1. Önce `git pull --rebase`: kart sunucudan gelmiş olabilir.
2. Şu sırayla oku: bugünün kartı, hafta kartı,
   `athlete/zones-and-paces.md` ve **son 3 antrenman kartı**:
   bir antrenman asla tek başına yargılanmaz.
3. `## Analysis` bölümünü yaz: **önce hüküm**, sonra onu taşıyan sinyaller,
   sonra neyi değiştirdiği.
   ⛔ `## Analysis` zaten doluysa yeniden yazma.
4. Hafta kartını güncelle ve **her** plan değişikliğini gerekçesiyle
   `## Adjustments` altına işle.
5. **`README.md` dosyasını yeniden üret**: telefonumdan okuduğum ekran odur.
6. Commit et ve push et, yollar açık yazılsın, ⛔ asla `git add -A`.

## 2 · Strava'da kudos ve yorum
   ⛔ Strava yorumu HERKESE AÇIKTIR: hedef nabız yok, sakatlık yok,
   iç değerlendirme yok, tahmini bitiş derecesi yok.

## 3 · E-postayla tam rapor

En çok işi ortadaki satır yapıyor: "kimse bir soruyu okumayacak". Ekranın başında kimse yokken çalışan ve hakem isteyen bir ajan hata yapmış olmaz, sadece durur ve siz bunu ertesi gün fark edersiniz.

Hangi model ve bir milyon token neden gösteriş değil

AyarDeğer
ModelClaude Opus, 1M bağlam
Akıl yürütme çabasıYüksek
İzin moduOtonom
Tarayıcı erişimiAçık

AgentsRoom tetikleyici listesi, "Coach · {{event.title}}" satırı, webhook etiketi, "Any service (JSON)" kaynağı, Running Performance Coach projesi ve ajan ayarlarıyla: Opus modeli, yüksek çaba, otonom mod, tarayıcı açık.

Uzun bağlam bir süs değil. Tek bir antrenmanı doğru yargılamak için koç bugünün kartını, hafta kartını, referans tempo tablosunu ve önceki üç antrenmanı okuyor. Bir antrenman asla tek başına yargılanmaz: birikmiş yük, günlerin sıralanışı ve takipteki dikkat noktaları hükmü tümüyle değiştirir. İki saatlik bir uzun koşunun ertesi günü atılan 3'38'lik üç tekrar, dinlenme gününden sonraki aynı 3'38 ile aynı hikâyeyi anlatmaz.

Otonom mod bir savsaklama değil, bir sonuç: ekranın başında kimsenin olmadığı bir çalıştırmada git push işlemini onaylayacak kimse de yoktur. Tarayıcı erişimi ise ajanın gidip Strava'ya yorum yazmasını ve e-postayı göndermesini sağlayan şey: burada elverişli bir API'si olmayan iki iş.

Neyi otomatikleştirdim, neyi bilerek otomatikleştirmedim

En memnun olduğum tasarım kararı bu ve gözden kaçırması kolay.

İçe aktarma işi kaydeder ve yayımlar, asla yargılamaz.

Betiğin yaptığıYapmadığı
Yeni aktiviteleri çekerAnalysis bölümünü doldurmak
Antrenman kartını oluştururHafta kartına dokunmak
Strava'da başlık ve açıklama yazarReferans tempolara dokunmak
Oluşturduğu kartları commit ederHerhangi bir görüş bildirmek

Yargılamaya başlayan bir betik, bağlamsız hükümler üretirdi ve mantığı kimsenin yeniden okumadığı bir kodda donup kalırdı. Yargılamak, haftanın yükünü, günün formunu ve geçen sefer söylenenleri bir arada tutmayı gerektirir: bu koçluk işidir ve bütün dosya önünde olan ajan yapar.

Pratik faydası hemen görülüyor: ajan çalışmadığında (makine kapalı, API çökük), kart yine de vardır. Hiçbir şey kaybolmaz, yalnızca yorum eksiktir ve olayı yeniden oynatmak yeter.

Aynı yöne çeken bir başka tercih: betik neyi zaten işlediğini bilmek için bir durum dosyası tutmuyor. Doğrunun kaynağı Strava'daki açıklamadır. Boşsa yazar; kendi imzasını taşıyorsa geçer; doluysa ve imzasızsa onu siz yazmışsınızdır ve ona dokunmaz. Yerel bir durum dosyası, başka bir makinenin ne yaptığı hakkında hiçbir şey söyleyemezdi; böylece iki makine birbirinin ayağına basmadan paralel çalışabilir.

Depoya kazınmış ve etrafından dolanılmaması gereken iki ayrım kuralı daha:

  • Strava'da yayımlanan açıklama planın metnini asla kopyalamaz: hafta kartımda herkese açık bir aktivitede işi olmayan hedef nabızlar ve iç değerlendirmeler var;
  • elle yazılmış bir açıklamanın üzerine asla yazılmaz.

Aktivitenin altına düşen yorum

Mesele kendini kutlamak değil. Mesele, koçun hükmünün depoyu açmadan, telefonumdan, aktivitenin altından okunabilmesi ve orada, antrenmana bağlı olarak sonsuza kadar kalması.

Bu yüzden yorum bilerek dar: bir hüküm emojisi, hükmü taşıyan sayı ve bunun bir sonraki antrenman için neyi değiştirdiği. Yaklaşık 250 karakter.

✅ 3'38-3'44 hedefine karşılık ortalama 3'39'luk beş tekrar ve blok boyunca düz seyreden nabız. Tempo tablosu tutuyor. Cuma kolay kalıyor: bu haftanın payını harcadın.

Uzun sürüm, yani nabızların, işaretlediğim dikkat noktasının ve gelecek haftanın hacmiyle ilgili kararın olduğu sürüm, depoya ve e-postaya gidiyor. İki kanal, iki okur kitlesi ve sınırı tutan şey prompt.

Yalnızca sahada bozulan üç şey

Bu satırların her biri, o satır olmadan bir şey bozulduğu için var. Yazının geri kalanından daha öğreticiler.

1. Tarayıcıyı sabitleyin. Chrome'da bağlı iki Claude eklentim var. Ajanın hangisini alacağının garantisi yok ve Strava oturumunu yalnızca biri taşıyor. Sonuç: iki çalıştırmanın birinde ajan yanlış tarayıcıda, oturumu kapalı hâlde buluyordu kendini ve hiçbir şeye yorum yazamıyordu. Tarayıcının aygıt kimliğiyle seçilmesi bir oturumdan diğerine saklanmıyor: dolayısıyla bu seçim promptun içine aittir, hangisinin seçileceğini kullanıcıya sorma yasağıyla birlikte. Gözetimsiz çalışırken bir soru kilitlenme demektir.

2. Strava'nın yorum alanında maxlength yok. Tarayıcıda hiçbir şey fazla uzun yazmanızı engellemiyor: gönderirken reddeden sunucu. 600 karakterlik güzel bir paragraf kuran bir ajan bunun tamamını yazıyor, "Yayınla" düğmesine basıyor ve anlamadığı bir hatayla karşılaşıyor. Bu yüzden prompt kısalığı yazımdan önce dayatmalı ve bu durumu öngörmeli: gönderim başarısız olursa kısaltıp yeniden gönderilir, asla iki yoruma bölünmez.

3. Aktivite başına tek koç yorumu. Test için bir olayı yeniden oynattığınızda (başlangıçta bunu çok yaparsınız), bu kural olmadan ajan zaten işlenmiş bir aktivitenin üstüne yorum yığıyor. Bu yüzden prompt, yazmadan önce "Yorumlar" sekmesini okumasını ve orada zaten varsa sırasını pas geçmesini sağlıyor. Depo tarafında da aynı mantık: ## Analysis bölümü zaten doluysa yeniden yazılmaz.

Bunun maliyeti

ParçaNeredeMaliyet
Koç ajanıKendi makinem, AgentsRoom üzerindenClaude aboneliğim
15 dakikalık yoklamaSürekli açık küçük bir Linux makinesi~5 €/ay ya da Raspberry Pi'de sıfır
GünlükÖzel bir Git deposuücretsiz
Strava API'siStrava Developer ProgramStrava'nın fiyatlandırmasına bakın

Bu kurulumda token başına ölçülen bir API anahtarı yok. En çok küçümsendiğini düşündüğüm nokta bu: aynı şey kullanım başına faturalanan bir API üzerine kurulsaydı, her antrenmanda bir sayaç dönerdi ve muhtemelen onu elimde tutmazdım.

Bu hafta sonu kurun

Adımlar sırasıyla. Zaten bir Strava hesabınız ve bir Claude aboneliğiniz varsa bir akşam ayırın.

1. Şablonu klonlayın ve kendinize göre yapın.

git clone https://github.com/AgentsRoomDev/running-performance-coach.git my-coach
cd my-coach
rm -rf .git && git init

Kopyanızı özel yapın. Bir antrenman günlüğü sağlık verisi taşır: nabız, uyku, sakatlıklar. Şablon herkese açık, sizin kopyanız olmamalı.

Ardından şu sırayla doldurun: athlete/profile.md (bir koşucu olarak kim olduğunuz), athlete/records.md (kişisel rekorlarınız), athlete/constraints.md (gerçekten sahip olduğunuz zaman aralıkları), athlete/zones-and-paces.md (referans temposunuz), plan/objective.md (yarış ve hedef), sonra da her {{...}} yer tutucusunu değiştirdiğiniz CLAUDE.md.

Son olarak depoyu Claude ajanınızla açın ve şunu söyleyin: "CLAUDE.md ve athlete/ dizinini oku, sonra bana ilk haftayı kur."

2. Strava'yı bağlayın.

cp .env.example .env && chmod 600 .env
python3 scripts/strava_oauth.py     # tarayıcıda tek tık, bir kez
python3 scripts/strava_sync.py --dry-run

--dry-run hiçbir şey yazmadan neyin yazılacağını gösteriyor. Antrenmanın yeniden kurulmasının size uyup uymadığını kontrol etmenin anı burası.

3. AgentsRoom'da tetikleyiciyi oluşturun. Triggers altında, New trigger:

AlanDeğer
TürWebhook, kaynak generic
Promptdocs/trigger-prompt.md içeriği
Rol / personadocs/coach-persona.md
İzin moduOtonom
Tarayıcı erişimiAçık

AgentsRoom bir URL ve bir imzalama anahtarı üretiyor. İkisini de .env dosyanıza koyun:

WEBHOOK_URL=https://agentsroom.dev/api/triggers/t_xxxxxxxxxxxx
WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxxxx

4. Güvenmeden önce test edin.

python3 scripts/webhook_replay.py scripts/examples/webhook-session.json --dry-run
python3 scripts/webhook_replay.py scripts/examples/webhook-session.json

Bu, bir sonraki koşunuzu beklemeden ve otomatik işin durumuna dokunmadan tetikleyiciye bir antrenman oynatıyor. ✅ HTTP 202 görmelisiniz ve AgentsRoom'da bir ajan sekmesi açılmalı.

5. 15 dakikada bir çalıştırın.

bash scripts/systemd/install.sh          # bir Linux sunucusunda

Bir oneshot birimi artı bir zamanlayıcı: yerleşik bir süreç yok ve makine kapalıyken kaçırılan bir geçiş bir sonraki açılışta telafi ediliyor.

Sürekli açık bir makineniz yoksa bu adımı atlayın: strava_sync.py betiğini canınız istediğinde elle çalıştırın ya da antrenmanınızı ajana bir konuşmada anlatın. CLAUDE.md içindeki ritüel aynı şekilde işliyor. Otomasyonu kaybedersiniz, koçu değil.

Koşunun ötesinde buradan çıkardığım ders

Bu kurulumun koşuya özgü hiçbir yanı yok. Gösterdiği şey, kişisel veri biriktirdiğiniz ve bu veri üzerine yetkin bir görüş almak istediğiniz hemen her alan için yeniden kullanılabilir bir kalıp.

Üç parça, hepsi bu. Hem makinenin hem sizin okuyabildiğiniz bir hafıza olarak Markdown dosyalarından oluşan bir Git deposu. Döngü içinde yoklama yapıp boşuna token yakan bir ajan yerine bir ajanı uyandıran bir olay. Ajanın kim olduğunu, sizde nasıl çalıştığını ve şu anda ne yapması gerektiğini temiz biçimde ayıran üç yapılandırma katmanı.

"Koşu antrenmanı" yerine "banka ekstresi", "kod yazma oturumu", "kan şekeri ölçümü" ya da "okuma notu" koyun: mekanizma değişmiyor.

Sık sorulan sorular

Yapay zekâ koşu koçu kurmak için kod yazmayı bilmek gerekir mi?

Terminalde bir komut çalıştırabilmeniz ve bir metin dosyasını düzenleyebilmeniz yeterli. Şablon deposu klonlanmaya hazır, Python betikleri standart kütüphaneden başka hiçbir şey kullanmıyor (pip install yok), koçluk kısmı da Markdown dosyalarına düz cümlelerle yazılarak ayarlanıyor. Asıl iş teknik değil: bir koşucu olarak kim olduğunuzu ve neyi hedeflediğinizi dürüstçe anlatmak.

Aylık maliyeti ne kadar?

Ajan zaten sahip olduğunuz Claude aboneliğiyle çalışıyor (Pro ya da Max): token başına ölçülen bir API anahtarı yok. Bunun üstüne, Strava'yı 15 dakikada bir yoklamak için sürekli açık duran küçük bir makine isteyebilirsiniz, bir VPS üzerinde ayda yaklaşık 5 euro ya da Raspberry Pi üzerinde sıfır. Özel Git deposu ücretsiz. Geriye Haziran 2026'dan beri ücretli bir geliştirici aboneliği isteyen Strava API'si kalıyor.

Veritabanı yerine neden bir Git deposu?

Çünkü geçmiş okunabilir hâle geliyor: hem koç için hem sizin için. Her antrenman bir Markdown dosyası olarak, her plan değişikliği gerekçesiyle birlikte bir commit olarak duruyor. Ajan üç hafta önce ne yazdığını yeniden okuyup işe yarayıp yaramadığını kontrol edebiliyor, siz de tek satır arayüz yazmadan planınızı telefonunuzdaki GitHub uygulamasından okuyorsunuz.

Webhook nedir, basitçe anlatırsak?

Webhook tersine çalışır: siz servisi sormazsınız, servis size ulaşır. Beş dakikada bir yeni bir şey var mı diye sormak yerine bir programa bir web adresi verirsiniz, olay gerçekleştiğinde size o mesajı gönderir. Burada bu mesajı antrenmanı içeri alan betik gönderiyor, AgentsRoom alıyor ve saniyesinde bir Claude ajanı açıyor. Kurulumu ucuz kılan da bu: döngü içinde yoklama yapan bir ajan her turda token yakar, bir webhook tetikleyicisi ise bir şey olana kadar hiçbir şeye mal olmaz.

Bu kurulum koşu dışında bir spor için de işe yarar mı?

Evet. İçe aktarma saatin turlarını yeniden kuruyor, bisiklet ve yüzme de tur kaydediyor. Değişen şey strateji dosyaları ve antrenman kataloğu, yani sizin yeniden yazdığınız metinler. Mekanizma (içe aktarma, webhook, ajan, depo) yerinde kalıyor.

Ajan yanılıp planımı bozabilir mi?

Yanılabilir ama fazla bir şey bozamaz: yazdığı her şey okuyabileceğiniz, tartışabileceğiniz ve geri alabileceğiniz bir Git commit'i. CLAUDE.md dosyası ona geçmişi yeniden yazmayı, vermediğiniz verileri uydurmayı, gerekçesini kaydetmeden planı değiştirmeyi ve tıbbi tavsiye vermeyi açıkça yasaklıyor. Şüpheli bir ağrıda sizi bir uzmana yönlendirir.


Şablon deposu burada: AgentsRoomDev/running-performance-coach. Klonlayın, temponuzu girin, koçunuz hazır. Ajanı uyandıran parçayı görmek isterseniz webhook tetikleyicileri sayfasında anlatılıyor, AgentsRoom da buradan indiriliyor.

AgentsRoom'u İndirin

Tüm yapay zeka ajanlarınızı, tüm projelerinizde, tek bir pencereden çalıştırın.

ÜcretsizAgentsRoom'u İndir

Yardımcı uygulama: hareket halindeyken ajanlarınızı izleyin

Claude, Codex, Antigravity CLI veya başka bir AI sağlayıcı kullan.

Uzantıyı yükleyin
Chrome Web Store

Hataları ve istekleri doğrudan genel backlogunuza gönderin.

AgentsRoom'a kısa bir bakış.

Çoklu proje
Çoklu sağlayıcı
Çoklu ajan
Canlı durum
Diff ve commit
Mobil uygulama
Canlı önizleme
Ajan ekipleri
Tarayıcı otomasyonu
Backlog odaklı dev
Prompt kütüphanesi
Beceri kütüphanesi
Tüm özellikleri gör

Okumaya devam et