Skip to main content
.comet/config.yaml is the single project-level configuration file. This page covers the shared entry fields and the classic.* defaults. See Native configuration for native.* fields. This page uses <classic-root> for the configured Classic OpenSpec root: docs/openspec/ for new projects and openspec/ for projects that retain the legacy layout. The location is selected by classic.artifact_layout; see Project file structure.

Complete example

When both workflows are enabled and the project uses English, an installation can generate a configuration like this. From the Classic perspective, the shared fields and the classic: block are the relevant parts:

Shared entry fields

Changing default_workflow changes only the /comet entry. It does not migrate any existing change.

Hook write allowlist

hook.allow_paths is a shared write policy. When it is empty, writes inside the project outside artifact areas follow each workflow’s phase and Guard rules. Once configured, writes to matching directories and their subdirectories pass through directly. A typical use is allowing implementation directories such as src/ to be modified during any phase, avoiding blocks outside Build.
The .comet Runtime state directory and Classic’s OpenSpec and Superpowers artifact roots are always protected and cannot be allowed through this setting. Out-of-bounds or malformed paths are reported by comet doctor.

Classic fields

artifact_layout selects the project-level directory; the other four fields are snapshotted into a new Classic change’s .comet.yaml:
Classic project defaults are snapshotted into .comet.yaml when a new change is created. Later edits do not rewrite existing changes.
Editing classic.artifact_layout changes where Comet reads artifacts but does not move existing files. To migrate an existing project, run comet classic root move docs —dry-run to inspect current state, conflicts, and blockers, then run comet classic root move docs —apply.

Artifact language versus Skill language

The Skill language selected by comet init determines whether the English or Chinese Comet Skills are installed. Classic artifact language is stored in classic.language: When a new Classic change is created, Comet snapshots project-level classic.language into <classic-root>/changes/<name>/.comet.yaml. OpenSpec proposals, designs, tasks, Superpowers design and plan documents, verification reports, and archive notes follow this setting instead of guessing from the language of the request that triggered the workflow.
Project-level and change-level language values accept only en or zh-CN. zh is only the CLI selection value for comet init —language zh; it is not valid inside .comet/config.yaml.

Configuration precedence

The following precedence applies only to Classic language, context_compression, review_mode, and auto_transition:

auto_transition in detail

auto_transition controls whether Comet invokes the next Skill after a phase advances.
Phase advancement still happens. Guard’s —apply always updates the phase field regardless of auto_transition. The setting controls only whether the next Skill is invoked automatically. User decision points, such as approving a proposal or choosing an execution mode, block in either setting.

Environment variables

COMET_LANGUAGE, COMET_AUTO_TRANSITION, COMET_FORCE_PHASE, and COMET_OPENSPEC are user-facing environment variables. COMET_CONTEXT_COMPRESSION and COMET_REVIEW_MODE exist in the resolver layer but are not formally documented for general use; they are mainly for internal and test use.

How to configure

Configure project defaults

Edit .comet/config.yaml:
Commit the file so new changes created by teammates use the same defaults.

Temporary overrides with environment variables

These affect the current session without changing the file.

Next steps

Last modified on August 21, 2026