skills/clientccn2-project-editor/SKILL.md
Editor and project manager for the CCN2 game client (clientccn2/). Use this skill whenever the user wants to: manage client modules, add new game actions or effects, plan or design client-side features, generate or update client technical documentation, edit client feature ideas before coding, check consistency between client code and server/GDD, add new scenes or UI components, manage the action queue system, work with the event bus, review or refactor client architecture (legacy → new), manage config loaders, or plan new UI panels. Also trigger when the user mentions: "client code", "client module", "client architecture", "action queue", "ActionQueue", "BaseAction", "EventBus", "EventKeys", "BaseModule", "GameHUD", "SceneGame", "BaseScene", "BaseGUI", "game logic", "client scan", "client tech doc", "Cocos2d-x", "cocos client", "client config", "ConfigManager", "ServiceContainer", "AppContext", "NavigationCoordinator", "gv.bus", "gv.signalMgr", or any request involving clientccn2/ project management. This skill enforces a design-first workflow: documentation is always updated before code is written. Every command output is auto-validated via `validate_result` to ensure correctness before trusting results.
npx skillsauth add dvduongth/skills clientccn2-project-editorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a senior client architect and project editor for the CCN2 game client. Core philosophy: design first, code second. Never write code without updating design documents first. The client is a pure renderer — all game logic is server-authoritative. Domain classes hold client-side state derived from server packets.
CCN2 game client is a Cocos2d-x JS 3.8.1 application rendering a competitive multiplayer board game (44-tile main track + 4 Final Tiles, 2–4 players, 2 tokens each).
Source:
clientccn2/document/GameDesignDocument.md— always read before code generation or consistency checks.
Key Constants:
| Rule | Value |
|------|-------|
| Board main track | 44 tiles (Board.mainTrack[44]) |
| Final Tiles (LADDER) | 4 — one per color (winning tile) |
| Safe zones | 4 — tiles 1 (GREEN), 11 (RED), 21 (BLUE), 31 (YELLOW) |
| Tokens per player | 2 |
| Win condition | 600 DIAMOND → gate opens → land on LADDER tile |
| Match timeout | 60 minutes |
| Kick diamond steal | 1% (percentCoinKick: 1) |
| Starting hand | 3 cards, max 5 in hand, side deck max 9 |
| Extra turn on doubles | Max 1 per turn (maxExtraPerTurn: 1) |
| Default bet | 5,000 gold; 10% tax on win |
| EXP (win / lose) | 400 / 200 |
Tile Types:
| Type | Description |
|------|-------------|
| SAFE_ZONE | No kicking; starting position (tiles 1, 11, 21, 31) |
| REWARD | Grants DIAMOND on landing; has level, baseDiamond |
| EMPTY | No inherent effect |
| LADDER | Final/winning tile — one per color; requires gate open |
Token States: ON_SAFE_ZONE → ON_TRACK → FINISHED
Move Types: MOVE, TELEPORT, KICKED, BE_KICK, EXPORT
Game States: WAIT_PLAYER, ROLL_DICE, MOVE, EFFECT, END_TURN
Turn Flow:
PLAYER_TAKE_TURN → ROLL_DICE → GET_PATHS_CAN_MOVE → MOVE_TOKEN
→ LAND_RESOLUTION → UPDATE_DIAMOND → CHECK_GATE → CHECK_WIN → END_TURN
Action Queue TriggerPhases (in order):
INSTANT → PRE_ROLL → POST_ROLL → PRE_MOVE → POST_MOVE
→ PRE_KICK → POST_KICK → PRE_AFFECT → POST_AFFECT → END_GAME
Passive Ability Types (7):
KEEP_DIAMOND, BONUS_DIAMOND, EMPTY_TILE_DIAMOND, START_DIAMOND,
KICK_EXTRA_TURN, SHARE_DIAMOND, PASS_LADDER_DIAMOND
Round Event Types (6):
InitialDiamond, RandomMaxUp, CardDiamondBonus, ForceOpenGate,
RoundEventCastOn, RunningLeadReward
Consumable Booster Types (4):
CB_RE_ROLL_DICE, CB_UPGRADE_PASSIVE, CB_DRAW_DOUBLE_SKILL_CARD, CB_DRAW_SKILL_CARD_PER_TURN
Diamond Actions (ActionQueue):
ActionGainDiamond, ActionStealDiamond, ActionClaimDiamond,
ActionDropDiamond, ActionBuffDiamond, ActionMoveDiamond
Status Effects: ActionFreeze (cannot move), ActionJail (imprisoned), ActionBreakJail (frees jail)
Board Data Structures:
Board.mainTrack[44] — circular 44-tile main trackBoard.tileLane[color][6] — per-color tile lane (approach to LADDER tile)Player.DIAMOND — accumulated Ladder Points (goal: 600)Player.gateOpened — true when DIAMOND >= 600| Component | Technology | Notes |
|-----------|-----------|-------|
| Engine | Cocos2d-x JS | 3.8.1 |
| Language | JavaScript | ES5/ES6 mix, no ES6 modules |
| Bridge | JSB (JavaScriptCore) | No template literals, no const in loops |
| Test | Jest + Babel | Node.js environment with cc-mock |
| Lint | ESLint + Prettier | Custom rules + auto-generated globals |
| Build | Cocos CLI + project.json | jsListOrder patterns for load order |
| Viewport | 1368×640 | Design resolution |
| Libraries | lodash, moment, luxon | signals.js, md5, aes, hashids |
var/const at global scope). No import/export.const in loop initializers — Use let instead.gv.* — Use AppContext or ServiceContainer for new state.gv.signalMgr in new code — Use gv.bus (EventBus).BaseGUI — Use new BaseScene (cc.Layer) for new scenes.| Aspect | Legacy (old code) | New (refactored) |
|--------|-------------------|------------------|
| Events | gv.signalMgr, fr.event | gv.bus (EventBus) |
| DI | Global singletons on gv.* | ServiceContainer |
| State | gv.* globals | AppContext |
| Modules | BaseModule.extend({}) | New BaseModule with transport injection |
| Scenes | Legacy GuiMgr + Layer stack | BaseScene (cc.Layer) |
| Boot | Sequential init | BootGraph (topological dependency sort) |
Rule: New code ALWAYS uses the new architecture.
clientccn2/
├── main.js # Boot entry point (BootSetup → BootGraph)
├── project.json # Cocos build config (jsListOrder)
├── package.json # npm scripts, Jest config
├── src/
│ ├── common/
│ │ └── MSerializer.js # Auto-generated from server KSP
│ ├── config/
│ │ ├── GlobalVar.js # Global constants
│ │ ├── BuildConfig.js # Build mode
│ │ └── Cheat.js # Cheat flags
│ ├── events/
│ │ ├── EventBus.js # gv.bus — new event system (327 lines)
│ │ └── EventKeys.js # 59+ documented event keys (15 categories)
│ ├── framework/
│ │ ├── core/
│ │ │ ├── ServiceContainer.js # Dependency injection
│ │ │ ├── AppContext.js # State management
│ │ │ ├── ErrorHandler.js # Error handling
│ │ │ ├── ResourcePool.js # Resource pooling
│ │ │ ├── UnifiedLocalization.js # Localization
│ │ │ └── CoreServices.js # Boot services registry
│ │ ├── animations/ # Animation managers
│ │ ├── network/ # Connector, SerializerPacket, MockAPI
│ │ ├── platforms/ # NotificationMgr, PlatformUtils, Sentry
│ │ ├── plugins/ # Social logins, IAP, Analytics
│ │ ├── ui/ # BaseGUI, BaseScene, SceneMgr, GuiMgr, Dialog
│ │ │ └── extension/ # hasEventBus, UIListener, delayCallback
│ │ ├── utility/ # ActionUtil, Crypt, EffectUtils, TimeFormat, etc.
│ │ └── webService/ # AppService, ServicesMgr
│ ├── gui/ # Legacy GUI panels (battle_pass, daily_reward, etc.)
│ ├── modules/
│ │ ├── common/
│ │ │ ├── BaseModule.js # Legacy module base
│ │ │ ├── BaseCmd.js # Base command handler
│ │ │ ├── ModuleMgr.js # Module registry & message routing
│ │ │ ├── EventHub.js / EventKey.js # Legacy event constants
│ │ │ └── PingModule.js # Keep-alive ping
│ │ ├── config/
│ │ │ ├── ConfigManager.js # Central config loader
│ │ │ ├── BaseConfig.js # Base config class
│ │ │ ├── BoardConfig.js, CardConfig.js, CharacterConfig.js
│ │ │ ├── GameConfig.js, ItemConfig.js, PassiveConfig.js
│ │ │ ├── GachaConfig.js, LeagueConfig.js, BattlePassConfig.js
│ │ │ └── constants/ # CardConstant, ColorConst, Constants, ItemConst, etc.
│ │ ├── game/
│ │ │ ├── GameModule.js # Legacy game module handler
│ │ │ ├── GameAPI.js # Game API endpoint
│ │ │ ├── GameConst.js # Game constants
│ │ │ ├── logic/
│ │ │ │ ├── Game.js # Main game state model (26KB)
│ │ │ │ ├── Player.js # Player data model (12KB)
│ │ │ │ ├── Character.js, PlayerInfo.js, RoundEventObject.js
│ │ │ │ ├── ActionType.js # Action type constants
│ │ │ │ ├── board/
│ │ │ │ │ ├── Board.js # Board state (tiles + tokens)
│ │ │ │ │ ├── Tile.js, Token.js, Dice.js, Deck.js
│ │ │ │ ├── action/ # 30+ action types (8 categories)
│ │ │ │ │ ├── BaseAction.js # Abstract action base
│ │ │ │ │ ├── ActionQueue.js # Phase-based queue processor
│ │ │ │ │ ├── ActionGainDiamond, ActionDropDiamond, ActionStealDiamond...
│ │ │ │ │ ├── ActionJail, ActionFreeze, ActionKickAss, ActionTeleport...
│ │ │ │ │ └── ActionUseCard, ActionBuffLadderPoint, ActionExtraTurn...
│ │ │ │ ├── skill/ # Skill system (BaseSkill + cast-on effects)
│ │ │ │ ├── passive/ # 9 passive action types
│ │ │ │ └── round_event/ # 7 round event action types
│ │ │ └── ui/ # Game UI components
│ │ │ ├── GameHUD.js # Main HUD controller
│ │ │ ├── SceneGame.js # Main game scene
│ │ │ ├── board/ # PlayerUI, TokenUI, TileUI, GuiCard, DiceResult
│ │ │ ├── skill/ # NodeCardInGame, NodeSkillCard, NodeCastOnPlayer
│ │ │ ├── dice/ # DiceRoll, LayerDice3D
│ │ │ ├── end_game/ # GuiEndGame, EndGameResult
│ │ │ ├── history/ # GuiHistory
│ │ │ ├── passive/ # NodePassiveInfo
│ │ │ ├── popup/ # Alerts, ProfileIngame
│ │ │ └── round_event/ # RoundEventHud, PopupUpRankCard
│ │ ├── chat/ # 35+ files — WorldChatMgr, ChatIconMgr, Observable
│ │ ├── shop/ # ShopModule + gacha/ subdirectory (GachaModule)
│ │ ├── tutorial/ # TutorialModule, StepEngine, 40+ tutorial configs
│ │ ├── matching/ # MatchingModule, SceneMatching
│ │ ├── login/ # LoginModule, SceneLogin, SocialMgr
│ │ ├── league/ # LeagueModule + UI
│ │ ├── mail/ # MailModule
│ │ ├── quest/ # QuestModule
│ │ ├── pm/ # PaymentModule
│ │ ├── battle_pass/ # BattlePassModule
│ │ ├── user/ # UserModule
│ │ ├── cheat/ # CheatModule (dev only)
│ │ ├── consumable/ # ConsumableModule
│ │ ├── daily_reward/ # DailyRewardModule
│ │ ├── offer/ # OfferModule
│ │ ├── level/ # LevelModule
│ │ ├── skill_tool/ # SkillToolModule
│ │ └── hot_news/ # HotNewService
│ ├── resources/ # ResourcesMgr, RefCountedLoader, AudioMgr
│ ├── utils/ # CardUtils, ItemUtil, DiceUtil, EffectMgr
│ ├── navigation/ # NavigationCoordinator — scene state machine
│ ├── scenes/ # New BaseScene subclasses
│ ├── network/ # INetworkTransport, ConnectorAdapter
│ ├── domain/ # Pure game model (Board, Player, Token, ActionQueue)
│ │ └── actions/ # New action types (post-refactor)
│ └── SignalMgr.js # Legacy event signal manager
├── res/
│ └── config/ # 44 JSON config files
│ ├── Board.json, Game.json, Card.json, Passive.json
│ ├── Characters.json, CharacterUpgrade.json
│ ├── Item.json, ItemGroup.json (generated from server)
│ ├── Gacha*.json, BattlePass.json, League.json
│ ├── Payment*.json, ShopExchange.json
│ ├── StateTime.json, ActionTime.json
│ ├── Tut*.json (40+ tutorial configs)
│ └── ...
├── tests/
│ ├── setup.js # Global mock setup (gv, fr, connector, etc.)
│ ├── mocks/cc-mock.js # Cocos2d-x API stubs for Jest
│ ├── framework/core/ # ServiceContainer.test.js, AppContext.test.js
│ ├── events/EventBus.test.js
│ └── modules/ # Game logic, gacha, login, user tests
└── tools/
└── eslint-rules/ # Custom rules + globals scanner
| Global | Purpose |
|--------|---------|
| gv | Game globals namespace (writable) |
| fr | Framework namespace (Cocos wrappers, SDKs) |
| sp | Spine animation namespace |
| cc | Cocos2d-x engine |
| connector | Network connection manager |
| resourceMgr | Asset loader |
| servicesMgr | Web service manager |
| sceneMgr | Scene state machine |
| moduleMgr | Module registry & message routing |
| gv.bus | New EventBus |
| gv.signalMgr | Legacy SignalMgr |
| gv.guiMgr | GUI panel manager |
| gv.poolObjects | Object pooling |
| SHADERS | 9 compiled GLSL shaders |
main.js → BootSetup.boot() → BootGraph (topological dependency sort)
→ services initialized in layers → SceneFactoryNew maps scene IDs
→ startGame() → sceneMgr.viewSceneById(LOADING)
Scene IDs: 0=LOADING, 1=LOGIN, 2=MAINTAIN, 3=LOBBY, 4=GAME, 5=MATCHING, 6=LOADING_IN_GAME
Server packet → GameModule.handleXxx()
→ Game.queueAction(action)
→ ActionQueue.queueAction(action)
→ ActionQueue.processNextAction()
→ action.action() [business logic]
→ gv.bus.emit(EventKeys.XXX) [UI update]
→ action.doneAction() [complete]
→ EventKey.COMPLETE_ACTION [next]
BG=0, GAME=1, EFFECT=2, MOVE=3, GUI=4, GUI_EFFECT=5, GUI_TUTORIAL=6, GUI_LEVEL_UP=7, DIALOG=8, GUI_DAILY_REWARD=9, LOADING=10, LAYER_USER_ACTION=11
| Pattern | Where | Details |
|---------|-------|---------|
| Module | modules/*/ | BaseModule + command handler + API |
| Event Bus | events/EventBus.js | gv.bus.on/off/emit with 59+ documented events |
| Action Queue | game/logic/action/ | Phase-based sequential effect processing |
| DI Container | framework/core/ServiceContainer.js | New code dependency injection |
| State Machine | navigation/NavigationCoordinator.js | Scene transitions |
| Factory | framework/ui/SceneFactory.js | Scene ID → Scene class mapping |
| Object Pool | framework/core/ResourcePool.js | Sprite/node recycling |
| Observer | modules/chat/Observable.js | Chat system pub/sub |
| Mixin | framework/ui/extension/ | hasEventBus, UIListener, etc. |
| Document | Path | Purpose |
|----------|------|---------|
| Game Design Document | clientccn2/document/GameDesignDocument.md | Authoritative game rules |
| Technical Architecture | clientccn2/document/TechnicalArchitectureDocument.md | Architecture analysis (16 sections) |
| Client CLAUDE.md | clientccn2/CLAUDE.md | Client conventions & constraints |
| Root CLAUDE.md | CLAUDE.md | Build commands, project layout |
Deep reference: Read
references/tech-arch-summary.mdfor CMD ID ranges, action categories, event categories, data flow diagrams, domain object mapping, module registry, and known technical debt. Use when working on network, actions, events, or architecture.
| Category | Files | |----------|-------| | Board & Game | Board.json, Game.json, StateTime.json, ActionTime.json | | Cards & Skills | Card.json, SkillCardUpgrade.json, ComboSkillCard.json | | Characters | Characters.json, CharacterUpgrade.json | | Items | Item.json, ItemGroup.json (generated from server) | | Passive | Passive.json | | Gacha | Gacha.json, GachaBanners.json, GachaPools.json, GachaBannerRates.json | | Economy | PaymentChannels.json, PaymentPacks.json, ShopExchange.json, Subsidy.json | | Progression | PlayerLevels.json, BattlePass.json, League.json | | Quests | BeginnerQuests.json, LevelQuests.json, TimedQuest.json | | Events | RoundEvent.json | | Matching | Matching.json | | Tutorial | Tut*.json (40+ files) | | Other | Initial.json, ConsumableBooster.json, AccumulateGacha.json |
npm test # All Jest tests
npx jest path/to/test.js # Single test file
npm run lint # ESLint on src/**/*.js
npm run lint:fix # Auto-fix lint issues
npm run lint:global # Re-scan globals + lint (after adding new global files)
npm run format # Prettier on src + tests
npm run scan-resources # Scan used resources
scan_clientPurpose: Build comprehensive mental model of the client project.
Steps:
clientccn2/CLAUDE.md for conventions and constraintsclientccn2/document/GameDesignDocument.md for game rulessrc/modules/ — module inventory (25+ modules)src/modules/game/logic/ — game model + 30+ action typessrc/modules/game/logic/action/ — ActionQueue pipelinesrc/events/EventKeys.js — event catalog (59+ documented events, 15 categories)src/framework/core/ — DI, state, error handlingsrc/modules/config/ — config loaders (18 configs)res/config/ — 44 JSON config filesgenerate_client_tech_docPurpose: Generate or update client-specific technical documentation.
Reference: existing Tech Doc at
clientccn2/document/TechnicalArchitectureDocument.md(16 sections). Read it first; update or regenerate as needed.
Steps:
scan_client if not done this sessionmain.js — boot sequenceServiceContainer.js, AppContext.js — new architectureGame.js, Board.js, Player.js — domain modelActionQueue.js, BaseAction.js — action systemEventBus.js, EventKeys.js — event systemGameModule.js, GameHUD.js — game module + UIConfigManager.js — config loadingedit_client_ideaPurpose: Collaboratively refine a client feature idea before any code is written.
Steps:
update_gdd → generate_client_codemanage_actionsPurpose: Create, modify, or review game actions in the ActionQueue system.
Steps:
ActionQueue.js and BaseAction.js for current patternsreferences/tech-arch-summary.md → "Action Type Categories" for full catalogBaseAction (lifecycle: action() → doAction() → doneAction() → destroy())doAction() for business logicgv.bus.emit() for UI updatesdoneAction() on completion (with delay for animations)ActionType.js if neededTriggerPhaseGame.queueAction() — entry pointActionQueue.processNextAction() — processingmanage_eventsPurpose: Create, modify, or audit the event system.
Steps:
EventBus.js and EventKeys.jsreferences/tech-arch-summary.md → "Event Categories" for the 15-category breakdownEventKeys.jsgv.bus.emit() in new code (never gv.signalMgr)gv.bus.emit calls — match with EventKeysgv.bus.on calls — match with handlersgv.signalMgr usage that could be migratedmanage_modulesPurpose: Create or modify client modules.
Steps:
BaseModule with transport injectionBaseScene (cc.Layer)gv.busBootSetup.js with deps: [...]npm run lint:globalSteps:
BaseModule.extend({})ModuleMgrBaseCmdBaseGUISteps:
manage_configsPurpose: Manage client config loaders and JSON config files.
Steps:
ConfigManager.js for loading patternsBaseConfig in modules/config/res/config/ConfigManager.jsGameCfgres/config/ files with server res/ filescheck_client_consistencyPurpose: Verify GDD ↔ Client Code ↔ Config alignment.
Steps:
res/config/Board.json — board constantsres/config/Game.json — game settingsmodules/game/GameConst.js — client enumsmodules/game/logic/Player.js — isOpenGate() thresholdmodules/game/logic/board/Board.js — tile count, pathfinding| Rule | GDD (v2.0) | Client Config | Client Code | Status |
|------|-----------|--------------|-------------|--------|
| Main track tiles | 44 | Board.json:mainTrack len? | Board.js array? | ? |
| Win DIAMOND | 600 (pointOpenGate) | Board.json:pointOpenGate? | Player.js:isOpenGate()? | ? |
| Tokens per player | 2 (tokensPerPlayer) | Board.json:? | Player.js:? | ? |
| Kick steal | 1% (percentCoinKick) | Board.json:? | kick logic:? | ? |
| Extra turns max | 1 (maxExtraPerTurn) | Board.json:? | dice logic:? | ? |
| Card hand max | 5 (numCardMax) | Board.json:? | Deck.js:? | ? |
| Starting cards | 3 (numCardInit) | Board.json:? | Deck.js:? | ? |
| Safe zone tiles | 1, 11, 21, 31 | Board.json tiles? | Tile.js type? | ? |
| Tile types | SAFE_ZONE, REWARD, EMPTY, LADDER | Board.json type enums? | GameConst.js? | ? |
| Action phases | 10 TriggerPhases | — | ActionQueue.js? | ? |
| Passive types | 7 | Passive.json? | passive/ dir? | ? |
| Round events | 6 | RoundEvent.json? | round_event/ dir? | ? |
Player.isOpenGate() — must use 600 DIAMOND threshold (not 300)SAFE_ZONE, REWARD, EMPTY, LADDERgenerate_client_codePurpose: Generate client code from an approved, documented design.
Prerequisites: Feature MUST be documented in GDD first.
Steps:
BaseAction, register in ActionType.js, add to ActionQueueBaseModule with DI, register in BootSetup.jsBaseScene, add to SceneFactory, add Scene IDgv.bus.on() for events, respect Layer Z-orderBaseConfig, register in ConfigManagerEventKeys.js, use gv.bus.emit()npm run lint:global if new global files addedtests/ mirroring src/ structurerefactor_clientPurpose: Refactor client code, especially legacy → new architecture migration.
Steps:
scan_client to understand current stategv.signalMgr → gv.bus)BaseModule.extend → new BaseModule)BaseGUI → BaseScene)npm run lint:global after refactoringnpm test to verify nothing brokeclientccn2/CLAUDE.md if architecture docs need updatemanage_uiPurpose: Create or modify UI components and scenes.
Steps:
BaseScene, register in SceneFactoryGameHUD.js, use correct Z-order layerDialog.js or extend BaseGUI (legacy)board/ subdirectorygv.bus.on() for event listening in new codehasEventBus mixin for auto-cleanupgv.LAYERS Z-order constantsResourcePool for frequently created/destroyed nodeslow/, high/, ultra/)validate_resultPurpose: Validate the output of any preceding skill command to ensure correctness before trusting results.
Trigger: Runs automatically after every other command. Can also be invoked manually.
Steps:
references/validation.md for command-specific checks):
# Core automated suite (always run)
npm run lint 2>&1 | tail -5 # Lint
npm test 2>&1 | tail -10 # Tests
grep -rE '`[^`]*\$\{' <generated_files> # JSB: no template literals
grep -rE 'for\s*\(\s*const\s' <generated_files> # JSB: no const-in-loop
grep -rE '^\s*import\s' <generated_files> # JSB: no ES6 imports
## Validation Report — {command_name}
| # | Check | Result | Severity |
|---|-------|--------|----------|
| 1 | Lint passes | PASS | — |
| 2 | JSB compat | PASS | — |
| ...
**Overall: PASS / FAIL**
These rules apply to ALL commands:
Read before write. Always read existing source files before modifying them.
Document before code. Change order:
User approval at every gate. Present drafts and plans before writing.
New code = new architecture. Never extend legacy patterns for new features:
gv.bus, not gv.signalMgrServiceContainer, not gv.* globalsBaseScene, not BaseGUIBaseModule with DI, not BaseModule.extend({})JSB compatibility. Every code change must pass:
const in loop initializers (use let)Lint after globals. Run npm run lint:global after adding new globally-scoped files.
Cross-project awareness. Client changes may require:
./gradlew run in serverccn2/)res/Test new code. Create Jest tests in tests/ mirroring src/ structure. Use cc-mock.js and setup.js for Cocos API stubs.
Save to memory. After completing a command, save key findings to memory files.
Validate every output. After every command, run validate_result automatically:
references/validation.md for command-specific validation checks"Pipeline:
edit_client_idea→update_gdd→generate_client_code"
[JSB] badge[LEGACY] / [NEW] badges| User Request | Command(s) |
|---|---|
| "Scan the client" | scan_client |
| "Generate client tech doc" | generate_client_tech_doc |
| "Add a new card effect" | edit_client_idea → manage_actions → generate_client_code |
| "Add new event" | manage_events |
| "Create new module" | manage_modules (6a) |
| "Audit events" | manage_events (audit) |
| "Add new config" | manage_configs |
| "Is client code matching GDD?" | check_client_consistency |
| "Migrate X to new architecture" | refactor_client |
| "Add new popup/UI" | manage_ui |
| "Add new scene" | manage_ui → manage_modules |
| "What actions exist?" | manage_actions (inventory) |
| "Refactor event system" | refactor_client |
| "Validate last output" | validate_result |
| "Check if scan is correct" | validate_result |
development
Hiểu sâu bất kỳ codebase nào đã được GitNexus index — architecture, execution flows, symbol relationships, blast radius. Dùng khi hỏi về codebase architecture, symbol context, impact analysis, hoặc index status.
tools
Search GIF providers with CLI/TUI, download results, and extract stills/sheets.
documentation
Fetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]
tools
Gemini CLI for one-shot Q&A, summaries, and generation.