Sims 4 skill cheats, read out of the game's own command table
Press Ctrl+Shift+C, enter testingcheats true, then stats.set_skill_level <skill> <level>. The game matches the skill argument against the skill's internal tuning name rather than the label in the skill panel, and any fragment that matches a single skill is enough.
A skill in The Sims 4 is a statistic on the Sim with a level ladder attached, and one console command writes to it. The game declares 67 skill and aspiration commands in build 1.126.73.1030. 41 of them register in a retail build and 34 of those run for a player; the other 26 are DebugOnly and never register at all, which does not stop most cheat lists printing them.
Turn testingcheats on first
The console opens with Ctrl+Shift+C on PC and on Mac. On PlayStation and Xbox, EA documents holding all four shoulder buttons at once, and notes that a USB keyboard plugged into a console still uses Ctrl+Shift+C.
Then enter testingcheats true. Every command below marked Cheat is refused until it has been entered, and the gate resets when you return to the main menu or load a different save. That single line is the reason most skill cheats "do not work".
The cost is achievements. EA states that the cheat codes requiring testingcheats true disable achievements and trophies in the save you are playing, with build mode cheats as the exception and other saves left alone (EA, Sims 4 cheats FAQ).
The command that sets a skill
stats.set_skill_level<skill> <level> <opt_sim> · Cheat group · sets a named skill to a level · server_commands.statistic_commands:361Three arguments, typed with spaces and no angle brackets: the skill, the level, and optionally the Sim. Leave the third off and it applies to the Sim you have selected.
The skill argument is a substring, not a name you have to know
The first parameter is declared as TunableInstanceParam(Types.STATISTIC) with no exact-match flag. That factory takes a parameter the game itself calls name_substring_or_id and hands it to get_tunable_instance, which lower-cases the input and compares it against the names of every statistic the instance manager has loaded (server_commands.argument_helpers:499, :531, :536).
Three things follow from that.
- You do not need the full internal name. A fragment that matches exactly one loaded skill resolves.
- A fragment matching several skills is refused, and the refusal is assembled by sorting the matching names and joining them into the message. The candidate list is built from your install rather than from a cheat site.
- Only skills whose tuning is actually loaded can match, so the set you can address is exactly the set your installed packs registered.
All of that comes from reading the resolver, not from a session transcript. The extraction proves the matching rule and the message the resolver builds. Whether your console prints that message word for word is a runtime question this page has not tested.
Skill names versus stat names
stats.set_stat and its alias stats.set_commodity use the same parameter type with exact_match=True (server_commands.statistic_commands:173). Those two want the exact tuning name. stats.set_skill_level does not. The three are not interchangeable: a fragment the skill command accepts will be refused by the other two.
The 34 skill and aspiration cheats that run in a retail game
14 are registered in the Cheat group, which means testingcheats has to be on. 20 are Live, which is the group the game's own interface calls into; they are reachable but most of them take internal IDs rather than anything memorable. Click a command to copy it.
34 of 34 commands shown
| Command | Arguments | Group | Pack | Registered at |
|---|---|---|---|---|
aspirations.complete_aspiration | <aspiration_type> <opt_sim> | Cheat | Base game | server_commands.aspiration_commands:50 |
aspirations.complete_current_milestone — Completes the current aspiration milestone. | <opt_sim> | Cheat | Base game | server_commands.aspiration_commands:69 |
aspirations.complete_objective | <objective> <opt_sim> | Cheat | Base game | server_commands.aspiration_commands:96 |
stats.disable_all_commodities | <opt_sim> | Cheat | Base game | server_commands.statistic_commands:768 |
stats.disable_autosatisfy_curves | none | Cheat | Base game | server_commands.statistic_commands:795 |
stats.disable_commodities | <opt_sim> <*stat_types> | Cheat | Base game | server_commands.statistic_commands:753 |
stats.enable_all_commodities | <opt_sim> | Cheat | Base game | server_commands.statistic_commands:705 |
stats.enable_autosatisfy_curves | none | Cheat | Base game | server_commands.statistic_commands:786 |
stats.enable_commodities | <opt_sim> <*stat_types> | Cheat | Base game | server_commands.statistic_commands:685 |
stats.fill_commodities | <opt_sim> <visible_only> | Cheat | Base game | server_commands.statistic_commands:137 |
stats.fill_commodities_household | <visible_only> | Cheat | Base game | server_commands.statistic_commands:151 |
stats.set_commodity | <stat_type> <value> <opt_sim> <opt_target_type> | Cheat | Base game | server_commands.statistic_commands:173 |
stats.set_skill_level — Sets a named skill to a level. | <stat_type> <level> <opt_sim> | Cheat | Base game | server_commands.statistic_commands:361 |
stats.set_stat | <stat_type> <value> <opt_sim> <opt_target_type> | Cheat | Base game | server_commands.statistic_commands:173 |
aspirations.activate_timed_aspiration | <aspiration_type> <opt_sim> | Live | Base game | server_commands.aspiration_commands:189 |
aspirations.activate_timed_aspiration_from_suggested_aspiration | <aspiration_type> <opt_sim> | Live | Base game | server_commands.aspiration_commands:172 |
aspirations.add_aspiration_to_suggested_aspirations | <aspiration_type> <opt_sim> | Live | Base game | server_commands.aspiration_commands:142 |
aspirations.deactivate_timed_aspiration | <aspiration_id> <opt_sim> | Live | Base game | server_commands.aspiration_commands:199 |
aspirations.get_childhood_inspiration_complete_state | <opt_sim> | Live | Base game | server_commands.aspiration_commands:255 |
aspirations.remove_aspiration_from_suggested_aspirations | <aspiration_type> <opt_sim> | Live | Base game | server_commands.aspiration_commands:154 |
notebook.clear_notebook_btn_tooltip | <sim_id> | Live | Base game | notebook.notebook_commands:46 |
notebook.generate_notebook | <opt_sim> <initial_category> <initial_subcategory> | Live | Base game | notebook.notebook_commands:15 |
notebook.hide_category | <sim> <category_id> | Live | Base game | notebook.notebook_commands:124 |
notebook.mark_entry_as_seen | <sim> <subcategory_id> <entry_id> | Live | Base game | notebook.notebook_commands:29 |
notebook.save_notebook_btn_tooltip | <sim_id> <tooltip> | Live | Base game | notebook.notebook_commands:65 |
notebook.save_notes | <sim_id> <text> | Live | Base game | notebook.notebook_commands:86 |
notebook.send_notebook_btn_update | <sim_id> | Live | Base game | notebook.notebook_commands:105 |
stats.get_reincarnation_count | <opt_sim> | Live | Base game | server_commands.statistic_commands:938 |
stats.horse_value_update | <opt_sim> | Live | Base game | server_commands.statistic_commands:923 |
stats.publish_ranked_stat_progress | <opt_sim> <stat_type> | Live | Base game | server_commands.statistic_commands:803 |
stats.remove_modifier | <stat_type> <level> <opt_sim> | Live | Base game | server_commands.statistic_commands:325 |
stats.set_modifier | <stat_type> <level> <opt_sim> | Live | Base game | server_commands.statistic_commands:306 |
stats.set_rank | <opt_sim> <stat_type> <rank> | Live | Base game | server_commands.statistic_commands:825 |
stats.solve_motive | <stat_type> <opt_sim> | Live | Base game | server_commands.statistic_commands:440 |
Two of the 34 carry an effect line, printed next to the command name, and both are our own sentences. The game registers a name and arguments and says nothing about the outcome, for those two or for any other command, so where there is no such line this page says nothing either.
The 33 a player cannot run
The command decorator's default group is DebugOnly, and a DebugOnly command never reaches register() in a shipped build (sims4.commands:332). Automation commands do register, but they are driven through the automation channel rather than the console. 26 of the 33 below are DebugOnly and 7 are Automation. They are transcribed onto cheat lists anyway, which is why so many "skill cheats" produce nothing but a blank line.
| Command | Arguments | Group | Why it does not run | Registered at |
|---|---|---|---|---|
aspirations.get_active_aspiration | <opt_sim> | Automation | registers, but on the automation channel | server_commands.aspiration_commands:228 |
stats.get_rank | <opt_sim> <stat_type> | Automation | registers, but on the automation channel | server_commands.statistic_commands:854 |
stats.set_all_skills_max | <opt_sim> | Automation | registers, but on the automation channel | server_commands.statistic_commands:382 |
stats.set_lot_level_stat | <stat_type> <value> <level> | Automation | registers, but on the automation channel | server_commands.statistic_commands:204 |
stats.show_all_statistics | <opt_sim> | Automation | registers, but on the automation channel | server_commands.statistic_commands:95 |
stats.show_commodities | <opt_sim> <output_to_automation> | Automation | registers, but on the automation channel | server_commands.statistic_commands:46 |
stats.show_stats | <display_skill_only> <opt_sim> <output_to_automation> | Automation | registers, but on the automation channel | server_commands.statistic_commands:34 |
aspirations.list_all_aspirations | none | DebugOnly | never reaches register() in a shipped build | server_commands.aspiration_commands:40 |
aspirations.print_unfinished_business_objective_info | <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.aspiration_commands:211 |
aspirations.reset_data | <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.aspiration_commands:27 |
stats.add_commodity_to_tracker | <stat_type> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:254 |
stats.add_stat_to_tracker | <stat_type> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:254 |
stats.add_static_commodity_to_tracker | <static_commodity> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:282 |
stats.add_to_commodity | <stat_type> <value> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:241 |
stats.add_to_stat | <stat_type> <value> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:241 |
stats.clear_skill | <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:415 |
stats.count_commodities | none | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:875 |
stats.fill_all_sim_commodities_except | <stat_type> <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:654 |
stats.perform_end_of_day_behavior | <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:905 |
stats.randomize_motives | <min_value> <max_value> <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:509 |
stats.remove_commodity | <stat_type> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:269 |
stats.remove_stat | <stat_type> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:269 |
stats.remove_static_commodity_from_tracker | <static_commodity> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:294 |
stats.reset_convergence | <stat_type> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:545 |
stats.reset_daily_cap | <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:894 |
stats.set_all_sim_commodities_best_value_except | <stat_type> <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:654 |
stats.set_commodity_best_value | <stat_type> <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:638 |
stats.set_commodity_percent | <stat_type> <value> <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:598 |
stats.set_convergence | <stat_type> <convergence> <opt_target> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:532 |
stats.set_ranked_commodity_percent_of_current_rank | <stat_type> <value> <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:618 |
stats.show_change | <stat_type> <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:106 |
stats.show_static_commodities | <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:64 |
stats.tank_commodities | <opt_sim> | DebugOnly | never reaches register() in a shipped build | server_commands.statistic_commands:165 |
Two of those matter more than the rest, because they are what people reach for when they want every skill at once. stats.set_all_skills_max is registered in the Automation group (server_commands.statistic_commands:382). stats.clear_skill takes the decorator default, DebugOnly, so it is not registered at all in a retail build (server_commands.statistic_commands:415). The extraction shows how each one is registered. It is not a report of a session in which someone typed them.
Level types, and where a skill's cap comes from
The game does not give every skill ten levels. Each skill declares a skill_level_type, and that selects the ladder it uses from a class-level mapping. The seven types are an enum in the skill class, with these values (statistics.skill:76).
| Level type | Value | What it is for |
|---|---|---|
MAJOR | 0 | The full adult skill ladder |
MINOR | 1 | The short adult ladder |
CHILD | 2 | Child skill ladder |
TEEN | 3 | Teen skill ladder |
VAMPIRE_LORE | 4 | Its own ladder, separate from MAJOR and MINOR |
TODDLER | 5 | Toddler skill ladder |
POTTY | 6 | A ladder of its own, used by one toddler skill |
The cap itself is computed at tuning load: max_level is set to the length of that ladder and the maximum point total to its sum (statistics.skill:632, :762). The numbers in the ladders live in tuning data rather than in the Python, so this page prints the mechanism and not a per-type level count. Copying a level count off another site would put a number here that nothing in the game data backs.
Why a skill cheat can lower a Sim's progress
A skill holds raw points. The level in the panel is derived from them: the game walks the ladder subtracting each level's cost until the total goes negative, and the index it stops at is the level (statistics.skill:727).
Setting a level therefore writes the point total at the bottom of that level. A Sim most of the way through level 6 who is set to level 6 lands back at the start of it. Nothing is broken; the two numbers are just not the same number.
Direction matters too. Going down is a single write. Going up is stepped one level at a time, deliberately, so that each level's notification, buff and reward fires on the way (server_commands.statistic_commands:361). Setting a Sim from 2 to 10 is not the same event as setting them to 10 from nothing.
Skills also do not decay: the skill class answers can_decay with a flat no (statistics.skill:1236). Any mod or guide offering skill decay protection is protecting against something the game does not do.
Packs and skills
None of the 34 commands above declares a pack requirement, so every one of them registers in a base-game install. That is a statement about the commands, not about the skills they address.
Skill tuning from a pack you do not own is never loaded, so the resolver cannot match its name. A skill argument that comes back unmatched on one machine and resolves on another is a pack difference, not a typo. Commands that do declare a pack code sit in satisfaction points cheat sims 4, where the code is printed next to each one.
It works the other way round as well: a skill can be gated for display and still be settable. The skill class carries both a hidden flag and a separate picker-display pack list, and neither one is what stats.set_skill_level checks. What it checks is Skill.can_add (statistics.skill:711), which is three gates, not one: the skill's age set, the unlock-on-max state, and the Sim's prevent-skills-from-being-added flag. Any of the three refuses the add, and the command then does nothing.
What this page does not print
A table of skill display names against their internal IDs. The command registry behind this site records the command, its arguments, its group and the module and line that registers it. Skill tuning names are not in it, and EA's published cheat list documents general, money and career cheats without covering skill commands at all.
The lists printed elsewhere are not traced to a game file, and this site does not republish an unsourced list under a verification stamp. The substring resolver above is the substitute: it gets the names out of the copy of the game in front of you, including the packs you own and any added after this build was extracted. The table goes in here when it can be cited the way every command above is cited.
Also absent: the aspiration_type and objective values the aspiration commands accept, and an effect description for any command that ships without one.
Where skill cheats sit next to everything else
Job performance and skill level are separate surfaces in the game data, and the promotion commands live in the sims 4 career cheats. Anything gated behind an expansion is grouped in satisfaction points cheat sims 4.
If typing dotted command names is not how you want to work, sims ui cheats covers the mod route instead.
Common questions
What is the skill cheat in The Sims 4?
stats.set_skill_level, registered at server_commands.statistic_commands line 361 in build 1.126.73.1030. The description shipped with it reads: sets a named skill to a level. It takes a skill, a level and an optional Sim, and it is declared in the Cheat group, so nothing happens until testingcheats true has been entered in the current session.
How do I find a skill's internal name?
The skill argument is a TunableInstanceParam over the STATISTIC instance manager with no exact-match flag, so the game resolves it by substring against the loaded skill tuning names. Ask for a fragment that matches more than one skill and the resolver builds an error naming every match, which is how you read the real names off your own install rather than off a cheat list.
Does stats.set_all_skills_max work?
Not when a player types it. The game registers it, but in the Automation group, which is the channel the test harness drives rather than the console. stats.clear_skill is worse: it takes the decorator default, DebugOnly, which never reaches register() in a shipped build at all. Neither is a typo or a removed feature; the game registers both, just not into a group a player can reach.
Why did my skill progress drop after using the cheat?
Because a level and a skill total are two different numbers. The game stores raw points and converts them to the 0-to-max level the panel shows. Setting a level writes the points at the bottom of that level, so partial progress inside it is discarded. Setting the same level you already have is a no-op and changes nothing.
Do skill cheats turn off achievements?
On console, yes. EA states that any cheat code requiring testingcheats true disables achievements and trophies in the save currently being played, with build mode cheats as the exception, and that other saves are unaffected. Every command on this page sits behind testingcheats, so treat that save as achievement-free from then on.