Google announced on October 29 that Jules is winding down. The dates, from the official changelog:
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.
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.
npm install -g @google/jules
jules login
jules login opens a browser sign-in, so run it yourself in a terminal.
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:
jules remote list --repo
If that fails with a 401 that mentions GitHub, connect the account at https://github.com/apps/google-labs-jules/installations/select_target and try again.
The changelog page has an "export prompt" (click "Show the export prompt"). Open a CLI coding agent such as Claude Code from your home directory, 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.
A few things the prompt itself warns about, worth knowing up front:
jules login again.jules remote list --session shows is expected.
Everything lands in ~/jules-export:
~/jules-export/
user-settings.json
env-variables.json
scheduled-tasks.json
sources.json # connected repositories
sessions.json
repos/<repo>/
setup.sh # environment setup script
test-command.txt
memories.json
memories.md
sessions/<id>/
session.json
activities.json # full activity log
summary.md # readable: prompt, plan, outputs
patch-1.diff ...
A repo folder only gets setup.sh and test-command.txt if a session recorded them, and only gets memories if it had any. An empty folder isn't necessarily a failed export.
This is the part I'd not skip. env-variables.json contains your environment variable values, not just names. Google says to keep the export folder private and out of your repositories.
What I do:
jules-export/ to my global gitignore so it can't sneak into a commit..env that's ignored, your secret manager).env-variables.json once that's done.
Claude Code reads CLAUDE.md in the repo; Codex reads AGENTS.md. Both are plain Markdown instructions, so the move is mostly copy and trim.
| Jules export | Where it goes |
|---|---|
repos/<repo>/setup.sh |
A "Setup" section in CLAUDE.md /AGENTS.md , and the install step of your CI workflow |
repos/<repo>/test-command.txt |
A "How to test" line in the same file, and the test step in CI |
repos/<repo>/memories.md |
Paste into CLAUDE.md /AGENTS.md , then cut anything stale |
env-variables.json |
Names into docs/CI, values into secrets (see step 4) |
scheduled-tasks.json |
A cron job or GitHub Actions schedule: trigger (below) |
sessions/<id>/patch-N.diff |
git apply if the work never got pushed |
sessions/<id>/summary.md |
Reference only. Useful when you forget why something was done |
A minimal AGENTS.md built from the export might be:
## Setup
(paste setup.sh here)
## Tests
Run: (paste test-command.txt here)
## Things to remember
(trimmed memories.md)
Keep it short. A long, outdated memory list gets followed less well than ten lines that are true.
Each Jules scheduled task is basically a prompt plus a schedule. Both replacements have a non-interactive mode: claude -p "<prompt>" for Claude Code, codex exec "<prompt>" for Codex. You can call either from a local cron, or from a GitHub Actions workflow with an on: schedule: cron trigger and the API key stored as a repository secret.
The exact JSON shape of scheduled-tasks.json 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.
If a session produced code that never became a branch, the diff is still in the export:
cd your-repo
git checkout -b recover-jules-session
git apply ~/jules-export/sessions/<id>/patch-1.diff
Use git apply --check first if the repo has moved on since; old patches won't always apply cleanly.
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 summary.md files, check the repo count in sources.json matches what you had connected, and make sure every scheduled task has a replacement. After December 31 there's nothing left to compare against.
npm install -g @google/jules and jules remote list --repo)~/jules-export out of git; move secrets, rotate credentialsCLAUDE.md / AGENTS.md per repo from setup, test command and memoriesclaude -p or codex exec
git apply any unpushed patches
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 https://mustafae.gumroad.com/l/zxjwzd. The manual steps above work fine without it.