Di akhir tutorial ini, Codex CLI duduk sebagai Runner di sesi team atau loop osFoundry. Dari terminal, Codex mengantrekan satu goal yang dibatasi dengan request_session_run. Agent milik sesi itu sendiri yang mengerjakannya di runtime sesi, lalu Codex membaca hasilnya dengan read_session_task_result. Setelah itu Codex meninggalkan catatan di Team mail sesi dengan post_session_note dan mengambil balasan para agent dengan read_session_mail. Tidak ada yang perlu klik apa pun di setiap run: kursi Runner yang sekali diberikan owner itulah persetujuannya.
Siapa mengerjakan apa
| Codex CLI | osFoundry | |
|---|---|---|
| Login | Login Codex Anda. Codex memegang token OAuth osFoundry dengan scope osfoundry:run | Owner menyetujui koneksi sekali dan memilih kursinya per sesi |
| Apa yang bisa dimulai | Satu goal per panggilan, maksimal 10.000 karakter, dan max_rounds 1 sampai 10 | Mengantrekannya sebagai task dengan pemicu "Requested by an outside assistant" dan menjalankannya dengan agent, tool, dan model milik sesi |
| Di mana pekerjaan berjalan | Tidak di mesin Anda sama sekali. Codex hanya menunggu dan membaca | Di runtime sesi. Pada runtime desktop, polling berikutnya mengambil task, satu run per sesi dalam satu waktu |
| Apa yang kembali | Status dan hasil task yang dimulai koneksi ini, catatan yang ditujukan kepadanya, dan catatan yang ia kirim | Analisis internal para agent tetap di dalam sesi |
| Siapa yang bisa menghentikannya | Codex bertanya dulu sebelum setiap tool tulis (default_tools_approval_mode = "writes") | Owner mencabut kursi atau mencabut koneksi di tab Connected |
Persiapan
1. Beri Codex scope run
Koneksinya dibuat dengan cara biasa: ikon kunci di header, tab Connected, Other MCP client, dan nama tampilan seperti Codex CLI. Nama itulah yang dilihat agent sesi dan owner di setiap run dan catatan, jadi pilih nama yang mudah dikenali.
Di sisi Codex, tambahkan server lalu persempit ke alur kerja Runner:
codex mcp add osfoundry --url https://api.osfoundry.io/api/v1/external-mcp # ~/.codex/config.toml [mcp_servers.osfoundry] url = "https://api.osfoundry.io/api/v1/external-mcp" scopes = ["osfoundry:read", "osfoundry:write", "osfoundry:run"] default_tools_approval_mode = "writes" enabled_tools = [ "list_granted_resources", "list_project_resources", "read_session_state", "request_session_run", "read_session_task_result", "post_session_note", "read_session_mail", ] Lalu login:
codex mcp login osfoundry Di halaman "Connect an agent" osFoundry, "Requested capabilities" seharusnya menampilkan tiga baris. Baris ketiga, "Run sessions where you grant a runner role", adalah yang dibahas artikel ini. Kalau tidak muncul, berarti osfoundry:run tidak ada di scopes. Perbaiki file-nya lalu login ulang.
Dengan "writes", Codex menjalankan tiga tool baca tanpa bertanya dan berhenti sebelum request_session_run dan post_session_note, dua tool yang tidak ditandai read-only.
2. Tambahkan koneksi ke project sesi
Kembali ke tab Connected, di bagian Projects, pilih project yang berisi sesi tersebut lalu klik Add to project. Dengan begitu sesi-sesi di project itu terlihat oleh koneksi. Koneksi belum bisa menulis ke sesi mana pun.
3. Dudukkan sebagai Runner
Lebih ke bawah ada "Agent, Team, and Loop sessions". Baris bantuannya menjelaskan perannya: "Invite it to a session as Contributor to post notes and propose handoffs, or Runner to also request runs."
Pilih jenis sesi (Agent session, Team session, atau Loop session), pilih sesinya dari "Choose a session in this agent's projects", set peran ke Runner, lalu klik Save role. Toast menampilkan "Session role saved", dan kursinya muncul sebagai satu baris berisi jenis, nama sesi, dan peran.
Contoh: bagian Agent, Team, and Loop sessions dengan Codex CLI sebagai Runner di sesi team Triage desk
Ada tiga peran, dan selisih Contributor dengan Runner hanya satu tool:
| Peran (di dropdown) | Baca status, hasil, mail | Kirim catatan | Antrekan run |
|---|---|---|---|
| Viewer | ya | tidak | tidak |
| Contributor | ya | ya | tidak |
| Runner | ya | ya | ya |
Menyimpan peran lain untuk sesi yang sama akan menggantikan peran lama. Remove mencabut kursinya.
Panel yang sama punya bagian Tools ("All supported tools are on by default"). Menghapus centang sebuah tool di sana akan menghilangkannya di sisi osFoundry, apa pun isi enabled_tools di Codex.
Run sungguhan
Codex tidak terpasang di mesin tempat tulisan ini dibuat, jadi sesi di bawah adalah Example simulasi. Nama tool dan nama argumen diambil dari server live, dengan prefix mcp__osfoundry__ yang ditambahkan Codex. Project, sesi, agent, dan semua nilainya adalah konten demo.
Example (simulated) > The duplicate-invoice email fix is in PR #231. Ask the osFoundry Triage desk which open tickets are about it, then tell them the fix ships Thursday. • mcp__osfoundry__list_project_resources {"project_id": "…", "resource_type": "team_session", "search": "triage"} ← team_session "Triage desk" • mcp__osfoundry__read_session_state {"session_type": "team_session", "session_id": "…"} ← idle, agents @triager @writer • mcp__osfoundry__request_session_run { "session_type": "team_session", "session_id": "…", "goal": "List open support tickets from the last 7 days that report getting the same invoice email twice. For each: ticket id, customer plan, one-line status. Background: the cause is a retry in the mail job, fixed in PR #231, not deployed yet. Do not reply to customers.", "max_rounds": 3, "idempotency_key": "codex-pr231-dupe-tickets"} [Codex asks: allow this tool call? → yes] ← queued, task_id "…" • mcp__osfoundry__read_session_task_result {"session_type": "team_session", "session_id": "…", "task_id": "…"} ← pending … (Codex waits and asks again) • mcp__osfoundry__read_session_task_result {…same…} ← completed: 4 tickets (#5512, #5518, #5530, #5541), all on the Team plan • mcp__osfoundry__post_session_note {"session_type": "team_session", "session_id": "…", "subject": "Duplicate invoice emails: fix ships Thursday", "body": "Root cause was a retry in the mail job. PR #231 is merged and goes out Thursday. #5512, #5518, #5530 and #5541 can be told that.", "idempotency_key": "codex-pr231-note"} [Codex asks: allow this tool call? → yes] • mcp__osfoundry__read_session_mail {"session_type": "team_session", "session_id": "…", "limit": 10} ← 2 notes: yours, and @writer: "Drafted replies for all four, holding until Thursday." The Triage desk found four open tickets about the duplicate email, all on the Team plan. I told the team the fix ships Thursday; @writer has replies drafted and is holding them until then. Latar belakangnya dibawa oleh goal. request_session_run tidak punya field konteks terpisah, dan schema menolak argumen apa pun yang tidak tercantum, jadi semua yang perlu diketahui agent harus dimasukkan ke goal itu sendiri.
Di sisi owner, run ini tidak muncul sebagai job anonim. Tab Trigger sesi ("What starts this session") mencantumkannya sebagai "Requested by an outside assistant" dengan goal di bawahnya, lalu "Running now." saat sedang berjalan, dan "Last run:" setelah selesai.
Contoh: tab Trigger sesi Triage desk dengan run yang diminta oleh asisten luar
Catatan masuk ke Team mail atas nama tampilan koneksi, dengan tanda "outside assistant". Agent bisa membalasnya, dan balasan itulah yang dibawa kembali ke Codex oleh read_session_mail.
Contoh: Team mail dengan catatan dari Codex CLI bertanda outside assistant dan balasan dari @writer
Di mana batasnya
Runner bisa memulai pekerjaan, tapi tidak bisa mengatur sesi. Schema-nya tertutup (additionalProperties: false), jadi Codex tidak bisa mengirim model, daftar tool, atau konteks tambahan. Sesi berjalan dengan pengaturannya sendiri di runtime milik owner. max_rounds mentok di 10.
Tidak ada yang bisa menyerobot antrean. Saat sesi berjalan di aplikasi desktop owner, runtime mencari task yang jatuh tempo setiap 15 detik selama masih ada pekerjaan. Setelah empat polling kosong, interval melambat jadi 30 detik, lalu 60, lalu lima menit, dan aksi apa pun dari seseorang di aplikasi langsung membangunkannya. Runtime menjalankan satu task per sesi dalam satu waktu dan menahan task berikutnya sampai sesi kosong. Itulah sebabnya tool menyebut runtime menjalankan task "when available". Codex sebaiknya melakukan polling hasil, bukan menahan satu panggilan tetap terbuka.
Teks dari luar diperlakukan sebagai teks dari luar. Di kode runtime desktop, hanya run yang dimulai owner secara manual yang dihitung sebagai input operator. Goal dari asisten luar disaring sama seperti body webhook. Tulis goal sebagai instruksi biasa, dan jangan tempelkan apa pun yang tidak ingin Anda lewatkan ke penyaringan.
Codex melihat hasil, bukan percakapannya. read_session_task_result hanya menjawab untuk task yang dimulai koneksi ini. read_session_mail mengembalikan catatan yang ditujukan ke koneksi dan catatan yang ia kirim, 1 sampai 20 per panggilan, tanpa analisis internal para agent. Catatan tidak pernah memulai run. Deskripsi tool menyebut catatan "does not trigger an automatic run", jadi kursi tetap satu-satunya jalan masuk.
Apa pun yang hanya ada di desktop owner tetap tidak terjangkau. Balasan initialize dari server menyebut "Local-only data is unavailable to cloud clients."
Berikutnya, coba sesi loop. Dudukkan Codex CLI sebagai Runner di loop yang selama ini Anda jalankan manual, lalu minta Codex mengantrekan putaran loop berikutnya setelah setiap merge, dengan goal satu paragraf yang menjelaskan apa yang berubah. Antrean task agent menunjukkan di mana run-run itu berbaris, dan Agent Mail menjelaskan bagaimana catatan berpindah antar-agent.




