Import from Google Jules
Jules becomes read-only on November 11, 2026 and shuts down on December 31, 2026. This guide takes a Jules workspace and lands it in Halvin: repositories, setup scripts, test commands, memories, scheduled tasks and every session with its patches.
Before you start
- A Jules workspace you can still export from (Jules read-only still allows export per its changelog).
- A Halvin account — sign-in uses GitHub.
- The zip must be 100 MB or smaller.
1. Export from Jules
Use Google's official export script; the current instructions live in the Jules changelog. The script writes a folder named jules-export/.
2. Zip the folder
Zip the jules-export/ folder itself, not its contents, so the archive root contains jules-export/. The importer expects these paths:
jules-export/user-settings.json,env-variables.json,scheduled-tasks.json,sources.json,sessions.jsonjules-export/repos/<source-id>/{memories.json,memories.md,setup.sh,test-command.txt}jules-export/sessions/<task-id>/{session.json,activities.json,patch-<n>.diff,summary.md}
These files come from undocumented Google endpoints, so the parser is deliberately lenient: every field is optional, unknown keys are ignored, and a missing optional file produces a warning instead of a failure.
3. Upload and watch the status
- Open
/import. - Choose the zip and press “Upload & Import”.
- The status moves
pending → processing → done. Counts appear for repositories, sessions, patches, scheduled tasks, memories, env vars and setup scripts. - Re-uploading the same archive is safe: rows are updated, not duplicated.
4. Read the result
/reposlists each repository with its setup script and test command./sessionslists imported sessions;/sessions/<id>shows the prompt, the plan, the patches with diffs, and the summary./api/env-varsreturns imported environment variable names only — values are never exposed.
Errors you may see
| Message | Meaning |
|---|---|
| Corrupt or invalid zip archive | The upload is not a readable zip. Re-create the archive. |
| Zip slip path traversal detected | The archive contains entries outside its root (for example ../evil.txt). It is rejected and nothing is written. |
| File size exceeds 100 MB limit | Split the export or drop large binary artifacts before zipping. |
| session-missing-files | A warning, not an error: an older Jules session lacked optional files such as summary.md. |