Notre avis
Arrête une session de jeu en cours, met à jour l'état du jeu et nettoie les fichiers temporaires.
Points forts
- Arrêt propre d'une partie en cours.
- Sauvegarde d'un journal partiel pour analyse ultérieure.
- Nettoyage des fichiers d'état et des verrous pour éviter la corruption.
Limites
- Suppose une structure de répertoires spécifique pour les fichiers de jeu.
- Peut mal gérer plusieurs jeux actifs simultanément.
- Nécessite un fichier game-state.json avec un indicateur gameActive.
Utilisez cette compétence lorsque vous devez arrêter manuellement un jeu en cours ou défaillant.
Ne l'utilisez pas si vous souhaitez mettre en pause et reprendre le jeu plus tard, car il marque la partie comme définitivement arrêtée.
Analyse de sécurité
PrudenceThe skill uses bash commands to clean up game state files, including rm -rf on a subdirectory. All paths are constructed from a game name, preventing escape outside the games/ directory. No network access, no exfiltration, and no code injection risk. However, the destructive nature of rm warrants caution.
- •Uses Bash to delete files and recursively remove directories under a game-specific path. While scoped, this is a powerful operation.
Exemples
Please stop the game called 'my-rpg' immediately.I need to halt the current game session. Clean it up properly.name: stop-game description: Emergency halt of active game session. Use when user wants to stop a running game, halt playtest, cancel game simulation, or clean up game state. argument-hint: [game-name] allowed-tools: Read, Write, Bash, Glob disable-model-invocation: true
Stop Game - Emergency Halt
Emergency halt an active game session and clean up state files.
Arguments
$0(optional): Game name to stop. If omitted, finds the active game.
Implementation Steps
1. Find Active Game
let gameName = "$0";
if (!gameName) {
// Find active game by checking for active game-state files
const stateFiles = await Glob("games/*/state/game-state.json");
for (const stateFile of stateFiles) {
const state = JSON.parse(await Read(stateFile));
if (state.gameActive) {
gameName = stateFile.split('/')[1];
break;
}
}
if (!gameName) {
console.log("No active games found");
return;
}
}
2. Read Current State
const statePath = `games/${gameName}/state/game-state.json`;
const gameState = JSON.parse(await Read(statePath));
if (!gameState.gameActive) {
console.log(`Game ${gameName} is not active`);
return;
}
3. Mark Game as Stopped
gameState.gameActive = false;
gameState.gameStatus = "stopped";
gameState.stoppedAt = new Date().toISOString();
gameState.stoppedReason = "Manual stop by user";
await Write(statePath, JSON.stringify(gameState, null, 2));
4. Write Partial Log
Save incomplete game log for analysis:
const logTimestamp = new Date().toISOString().replace(/[:.]/g, '-');
const partialLog = {
fileType: "game-log",
status: "stopped",
game: gameName,
gameId: gameState.gameId,
stoppedAt: gameState.stoppedAt,
completedTurns: gameState.turnNumber,
finalState: gameState
};
await Write(
`games/${gameName}/logs/game-stopped-${logTimestamp}.json`,
JSON.stringify(partialLog, null, 2)
);
5. Clean Up State Files
rm -f games/${gameName}/state/turn-signal.json
rm -f games/${gameName}/state/player-actions/*.json
rm -rf games/${gameName}/state/.locks/*
6. Report to User
Display:
- Game name and ID
- Turn number when stopped
- Final player states
- Location of partial log
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.