Skip to content

Claude Code

Claude Code has the richest configuration surface of any supported tool. It supports all 8 entity types and all scope tiers (enterprise, project, and user) — the only exception is local settings files, which are intentionally excluded from dotai management.

  • Conditional rules with intelligent selection
  • Skills (all 11 frontmatter fields)
  • Sub-agents (all 14+ frontmatter fields)
  • MCP servers (with headers and OAuth support)
  • Lifecycle hooks (17 of 20 events, with command/prompt/agent types)
  • Per-tool permissions with allow, deny, and ask decisions
  • Enterprise, project, and user scope
dotai sourceGenerated file
Rules (alwaysApply: true, project scope)CLAUDE.md
Rules (local scope)CLAUDE.local.md
Rules (alwaysApply: false or appliesTo set).claude/rules/*.md
Rules with outputDir<outputDir>/CLAUDE.md, <outputDir>/.claude/rules/*.md
Skills.claude/skills/<name>/SKILL.md
Agents.claude/agents/*.md
Servers.mcp.json
Hooks.claude/settings.json (hooks)
Permissions.claude/settings.json (permissions)
Ignore patterns.claude/settings.json (deny rules)

Rule output depends on scope and activation mode:

  • Project scope + alwaysApply: true — concatenated into CLAUDE.md at the project root (or <outputDir>/CLAUDE.md if outputDir is set).
  • Local scope — concatenated into CLAUDE.local.md (not checked into version control).
  • Project scope + appliesTo globs — written as individual .claude/rules/<name>.md files with a YAML frontmatter block containing paths: for intelligent selection.
  • Project scope + alwaysApply: false (no appliesTo) — written to .claude/rules/ but loads unconditionally (a warning is emitted since this has no effect vs alwaysApply: true).

The override field only affects Codex output (emitting to AGENTS.override.md); it has no effect on Claude Code.

Each agent is written as a markdown file under .claude/agents/<name>.md with YAML frontmatter. Claude Code supports all agent frontmatter fields:

Frontmatter fieldSource fieldNotes
namenameAgent identifier
descriptiondescriptionWhen to delegate to this agent
modelmodelTranslated via alias map (e.g. claude-sonnet-4-6sonnet)
modelReasoningEffortmodelReasoningEffortlow, medium, or high
toolstoolsComma-separated list of allowed tool names
disallowedToolsdisallowedTools or readonlyreadonly: true maps to Write, Edit, NotebookEdit
permissionModepermissionModedefault, acceptEdits, dontAsk, bypassPermissions, plan
maxTurnsmaxTurnsMaximum agentic turns
skillsskillsComma-separated list of skill names
memorymemoryuser, project, or local
backgroundbackgroundtrue to run in background
isolationisolationworktree for isolated git worktree
hookshooksSerialized as nested YAML in frontmatter
mcpServersmcpServersSerialized as nested YAML in frontmatter

The model field uses an alias map: claude-sonnet-4-6 and claude-sonnet-4-5 become sonnet, claude-opus-4-6 and claude-opus-4-5 become opus, claude-haiku-4-5 variants become haiku.

Each skill is written to .claude/skills/<name>/SKILL.md with frontmatter. Claude Code supports all skill frontmatter fields:

Frontmatter fieldSource fieldNotes
namenameSkill identifier (used for /skill-name invocation)
descriptiondescriptionWhen to auto-invoke this skill
disable-model-invocationdisableAutoInvocationtrue to prevent automatic invocation
argument-hintargumentHintHint shown in slash command menu (e.g. <file-path>)
user-invocableuserInvocablefalse to hide from user-facing slash commands
allowed-toolsallowedToolsComma-separated list (e.g. Read, Grep, Glob)
modelmodelModel override for skill execution
contextcontextfork to run in isolated context
agentagentAgent to delegate to when invoked
hookshooksSerialized as nested YAML in frontmatter

Note that allowed-tools uses comma-separated format, not array bracket syntax.

MCP servers are written to .mcp.json under the mcpServers key. Each entry is keyed by server name:

  • stdio transportcommand, args, and env fields.
  • http transporttype: "http", url, and optionally headers and oauth fields.
  • sse transporttype: "sse", url, headers, oauth. A deprecation warning is emitted recommending migration to HTTP (Streamable HTTP).
{
"mcpServers": {
"my-api": {
"type": "http",
"url": "https://api.example.com/mcp",
"headers": {
"Authorization": "Bearer ${API_TOKEN}"
},
"oauth": {
"clientId": "my-app",
"callbackPort": 8080
}
}
}
}

Claude Code supports 17 of the 20 lifecycle events. Events are translated from dotai’s camelCase to Claude Code’s PascalCase names:

dotai eventClaude Code event
preToolUsePreToolUse
postToolUsePostToolUse
sessionStartSessionStart
sessionEndSessionEnd
userPromptSubmittedUserPromptSubmit
agentStopStop
subagentStopSubagentStop
permissionRequestPermissionRequest
postToolUseFailurePostToolUseFailure
notificationNotification
subagentStartSubagentStart
teammateIdleTeammateIdle
taskCompletedTaskCompleted
configChangeConfigChange
worktreeCreateWorktreeCreate
worktreeRemoveWorktreeRemove
preCompactPreCompact

Events not supported by Claude Code: preFileEdit, postFileEdit, errorOccurred.

Hooks are written to .claude/settings.json under the hooks key. Claude Code supports all three hook types (command, prompt, agent) and all optional fields (timeout, statusMessage, once, async, model).

{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "prompt",
"prompt": "Review this command for safety.",
"model": "haiku",
"timeout": 10000
}
]
}
]
}
}

Permissions are written to .claude/settings.json under the permissions key. Rules can be scoped per tool and include argument pattern matching. Each rule carries an allow, deny, or ask decision. Ignore patterns are expressed as deny rules on the Read and Edit tools with glob path matchers.