farsi/nova-command-center
Adds a command center to Laravel Nova: run Artisan commands and quick actions from one panel without opening a terminal. Browse available commands, execute them with arguments and options, and review output right inside your admin UI - handy for routine maintenance and debugging.
Architecture fit. This is a Laravel Nova tool, not a standalone service. It registers a route and a Vue component inside the existing Nova SPA, and the backing Laravel controller shells out to artisan or the system shell. That means command execution happens inside the same PHP-FPM pool as your admin panel — no queue worker, no dedicated runner, no process isolation. For a TPM this is the central architectural fact: you are adding a privileged, synchronous execution surface to the most sensitive application in the stack. Fit is reasonable only for single-node or tightly constrained deployments with a small, named operator group; it fits poorly in horizontally scaled fleets where "which node did that artisan migrate actually run on?" becomes unanswerable.
Integration feasibility. Mechanically trivial: composer require, register the tool in NovaServiceProvider::tools(), publish config/assets, deploy. Effort is measured in hours. The real cost is authorization design, audit integration, and change-control approval — none of which the package can supply.
Technical risk — high, and security-dominated. Running shell commands from a web dashboard is a remote-code-execution surface by design. The description's claim of "secure" must be independently verified rather than assumed. The critical unknown is whether the tool implements Nova's authorize() callback on its tool registration; if it does not, any authenticated Nova user inherits shell access. Secondary risks: allowlist vs. denylist for permitted commands (a denylist is inadequate — artisan tinker alone yields arbitrary PHP execution), output escaping when rendering captured stdout/stderr back into the Nova UI, CSRF coverage on the execution endpoint, whether command history and output are persisted and for how long, and whether destructive commands require a confirmation step.
Key questions for the maintainer / code review:
authorize() gate, and is it enforced server-side on the execute endpoint (not just hidden in the UI)?tinker, serve, queue:work, or raw shell escape it?Process/shell_exec, or can it dispatch over SSH to remote hosts?Stack fit. Prerequisites are Laravel Nova 4 or 5 (a paid, per-site licensed product), Laravel 9+, and PHP 8.1+. The decisive gate is whether Nova is already the admin surface. If it is not, this package is disqualified — standing up a paid admin panel solely to obtain a command runner is a poor trade against SSH, Forge, Envoyer, or SSM.
Migration path.
composer require farsi/nova-command-center in a sandbox branch; pin the exact version.authorize() closure scoped to a dedicated permission (e.g. ops.execute-commands), not a role.Compatibility. Verify asset compilation against your Nova major — Nova 4 and 5 differ in frontend build tooling, and an unbuilt asset pipeline is the most common install failure. Confirm PHP 8.3/8.4 support explicitly; the package's low adoption means edge-version breakage will not be reported by anyone else.
Sequencing. Treat this as a security change request, not a dependency bump. Approval, allowlist design, and audit wiring must land before the tool is visible in production Nova. Roll back by removing the tool registration — no schema migration dependency expected, but confirm whether the package creates a history table.
Maintenance. Single-maintainer, MIT, 8 stars, zero dependents. There is effectively no community backstop: a Nova 6 or Laravel 13 release may leave this unmaintained with no upstream fix. Budget for a fork-and-own posture from day one, and pin the version rather than floating.
Support. No vendor, no SLA, no security disclosure process. Vulnerability triage is entirely yours.
Scaling. Two hard limits. First, each execution occupies a PHP-FPM worker for its full duration — a long artisan job can exhaust the pool and take the admin panel down with it. Second, in a multi-instance deployment the command executes on whichever node served the request; there is no node targeting, so cluster-wide operations are unreliable and node-scoped operations are non-deterministic. Neither is fixable without forking.
Failure modes to plan for.
queue:work, serve, migrate with prompts) hang until PHP's max_execution_time kills the request, leaving an orphaned child process.Ramp-up. Installation and basic use are a single afternoon for a Laravel developer. Certification for production — authorization review, allowlist curation, audit validation, incident runbook, and a documented break-glass alternative — is a multi-week governance exercise disproportionate to the convenience gained. Given the low adoption signal and the availability of mature alternatives with proper audit trails (Forge/Envoyer command runners, Teleport, AWS SSM), I would position this as a staging and break-glass convenience tool only, never as the production operational control plane.
How can I help you explore Laravel packages today?