Skip to content

Personal Sync

Personal Sync is a private full-archive backup, not a selective sharing feature. It always includes sessions, memories, unredacted provider backups, attachments, and artifacts. It has no repository, folder, owner, or provider selector.

Creating a Personal Sync space writes a random profile identity to <prefix>/personal.json. Each of the owner’s devices receives a stable derived device ID and uploads below:

<prefix>/personal/<profile-id>/devices/<device-id>/...

Renaming a person or device does not change these IDs. Any number of the same person’s devices can connect to one profile, but one Hansard installation can connect to only one Personal Sync profile at a time.

The endpoint, bucket, region, prefix, sync direction, cadence, and credentials remain local connection settings. Credential values do not appear in personal.json or the viewer settings payload.

  1. Choose a new, private storage prefix.

    A local or mounted private folder needs no cloud credentials:

    Terminal window
    hansard personal-sync create --endpoint file:///srv/hansard-private

    Cloudflare R2, Amazon S3, and other S3-compatible services use the cloud form:

    Terminal window
    hansard personal-sync create \
    --target r2 \
    --endpoint https://ACCOUNT_ID.r2.cloudflarestorage.com \
    --bucket example-hansard-private

    For S3 or a compatible service, pass --target s3 or --target custom and add --region when required.

  2. Review the preview and confirm the first upload.

    Creation first checks that no Personal Sync manifest already exists at the prefix, previews the archive write, then creates the profile and runs the first sync only after confirmation. In non-interactive use, --yes is required to proceed.

  3. Check the connected profile.

    Terminal window
    hansard personal-sync status
    hansard sync status

Use the same destination and prefix from the second device. Connect reads the existing personal.json and refuses to attach the installation to a different profile at that connection.

Terminal window
hansard personal-sync connect --endpoint file:///srv/hansard-private

For a cloud destination, use the same --target, --endpoint, --bucket, --region, and --prefix values and supply that device’s storage credentials separately.

After connecting, run the configured target through the normal sync engine:

Terminal window
hansard sync

Personal Sync connections default to two-way mode. Two-way sync uploads the current device first and then receives other device namespaces under the local read-only received/devices/ tree. Received memories and raw backups are included automatically for a first-class Personal Sync target.

  • upload sends changed local objects in this device’s namespace.
  • receive mirrors other device namespaces locally as read-only data.
  • two-way runs upload and then receive under one lock.
  • Normal sync never treats a missing local object as a remote deletion.
  • Plain receive does not delete a local mirror when an object disappears remotely; pruning is a separate, confirmed operation.
  • Derived search indexes are rebuilt locally rather than uploaded.
  • Deep Recall research threads remain device-local by default.

Use hansard sync status --json for a machine-readable view of the configured target and its most recent upload and receive state.

Terminal window
hansard personal-sync remove

Removing the connection changes local Hansard configuration only. It does not delete the remote manifest, device objects, snapshots, bucket versions, or storage-provider backups. Remove retained data through an explicitly previewed Hansard wipe operation or the destination’s own retention controls.

For repository-scoped collaboration, use Teams instead. Teams have a narrower upload contract and exclude raw provider backups and memories.