Console commands

Every screen has a console equivalent, which is what makes Holmes usable in a deploy script or a CI job.

Inspecting the index

# what's in the index, and how much of the site it covers
php craft holmes/index

# run a query and show the working
php craft holmes/index/search "baker street" --site=default

# every index row for one element, diffed against the live content
php craft holmes/index/element 1234

Audits

# quick audit of everything
php craft holmes/audit

# deep, uncapped
php craft holmes/audit --mode=deep --deep-limit=0

# only these checks
php craft holmes/audit --checks=orphaned-rows,unindexed-elements

# audit, then repair everything repairable
php craft holmes/audit --fix

# list registered checks and which are deep-only
php craft holmes/audit/checks

# re-read a stored report by ID
php craft holmes/audit/show 12

Options

OptionWhat it does
--modequick or deep. Defaults to the defaultMode setting.
--deep-limitElements loaded per type in a deep pass. 0 for no cap.
--checksComma-separated check handles to run, instead of all enabled ones.
--fixApply every repairable finding after the run.
--fail-onExit non-zero when anything at or above this severity is found.

Reindexing and repairs

# list element types and their sources, with UIDs
php craft holmes/sync/sources

# reindex one source
php craft holmes/sync/reindex --element-type='craft\elements\Entry' --source=section:<uid>

# reindex everything
php craft holmes/sync/all

# delete rows whose element no longer exists
php craft holmes/sync/orphans

# release stuck reservations, then drain the deferred index queue
php craft holmes/sync/queue

Run holmes/sync/sources first — it prints the exact --source values the reindex command expects.

In CI

--fail-on=critical turns an audit into a build step. Run it after a deploy, after a content migration, or nightly:

# fail the build if anything critical is in the index
php craft holmes/audit --mode=deep --fail-on=critical

A deep audit in CI is worth the minutes it costs: it is the only mode that catches a migration which changed content without reindexing it, which is exactly the class of bug a deploy introduces.

If a deep audit is too slow for every build, a good middle ground is a quick audit on every deploy and a nightly deep one:

# on deploy — seconds, read-only
php craft holmes/audit --fail-on=critical

# nightly — the full comparison
php craft holmes/audit --mode=deep --deep-limit=0 --fail-on=warning

Repairing from a deploy script

holmes/audit --fix is safe to run unattended: every repair goes through Craft’s indexer, and each one rediscovers its own scope rather than trusting the report. The one thing to be deliberate about is holmes/sync/all on a large production site — it queues a reindex of everything, which is a lot of work to start by accident.

More in AI & Search

Pairs well with Holmes

Getting found, by people and by machines. Faceted search, recommendations, GEO and instant indexing, image similarity, and tools that keep links and the search index honest.