यह सब हो जाने के बाद Codex CLI osFoundry के किसी GitNest repository पर दो काम कर पाएगा। वह आपके terminal session की files को एक branch पर लिखता है, और तैयार change set को pull request के रूप में बाहर निकालता है, चाहे GitNest के अंदर हो या GitHub या GitLab पर draft के रूप में। Codex खुद कुछ भी commit या push नहीं करता। हर काम Codex CLI connection पर "Needs your approval" के नीचे एक card बनकर आता है, जिस पर files, branch या exact commit छपा होता है। जब तक repository owner click नहीं करता, कुछ नहीं होता।

कौन क्या करता है

Codex CLI osFoundry
Login आपका Codex sign-in। Codex के पास osfoundry:read और osfoundry:write वाला osFoundry OAuth token होता है Owner ने Connected tab में connection को एक बार approve किया
क्या भेज सकता है एक branch के लिए ज़्यादा से ज़्यादा 20 UTF-8 files, कुल 200 KB। या एक change set ID, जो एक version और एक composed commit पर pinned हो हर request को expiry वाले proposal के रूप में रखता है
कौन approve करता है हर write call से पहले Codex आपसे पूछता है (default_tools_approval_mode = "writes") Connection owner Approve and create या Approve and publish पर click करता है, बशर्ते repository role अब भी उसके पास हो
कौन लिखता है Codex की तरफ़ से कोई नहीं Approval के बाद osFoundry commit बनाता है, या pull request खोलता है
Provider tokens कभी नहीं भेजे जाते Approval के वक़्त owner का linked GitHub या GitLab account इस्तेमाल होता है, सिर्फ़ change set की अपनी branch के लिए
Merge पहुँच से बाहर लोगों के पास ही रहता है, GitNest में या provider पर

Setup

1. Codex को सिर्फ़ GitNest tools तक सीमित करें

Connection हमेशा की तरह बनता है: header में key icon, Connected tab, Other MCP client, और Codex CLI जैसा कोई display name। यही name हर card और हर notification पर दिखता है, इसलिए ऐसा नाम चुनें जिसे owner पहचान ले।

Codex की तरफ़:

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"] default_tools_approval_mode = "writes" enabled_tools = [ "list_granted_resources", "read_gitnest_repository", "list_gitnest_work", "list_gitnest_checks", "propose_gitnest_file_import", "propose_gitnest_native_publication", "propose_gitnest_provider_publication", ] 
codex mcp login osfoundry 

Server 59 tools list करता है। इस walkthrough को इन्हीं सात की ज़रूरत है। तीन propose_ tools ही ऐसे हैं जिन पर read-only का निशान नहीं है, इसलिए "writes" के साथ Codex चारों read tools खुद चला लेता है और हर proposal से पहले रुककर आपसे पूछता है। यानी लगातार दो approvals: पहला आपका terminal में, फिर owner का osFoundry में। अगर owner आप ही हैं, तो पहला approval बस यह check है कि Codex वही माँगने जा रहा है जो आपका मतलब था।

2. Repository को उस project में डालें जिसमें connection है

Connection किसी GitNest repository को सिर्फ़ project के ज़रिए देखता है। GitNest में repository खोलें और Project section ढूँढें। Picker सिर्फ़ repository owner को मिलता है। Project चुनें, तो toast में "Repository project updated" आएगा। फिर Connected tab में Codex CLI चुनें और Projects के नीचे उसी project के लिए Add to project पर click करें।

File import के लिए native GitNest repository भी चाहिए, यानी ऐसा repository जिसका Git osFoundry में रहता हो। Tool description साफ़ कहता है: "Repository GitNest must be enabled." जो repository सिर्फ़ GitHub को mirror करता है, वह इसके बजाय change set और provider publication वाला रास्ता लेता है।

3. GitHub या GitLab के लिए provider account link करें

propose_gitnest_provider_publication owner के linked Git provider account से push करता है, ठीक उस पल जब owner approve करता है। अगर कोई account linked नहीं है, तो उस approval के पास push करने के लिए कुछ नहीं होता। इसमें से किसी भी चीज़ के लिए Codex को कभी GitHub token की ज़रूरत नहीं पड़ती।

एक असली run

जिस machine पर यह लिखा गया, उस पर Codex installed नहीं है, इसलिए नीचे का session एक simulated Example है। Tool names और argument names live server के tools/list से लिए गए हैं, उस mcp__osfoundry__ prefix के साथ जो Codex जोड़ता है। Repository, files, IDs और जवाब demo content हैं।

Example (simulated) > shop-api has no CI. In osFoundry, put a GitHub Actions workflow that runs `make test` on pull requests, plus the Makefile target, on a branch codex/ci-workflow. • mcp__osfoundry__list_granted_resources {} ← project "Checkout" · GitNest repository "shop-api" • mcp__osfoundry__read_gitnest_repository {"repository_id": "…"} ← native, GitNest enabled, default branch main • mcp__osfoundry__propose_gitnest_file_import { "repository_id": "…", "branch": "codex/ci-workflow", "message": "Add CI workflow and make test target", "files": [ {"path": ".github/workflows/ci.yml", "content": "name: ci\non: [pull_request]\n…"}, {"path": "Makefile", "content": "test:\n\tpython -m pytest -q\n"}], "idempotency_key": "codex-shop-api-ci-0001"} [Codex asks: allow this tool call? → yes] ← proposal waiting for the owner I prepared one commit for shop-api on codex/ci-workflow with two files. Nothing is committed yet. The owner approves it in osFoundry. 

osFoundry में bell पर "Codex CLI proposes GitNest file changes" दिखता है। Connection के panel पर card में "Commit GitNest files in shop-api" लिखा होता है, फिर "Commit to branch: codex/ci-workflow" और commit message। "Review all proposed files (2)" खोलने पर हर file का पूरा text दिखता है, diff summary नहीं। Approve and create commit बना देता है। Decline उसे हटा देता है।

उदाहरण: shop-api का Commit GitNest files card, जिसमें दोनों proposed files खुली हुई हैं

उदाहरण: shop-api का Commit GitNest files card, जिसमें दोनों proposed files खुली हुई हैं

उसी दिन बाद में, जब GitNest में एक change set पहले से composed है:

Example (simulated) > Is the "Add CI workflow" change set green? If so, open it on GitHub as a draft PR. • mcp__osfoundry__list_gitnest_work {"repository_id": "…", "kind": "changes"} ← "Add CI workflow" · version 3 • mcp__osfoundry__list_gitnest_checks {"repository_id": "…", "change_set_id": "…"} ← composed commit 73e59f27bc4f…: unit passed · lint passed • mcp__osfoundry__propose_gitnest_provider_publication { "repository_id": "…", "change_set_id": "…", "expected_change_set_version": 3, "expected_composition_oid": "73e59f27bc4f…", "idempotency_key": "codex-shop-api-ci-pr-0001"} [Codex asks: allow this tool call? → yes] ← proposal waiting for the owner Both checks passed on the composed commit. I asked for a draft GitHub PR of version 3; it opens when the owner approves it in osFoundry. 

Codex pull request के लिए न branch तय करता है, न title, न target। Schema सिर्फ़ change set, उसका पढ़ा हुआ version और उसका पढ़ा हुआ composed commit ही लेता है। draft: false या कोई दूसरा target_branch माँगने पर request किसी तक पहुँचने से पहले ही लौटा दी जाती है।

Card का title "Open a draft GitHub or GitLab pull request in shop-api" होता है। उस पर "Change set: … · expected version 3", "Reviewed commit: 73e59f27bc4f…", एक "Review change set before approving" link, और एक line होती है कि approval क्या करता है: वह "uses your linked Git provider account to push this change-set branch and open a draft pull request"। Button है Approve and publish। जो repository GitNest में ही रहता है, उसके लिए propose_gitnest_native_publication इसका sibling card बनाता है, "Publish GitNest pull request", जो "creates a publication branch and opens a pull request in this native repository"।

उदाहरण: Needs your approval के नीचे एक provider pull request card और एक native publication card

उदाहरण: Needs your approval के नीचे एक provider pull request card और एक native publication card

Card का link GitNest में change set खोलता है। उसके composed commit के checks सबसे ऊपर, review tabs के ऊपर होते हैं, ताकि फ़ैसला लेने से पहले owner वही देखे जो Codex ने देखा।

सीमा कहाँ है

File import में सिर्फ़ text जाता है। हर entry एक path और उसका पूरा content है, इसके अलावा कुछ नहीं। न file mode, न delete, न binary, और पूरा commit 20 files और 200 KB के अंदर रहता है। इससे card पर हर byte पढ़ा जा सकता है। GitNest में owner का अपना browser upload इससे कहीं आगे जाता है (2,000 files, हर एक 8 MB, कुल 32 MB), क्योंकि वहाँ एक इंसान अपनी files खुद commit कर रहा होता है।

Publication एक composed change set से होता है, Codex की बताई किसी branch से नहीं। Card उस version और commit को pin कर देता है जिसे Codex ने देखा था। अगर click से पहले change set फिर से compose हो जाए, तो osFoundry का recheck proposal को मना कर देता है, बजाय ऐसी चीज़ publish करने के जिसे किसी ने review नहीं किया। Approval के वक़्त वह मौजूदा permissions, repository के risk tiers और required checks, और target भी check करता है। ये rules लोग GitNest में Risk tiers और Required checks के नीचे तय करते हैं, और Codex इन्हें छू नहीं सकता।

GitHub या GitLab पर सिर्फ़ change set की अपनी branch हिलती है। Pull request draft के रूप में खुलता है, और push approval के वक़्त owner के linked account से होता है। Codex वह token कभी नहीं देखता, और आपकी बाकी branches push का हिस्सा नहीं होतीं।

Merge इस list में नहीं है। इनमें से कोई भी proposal ज़्यादा से ज़्यादा एक खुले pull request तक जाता है। उसे कौन merge करेगा, और merge से जो कुछ भी trigger हो, वह repository के लोगों के हाथ में रहता है।

दोनों publication tools पर tools/list में openWorldHint: true होता है, file import पर नहीं। Pull request conversation के बाहर के लोगों को भी दिखता है। एक ठीक से बना client इसे पहले पूछने की वजह मानता है, जैसा Codex यहाँ करता है।

आगे, import को किसी ऐसी branch पर आज़माएँ जिसे अभी कोई इस्तेमाल नहीं करता। Codex से कहें कि एक ही नई file propose करे, जैसे CONTRIBUTING.md या कोई CI workflow, card पर "Review all proposed files" खोलें और approve कर दें। GitNest page बताता है कि repository की तरफ़ change sets, checks और publication एक साथ कैसे काम करते हैं।