<?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: Mustafa</title>
    <description>The latest articles on DEV Community by Mustafa (@mergisi).</description>
    <link>https://dev.to/mergisi</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%2F4217270%2F2c5665fd-119e-4e47-84fd-b5b59380587e.jpg</url>
      <title>DEV Community: Mustafa</title>
      <link>https://dev.to/mergisi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mergisi"/>
    <language>en</language>
    <item>
      <title>How to export your Google Jules data before November 11 (and move to Claude Code or Codex)</title>
      <dc:creator>Mustafa</dc:creator>
      <pubDate>Fri, 30 Oct 2026 12:38:19 +0000</pubDate>
      <link>https://dev.to/mergisi/how-to-export-your-google-jules-data-before-november-11-and-move-to-claude-code-or-codex-72</link>
      <guid>https://dev.to/mergisi/how-to-export-your-google-jules-data-before-november-11-and-move-to-claude-code-or-codex-72</guid>
      <description>&lt;p&gt;Google announced on October 29 that Jules is winding down. The dates, from the &lt;a href="https://jules.google/docs/changelog/2026-10-29/" rel="noopener noreferrer"&gt;official changelog&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Until November 11, 2026:&lt;/strong&gt; you can keep working and finish sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After November 11:&lt;/strong&gt; Jules turns read-only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;December 31, 2026:&lt;/strong&gt; Jules shuts down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your code, branches and pull requests already live in GitHub, so they're safe. What isn't in GitHub is everything Jules kept on its side: settings, environment variables, scheduled tasks, per-repo setup scripts, memories, and the full history of every session. Google published an export for exactly that. Here's how I'd run it, what you get, and where each piece goes in Claude Code or Codex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 0: clean up open work first
&lt;/h2&gt;

&lt;p&gt;Before exporting, go through your open Jules pull requests and merge or close them. Any session you still want to finish has to be done before November 11. After that you can read it, but you can't continue it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: install Jules Tools and sign in
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @google/jules
jules login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;jules login&lt;/code&gt; opens a browser sign-in, so run it yourself in a terminal.&lt;/p&gt;

&lt;p&gt;If you used Jules with GitHub repos, check that your GitHub account is still connected to Jules. Google's note is blunt: if it isn't, the export won't include repository data. A quick test is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jules remote list &lt;span class="nt"&gt;--repo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that fails with a 401 that mentions GitHub, connect the account at &lt;a href="https://github.com/apps/google-labs-jules/installations/select_target" rel="noopener noreferrer"&gt;https://github.com/apps/google-labs-jules/installations/select_target&lt;/a&gt; and try again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: run the official export prompt
&lt;/h2&gt;

&lt;p&gt;The changelog page has an "export prompt" (click "Show the export prompt"). Open a CLI coding agent such as Claude Code &lt;strong&gt;from your home directory&lt;/strong&gt;, paste the whole prompt, and let it work. The prompt tells the agent to check your setup, save a Python script, run it, and report counts. It also tells the agent not to print your token or env var values.&lt;/p&gt;

&lt;p&gt;A few things the prompt itself warns about, worth knowing up front:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The access token expires about an hour after login. If every call returns 401, run &lt;code&gt;jules login&lt;/code&gt; again.&lt;/li&gt;
&lt;li&gt;The script uses undocumented endpoints. If a call starts returning 404 or 400, note which one rather than guessing at a fix.&lt;/li&gt;
&lt;li&gt;Seeing a few more sessions in the export than &lt;code&gt;jules remote list --session&lt;/code&gt; shows is expected.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: know what you got
&lt;/h2&gt;

&lt;p&gt;Everything lands in &lt;code&gt;~/jules-export&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/jules-export/
  user-settings.json
  env-variables.json
  scheduled-tasks.json
  sources.json            # connected repositories
  sessions.json
  repos/&amp;lt;repo&amp;gt;/
    setup.sh              # environment setup script
    test-command.txt
    memories.json
    memories.md
  sessions/&amp;lt;id&amp;gt;/
    session.json
    activities.json       # full activity log
    summary.md            # readable: prompt, plan, outputs
    patch-1.diff ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A repo folder only gets &lt;code&gt;setup.sh&lt;/code&gt; and &lt;code&gt;test-command.txt&lt;/code&gt; if a session recorded them, and only gets memories if it had any. An empty folder isn't necessarily a failed export.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: treat env-variables.json as a secret
&lt;/h2&gt;

&lt;p&gt;This is the part I'd not skip. &lt;code&gt;env-variables.json&lt;/code&gt; contains your environment variable &lt;strong&gt;values&lt;/strong&gt;, not just names. Google says to keep the export folder private and out of your repositories.&lt;/p&gt;

&lt;p&gt;What I do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add &lt;code&gt;jules-export/&lt;/code&gt; to my global gitignore so it can't sneak into a commit.&lt;/li&gt;
&lt;li&gt;Write down the variable &lt;em&gt;names&lt;/em&gt; I need, then put the values into the new home (GitHub Actions secrets, a local &lt;code&gt;.env&lt;/code&gt; that's ignored, your secret manager).&lt;/li&gt;
&lt;li&gt;Rotate anything that's an actual credential. Those values sat with a third party and now sit on disk in plain text.&lt;/li&gt;
&lt;li&gt;Delete &lt;code&gt;env-variables.json&lt;/code&gt; once that's done.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 5: map each file to its new home
&lt;/h2&gt;

&lt;p&gt;Claude Code reads &lt;code&gt;CLAUDE.md&lt;/code&gt; in the repo; Codex reads &lt;code&gt;AGENTS.md&lt;/code&gt;. Both are plain Markdown instructions, so the move is mostly copy and trim.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Jules export&lt;/th&gt;
&lt;th&gt;Where it goes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;repos/&amp;lt;repo&amp;gt;/setup.sh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A "Setup" section in &lt;code&gt;CLAUDE.md&lt;/code&gt; / &lt;code&gt;AGENTS.md&lt;/code&gt;, and the install step of your CI workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;repos/&amp;lt;repo&amp;gt;/test-command.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A "How to test" line in the same file, and the test step in CI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;repos/&amp;lt;repo&amp;gt;/memories.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Paste into &lt;code&gt;CLAUDE.md&lt;/code&gt; / &lt;code&gt;AGENTS.md&lt;/code&gt;, then cut anything stale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;env-variables.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Names into docs/CI, values into secrets (see step 4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scheduled-tasks.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A cron job or GitHub Actions &lt;code&gt;schedule:&lt;/code&gt; trigger (below)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sessions/&amp;lt;id&amp;gt;/patch-N.diff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;git apply&lt;/code&gt; if the work never got pushed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sessions/&amp;lt;id&amp;gt;/summary.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reference only. Useful when you forget why something was done&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A minimal &lt;code&gt;AGENTS.md&lt;/code&gt; built from the export might be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Agent notes&lt;/span&gt;

&lt;span class="gu"&gt;## Setup&lt;/span&gt;
(paste setup.sh here)

&lt;span class="gu"&gt;## Tests&lt;/span&gt;
Run: (paste test-command.txt here)

&lt;span class="gu"&gt;## Things to remember&lt;/span&gt;
(trimmed memories.md)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep it short. A long, outdated memory list gets followed less well than ten lines that are true.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scheduled tasks
&lt;/h3&gt;

&lt;p&gt;Each Jules scheduled task is basically a prompt plus a schedule. Both replacements have a non-interactive mode: &lt;code&gt;claude -p "&amp;lt;prompt&amp;gt;"&lt;/code&gt; for Claude Code, &lt;code&gt;codex exec "&amp;lt;prompt&amp;gt;"&lt;/code&gt; for Codex. You can call either from a local cron, or from a GitHub Actions workflow with an &lt;code&gt;on: schedule:&lt;/code&gt; cron trigger and the API key stored as a repository secret.&lt;/p&gt;

&lt;p&gt;The exact JSON shape of &lt;code&gt;scheduled-tasks.json&lt;/code&gt; isn't documented, so open it and read each task's prompt and schedule by hand. Then run each new job manually once before you trust it on a timer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Unpushed patches
&lt;/h3&gt;

&lt;p&gt;If a session produced code that never became a branch, the diff is still in the export:&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-repo
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; recover-jules-session
git apply ~/jules-export/sessions/&amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/patch-1.diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;git apply --check&lt;/code&gt; first if the repo has moved on since; old patches won't always apply cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: verify while you still can
&lt;/h2&gt;

&lt;p&gt;Between November 11 and December 31 Jules is read-only, which is a good window to compare. Open a few sessions in the Jules UI next to their &lt;code&gt;summary.md&lt;/code&gt; files, check the repo count in &lt;code&gt;sources.json&lt;/code&gt; matches what you had connected, and make sure every scheduled task has a replacement. After December 31 there's nothing left to compare against.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Merge or close open Jules PRs&lt;/li&gt;
&lt;li&gt;[ ] Finish any sessions you need before Nov 11&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;npm install -g @google/jules&lt;/code&gt; and &lt;code&gt;jules login&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Confirm GitHub is connected (&lt;code&gt;jules remote list --repo&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Run the official export prompt from your home directory&lt;/li&gt;
&lt;li&gt;[ ] Keep &lt;code&gt;~/jules-export&lt;/code&gt; out of git; move secrets, rotate credentials&lt;/li&gt;
&lt;li&gt;[ ] Write &lt;code&gt;CLAUDE.md&lt;/code&gt; / &lt;code&gt;AGENTS.md&lt;/code&gt; per repo from setup, test command and memories&lt;/li&gt;
&lt;li&gt;[ ] Rebuild scheduled tasks with &lt;code&gt;claude -p&lt;/code&gt; or &lt;code&gt;codex exec&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;git apply&lt;/code&gt; any unpushed patches&lt;/li&gt;
&lt;li&gt;[ ] Spot-check the export against Jules before Dec 31&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I made a small paid script that does step 5 automatically (CLAUDE.md, AGENTS.md and CI workflows per repo, plus a key-rotation list), $19 at &lt;a href="https://mustafae.gumroad.com/l/zxjwzd" rel="noopener noreferrer"&gt;https://mustafae.gumroad.com/l/zxjwzd&lt;/a&gt;. The manual steps above work fine without it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>githubactions</category>
      <category>jules</category>
    </item>
  </channel>
</rss>
