/ documentation

maleta sync

Reapply a selection additively and idempotently while preserving unmanaged files and detecting installed plugins.

#Usage

Standard sync
bash
maleta sync --file ./maleta.json --tool all
Simulate the sync
bash
maleta sync --file ./maleta.json --tool all --dry-run

The sync pipeline is the same as install: it reads the manifest, validates the selection, resolves sources, and materializes files. When omitted, --file uses maleta.json relative to the current directory; --tool overrides targetTool only for that run.

For an inline source, the files already travel inside the document, so materialization makes no GitHub request and never executes their opaque content. A changed inline skill prints [ok] sync inline:<name> -> <dest>; dry run prints [dry-run] would install inline:<name> -> <dest>.

#How it differs from install

Sync-specific behavior
Aspectsync
Plugin pre-checkRuns claude plugin list before processing plugins, except in --dry-run.
Plugin already installedSkips it with [ok] plugin '<id>' already installed.
Changed-file line[ok] sync <label> -> <dest>
Footersync: no relevant changes or sync: applied local selection

In install, installed plugins are reinstalled and the changed-file line uses [ok] install. In sync, the pre-check allows these plugins to be skipped. The --dry-run line remains [dry-run] would install <label> -> <dest>.

#No pruning, environment preserved

  • Synchronization is additive and does not remove files outside the selection.
  • Dropping an inline skill from the document does not delete it during sync. The recorded inline:<name> resource remains until maleta prune removes it under the normal ownership checks.
  • Existing unmanaged files are preserved because the destination tree is copied to the staging directory before files are overwritten. A file you edited after the CLI wrote it is kept with [warn] kept <path>: changed locally; delete it to take the new version instead of being overwritten.
  • An existing file with different bytes is overwritten without prompting; identical bytes are not rewritten.
  • Repeating an already aligned selection is idempotent and prints [ok] <label> already aligned -> <dest>.

#Dry run and safety

With --dry-run, there are no network requests or writes. The possible lines are:

text
[dry-run] would install <label> -> <dest>
[dry-run] claude plugin marketplace add <repo>
[dry-run] claude plugin install <id>

An empty selection prints [warn] no skills or plugins selected; edit the selected Maleta file or export one from https://app.maleta.dev before the usual sync: no relevant changes footer, including with --dry-run. Otherwise, with --dry-run and at least one materialization action planned, no footer is printed. With no relevant changes—no files changed and no plugin commands run—the footer is sync: no relevant changes; when the local selection is applied, the footer is sync: applied local selection. Replacement is transactional: it uses staging and backup and rolls back on failure.

#Exit codes

CodeCondition
0No failures (`failures === 0`); skipped or unsupported items also result in 0.
1Document, plan, GitHub resolution, limit, collision, staging/transfer, or plugin error.
2Invalid command, option, or flag value.
4targetOs differs from the host: [error] targetOs '<x>' does not match the local host '<y>'; refusing sync.

Privacy preferences

Choose what this origin may measure. You can change it here at any time.

Essential storage

This browser always keeps your theme, the Maletas you save here and this choice so the site works. They stay on this origin.

Optional analytics

Maleta.dev measures aggregate traffic and real-user performance only after you allow it.

Current choice: not made yet, so measurement stays off.

Privacy policy