Skip to content
Back to skills

Luminarium

ASecurity

Print the localhost URL for The Luminarium — moflo's daemon dashboard — for the current project. Use when the user asks for "the luminarium link", "the moflo dashboard", "the daemon UI", or anything synonymous. Each project gets a deterministic port in 33000–33999; the actual bound port is recorded in `.moflo/daemon.lock`.

  • 18 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 20, 2026
ai-agents

Works with

  • claude code
  • cli

Security analysis

A100/100

Scanned September 20, 2026

npx -y skills add eric-cielo/moflo --skill luminarium --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Luminarium?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Luminarium
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/eric-cielo-luminarium/badge)](https://www.skillsdirectory.com/skills/eric-cielo-luminarium)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: luminarium
description: |
  Print the localhost URL for The Luminarium — moflo's daemon dashboard — for the current project.
  Use when the user asks for "the luminarium link", "the moflo dashboard", "the daemon UI", or anything synonymous.
  Each project gets a deterministic port in 33000–33999; the actual bound port is recorded in `.moflo/daemon.lock`.
---

# /luminarium — Project Dashboard Link

Surface the URL for The Luminarium (the moflo daemon's localhost UI) for the project that this session is running in. No prompts, no confirmations — print the link and stop.

## Procedure

1. **Find the project root.** Walk up from `process.cwd()` looking for a `.moflo/` directory. The session's cwd is almost always the project root, so check there first.

2. **Read `.moflo/daemon.lock`.** It's a JSON file written by the daemon at bind time. The dashboard port is the `port` field:

   ```json
   { "pid": 12345, "port": 33421, "startedAt": "...", ... }
   ```

   - If the file exists and `port` is a valid number → the daemon is running and bound. Use that port.
   - If the file is missing or `port` is absent/invalid → the daemon is not running. See step 4.

3. **Print the link** in a single line, with the path verbatim — Claude Code renders it as clickable:

   ```
   The Luminarium: http://localhost:<port>
   ```

   Nothing else. No banner, no follow-up question, no "what would you like to do?".

4. **If the daemon isn't running** (no lock file, or unparseable), say so in one line and offer the start command — don't run it:

   ```
   The moflo daemon isn't running for this project. Start it with: npx flo daemon start
   ```

## Why read the lock, not compute the port

The port is project-deterministic (sha256(projectRoot) mapped into 33000–33999), but if the deterministic port was already taken at bind time the daemon scans forward and binds an alternate. The lock file is the only source of truth for what's actually bound. Do not compute the hash yourself — read the file.

## Don't

- Don't fall back to any hardcoded port — there is no project-agnostic dashboard port; a literal would route to a foreign daemon on a multi-project machine. If the lock is missing, report "not running".
- Don't compute the deterministic port and report it as the link when the lock is missing — the daemon may be down, or bound to an alternate port. Report "not running" instead.
- Don't run `flo daemon start` automatically — the user asked for a link, not for daemon management. Leave starting to `/healer` or the user.
- Don't open a browser. Print the URL; let the user click.

## Output

A single line. Examples:

```
The Luminarium: http://localhost:33421
```

```
The moflo daemon isn't running for this project. Start it with: npx flo daemon start
```

## See Also

- `/healer` — diagnoses and (with `--fix`) starts the daemon if it's not running.
- `src/cli/services/daemon-port.ts` (and its JS twin `bin/lib/daemon-port.mjs`) — canonical port-resolution helpers; `resolveClientPort()` is what the rest of moflo uses.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.