Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Nova Command Runner Laravel Package

stepanenko3/nova-command-runner

Run Artisan commands directly from Laravel Nova. This Nova tool adds a command runner panel where you can execute and manage artisan commands without leaving your admin dashboard, with output display and a simple interface for developers and admins.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

The package is a Laravel Nova tool — the canonical, supported extension point for adding functionality to Nova's admin SPA. It sits as a thin layer: a Composer package, a service provider, a tool registration in NovaServiceProvider, a Vue component, and a backend controller that shells out via Symfony Process. There is no data model, no queue integration, and no background worker. That is architecturally clean for its purpose and imposes almost no structural constraint on the host application.

The fit is conditional on two things being true already: you run Nova 4 or higher (Nova is a paid, per-site licensed product — this package is worthless without it), and you accept that the tool's core function is remote command execution from a browser session. The second condition is the entire evaluation. Everything else is a one-day install.

Integration feasibility

Composer install, register the tool, publish config and assets, define the command surface. Realistic engineering effort for a working install: half a day to two days. The real cost is the security and change-management review, which is measured in days-to-weeks depending on your compliance posture, not hours. Note that with 36 stars and zero dependents, there is no ecosystem validation — no third party has stress-tested edge cases on your behalf.

Technical risk

  • Privileged execution surface (highest). This is an RCE endpoint gated by Nova authentication and whatever authorization the package enforces. Any weakness in Nova session handling, admin account compromise, or a missing per-command gate converts an admin panel into a shell.
  • Single-maintainer / low-adoption risk. One author, low star count, zero dependents, no visible commercial backing. A future Nova or Laravel major could strand it.
  • Unverified hardening. I cannot confirm from metadata alone whether the package ships an allowlist, per-command authorization, confirmation prompts, audit logging, timeouts, or exit-code capture. Treat all as unconfirmed until source review.

Key questions to resolve before adoption

  1. Does it support an explicit command allowlist, or is the command string free-form?
  2. Are user-supplied arguments accepted, and if so, how are they escaped?
  3. Is there a Nova authorization gate per tool and per command, or does access follow Nova's global admin role?
  4. Is every invocation logged with user, command, timestamp, exit code, and output (and where is that log retained)?
  5. How are commands executed — timeout configured? stdout/stderr streamed or buffered? What happens on timeout — orphaned child processes?
  6. Does it capture and surface non-zero exit codes, or does it report success regardless?
  7. Which OS user runs the process (web server user), and are environment variables consistent with your deploy/CLI context?
  8. Are there tests and CI? Is there a stated supported matrix (Nova 4 vs 5, Laravel 10/11/12, PHP 8.1–8.4)?

Integration Approach

Stack fit

Requires an existing Laravel application on Nova 4+, PHP 8.1+. Pure Composer install; no database migrations expected, no queue or scheduler dependency. Frontend assets are typically pre-built in the package, so no npm toolchain requirement on the host. It coexists cleanly with Forge, Envoyer, GitHub Actions, or whatever deploy pipeline you already run — it does not replace any of them.

Migration path

This is an additive capability, not a migration. The decision to sequence is not "how do we move off X" but "which of our existing SSH-and-terminal workflows do we deliberately allow through the browser, and which do we explicitly forbid." Write that policy before you composer require. The most common failure here is adopting it as a convenience shortcut and discovering six months later that mutating production operations happen outside your audit trail.

Compatibility

Pin the version explicitly. Verify three constraints before install: Nova major version alignment, PHP constraint, and that no other Nova tool in your install registers conflicting routes or dashboard panels. Because it is a UI-layer tool, breakage on a Nova upgrade is likely to be cosmetic-then-fatal (blank tool panel) rather than data-destructive — but it will happen silently on a routine composer update unless pinned.

Sequencing

  1. Local install on a scratch app. Read the controller source. Answer the key questions above.
  2. Command inventory. Classify every candidate command as read-only-diagnostic, reversible-mutating, or irreversible. Only the first category proceeds past phase 4.
  3. Authorization design. Bind the tool to a dedicated Nova role or gate. Enforce MFA and IP allowlisting on the Nova panel itself.
  4. Staging pilot (2–4 weeks). Enable with an allowlist restricted to read-only commands. Instrument with application-level logging independent of the package. Alert on any invocation.
  5. Production, read-only only. Grant to on-call and senior engineers. Review the audit log at 30 days. Only then consider expanding — and I would argue against expanding to mutating commands at all, since CI is the correct home for those.

Operational Impact

Maintenance

You are buying a dependency with one maintainer and no dependents, which means no crowd-sourced bug discovery and no implicit upgrade pressure. Assume you may need to fork and vendor it. Budget a named owner and a review cadence (semiannual, plus on every Nova major). If it becomes load-bearing for incident response, the fork is no longer hypothetical — plan for it early.

Support

Community issues only; no SLA, no vendor escalation. Write an internal runbook covering install, allowlist changes, and rollback (removing the tool registration is a safe, immediate kill switch — document that as the incident lever).

Scaling

Each invocation occupies one PHP request. Long-running commands consume PHP-FPM workers, reduce capacity for real user traffic, and have no concurrency control — two engineers can launch the same destructive command simultaneously. This package does not scale as a job runner and should never be used as one. Anything over ~30 seconds belongs in a queue or CI.

Failure modes

  • Environment divergence. Web-server user differs from deploy user: missing PATH entries, different .env, no SSH agent, different PHP binary. Commands that work in your terminal fail here, often confusingly.
  • Permission denials on storage/, bootstrap/cache, or log files under the web user.
  • Output truncation on long output with no streaming — the operator sees a partial result and assumes completion.
  • Silent failure. If exit codes are not surfaced, a failed migration reads as success.
  • Timeout orphans. PHP timeout kills the parent; the child process may survive.
  • Injection. If free-form command strings or unescaped arguments are accepted, any Nova user becomes a shell user.

Ramp-up

Adoption friction is near zero — the Nova UI is familiar and the tool is a single panel. Training effort is not about the tool but about the policy: who has access, what is on the allowlist, when to use SSH or CI instead, and how to log an invocation in the incident timeline. That is a 30-minute briefing plus a written policy, not a training program.

Bottom line for a TPM: the integration cost is trivial and the operational cost is not. Approve this only with a command allowlist, a dedicated authorization gate, independent audit logging, and a read-only-only production scope. If the source review in phase 1 cannot confirm allowlisting and audit logging, the correct decision is to decline or to fork it and add those controls yourself — a 36-star package should not be the boundary between your admin panel and a production shell.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib