Read-only audit of your install: is it on the latest version, and have any PHARN-owned files drifted from upstream?
pharn status
pharn status --no-drift # version check only (skips the clone)
pharn status --strict # exit 1 if outdated, modified, or missing (for CI)status is the read side of update: it surfaces the same state update would overwrite, but never writes, deletes, or overwrites anything. It is a report, not a guard.
- Reads
pharn.config.json. If none exists, exits with a hint to runpharn initfirst. - By default, clones
pharn-dev/pharn-oss@mainonce and reuses it for both sections below (the temporary clone is always cleaned up).--no-driftskips the clone and uses the lightweightmanifest.jsonfetch for the version section only. - Version — compares your
skillsVersionand per-module versions against the manifest, then reports either "up to date" or that an update is available (runpharn update). This overlaps with part ofpharn listby design. - Drift — derives the set of files each installed module and skill is expected to contribute (mirroring how
init/add/updateinstall them), then byte-compares each against your.claude/:- Locally modified (PHARN-owned) — files present but whose contents differ.
pharn updatewill overwrite these. - Missing (expected but absent) — files an installed module/skill expects that aren't on disk. Re-run
pharn update(orpharn add) to restore them. - If neither, reports No drift.
- Locally modified (PHARN-owned) — files present but whose contents differ.
The comparison is always against pharn-dev/pharn-oss@main (the same ref the rest of the CLI installs from), not the commit pinned in your config.
.claude/CONSTITUTION.md and everything under .claude/memory-bank/ are never flagged. They are materialized once at init and are meant to be hand-edited — update never touches them, so reporting local edits to them would be noise.
This exclusion is anchored at the .claude/ root. The pristine template sources under .claude/templates/ (including templates/memory-bank/ and templates/constitution/) are PHARN-owned and are diffed — only the materialized working copies at the root are skipped.
Exits 0 by default, even when drift or an available update is found (it is a report). Pass --strict to exit 1 whenever anything is outdated, modified, or missing — useful as a CI gate.
- update — apply the fixes
statusreports (overwrite drift, restore missing) - list — read-only inventory of installed vs. available modules/skills
- add — install a module or a single
category:skill - pharn.config.json —
skillsVersion,modules,installedSkills