version: 3
project_roots:
  - ~/.plastic/projects
stale_threshold_days: 3
execution_mode: subagent-driven
hash_length: 6
hash_algorithm: sha256-base36
max_slug_words: 5
agent:
  type: claude-code
  # read-config falls back to linear when this key is absent
  parallel_mode: agent-teams
architect:
  style:

# Per-agent model override (intent 116), harness-scoped. Uncomment and set to
# a Claude Code alias (opus, sonnet, haiku) to override the shipped tier for
# one agent on one harness. The legacy flat form (agents.models.<name>: value,
# no harness nesting) still works and is read as the claude harness; nested
# wins over flat for the same agent. A model named under claude is never read
# for codex, and vice versa, so a literal model id can never leak into the
# wrong harness's config. With no entry, the shipped default applies and never
# resolves to Fable; naming Fable here is an explicit, sanctioned override,
# honored as written.
# agents:
#   models:
#     claude:
#       plastic-executor: sonnet
#       plastic-enforcer: opus
#     codex:
#       plastic-executor: gpt-5.6-terra

# The advisor (intent 185): two consultation agents, plastic-advisor (the real
# advisor, expensive, model fable by default) and plastic-faux-advisor (the
# cheaper imitation, model opus by default, carrying the same reasoning
# discipline inline). advisor.enabled defaults to enabled; missing or
# unreadable counts as enabled (fail-open). The claude.default value is an
# AGENT NAME, never a model name, so it can point at
# a locally registered agent instead. Set at install time via --no-advisor /
# --advisor, or uncomment here directly. Each agent's actual model is a plain
# agents.models.claude.<name> override, same mechanism as any other agent.
# advisor:
#   enabled: false               # skip installing both advisor agents and the
#                                 # agent-advisor skill entirely
#   claude:
#     default: plastic-advisor         # which agent the advisor skill routes to
