Elyra
Elyra The coding agent e The native code editor Elyra Grove Native local development environment Askr The real server for Laravel & PHP Elyra Framework Rust + Svelte 5 framework for desktop apps Elyra Conductor Local project conductor Elyra SQL Server MySQL-compatible SQL server in Rust Elyra Félagi Agents as teammates on one board Elyra SQL Client Native desktop SQL workbench Elyra SQL Anywhere Replication-ready SQL engine Elyra Sjá SEO & GEO workspace for macOS Elyra DataGrid Server-driven data grid for Laravel
Start here
Concepts
Release notes
What's new
Elyra

Running it

The three processes Félagi needs besides the web server, and what stops working without each.


The short version

php artisan serve                                    # or nginx, php-fpm
php artisan queue:listen --queue=broadcasts,mail,webhooks,imports,default
php artisan schedule:work                            # or a cron entry
php artisan reverb:start                             # websockets

composer dev runs all of them for local work. In production they are four supervised processes, or three plus a real web server.

Every one of them fails silently. Nothing throws, no page breaks, no log fills up — a feature simply stops happening, and the first person to notice is the one who wondered why their autopilot never ran.


The scheduler

Without it, four things stop and nothing says so.

Command Runs Without it
felagi:reap every 30 seconds A laptop that closed mid-run keeps its task forever. Nothing is requeued, and the runtime shows as online indefinitely
felagi:autopilots every minute Scheduled autopilots never fire. Daily triage and weekly audits quietly do not happen
felagi:timers hourly A stopwatch left running is never closed. It is still capped when somebody stops it by hand, but nobody is reminded
felagi:cycles daily at 00:05 Cycles stop arriving. The current window runs past its end date, and unfinished work is never carried forward

One process:

php artisan schedule:work

Or one crontab line, which is what a server usually wants:

* * * * * cd /path/to/felagi && php artisan schedule:run >> /dev/null 2>&1

felagi:reap runs twice a minute, which a plain schedule:run cannot do on its own — Laravel handles the sub-minute frequency internally, so the crontab entry above is still correct.

Checking

php artisan schedule:list

Every command above should be listed with its next due time. If the list is empty, routes/console.php is not being loaded.


The queue worker

Five lanes, and the order matters.

php artisan queue:listen --queue=broadcasts,mail,webhooks,imports,default
Lane Carries Without it
broadcasts Live updates to open pages Boards stop moving on their own. A reload still shows the truth
mail Invitations, password resets, comment notifications Nobody is ever emailed
webhooks Outgoing deliveries Every webhook you configured silently never fires
imports A CSV being read An import sits at "queued" forever
default Everything else

Listing them in that order is not decoration: a live update is worthless three minutes behind a batch import, and a worker drains lanes left to right.

The whiteboard is the exception. Its changes are sent immediately rather than queued, so a board keeps working with no worker at all — see Broadcasting for why that one is different.

Checking

The dashboard reads the backlog and warns when nothing is draining it. From a shell:

php artisan queue:monitor broadcasts,mail,webhooks,imports,default

Reverb

php artisan reverb:start

Without it: live updates and whiteboard cursors stop. Everything else is unaffected, because a failed broadcast is never allowed to fail the write that caused it — see App\Support\Announce.

The whiteboard needs accept_client_events_from on the Reverb app, which is members by default. Cursors are whispered between browsers and never reach the application.


Commands you run by hand

Command For
felagi:admin {email} Grant or revoke platform administration. The only thing that sets is_admin, and it is deliberately not in any interface — see Permissions
felagi:daemon-token Issue a token for one machine, if you would rather not use the interface

Everything else is scheduled.


What to watch

There is no metrics endpoint and no health check. What exists:

  • The dashboard warns about a stalled queue and about runtimes that have gone quiet.
  • storage/logs/laravel.log has every webhook attempt, every failed delivery and every reaped task.
  • /admin/runtimes shows last-heartbeat times, which is the fastest way to tell whether the daemon side is alive.

Not there yet

  • No health endpoint. Nothing to point a monitor at.
  • No metrics. No Prometheus, no queue depth over time.
  • No supervisor or systemd units shipped. The commands above are the contract; how they stay running is yours.