<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Serhii Tkachenko </title>
    <description>The latest articles on DEV Community by Serhii Tkachenko  (@serjik85).</description>
    <link>https://dev.to/serjik85</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F714941%2Fb801c158-e0df-4940-9d2c-3c300c76ce40.jpeg</url>
      <title>DEV Community: Serhii Tkachenko </title>
      <link>https://dev.to/serjik85</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/serjik85"/>
    <language>en</language>
    <item>
      <title>Codex asked for a phone number I no longer have - here's how I signed in on Raspberry Pi</title>
      <dc:creator>Serhii Tkachenko </dc:creator>
      <pubDate>Mon, 13 Jul 2026 21:13:58 +0000</pubDate>
      <link>https://dev.to/serjik85/codex-asked-for-a-phone-number-i-no-longer-have-heres-how-i-signed-in-on-raspberry-pi-1878</link>
      <guid>https://dev.to/serjik85/codex-asked-for-a-phone-number-i-no-longer-have-heres-how-i-signed-in-on-raspberry-pi-1878</guid>
      <description>&lt;p&gt;I use a Raspberry Pi as a small home development server, so I wanted to run OpenAI Codex on it and control it from my phone. Installing Codex CLI over SSH was easy. The difficult part was signing in when OAuth required an old phone number I could no longer access, and then making the Pi appear as its own online computer in ChatGPT Remote.&lt;/p&gt;

&lt;p&gt;At first, I assumed this was not possible. ChatGPT Remote is usually presented as a feature for the desktop app on Windows and macOS. However, the current Codex CLI also contains &lt;code&gt;remote-control&lt;/code&gt; commands. After testing them on my Raspberry Pi, I got the result I wanted: the Pi appeared in the ChatGPT mobile app under its own hostname, and I could open its projects and continue Codex conversations remotely.&lt;/p&gt;

&lt;p&gt;There were two separate problems to solve. First, Codex had to be authenticated on the Pi even though the new OAuth flow requested verification through an inaccessible number. Second, its remote-control daemon had to remain running before the phone could pair with it. Here is the full process that worked for me.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Remote Control availability can depend on your ChatGPT account, workspace, app version, and staged feature rollout. The commands below exist in the current Codex CLI, but the Remote interface may not yet appear for every user.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;p&gt;I used the following setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Raspberry Pi running a 64-bit Linux distribution&lt;/li&gt;
&lt;li&gt;Internet access on the Pi&lt;/li&gt;
&lt;li&gt;SSH access to the Pi&lt;/li&gt;
&lt;li&gt;A ChatGPT account with Codex access&lt;/li&gt;
&lt;li&gt;The latest ChatGPT app on an Android or iOS phone&lt;/li&gt;
&lt;li&gt;A recent version of Codex CLI&lt;/li&gt;
&lt;li&gt;Another trusted computer where Codex is already signed in, if you cannot complete a new login on the Pi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need to expose a port on your router. Remote Control uses an outgoing connection and a secure relay. The pairing command communicates with a local Unix socket on the Pi, not with a public TCP port.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Install Codex CLI on the Raspberry Pi
&lt;/h2&gt;

&lt;p&gt;Connect to the Pi locally or over SSH, then run OpenAI's Linux installer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://chatgpt.com/codex/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj3dy704x82nre4jizvf4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj3dy704x82nre4jizvf4.png" alt="Installing Codex CLI on Raspberry Pi" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The installer places Codex in &lt;code&gt;~/.local/bin&lt;/code&gt; and adds that directory to your shell configuration. However, the terminal window that ran the installer may not reload the updated &lt;code&gt;PATH&lt;/code&gt; automatically.&lt;/p&gt;

&lt;p&gt;If you immediately see &lt;code&gt;codex: command not found&lt;/code&gt;, do not reinstall Codex. Activate the new path in the current terminal instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the command is still not found, use the exact temporary command printed by the installer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.local/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now check that Codex is available:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzymbhjn8ojdzwwlyzvi5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzymbhjn8ojdzwwlyzvi5.png" alt="Codex version after updating PATH" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can update Codex later by running the same installer again.&lt;/p&gt;

&lt;p&gt;Next, enter the directory containing the project you want Codex to use and launch it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/your-project
codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;~/your-project&lt;/code&gt; with a real folder. It is only an example path.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Try the normal Codex sign-in
&lt;/h2&gt;

&lt;p&gt;On a normal setup, running &lt;code&gt;codex&lt;/code&gt; starts the ChatGPT sign-in flow. Codex also offers device authentication for remote or headless computers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex login &lt;span class="nt"&gt;--device-auth&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow the URL and code printed in the terminal. Once authentication is complete, verify it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex login status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The successful result should say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Logged in using ChatGPT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0el46hjn592eaa46qjz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0el46hjn592eaa46qjz.png" alt="Codex login status on Raspberry Pi" width="799" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the regular login works, skip to the Remote Control section below.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Copy an existing Codex login to the Pi
&lt;/h2&gt;

&lt;p&gt;I ran into an unusual account problem. I could use ChatGPT normally, but the new Codex OAuth flow requested verification through an old phone number that I no longer had. Device authentication led to the same verification page.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; This does not bypass phone verification or create a new authenticated session. It transfers an existing valid Codex login between two computers owned by the same user. Both computers must be trusted and belong to you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Codex was already signed in on my Windows PC, so I used OpenAI's documented fallback for a trusted remote machine: I copied its existing &lt;code&gt;auth.json&lt;/code&gt; credential cache to the Pi.&lt;/p&gt;

&lt;p&gt;This can also be useful for headless systems where completing a browser login is inconvenient.&lt;/p&gt;

&lt;p&gt;First, make sure the authenticated computer actually has the file. In Windows PowerShell, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;USERPROFILE&lt;/span&gt;&lt;span class="nx"&gt;\.codex\auth.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it exists, copy it to your Pi. Replace the username, hostname, and home directory if yours are different:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;scp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;USERPROFILE&lt;/span&gt;&lt;span class="nx"&gt;\.codex\auth.json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;serhii&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;raspberrypi:/home/serhii/auth.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the hostname cannot be resolved, use the Pi's local IP address instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;scp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;USERPROFILE&lt;/span&gt;&lt;span class="nx"&gt;\.codex\auth.json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;serhii&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;192.168.1.144:/home/serhii/auth.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F95unhjmr162lxssz3njl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F95unhjmr162lxssz3njl.png" alt="Copying auth.json from Windows to Raspberry Pi" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, on the Raspberry Pi, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.codex
&lt;span class="nb"&gt;mv&lt;/span&gt; ~/auth.json ~/.codex/auth.json
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.codex/auth.json
codex login status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After I did this, Codex reported that it was logged in using ChatGPT and worked without asking me to verify the old phone number again.&lt;/p&gt;

&lt;p&gt;There are several security rules you should not ignore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only copy this file between computers you own and trust.&lt;/li&gt;
&lt;li&gt;Treat &lt;code&gt;auth.json&lt;/code&gt; like a password because it contains access and refresh tokens.&lt;/li&gt;
&lt;li&gt;Never upload it to GitHub, cloud notes, a support ticket, a forum post, or a chat.&lt;/li&gt;
&lt;li&gt;Never include its contents in a screenshot.&lt;/li&gt;
&lt;li&gt;Do not run &lt;code&gt;codex logout&lt;/code&gt; on the source machine immediately before copying the file.&lt;/li&gt;
&lt;li&gt;Avoid using independent copies simultaneously on multiple machines because refresh-token rotation can invalidate one of them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your system may store credentials in the operating system keychain instead of &lt;code&gt;auth.json&lt;/code&gt;. In that case, this file-copy method will not apply until file-backed credential storage is configured.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa8c71repy8s22dp50llp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa8c71repy8s22dp50llp.png" alt="Codex authenticated on Raspberry Pi" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcqvacdz8cp3hur3mrduh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcqvacdz8cp3hur3mrduh.png" alt="Codex working after auth.json transfer" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Enable Remote Control in Codex CLI
&lt;/h2&gt;

&lt;p&gt;On the Raspberry Pi, enable the Remote Control feature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex features &lt;span class="nb"&gt;enable &lt;/span&gt;remote_control
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Codex should confirm that the feature was enabled in &lt;code&gt;config.toml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgq4bovpom74evymp3rww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgq4bovpom74evymp3rww.png" alt="Enabling Codex Remote Control" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can run Remote Control in the foreground for a quick test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex remote-control
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, closing the terminal or pressing &lt;code&gt;Ctrl+C&lt;/code&gt; stops that process. For an always-on Raspberry Pi, start the local daemon instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex remote-control start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important difference is that &lt;code&gt;start&lt;/code&gt; leaves the app-server running in the background. This was the missing step in my setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvt2kb4dkzphkc9g6o40u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvt2kb4dkzphkc9g6o40u.png" alt="Starting the Codex Remote Control daemon" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Pair the Raspberry Pi with ChatGPT on your phone
&lt;/h2&gt;

&lt;p&gt;After the daemon is running, create a short-lived manual pairing code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex remote-control pair
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open ChatGPT on your phone, go to &lt;strong&gt;Remote&lt;/strong&gt;, and complete the pairing flow with the code shown in the terminal. Make sure the phone and Codex CLI use the same ChatGPT account and workspace.&lt;/p&gt;

&lt;p&gt;Do not publish a screenshot while the pairing code is still valid. Pair first, wait for the code to expire, and only then make a redacted screenshot if you need one for documentation.&lt;/p&gt;

&lt;p&gt;After pairing, my Raspberry Pi appeared in the app as &lt;code&gt;raspberrypi&lt;/code&gt; with a green online indicator. I could see its projects and Codex threads and continue working with them from my phone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgns5vrdufneijd9q1mab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgns5vrdufneijd9q1mab.png" alt="Raspberry Pi online in ChatGPT Remote" width="799" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmjrmiq5fkooxcg28uzpi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmjrmiq5fkooxcg28uzpi.png" alt="ChatGPT Remote on a phone" width="489" height="1077"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv4aob1jfz74c1wm1tw0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv4aob1jfz74c1wm1tw0r.png" alt="A Codex task opened remotely on a phone" width="488" height="1075"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Test a real task
&lt;/h2&gt;

&lt;p&gt;From the Pi, open a project and launch Codex:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/your-project
codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside Codex, try a harmless instruction such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Explain the structure of this project and identify its entry point.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can then open the same task from ChatGPT Remote on your phone, send a follow-up instruction, review output, and approve actions when requested.&lt;/p&gt;

&lt;p&gt;One easy mistake is typing a natural-language Codex prompt directly into Bash. If Bash responds with something such as &lt;code&gt;command not found&lt;/code&gt;, start &lt;code&gt;codex&lt;/code&gt; first and enter the request at the Codex prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;Connection refused&lt;/code&gt; when running &lt;code&gt;pair&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;I initially received this error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: failed to connect to ~/.codex/app-server-control/app-server-control.sock
Connection refused (os error 111)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does not mean you need to open a firewall port. It means &lt;code&gt;pair&lt;/code&gt; found the local control socket, but the app-server daemon was not running. Start it and try again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex remote-control start
codex remote-control pair
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In my case, I had previously run Remote Control in the foreground and stopped it with &lt;code&gt;Ctrl+C&lt;/code&gt;. Starting the daemon fixed the error.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;codex: command not found&lt;/code&gt; immediately after installation
&lt;/h3&gt;

&lt;p&gt;The standalone installer normally puts the executable in &lt;code&gt;~/.local/bin&lt;/code&gt; and updates &lt;code&gt;.bashrc&lt;/code&gt; for future terminals. The current terminal may still be using the old &lt;code&gt;PATH&lt;/code&gt;. Reload the shell configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or update &lt;code&gt;PATH&lt;/code&gt; directly for the current session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.local/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then verify the installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running the installer repeatedly will not fix an unchanged &lt;code&gt;PATH&lt;/code&gt; in the already-open terminal.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Raspberry Pi does not appear in the app
&lt;/h3&gt;

&lt;p&gt;Try the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update Codex by running the installer again.&lt;/li&gt;
&lt;li&gt;Update the ChatGPT mobile app.&lt;/li&gt;
&lt;li&gt;Confirm both devices use the same ChatGPT account and workspace.&lt;/li&gt;
&lt;li&gt;Confirm authentication with &lt;code&gt;codex login status&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Restart the daemon with &lt;code&gt;codex remote-control stop&lt;/code&gt;, followed by &lt;code&gt;codex remote-control start&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Generate a fresh code with &lt;code&gt;codex remote-control pair&lt;/code&gt; because pairing codes expire quickly.&lt;/li&gt;
&lt;li&gt;Fully close and reopen the ChatGPT mobile app.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the &lt;code&gt;remote-control&lt;/code&gt; command is not present, inspect the installed CLI version and available commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nt"&gt;--version&lt;/span&gt;
codex remote-control &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feature availability can vary by rollout or workspace policy. Managed ChatGPT workspaces can also disable Remote Control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Codex warns that Bubblewrap is missing
&lt;/h3&gt;

&lt;p&gt;My Pi displayed a warning about &lt;code&gt;bubblewrap&lt;/code&gt;. Codex could still use its bundled fallback, so this was not the reason Remote Control failed. If your distribution provides the package and you want to remove the warning, install it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;bubblewrap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why I prefer the Raspberry Pi as a Codex host
&lt;/h2&gt;

&lt;p&gt;A Raspberry Pi is quiet, uses little power, and can stay online without tying up my main PC. My projects and development tools remain on the Pi, while the ChatGPT mobile app becomes a convenient remote interface. I can start a task from my phone, check progress, answer Codex questions, and review results without carrying a laptop.&lt;/p&gt;

&lt;p&gt;This setup does not make the Pi a public server and does not require port forwarding. It simply combines Codex CLI's local access to the Pi with ChatGPT's paired Remote interface.&lt;/p&gt;

&lt;p&gt;The most important lesson from my troubleshooting was that authentication and pairing are separate. A successful Codex login does not automatically make the Pi appear in Remote. The app-server daemon must be running before &lt;code&gt;codex remote-control pair&lt;/code&gt; can create a usable pairing code. Once I corrected that, the connection worked immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/cli" rel="noopener noreferrer"&gt;OpenAI Codex CLI overview and installer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/cli/reference" rel="noopener noreferrer"&gt;OpenAI Codex CLI command reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/auth" rel="noopener noreferrer"&gt;OpenAI Codex authentication and &lt;code&gt;auth.json&lt;/code&gt; transfer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/remote-connections" rel="noopener noreferrer"&gt;OpenAI Remote connections documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>raspberrypi</category>
      <category>openai</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
