APLEXICA

Open source docs

Open Source User Guide

Complete guide for the Aplexica CLI, tray app, and local web UI.

Source: Aplexica/Aplexica docs/user-guide.md at 71db2a0808f6

Aplexica User Guide

This guide explains how the Aplexica command line, tray app, and local web UI work together. It is written for the open source Aplexica daemon and avoids private-business, service-specific, or personal information.

For the short install walkthrough, see quickstart.md. For adapter-specific behavior, see adapters/.

What Aplexica Runs

Aplexica installs three user-facing pieces:

  • aplexica: the CLI. It installs and controls the background daemon, opens the local web UI, manages artifacts, resolves conflicts, configures routing rules, and performs backup/restore tasks.
  • aplexicatray: the desktop tray or menu-bar companion. It watches daemon status and exposes common actions without opening a terminal.
  • Local web UI: an embedded browser interface served by the daemon on loopback HTTP. It is opened from the tray or with aplexica web open.

The background daemon watches supported AI coding agents, imports their native files into the Aplexica Canonical Format, and fans compatible artifacts back out to other installed agents. The canonical store lives under the user’s Aplexica data directory and remains local unless the user explicitly configures an optional remote transport plugin.

First Run

The normal setup path is:

aplexica setup --install

The interactive wizard asks whether to enable the tray, enable the local web UI, install and start Aplexica now, and open the web UI. A non-interactive install can accept defaults:

aplexica setup --yes --install

After setup:

aplexica status
aplexica web open

status confirms daemon liveness, agent detection, artifact counts, and active conflict count. web open mints a one-time local bootstrap URL and opens the browser.

CLI Overview

Run aplexica --help for the complete command list and aplexica <command> --help for command-specific flags. The table below explains the user-facing purpose of each command group.

CommandWhat it does
setupFirst-run wizard. Writes local defaults, optionally installs the daemon service and tray autostart, starts the daemon, and opens the web UI.
statusShows daemon status, installed agents, artifact counts, unresolved conflicts, and optional JSON/watch output.
daemonStarts, stops, restarts, reloads, installs, uninstalls, and tails logs for the background sync daemon.
webOpens the local web UI, prints the listener port, issues one-time bootstrap URLs, revokes web sessions, and enables or disables the listener.
trayInstalls or uninstalls the per-user tray autostart entry. The daemon is managed separately.
configShows, edits, validates, diffs, and documents layered configuration.
adaptersLists, enables, disables, and checks supported adapter installations.
syncChooses which agents receive synced data (enable, disable, agents), pauses and resumes sync, runs a one-shot reconciliation, and — when given a directory — runs a foreground sync session. The daemon is preferred for day-to-day use.
backfillMaterializes conversation history into this device’s agents past the recent-history cap. Local only; prints a plan by default.
watchWatches a directory and imports settled files through a named adapter.
listLists artifacts in the canonical store.
showShows metadata, event history, and payload summary for one artifact.
importImports a native agent file or database into the canonical store.
exportExports a supported artifact back to an agent-native file tree.
convertTranscodes an ACF bundle into a target adapter’s native format.
verifyValidates a bundle against the schema and re-hashes every event.
backupExports the canonical store to a portable .tar.gz bundle.
restoreRestores canonical-store artifacts from a bundle.
backupsLists native agent-state snapshots. These are snapshots of agent-owned files, not canonical-store bundles.
restore-nativeDestructively restores agent-owned files from a native snapshot. A pre-restore snapshot is taken first so the operation is reversible.
snapshotAdds snapshot events to bound replay cost for an artifact chain.
retention / gcRuns retention and cleanup passes for snapshots, pruned history, and blob storage.
pin / unpinProtects or unprotects an artifact from retention pruning and eviction.
deletePermanently deletes an artifact from the canonical store.
projectManages the local project registry used to map canonical project IDs to local paths.
pendingLists project-scoped artifacts whose project is not linked locally yet.
rulesLists, adds, removes, edits, tests, and reapplies selective-sync routing rules.
tagAdds, removes, and lists artifact tags.
eventPerforms event-level inspection and tag operations.
conflictsLists, inspects, and resolves conflicts detected by the daemon.
branchLists, creates, renames, archives, unarchives, and deletes artifact branches.
forkForks an artifact at a chosen event into a new branch, optionally targeting an agent.
checkoutSets an agent’s materialization pointer to a selected branch.
logPrints the event log for an artifact.
diffDiffs two branches or two events of an artifact.
mergeMerges one branch into another.
resolveStarts an interactive conflict resolver.
toolLists tool artifacts, previews metadata, checks capabilities, and toggles secret sync for a tool.
secret / list-secretsManages secret values referenced by tool artifacts without printing secret values by default.
remoteConfigures an optional remote-transport plugin. The daemon treats all compatible plugins through the same protocol.
repairOffline canonical-store repair. repair conversation collapses echo-duplicated turns; repair materialization inspects or drains the native-write retry queue.
doctorProduces a redacted diagnostic report suitable for support or bug reports.
updateChecks for, or installs, an authenticated update over the signed release channel.
versionPrints build version, commit, and date.
completionGenerates shell completion scripts.
keygen / keygen-ageGenerates signing or encryption keypairs for bundle workflows.
hermesRuns Hermes-specific import/export helpers.
orphansInspects and cleans orphaned artifacts.

Common CLI Workflows

Start or restart the full background service:

aplexica daemon install
aplexica daemon start
aplexica daemon restart

Open and secure the local web UI:

aplexica web open
aplexica web issue-token
aplexica web revoke-sessions
aplexica web disable
aplexica web enable

Inspect sync state:

aplexica status
aplexica status --watch
aplexica list
aplexica show <artifact-id>
aplexica event --help

Choose which agents receive data. Aplexica discovers installed agents and imports from them automatically, but it writes to none of them until you say so — the “discover, then await config” default:

aplexica sync agents
aplexica sync enable codex
aplexica sync enable --all
aplexica daemon reload

Pause and resume without disabling anything:

aplexica sync pause --for 2h
aplexica sync pause --agent codex
aplexica sync pause-status
aplexica sync resume

Resolve divergence:

aplexica conflicts list
aplexica conflicts show <artifact-id>
aplexica resolve <artifact-id>

Work with conversation branches:

aplexica branch list <artifact-id>
aplexica fork <artifact-id> --to-agent codex
aplexica checkout <artifact-id> --branch <branch> --agent <agent>
aplexica merge <artifact-id> --from <branch> --into <branch>

Back up and restore:

aplexica backup
aplexica restore <bundle-path>
aplexica backups list
aplexica restore-native --from <snapshot-id> --yes

Giving a Newly Enabled Agent Your History

Enabling an agent does not hand it your whole archive. By default each agent receives only the most recent conversations — ten, unless you have changed sync.convBackfill or a rule’s route.historicalSyncDepth. Everything from that point forward syncs live and is never capped.

To push more history into this device’s agents, use backfill. It prints a plan and writes nothing until you pass --apply:

aplexica backfill
aplexica backfill --agent kilo --apply
aplexica backfill --depth 100 --apply
aplexica backfill --apply

Three things are worth knowing before you run it:

  • It is local. The pass writes native session files for agents on this machine and publishes nothing. Cross-device backfill is reserved for a future release behind the sync.cloudBackfill key; --scope cloud is refused today whether or not that key is set.
  • A conversation is never materialized into the agent that wrote it. So the per-agent counts differ, and backfilling only an agent’s own conversations plans nothing.
  • The counts are eligibility counts, not pending writes. The planner does not check what is already materialized, so an already-backfilled store re-plans the same numbers and the apply pass finds each session current.

A full backfill of a large store creates one native session per conversation per agent. Run the dry run first and read the numbers.

Repairing a Conversation

repair is for the rare case where a conversation’s canonical head is wrong rather than merely out of date. Both subcommands are read-only until you ask otherwise:

aplexica repair materialization
aplexica repair conversation <artifact-id>
aplexica repair conversation --all

repair materialization lists native session writes the daemon could not complete, with the agent and artifact for each. repair conversation collapses turns that a fixed continuation bug echoed back into a thread, and prints the proposed collapse without writing anything.

Applying a conversation repair is a fleet-wide operation, not a per-device one. A peer still holding the duplicates classifies the repaired thread as a stale redelivery and skips it, so a repair applied on one device alone gets undone. Stop every daemon, repair each device, then restart them:

aplexica repair conversation --all --apply --device-id <this-device-id>

Pass --device-id or the repaired head is not eligible for the outbound sweep, and peers keep serving the duplicated copy. Read this device’s id from aplexica status --json (daemonInfo.localDeviceId). The collapse is greedy, so removing one block can expose another; rerun the dry run afterward and repeat until it reports nothing.

Tray App

aplexicatray is the desktop companion for the daemon. It starts at login when installed with aplexica setup --install, aplexica daemon install --tray, or aplexica tray install.

Tray States

StateMeaning
StartingThe tray has launched but has not received a status snapshot yet.
IdleThe daemon is reachable and healthy, with no recent activity.
ActiveThe daemon has seen recent import or fan-out activity.
ConflictOne or more artifacts have divergent heads that need review.
PausedThe daemon has been quiet longer than the configured paused threshold or sync was stopped from the tray.
ErrorThe daemon is unreachable or status polling failed.

Tray Menu

Menu itemFunction
StatusRead-only line showing current state and watched directory when known.
Conflicts (N)Shows unresolved conflicts. Clicking a conflict opens the conflict CLI view; overflow opens the full conflict list.
Pending projects (N)Shows project IDs or paths waiting for a local project link. Clicking a row opens the pending-project CLI flow.
Open AplexicaMints a fresh one-time web UI bootstrap URL and opens the default browser.
Open watched directoryReveals the daemon’s watched directory in the OS file manager.
Pause sync / Resume syncStops or starts daemon sync from the tray. Quitting the tray does not stop the daemon.
Pause sync for…Pauses for 1 hour, 4 hours, until restart, or a custom duration. Timed pauses auto-resume.
Open logsOpens the daemon log directory.
Open status reportRuns aplexica status in a terminal.
Open configOpens the local daemon configuration file in the default editor.
About AplexicaShows tray and daemon version information.
Quit Aplexica TrayCloses the tray indicator only. The daemon keeps running.

Local Web UI

The local web UI is served by the daemon on loopback. It is protected by a one-time bootstrap token and session cookies. Open it from the tray with Open Aplexica or from a terminal:

aplexica web open

The sidebar is grouped into Overview, Sync, and System areas. The top bar contains search placeholder controls, the sidebar toggle, and log out. The footer links to the portal source commit.

Dashboard

The Dashboard is the operational home page.

Daemon panel fields:

Field or controlMeaning
VersionVersion reported by the running daemon.
PIDOperating-system process ID.
StateIdle, active, or paused state derived from daemon status.
UptimeHow long the daemon process has been running.
Pending importsDebounced filesystem changes waiting to be imported.
Pause / ResumePauses or resumes daemon sync.

Analytics panels:

PanelMeaning
Agent sync activityStacked bars for recent sync events by agent and artifact kind.
Sync in / out by agentInbound and outbound event counts per agent.

Other sections:

SectionMeaning
AgentsCards for installed agents, with status and artifact counts.
Recent activityLive event rows. Each row shows event type, title, and relative time.

Agents

The Agents page shows supported AI coding agents and whether they were detected on this machine.

Header controls:

Field or controlMeaning
Connected countInstalled agents divided by total supported agents.
Enable sync for all / Disable sync for allToggles cross-agent fan-out to all installed agents. Discovery and import still run.

Agent row fields:

Field or controlMeaning
AgentHuman-readable agent name and description.
StatusActive, idle, paused, attention, or not installed.
ArtifactsCount of canonical-store artifacts attributed to that agent.
AdapterAplexica adapter version, not necessarily the agent’s own version.
Last activityMost recent known activity for that agent.
Sync on / Sync offPer-agent fan-out toggle.

Agent detail fields:

Field or controlMeaning
Status badgesInstalled state, sync state, artifact count, and last activity.
Adapter versionVersion of the Aplexica adapter.
Agent versionPlaceholder for the agent’s native version when detection is available.
Watched locationsNative roots and registered project paths watched for this agent. Registered project paths can be removed.
NamespacesNamespaces currently associated with the agent’s artifacts.
Recent eventsEvent type, detail, and timestamp rows for that agent.

Event Stream

The Event stream page combines live server-sent events with paginated history.

Controls:

Field or controlMeaning
Event kind filterFilters to daemon, agent, imported, synced, checkpoint, refused, conflict, pending, or rule events.
Agent filterFilters to agents that appear in the loaded events.
Collapse repeatsFolds repeated live pings or repeated artifact history into fewer rows.
Live status badgeShows live, reconnecting, or disconnected state for the event stream.
Load older eventsFetches the next page of historical events.

Event row fields:

FieldMeaning
Source badgeLive or historical event indicator.
Event typeHuman-readable event kind.
Artifact kindMemory, skill, tool, conversation, or other when available.
TitleEvent summary.
MetadataAgent, path, artifact ID, size, reason, or target-agent details when available.
TimestampLocal formatted event time.

Routing Rules

Routing rules decide which artifacts fan out where and which tags or restrictions apply.

Rules list fields:

FieldMeaning
NameRule identifier. Opens the detail page.
MatchHuman-readable summary of artifact type, tags, source, scope, path, or other matchers.
TargetsAgents that receive matching artifacts. Empty target list means all installed agents.
EffectAdditional behavior, such as local-only routing, excluding secret values, assigning tags, or other advanced effects.

Top-level controls:

ControlMeaning
Add presetOpens recommended rule bundles and applies selected presets.
Add ruleOpens the rule creation form.

Add/edit rule fields:

Field or controlMeaning
NameStable rule name. Names are disabled on edit; rename by creating a new rule and deleting the old one.
ModeOptional sync mode: unset, live, scheduled, or manual.
Scheduled-sync interval (seconds)Appears when Mode is scheduled. Defaults to 900 seconds, or 15 minutes.
Artifact typesMemory, skill, tool, and conversation checkboxes. No selection matches every type.
Match tagsTags an artifact must already carry to match the rule. Free-text chips are allowed.
Target agentsAgents that should receive matching artifacts. No selection means all installed agents. The originating-agent option targets the source agent.
Assign tagsTags added to matching artifacts.
Sync off deviceWhen enabled, matching artifacts may use configured off-device transport. When disabled, matching artifacts stay local.
Include secretsWhether secret values referenced by tool artifacts are allowed to sync.

Rule detail also shows advanced matchers such as path, branch name, scope, tool kind, source agent, source device, or skill mode as read-only rows when they exist. The practical form preserves those advanced values when saving.

Conflicts

The Conflicts page lists artifacts with divergent heads.

List fields:

FieldMeaning
ArtifactReadable title when available, plus artifact ID.
KindArtifact kind, such as memory, skill, tool, or conversation.
HeadsNumber of competing heads.
ActionsOpens the conflict detail page.

Conflict detail fields:

Field or sectionMeaning
What changedAnalysis summary, recommendation, auto-resolve note, and highlighted differences.
Head A / Head BSide-by-side details for the competing heads.
Readable summaryHuman-readable summary of a head when analysis exists.
First visible contentPrimary visible content extracted from a head when available.
Source agentAgent that wrote the head.
Event IDCanonical event identifier.
Content SHA-256Shortened content hash.
TimestampEvent timestamp.
Payload previewExpandable JSON or text preview when manual review is needed.
Accept A / Accept BChooses one head as the winner.
Edit manual mergeOpens a textarea to paste merged content. Not shown for conversation conflicts.

Auto-resolvable conflicts show the analysis and no manual action requirement.

Forking

The Forking page manages conversation branches.

Conversation search and rows:

Field or controlMeaning
Search conversationsFilters recent conversations by text.
Conversation titleReadable conversation title.
Source agentAgent that originated the conversation when known.
DescriptionAdditional summary text when available.
Artifact IDCanonical conversation artifact ID.
TurnsNumber of conversation turns.
BranchesNumber of branches on the artifact.
UpdatedLast update timestamp.

Branch panel controls:

Field or controlMeaning
Fork fromSource branch head or event used as the fork point.
AgentTarget agent for the forked branch.
BranchOptional branch name. If blank, Aplexica chooses a branch name.
RationaleOptional note explaining why the fork was created.
Fork conversationCreates the branch and materializes it for the selected agent.
Checkout branchBranch to materialize into an agent.
Checkout agentAgent that should receive the selected branch.
CheckoutMoves the selected agent’s materialization pointer to the branch.

Branch table fields:

FieldMeaning
BranchBranch name and fork source hash when known.
EventsNumber of events on that branch.
Last eventLast event timestamp.
StateActive, archived, or merged.
MaterializedAgents currently materialized on the branch.

Projects

Projects map local folders to project-scoped artifacts.

Add folder fields:

Field or controlMeaning
PathAbsolute or local folder path to register.
ScopeLocal for folder-specific memory, global for broader memory scope.
Add projectSaves the project registration.

Project table fields:

Field or controlMeaning
PathDisplay name and absolute path.
ScopeLocal or global.
AgentsAgents allowed for this project. Empty means all agents.
View memoryExpands effective memory files for the project.
EditEdits scope and agent selection.
RemoveRemoves the registry entry; it does not delete project files.

Edit fields:

FieldMeaning
ScopeLocal or global.
AgentsInstalled-agent checkboxes. Leaving all unselected means all agents.

Effective memory fields:

FieldMeaning
File nameMemory file name.
Synced agentsAgents receiving that memory file.
ContentComposed memory content as synced by the daemon.

Pending Projects

Pending projects are folders or project IDs Aplexica noticed but has not fully registered on this device.

Suggestion rows:

Field or controlMeaning
Suggested agentsAgents newly observed in an already registered project.
Add agentsAdds those agents to the registered project’s agent set.
DismissDismisses the suggestion.

Pending table fields:

FieldMeaning
Path or project IDLocal sample path if known, otherwise canonical project ID.
AgentsAgents associated with the pending row.
Last activeRelative time of the most recent activity.
TypeDiscovered folder, artifact-sourced project, or pathless artifact.
ActionsApprove/link or deny.

Approve dialog fields:

FieldMeaning
PathFolder path being approved.
ScopeLocal or global.
AgentsAgent checkboxes. Empty means all installed agents.

Link dialog fields:

FieldMeaning
Local pathPath that should be associated with a pathless or artifact-sourced project ID.

Denied rows can be approved later or restored to the active pending list.

Remote Connection

Some builds show an optional remote connection page when a compatible remote transport plugin is configured. The open source daemon treats this as a plugin protocol and does not require any specific provider.

States:

StateMeaning
Not configuredNo remote plugin is configured for this daemon.
Pairing wizardA plugin is configured but this device is not paired.
Connected cardThis device is paired and the plugin reports its connection state.

Pairing fields:

Field or controlMeaning
Pairing codeOne-time code or token from the remote provider.
Device nameOptional friendly name for this machine.
Pair this deviceExchanges the code through the plugin and stores device credentials.

Connected fields:

Field or controlMeaning
Device IDOpaque remote-device identifier.
Account IDOpaque account or tenant identifier from the provider.
Relay connectionConnected, connecting, starting, disconnected, or unknown.
Test connectionAsks the plugin to verify current connectivity.
Pair a different device / re-pairReopens the pairing wizard.
Unpair this deviceRemoves local remote credentials and stops remote sync on this machine.

Backups

The Backups page manages native agent-state snapshots. These are separate from canonical-store bundle backups.

Metric cards:

FieldMeaning
ProtectedAgents with usable native snapshots divided by detected agents.
Remote backup availabilityWhether the configured backup destination is available. If no provider is configured, backups remain local.
HistoryLocal and remote backup counts.
StorageTotal displayed size of known backups.

Safety table fields:

Field or controlMeaning
AgentAgent name.
StatusProtected, backup required, blocked, overridden, or related safety state.
RootsNumber of native roots or the latest error.
Last backupRelative time of the newest snapshot for that agent.
BackupStarts a snapshot for that agent.
OverrideAllows sync to proceed despite a backup blocker. Use only after understanding the risk.

Manual backup fields:

Field or controlMeaning
Local destinationWrites the snapshot to local storage.
Remote destinationEnabled only when a compatible provider is configured.
Agent checkboxesSelected agents to snapshot. Empty means all agents.
Back up selectedStarts a snapshot for selected agents and destination.
Back up allStarts a snapshot for all agents.
CancelCancels a running backup job.

Schedule fields:

Field or controlMeaning
EnabledTurns scheduled native snapshots on or off.
PresetsHourly, 6 hours, 12 hours, daily, or weekly intervals.
Custom minutesCustom interval in minutes, minimum 15.
DestinationLocal or remote provider when available.
Agent checkboxesAgents covered by the schedule. Empty means all agents.
Save schedulePersists the schedule.
Next runNext scheduled run when known.

History filters:

FieldMeaning
From / ToDate range filters.
AgentShows backups containing a selected agent.
TypeManual, scheduled, pre-sync safety snapshot, or pre-restore undo snapshot.
LocationLocal or remote.
ResetClears filters.

History table fields:

Field or controlMeaning
CreatedSnapshot creation time.
LocationLocal or remote and encryption status when known.
TypeManual, scheduled, safety, or undo snapshot.
AgentsAgents recorded in the snapshot.
SizeDisplay size.
FilesNumber of files in the snapshot.
DeviceOrigin device name when known.
Restore scopeFor multi-agent snapshots, choose all agents or one agent before restoring.
RestoreOpens destructive restore confirmation.
DeleteOpens deletion confirmation.

Retention fields:

FieldMeaning
KeepPer-agent number of native backups to retain. Values are clamped between 1 and 100.
Save retentionPersists retention limits.

Delete confirmation requires typing the displayed phrase. Restore confirmation overwrites live native agent files, but Aplexica takes a pre-restore snapshot first so the operation can be reversed.

Settings

Settings exposes safe-to-edit daemon configuration.

Field or controlMeaning
Open raw configCopies or displays the local config path.
Log levelTrace, debug, info, warn, or error.
Hermes watch intervalHow often Aplexica polls Hermes state.db for new or changed conversation sessions. Use a duration such as 5s, 30s, or 1m.
SaveWrites the configuration patch.

Transport

Transport controls how Aplexica reaches beyond this machine when a remote transport is configured.

Status fields:

Field or controlMeaning
ModeCurrent transport mode, such as local-only or bring-your-own relay.
Available transportsModes supported by the current daemon and plugins.
Switch to local-onlyDisables off-machine transport without removing local data.

Bring-your-own relay fields:

FieldMeaning
Broker URLRelay broker URL. Must be a valid URL.
Client certificate pathOptional path to the mTLS client certificate.
Client key pathOptional path to the mTLS private key.
CA certificate pathOptional path to a certificate authority file.
NamespacesOptional comma-separated namespace list.
Save BYO relaySaves the relay configuration when the mode is supported.

Help

The Help page links to user documentation, source code, security reporting, and a reminder that the UI can be reopened from the tray.

Onboarding

The onboarding flow walks through initial local setup.

StepMeaning
Install daemonConfirms the browser is connected to a running daemon.
Connect your agentsWaits for supported agents to be installed and detected.
Wait for your first syncWaits for the first sync event.
DoneLinks back to the Dashboard.

Troubleshooting

The web UI says the session expired

The local UI session is tied to the daemon. Reopen the UI from the tray or run:

aplexica web open

The tray says the daemon is unavailable

Check daemon status and logs:

aplexica status
aplexica daemon logs --follow

Restart if needed:

aplexica daemon restart

An agent does not appear

Confirm the agent is installed and that Aplexica can discover its native roots:

aplexica adapters list
aplexica status

The daemon imports from installed agents even if fan-out to a specific agent is disabled.

A folder appears under Pending projects

Open the Pending projects page and approve the folder, or link it from the CLI:

aplexica pending list
aplexica project link <project-id> <local-path>

An agent is missing older conversations

Expected. Enabling an agent back-fills only the most recent conversations into it; everything after that syncs live. Push more history in with aplexica backfill — see Giving a Newly Enabled Agent Your History.

Note that a conversation is never materialized into the agent that authored it, so an agent will not show you its own conversations arriving from elsewhere.

A conversation shows the same turns twice

Check whether the duplicate is in the canonical head or only in one agent’s session file:

aplexica repair conversation <artifact-id>

That prints the proposed collapse without writing. If it reports nothing, the canonical thread is clean and the duplicate is in a native session file that will be rewritten on the next materialization.

If it does report a collapse, apply it on every device with all daemons stopped, as described under Repairing a Conversation. Repairing one device alone does not hold: peers still holding the duplicates treat the repaired thread as a stale redelivery and re-serve their copy.

A conversation stopped receiving updates

Canonical sync and the native session file are separate steps, and it is usually the second one that is stuck. Check the retry queue:

aplexica repair materialization

An entry there means the daemon has the turns but could not write them into that agent’s session. The common cause is a session file that diverged from canonical — Aplexica will not overwrite an agent’s own session, so it defers.

Confirm canonical is actually current before assuming sync is at fault:

aplexica log <artifact-id>

If the turns are present in the log, sync is working and only the native write is outstanding. Remote sync runs on a schedule rather than instantly, so a recently authored turn may simply not have swept yet.

A backup restore looks wrong

Native restores take a pre-restore snapshot before overwriting files. List snapshots and restore the pre-restore snapshot if you need to undo:

aplexica backups list
aplexica restore-native --from <pre-restore-snapshot-id> --yes

Publishing This Guide on aplexica.com

The open source guide should have one canonical source:

Aplexica/Aplexica
└── docs/user-guide.md

The website should render that file into HTML instead of maintaining a second hand-edited copy. Recommended implementation:

  1. Treat docs/user-guide.md in the public daemon repository as canonical for open source CLI, tray, and local web UI docs.
  2. In the website repository, add a build step that fetches the guide from a pinned Git tag or commit, converts Markdown to HTML, and places it under a route such as /docs/open-source-user-guide/.
  3. Store the source commit SHA and rendered timestamp in the page footer so users can tell which daemon release the hosted docs describe.
  4. Add a CI check in the website repository that fails if the rendered copy was edited manually instead of regenerated from the canonical source.
  5. Keep service-specific docs in the website or service app repository, not in the OSS daemon repository. Link between service-specific docs and this OSS guide only where workflows cross product boundaries.
  6. Version hosted documentation by daemon release. For example, /docs/open-source-user-guide/latest/ can point at the latest stable daemon tag, while older pages remain available by version.

This keeps open source documentation public and reusable while preventing private service-specific details from leaking into the public daemon repository.