Skip to content

CLI reference

Updated View as Markdown

Commands are registered by the configure hook under @rikology/pupitre/commands. Run inside the host application as node ace <command>. The flags below are Pupitre-specific; standard Ace help remains available.

Command Arguments and flags Behavior
pupitre:install --panel=admin, --path=/admin, --auth=web Rerun host configure while preserving existing files
make:panel <name> --path (default /name), --guard=web Generate panel definition; no force flag
make:resource <name> --model (default #models/name), --from-migration, --force Generate from Lucid metadata or migration columns
make:page <name> --force Generate a custom page
make:widget <name> --type=stats (stats/chart/table), --model, --force Generate widget; model path for table widgets
make:relation-manager <parent> <relation> --model (default parent model import), --force Generate manager for the parent’s named relationship
make:plugin <name> --force, --package, --dir (package only) Generate local plugin, or execute the versioned standalone package scaffolder
pupitre:inspect [resource] --json Policy/abilities, closure lifting and searchable-index diagnostics
pupitre:routes No Pupitre flags List registered routes grouped by panel
pupitre:prune No Pupitre flags Delete expired password-reset tokens and export files
pupitre:ui add <names...> --registry, --yes, --dry-run Validate kebab-case registry items and invoke shadcn@4 add; no --path option
shield:sync --user=<id-or-email> Create missing resource permissions and optionally attach each Shield panel’s super-admin role

Resource/relation generators and inspection/routes boot the app when needed, so configure host environment/database access first. Generation is not authorization: inspect generated fields and attach a policy before exposing them. Existing generated files are preserved unless the particular command supports and receives force.

pupitre:inspect posts --json is especially useful for client-first forms: it reports lifted expressions/computed expressions, server-static conditions and server watches rather than requiring you to guess why a callback is not reactive.

Inspection additionally reports strictAuthorization and a violations array listing missing policies for resources, nested resources and relation-manager related models. Strict panels can be inspected without registering HTTP routes even when their missing policies would prevent a web server from booting. The text report prints the same mode and violations as --json.

npm create @rikology/pupitre-plugin <name> -- [--dir <path>] [--force] is a standalone npm initializer, not an Ace command. See plugins for its package shape and naming rules.

node ace make:plugin team-tools --package --dir packages/team-tools executes npx --yes @rikology/create-pupitre-plugin@<major> team-tools --dir packages/team-tools, where <major> matches the installed Pupitre version. Without --dir, the Ace wrapper passes the normalized plugin name as the destination directory. It waits for the scaffolder and reports spawn/nonzero-exit failures; it does not merely print a command. --force applies to local generation, not the Ace package invocation.

UI payload files use registry:file with explicit ~/inertia/components/pupitre/<source-path> targets. Hook item names are normalized to kebab-case even when their filenames contain underscores. Do not use the direct shadcn installer’s --path: it flattens source paths and breaks imports.

shield:sync comes from @rikology/pupitre-shield/commands, registered by that package’s configure hook, not the core command loader. Apply its migrations and register shield({ userModel: ... }) first; see Shield setup. pupitre:ui is the command name and add is its operation argument, not a separate pupitre:ui:add command. Its dry run still reads the registry index.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close