Tier 1 · Project setup
Start a project: scan, confirm, ask
Identify how you want to start: scan the machine read-only, confirm what was found, ask only what is missing, save it to setup-answers.yaml.
Identify how you want to start: scan the machine read-only, confirm what was found, ask only what is missing, save it to setup-answers.yaml.
How the agent identifies the starting point
Setup is something the agent does in its own terminal when a project starts, before a folder,
package or scene exists. This page describes that behaviour; it is guidance for the agent, not a
form for a reader. The result is one file, setup-answers.yaml, that the later sections read.
First step, always: read and follow the non-destructive rules (never destructive, except a store- or law-mandated action, run in the mandated flow after the user confirms).
Scan first, read-only. Before asking anything, the agent detects what the machine already answers. It installs and writes nothing. A detected value is right more often than a guessed one, and the user is not asked what the machine can tell. The scan covers:
- Prior answers:
setup-answers.yamlat the project root or target folder, then project config (ProjectSettings/ProjectVersion.txt,Packages/manifest.json), then anything said earlier in the session. - Installed Unity Editors and modules: Unity Hub's files (
%APPDATA%\UnityHub\on Windows,~/Library/Application Support/UnityHub/on macOS,~/.config/UnityHub/on Linux) and each Editor'sPlaybackEngines/platform folders. - Project folders: the Hub's default project location and its list of existing projects.
- Tooling: whether
gitis on PATH with a user name and email set, and which IDE (Rider, Visual Studio, VS Code) is installed.
Then:
- Confirm the findings. The agent shows everything it detected in one summary and gets one
confirmation. Detected is not decided. Answers already recorded in
setup-answers.yamlare shown, not asked again. - Ask only what is missing. Anything the scan and the file could not settle (render pipeline, UI stack, networking, platforms and similar structural calls) is asked by the agent interactively in the user's terminal or chat, one question at a time and all before any work, as pick-from options with the detected or default value pre-selected and an Other choice last. The full question set, its order and its branching live in an agent-only instruction file, not on this site's pages.
- Record the answers. After confirmation, each answer goes into
setup-answers.yamlwithsource: developer. Later sessions read the file and never ask again; a change of mind is an explicit edit to the file. - Write nothing until confirmed. No folder, package or file is created before the user confirms.
Rules that apply during setup
- The Unity version is the user's answer. The agent offers the installed versions it found, and the user's pick is recorded as the exact version string. There is no always-newest or always-pin rule; the answer decides.
- Asset Store packages need a live session. If store packages are wanted, the agent first checks that Unity Hub shows a signed-in account and the asset package cache exists, and says so if it does not.
- Ask before editing outside the project. Files outside the game project folder (global agent instruction files, a shared rules repository, Editor preferences, other global config) are changed only after the user approves the exact change. Those files steer every project on the machine.
- Unity 6 core packages come with the Editor. On Unity 6, URP, HDRP, uGUI (with TextMeshPro) and the Test Framework ship with each Editor version, so the agent does not look up or pick versions for them. The public registry's
latestfor these is misleading. - The stack is the user's call. The agent does not choose the Unity version, render pipeline, networking stack, UI stack or DOTS itself. Reversing one of these after art, scenes or shaders exist is a re-authoring project, so they are settled before work starts. If nobody can be reached, the agent continues on defaults recorded as
source: agent default — unconfirmedand lists them first in its report. - Networking and online services are settled together. "Multiplayer" does not imply a transport: a tournament SDK runs two local simulations and submits scores, so no networking package is needed. The useful check is whether the build ever opens a socket to another player.
- Legal guidance is optional and depends on the release type. The agent offers it, and the user can take it, skip it, or defer it to a reminder in the setup report. If taken, what applies depends on what is being released: a mod, a free game, a paid or store product, or not sure yet. See Legality & liability.
The answers file
setup-answers.yaml at the project root; one key per decision, each with a value and a source:
# setup-answers.yaml: read by every session (SKIP-IF-KNOWN); edit to change a decision
unity_version: { value: "6000.3.26f1", channel: lts, source: developer }
project_folder: { value: "D:/UnityProjects/MyGame", existing: false, source: developer }
donor_project: { value: none, source: developer }
render_pipeline: { value: urp, source: developer }
dimension: { value: 3d, source: developer }
ui: { value: ugui, world_space_ui: false, source: developer }
languages: { value: [en], rtl_or_cjk: false, source: developer }
networking: { value: ngo, topology: client-hosted, authority: server, source: developer }
online_services: { value: none, source: agent default — unconfirmed }
dots: { value: false, source: developer }
input: { value: input-system, devices: [touch, gamepad, kbm], source: developer }
platforms: { value: [android, ios, webgl], vendor_sdk: none, source: developer }
monetization: { value: none, source: developer }
persistence: { value: local, source: developer }
deterministic_rng: { value: false, source: developer }
legal_guidance: { value: yes, release_type: free, source: developer } # value: yes | no | not-now; release_type: mod | free | paid | not-sure
features: { asset_store: { packages: [], session_live: unknown }, addressables: true, cinemachine: false, localization: false, tests: true, mcp: none, source: developer }