sws2-menus
Build SwiftlyS2 player menus with the component-based Core.Menu system (beta), including centre-HTML and chat menus, custom renderers, component renderers…
Skill by btnrv
Chalk Labs
Need help deploying sws2-menus?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/btnrv-sws2-menus
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: frontend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/sws2-menus
What's inside
- Skill name
sws2-menus- Description
- Build SwiftlyS2 player menus with the component-based Core.Menu system (beta), including centre-HTML and chat menus, custom renderers, component renderers, custom components, key binds and menus.jsonc; also covers the deprecated Core.MenusAPI for existing code and migration. Use whenever a SwiftlyS2 plugin needs a menu, settings screen, shop, vote, picker, submenu or any interactive per-player selection, even if the user does not say "menu".
- License
- GPL-3.0
- Instructions
- 42 lines in SKILL.md · view on GitHub
Files (7)
- SKILL.md
- built-in.md · references/legacy/
- custom-rendering.md · references/legacy/
- menus-api.md · references/legacy/
- menu-system.md · references/
- migration.md · references/
- renderers.md · references/
SKILL.md (first lines)
# SwiftlyS2 menus SwiftlyS2 has two menu systems: | System | Entry point | Status | |---|---|---| | Menu system | `Core.Menu` (`IMenuService`), namespaces `SwiftlyS2.Shared.Menu` and `SwiftlyS2.Shared.Menu.Components` | Current. Beta branch only. | | Classic menus | `Core.MenusAPI` (`IMenuManagerAPI`), namespaces `SwiftlyS2.Shared.Menus` and `SwiftlyS2.Core.Menus.OptionsBase` | `[Obsolete]` on beta and scheduled for removal | Build new menus with `Core.Menu`. It separates what a menu contains (components) from how it is drawn (renderers), so the same menu works as centre-screen HTML, as chat lines, or through a renderer the plugin registers. Server owners can also change key binds and renderers in `configs/menus/menus.jsonc` without a rebuild. ## Choose the API 1. Read the project's SwiftlyS2 package version and the server's runtime version. Look up `IMenuService` with `apidocs_lookup` on the `beta` branch, then compare against the package the project actually compiles against. 2. If the project is on beta, use `Core.Menu`. When the project already uses `Core.MenusAPI`, say that it is deprecated and offer to migrate. Port only the menus the task touches unless the user asks for the whole plugin. 3. If the project is on stable, `Core.Menu` does not exist there yet. Tell the user the new system needs the beta package and runtime, and recommend it for new menu work. Use the classic API only if they stay on stable, and write it so the later port is mechanical: one builder method per menu, with callbacks kept apart from layout. 4. When the user asks for the classic API by name, use it, and mention the deprecation once. Confirm every signature through the SwiftlyS2 MCP on the branch you chose ([sws2-api-mcp](../sws2-api-mcp/SKILL.md)). The beta API is still moving. If the docs and the package disagree, the package wins. ## Where to read next - Building menus with `Core.Menu`: components, per-player values, submenus, actions and key binds, input methods, sessions, `menus.jsonc` and threading. Read [menu system](references/menu-system.md). - Changing how menus look: the built-in `centerhtml` and `chat` renderers, a custom `IMenuRenderer`, `IComponentRenderer`, custom components, or a Panorama HUD renderer. Read [renderers and custom components](references/renderers.md). - Porting `Core.MenusAPI` code to `Core.Menu`. Read [migration](references/migration.md). - Maintaining classic `Core.MenusAPI` code. Read [legacy/menus-api.md](references/legacy/menus-api.md) for the API reference, [legacy/built-in.md](references/legacy/built-in.md) for `core.jsonc` and callback threading, and [legacy/custom-rendering.md](references/legacy/custom-rendering.md) for `IMenuAPI` adapters. - Panorama XML, CSS, assets and HUD clicks. Use [sws2-panorama-authoring](../sws2-panorama-authoring/SKILL.md). - Menu text, colours and translations. Use [sws2-text-styling](../sws2-text-styling/SKILL.md). ## Ground rules for `Core.Menu` - Start with one menu, one working component and an open call, then add components. - Give every menu a unique id namespaced with the plugin, such as `"myplugin.shop"`. The id is the configuration scope for key binds, renderer and input method in `menus.jsonc`, so a shared id lets one menu's binds leak into another. - One component instance serves every player. Keep per-player data in the session (value components, `GetState<T>`, `TextProvider`, `VisibleWhen`), never in fields on the component. Persist values in `OnChanged` and load them with `DefaultValueProvider`, because session values are lost when the menu closes. - Take menu text from translations and pass the player's localized strings, or use `TextProvider` for per-player text in a shared menu. - After changing something a player sees from outside a component, call `session.Invalidate()`. Frames are only sent on invalidation. `Add`, `Insert` and `Remove` invalidate for you. - Threading: key presses and chat input reach components on the game thread. Code after an `await` that really suspends is not guaranteed to be back on it. `IMenuRenderer.Render` always runs on the menu render thread. The details are in each reference. - Registrations made through `Core.Menu` (renderers, component renderers, actions) and the plugin's open menus are released when the plugin unloads. Dispose a menu or registration earlier only if the plugin is done with it before then. Docs: [Menu System](https://swiftlys2.net/docs/development/menu-system), [Menus (Deprecated)](https://swiftlys2.net/docs/development/menus).
From btnrv/SwiftlyS2-Skills, GPL-3.0.
More from btnrv/SwiftlyS2-Skills
- 0.606score
sws2-authoring
btnrv
Create, extend, port or structure SwiftlyS2 plugins using existing framework APIs, feature-based partial classes, C# conventions, configuration, shared…
SkillAFreshness: A★ 3Claude Code +9 - 0.606score
sws2-api-mcp
btnrv
Ground SwiftlyS2 plugin development in live documentation, C# API declarations and CS2 data.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
sws2-game-assets
btnrv
Compile, package, precache, and apply CS2 models, materials, textures, particles, sounds, and UI resources used by SwiftlyS2 plugins, and inspect them with…
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-panorama-authoring
btnrv
Author and troubleshoot CS2 custom HUD layouts using Panorama XML and CSS, SwiftlyS2 HUD state APIs, and server-side button clicks.
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-performance-profiler
btnrv
Diagnose SwiftlyS2 plugin performance with the built-in sw profiler, EventPipe captures, timing scopes, and measured comparison of CPU, allocation, and…
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-text-styling
btnrv
Style localized SwiftlyS2 chat, prefixes and CenterHTML messages with the actual CS2 palette, supported markup and typography, and editable presentation…
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-thread-management
btnrv
Keep SwiftlyS2 game operations on the game thread while coordinating asynchronous I/O, scheduled work, and timer lifetimes.
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-traceray
btnrv
Implement SwiftlyS2 collision traces and aim queries using the appropriate player or observer origin, shape, masks, and result checks.
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-entity-management
btnrv
Create, query, spawn, track, and remove CS2 entities with SwiftlyS2, including typed spawn values and entity inputs or outputs.
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-native-and-memory
btnrv
Implement SwiftlyS2 native calls, hooks, signatures, custom offsets, and memory access when required CS2 operations need engine interop.
SkillAFreshness: A★ 3Claude Code +9
Signals
- Stars
- 3
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 14, 2026 (16 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- GPL-3.0
- Repository
- github.com/btnrv/SwiftlyS2-Skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from btnrv
- 0.606score
sws2-authoring
btnrv
Create, extend, port or structure SwiftlyS2 plugins using existing framework APIs, feature-based partial classes, C# conventions, configuration, shared…
SkillAFreshness: A★ 3Claude Code +9 - 0.606score
sws2-api-mcp
btnrv
Ground SwiftlyS2 plugin development in live documentation, C# API declarations and CS2 data.
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
sws2-game-assets
btnrv
Compile, package, precache, and apply CS2 models, materials, textures, particles, sounds, and UI resources used by SwiftlyS2 plugins, and inspect them with…
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-panorama-authoring
btnrv
Author and troubleshoot CS2 custom HUD layouts using Panorama XML and CSS, SwiftlyS2 HUD state APIs, and server-side button clicks.
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-performance-profiler
btnrv
Diagnose SwiftlyS2 plugin performance with the built-in sw profiler, EventPipe captures, timing scopes, and measured comparison of CPU, allocation, and…
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
sws2-text-styling
btnrv
Style localized SwiftlyS2 chat, prefixes and CenterHTML messages with the actual CS2 palette, supported markup and typography, and editable presentation…
SkillAFreshness: A★ 3Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get sws2-menus running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
sws2-menus skill. Agent Mart. https://agentmart.dev/skills/btnrv-sws2-menus (last updated 2026-10-24)