Trigger.dev Realtime
papermark/papermark
Shows how to subscribe to Trigger.dev task runs from the backend and from React for progress indicators, live dashboards, AI response streams and approval waits.
Connects to the GRASS real-time event system via NATS WebSocket.
$ npx skills add LeoYeAI/openclaw-master-skills --skill structs-streaming -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills structs-streaming --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/structs-streaming .claude/skills/structs-streaming && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "structs-streaming" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/structs-streaming into .claude/skills/structs-streaming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "structs-streaming", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/structs-streamingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LeoYeAI/openclaw-master-skills --skill structs-streaming -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills structs-streaming --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/structs-streaming .agents/skills/structs-streaming && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "structs-streaming" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/structs-streaming into .agents/skills/structs-streaming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "structs-streaming", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill structs-streaming -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills structs-streaming --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/structs-streaming .cursor/skills/structs-streaming && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "structs-streaming" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/structs-streaming into .cursor/skills/structs-streaming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "structs-streaming", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LeoYeAI/openclaw-master-skills.git --path skills/structs-streaming--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LeoYeAI/openclaw-master-skills --skill structs-streaming -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills structs-streaming --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/structs-streaming .gemini/skills/structs-streaming && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "structs-streaming" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/structs-streaming into .gemini/skills/structs-streaming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "structs-streaming", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LeoYeAI/openclaw-master-skills structs-streamingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LeoYeAI/openclaw-master-skills --skill structs-streaming -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/structs-streaming .github/skills/structs-streaming && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "structs-streaming" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/structs-streaming into .github/skills/structs-streaming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "structs-streaming", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill structs-streaming -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills structs-streaming --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/structs-streaming .opencode/skills/structs-streaming && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "structs-streaming" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/structs-streaming into .opencode/skills/structs-streaming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "structs-streaming", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
structs-streamingConnects to the GRASS real-time event system via NATS WebSocket.
Structs Streaming is an agent skill from LeoYeAI/openclaw-master-skills. Connects to the GRASS real-time event system via NATS WebSocket. Use when you need real-time game updates, want to react to events as they happen, need to monitor raids or attacks, watch for player creation, track fleet movements, or build event-driven tools. GRASS is the fastest way to know what's happening in the galaxy.
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `_meta.json`).
It sits in Backend & APIs, covering Realtime and WebSockets and Event-driven systems. It works with React. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmpipcurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
reactor.oh.energycrew.oh.energyAlso links to:
structs.aiFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Structs Streaming loads about 4.3k tokens when it runs. Until then it costs about 86 tokens; SKILL.md has 1,465 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 1,465 words, ~4,262 tokens.
.claude/skills/structs-streaming/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.GRASS (Game Real-time Application Streaming Service) delivers real-time game events over NATS. Instead of polling queries repeatedly, subscribe to GRASS and react to events the moment they happen.
| Situation | Use GRASS | Use Polling |
|---|---|---|
| Detect incoming raid | Yes — instant alert | Too slow |
| Wait for player creation after guild signup | Yes — listen for address_register | Polling every 10s works too |
| Monitor fleet arriving at your planet | Yes — fleet_arrive event | Might miss it |
| Track struct health during combat | Yes — planet_activity with struct_health | Too slow |
| Check your own resource balance | No | Yes — one-off query |
| Read struct type stats | No | Yes — static data |
Rule of thumb: If you need to react to something, use GRASS. If you need to read something, use a query.
The GRASS WebSocket URL is not hardcoded — it comes from the guild configuration.
curl http://reactor.oh.energy:1317/structs/guildendpoint URL to get its configservices.grass_nats_websocketExample (Orbital Hydro guild):
{
"services": {
"grass_nats_websocket": "ws://crew.oh.energy:1443",
"guild_api": "http://crew.oh.energy/api/",
"reactor_api": "http://reactor.oh.energy:1317/"
}
}The grass_nats_websocket value is your NATS WebSocket endpoint. Not all guilds provide this service — check before relying on it.
A reliable reference endpoint: ws://crew.oh.energy:1443 (Orbital Hydro / Slow Ninja).
Before subscribing to specific subjects, subscribe to the > wildcard to see all traffic flowing through the GRASS server. This reveals the actual subject patterns in use, which may differ from documentation.
const sub = nc.subscribe(">");
for await (const msg of sub) {
console.log(`[${msg.subject}]`, new TextDecoder().decode(msg.data));
}Watch the output for 30-60 seconds. You will see subjects like structs.planet.2-1, consensus, healthcheck, etc. Once you know what subjects carry the events you need, narrow your subscriptions to those specific subjects.
Important: Struct events (attacks, builds, status changes) often arrive on the planet subject rather than the struct subject. If you are not receiving expected struct events, subscribe to the struct's planet subject instead.
Subscribe to subjects matching the entities you care about:
| Entity | Wildcard | Specific | Example |
|---|---|---|---|
| Player | structs.player.* | structs.player.{guild_id}.{player_id} | structs.player.0-1.1-11 |
| Planet | structs.planet.* | structs.planet.{planet_id} | structs.planet.2-1 |
| Guild | structs.guild.* | structs.guild.{guild_id} | structs.guild.0-1 |
| Struct | structs.struct.* | structs.struct.{struct_id} | structs.struct.5-1 |
| Fleet | structs.fleet.* | structs.fleet.{fleet_id} | structs.fleet.9-1 |
| Address | structs.address.register.* | structs.address.register.{code} | -- |
| Inventory | structs.inventory.> | structs.inventory.{denom}.{guild_id}.{player_id}.{address} | Token movements |
| Grid | structs.grid.* | structs.grid.{object_id} | Attribute changes (ore, power, load, etc.) |
| Global | structs.global | structs.global | Block updates |
| Consensus | consensus | consensus | Chain consensus events |
| Healthcheck | healthcheck | healthcheck | Node health status |
Use wildcards (*) to discover what events exist. Narrow to specific subjects once you know what you need. Use > to see everything (see "Discovery First" above).
| Event | Description | React By |
|---|---|---|
raid_status | Raid started/completed on planet | Activate defenses, alert |
planet_activity | Activity log including struct_health changes | Track combat damage |
fleet_arrive | Fleet arrived at planet | Prepare defense or welcome |
fleet_depart | Fleet left planet | Update threat assessment |
Note: Struct events frequently arrive on the planet subject (structs.planet.{id}) rather than the struct subject. Subscribe to both if you need complete coverage.
| Event | Description | React By |
|---|---|---|
struct_attack | Struct was attacked | Counter-attack, repair |
struct_status | Struct status changed (online/offline/destroyed) | Rebuild, reallocate power |
struct_defense_add / struct_defense_remove | Defense assignments changed | Update defense map |
struct_defender_clear | All defense relationships cleared | Re-assign defenders |
struct_block_build_start | Build operation initiated | Track in job list |
struct_block_ore_mine_start | Mine operation initiated | Track in job list |
struct_block_ore_refine_start | Refine operation initiated | Track in job list |
| Event | Description | React By |
|---|---|---|
player_consensus | Player chain data updated | Update intel |
player_meta | Player metadata changed | Update intel |
| Event | Description | React By |
|---|---|---|
guild_consensus | Guild chain data updated | Update guild status |
guild_membership | Member joined/left guild | Update relationship map |
Subject: structs.inventory.{denom}.{guild_id}.{player_id}.{address}
Track token movements — Alpha Matter, guild tokens, ore, etc.
| Category | Description | React By |
|---|---|---|
sent | Tokens sent from this player | Update balance tracking |
received | Tokens received by this player | Update balance tracking |
seized | Tokens seized via raid | Trigger counter-raid or refine alert |
mined | Ore mined | Start refining immediately |
refined | Ore refined into Alpha | Update wealth tracking |
minted | Guild tokens minted | Track guild economy |
infused | Alpha infused into reactor/generator | Update capacity tracking |
forfeited | Tokens lost (penalties, etc.) | Investigate cause |
Subject: structs.grid.{object_id}
Track attribute changes on any game object (players, structs, planets).
| Category | Description | React By |
|---|---|---|
capacity | Power capacity changed | Check if approaching offline |
connectionCapacity | Connection capacity changed | Update power routing |
connectionCount | Connection count changed | Update power routing |
fuel | Fuel level changed | Monitor generator/reactor |
lastAction | Last action timestamp updated | Track activity |
load | Power load changed | Check if approaching offline |
nonce | Player nonce incremented | Detect activity (useful for scouting) |
ore | Ore balance changed | Refine immediately if yours; raid target if theirs |
player_consensus | Player consensus data updated | Update intel |
power | Power level changed | Monitor energy infrastructure |
proxyNonce | Proxy nonce changed | Detect proxy activity |
structsLoad | Structs load changed | Assess fleet strength changes |
struct_attack events include detailed shot-by-shot resolution. Example payload (observed on planet subject):
{
"category": "struct_attack",
"attackingStructId": "5-100",
"targetStructId": "5-200",
"weaponSystem": "primary",
"eventAttackShotDetail": [
{
"shotIndex": 0,
"damage": 2,
"evaded": false,
"blocked": false,
"blockerStructId": "",
"counterAttackDamage": 1,
"counterAttackerStructId": "5-200"
}
],
"attackerHealthRemaining": 2,
"targetHealthRemaining": 1,
"targetDestroyed": false,
"attackerDestroyed": false
}Key fields in eventAttackShotDetail:
evaded -- true if the shot missed (defense type interaction)blocked -- true if a defender interceptedblockerStructId -- which struct blocked (if any)counterAttackDamage / counterAttackerStructId -- counter-attack info per shotstruct_health events track HP changes:
{
"category": "struct_health",
"structId": "5-200",
"health": 1,
"maxHealth": 3,
"destroyed": false
}The consensus and healthcheck subjects fire constantly (every few seconds). When using the > wildcard for discovery, filter these out to see actual game events:
const sub = nc.subscribe(">");
for await (const msg of sub) {
if (msg.subject === "consensus" || msg.subject === "healthcheck") continue;
console.log(`[${msg.subject}]`, new TextDecoder().decode(msg.data));
}| Event | Description | React By |
|---|---|---|
block | New block produced | Tick game loop, update charge calculations |
Agents should build custom tools that connect to GRASS when they need event-driven behavior. Here are patterns to follow.
Install the NATS WebSocket client:
npm install nats.wsimport { connect } from "nats.ws";
const nc = await connect({ servers: "ws://crew.oh.energy:1443" });
const sub = nc.subscribe("structs.planet.2-1");
for await (const msg of sub) {
const event = JSON.parse(new TextDecoder().decode(msg.data));
console.log(JSON.stringify(event));
}Install the NATS client:
pip install nats-pyimport asyncio, json, nats
async def main():
nc = await nats.connect("ws://crew.oh.energy:1443")
sub = await nc.subscribe("structs.planet.2-1")
async for msg in sub.messages:
event = json.loads(msg.data.decode())
print(json.dumps(event))
asyncio.run(main())A tool that watches for raids on your planet and outputs an alert:
import { connect } from "nats.ws";
const PLANET_ID = process.argv[2]; // e.g. "2-1"
const nc = await connect({ servers: "ws://crew.oh.energy:1443" });
const sub = nc.subscribe(`structs.planet.${PLANET_ID}`);
for await (const msg of sub) {
const event = JSON.parse(new TextDecoder().decode(msg.data));
if (event.category === "raid_status") {
console.log(JSON.stringify({ alert: "RAID", planet: PLANET_ID, data: event }));
}
if (event.category === "fleet_arrive") {
console.log(JSON.stringify({ alert: "FLEET_ARRIVAL", planet: PLANET_ID, data: event }));
}
}Instead of polling structsd query structs address after guild signup, watch for the address registration event:
import { connect } from "nats.ws";
const nc = await connect({ servers: "ws://crew.oh.energy:1443" });
const sub = nc.subscribe("structs.address.register.*");
for await (const msg of sub) {
const event = JSON.parse(new TextDecoder().decode(msg.data));
console.log(JSON.stringify(event));
break; // exit after first match
}
await nc.close();Build a GRASS listener tool when:
Store custom tools in your workspace (e.g., scripts/ or alongside the relevant skill).
ws://crew.oh.energy:1443)nats.ws for Node, nats-py for Python)structs.planet.{id} — raid alerts, fleet arrivalsstructs.struct.{id} — attack/status alertsstructs.global — block tick for game loop timingThe Structs permission system and GRASS event stream were designed for AI agents to automate game responses. The design docs call this the "Defence Contractor" pattern — an agent that monitors events and acts on behalf of players within scoped permissions.
| Event | Action | Permission Needed |
|---|---|---|
struct_ore_mine_complete on your extractor | Immediately start struct-ore-refine-compute | Signer key for the player |
struct_ore_refine_complete on your refinery | Immediately start next struct-ore-mine-compute | Signer key for the player |
planet_raid_start on your planet | Alert, activate stealth, reposition defenders | Signer key or delegated permission |
struct_attack targeting your struct | Log attacker, assess threat, counter-attack if able | Signer key or delegated permission |
struct_health showing HP drop | Prioritize defense, consider fleet retreat | Signer key for fleet-move |
fleet_move to your planet from unknown fleet | Identify incoming player, assess threat level | Read-only (query) |
When delegating actions to an automation agent (separate key or service):
permission-grant-on-object to allow specific actions on specific structs, not blanket access.address-register.permission-revoke-on-object to remove automation access during sensitive operations.Subscribe to: structs.struct.{extractor-id}
On event: struct_ore_mine_complete
→ Run: structsd tx structs struct-ore-refine-compute -D 1 --from [key] --gas auto -y -- [refinery-id]
Subscribe to: structs.struct.{refinery-id}
On event: struct_ore_refine_complete
→ Run: structsd tx structs struct-ore-mine-compute -D 1 --from [key] --gas auto -y -- [extractor-id]This creates a continuous mine-refine loop that runs unattended. Ore is never left unrefined.
Subscribe to: structs.planet.{planet-id}
On event: planet_raid_start
→ Activate stealth on vulnerable structs
→ Set defenders on high-value structs
→ Log raid to memory/intel/threats.md
→ Alert commander if availablememory/ for cross-session audit trail© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/structs-streaming of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Structs Streaming next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Structs Streaming this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~4.3k | Automated safety check: Pass | MIT | |
| Trigger.dev Realtimepapermark/papermark | 9.2k | — | ~1.7k | Automated safety check: Pass | Custom licence | |
| Cryptofeed2025Emma/vibe-coding-cn | 23k | 1 repos | ~1.6k | Automated safety check: Pass | MIT | |
| Cb Realtime APIBlkLeg/CircuitBreaker | 201 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Rx JSvalkey-io/valkey-admin | 148 | — | ~666 | Automated safety check: Pass | Apache-2.0 | |
| Agents SDKhodgef/apiker | 127 | 3 repos | ~3k | Automated safety check: Pass | MIT |
papermark/papermark
Shows how to subscribe to Trigger.dev task runs from the backend and from React for progress indicators, live dashboards, AI response streams and approval waits.
2025Emma/vibe-coding-cn
Cryptofeed - Real-time cryptocurrency market data feeds from 40+ exchanges.
BlkLeg/CircuitBreaker
How Circuit Breaker moves data between backend and frontend — the NATS internal bus, Redis pub/sub, the WebSocket stream endpoints and their first-message JWT handshake, SSE log/event streams, and…
valkey-io/valkey-admin
Guidance for Redux Toolkit and RxJS middleware patterns. An agent skill from valkey-io/valkey-admin.
hodgef/apiker
Build AI agents on Cloudflare Workers using the Agents SDK. An agent skill from hodgef/apiker.
marketcalls/openalgo-charts
Build a full trading terminal on openalgo-charts - symbol search, interval switcher, chart-type picker, indicator menu, drawing rail with clipboard, live OpenAlgo REST plus WebSocket data behind a…
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
Works with
Categories
Connects to the GRASS real-time event system via NATS WebSocket. Structs Streaming is an agent skill from LeoYeAI/openclaw-master-skills. Connects to the GRASS real-time event system via NATS WebSocket.
Structs Streaming fits situations like: you need real-time game updates; want to react to events as they happen; need to monitor raids; watch for player creation.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill structs-streaming -a claude-code`. Or copy the skill folder (skills/structs-streaming in LeoYeAI/openclaw-master-skills) into .claude/skills/structs-streaming in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill structs-streaming -a codex`. Or copy the skill folder (skills/structs-streaming in LeoYeAI/openclaw-master-skills) into .agents/skills/structs-streaming in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill structs-streaming -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/structs-streaming, .gemini/skills/structs-streaming, .github/skills/structs-streaming and .opencode/skills/structs-streaming in your project.
Going by SKILL.md and its folder, Structs Streaming needs the command-line tools its instructions call (npm, pip and curl). Our summary lists: Python 3; Node.js.
SKILL.md names 3 domains. In commands or code: reactor.oh.energy and crew.oh.energy; the agent is likely to contact these when it follows the instructions. As links in the text: structs.ai. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Structs Streaming is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Structs Streaming: Trigger.dev Realtime (papermark/papermark, 9.2k stars), Cryptofeed (2025Emma/vibe-coding-cn, 23k stars), Cb Realtime API (BlkLeg/CircuitBreaker, 201 stars) and Rx JS (valkey-io/valkey-admin, 148 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,159 GitHub stars. The repository holds 972 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.