Për agjentët AI
Drejtoni `openemail` nga Claude Code, Codex ose një punë CI: hyrje pa mbikëqyrje, ndihma si të dhëna, ekzekutime provë, fushëveprime që mungojnë dhe kode verifikimi.
Udhëzuesi i integruar
openemail agents shtyp një udhëzues të shkurtër në Markdown për një agjent AI si Claude Code ose Codex, ose për një skript në CI: si të hyjë pa një njeri, të lexojë daljen, të gjejë komandat, të ndryshojë gjërat në mënyrë të sigurt dhe të shfletojë listat, çfarë të bëjë kur mungon një kod verifikimi ose një fushëveprim, dhe pesë receta për t'u kopjuar. openemail agent është e njëjta komandë.
openemail agentsopenemail agents --json | jq -r '.recipes[].commands[]'Me --json udhëzuesi është një dokument i vetëm me schemaVersion, title, intro, sections prej { id, title, points }, exitCodes dhe recipes prej { id, title, commands }. Në vend që t'i ngjitni këto rregulla në çdo prompt, thojini agjentit një herë, në skedarin e udhëzimeve që projekti juaj i jep tashmë, të ekzekutojë openemail agents para se të përdorë CLI-në.
Hyrja pa një njeri
- Përdorni një çelës API. Vendosni
OPENEMAIL_API_KEY, ose kalojini--api-keynjë komande të vetme. Krijojeni te Cilësimet → Çelësat API (openemail open api-keys) vetëm me fushëveprimet që i duhen agjentit. Një çelës nuk hap kurrë shfletues dhe nuk ka nevojë kurrë për kod verifikimi. - Ose ripërdorni një hyrje me shfletues që një njeri e bëri një herë në këtë makinë me
openemail login, dhe zgjidheni me--profile <name>. CLI i rinovon tokenët e vet vetë. - Pa terminal asgjë nuk pyet. Nën
--json,--no-inputoseCI, ose pa terminal të lidhur, një vlerë që CLI do ta kishte pyetur ndalet me kodin e daljes2dhe emërton flamurin që duhet kaluar. - Një hyrje me shfletues ka nevojë që një njeri ta miratojë, ndaj një
openemail loginpa mbikëqyrje ndalet me kodin e daljes2dhe kodinunattendedpara se të regjistrojë ndonjë gjë, dhe drejton teopenemail login --with-token. openemail whoami --jsontregon hapësirën e punës, llojin e hyrjes dhescopese saj.
Leximi i daljes
Kalojini --json çdo komande. Atëherë stdout mban saktësisht një dokument JSON, ose një objekt për rresht me --ndjson, dhe ecuria mbetet në stderr. Një dështim shtyp një rresht {"error":{...}} në stderr: degëzoni sipas kodit të daljes dhe code të tij, tregojini next një njeriu dhe mos e analizoni kurrë message, formulimi i të cilit mund të ndryshojë. Faqja Skriptet rendit çdo fushë dhe çdo kod daljeje.
Komandat si të dhëna
--help --json shtyp ndihmën si një dokument i vetëm JSON, të ndërtuar nga i njëjti regjistër komandash me të cilin CLI analizon, ndaj përputhet gjithmonë me versionin e instaluar. Funksionon në rrënjë, në një grup ose në një komandë, dhe openemail help <command> --json shtyp të njëjtën gjë.
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'Dokumenti
schemaVersionnumber- Ndryshon kur një fushë ndryshon kuptim
cli, versionstring- Gjithmonë `openemail`, dhe versioni që e shtypi
pathstring[]- Komanda e pyetur, bosh për rrënjën
commandsobject[]- Për rrënjën, çdo komandë e nivelit të parë, përndryshe ajo e pyetura, secila me nënkomandat e saj
globalFlagsobject[]- Flamujt që pranon çdo komandë, në të njëjtën formë si flamujt e një komande
subcommandAliasesobject- Çdo alias i përbashkët, si `ls` ose `rm`, dhe foljet në vend të të cilave qëndron
exitCodesobject[]- Çdo kod daljeje si `{ code, name, meaning }`
Një komandë
namestring- Fjala e fundit e komandës
commandstring- Komanda e plotë, si `openemail domains delete`
path, aliasesstring[]- Fjalët pas `openemail` që të çojnë te ajo, dhe emrat e saj të tjerë
summary, descriptionstring- Çfarë bën, në një rresht dhe e plotë
usagestring[]- Si thirret
categorystring | null- Seksioni i saj në `openemail --help` për një komandë të nivelit të parë, përndryshe `null`
group, runnable, hiddenboolean- Nëse ka nënkomanda, nëse ekzekutohet më vete dhe nëse ndihma e lë jashtë
authstring- Hyrja që i duhet: `required`, `browser` vetëm për një hyrje me shfletues, `optional` ose `none`
scopesstring[]- Fushëveprimet API që i duhen çdo ekzekutimi të saj
destructiveboolean- Nëse kërkon konfirmim më parë, të cilit i përgjigjet `--yes`
argumentsobject[]- `name`, `description`, `required` dhe `variadic` të çdo argumenti
flagsobject[]- `name`, `short`, `kind`, `required`, `repeatable`, `choices`, `placeholder`, `description` dhe `hidden` të çdo flamuri
notes, examplesobject[]- Blloqet shtesë të ndihmës si `{ title, lines }`, dhe shembujt si `{ command, note }`
resourceobject | null- Për një komandë burimi, metoda e SDK-së dhe thirrja REST pas saj, përndryshe `null`
subcommandsobject[]- Komandat nën një grup, në të njëjtën formë
Një burim
namespacestring- Hapësira e emrave e SDK-së, si `domains`
sdkMethodstring- Metoda e SDK-së, si `openemail.domains.delete`
sdkMethodAllstring | null- Për një listë, metoda `listAll` që përshkon `--all --json`
httpMethod, httpPathstring- Thirrja REST, si `DELETE` dhe `/domains/{id}`
scopesstring[]- Fushëveprimet që i duhen metodës
authstring- `apiKey`, ose `none` dhe `inboxToken` për një metodë që nuk dërgon çelës API
returnsobject- `{ shape, type }`: forma e përgjigjes, si `object` ose `page`, dhe tipi i saj në SDK
paginatesboolean- Nëse kthen një faqe të një liste
E gjithë pema është rreth një megabajt, pothuajse e gjitha 198 komandat e burimeve, ndaj kërkoni komandën që ju duhet, ose filtrojeni pemën me jq. Teksti i mban thonjëzat e pasme dhe nuk mbart kode ngjyrash, dhe komandat e fshehura si security përfshihen me hidden të vendosur në true.
Ekzekutimet provë
--dry-run funksionon në çdo komandë përveç mcp serve. Leximet ekzekutohen si zakonisht, pastaj kërkesa e parë që do të ndryshonte diçka shtypet në vend që të dërgohet, dhe komanda del me kodin 0 pa bërë asgjë tjetër. Konfirmimet kapërcehen, meqë nuk dërgohet asgjë, ndaj një agjent mund të shohë çfarë do të bënte një komandë shkatërruese pa kaluar --yes.
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 }}- Një ndryshim është çdo kërkesë përveç
GETdheHEAD, një thirrje mjeti MCP, dhe kërkesat e hyrjes dhe daljes sëlogindhelogout. Rinovimi i tokenëve dhedocs askekzekutohen gjithsesi. - Plani tregon metodën, URL-në e plotë, kokat me vlerën e
Authorizationtë shkurtuar nëBearer [redacted], dhe trupin JSON me fushat sekrete, si një çelës Resend, të fshehura. Një ngarkim tregon vetëm madhësinë dhe llojin e përmbajtjes. - Një ndryshim që mbetet në këtë makinë, si
profile use,login --with-tokenose harrimi i një çelësi API të ruajtur, shtyp{"dryRun":true,"local":{"action","profile"}}dhe nuk ruan asgjë. - Një komandë që shtyp atë që lexoi para ndryshimit të saj të parë e tregon atë së pari:
readshtyp bisedën, pastaj kërkesën që do ta shënonte si të lexuar. Kaloni--no-mark-readpër ta lënë jashtë të dytën. mcp servee refuzon--dry-runme kodin e daljes2, sepse klienti i tij vendos çfarë të dërgojë. Në vend të kësaj, shihni paraprakisht një thirrje mjeti meopenemail mcp call <tool> --dry-run.
Fushëveprimet që mungojnë
Çdo komandë i di fushëveprimet API që i duhen gjithmonë, dhe ndihma e saj i rendit. Kur një hyrjeje të ruajtur i mungon një prej tyre, komanda i kërkon API-së një herë listën aktuale, ndaj aksesi i dhënë në faqen e internetit pas hyrjes vlen menjëherë. Nëse fushëveprimi mungon ende, ajo ndalet me kodin e daljes 4 dhe kodin insufficient_scope para se të pyesë ndonjë gjë ose të dërgojë një kërkesë:
{"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}}- Për një hyrje me shfletues,
nextthotë t'i jepni aplikacionit më shumë akses te Llogaria → Rreshti i komandave (openemail open cli, pastaj Redakto aksesin), ose të ekzekutoniopenemail login --forcedhe të zgjidhni më shumë akses. Një hyrjeje me shfletues nuk i jepet kurrëkeys:writeosekeys:manage, ndaj për to drejton te një çelës API. - Për një çelës API,
nextthotë të përdorni një çelës që e ka fushëveprimin. - Një çelës nga
--api-keyoseOPENEMAIL_API_KEYnuk kontrollohet paraprakisht, dhe vendos API. Kur API refuzon një thirrje për një fushëveprim që mungon, gabimi mbart të njëjtinnext.
Kodet e verifikimit
Një çelës API nuk ka nevojë kurrë për kod verifikimi. Një hyrje me shfletues ka nevojë për një para një ndryshimi të ndjeshëm, si shtimi i një webhook-u, krijimi i një rregulli, ndryshimi i një anëtari ose heqja e një domeni, dhe një agjent nuk mund ta shkruajë. Ndaj, para se të ekzekutohet agjenti, një njeri ose ekzekuton openemail verify në një terminal me të njëjtin profil, ose zgjedh Lejo ndryshimet për 60 minuta për atë hyrje te Llogaria → Rreshti i komandave. Secila mbulon 60 minutat e ardhshme.
openemail verifyopenemail verify --status --jsonverify --status --json i tregon agjentit nëse profili është i verifikuar, në elevated, dhe deri kur, në elevatedUntil. Pa verifikim ndryshimi ndalet me kodin e daljes 4 dhe kodin step_up_required, dhe nuk ndryshohet asgjë:
{"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}}Përmes MCP
Një agjent që flet MCP mund të përdorë në vend të kësaj serverin MCP të OpenEmail. openemail mcp config --client claude-code, ose codex, cursor dhe klientët e tjerë që rendit, shtyp konfigurimin, dhe openemail mcp serve është një urë lokale që ripërdor hyrjen me shfletues të kësaj CLI. Çelësat API nuk mund të arrijnë serverin MCP. Faqja AI dhe MCP ka hollësitë.
Receta
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'