Skip to content
Agent Orchestration
Skill

/cut

Proposes cuts and a polish list to finish the game from its brief and what is built; the person picks each cut. A game to sell also gets a release date and a feature freeze. Use when asked what to cut, how to finish or ship it, or for a polish list.

From plugin
claude-code-game-studios
39k78 skills49 agents

Claude Code

$ npx -y skills add Donchitos/Claude-Code-Game-Studios --skill cut --agent claude-code

SKILL.md

cut.SKILL.md
name: cut
description: "Proposes cuts and a polish list to finish the game from its brief and what is built; the person picks each cut. A game to sell also gets a release date and a feature freeze. Use when asked what to cut, how to finish or ship it, or for a polish list."
argument-hint: "[no arguments]"
user-invocable: true
allowed-tools: Read, Glob, Grep, AskUserQuestion, Bash(bash "*/.claude/skills/cut/../../hooks/yaml-helper.sh" resolve_config *), Bash(bash .claude/scripts/cut-read.sh*), Bash(bash .claude/scripts/cut-apply.sh *), Bash(bash .claude/scripts/config-set.sh project.goal *), Bash(bash .claude/scripts/one-shot-check.sh *), Bash(bash .claude/scripts/one-shot-run.sh *), Bash(find prototypes/*), Bash(timeout 900 npm run smoke), Bash(timeout 900 godot --headless *), Bash(git rev-parse *), Bash(git add design/*), Bash(git commit -m *)
model: sonnet

!`bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys automation`

Resolved above — use as-is. No block → defaults in `.claude/docs/config-resolution.md`.

Cut

Finishing a game is choosing what not to build. /cut reads what exists, proposes cuts with a reason taken from it, and keeps a polish list; the person picks every cut. For `sell`, `early_access` and `publisher` it asks a target date and proposes a freeze date. It writes the brief, the polish list and any cut story's Status line, and makes one commit.

It runs only when asked: `/cut`, or "what should I cut?", "how do I finish this?". It works on the game `design/game-brief.md` describes. A project with GDDs and no brief is `/scope-check`'s.

Ask with the question tool. Without one, list the options numbered and end your turn to wait. The question is the last thing in the reply. A skipped or dismissed question is not an answer: ask again in plain text. Every ask follows `.claude/docs/automation-modes.md`: in `collaborative` and `guided` the cuts and the dates are asked, as scope changes are major decisions; in `autonomous` /cut writes the polish list only and leaves the proposals in its report: cuts and dates wait for the person, and nothing is committed.

Phase 1: Read what exists

Run `bash .claude/scripts/cut-read.sh` and keep its rows:

| Rows | Use | |---|---| | `brief`, `title` | The briefs written, both copies while they are the same text. `brief none`: say "/cut works from the brief's Features list, and there is no `design/game-brief.md`", name `/scope-check` when `design/gdd/` has files, and stop. `brief_differs`: the game's folder copy differs; only `design/game-brief.md` is written, said in one line | | `goal`, `dates` | `dates asked` or `not_asked` follows the goal. `goal - unset` (or `unknown`): guess it with `/start`'s goal table (`.claude/skills/start/SKILL.md`, Phase 4) from the brief's In your words, `hobby` when nothing fits, and show it *guessed* | | `feature`, `keep`, `avoid`, `out`, `cut` | The Features list by number, with its marks; the lists the proposals check | | `recorded`, `passed` | Dates already on the brief's Dates line, and any date already past | | `game`, `record`, `open` | A one-shot's last check record and its fails not marked deliberate | | `smoke` | A project's smoke command, from the engine table, or `none` with why | | `feel` | The feel log | | `polish`, `polish_row` | The polish list's rows and ticks. `polish other_game`: it is another game's; say so and write no polish rows | | `story`, `stories_other` | Stories traced to a Features item by number (`cut`: one already cut); a count of stories traced elsewhere, which /cut leaves alone (say so) |

Read the brief itself too: its Question, Hooks, First minute, Challenge, Goal & fail state and Build order give the reasons.

  • **Fresh first:** a `record ... stale` row means the game changed after its check record. A

changed game gets the light check, never the small check again: the small check is the build's, and `one-shot-check.sh --record` records only that, so never run it here. First see whether a light check is newer than every game file. For each marker on disk, `evidence/changes.tsv` (a change's light check) and `evidence/cut-end.png` (an earlier /cut's), run `find prototypes/<name> -type f -newer prototypes/<name>/evidence/<marker> ! -path '*/evidence/*' ! -path '*/dist/*' ! -name brief.md ! -name feel-log.md ! -name polish-list.md`.

  • **One prints nothing:** that light check is fresh, so run nothing. Errors and a bot stop on

`changes.tsv`'s last line that the polish list lacks become rows.

  • **Otherwise,** run the light check once, as `.claude/skills/prototype/references/one-shot-4-change.md` section 7 does before accept: its step 1 (keep) and step 2 (play it once), the shot

`prototypes/<name>/evidence/cut-end.png`. A `not_assessed` row: say "not checked: <why>" in one line. Fix nothing: each error, bot stop and `changed` or `gone` keep row becomes a polish row.

These rows end `· from: light check of <date>`. The stale `record` row stays; its `open` rows still count.

  • **A project:** `smoke <command>`: run `timeout 900 <command>` once, as it is: no pipe, redirect

or second command (the permission is for that command alone). A failure is a polish row (`from: smoke run of <date>`); a pass adds none. `record none` with no smoke command to run: say in one line that the polish rows come from the feel log and the person.

Phase 2: Propose

**Cuts,** in this order, each with a reason from what exists:

1. A `not_yet` item that Out of scope or Avoid already rules out. 2. A `built` item whose check fails (`open`), offered as cut it or polish it. 3. A `not_yet` item that no Question, Hook, First minute, Challenge, Goal & fail state or Keep line names.

For a selling goal, every `not_yet` item left also shows "build it before <freeze date>, or cut it". **Never propose an item a Keep line names.** The person can still name any item.

**Marks brought up to date:** a `not_yet` item whose `story` row is Complete is

Read more
@donchitos
Ships withclaude-code-game-studios

Turn Claude Code into a full game dev studio — 49 AI agents, 72 workflow skills, and a complete coordination system mirroring real studio hierarchy.

39k78 skills49 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
39.0k
Star history of Donchitos/Claude-Code-Game-Studios on GitHub, a chart by star-history.com

Other skills on claude-code-game-studios.

More skills from other plugins.

1password

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

clawdis2w393k
@steipete@steipeteInstall Skill
computer-use

computer-use

Drives the GUI of a visible local app window through `orca computer`: accessibility tree, clicks, typing, menus, dialogs, and…

orca2w111k
@stablyai@stablyaiInstall Skill
agentmail

agentmail

Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…

paperclip2w109k
@paperclipai@paperclipaiInstall Skill
adr-create

adr-create

Create a new Architecture Decision Record with sequential numbering and AgentDB registration

@ruvnet@ruvnetInstall Skill

Questions about cut.

Which coding agents can use cut?
cut installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.