cli-anything-slay-the-spire-ii
A stateful command-line interface for controlling the real Slay the Spire 2
game through the local STS2_Bridge mod. The CLI reads normalized game state
and sends action commands via a local HTTP API at localhost:15526.
Installation
This CLI requires a bridge mod that runs inside the game process. Both the CLI
and the bridge are distributed from the same repository:
https://github.com/HKUDS/CLI-Anything
1. Install the CLI
git clone https://github.com/HKUDS/CLI-Anything.git
cd CLI-Anything/slay_the_spire_ii/agent-harness
pip install -e .
2. Build and install the bridge mod
The bridge mod is a .NET 9 plugin that must be compiled and installed into
the game directory. Full instructions are in the repository README, but the
short version is:
cd CLI-Anything/slay_the_spire_ii/agent-harness/bridge/plugin
./build.sh
cd ../install
./install_bridge.sh
If the build script cannot auto-detect the game data directory, set
STS2_GAME_DATA_DIR explicitly:
STS2_GAME_DATA_DIR="/path/to/data_sts2" ./build.sh
3. Enable the mod and verify
Launch Slay the Spire 2 via Steam, enable the STS2_Bridge mod in the mod
manager, then verify the connection:
cli-anything-sts2 state
If this returns JSON, the CLI and bridge are connected.
Prerequisites:
- Python 3.10+
- Slay the Spire 2 (Steam) with
STS2_Bridge mod enabled
.NET 9 SDK (only needed to build the bridge mod)
Usage
Basic Commands
# Read normalized game state (always start here)
cli-anything-sts2 state
# Start interactive REPL mode (default)
cli-anything-sts2
# Show all available commands
cli-anything-sts2 --help
Command Groups
State Inspection
| Command |
Description |
state |
Normalized state with decision field |
raw-state |
Raw bridge JSON |
Main Menu
| Command |
Description |
continue-game |
Continue a saved run |
start-game --character IRONCLAD --ascension 0 |
Start a new run |
abandon-game |
Abandon the current save |
return-to-main-menu |
Return to menu from any screen |
Characters: IRONCLAD, SILENT, DEFECT, NECROBINDER, REGENT
Combat
| Command |
Description |
play-card <index> [--target <enemy_id>] |
Play a card from hand |
use-potion <slot> [--target <enemy_id>] |
Use a potion |
end-turn |
End the current turn |
Map & Room Flow
| Command |
Description |
choose-map <index> |
Select a map node |
proceed |
Leave the current room |
Rewards
| Command |
Description |
claim-reward <index> |
Claim a combat reward |
pick-card-reward <index> |
Pick a card reward |
skip-card-reward |
Skip the card reward |
claim-treasure-relic <index> |
Claim a treasure relic |
select-relic <index> |
Select a relic |
skip-relic-selection |
Skip relic selection |
Events & Rest Sites
| Command |
Description |
event <index> |
Choose an event option |
advance-dialogue |
Advance dialogue-only events |
rest <index> |
Choose a campfire action |
Shop
| Command |
Description |
shop-buy <index> |
Buy from the shop |
Card/Relic Selection Overlays
| Command |
Description |
select-card <index> |
Select a card in overlay |
confirm-selection |
Confirm the current selection |
cancel-selection |
Cancel the current selection |
combat-select-card <index> |
Select a card during combat overlay |
combat-confirm-selection |
Confirm combat card selection |
Raw Action
| Command |
Description |
action <name> --kv key=value |
Send a raw bridge action |
Decision States
The state command returns JSON with a decision field indicating the current
game screen. Route your next command based on this value:
| Decision |
Meaning |
Typical Next Commands |
menu |
Main menu |
continue-game, start-game |
combat_play |
In combat, your turn |
play-card, use-potion, end-turn |
hand_select |
Card selection overlay |
combat-select-card, combat-confirm-selection |
map_select |
Map node selection |
choose-map |
game_over |
Run ended |
return-to-main-menu |
combat_rewards |
Post-combat rewards |
claim-reward, proceed |
card_reward |
Card reward pick |
pick-card-reward, skip-card-reward |
event_choice |
Event screen |
event, advance-dialogue |
rest_site |
Campfire |
rest |
shop |
Shop screen |
shop-buy, proceed |
card_select |
Card selection screen |
select-card, confirm-selection |
relic_select |
Relic selection |
select-relic, skip-relic-selection |
treasure |
Treasure room |
claim-treasure-relic, proceed |
Configuration
| Option |
Default |
Description |
--base-url |
http://localhost:15526 |
Bridge API URL |
--timeout |
10.0 |
HTTP timeout in seconds |
For AI Agents
- Always read
state first to get the decision field
- Re-read state after each action - indices and energy change during combat
- Check return codes - 0 for success, non-zero for errors
- Parse stdout for JSON output