Skip to content

Configuration Reference

This page documents the current implemented schema from src/core/schema/canonical.ts.

It does not describe the future package-first v4 model. For that direction, see Profile Packages.

The current canonical profile must use version 3:

agentstack.yaml
version: 3
profile:
name: mobile-default
description: Shared mobile engineering setup
tags:
- mobile
- react-native
created_at: 2026-03-08T00:00:00.000Z
providers:
codex:
enabled: true
claude:
enabled: true
opencode:
enabled: true
gemini:
enabled: false
instructions:
global: |
Keep responses concise.
project_overrides:
- ./AGENTS.md
- ./docs/team-rules.md
mcp_servers:
- id: github
transport: stdio
command: npx
args:
- -y
- '@modelcontextprotocol/server-github'
env_refs:
- GITHUB_TOKEN
enabled: true
- id: docs
transport: http
url: https://mcp.example.com
args: []
env_refs: []
enabled: false
skills:
- id: core-review
source: local
path: ./skills/core-review.md
enabled: true
- id: security-rules
source: remote
path: https://raw.githubusercontent.com/acme/agentstack-skills/main/security.md
enabled: true
permissions:
command_policy: on-request
provider_overrides:
codex:
model: gpt-5
gemini:
include_directories:
- apps/mobile
FieldTypeRequiredNotes
version3YesCurrent canonical version
profileobjectYesContains the full profile body
FieldTypeRequiredDefaultNotes
namestringYesHuman-readable profile name
descriptionstringNoOptional description
tagsstring[]NoOptional labels
created_atISO datetime stringNoOptional creation timestamp
providersrecordNo{}Enabled providers + provider-local metadata
instructionsobjectNoempty objectGlobal instruction fields
mcp_serversarrayNo[]MCP server definitions
skillsarrayNo[]Skill references
permissionsobjectNo{ command_policy: on-request }Shared execution policy
provider_overridesrecordNo{}Provider-specific passthrough values

providers is a record keyed by provider id.

Each provider entry must support at least:

FieldTypeRequiredDefault
enabledbooleanNotrue

The schema is intentionally permissive here. Extra provider-specific values may be preserved in the provider record or under provider_overrides depending on the import/materialization path.

FieldTypeRequiredDefaultNotes
globalstringNo""Main global instruction text
project_overridesstring[]No[]Extra project-specific instruction references

Each entry has this shape:

FieldTypeRequiredDefaultNotes
idstringYesStable MCP identifier
transportstdio | httpNostdioMCP transport type
commandstringNoUsed for stdio servers
argsstring[]No[]Command arguments
urlstringNoUsed for http servers
env_refsstring[]No[]Names of env vars required by the MCP
enabledbooleanNotrueEnable/disable this MCP

Important:

  • current schema uses env_refs, not inline env objects
  • current schema uses an array of MCP objects, not a keyed map by server name

Each skill entry has this shape:

FieldTypeRequiredDefaultNotes
idstringYesStable skill id
sourcelocal | remoteNolocalWhere the skill content comes from
pathstringYesLocal path or remote URL
enabledbooleanNotrueEnable/disable the skill

Important:

  • current schema uses id, not name
  • current schema uses path, not an arbitrary source string containing the whole URL/path payload
FieldTypeRequiredDefaultNotes
command_policystringNoon-requestShared command approval policy

The schema currently treats command_policy as a string. Providers may materialize it exactly, approximately, or not at all.

provider_overrides is a free-form record for provider-specific passthrough values.

Use it when:

  • a provider supports native settings that the shared schema does not model yet
  • imports need to preserve extra fields without losing them
  • materializers need native-only configuration fragments

Examples already used in the codebase include:

  • Codex model and personality fields
  • Gemini include-directories and security fields
  • raw imported provider settings preserved for round-tripping

The current implemented v3 schema does not contain these top-level fields:

  • top-level sync
  • top-level skills
  • top-level mcp_servers
  • top-level providers
  • top-level agents

Those may appear in future package-first work, but they are not part of the implemented schema today.