İçeriğe geç
gündemde

Genel

Claude Code’dan Codex’e geçiş: AGENTS.md, skill ve MCP

Claude Code'daki talimatları, skill'leri ve MCP sunucularını Codex'e taşıma adımlarını ve karşılaşılan sorunları öğrenin.

Yazı: 11 dakikalık okuma

Güncelleme (9 Kasım 2026): Claude Fable 5.2 ve Mythos 5.2 çıktı - fiyatlar, erişim ve benchmark sonuçları Claude Fable 5.2 rehberimde.

👁 112 okunma

3 Kasım’da ChatGPT’nin en üst planına geçtim. Son aylarda bloglar, müzik videoları ve uygulamalarla ilgili tüm işlerimi Claude Code’da yürütüyordum. Projeler hakkında yüzlerce not, kendi hazırladığım altı skill, farklı klasörlerde CLAUDE.md dosyaları ve bağlı MCP sunucuları birikmişti. Codex’i ilk açtığımda bunların hiçbirini bilmiyordu. Yıllardır yalnızca kısa çizgi kullanmama rağmen uzun çizgi yazıyor, Claude’un ezbere bildiği şeyleri tekrar soruyordu.

Taşıma işlemi bir öğleden sonramı aldı. En çok işe yarayan şey dosyaları kopyalamak değil, Codex’in talimatları nerede aradığını anlamak oldu. Aşağıda sürecin tamamını, resmî içe aktarıcıda karşılaştığım hatayı ve şimdi kullandığım betiği anlatıyorum.

Taşıma işleminin özeti

  • Talimatlar: Genel kurallar için ~/.codex/AGENTS.md kullanın. Projelerdeki CLAUDE.md dosyalarını Codex’e okutmak için config.toml dosyasına bir satır ekleyin.
  • Skill’ler: SKILL.md içeren klasörleri ~/.agents/skills dizinine kopyalayın; biçim aynı.
  • MCP: codex mcp add ad --url adres komutunu kullanın. OAuth ile giriş için codex mcp login yazın.
  • Taşımamanız gerekenler: Uzun ve ekran görüntüleriyle dolu eski oturumlar.
  • Hazır betik: Aşağıdan indirebileceğiniz synchronizuj-skille.py.

Claude Code ve Codex’te dosya adları farklı

Claude Code ve Codex benzer işler yapar: dosyalarınızı okur, komut çalıştırır ve kod ya da metin yazar. Fark, kullandıkları dosya adlarında. Claude kuralları CLAUDE.md dosyasında, Codex ise AGENTS.md dosyasında arar. Claude skill’leri ~/.claude/skills dizininde, Codex ~/.agents/skills dizininde tutar. Claude MCP sunucularını JSON dosyasına, Codex ise TOML dosyasına kaydeder. Bu araçların günlük kullanımda nasıl farklılaştığını bilmiyorsanız Codex mi Claude Code mu? yazısıyla başlayabilirsiniz. Burada ikisine de sahip olduğunuzu ve aynı şekilde çalışmalarını istediğinizi varsayıyorum.

Codex, AGENTS.md dosyalarını iki yerde arar. İlki, tüm konuşmalar için geçerli olan Codex ana dizini: ~/.codex/AGENTS.md. İkincisi proje klasörüdür: Codex, depodaki kök klasörden geçerli klasöre kadar ilerler ve her klasörde en fazla bir dosya kullanır. Geçerli klasöre yakın dosyalar daha sonra işleme alınır; bu nedenle genel kuralların üzerine yazabilir. Varsayılan talimat sınırı 32 KiB’dir. Codex, sınırı aşan kısmı uyarı vermeden keser.

1. adım: Genel kuralları AGENTS.md dosyasına ekleyin

Genel bir CLAUDE.md dosyam yoktu; kurallarım Claude Code’un belleğinde ayrı notlar hâlindeydi. Orijinal Lehçe test notlarının çevirisi: Lehçe yaz, yalnızca kısa çizgi kullan, işin sonunda bağlantıları ver, sayı uydurma ve benden izin almadan mağazada yayımlama. Bunları 60 satırlık tek bir ~/.codex/AGENTS.md dosyasında topladım. Her şeyi olduğu gibi yapıştırmak yerine özünü yazmak daha iyi. Talimatlar kısaldıkça her mesajda daha az bağlam kullanırlar.

Dosyanın sonuna eklediğim bir bölüm en büyük farkı yarattı. Claude Code’un bellek klasörünü salt okunur bir bilgi kaynağı olarak gösterdim. Hiçbir şeyi kopyalamadığım için Codex, Claude’un güncel tuttuğu notları her zaman görebiliyor.

## Proje bilgileri
Projelerle ilgili tüm bilgiler Claude Code belleğinde bulunur (salt okunur):
C:\Users\ty\.claude\projects\<proje-adı>\memory\
- Önce indeks olan MEMORY.md dosyasını, ardından ilgili dosyaları açın.
- Bir projeyle ilgili görevde önce bu klasörde arama yapın.

2. adım: Projelerdeki CLAUDE.md dosyalarını olduğu gibi kullanın

Kendi CLAUDE.md dosyası bulunan projelerde ikinci bir dosya oluşturmanız gerekmez. ~/.codex/config.toml dosyasına şu iki satırı ekleyin:

project_doc_fallback_filenames = ["CLAUDE.md"]
project_doc_max_bytes = 65536

İlk satır, AGENTS.md bulunmayan yerlerde Codex’e CLAUDE.md dosyasını okumasını söyler. İkinci satır, sınırı 32 KiB’den 64 KiB’ye çıkarır; bazı proje dosyalarım uzundu. OpenAI, dokümantasyondaki örnekte de 65536 değerini veriyor.

3. adım: Skill’leri ~/.agents/skills dizinine taşıyın

Skill, içinde SKILL.md dosyası bulunan bir klasördür; yanında betikler ve başka kaynaklar da bulunabilir. Biçim ortak olduğu için Claude’daki skill’ler Codex’te değişiklik yapmadan çalışır. Codex, SKILL.md başlığında name ve description adlı iki alan ister. Açıklama, modelin skill’i ne zaman kullanacağını belirler; bu nedenle ne işe yaradığını açıkça yazın.

Önce eski rehberlerde önerildiği gibi skill’leri ~/.codex/skills dizinine kopyaladım. Codex bunları yükledi; ancak güncel dokümantasyonda kişisel skill klasörü olarak ~/.agents/skills gösteriliyor. Ben de dosyaları oraya taşıdım. Bir skill’i elle çağırmak için $ işaretinin ardından adını yazabilir ya da /skills komutunu kullanabilirsiniz. Görev açıklamayla eşleştiğinde model skill’i kendisi de seçebilir.

Çok sayıda skill olduğunda şaşırtıcı bir durum ortaya çıkıyor: Açıklamaların listesi, bağlam penceresinin en fazla yüzde 2’sini kaplıyor. Skill sayısı arttıkça Codex açıklamaları kısaltıyor ve bazılarını uyarı vererek atlayabiliyor. SKILL.md dosyasının tamamı ancak skill kullanıldığında yükleniyor.

Hazır betik: synchronizuj-skille.py

Claude’daki skill’leri sürekli güncellediğim için bir kez kopyalamak yetmedi. Tek komutla taşıma yapan ve Codex’te elle oluşturduğum skill’lere dokunmayan bir betik yazdım. Betik, kopyaladıklarının kaydını tutuyor ve yalnızca bu klasörlerin üzerine yazıyor. Ayrıca her SKILL.md dosyasında name ve description alanlarının bulunup bulunmadığını kontrol ediyor.

synchronizuj-skille.py dosyasını indirin (Python 3.8+, ek kütüphane gerektirmez, Windows, macOS ve Linux’ta çalışır)

Yayımlamadan önce betiği temiz bir klasörde beş durumla test ettim: dosya yazmadan önizleme, ilk kopyalama, skill değişikliğinden sonra yeniden çalıştırma, başlığı olmayan skill ve bulunmayan kaynak klasör. Codex’te zaten aynı adlı bir skill varsa betik ona dokunmadı. Başlığı olmayan skill ise uyarıyla kopyalandı ve çıkış kodu 1 oldu. Lehçe karakterler adlarda ve açıklamalarda sorunsuz çalıştı.

Kullanım:

python synchronizuj-skille.py --na-sucho    # planı göster, hiçbir şey kaydetme
python synchronizuj-skille.py               # ~/.claude/skills -> ~/.agents/skills
python synchronizuj-skille.py --zrodlo D:/moje-skille --zrodlo ~/.claude/skills
python synchronizuj-skille.py --cel ./projekt/.agents/skills

Betik kodunun tamamı:

"""Claude Code'dan Codex'e skill senkronizasyonu.

SKILL.md dosyası içeren skill klasörlerini Claude Code'dan Codex'in
kullanıcı skill'lerini okuduğu klasöre kopyalar. Varsayılanlar:
    kaynak: ~/.claude/skills
    hedef:  ~/.agents/skills

Betik, kopyalanan skill'lerin kaydını tutar (hedef klasörde
.synchronizuj-skille.json). Sonraki çalıştırmalarda yalnızca bunların
üzerine yazar; Codex'te elle oluşturulan skill'leri olduğu gibi bırakır.
Ayrıca SKILL.md dosyasında Codex'in yüklemek için ihtiyaç duyduğu
name ve description alanlarını kontrol eder.

Kullanım:
    python synchronizuj-skille.py                    # varsayılan klasörler
    python synchronizuj-skille.py --na-sucho         # yalnızca yapılacakları göster
    python synchronizuj-skille.py --zrodlo D:/skille --zrodlo ~/.claude/skills
    python synchronizuj-skille.py --cel ./projekt/.agents/skills

Python 3.8+ gerekir; ek kütüphane gerekmez. Windows, macOS ve Linux'ta çalışır.
Senkronizasyondan sonra Codex'i yeniden başlatarak skill'leri yükleyin.
"""
import argparse
import json
import re
import shutil
import sys
from pathlib import Path

REJESTR_PLIK = ".synchronizuj-skille.json"
POMIJAJ = shutil.ignore_patterns("__pycache__", ".git", "node_modules", ".DS_Store")


def sciezka(tekst):
    return Path(tekst).expanduser().resolve()


def sprawdz_frontmatter(skill_md):
    """SKILL.md başlığındaki eksikleri döndürür (boş liste = sorun yok)."""
    tekst = skill_md.read_text(encoding="utf-8", errors="replace")
    m = re.match(r"^---\s*\n(.*?)\n---", tekst, re.S)
    if not m:
        return ["dosyanın başında --- başlığı yok"]
    naglowek = m.group(1)
    return [f"{pole} alanı eksik" for pole in ("name", "description")
            if not re.search(rf"^{pole}\s*:\s*\S", naglowek, re.M)]


def main():
    p = argparse.ArgumentParser(description="Skill'leri Claude Code'dan Codex'e kopyalar.")
    p.add_argument("--zrodlo", action="append", type=sciezka,
                   help="skill klasörü (birden fazla kez kullanılabilir); varsayılan ~/.claude/skills")
    p.add_argument("--cel", type=sciezka, default=sciezka("~/.agents/skills"),
                   help="Codex skill klasörü; varsayılan ~/.agents/skills")
    p.add_argument("--na-sucho", action="store_true", help="hiçbir şey kaydetme, yalnızca planı göster")
    a = p.parse_args()
    zrodla = a.zrodlo or [sciezka("~/.claude/skills")]

    rejestr_plik = a.cel / REJESTR_PLIK
    nasze = set()
    if rejestr_plik.exists():
        nasze = set(json.loads(rejestr_plik.read_text(encoding="utf-8")))

    skopiowane, pominiete, ostrzezenia = [], [], []
    for zrodlo in zrodla:
        if not zrodlo.is_dir():
            print(f"YOK      {zrodlo} - klasör bulunamadı, atlanıyor")
            continue
        for skill in sorted(x for x in zrodlo.iterdir() if (x / "SKILL.md").is_file()):
            cel = a.cel / skill.name
            if skill.name in skopiowane:
                pominiete.append(skill.name)
                print(f"TEKRAR   {skill.name} - önceki kaynaktan zaten kopyalandı, atlanıyor")
                continue
            if cel.exists() and skill.name not in nasze:
                pominiete.append(skill.name)
                print(f"ATLANIYOR {skill.name} - hedefte kopyalamadığım aynı adlı bir skill var")
                continue
            for brak in sprawdz_frontmatter(skill / "SKILL.md"):
                ostrzezenia.append(f"{skill.name}: {brak}")
            if not a.na_sucho:
                a.cel.mkdir(parents=True, exist_ok=True)
                if cel.exists():
                    shutil.rmtree(cel)
                shutil.copytree(skill, cel, ignore=POMIJAJ)
            skopiowane.append(skill.name)
            print(f"{'PLAN' if a.na_sucho else 'TAMAM'}{' ' * (9 - len('PLAN' if a.na_sucho else 'TAMAM'))}{skill.name}  <- {zrodlo}")

    if not a.na_sucho and skopiowane:
        rejestr_plik.write_text(json.dumps(sorted(nasze | set(skopiowane)), ensure_ascii=False, indent=1),
                                encoding="utf-8")

    print(f"\n{'Kopyalanacak' if a.na_sucho else 'Kopyalandı'}: {len(skopiowane)}, atlanan: {len(pominiete)}, hedef: {a.cel}")
    for o in ostrzezenia:
        print(f"UYARI    {o} - Codex, SKILL.md başlığında name ve description alanlarını gerektirir")
    if skopiowane and not a.na_sucho:
        print("Skill'leri yüklemesi için Codex'i yeniden başlatın.")
    return 1 if ostrzezenia else 0


if __name__ == "__main__":
    if hasattr(sys.stdout, "reconfigure"):
        sys.stdout.reconfigure(encoding="utf-8")
    sys.exit(main())

4. adım: MCP sunucularını ekleyin

MCP sunucularını tek komutla ekleyebilirsiniz. Çoğu yeni hizmette olduğu gibi sunucu bir adres üzerinden erişilebiliyorsa şu komutları kullanın:

codex mcp add flashboards --url https://flashboards.yaroflasher.com/api/mcp
codex mcp login flashboards
codex mcp list

FlashBoards’u eklerken hizmette zaten oturum açmış olduğum için Codex tarayıcıda OAuth girişini kendisi açtı. Yerel olarak çalışan sunucuları codex mcp add ad -- komut biçiminde ekleyebilirsiniz. Ortam değişkenlerini ayırıcıdan önce --env ile belirtin. Tüm ayarlar config.toml içindeki [mcp_servers.ad] bölümlerine kaydedilir. Kendi sunucunuzu nasıl oluşturacağınızı 15 dakikada kendi MCP sunucunuzu oluşturun yazısında anlattım.

Hatalı içe aktarıcı ve taşımaya değmeyen oturumlar

Codex’te yerleşik bir içe aktarıcı var. Uygulamanın ayarlarında içe aktarma seçeneği bulunuyor; arka planda migrate-to-codex skill’i, --scan-only, --plan ve --dry-run modlarıyla çalışıyor. Kendi bilgisayarımda denedim. Tarama altı skill buldu, başka hiçbir şey bulmadı: komutlar, alt ajanlar veya genel CLAUDE.md yoktu. İçe aktarıcı proje belleğini de hiç hesaba katmıyor. Oysa benim için en değerli kısım buydu.

--plan modu, Lehçe karakter içeren ilk skill’de hata verdi: UnicodeDecodeError: 'charmap' codec can't decode byte 0x98. Betik, dosyaları sistemin varsayılan kodlamasıyla okuyor; Lehçe Windows’ta bu cp1250. Çözüm, PYTHONUTF8=1 ortam değişkenini ayarlayarak çalıştırmak. Benim betiğim her şeyi UTF-8 olarak okuduğu için bu sorun yaşanmıyor.

İçe aktarıcı, son 30 gündeki konuşmaları Codex konuları olarak da taşıyabiliyor. Ben bu seçeneği kullanmadım; uzun oturumlarda kullanmanızı da önermiyorum. Konuşmaya yapıştırılan ekran görüntüleri dökümün tamamına ekleniyor. Benim Codex Desktop’taki bir konuşma dizim bir keresinde 33 GB’a ulaştı ve uygulama bunu belleğe yüklemeye çalıştı. Codex’te iyi bir AGENTS.md dosyası ve notlara erişimle temiz bir başlangıç yapmak daha iyi.

Codex’in her şeyi gördüğünü nasıl kontrol edersiniz?

Son olarak terminalden Codex’e dört kontrol sorusu sordum: kısa çizgilerle ilgili kuralım ne, hangi skill’leri görüyor, not indeksimin ilk satırlarında ne var ve FlashBoards araçlarına erişebiliyor mu? Kurala ve skill’lere ilk seferde doğru yanıt verdi. Not dosyasına ise ancak tam erişimle (-s danger-full-access) ulaşabildi; çünkü Windows’taki salt okunur korumalı alan hata veriyordu. Uygulamada tam erişimi açınca ek bir bayrak gerekmeksizin çalışıyor.

Codex artık Claude ile aynı kurallara ve bilgilere sahip. Her mesajın maliyetini ve haftalık kullanım sınırınızı aşmadan çalışmayı Codex’te kullanım sınırınızı aşmadan çalışma yazısında anlattım. Sonraki adımda ters yönde ilerledim: Claude Code, OpenAI’nin resmî eklentisiyle görevleri Codex’e veriyor.

Google · KaynaklarınızParıldak'ı Google'ınızda üst sıralara taşıyın - tek tıklaTercih ettiğiniz kaynaklara ekleyin →

Kaynaklar

  • OpenAI, AGENTS.md ile özel talimatlar: https://learn.chatgpt.com/docs/agent-configuration/agents-md
  • OpenAI, Agent Skills: https://learn.chatgpt.com/docs/build-skills
  • OpenAI, Codex CLI’da Model Context Protocol: https://learn.chatgpt.com/docs/extend/mcp?surface=cli
  • OpenAI, Yapılandırma başvuru kaynağı: https://learn.chatgpt.com/docs/config-file/config-reference
  • Daniel Vaughan, Codex CLI ajan geçiş sistemi: https://codex.danielvaughan.com/2026/05/13/codex-cli-agent-migration-system-import-claude-code-sessions-skills-config/
  • Kendi içe aktarma ve yapılandırma testim, Codex CLI 0.162.1, 3 Kasım 2026
// bunları da okuyun

Parıldak'taki benzer konular

Parıldak

Parıldak

YAZAR VE YAYINCI

Yapay zekâyı anlamak ve kullanmak için rehberler, testler ve haberler.

sıradaki yazıkarşılaştırmalarKimya için hangi yapay zekâ? ChatGPT Plus testiChatGPT Plus, kimya problemlerini adım adım çözüyor. Ücretsiz seçenekleri ve stokiyometri ile pH testinin sonuçlarını inceleyin.

En çok okunanlar

  1. 1Higgsfield promo code: resmi kampanyaları kontrol edin
  2. 2Google AI Ultra ne sunuyor? Pro ile farkları
  3. 3Word için yapay zekâ: Türkçe metni Copilot ile düzeltme

// site haritası

parıldak rakamlarla 0arşivdeki yazılar0son 7 günün haberleri
× ‹ büyüt ›