Building a rotation with an AI agent
Updated October 18, 2026
A link to this page is enough
You can simply give your AI agent the link to this page: it will figure everything out on its own and ask you for any missing details if it needs them.
An AI agent with web and file access can build a KRC rotation for you: study the logs of the best players of your specialization, guides and the SimulationCraft action list, compare them with your talents and logs, and hand you a ready JSON. Here is what to give it, a ready prompt, and how to check the result.
What you need#
An agent that can open websites (Warcraft Logs, Raider.IO, Wowhead, GitHub) and read files. Without web access, give it the documentation and log excerpts as files.
Documentation for the agent (the links are already in the prompt):
| Link | What's inside |
|---|---|
| llms.txt | The documentation index for AI agents: all languages, files and examples |
| krc-guide.en.md | The whole documentation in one Markdown file |
| keyrota-rotation.schema.json | JSON Schema to check the answer |
| Assassination, raid, Outlaw, raid and Mythic+ | Real raid rotations as a model |
Your data (the placeholders in the prompt):
| Placeholder | What to put in | Example |
|---|---|---|
{CLASS} | Class | Rogue |
{SPEC} | Specialization | Assassination |
{HERO_TALENTS} | Hero talents | Fatebound |
{TALENT_STRING} | The talent export string from the game (talent window, Share) | CMQAAAAA… |
{CONTENT} | Raid or Mythic+ | raid |
{RAID_OR_DUNGEONS} | The raid or a list of dungeons | The Venomous Abyss |
{DIFFICULTY} | Difficulty or key level | heroic |
{BOSSES} | Bosses the rotation is for | all |
{ITEM_LEVEL} | Item level | 328 |
{MY_LOGS} | A link to your character or report on Warcraft Logs | https://www.warcraftlogs.com/character/eu/<realm>/<name> |
{COMBAT_LOG_FILE} | The combat log file you attach | WoWCombatLog-101726_214449.txt |
{PREFERENCES} | Your wishes | "cooldowns only on the Burst button, no defensives" |
The prompt#
The agent collects the data itself, compares it with yours and explains every rule. Fill in the braces and attach a combat log if you have one.
You are a World of Warcraft expert and a KeyRota rotation author. Build me a KeyRota advanced rotation: JSON in the keyrota-rotation format, version 1.
MY CHARACTER
- Class and specialization: {CLASS}, {SPEC}. Hero talents: {HERO_TALENTS}.
- Talent string from the game: {TALENT_STRING}
- Content: {CONTENT}: {RAID_OR_DUNGEONS}. Difficulty or key levels: {DIFFICULTY}. Bosses: {BOSSES}.
- Item level: {ITEM_LEVEL}.
- My Warcraft Logs: {MY_LOGS}
- Combat log (attached): {COMBAT_LOG_FILE}
- Preferences: {PREFERENCES}
STEP 1. LEARN THE KEYROTA FORMAT
- https://keyrota.app/documentation/llms.txt and https://keyrota.app/documentation/krc-guide.en.md: slots (up to 12), auras (up to 12, only my buffs and my debuffs on the target), resources in percent, all conditions, slot flags, the panel toggles aoe, st, cd, defensives, ground_spells, movement, rules checked top-down, OR groups of AND conditions, limits of 16 groups of 16 conditions, an unknown value makes a condition false.
- JSON Schema: https://keyrota.app/documentation/keyrota-rotation.schema.json
- Models: https://keyrota.app/documentation/examples/assassination-raid.en.json and https://keyrota.app/documentation/examples/outlaw-raid.en.json
STEP 2. COLLECT THE DATA
1. Warcraft Logs: {SPEC} {CLASS} damage rankings for every boss ({CONTENT}, {DIFFICULTY}); for Mythic+, for every dungeon and key level. Take the 5-10 best logs with the hero talents {HERO_TALENTS}.
2. Compare their talents with my string. Note the differences that change the priority and say whether I should take them.
3. From the top logs collect: the opener and the cast order; uptime of the important buffs and debuffs; resources at casts (combo points or the equivalent at finishers, energy or the equivalent before spending, resource lost to capping); when and together with what big cooldowns are used and how they are lined up with the phases; when and at what health defensives are used; from how many targets they switch to AoE; casts per minute and time without casts.
4. For Mythic+: Raider.IO (the meta, top runs, talents per dungeon).
5. Guides (Wowhead, Method, the class Discord) and the SimulationCraft action list (APL) for {SPEC} on the current expansion's branch: use it as the base priority and check it against the logs.
6. My logs and combat log: where my uptimes, resources at spenders, cooldowns and pace differ from the top players.
STEP 3. WRITE THE ROTATION
- "format": "keyrota-rotation", "version": 1, the specID of my specialization, resources from the specialization table in the docs (resource1 PlayerHP, resource2 TargetHP, then the specialization's resources), "ignoreMainIcon": true.
- Slots: real Wowhead spell IDs (the spell field). "show": "combat" for healing and defensives. Flags: offGcd for off-GCD spells; offGcd and queue for macros whose second line is on the GCD and for buttons that need the previous hit's result; channel for channels; manual for what I press myself. For a macro slot, write the macro text (#showtooltip and /cast).
- Auras: IDs of the buffs and debuffs themselves, not of the spells that apply them. Only my auras.
- Rules in priority order. Defensives first and only with defensives == 1. Big cooldowns only with cd == 1 (the Burst button, not a spell cooldown); whatever strengthens the cooldown window only under it. Single target and AoE: a group aoe == 1 and a group st == 0 and enemies >= N for AoE; a group st == 1 and a group aoe == 0 and enemies <= 1 for single target. DoTs: a group X.down and a group X.up and X.duration <= 30. Resources in percent, thresholds halfway between steps (combo points out of 7: "at least 5" is Combo_Points >= 70, "at most 3" is Combo_Points < 50). If the next button cuts a channel off, add X.duration <= 8 for the channel's aura to every group of every rule.
- KRC has no not, != or parentheses: use the pairs up/down, ready/oncd, glow/noglow, inverse operators and several groups.
- Write the labels, rule names and comments in English, and the names used in conditions (alias) in Latin letters.
- Give every rule a name and every group a short comment: what and why.
- At the end check: the JSON passes the schema; every name in the conditions is declared; no more than 16 conditions in a group and 16 groups in a rule; the IDs exist on Wowhead for the current patch.
ANSWER
1. The whole rotation JSON in one block.
2. Macro texts for the macro slots.
3. A table: rule, what it does, where it comes from (which log, guide or APL line).
4. What to turn on in the game: quick settings panel buttons, the enemy counter radius, what to put on the action bars.
5. A test plan: a training dummy, then a combat log against the top logs; which numbers to compare.
A filled-in prompt#
The same prompt in full, filled in for Assassination in a heroic raid:
You are a World of Warcraft expert and a KeyRota rotation author. Build me a KeyRota advanced rotation: JSON in the keyrota-rotation format, version 1.
MY CHARACTER
- Class and specialization: Rogue, Assassination. Hero talents: Fatebound.
- Talent string from the game: CMQAAAAAAAAAAAAAAAAAAAAAAYmlZmFDGAAAAAYWGsNDAAAAAILzMzMzMjxyMzMbzsMzMPgZMzYMMzYMAGYBmxoxsBYbAbGAMzMGD
- Content: raid: The Venomous Abyss. Difficulty: heroic. Bosses: all; pay special attention to Ula'tek (damage windows on the Heart).
- Item level: 328.
- My Warcraft Logs: https://www.warcraftlogs.com/character/eu/<realm>/<name>
- Combat log (attached): WoWCombatLog-101726_214449.txt, 5 minutes on a training dummy, single target.
- Preferences: Deathmark and Kingsbane only on the Burst button; Vanish only under Deathmark; Crimson Vial at 40% health or lower; energy pooling as in SimulationCraft.
STEP 1. LEARN THE KEYROTA FORMAT
- https://keyrota.app/documentation/llms.txt and https://keyrota.app/documentation/krc-guide.en.md: slots (up to 12), auras (up to 12, only my buffs and my debuffs on the target), resources in percent, all conditions, slot flags, the panel toggles aoe, st, cd, defensives, ground_spells, movement, rules checked top-down, OR groups of AND conditions, limits of 16 groups of 16 conditions, an unknown value makes a condition false.
- JSON Schema: https://keyrota.app/documentation/keyrota-rotation.schema.json
- Models: https://keyrota.app/documentation/examples/assassination-raid.en.json and https://keyrota.app/documentation/examples/outlaw-raid.en.json
STEP 2. COLLECT THE DATA
1. Warcraft Logs: Assassination Rogue damage rankings for every boss (raid The Venomous Abyss, heroic difficulty). Take the 5-10 best logs with the hero talents Fatebound.
2. Compare their talents with my string. Note the differences that change the priority and say whether I should take them.
3. From the top logs collect: the opener and the cast order; uptime of Garrote, Rupture and the Envenom buff; combo points at Envenom, Rupture, Kingsbane and Vanish, energy before Envenom, energy and combo points lost to capping; when and together with what Deathmark and Kingsbane are used and how they are lined up with the phases (especially with the Heart on Ula'tek); when and at what health Crimson Vial and other defensives are used; from how many targets they switch to Fan of Knives and Crimson Tempest; casts per minute and time without casts.
4. Guides (Wowhead, Method, the rogue Discord) and the SimulationCraft action list (APL) for Assassination on the current expansion's branch: use it as the base priority and check it against the logs.
5. My logs and combat log: where my uptimes, combo points at spenders, cooldowns and pace differ from the top players.
STEP 3. WRITE THE ROTATION
- "format": "keyrota-rotation", "version": 1, "specID": 259, "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"], "ignoreMainIcon": true.
- Slots: real Wowhead spell IDs (the spell field). "show": "combat" for Crimson Vial. Flags: offGcd for off-GCD spells; offGcd and queue for Vanish (it needs the previous hit's combo points); channel for channels, if there are any; manual for what I press myself. For a macro slot, write the macro text (#showtooltip and /cast).
- Auras: IDs of the buffs and debuffs themselves, not of the spells that apply them (for example, the Vanish buff is not the same as the spell). Only my auras.
- Rules in priority order. Crimson Vial first and only with defensives == 1 and health at 40% or lower. Deathmark and Kingsbane only with cd == 1 (the Burst button, not a spell cooldown); Vanish only while Deathmark is on the target. Single target and AoE: a group aoe == 1 and a group st == 0 and enemies >= 2 for Fan of Knives; a group st == 1 and a group aoe == 0 and enemies <= 1 for Mutilate. Garrote and Rupture: a group X.down and a group X.up and X.duration <= 30. Combo points out of 7 in percent, thresholds halfway between steps: "at least 5" is Combo_Points >= 70, "at most 3" is Combo_Points < 50. Energy pooling: Envenom at 5+ combo points when the buff is running out, under Deathmark or at Energy >= 70.
- KRC has no not, != or parentheses: use the pairs up/down, ready/oncd, glow/noglow, inverse operators and several groups.
- Write the labels, rule names and comments in English, and the names used in conditions (alias) in Latin letters.
- Give every rule a name and every group a short comment: what and why.
- At the end check: the JSON passes the schema; every name in the conditions is declared; no more than 16 conditions in a group and 16 groups in a rule; the IDs exist on Wowhead for the current patch.
ANSWER
1. The whole rotation JSON in one block.
2. Macro texts for the macro slots.
3. A table: rule, what it does, where it comes from (which log, guide or APL line).
4. What to turn on in the game: quick settings panel buttons, the enemy counter radius, what to put on the action bars.
5. A test plan: a training dummy, then a combat log against the top logs; which numbers to compare.
How to analyse logs#
Hints for the agent and for you: where to get the data and what to compare.
Warcraft Logs
- Rankings:
https://www.warcraftlogs.com/zone/rankings/<zone id>?boss=<boss id>&class=<Class>&spec=<Spec>&difficulty=<3|4|5>&metric=dps(3 normal, 4 heroic, 5 mythic). Mythic+ rankings are split by key level. - In a player's report: the Casts tab (order and timing of casts), Buffs and Debuffs (uptime), Resources (resources and capping), Damage Done (by ability and target), Deaths.
- Talents from a log: the player's summary has the talent export string; open it in Wowhead's talent calculator.
- Compare behaviour, not DPS: DoT and buff uptime, resources at spenders, casts per minute, time without casts, big cooldown timing relative to the fight's phases.
Raider.IO (Mythic+)
- Top runs of a dungeon:
https://raider.io/api/v1/mythic-plus/runs?season=<season>®ion=world&dungeon=<slug>&page=0; seasons and dungeons:https://raider.io/api/v1/mythic-plus/static-data?expansion_id=<id>. - The meta changes week to week: take fresh data, not old conclusions.
SimulationCraft
- A specialization's action list (APL) is in the
simulationcraft/simcrepository on GitHub, on the current expansion's branch, in theActionPriorityListsfolder. - How to turn an APL into KRC:
| SimulationCraft APL | KRC |
|---|---|
actions lines, top-down | rules, top-down |
buff.X.up | X.up |
dot.X.remains, buff.X.remains | X.duration in percent |
cooldown.X.remains | X.cd in percent |
combo_points, energy | resources in percent |
active_enemies | enemies |
target.time_to_die, exact seconds | none; the nearest substitute, for example "the target lives 12 more seconds" is TargetHP >= 50 on 3+ targets |
The combat log
- With advanced logging every
SPELL_CAST_SUCCESScarries the caster's resources (type, current value, maximum); energy is type 3. SPELL_AURA_APPLIED,SPELL_AURA_REFRESH,SPELL_AURA_REMOVED: aura uptime and refreshes;SPELL_ENERGIZE: resource gains;SPELL_CAST_FAILED: presses the game refused.- Count: casts per minute, gaps between GCDs, DoT uptime, combo points at finishers, energy capping, big cooldown timing.
Recording a combat log#
- In the game's settings, Network section, turn on Advanced Combat Logging. Without it the log has no resources or positions.
- Before the pull type
/combatlogin chat: recording starts. After the fight type/combatlogagain: recording stops. - The file is in the game folder:
World of Warcraft\_retail_\Logs\WoWCombatLog-MMDDYY_HHMMSS.txt. The game writes it with a delay: wait a minute after you stop recording. - The Warcraft Logs uploader may clear the file after uploading: copy it first.
Do the first tests on a training dummy: 2–3 minutes on a single target, then on a group of dummies for AoE.
Testing and iterating#
- Load the rotation (see below), build and paste the Better Assistant profile, put the slot spells on your bars with keys.
- Test on a dummy. The Log in the main window shows what is pressed. The KeyRota log file (the folder button next to Log) records, for each GCD, the chosen rule and why the rules above were skipped: conditions, not ready, unknown, manual.
- Give the agent the rotation JSON, a fresh combat log and, if needed, the KeyRota log. Ask it to compare with the top logs: uptime, resources at spenders, cooldowns, idle time.
- Change one rule at a time and keep the version in the rotation name ("v1.3"). Keep the old versions: Export in the main window or Text and JSON — Save….
- After the raid or the key, compare with Warcraft Logs again.
Loading the result#
- As a file: save the JSON from the answer as a
.jsonfile, then Rotation — New — From file…. - From the clipboard: copy the JSON, then New — From clipboard.
- Into an open rotation: the builder — Text and JSON — JSON — Paste. Slots with the same numbers keep their IDs, flags and visibility if the new JSON has none.
The builder's status bar should say "The rotation is valid". If there's an error, it names the place: give it to the agent word for word. Then General — "Build from slots and auras" — "Copy", in the game /ba — Profile — paste — Apply. Create the macros from the answer in the game and put them on your bars.