magic-glow

magic-glow is a skill for Claude Code from SummerEngine/summer-engine-agent. It costs 82 tokens per session (5,272 once invoked), scanned A, original, MIT.

An animated magical aura combining pulsing light, drifting glowing particles, and optional glow on the source object. It is made for Godot game scenes.

In plain words
What is it for?
Use it for enchanted items, soul gems, runes, summoning circles, wisps, fairies, magical waypoints, and quest objects that need attention.
Why use it?
It makes enchanted objects and magical locations visibly active instead of relying on a static glow.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter. Also seen: mentions Claude Code; mentions Codex.

Needs its repository: it reads a path above its own folder, which exists only inside the repository. The line is summer_set_prop(scenePath="res://main.tscn", path="./Player/Hand/Sword/Glow", key="pulse_source_mesh", value="../Blade").

Part of the summer plugin — 80 skills, 2 commands, 2 hooks, 1 MCP server shipped together

Good fit Use it for enchanted items, soul gems, runes, summoning circles, wisps, fairies, magical waypoints, and quest objects that need attention.

Compare 6 skills from other repositories ↓
Install

Getting it into your agent

It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.

Clone the repo
git clone --depth 1 https://github.com/SummerEngine/summer-engine-agent
agentmods
npx agentmods add skills/summerengine/summer-engine-agent/magic-glow

Made for: Claude Code.

Or install summer, the plugin that ships this one along with the rest of its 80 skills, 2 commands, 2 hooks, 1 MCP server.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for magic-glow

README.md
[![agentmods](https://agentmods.dev/badge/skills/summerengine/summer-engine-agent/magic-glow/github.svg)](https://agentmods.dev/skills/summerengine/summer-engine-agent/magic-glow)
Your own site
<a href="https://agentmods.dev/skills/summerengine/summer-engine-agent/magic-glow"><img src="https://agentmods.dev/badge/skills/summerengine/summer-engine-agent/magic-glow/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for magic-glow

Your own site · 80×15
<a href="https://agentmods.dev/skills/summerengine/summer-engine-agent/magic-glow"><img src="https://agentmods.dev/badge/skills/summerengine/summer-engine-agent/magic-glow.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 82 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 5,272 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00082 $0.05272
Opus 5.5 $0.00033 $0.02109
Sonnet 5.5 $0.00016 $0.01054
Haiku 4.5 $0.00008 $0.00527

Measured 1mo ago against content hash 4e02d00f1955, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

magic-glow scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/visual-effects/recipes/magic-glow/SKILL.md · 411 lines

How it starts

The opening of the file, as written. The whole thing — 411 lines — stays where its author put it; the contents beside it link to each section on GitHub.

magic-glow — Pulsing Light + Drifting Motes

Three layered cues that together read as "magical": a pulsing OmniLight3D (sin-wave energy), drifting additive billboard motes orbiting the source, and optional emission on the source mesh itself. Used for: enchanted items, soul gems, runes, summoning circles, wisps, fairies, magical waypoints. The recipe writes a single controller that builds and animates all three layers from one node.

When to use

  • "This sword is enchanted — add a glow."
  • "Make the soul gem pulse with light."
  • "Magic rune on the floor glowing."
  • "Wisp / fairy / firefly companion."
  • "The summoning circle is active."
  • "Quest item glows so the player notices it."
  • Pre-charge phase before casting lightning or muzzle-flash (charge-up beam).

When NOT to use

  • The user wants a static, non-animated glow — just enable emission on the mesh's material; this recipe is overkill.
  • The user wants flames, not a glow — use fire (or magic-fire variant of fire).
  • The user wants a beam shooting out, not an aura — use lightning with the plasma-laser variant.
  • The user wants a screen-space bloom on the whole scene — that's WorldEnvironment.glow_*, not a per-object recipe.
  • The user wants a 2D glow on a UI sprite — use canvas_item shader with a radial gradient, not this 3D recipe.

Recipe

1. Files to create

addons/vfx/magic-glow/magic_glow.gd
addons/vfx/magic-glow/magic_glow.tscn

No custom shader — uses canonical additive billboard motes (see _building-blocks/additive-billboard-particles.md) plus an OmniLight3D. Optional: pair with the source mesh's existing material's emission.

2. GDScript controller

addons/vfx/magic-glow/magic_glow.gd:

@tool
class_name MagicGlow
extends Node3D

## Builds: OmniLight3D (pulsing) + GPUParticles3D motes (drifting orbit) + optional mesh emission tween.
## Add as a child of any glowing object.

@export_group("Color")
@export var glow_color: Color = Color(0.55, 0.85, 1.0)
@export_range(0.0, 12.0) var light_energy_base: float = 1.4
@export_range(0.0, 12.0) var light_energy_amplitude: float = 0.8

@export_group("Pulse")
@export_range(0.05, 4.0) var pulse_hz: float = 0.7
@export var pulse_easing: Curve  ## leave null for sine; assign for custom

@export_group("Light")
@export_range(0.5, 30.0) var light_range: float = 4.0
@export var light_shadow_enabled: bool = false

@export_group("Motes")
@export_range(0, 256) var mote_count: int = 24
@export_range(0.05, 4.0) var mote_radius: float = 0.6
@export_range(0.5, 8.0)  var mote_lifetime: float = 2.0
@export_range(0.01, 0.30) var mote_size: float = 0.06
@export_range(0.0, 8.0)  var mote_emission_boost: float = 4.0
@export var mote_drift_up: float = 0.3       ## meters/sec mean upward drift

@export_group("Source mesh emission (optional)")
@export var pulse_source_mesh: NodePath      ## point at a MeshInstance3D to tween its emission_energy_multiplier
@export_range(0.0, 12.0) var source_emission_base: float = 1.0
@export_range(0.0, 12.0) var source_emission_amplitude: float = 1.5

var _light: OmniLight3D
var _motes: GPUParticles3D
var _source_mesh: MeshInstance3D
var _source_mat: BaseMaterial3D
var _t: float = 0.0
var _intensity: float = 1.0

func _ready() -> void:
    _build_light()
    _build_motes()
    _resolve_source_mesh()
    set_process(true)

func _build_light() -> void:
    _light = OmniLight3D.new()
    _light.light_color = glow_color
    _light.light_energy = light_energy_base
    _light.omni_range = light_range
    _light.shadow_enabled = light_shadow_enabled
    add_child(_light)

func _build_motes() -> void:
    if mote_count <= 0:
        return
    _motes = GPUParticles3D.new()
    _motes.amount = mote_count
    _motes.lifetime = mote_lifetime
    _motes.one_shot = false
    _motes.explosiveness = 0.0
    _motes.local_coords = true

    var pm := ParticleProcessMaterial.new()
    pm.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_SPHERE
    pm.emission_sphere_radius = mote_radius
    pm.direction = Vector3.UP
    pm.spread = 180.0
    pm.initial_velocity_min = 0.05
    pm.initial_velocity_max = 0.20
    pm.gravity = Vector3(0, mote_drift_up * 0.5, 0)
    pm.scale_min = mote_size * 0.7
    pm.scale_max = mote_size * 1.3
    pm.color = glow_color
    pm.damping_min = 0.5
    pm.damping_max = 1.2
    _motes.process_material = pm

    var mesh := QuadMesh.new()
    mesh.size = Vector2.ONE
    # BaseMaterial3D is abstract ("Native class "BaseMaterial3D" cannot be
    # constructed as it is abstract"); StandardMaterial3D is the concrete subclass.
    var bm := StandardMaterial3D.new()
    bm.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
    bm.blend_mode = BaseMaterial3D.BLEND_MODE_ADD
    bm.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
    bm.billboard_mode = BaseMaterial3D.BILLBOARD_PARTICLES
    bm.albedo_color = glow_color
    bm.emission_enabled = true
    bm.emission = glow_color
    bm.emission_energy_multiplier = mote_emission_boost
    mesh.material = bm
    _motes.draw_pass_1 = mesh

    add_child(_motes)

func _resolve_source_mesh() -> void:
    if pulse_source_mesh.is_empty(): return
    var n := get_node_or_null(pulse_source_mesh)
    if n is MeshInstance3D:
        _source_mesh = n
        var m := _source_mesh.get_active_material(0)
        if m is BaseMaterial3D:
            _source_mat = m
            _source_mat.emission_enabled = true
            if _source_mat.emission == Color.BLACK:
                _source_mat.emission = glow_color

func _process(delta: float) -> void:
    _t += delta
    var phase: float = (sin(_t * TAU * pulse_hz) + 1.0) * 0.5   # 0..1
    if pulse_easing:
        phase = pulse_easing.sample(phase)

    if _light:
        _light.light_energy = (light_energy_base + light_energy_amplitude * phase) * _intensity
    if _source_mat:
        _source_mat.emission_energy_multiplier = (source_emission_base + source_emission_amplitude * phase) * _intensity

func set_intensity(scale: float) -> void:
    ## Scale all visible cues 0..1+ (e.g., charge-up: tween from 0 to 1 over a second).
    ## Held as a separate factor rather than multiplied into light_energy_base /
    ## light_energy_amplitude: a multiplying version (`light_energy_base *= scale`)
    ## pins both fields to 0.0 forever after set_intensity(0.0), so the charge-up
    ## tween from 0 to 1 never brings the glow back.
    _intensity = scale
    if _motes:
        _motes.amount_ratio = scale

func extinguish(fade_seconds: float = 0.6) -> void:
    var t := create_tween().set_parallel(true)
    t.tween_property(_light, "light_energy", 0.0, fade_seconds)
    if _motes:
        t.tween_property(_motes, "amount_ratio", 0.0, fade_seconds)
    t.chain().tween_callback(queue_free)

Read the full file on GitHub · 411 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago First seen · 411 lines · 82 tokens per session scan A 4e02d00f1955

Subscribe to this mod's changes

magic-glow is a skill published in the GitHub repository SummerEngine/summer-engine-agent (59 stars, last pushed 1mo ago), licensed MIT. It adds 82 tokens to every session and 5,272 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.

Related

Other skills, from other repositories

self-evolve

Capture reusable patterns from a finished project and lift them into framework-level priors (contracts, modules, skeletons) that future projects inherit. Run only when the user explicitly requests self-evolution; the orchestrator executes the workflow.

tettethu/VibeGame · 50 tokens

artist-self-evolve

Distill stable art-generation patterns from a completed project, so future projects produce comparable assets without re-discovering the prompts. Lead-dispatched only — orchestrator invokes this skill from its self-evolve flow with a game-slug message; do not self-trigger.

tettethu/VibeGame · 62 tokens

vibegame-build

Run VibeGame's standard end-to-end game development workflow with reviewer gates. Use when the user wants to create a game from zero or evolve an existing game across multiple stages.

tettethu/VibeGame · 42 tokens

vibegame-start

Resume a VibeGame orchestrator session after vibegame start. Use at the beginning of a Claude or Codex session to inspect team runtime state, repair missing persistent members, load goal and GDD context, inspect tasks, and ask the user what to do next.

tettethu/VibeGame · 61 tokens

vibegame-edit

Iterate broadly on an existing game, on top of vibegame-build. Use when the user asks to change an existing game's art style, genre, or core rules. Not for local tuning such as numbers or game feel. Orchestrator only.

tettethu/VibeGame · 57 tokens

hearth-feel

Make a Hearth game feel good, not just run — the juice stack (hit-stop, screen shake, flash, particle bursts, layered sound), tween easing, camera effects, anticipation/recovery animation idioms, game-UX conventions (menus, pause, onboarding, difficulty, save etiquette), effect-asserting playtests, and the quality bar…

echoo19/hearth · 97 tokens