Skip to content

/gsd prefs

/gsd prefs opens an interactive wizard for configuring GSD’s behavior. Preferences are stored as YAML frontmatter in markdown files and control model selection per phase, auto-mode timeouts, git commit behavior, skill discovery, budget ceilings, and notification settings. Preferences can be set at two levels:

  • Global (~/.gsd/preferences.md) — Applies to all projects. Default when no scope is specified. The base directory can be overridden with the GSD_HOME environment variable.
  • Project (.gsd/preferences.md) — Overrides global settings for this project only.

Project preferences take precedence over global when both exist. The wizard shows current values for each category so you can see what’s configured before making changes. After saving, extensions are reloaded automatically.

Many preference fields not exposed by the wizard (such as token_profile, always_use_skills, prefer_skills, avoid_skills, skill_rules, custom_instructions, verification_commands, parallel, and others) can be set by editing the preferences file directly. See ~/.gsd/agent/extensions/gsd/docs/preferences-reference.md for full field documentation.

/gsd prefs # Global wizard (default)
/gsd prefs global # Explicit global wizard
/gsd prefs project # Project-level wizard
/gsd prefs wizard # Same as global (alias)
/gsd prefs setup # Same as global (alias)
/gsd prefs status # Show current preference status
/gsd prefs import-claude # Import Claude Code settings into global prefs
/gsd prefs import-claude project # Import into project prefs
CategoryWhat It ConfiguresKey Fields
Workflow ModeSolo or team workflow with coordinated defaultsmode (solo/team)
ModelsModel selection per execution phase, with optional per-phase fallbacksmodels.research, models.planning, models.execution, models.completion
TimeoutsAuto-mode supervisor timeoutsauto_supervisor.soft_timeout_minutes, idle_timeout_minutes, hard_timeout_minutes
GitBranch naming, push behavior, WIP snapshots, commit type, isolation, merge strategygit.main_branch, git.auto_push, git.push_branches, git.snapshots, git.remote, git.pre_merge_check, git.commit_type, git.merge_strategy, git.isolation
SkillsSkill discovery mode and UAT dispatch behaviorskill_discovery (auto/suggest/off), uat_dispatch
BudgetCost ceiling, enforcement policy, context pausebudget_ceiling, budget_enforcement (warn/pause/halt), context_pause_threshold
NotificationsEvent-based alert togglesnotifications.enabled, on_complete, on_error, on_budget, on_milestone, on_attention
AdvancedUnique milestone IDsunique_milestone_ids

Selecting solo or team sets a bundle of git defaults as the lowest-priority layer. Explicit values you’ve set always win. Choosing (none) removes the mode field and lets you configure everything manually.

Settingsoloteam
git.auto_pushtruefalse
git.push_branchesfalsetrue
git.pre_merge_checkfalsetrue
git.merge_strategysquashsquash
git.isolationworktreeworktree
unique_milestone_idsfalsetrue

The model wizard groups available models by provider. For each of the four phases (research, planning, execution, completion) you pick a provider first, then select a specific model ID from that provider’s list. You can also type a model ID manually or clear the phase back to the inherited default.

Each phase can be configured as a plain model ID string or as an object with a primary model, an optional provider hint (to disambiguate when the same ID exists across providers), and an ordered fallbacks list that GSD tries in sequence when the primary fails due to rate limits or exhausted credits.

The Git category exposes all git-related settings in one place:

FieldDefaultDescription
main_branchmainBranch name used for merge operations
auto_pushfalsePush commits to remote after each commit
push_branchesfalsePush milestone branches to remote
snapshotsfalseCreate WIP snapshot commits during long tasks
remoteoriginGit remote name
pre_merge_checkfalseRun checks before merging (true/false/auto)
commit_type(inferred)Default conventional-commit type (feat, fix, chore, etc.)
merge_strategy(unset)squash or merge
isolationworktreeworktree, branch, or none

pre_merge_check: "auto" lets GSD detect whether CI checks are configured and run them only when present.

The wizard configures:

  • skill_discovery (auto/suggest/off) — Controls how GSD discovers and loads skills at dispatch time. auto loads relevant skills silently; suggest proposes them for confirmation; off disables discovery entirely.
  • uat_dispatch — When true, GSD dispatches a UAT agent after each slice completes.

skill_staleness_days (skills deprioritized after this many days of disuse; defaults to 60) is not exposed in the wizard and must be set by editing the preferences file directly.

/gsd prefs status loads both global and project preference files and reports their paths, whether they exist, and skill resolution status. It shows how many skills resolved successfully vs how many are unresolved, helping diagnose skill reference issues. When the global path is a legacy file (~/.pi/agent/gsd-preferences.md), the status notes it as a legacy fallback.

/gsd prefs import-claude scans your Claude Code configuration (CLAUDE.md files, model settings) and imports relevant settings into GSD preferences. This is useful when migrating from Claude Code to GSD — it carries over model preferences and custom instructions. If no preferences file exists yet, one is created from the template before the import runs.

Preferences are stored as YAML frontmatter in a markdown file. The wizard serializes values in a consistent key order. The body content after the closing --- delimiter is preserved across saves — you can add documentation notes there without them being overwritten.

FilePurpose
~/.gsd/preferences.mdCreated from template if missing when wizard opens
.gsd/preferences.mdCreated from template if missing when project scope is selected
FilePurpose
~/.gsd/preferences.mdGlobal preferences (canonical path)
~/.gsd/PREFERENCES.mdUppercase fallback for global preferences (bootstrap artifact)
~/.pi/agent/gsd-preferences.mdLegacy global preferences (fallback)
.gsd/preferences.mdProject preferences
.gsd/PREFERENCES.mdUppercase fallback for project preferences (bootstrap artifact)
Claude Code config filesFor import-claude subcommand
FilePurpose
~/.gsd/preferences.mdUpdated global preferences
.gsd/preferences.mdUpdated project preferences

Opening the wizard:

> /gsd prefs
GSD preferences (global) — pick a category to configure.
Workflow Mode solo
Models research: claude-opus-4-6, planning: claude-sonnet-4-5
Timeouts soft: 20m, idle: 10m, hard: 30m
Git main: main, push: on
Skills discovery: auto
Budget $50 / pause
Notifications 6/6 enabled
Advanced unique IDs: off
── Save & Exit ──
❯ Budget
Budget ceiling (USD) (current: $50):
> 100
Budget enforcement (current: pause):
❯ warn
pause
halt
Context pause threshold (0-100%, 0=disabled) (current: 0):
> 80

Checking status:

> /gsd prefs status
GSD skill prefs — global present: ~/.gsd/preferences.md; project present: .gsd/preferences.md
Skills: 3 resolved, 1 unresolved
Unresolved: my-custom-skill (not found in any skill directory)

Setting project-scoped preferences:

> /gsd prefs project
● Created project GSD skill preferences at .gsd/preferences.md
GSD preferences (project) — pick a category to configure.
  • /gsd mode — Quick solo/team toggle (shortcut for the Workflow Mode category)
  • /gsd config — Configure tool API keys (separate from skill preferences)
  • /gsd doctor — Validates preference file structure
  • /gsd skill-health — Skill usage and performance metrics