Each group has its own subcommand surface.
hooks <install|remove|status>
Dispatch: src/main.js:968; installHooks, removeHooks, statusHooks in src/core/hooks.js.
Flags: --root, --json.
Writes: .git/hooks/post-commit, .git/hooks/post-merge. Status returns a hook → boolean map.
semantic refresh
Dispatch: src/main.js:1007 · runSemanticRefresh(root, config).
Flags: --root, --json.
Writes: semantic tables in .agentify/index.db (TS/JS symbols, exports, imports).
clean
Dispatch: src/main.js:1014 · runClean(root, config, { planned, sessions, all }) in src/core/cleanup.js.
Flags: --planned, --sessions, --all, --dry-run, --root, --json.
Deletes: entries under .agentify/planned/, .agentify/session/, .agentify/runs/ based on flags. --all includes optional groups.
cache <gc|status>
Dispatch: src/main.js:1045; garbageCollect(cacheRoot, maxAge) and cacheStatus(cacheRoot) in src/core/cache.js.
Flags: --max-age <days> (default 7), --root, --json.
Reads/writes: .agentify/cache/. Status returns blob count and total size.
memory compress <file>
Dispatch: src/main.js:859.
Flags: --root, --json.
Currently a placeholder; requires the caveman-compress skill. The path resolves but the operation is reserved for future use.
Operational notes.
Hooks are managed; running install repeatedly is idempotent. remove reverses the install. status never writes.
Run semantic refresh after large refactors. up already refreshes facts; semantic refresh targets the semantic tables only.
Always pair with --dry-run first. Without any group flag the command reports the available groups and exits.
gc uses the maxAge parameter to drop blobs older than the cutoff. status is read-only.