Tracking External Installations

If you install a package directly with your native package manager (bypassing Stamp), stamp reconcile detects it and adds it to your manifest.

sudo dnf install ripgrep        # bypasses stamp
stamp reconcile                 # detects ripgrep and tracks it
Discovered 1 new package(s):
  - ripgrep (dnf)
Discovered 1 new repository(ies):
  - codehaus-casa (copr)
Tracked 1 package(s), 1 repository(ies)

Dry run

Preview what reconcile would track without committing:

stamp reconcile --dry-run

Missing manifest packages

Reconcile also warns when a tracked package is no longer installed — removed directly via your native package manager (e.g. sudo dnf remove htop):

warning: 1 manifest package(s) not installed: htop (dnf)
         run 'stamp ls --type missing' for the full list, or 'stamp restore' to reinstall

The warning fires on the no-drift and drift paths and is warning-only: nothing is reinstalled and the manifest is untouched. The removal is still recorded in the new snapshot (snapshots reflect reality; the manifest holds intent). Use stamp ls --type missing to list everything missing and stamp restore to reinstall.

Discovered 1 new package(s):
  - ripgrep (dnf)
Discovered 1 new repository(ies):
  - codehaus-casa (copr)
Use `stamp reconcile` without --dry-run to track

No drift

stamp reconcile
No drift detected

Scoped to a manager

stamp reconcile -m dnf

Limits drift detection to a single manager.

How it works

  1. Takes a new snapshot of all packages across every manager
  2. Compares against the last saved snapshot
  3. Any new packages or repositories are detected as drift
  4. Drift is auto-tracked into the manifest (or printed with --dry-run)

Packages and repositories already tracked in the manifest are never reported as drift — reconcile is a fallback for untracked installations, so stamp install/stamp repo add intent is respected and never re-discovered.

Reconcile is fully deterministic — no prompts, no decisions. It’s the safety net for when you forget to use Stamp.

Reconcile is a fallback

Reconcile exists to catch packages installed outside Stamp. The primary workflow is to record intent from day one:

stamp install <pkg> -m <mgr>   # prefer this — intent is tracked immediately
stamp reconcile                # fallback for packages installed via the native manager

Every stamp reconcile run prints this reminder:

note: reconcile is a fallback for packages installed outside stamp.
      prefer 'stamp install <pkg> -m <mgr>' so intent is tracked from day one.

For packages that already exist on the system, stamp reinstall <pkg> -m <mgr> tracks intent directly without a full reconcile.

Reliability notes

Not every package manager can reliably report “packages the user installed”. Each manager’s ListInstalled is annotated, and stamp reconcile prints a note when a manager’s output is over-inclusive. These are always shown so unexpected drift is not mistaken for real package changes:

Reliability Meaning Managers
Reliable Lists only user-installed packages brew, flatpak, go, pipx, uv, npm, cargo, macports, snap (filtered)
Over-inclusive Lists all installed packages (base OS + deps included). Output is consistent run-to-run, so baseline diffing stays safe, but reconcile may list system packages apt, dnf, zypper, pacman, paru

Example output:

note: dnf lists all installed packages; reconcile may detect system packages
note: snap lists all installed packages; reconcile may detect system packages

dnf: dnf4 vs dnf5

Snap

System snaps (core*, gnome-* runtimes, snapd, gtk-common-themes, snap-store, firmware-updater, bare) are now filtered out of the listing. Only user-installed apps surface in reconcile drift.

Flatpak

Flatpak lists applications and app-kind extensions/plugins (e.g. OBS Studio plugins like com.obsproject.Studio.Plugin.BackgroundRemoval), so reconcile detects them when installed outside Stamp. Runtimes and runtime-kind extensions (locale, debug, GPU driver refs) are excluded — no org.gnome.Platform-style false positives.

Automated Reconcile

Run reconcile automatically on a schedule so you never miss drift:

stamp auto-reconcile on                    # enable daily timer
stamp auto-reconcile on --period hourly    # check every hour
stamp auto-reconcile on -p weekly          # check once a week
stamp auto-reconcile off                   # disable timer

Platform support

OS Timer system Activation
Linux systemd user timer systemctl --user enable --now stamp-reconcile.timer
macOS launchd agent launchctl load ~/Library/LaunchAgents/dev.gostamp.stamp-reconcile.plist

The timer runs stamp reconcile at the configured interval and logs output to /tmp/stamp-reconcile.log. If your system doesn’t support automatic timers (e.g., containers without systemd), you can install the timer files manually from the contrib/ directory.