PHPackages                             larafleet/agent - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. larafleet/agent

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

larafleet/agent
===============

Laravel monitoring agent for LaraFleet – sends heartbeats with version, security advisory, queue, and uptime data.

v0.2.0(3w ago)090↓60.3%MITPHPPHP ^8.2CI passing

Since May 28Pushed 3w agoCompare

[ Source](https://github.com/LaraFleet/agent)[ Packagist](https://packagist.org/packages/larafleet/agent)[ RSS](/packages/larafleet-agent/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (18)Versions (8)Used By (0)

LaraFleet Agent
===============

[](#larafleet-agent)

[![Tests](https://github.com/larafleet/agent/actions/workflows/tests.yml/badge.svg)](https://github.com/larafleet/agent/actions/workflows/tests.yml)

The official monitoring agent for [LaraFleet](https://larafleet.com) – the monitoring platform for Laravel applications.

Installation
------------

[](#installation)

```
composer require larafleet/agent
php artisan larafleet:install
```

The install command prompts for your API key from the LaraFleet dashboard and updates `.env` automatically.

How it works
------------

[](#how-it-works)

The agent runs `larafleet:heartbeat` every 5 minutes via the Laravel Scheduler. Only the standard cron entry is required — no queue worker or Supervisor needed:

```
* * * * * php /path-to-app/artisan schedule:run >> /dev/null 2>&1

```

**Cheap collectors** (Queue, Scheduler, Disk) run on every heartbeat. **Expensive collectors** (Composer, npm, Laravel/PHP version, Env) run once per hour.

Heartbeat typeFrequencyPayload`full`Hourly (and first run)All fields`quick`Every 5 min (between full)Queue, Scheduler, Disk onlyThis reduces snapshot rows in the dashboard from ~288 to ~24 per project per day.

What data is sent?
------------------

[](#what-data-is-sent)

CategoryDetailsFrequencyQueue statusFailed jobs, queue sizeEvery 5 minSchedulerLast run, missedEvery 5 minDisk/storageDirectory size in MBEvery 5 minLaravel version`Application::VERSION`HourlyPHP version + extensions`PHP_VERSION`, `get_loaded_extensions()`HourlyComposer packagesInstalled, outdated (major/minor/patch)HourlyComposer security advisoriesvia `composer audit`Hourlynpm packagesInstalled, outdatedHourlynpm security advisoriesvia `npm audit`HourlyEnv snapshotWhitelisted keys only (configurable)HourlyDeploymentTimestamp (mtime of vendor/autoload.php), Git hashHourlyException Reporting
-------------------

[](#exception-reporting)

Unhandled exceptions are automatically forwarded to LaraFleet — no extra setup required after installation. The agent hooks into Laravel's exception handler and sends a signed report to `POST /api/exceptions`.

**What is reported:**

FieldDescription`exception.class`Exception class name`exception.message`Exception message`exception.file` / `line`Source location`exception.trace`Full stack trace`exception.fingerprint`SHA-256 hash for deduplication`request.url`Request URL (path only, no query string)`request.query` / `input`GET and POST parameters (sensitive fields filtered)`request.user_id`Authenticated user ID (no other user data)`context`Laravel version, PHP version, environment**Filtering:** the following request keys are replaced with `[FILTERED]` before transmission: `password`, `password_confirmation`, `current_password`, `token`, `api_key`. Custom keys can be added via `exceptions.dontFlash`.

**Disabling:**

```
LARAFLEET_EXCEPTIONS_ENABLED=false
```

Or extend `exceptions.dontReport` in `config/larafleet-agent.php` to suppress specific exception classes:

```
'exceptions' => [
    'dontReport' => [
        \App\Exceptions\MyExpectedException::class,
    ],
],
```

Security
--------

[](#security)

- Every request is signed with **HMAC-SHA256**
- **Replay protection**: requests older than 60 seconds are rejected by the server
- **Env whitelist**: only explicitly allowed keys are transmitted
- **Input filtering**: sensitive request parameters are never transmitted in plain text
- No SSH credentials, no passwords, no full `.env` files

Configuration
-------------

[](#configuration)

```
php artisan vendor:publish --tag=larafleet-agent-config
```

All options in `config/larafleet-agent.php`:

KeyDefaultDescription`endpoint``https://app.larafleet.com/api/heartbeat`Server URL`api_key`—From your LaraFleet project settings`interval_minutes``5`Scheduler run frequency in minutes`dispatch``command``command` (synchronous, recommended) or `job` (Queue)`timeout``10`HTTP timeout in seconds`queue``null`Queue connection for `dispatch=job` mode`npm_enabled``true`Enable npm data collection`env_whitelist`see configAllowed env keys`deployment_file``vendor/autoload.php`File used for deployment detection`collectors.intervals.composer``3600`Composer collector interval in seconds`collectors.intervals.npm``3600`npm collector interval in seconds`collectors.intervals.environment``3600`Version/Env collector interval in seconds`exceptions.enabled``true`Enable exception reporting`exceptions.dontReport`see configException classes that are never reported`exceptions.dontFlash`see configRequest keys replaced with `[FILTERED]`### Dispatch mode

[](#dispatch-mode)

By default the heartbeat runs synchronously inside the Scheduler process (`dispatch=command`). For apps that already have a running Queue Worker, set `LARAFLEET_DISPATCH=job` in `.env`to offload the heartbeat to the queue instead.

License
-------

[](#license)

MIT

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance94

Actively maintained with recent releases

Popularity13

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~5 days

Total

7

Last Release

25d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/125511590?v=4)[smueller1337](/maintainers/smueller1337)[@smueller1337](https://github.com/smueller1337)

---

Top Contributors

[![smueller1337](https://avatars.githubusercontent.com/u/125511590?v=4)](https://github.com/smueller1337 "smueller1337 (16 commits)")

---

Tags

heartbeat-monitoringlaravelsecuritylaravelmonitoringsecuritydevopsheartbeat

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/larafleet-agent/health.svg)

```
[![Health](https://phpackages.com/badges/larafleet-agent/health.svg)](https://phpackages.com/packages/larafleet-agent)
```

###  Alternatives

[laravel/pulse

Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.

1.7k15.1M136](/packages/laravel-pulse)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

77922.3M186](/packages/laravel-mcp)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M347](/packages/psalm-plugin-laravel)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9762.4M133](/packages/roots-acorn)[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M246](/packages/laravel-ai)[spatie/laravel-export

Create a static site bundle from a Laravel app

674146.0k6](/packages/spatie-laravel-export)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
