Yapay zekâ ajanları için
`openemail` komutunu Claude Code, Codex ya da bir CI işinden yönetin: gözetimsiz oturum açma, veri olarak yardım, deneme çalıştırmaları, eksik kapsamlar ve doğrulama kodları.
Yerleşik kılavuz
openemail agents, Claude Code ya da Codex gibi bir yapay zekâ ajanı veya CI'daki bir betik için Markdown biçiminde kısa bir kılavuz yazdırır: bir insan olmadan oturum açmayı, çıktıyı okumayı, komutları bulmayı, bir şeyleri güvenle değiştirmeyi ve listelerde sayfa sayfa ilerlemeyi, bir doğrulama kodu ya da kapsam eksik olduğunda ne yapılacağını ve kopyalanacak beş tarifi anlatır. openemail agent aynı komuttur.
openemail agentsopenemail agents --json | jq -r '.recipes[].commands[]'--json ile kılavuz; schemaVersion, title, intro, { id, title, points } öğelerinden oluşan sections, exitCodes ve { id, title, commands } öğelerinden oluşan recipes içeren tek bir belgedir. Bu kuralları her istemin içine yapıştırmak yerine, projenizin ajana zaten verdiği talimat dosyasında ona bir kez, CLI'yi kullanmadan önce openemail agents komutunu çalıştırmasını söyleyin.
Bir insan olmadan oturum açma
- Bir API anahtarı kullanın.
OPENEMAIL_API_KEYdeğişkenini ayarlayın ya da tek bir komuta--api-keyverin. Anahtarı Ayarlar → API anahtarları (openemail open api-keys) bölümünden, yalnızca ajanın ihtiyaç duyduğu kapsamlarla oluşturun. Bir anahtar asla tarayıcı açmaz ve asla doğrulama kodu gerektirmez. - Ya da bir insanın bu makinede bir kez
openemail loginile açtığı tarayıcı oturumunu yeniden kullanın ve onu--profile <name>ile seçin. CLI token'larını kendisi yeniler. - Terminal olmadan hiçbir şey sorulmaz.
--json,--no-inputya daCIaltında veya bağlı bir terminal yokken, CLI'nin soracağı bir değer2çıkış koduyla durur ve verilmesi gereken bayrağı adıyla söyler. - Bir tarayıcı oturumunu bir insanın onaylaması gerekir, bu yüzden gözetimsiz bir
openemail loginhiçbir şeyi kaydetmeden önce2çıkış kodu veunattendedkoduyla durur veopenemail login --with-tokenkomutunu gösterir. openemail whoami --jsonçalışma alanını, oturum türünü ve onunscopesalanını gösterir.
Çıktıyı okuma
Her komuta --json verin. O zaman stdout tam olarak tek bir JSON belgesi ya da --ndjson ile satır başına bir nesne içerir, ilerleme de stderr'de kalır. Bir hata stderr'e tek bir {"error":{...}} satırı yazdırır: çıkış koduna ve onun code değerine göre dallanın, next değerini bir insana gösterin ve ifadesi değişebilecek olan message değerini asla ayrıştırmayın. Betikler sayfası her alanı ve her çıkış kodunu listeler.
Veri olarak komutlar
--help --json, yardımı CLI'nin ayrıştırırken kullandığı aynı komut kayıt defterinden oluşturulmuş tek bir JSON belgesi olarak yazdırır, bu yüzden her zaman kurulu sürümle eşleşir. Kökte, bir grupta ya da bir komutta çalışır ve openemail help <command> --json aynısını yazdırır.
openemail send --help --jsonopenemail domains delete --help --json | jq '.commands[0] | {scopes, destructive}'openemail help domains --json | jq -r '.commands[0].subcommands[].command'openemail --help --json | jq -r '.commands[].command'Belge
schemaVersionnumber- Bir alanın anlamı değiştiğinde değişir
cli, versionstring- Her zaman `openemail` ve onu yazdıran sürüm
pathstring[]- Sorulan komut, kök için boş
commandsobject[]- Kök için her üst düzey komut, aksi halde sorulan komut, her biri alt komutlarıyla
globalFlagsobject[]- Her komutun aldığı bayraklar, bir komutun bayraklarıyla aynı biçimde
subcommandAliasesobject- `ls` ya da `rm` gibi her ortak takma ad ve yerine geçtiği fiiller
exitCodesobject[]- `{ code, name, meaning }` biçiminde her çıkış kodu
Bir komut
namestring- Komutun son sözcüğü
commandstring- `openemail domains delete` gibi komutun tamamı
path, aliasesstring[]- `openemail` sonrasında ona ulaşan sözcükler ve diğer adları
summary, descriptionstring- Ne yaptığı, tek satırda ve ayrıntılı olarak
usagestring[]- Nasıl çağrılacağı
categorystring | null- Üst düzey bir komut için `openemail --help` içindeki bölümü, aksi halde `null`
group, runnable, hiddenboolean- Alt komutları olup olmadığı, kendi başına çalışıp çalışmadığı ve yardımın onu dışarıda bırakıp bırakmadığı
authstring- Gereken oturum: `required`, yalnızca tarayıcı oturumu için `browser`, `optional` ya da `none`
scopesstring[]- Her çalıştırmasının ihtiyaç duyduğu API kapsamları
destructiveboolean- Önce onay isteyip istemediği; bu onayı `--yes` verir
argumentsobject[]- Her bağımsız değişkenin `name`, `description`, `required` ve `variadic` alanları
flagsobject[]- Her bayrağın `name`, `short`, `kind`, `required`, `repeatable`, `choices`, `placeholder`, `description` ve `hidden` alanları
notes, examplesobject[]- `{ title, lines }` biçiminde ek yardım blokları ve `{ command, note }` biçiminde örnekler
resourceobject | null- Bir kaynak komutu için arkasındaki SDK yöntemi ve REST çağrısı, aksi halde `null`
subcommandsobject[]- Bir grubun altındaki komutlar, aynı biçimde
Bir kaynak
namespacestring- `domains` gibi SDK ad alanı
sdkMethodstring- `openemail.domains.delete` gibi SDK yöntemi
sdkMethodAllstring | null- Bir liste için `--all --json` seçeneğinin dolaştığı `listAll` yöntemi
httpMethod, httpPathstring- `DELETE` ve `/domains/{id}` gibi REST çağrısı
scopesstring[]- Yöntemin ihtiyaç duyduğu kapsamlar
authstring- `apiKey`, ya da API anahtarı göndermeyen bir yöntem için `none` ve `inboxToken`
returnsobject- `{ shape, type }`: yanıtın `object` ya da `page` gibi biçimi ve SDK türü
paginatesboolean- Bir listenin tek bir sayfasını döndürüp döndürmediği
Ağacın tamamı yaklaşık bir megabayttır ve neredeyse tamamı 198 kaynak komutudur, bu yüzden ihtiyacınız olan komutu isteyin ya da ağacı jq ile süzün. Metin ters tırnaklarını korur ve renk kodu içermez; security gibi gizli komutlar da hidden değeri true olarak dahil edilir.
Deneme çalıştırmaları
--dry-run, mcp serve dışındaki her komutta çalışır. Okumalar her zamanki gibi çalışır, sonra bir şeyi değiştirecek ilk istek gönderilmek yerine yazdırılır ve komut başka hiçbir şey yapmadan 0 koduyla çıkar. Hiçbir şey gönderilmediği için onaylar atlanır; böylece bir ajan, yıkıcı bir komutun ne yapacağını --yes vermeden görebilir.
openemail domains delete <domain-id> --dry-runopenemail send --from [email protected] --to [email protected] --subject "Hi" --text "Hello" --dry-run --json{ "dryRun": true, "request": { "method": "POST", "url": "https://api.openemail.uk/emails", "headers": { "accept": "application/json", "authorization": "Bearer [redacted]", "content-type": "application/json", "idempotency-key": "58e6fb61-ad2e-401e-b141-7a0546c7c749", "user-agent": "openemail-cli/0.0.1 openemail-sdk/0.0.5" }, "body": { "from": "[email protected]", "to": [ "[email protected]" ], "subject": "Hi", "text": "Hello" }, "raw": null }}- Bir değişiklik;
GETveHEADdışındaki her istek, bir MCP aracı çağrısı veloginilelogoutkomutlarının oturum açma ve kapatma istekleridir. Token yenileme vedocs askyine de çalışır. - Plan; yöntemi, tam URL'yi,
AuthorizationdeğeriBearer [redacted]olarak kısaltılmış başlıkları ve Resend anahtarı gibi gizli alanları maskelenmiş JSON gövdesini gösterir. Bir yükleme yalnızca boyutunu ve içerik türünü gösterir. profile use,login --with-tokenya da kayıtlı bir API anahtarını unutmak gibi bu makinede kalan bir değişiklik{"dryRun":true,"local":{"action","profile"}}yazdırır ve hiçbir şey kaydetmez.- İlk değişikliğinden önce okuduğunu yazdıran bir komut bunu önce gösterir:
readkonuşmayı, ardından onu okundu olarak işaretleyecek isteği yazdırır. İkincisini dışarıda bırakmak için--no-mark-readverin. mcp serve,--dry-runseçeneğini2çıkış koduyla reddeder, çünkü ne gönderileceğine istemcisi karar verir. Bunun yerine tek bir araç çağrısınıopenemail mcp call <tool> --dry-runile önizleyin.
Eksik kapsamlar
Her komut her zaman ihtiyaç duyduğu API kapsamlarını bilir ve yardımı bunları listeler. Kayıtlı bir oturumda bunlardan biri eksik olduğunda komut güncel listeyi API'den bir kez ister, böylece oturum açıldıktan sonra web sitesinde verilen erişim hemen geçerli olur. Kapsam hâlâ eksikse, bir şey sormadan ya da bir istek göndermeden önce 4 çıkış kodu ve insufficient_scope koduyla durur:
{"error":{"type":"cli_error","code":"insufficient_scope","message":"This sign-in does not have the emails:send permission, which openemail send needs.","hint":null,"next":"Give this app more access in Account settings, Connected apps (openemail open apps, then Edit access), or run openemail login --force and choose more access.","status":null,"requestId":null,"param":null,"docUrl":null,"exitCode":4}}- Bir tarayıcı oturumu için
next, uygulamaya Hesap → Komut satırı bölümünden daha fazla erişim vermenizi (openemail open cli, ardından Erişimi düzenle) ya daopenemail login --forceçalıştırıp daha fazla erişim seçmenizi söyler. Bir tarayıcı oturumuna aslakeys:writeya dakeys:manageverilmez, bu yüzden bunlar için bir API anahtarına yönlendirir. - Bir API anahtarı için
next, o kapsama sahip bir anahtar kullanmanızı söyler. --api-keyya daOPENEMAIL_API_KEYile gelen bir anahtar önceden denetlenmez ve kararı API verir. API bir çağrıyı eksik kapsam yüzünden reddettiğinde hata aynınextdeğerini taşır.
Doğrulama kodları
Bir API anahtarı asla doğrulama kodu gerektirmez. Bir tarayıcı oturumu ise bir webhook eklemek, bir kural oluşturmak, bir üyeyi değiştirmek ya da bir alan adını kaldırmak gibi hassas bir değişiklikten önce kod gerektirir ve bir ajan bu kodu yazamaz. Bu yüzden ajan çalışmadan önce bir insan ya aynı profille bir terminalde openemail verify çalıştırır ya da Hesap → Komut satırı bölümünde o oturum için 60 dakika boyunca değişikliklere izin ver seçeneğini seçer. İkisi de sonraki 60 dakikayı kapsar.
openemail verifyopenemail verify --status --jsonverify --status --json, ajana profilin doğrulanıp doğrulanmadığını elevated alanında, ne zamana kadar doğrulandığını da elevatedUntil alanında söyler. Doğrulama olmadan değişiklik 4 çıkış kodu ve step_up_required koduyla durur ve hiçbir şey değişmez:
{"error":{"type":"cli_error","code":"step_up_required","message":"This action needs a verification code, and there is no interactive terminal to ask for one.","hint":null,"next":"Run openemail verify in an interactive terminal first, then run this again within 60 minutes. An API key never needs a code.","status":403,"requestId":"req_9Qm4tV","param":null,"docUrl":"https://openemail.uk/docs/api/errors#step_up_required","exitCode":4}}MCP üzerinden
MCP konuşan bir ajan bunun yerine OpenEmail MCP sunucusunu kullanabilir. openemail mcp config --client claude-code ya da codex, cursor ve listelediği diğer istemciler kurulumu yazdırır; openemail mcp serve ise bu CLI'nin tarayıcı oturumunu yeniden kullanan yerel bir köprüdür. API anahtarları MCP sunucusuna ulaşamaz. Ayrıntılar Yapay zekâ ve MCP sayfasında.
Tarifler
openemail inbox --unread --limit 20 --jsonopenemail inbox --unread --json | jq -r '.items[].id'openemail read CAHk7pQ2x9LmZ4 --no-mark-read --jsonopenemail send --from [email protected] --to [email protected] --subject "Weekly report" --body-file report.md --idempotency-key weekly-report-39 --jsonopenemail domains create --domain example.com --dry-run --jsonopenemail domains create --domain example.com --jsonopenemail whoami --json | jq '.scopes'