Personal Sync
Personal Sync is a private full-archive backup, not a selective sharing feature. It always includes sessions, memories, sensitive provider backups, attachments, and artifacts. Source-specific privacy projections remain disclosed in their raw manifests. Personal Sync has no repository, folder, owner, or provider selector.
Profile and device identity
Section titled “Profile and device identity”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.
Set up Personal Sync in the app
Section titled “Set up Personal Sync in the app”Open Settings → Personal Sync. Choose Create a new Personal Sync space
for the first device or Connect another device when personal.json already
exists at the destination. Select Shared folder, Cloudflare R2,
Amazon S3, or Other S3-compatible, enter the storage location, and open
Credentials and schedule only when credentials, a prefix, or a different
sync direction are needed.
Before Create and upload or Connect this device becomes the final action, the page shows the complete-private-backup boundary and requires its acknowledgment. After connection, Your Personal Sync space shows the profile and device state and exposes edits or removal for this installation. The app never offers a repository selector here because Personal Sync always means the complete private archive.
Create a Personal Sync space
Section titled “Create a Personal Sync space”-
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-privateCloudflare 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-privateFor S3 or a compatible service, pass
--target s3or--target customand add--regionwhen required. -
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,
--yesis required to proceed. -
Check the connected profile.
Terminal window hansard personal-sync statushansard sync status
Connect another device
Section titled “Connect another device”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.
hansard personal-sync connect --endpoint file:///srv/hansard-privateFor 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:
hansard syncPersonal 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/personal/<profile-id>/devices/<device-id>/ tree. The local
archive and installation settings stay in place; editable device names do not
change the replica path. Received memories and raw backups are
included automatically for a first-class Personal Sync target.
Sync behavior
Section titled “Sync behavior”uploadsends changed local objects in this device’s namespace.receivemirrors other device namespaces locally as read-only data.two-wayruns 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.
- Received views and events rebuild in the local cache without rewriting received evidence.
- Separate device and sharing-space replicas retain distinct catalog IDs and their original source IDs.
- 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.
Different Hansard versions
Section titled “Different Hansard versions”Each device owns its upload namespace. Received archives are excluded from uploads, so rebuilding a received conversation’s display does not overwrite the producing device’s remote copy. Personal Sync preserves provider source objects as well as the normalized archive files.
The receiving device can rebuild views and canonical events with its own
renderer, but its received transcript still reflects the producing device’s
parser. Sync does not currently negotiate parser compatibility or publish all
of a conversation’s files as one atomic revision. Keep devices on the same
Hansard release when consistent interpretation is required. The current
hansard rebuild --from-raw command supports selected local source formats;
it does not automatically reparse received device mirrors.
Disconnect this installation
Section titled “Disconnect this installation”hansard personal-sync removeRemoving 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.