ray-skill
Sends data logs, variables, and debugging info to the Ray desktop application via HTTP.
Install
mkdir -p .claude/skills/ray-skill && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/7884" && unzip -o skill.zip -d .claude/skills/ray-skill && rm skill.zipInstalls to .claude/skills/ray-skill
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Use when user says "send to Ray," "show in Ray," "debug in Ray," "log to Ray," "display in Ray," or wants to visualize data, debug output, or show diagrams in the Ray desktop application.Key capabilities
- →Transmit logs to local Ray server
- →Format variable debugging output
- →Render custom HTML/text payloads
- →Attach origin file metadata to logs
How it works
It generates a JSON payload containing the variable data and call-site metadata, then transmits it via HTTP POST to the local Ray listener.
Inputs & outputs
When to use ray-skill
- →Log variables to Ray
- →Visualize debugging data from PHP
- →Send error logs to Ray dashboard
- →Track execution flow in real-time
About this skill
Ray Skill
Overview
Ray is Spatie's desktop debugging application for developers. Send data directly to Ray by making HTTP requests to its local server. This is what the ray() PHP function does under the hood.
Connection Details
| Setting | Default | Environment Variable |
|---|---|---|
| Host | localhost | RAY_HOST |
| Port | 23517 | RAY_PORT |
| URL | http://localhost:23517/ | - |
Request Format
Method: POST
Content-Type: application/json
User-Agent: Ray 1.0
Basic Request Structure
{
"uuid": "unique-identifier-for-this-ray-instance",
"payloads": [
{
"type": "log",
"content": { },
"origin": {
"file": "/path/to/file.php",
"line_number": 42,
"hostname": "my-machine"
}
}
],
"meta": {
"ray_package_version": "1.0.0"
}
}
Fields
| Field | Type | Description |
|---|---|---|
uuid | string | Unique identifier for this Ray instance. Reuse the same UUID to update an existing entry. |
payloads | array | Array of payload objects to send |
meta | object | Optional metadata (ray_package_version, project_name, php_version) |
Origin Object
Every payload includes origin information:
{
"file": "/Users/dev/project/app/Controller.php",
"line_number": 42,
"hostname": "dev-machine"
}
Payload Types
Log (Send Values)
{
"type": "log",
"content": {
"values": ["Hello World", 42, {"key": "value"}]
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
Custom (HTML/Text Content)
{
"type": "custom",
"content": {
"content": "<h1>HTML Content</h1><p>With formatting</p>",
"label": "My Label"
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
Table
{
"type": "table",
"content": {
"values": {"name": "John", "email": "[email protected]", "age": 30},
"label": "User Data"
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
Color
Set the color of the preceding log entry:
{
"type": "color",
"content": {
"color": "green"
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
Available colors: green, orange, red, purple, blue, gray
Screen Color
Set the background color of the screen:
{
"type": "screen_color",
"content": {
"color": "green"
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
Label
Add a label to the entry:
{
"type": "label",
"content": {
"label": "Important"
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
Size
Set the size of the entry:
{
"type": "size",
"content": {
"size": "lg"
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
Available sizes: sm, lg
Notify (Desktop Notification)
{
"type": "notify",
"content": {
"value": "Task completed!"
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
New Screen
{
"type": "new_screen",
"content": {
"name": "Debug Session"
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
Measure (Timing)
{
"type": "measure",
"content": {
"name": "my-timer",
"is_new_timer": true,
"total_time": 0,
"time_since_last_call": 0,
"max_memory_usage_during_total_time": 0,
"max_memory_usage_since_last_call": 0
},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
For subsequent measurements, set is_new_timer: false and provide actual timing values.
Simple Payloads (No Content)
These payloads only need a type and empty content:
{
"type": "separator",
"content": {},
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
| Type | Purpose |
|---|---|
separator | Add visual divider |
clear_all | Clear all entries |
hide | Hide this entry |
remove | Remove this entry |
confetti | Show confetti animation |
show_app | Bring Ray to foreground |
hide_app | Hide Ray window |
Combining Multiple Payloads
Send multiple payloads in one request. Use the same uuid to apply modifiers (color, label, size) to a log entry:
{
"uuid": "abc-123",
"payloads": [
{
"type": "log",
"content": { "values": ["Important message"] },
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
},
{
"type": "color",
"content": { "color": "red" },
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
},
{
"type": "label",
"content": { "label": "ERROR" },
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
},
{
"type": "size",
"content": { "size": "lg" },
"origin": { "file": "test.php", "line_number": 1, "hostname": "localhost" }
}
],
"meta": {}
}
Example: Complete Request
Send a green, labeled log message:
curl -X POST http://localhost:23517/ \
-H "Content-Type: application/json" \
-H "User-Agent: Ray 1.0" \
-d '{
"uuid": "my-unique-id-123",
"payloads": [
{
"type": "log",
"content": {
"values": ["User logged in", {"user_id": 42, "name": "John"}]
},
"origin": {
"file": "/app/AuthController.php",
"line_number": 55,
"hostname": "dev-server"
}
},
{
"type": "color",
"content": { "color": "green" },
"origin": { "file": "/app/AuthController.php", "line_number": 55, "hostname": "dev-server" }
},
{
"type": "label",
"content": { "label": "Auth" },
"origin": { "file": "/app/AuthController.php", "line_number": 55, "hostname": "dev-server" }
}
],
"meta": {
"project_name": "my-app"
}
}'
Availability Check
Before sending data, you can check if Ray is running:
GET http://localhost:23517/_availability_check
Ray responds with HTTP 404 when available (the endpoint doesn't exist, but the server is running).
Payload Type Reference
| Type | Content Fields | Purpose |
|---|---|---|
log | values (array) | Send values to Ray |
custom | content, label | HTML or text content |
table | values, label | Display as table |
color | color | Set entry color |
screen_color | color | Set screen background |
label | label | Add label to entry |
size | size | Set entry size (sm/lg) |
notify | value | Desktop notification |
new_screen | name | Create new screen |
measure | name, is_new_timer, timing fields | Performance timing |
separator | (empty) | Visual divider |
clear_all | (empty) | Clear all entries |
hide | (empty) | Hide entry |
remove | (empty) | Remove entry |
confetti | (empty) | Confetti animation |
show_app | (empty) | Show Ray window |
hide_app | (empty) | Hide Ray window |
When not to use it
- →Production debugging (security risk)
- →Environments where the Ray desktop app is not installed
Prerequisites
Limitations
- →Depends on local network access to port 23517
- →Requires the Ray app to be running
How it compares
Instead of raw console logs, it sends structured data to a specialized UI for visual navigation of variables.
Compared to similar skills
ray-skill side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| ray-skill (this skill) | 1 | 6mo | Review | Beginner |
| debug-cross-service-auth | 0 | 4mo | No flags | Intermediate |
| staticphp-build-troubleshooting | 0 | 1mo | Review | Intermediate |
| debugging-output-and-previewing-html-using-ray | 2 | 6mo | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by freekmurze
View all by freekmurze →You might also like
debug-cross-service-auth
J-Akiru5
Use when: diagnosing Supabase JWT handoff failures from Next.js frontend to Laravel backend including headers, CORS, issuer, audience, and secret mismatches.
staticphp-build-troubleshooting
crazywhalecc
Diagnose StaticPHP v3 failures. Use when investigating build, compile, linker, download, doctor, environment, CI, smoke-test, terminal output, spc.output.log, spc.shell.log, config.log, CMake logs, or user-provided error snippets from StaticPHP commands.
debugging-output-and-previewing-html-using-ray
spatie
Use when user says "send to Ray," "show in Ray," "debug in Ray," "log to Ray," "display in Ray," or wants to visualize data, debug output, or show diagrams in the Ray desktop application.
tensorboard
davila7
Visualize training metrics, debug models with histograms, compare experiments, visualize model graphs, and profile performance with TensorBoard - Google's ML visualization toolkit
token-data-sources
justinchuby
When debugging why the analysis page shows missing or zero token data, or when adding new cost/usage visualizations.
wp-testing-core
mikkelkrogsholm
Core WordPress testing procedures and patterns for browser-based plugin testing. Use when testing WordPress plugins, logging into WordPress admin, verifying plugin activation, or navigating WordPress UI.