Skip to content

Configuration

Exarchos configuration spans project settings, plugin settings, lifecycle hooks, MCP server registration, and optional integrations.

Project configuration (.exarchos.yml)

Drop a .exarchos.yml (or .exarchos.yaml) file in your repository root to customize Exarchos behavior per project. All fields are optional. Unspecified fields use built-in defaults. See the Project Configuration guide for usage examples.

Schema reference

review

FieldTypeDefaultDescription
dimensionsRecord<D1-D5, severity>All blockingDimension-level severity: blocking, warning, or disabled
dimensions.<D>string | objectblockingShorthand "warning" or longform { severity: "warning", enabled: true }
gatesRecord<string, GateConfig>{}Per-gate overrides (take precedence over dimension)
gates.<name>.enabledbooleantrueEnable or disable the gate
gates.<name>.blockingbooleanInherits dimensionOverride whether gate blocks the workflow
gates.<name>.paramsobject{}Gate-specific parameters (e.g., coverage-threshold)
routing.coderabbit-thresholdnumber0.4Risk score threshold for CodeRabbit routing (0.0-1.0)
routing.risk-weightsobjectSee belowSix risk factors, must sum to 1.0

Default risk weights: security-path: 0.30, api-surface: 0.20, diff-complexity: 0.15, new-files: 0.10, infra-config: 0.15, cross-module: 0.10.

vcs

FieldTypeDefaultDescription
providerstringgithubVCS platform: github, gitlab, or azure-devops
settingsobject{}Provider-specific settings
settings.auto-merge-strategystringsquashGitHub: squash, merge, or rebase

workflow

FieldTypeDefaultDescription
skip-phasesstring[][]Phase names to skip (cannot skip initial or final phases)
max-fix-cyclesinteger3Max fix cycles before circuit breaker (1-10)
phases.<name>.human-checkpointbooleanvariesRequire human approval at this phase

tools

FieldTypeDefaultDescription
default-branchstringauto-detectPR base branch
commit-stylestringconventionalconventional or freeform
pr-templatestring(none)Path to PR template (relative to repo root)
auto-mergebooleantrueAuto-merge after CI passes
pr-strategystringgithub-nativegithub-native (stacked) or single

hooks

FieldTypeDefaultDescription
on.<event-type>HookAction[]{}Shell commands to run when an event fires
on.<event-type>[].commandstring(required)Shell command (receives event JSON on stdin)
on.<event-type>[].timeoutinteger30000Timeout in ms (1000-300000)

Hooks are fire-and-forget. Failures are logged but never block the workflow. Set EXARCHOS_SKIP_HOOKS=true to disable all hooks.

plugins

FieldTypeDefaultDescription
plugins.axiom.enabledbooleantrueEnable axiom quality checks during review
plugins.impeccable.enabledbooleantrueEnable impeccable design checks during review

Both plugins are enabled by default when installed. Setting enabled: false disables a plugin for the project even if it's installed. See the Companion Plugins guide for details.

Minimal example

yaml
review:
  dimensions:
    D3: warning
vcs:
  provider: github
tools:
  auto-merge: false

Full example

yaml
review:
  dimensions:
    D1: blocking
    D3: warning
    D5: disabled
  gates:
    tdd-compliance:
      blocking: false
      params:
        coverage-threshold: 80
    security-scan:
      enabled: true
      blocking: true
  routing:
    coderabbit-threshold: 0.6
vcs:
  provider: github
  settings:
    auto-merge-strategy: squash
workflow:
  skip-phases: [plan-review]
  max-fix-cycles: 2
tools:
  default-branch: main
  commit-style: conventional
  auto-merge: true
  pr-strategy: github-native
hooks:
  on:
    workflow.transition:
      - command: 'echo "$EXARCHOS_PHASE" | slack-notify'
        timeout: 10000
plugins:
  axiom:
    enabled: true
  impeccable:
    enabled: false

Plugin settings

settings.json defines tool permissions and model selection:

json
{
  "permissions": {
    "allow": [
      "Read", "Write", "Edit", "Glob", "Grep",
      "Task", "mcp__*",
      "Bash(git:*)", "Bash(npm:*)", "Bash(gh:*)",
      "Bash(node:*)", "Bash(ls:*)", "Bash(rm:*)"
    ]
  },
  "model": "claude-opus-4-6"
}

The permissions array controls which tools and bash commands the agent can use without user approval. Patterns like mcp__* allow all MCP server tools. Bash permissions use Bash(command:*) syntax.

Lifecycle hooks

Eight hooks in hooks/hooks.json integrate with Claude Code's lifecycle:

HookTriggerTimeoutPurpose
PreCompactauto30sCheckpoint workflow before context compaction
SessionStartstartup, resume10sCheck for active workflows to resume
PreToolUseexarchos MCP tools5sGuard invalid tool operations
TaskCompletedtask completion120sRun convergence gates on completed tasks
TeammateIdleteammate idle120sVerify teammate work quality
SubagentStartsubagent spawn5sInject context into subagents
SubagentStopimplementer/fixer stop10sClean up after subagent termination
SessionEndauto30sSession cleanup

Hooks execute as CLI commands against the bundled dist/exarchos.js binary. Each hook receives context through environment variables and stdin.

Hook details

PreCompact saves workflow state before Claude Code compacts the conversation. This ensures no progress is lost when context is reduced.

SessionStart runs on every session start and resume. It discovers active workflows and injects context so the agent can continue where it left off.

PreToolUse acts as a guard on Exarchos MCP tool calls. It can reject operations that would violate workflow constraints (e.g., skipping phases).

TaskCompleted and TeammateIdle run convergence gates when tasks finish or teammates go idle. The 120-second timeout accommodates script execution.

SubagentStart injects workflow context into newly spawned implementer, fixer, or reviewer agents.

SubagentStop matches the exarchos-implementer and exarchos-fixer agent names. Handles cleanup when subagents terminate.

Plugin manifest

.claude-plugin/plugin.json (or manifest.json at project root) registers the plugin with Claude Code:

json
{
  "name": "exarchos",
  "version": "2.5.0",
  "agents": [
    "./agents/implementer.md",
    "./agents/fixer.md",
    "./agents/reviewer.md"
  ],
  "commands": "./commands/",
  "skills": "./skills/",
  "mcpServers": {
    "exarchos": {
      "type": "stdio",
      "command": "node",
      "args": ["${CLAUDE_PLUGIN_ROOT}/dist/exarchos.js", "mcp"],
      "env": {
        "WORKFLOW_STATE_DIR": "~/.claude/workflow-state",
        "EXARCHOS_PLUGIN_ROOT": "${CLAUDE_PLUGIN_ROOT}"
      }
    }
  }
}

The MCP server runs as a stdio subprocess. CLAUDE_PLUGIN_ROOT is set by Claude Code to the plugin installation directory. WORKFLOW_STATE_DIR in plugin.json sets the Claude Code-specific path (~/.claude/workflow-state); the universal default for standalone use is ~/.exarchos/state.

Integrations

Optional integrations are available through the dev companion:

IntegrationPurpose
SerenaSemantic code analysis: symbol navigation, reference finding, cross-file understanding
Context7Up-to-date library documentation lookup
Microsoft LearnAzure and .NET documentation access

These integrations run as separate MCP servers and are not required for core Exarchos functionality. They provide additional context when available.

Environment variables

VariableDefaultDescription
WORKFLOW_STATE_DIR~/.claude/workflow-stateDirectory for workflow state files. Resolution cascade: env var → Claude Code plugin detection → ~/.exarchos/state
EXARCHOS_TEAMS_DIR~/.exarchos/teamsDirectory for team configuration. Default: ~/.exarchos/teams (or ~/.claude/teams when running as Claude Code plugin)
EXARCHOS_TASKS_DIR~/.exarchos/tasksDirectory for task state. Default: ~/.exarchos/tasks (or ~/.claude/tasks when running as Claude Code plugin)
EXARCHOS_PLUGIN_ROOTSet by Claude CodePlugin installation root
EXARCHOS_PROJECT_ROOT(unset)Override project root for .exarchos.yml discovery
EXARCHOS_SKIP_HOOKS(unset)Set to true to disable all config hooks
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE(unset)Autocompact threshold percentage

Released under the Apache-2.0 License.