Urban Design AI Submission
open-city-ai/haidian
A skill your agent uses when an AI agent wants to participate in the Haidian Centennial Jing-Zhang AI Innovation Belt open call, follow changing materials and community discussion, generate or…
Shows or changes a game project's configuration, including merged effective values and per-developer overrides, without hand-editing YAML.
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill settings -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Donchitos/Claude-Code-Game-Studios settings --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Donchitos/Claude-Code-Game-Studios.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/settings .claude/skills/settings && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "settings" agent skill from https://github.com/Donchitos/Claude-Code-Game-Studios/tree/main/.claude/skills/settings into .claude/skills/settings/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Donchitos/Claude-Code-Game-Studios/tree/main/.claude/skills/settingsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill settings -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Donchitos/Claude-Code-Game-Studios settings --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Donchitos/Claude-Code-Game-Studios.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/settings .agents/skills/settings && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "settings" agent skill from https://github.com/Donchitos/Claude-Code-Game-Studios/tree/main/.claude/skills/settings into .agents/skills/settings/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill settings -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Donchitos/Claude-Code-Game-Studios settings --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Donchitos/Claude-Code-Game-Studios.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/settings .cursor/skills/settings && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "settings" agent skill from https://github.com/Donchitos/Claude-Code-Game-Studios/tree/main/.claude/skills/settings into .cursor/skills/settings/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Donchitos/Claude-Code-Game-Studios.git --path .claude/skills/settings--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill settings -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Donchitos/Claude-Code-Game-Studios settings --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Donchitos/Claude-Code-Game-Studios.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/settings .gemini/skills/settings && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "settings" agent skill from https://github.com/Donchitos/Claude-Code-Game-Studios/tree/main/.claude/skills/settings into .gemini/skills/settings/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Donchitos/Claude-Code-Game-Studios settingsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill settings -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Donchitos/Claude-Code-Game-Studios.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/settings .github/skills/settings && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "settings" agent skill from https://github.com/Donchitos/Claude-Code-Game-Studios/tree/main/.claude/skills/settings into .github/skills/settings/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill settings -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Donchitos/Claude-Code-Game-Studios settings --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Donchitos/Claude-Code-Game-Studios.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/settings .opencode/skills/settings && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "settings" agent skill from https://github.com/Donchitos/Claude-Code-Game-Studios/tree/main/.claude/skills/settings into .opencode/skills/settings/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
settingsShows or changes a game project's configuration, including merged effective values and per-developer overrides, without hand-editing YAML.
The skill manages `project.yaml`, the committed team-wide config, and `project.local.yaml`, the gitignored per-developer overrides. It has four forms: `/settings` shows everything, `/settings` with a key shows one value, a `key=value` argument sets a value in `project.yaml`, and `--local key=value` sets it in the local file. Keys are dotted YAML paths such as `modes.review_mode`, and a malformed operand with an empty key or value gets the usage text instead of a write.
Writes to `project.yaml` count as schema changes and are confirmed even in autonomous mode unless you removed that category from your always-ask list. The skill also warns when you set a documented setting that no skill or hook reads, so a successful write is not mistaken for enforcement. It needs `.claude/hooks/yaml-helper.sh`, and without it the project is reported as not a Claude Code Game Studios project.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b21fa0f. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGlobGrepWriteEditBashAskUserQuestionFrom allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Project Settings Manager loads about 4.9k tokens when it runs. Until then it costs about 26 tokens; SKILL.md has 2,179 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, Glob, Grep, Write, Edit, Bash, AskUserQuestionAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Donchitos/Claude-Code-Game-Studios at commit b21fa0f, republished under its MIT licence (© Donchitos). 2,179 words, ~4,859 tokens.
.claude/skills/settings/SKILL.md (or your agent's skills folder).Manages project.yaml (team-wide config, committed) and project.local.yaml
(per-developer overrides, gitignored). Use this skill to inspect current
settings or change them without manually editing YAML.
Automation mode: Resolve modes.automation (project.local.yaml →
project.yaml → default collaborative). The approval gates in Phase 4 and
Phase 5 follow the pattern in .claude/docs/automation-modes.md. Note:
writing to project.yaml is a schema_changes decision (a default
automation_always_ask category), so /settings confirms config writes even
in autonomous mode unless the user has removed schema_changes from their
always-ask list.
Determine which of the four forms the user invoked:
| Form | Mode |
|---|---|
/settings (no args) | View-all (Phase 2) |
/settings <key> (single arg, no =) | View-one (Phase 3) |
/settings <key>=<value> (single arg with =) | Set-yaml (Phase 4) |
/settings --local <key>=<value> (--local prefix) | Set-local (Phase 5) |
For Set-yaml and Set-local, <key> is a dotted YAML path (e.g.
modes.review_mode, testing.strict.logic) and <value> is the new value.
Empty-operand validation: After splitting the key=value operand on
=, if either <key> or <value> is empty, this is malformed — route to
Phase 6 (usage) rather than attempting the write. The rule applies in both
Set-yaml and Set-local routing: for --local, strip the --local token
first, then check the remaining operand the same way (so /settings --local =foo
and /settings --local key= both go to Phase 6).
Anything else that doesn't match the four forms above → Phase 6 (usage).
All four subcommands need yaml-helper.sh. Source it once via Bash:
source "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/yaml-helper.sh"If .claude/hooks/yaml-helper.sh is missing, this is not a CCGS project.
Report the error and exit.
Some settings are fully documented, enum-validated and settable, and no skill
or hook reads them — setting one changes nothing. This skill must say so.
Returning an ordinary success lets a user reasonably believe the behaviour the
setting describes is now enforced — an accessibility tier being the case that
motivates this. (The key is not named here on purpose; see the note below.)
The banner exists only in
.claude/docs/effects-map.md, which someone
configuring their project will never open. A setting that does nothing must never look
exactly like one that works — .claude/rules/skill-authoring.md obligation 3.
Derive the set; do not hardcode it (obligation 5):
grep -B14 '^> ### RESERVED' .claude/docs/effects-map.md | grep -E '^## 'Match the banner HEADING (> ### RESERVED), never the bare word "RESERVED".
platform.cert_tier's section mentions the banner in prose, to record that it
carried one and later became a live setting. A looser match re-reports a working
setting as dead — the direction that understates what the framework does, and
why the dead-settings gate asserts both directions.
A heading may name two keys joined by " and " — split on that separator so
both are captured, or the second one silently escapes the set. Let
RESERVED_SET be the result.
Deliberately phrased without naming those keys. The dead-settings gate asserts that a setting on the allowlist has no readers, and it counts any skill file that spells the key. Naming them here to illustrate the split would make
/settingsregister as a reader of two settings nothing reads, and the gate would fail — correctly. Spelling a dead path out while explaining why not to use it trips the same wire. Reword instead of adding an exemption: the strictness is the point, so do not re-introduce the literal names to make an example clearer.
Never refuse a write to a reserved key. Storing the value a user intends is legitimate; storing it silently is the defect.
(when no arguments)
Confirm project.yaml exists. If missing, report:
"No
project.yamlfound — run/startto create one." And exit.
Check if project.local.yaml exists.
Run validate_yaml_enum project.yaml and capture any errors.
If project.local.yaml exists, also run validate_yaml_enum project.local.yaml.
Tag each error with its source file so the user can tell them apart.
Enumerate leaves. Use the Read tool to read both YAML files as
text. Walk through each file's structure and collect every leaf key
into a deduplicated list of dotted paths. A leaf is a key: value
line whose value is non-empty (a scalar or inline-array) — NOT a
parent block that introduces a nested map. Maintain insertion order
per file; merge by appending leaves from project.local.yaml that
aren't already present from project.yaml. The resulting list is
the set of leaves to display.
Then append the rigor family — modes.rigor, modes.workflow,
docs.density, qa.level, modes.story_granularity, modes.review_mode,
team.size — for any of the seven the merged list does not already
contain. These are normally leaves of neither file: modes.rigor has a
terminal default and the other six are supplied by the rigor expansion
(modes.review_mode and team.size may also appear as file leaves when set
locally, but must still be appended so their derived value shows). Enumerating
only file leaves would hide exactly the settings a user just chose, in the one
view meant to show them.
For each leaf, perform three reads and one check:
resolve_setting <path> → <value>, TAB, <source>. This walks the
whole chain (project.local.yaml → project.yaml → legacy file →
rigor expansion → default), so it is the only read that can report
a derived value or name what supplied it.get_yaml_key project.yaml <path> → yaml-only value (needed only to
show what a local override is shadowing)is_locally_overridable <path> → 0 (overridable) or 1 (locked)Compute the source annotation from <source>:
<source> | Annotation |
|---|---|
project.local.yaml, yaml-only value non-empty | (LOCAL OVERRIDE — yaml has: <yamlvalue>) |
project.local.yaml, yaml-only value empty | (project.local.yaml) |
project.yaml | (project.yaml) |
a legacy file path (e.g. production/review-mode.txt) | (<path>, legacy) |
rigor:<level> | (derived from rigor: <level>) |
default | (default) |
unset | skip the leaf (don't print unset keys) |
Append , locked to the annotation when is_locally_overridable
returned 1.
Append , reserved when the leaf is in RESERVED_SET (Phase 1b), and
print this line with the legend below the block:
reserved = stored and validated, but nothing reads it. Setting it changes
no behaviour today.All four phases must carry the reserved marking — view-one, view-all, and both write paths. Marking view-one and the writes while leaving view-all — the most-used form of this skill — unmarked means a user who set a reserved key sees it listed beside working settings with an ordinary
(project.yaml)annotation, in the view most people actually run. Guard all four: view-one and view-all are twins in exactly the way the two write paths are.
Print, grouped by top-level section (framework, modes,
engine, etc.) in the order leaves first appeared. The grouping is
determined by the dotted path, not by which file the leaf came from
— e.g. modes.automation groups under modes: even if only
project.local.yaml defines it. Within each section, indent leaves
by 2 spaces; nest further for sub-blocks (e.g. testing.strict.*).
Example output:
project.yaml: present
project.local.yaml: present
Schema validation: ok
Effective config:
framework:
version: 1.1.2 (project.yaml, locked)
modes:
review_mode: lean (project.yaml)
automation: autonomous (LOCAL OVERRIDE — yaml has: collaborative)
rigor: full (project.yaml, locked)
workflow: full (derived from rigor: full, locked)
story_granularity: fine (derived from rigor: full, locked)
docs:
density: terse (project.yaml, locked)
qa:
level: full (derived from rigor: full, locked)
engine:
name: Godot (project.yaml, locked)
version: 4.6 (project.yaml, locked)
testing:
strict:
logic: false (LOCAL OVERRIDE — yaml has: true)
integration: true (project.yaml)
locked = cannot be overridden in project.local.yaml (project-wide setting).
It does NOT mean fixed: a derived value can still be set explicitly with
/settings <key>=<value>, and an explicit value wins over rigor.Print that two-line legend after the config block whenever any rendered
line carries locked. Without it users read locked as "immutable" and
conclude a rigor-derived knob cannot be changed — the opposite of what
Phase 3's view-one tells them for the same knob ("an explicit value wins
over rigor"). The two views must not leave contradictory impressions of
the same knob's mutability.
The docs.density line above is the precedence rule made visible: an
explicit project.yaml value keeps winning over the level rigor would
otherwise derive, so "comprehensive but compact" stays expressible.
If schema errors exist, print them in this form before the effective config block:
Schema validation: ERRORS
[project.yaml] modes.review_mode: 'chaotic' is not a valid value (expected: full|lean|solo)
[project.local.yaml] engine.name: 'Pygame' is not a valid value (expected: Godot|Unity|Unreal)(when single arg, no =)
If <key> is in RESERVED_SET, print this BEFORE the value block — above,
not below. A caveat under a value reads as a footnote on a working setting:
<key>is RESERVED — nothing reads it. The value below is stored and validated; it changes no behaviour today.
Let <key> be the argument. Perform four reads:
resolve_setting <key> → <value>, TAB, <source> (effective value + provenance)get_yaml_key project.yaml <key> → yaml-only valueget_yaml_key project.local.yaml <key> → local-only value (skip if file absent)is_locally_overridable <key> → 0 (overridable) or 1 (locked)Determine the source from <source> (same table as Phase 2 step 5)
and the Locally overridden status:
yes if the local-only value is non-emptyno otherwisePrint:
<key>
Effective value: <effective-value or "(not set)" if <source> is unset>
Source: <project.yaml | project.local.yaml | project.local.yaml (overrides project.yaml) | derived from rigor: <level> | default>
Locally overridden: <yes | no>
Whitelist: <"can be locally overridden" if is_locally_overridable returned 0, else "locked — project-wide">When both files set the key (the LOCAL OVERRIDE case), add two more lines under Source:
project.yaml value: <yamlvalue>
project.local.yaml value: <localvalue>When <source> is rigor:<level>, add one line under Source so the user
knows the value is settable and how:
Set explicitly with: /settings <key>=<value> (an explicit value wins over rigor)When the effective value is empty (key not set anywhere), print just:
<key>
Effective value: (not set)
Locally overridden: no
Whitelist: <"can be locally overridden" | "locked — project-wide">(when <key>=<value>, no --local)
Schema validation: call validate_enum_value <key> <value>. If
it returns 1, the stderr line is shown to the user verbatim
(Invalid value '<value>' for '<key>'. Allowed: ...) and the skill
exits without writing. If it returns 0, the value is either valid
or the key has no enum constraint — proceed.
Reserved warning: if <key> is in RESERVED_SET (Phase 1b), print
BEFORE the approval prompt:
"Note:
<key>is RESERVED — no skill or hook reads it, so setting it will not change any behaviour. Your value is stored either way."
Then continue to the approval gate as normal. Phase 5 carries the identical warning. Warning on one write path and not the other leaves a silent route to the same outcome, which is the whole failure this guards against.
Shadow warning: read get_yaml_key project.local.yaml <key>. If
it returns a non-empty value, print BEFORE the approval prompt:
"Note: this setting is currently locally overridden in
project.local.yaml(value:<localvalue>). Writing toproject.yamlwill not change your effective value."
Approval gate: use AskUserQuestion:
Set `<key>=<value>` in `project.yaml`?[A] Yes, write / [B] No, cancelWrite using the Edit tool. The edit strategy depends on what
already exists in project.yaml:
Case A — key exists: Read project.yaml. Locate the line
<lastsegment>: <oldvalue> and the line immediately above it that
introduces its parent block (e.g. modes: for modes.review_mode).
Construct the Edit with old_string that includes the parent
block line PLUS the leaf line, so the match is unique even if
<lastsegment>: <oldvalue> appears elsewhere. Example for
modes.review_mode=full:
old_string:
modes:
review_mode: lean
new_string:
modes:
review_mode: fullCase B — parent block exists, leaf doesn't: Find the last line
of the parent block. Use Edit to append the new leaf line at the
correct indentation, using the last existing leaf as the old_string
anchor.
Case C — parent block doesn't exist: Append a new top-level
block at end-of-file (deterministic — always end-of-file, never
between blocks). Use Edit with the last non-empty line of the
file as old_string and append the new block after it.
Case D — file structure is unusual (commented-out keys with the
same name, ambiguous nesting, malformed YAML): STOP and ask via
AskUserQuestion:
"Couldn't find a clean insertion point for
<key>inproject.yaml. Show me what to do."
Confirm: Set `<key>=<value>` in `project.yaml`.
When <key> is modes.rigor, the write also moves six other
knobs, so print what they resolve to now — re-read each with
resolve_setting rather than reciting the expansion table, since any
of them may carry an explicit value that still wins:
Set modes.rigor=full in project.yaml. It now supplies:
modes.workflow: full (derived from rigor: full)
docs.density: terse (project.yaml — explicit, unchanged)
qa.level: full (derived from rigor: full)
modes.story_granularity: fine (derived from rigor: full)
modes.review_mode: full (derived from rigor: full)
team.size: studio (derived from rigor: full)(when --local <key>=<value>)
Whitelist check: call is_locally_overridable <key>.
<key> cannot be locally overridden — it's a project-wide setting. Use `/settings <key>=<value>` (no `--local`) to change it for the whole team.
Schema validation: call validate_enum_value <key> <value>. If
it returns 1, show the stderr message verbatim and exit without
writing.
2b. Reserved warning: if <key> is in RESERVED_SET (Phase 1b), print
BEFORE the approval prompt:
"Note:
<key>is RESERVED — no skill or hook reads it, so setting it will not change any behaviour. Your value is stored either way."
Identical to Phase 4 step 2, and deliberately so. Both write paths reach the
same file-of-record for a user's intent; warning on one only would leave
--local as the silent route.
Base check: if project.yaml doesn't exist:
"Cannot create
project.local.yaml—project.yamlis missing. Run/startto create one first." Exit. (Local overrides require a base, per spec.)
Approval gate: use AskUserQuestion:
Set `<key>=<value>` in `project.local.yaml` (your personal override, gitignored)?[A] Yes, write / [B] No, cancelWrite:
project.local.yaml doesn't exist, use Write to create it
with the new setting wrapped in its parent block(s). Minimal
example for --local modes.automation=autonomous:# project.local.yaml — per-developer overrides (gitignored)
modes:
automation: autonomousEdit with the same Case A/B/C strategy from
Phase 4 step 4.Confirm: Set `<key>=<value>` in `project.local.yaml` (your override).
When the argument doesn't match any of the four valid forms (or has empty operands), print:
Usage:
/settings — view all effective config
/settings <key> — view a single setting
/settings <key>=<value> — change a setting (project.yaml)
/settings --local <key>=<value> — change a setting locally
(project.local.yaml, gitignored)
Examples:
/settings modes.review_mode
/settings modes.review_mode=full
/settings --local modes.automation=autonomousEdit (existing keys/blocks) or Write
(new files). The skill does not depend on yq or any external YAML library.yaml-helper.sh
(is_locally_overridable function). To extend it, edit the
_yaml_helper_locally_overridable constant — do not duplicate the list here.modes.workflow, docs.density,
qa.level, modes.story_granularity, modes.review_mode and team.size have no
terminal default; when no file sets them their value comes from the modes.rigor
expansion in yaml-helper.sh
(_yaml_helper_rigor_expansion). Report them via resolve_setting — a
get_yaml_key read returns empty and would render them "(not set)" while every
skill is in fact acting on a real value.yaml-helper.sh
(_yaml_helper_enums). validate_enum_value is the single-key
validator for pending writes; validate_yaml_enum validates whole
files (used by session-start.sh).project.local.yaml is gitignored. These
overrides never propagate to teammates..claude/docs/settings-guidance.md (advisory presetseffects-map.md says what each setting does; that doc says
which to pick.© Donchitos, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/settings of Donchitos/Claude-Code-Game-Studios.
Open the folder on GitHubat commit b21fa0f
Project Settings Manager next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Project Settings Manager this skillDonchitos/Claude-Code-Game-Studios | 26k | — | ~4.9k | Automated safety check: Notes | MIT | |
| Urban Design AI Submissionopen-city-ai/haidian | 415 | — | ~9.4k | Automated safety check: Pass | None | |
| Aibridge Development WorkflowFlameskyDexive/Legends-Of-Heroes | 929 | — | ~790 | Automated safety check: Pass | MIT | |
| Fmodel Unpackpa001024/dna-builder | 134 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Engine MCPSedulousWorks/SedulousEngine | 148 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Pixel FaceCotal-AI/Cotal | 309 | — | ~1.5k | Automated safety check: Pass | Apache-2.0 |
open-city-ai/haidian
A skill your agent uses when an AI agent wants to participate in the Haidian Centennial Jing-Zhang AI Innovation Belt open call, follow changing materials and community discussion, generate or…
FlameskyDexive/Legends-Of-Heroes
AIBridge/Unity 项目的标准开发工作流。Use when creating, modifying, fixing, refactoring, or validating C code, Unity assets, prefabs, editor tools, package structure, tests, AGENTS.md, or local Skills.
pa001024/dna-builder
This skill documents how to use the fmodel-mcp toolkit (a CUE4Parse-based .NET CLI plus a thin Python MCP server) to inspect and export Unreal Engine game assets — pak files, textures, meshes…
SedulousWorks/SedulousEngine
Launch and operate the engine's MCP server (Sedulous.Tools.Mcp) from the engine checkout - the build and wiring recipe here, then the operating manual served by the host itself.
Cotal-AI/Cotal
Create or improve a 32×32 pixel-art persona face for the Frontier Faces demo (examples/04-frontier-faces/personas.mjs) — the animated agent avatars rendered by face-term.mjs / the browser…
pardeike/DecompilerServer
A skill your agent uses when working with the DecompilerServer MCP server to inspect, search, decompile, analyze, or compare .NET assemblies, especially foreign code such as Unity/RimWorld…
Donchitos/Claude-Code-Game-Studios
Audits game assets against naming conventions, file size budgets and format standards, and finds orphaned assets and missing references.
Donchitos/Claude-Code-Game-Studios
Writes per-asset visual specs and AI image-generation prompts for a game's characters, enemies and screens, driven by the GDD, art bible and an entity inventory.
Donchitos/Claude-Code-Game-Studios
Checks game data and formulas for balance outliers, broken progression, degenerate strategies and economy problems, and answers 'could not run' when the data is missing.
Donchitos/Claude-Code-Game-Studios
Turns a description into a structured bug report, or scans code for likely bugs, then verifies and closes reports through four modes.
Donchitos/Claude-Code-Game-Studios
Reviews the open bug backlog, separates severity from priority, assigns fixes to sprints and reports systemic trends, writing a dated triage file.
Donchitos/Claude-Code-Game-Studios
Generates an internal or player-facing changelog from git commits and sprint data, filtering out framework maintenance commits so that only work on the game itself reaches release copy.
Categories
Shows or changes a game project's configuration, including merged effective values and per-developer overrides, without hand-editing YAML. yaml`, the gitignored per-developer overrides.yaml`, and `--local key=value` sets it in the local file.
Project Settings Manager fits situations like: checking the effective merged configuration of a game studio project; changing a team-wide setting without editing YAML by hand; setting a personal override that should not be committed.
Run `npx skills add Donchitos/Claude-Code-Game-Studios --skill settings -a claude-code`. Or copy the skill folder (.claude/skills/settings in Donchitos/Claude-Code-Game-Studios) into .claude/skills/settings in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Donchitos/Claude-Code-Game-Studios --skill settings -a codex`. Or copy the skill folder (.claude/skills/settings in Donchitos/Claude-Code-Game-Studios) into .agents/skills/settings in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Donchitos/Claude-Code-Game-Studios --skill settings -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/settings, .gemini/skills/settings, .github/skills/settings and .opencode/skills/settings in your project.
SKILL.md names no scripts, command-line tools or credentials: Project Settings Manager is instructions for the agent only. Our summary lists: `.claude/hooks/yaml-helper.sh` from Claude Code Game Studios. Its frontmatter pre-approves these tools: Read, Glob, Grep, Write, Edit, Bash, AskUserQuestion.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Project Settings Manager is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.9k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Project Settings Manager: Urban Design AI Submission (open-city-ai/haidian, 415 stars), Aibridge Development Workflow (FlameskyDexive/Legends-Of-Heroes, 929 stars), Fmodel Unpack (pa001024/dna-builder, 134 stars) and Engine MCP (SedulousWorks/SedulousEngine, 148 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Donchitos (a GitHub user) maintains it in Donchitos/Claude-Code-Game-Studios, which has 25,834 GitHub stars. The repository holds 73 skills in this directory. The repository was last updated on September 29, 2026.
Source: Donchitos/Claude-Code-Game-Studios on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.