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.json
  • jules-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

  1. Open /import.
  2. Choose the zip and press “Upload & Import”.
  3. The status moves pending → processing → done. Counts appear for repositories, sessions, patches, scheduled tasks, memories, env vars and setup scripts.
  4. Re-uploading the same archive is safe: rows are updated, not duplicated.

4. Read the result

  • /repos lists each repository with its setup script and test command.
  • /sessions lists imported sessions; /sessions/<id> shows the prompt, the plan, the patches with diffs, and the summary.
  • /api/env-vars returns imported environment variable names only — values are never exposed.

Errors you may see

MessageMeaning
Corrupt or invalid zip archiveThe upload is not a readable zip. Re-create the archive.
Zip slip path traversal detectedThe archive contains entries outside its root (for example ../evil.txt). It is rejected and nothing is written.
File size exceeds 100 MB limitSplit the export or drop large binary artifacts before zipping.
session-missing-filesA warning, not an error: an older Jules session lacked optional files such as summary.md.

Import from JulesBack to docs