Configuration
Synthex reads project settings from .synthex/config.yaml. Anything you don't specify
falls back to the plugin's documented default, so the file only needs to contain the values you
actually want to override.
File location and resolution
init/synthex:init creates .synthex/config.yaml at your project root as a copy of the
plugin defaults, with inline comments documenting every section. Settings can live in four files.
They resolve in this order, with later values winning:
| Layer | Path | Scope |
|---|---|---|
| Plugin defaults | config/defaults.yaml | Shipped with Synthex |
| User | ~/.config/synthex/config.yaml | Your settings for every repo. Honors $XDG_CONFIG_HOME |
| Project (shared) | .synthex/config.yaml | The team's settings for this repo. Committed |
| Project-local | .synthex/config.local.yaml | Your settings for this one repo. Gitignored by init/synthex:init, never committed |
Within a command, per-command overrides (the review_loops: block under a specific command's
section) beat the global block, and per-invocation parameters passed to the command itself beat
everything.
For when to use each layer, with worked examples, see Workspaces & config layers.
Project settings beat user settings, matching Claude Code's settings precedence, so a repo can pin behavior for everyone who works in it. Only include the keys you want to change at each layer; the rest fall through. You can delete any section you don't want to override; missing keys and missing files do not error.
A project that still keeps settings in the old .synthex-plus/config.yaml keeps working for one
major version: it is read just below .synthex/config.yaml, with a deprecation warning when a
value only resolves there. Move those keys into .synthex/config.yaml.
init/synthex:init also writes .synthex/facts.md, a cache of detected project facts
(commit convention, test runner, frontend framework, and a spec index). Agents read it first and
fall back to detecting a fact themselves when it is missing or stale. It is gitignored, because the
recorded commit SHAs and file times differ per clone.
Keys that break the order
Two narrow groups of multi-model review keys resolve differently, because they are not the repo's call:
- User-owned:
multi_model_review.per_reviewer.*. Which external models are installed on a machine, and what they are called, depends on the machine, not the repo. Your user layer is consulted first, so a repo asking forqwen2.5-coder:32bcannot override the model you actually pulled. - Restrictive-wins:
multi_model_review.enabledand anymulti_model_review.*.enabled.falsein any hand-written layer disables it, the way Claude Code unions permission deny rules instead of replacing them. A repo cannot turn on sending your code to an external CLI after you have turned it off. Plugin defaults don't count here, so the shippedfalseis still just a default.
To turn external review off everywhere, whatever a repo asks for:
# ~/.config/synthex/config.yaml
multi_model_review:
enabled: falseUser-level config never makes Synthex treat an unrelated repo as initialized. Hooks still check
only the project's own .synthex/ files.
Global review loops
review_loops:
max_cycles: 2
min_severity_to_address: high| Key | Default | What it does |
|---|---|---|
max_cycles | 2 | Maximum review iterations before the loop exits with unresolved findings recorded |
min_severity_to_address | high | Minimum severity that blocks loop exit. Options: critical, high, medium, low |
Most commands inherit this block. Individual commands can override it under their own section
(implementation_plan.review_loops, code_review.review_loops, and so on).
Model profiles
Pick how much model each spawned agent gets, project-wide or per agent.
models:
profile: balanced # economy | balanced | premium
agents:
code-reviewer:
model: opus
effort: high| Key | Default | What it does |
|---|---|---|
profile | balanced | Active tier. balanced is each agent's shipped model and effort, unchanged |
agents.<name> | {} | Pin one agent's model and/or effort, whatever the profile |
profiles.economy | see below | Per-agent model/effort deltas applied under economy |
profiles.premium | see below | Per-agent model/effort deltas applied under premium |
hosts.<harness>.models | opencode, gemini, codex maps | Tier → host-native model name, for harnesses other than Claude Code (advisory) |
The tiers only change the agents where it matters; every other agent keeps its shipped settings under any profile:
| Profile | Changes from balanced |
|---|---|
economy | Product Manager and Architect stay on Opus but drop from high to medium effort |
balanced | None |
premium | Product Manager and Architect move to Fable at xhigh effort; Security Reviewer goes to xhigh |
Commands that spawn agents (next-priority/synthex:next-priority,
review-code/synthex:review-code, performance-audit/synthex:performance-audit,
refine-requirements/synthex:refine-requirements, write-implementation-plan/synthex:write-implementation-plan,
write-rfc/synthex:write-rfc) accept --profile economy|balanced|premium for one run.
Each agent's model and effort resolve in this order, first match wins:
- The
--profileflag models.agents.<name>- The
models.profiletier - The agent's own shipped settings
On Claude Code the result is applied to each spawned agent directly. Other harnesses treat these
keys as advisory: they apply them where the harness supports choosing a model per sub-agent, and
otherwise run every sub-agent on the session's model. models.hosts maps each tier to a
harness's own model names for that case. A running standing review pool keeps the models it
started with; a profile change reaches only newly spawned agents.
Implementation plan
Used by write-implementation-plan/synthex:write-implementation-plan.
implementation_plan:
reviewers:
- agent: architect
enabled: true
focus: "Technical architecture, feasibility, NFR coverage, missing technical tasks"
- agent: design-system-agent
enabled: true
focus: "Design tasks, UX impact, visual/interaction design clarity"
- agent: tech-lead
enabled: true
focus: "Task clarity, acceptance criteria, parallelizability, dependency accuracy"
concurrent_tasks: 3
review_loops:
max_cycles: 3| Key | Default | What it does |
|---|---|---|
reviewers | architect, design-system-agent, tech-lead | Sub-agents that review the draft plan. Add specialists or disable defaults |
concurrent_tasks | 3 | Maximum tasks the PM recommends per parallel batch in the plan output |
review_loops | max_cycles: 3 | Plans get one extra cycle by default since they ripple downstream |
To add a project-specific reviewer, append to the list:
implementation_plan:
reviewers:
- agent: compliance-reviewer
enabled: true
focus: "Regulatory compliance, audit trail requirements"To disable a default reviewer, set enabled: false on its entry.
Older configs may still list agent: designer. There is no agent by that name; Synthex reads it
as design-system-agent here and as lead-frontend-engineer in the
refine requirements roster, so existing configs keep working.
Refine requirements
Used by refine-requirements/synthex:refine-requirements.
refine_requirements:
reviewers:
- agent: product-manager
enabled: true
focus: "Requirement clarity, acceptance criteria, scope boundaries, success metrics"
- agent: tech-lead
enabled: true
focus: "Technical clarity, implicit assumptions, NFR targets, missing requirements"
- agent: lead-frontend-engineer
enabled: true
focus: "UX clarity, interaction patterns, accessibility, user flow completeness"The roster mirrors the plan reviewers but with PRD-focused prompts. The Product Manager always leads the interview; reviewers join the clarity loop afterward.
Code review
Used by review-code/synthex:review-code.
code_review:
reviewers:
- code-reviewer
- security-reviewer
max_diff_lines: 300
convention_sources:
- CLAUDE.md
- .eslintrc
- .prettierrc
spec_paths:
- docs/specs| Key | Default | What it does |
|---|---|---|
reviewers | code-reviewer, security-reviewer | Mandatory parallel reviewers; both run on every diff. An entry may also be a prompt file |
max_diff_lines | 300 | Threshold above which the reviewer warns that diff size hurts review quality |
convention_sources | CLAUDE.md, .eslintrc, .prettierrc | Files the code reviewer reads to learn project conventions |
spec_paths | docs/specs | Directories the reviewer scans for specifications to check compliance against |
spec_inline_bytes | 65536 | When specs under spec_paths total more than this, the reviewer skims the first 50 lines of each and reads only the relevant ones in full |
verification | off | prose turns on the verification pass |
engine | prose | workflow opts into the review engine on Claude Code |
refute_pass | off | on adds the review engine's adversarial refute pass |
specialists | unset | Optional extra reviewers, each an agent: with a focus: |
review_loops | inherits global | Per-command override of the global review loops |
For performance-critical code, add the optional performance-engineer reviewer:
code_review:
reviewers:
- code-reviewer
- security-reviewer
- performance-engineerSpecialist reviewers (compliance, accessibility, domain experts) attach via the specialists:
block in the same section.
Verification pass
code_review:
verification: prose # prose | offWith prose, the Code Reviewer, Security Reviewer, and Performance Engineer each check their own
top five critical and high findings before reporting them. They use a language-server tool when
the session has one, otherwise they grep for the symbol's references. Each checked finding gets a
Verification: line: CONFIRMED (lsp), CONFIRMED (grep), or PLAUSIBLE (none) when it
couldn't be checked. Verification never blocks the review.
It is off by default because it adds tool calls and changes the report. The review engine has its own, heavier check,
refute_pass, which is a separate key.
Prompt-file reviewers
Any reviewers entry can point at a markdown prompt file in your project instead of naming a
Synthex agent. A review prompt you already maintain — a CI guardian prompt, a house checklist,
a domain rule set — then runs as part of a Synthex review without being rewritten as a plugin
agent. Its findings are deduped, severity-ranked, and attributed alongside every other
reviewer's rather than landing in a section of their own.
Accepted in every reviewer block: code_review.reviewers, implementation_plan.reviewers, and
refine_requirements.reviewers. - prompt: and - agent: entries mix freely in one list.
code_review:
reviewers:
- code-reviewer
- security-reviewer
- prompt: .github/scripts/pr-guardian/prompt.md
id: pr-guardian # optional; here it would default to `pr-guardian` anyway
enabled: true # optional; defaults to true| Key | Required | What it does |
|---|---|---|
prompt | yes | Path to the prompt file, relative to the project root. Absolute paths and paths escaping the project root are rejected |
id | no | Attribution label in the report. Falls back to the frontmatter name; then, for a generic filename (prompt.md, review.md, index.md), the name of its directory; otherwise the filename without its extension |
enabled | no | false skips the reviewer, matching - agent: entries |
In blocks that support focus: (implementation_plan, refine_requirements), a focus: on a
prompt: entry is appended to the borrowed prompt the same way.
Frontmatter. The file may carry YAML frontmatter; only name is read (as the id
fallback). Every other field is ignored rather than rejected, so a prompt written for another
runner stays valid. A file with no frontmatter is fine — the whole file is the prompt.
Output contract. Synthex appends the host command's reviewer output format to the prompt. Where the borrowed prompt specifies its own output format, the appended contract wins.
Read-only by convention. Borrowed CI prompts often post comments or call gh. The appended
contract tells the reviewer to apply the review criteria but ignore any instruction to post,
write, or otherwise act. This is a convention, not a sandbox — review prompt files the way you
review any code that runs in your repo.
Failure modes degrade, never abort. A missing, unreadable, empty, absolute, or
project-escaping path skips that one reviewer with a warning; the rest of the review continues.
A prompt reviewer that returns nothing is reported as FAIL (no response), the same as a named
reviewer. A review left with no usable reviewers at all reports FAIL rather than an empty PASS.
Standing pools. When review-code/synthex:review-code routes a review to a standing review pool, the pool's report is the review and prompt-file reviewers do not run. A reviewer list made up entirely of prompt files skips pool routing.
Quality / testing
Used by test-coverage-analysis/synthex:test-coverage-analysis.
quality:
coverage_thresholds:
line: 80
branch: 70
function: 80
test_runner: vitest
priority_modules: []| Key | Default | What it does |
|---|---|---|
coverage_thresholds.line | 80 | Minimum line coverage for new code |
coverage_thresholds.branch | 70 | Minimum branch coverage for new code |
coverage_thresholds.function | 80 | Minimum function coverage for new code |
test_runner | vitest | Test runner used to produce coverage reports |
priority_modules | [] | Modules that always require thorough coverage. Empty = auto-detect by risk |
Architecture
Used by write-adr/synthex:write-adr and write-rfc/synthex:write-rfc.
architecture:
decisions_path: docs/specs/decisions
rfcs_path: docs/specs/rfcs| Key | Default | What it does |
|---|---|---|
decisions_path | docs/specs/decisions | Where Architecture Decision Records land |
rfcs_path | docs/specs/rfcs | Where RFCs land |
Design system
Used by design-system-audit/synthex:design-system-audit.
design_system:
spec_path: docs/specs/design-system.md
scan_paths:
- src/| Key | Default | What it does |
|---|---|---|
spec_path | docs/specs/design-system.md | Canonical reference for tokens, components, and patterns |
scan_paths | src/ | Directories to scan during compliance audits |
specialists | unset | Optional framework specialists, each an agent: with a focus: |
Add framework-specific specialists (Storybook expert, Figma expert) via the specialists: block.
Reliability
Used by reliability-review/synthex:reliability-review.
reliability:
slo_document: docs/specs/slos.md
runbooks_path: docs/runbooks| Key | Default | What it does |
|---|---|---|
slo_document | docs/specs/slos.md | Path to the SLO/SLI definitions document |
runbooks_path | docs/runbooks | Where operational runbooks are stored |
Performance audit
Used by performance-audit/synthex:performance-audit.
performance_audit:
review_loops:
max_cycles: 2The performance audit only carries a per-command review_loops override; everything else
inherits global defaults.
Retrospective
Used by retrospective/synthex:retrospective.
retrospective:
output_path: docs/retros
format: start-stop-continue
max_improvement_items: 3| Key | Default | What it does |
|---|---|---|
output_path | docs/retros | Where retrospective documents land |
format | start-stop-continue | Retro format. Options: start-stop-continue, 4ls, sailboat |
max_improvement_items | 3 | Cap on improvement items per cycle. More than 3 means none get done |
Next priority
Used by next-priority/synthex:next-priority.
next_priority:
concurrent_tasks: 3
execution_environment: local # local | cloud | workspace| Key | Default | What it does |
|---|---|---|
concurrent_tasks | 3 | Maximum number of tasks executed in parallel per next-priority/synthex:next-priority run |
execution_environment | local | Where parallel Tech Lead workers run: local git worktrees, cloud Cursor cloud subagents, or workspace Orca/Herdr child workspaces |
Override concurrent_tasks per invocation by passing concurrent_tasks=N to the command.
execution_environment is overridden per call by --in-cloud / --in-workspace / --local
(flag beats key beats local; --local wins any conflict, and --in-cloud with
--in-workspace is refused). cloud is Cursor-only: each worker gets its own VM and branch.
workspace runs each worker in an Orca or Herdr child workspace. When a mode isn't available,
Synthex prints a one-line notice and falls back to local worktrees. See
Cloud agents and Host workspaces.
Workflow engines
Two keys opt pieces of Synthex into Workflow scripts on Claude Code. Both ship as prose.
code_review:
engine: prose # prose | workflow
refute_pass: off # on | off
native_looping:
engine: prose # prose | workflow| Key | Default | What it does |
|---|---|---|
code_review.engine | prose | workflow runs each review-code/synthex:review-code cycle through the review engine |
code_review.refute_pass | off | on sends each critical and high finding to three independent refuters. Only read by the review engine |
native_looping.engine | prose | workflow has every --loop command get its done/continue verdict from the loop engine, with a second check on "done" |
workflow only takes effect when a Workflow tool is in the session's tool list (and, for the
loop engine, without --loop-isolated). Everywhere else, including every other harness, the
command runs prose. Headless runs need a Workflow(synthex:review-code-engine) or
Workflow(synthex:loop-engine) permission allow rule. See
Workflow engines for what each engine does and when to turn
it on.
Worktrees
Used by next-priority/synthex:next-priority for parallel task execution.
worktrees:
base_path: .claude/worktrees
branch_prefix: "feature/"| Key | Default | What it does |
|---|---|---|
base_path | .claude/worktrees | Directory where per-task worktrees are created. Add this path to .gitignore |
branch_prefix | feature/ | Prefix prepended to each task branch name |
Use an absolute path (e.g., /tmp/synthex-worktrees) if you want worktrees outside the repo.
On Claude Code, the default base_path lets Synthex use the Agent tool's built-in
isolation: "worktree". Claude Code always creates those worktrees under .claude/worktrees, so
a custom base_path switches back to Synthex's own git worktree add. branch_prefix applies
either way. Host workspaces (execution_environment: workspace) ignore base_path, because the
workspace manager decides where checkouts live.
Commit convention
Synthex agents write their own commit messages in your project's convention.
git:
commit_convention: auto # conventional | issue-key | gitmoji | plain | auto| Value | Meaning |
|---|---|
conventional | Conventional Commits (feat: …, fix(api): …) |
issue-key | Subjects start with a ticket key (PROJ-1234: … or [PROJ-1234] …) |
gitmoji | Subjects start with a gitmoji shortcode (:bug: …) |
plain | No enforced pattern |
auto | Not detected yet, or no single pattern reached a 60% majority |
init/synthex:init samples up to your last 50 commits on every run and writes the
majority pattern here, printing Detected commit convention: <value> (from <N> commits). Set it
by hand to override.
When the value is exactly conventional, a commit-lint hook checks each git commit -m subject
the agent runs (on Claude Code and Codex) and blocks one that doesn't match, with a hint so the
agent can fix it. Every other value, including auto, is never linted.
The hook also checks a message piped to git commit -F - when the message is written out in the
same command: a heredoc on the commit (git commit -F - <<'MSG'), cat <<EOF | git commit -F -,
or a single literal piped from printf or echo. It lints the first non-empty, non-comment line,
and finds the commit inside an && chain. This is how the Tech Lead, the Lead Frontend Engineer,
and next-priority/synthex:next-priority write their commits, so Synthex's own commits are now
checked too.
The hook fails open whenever it can't be sure what the message is: no Node.js, no config,
-F <file>, a message built from variables or command substitution, an unquoted heredoc that
contains $, a here-string, more than one heredoc or more than one git commit in the command,
an amend that keeps the message, or a merge in progress all pass through.
Multi-model review
The multi_model_review block turns on review by external model CLIs alongside Synthex's own
reviewers. It is off by default; configure-multi-model/synthex:configure-multi-model writes it for you.
Synthex calls each CLI with your own login; it holds no API keys. Two groups of its keys resolve
differently from everything else — see Keys that break the order.
For how the fan-out and consolidation work, see
Multi-model review.
multi_model_review:
enabled: false
reviewers: [] # e.g. codex-review-prompter, gemini-review-prompter, ollama-review-prompter
per_reviewer:
codex-review-prompter:
model: gpt-5
family: openai
allow_api_key_billing: false
per_command:
review_code:
enabled: false
write_implementation_plan:
enabled: falseTop-level keys
| Key | Default | What it does |
|---|---|---|
enabled | false | Master switch. When false, review is native-only and unchanged. Restrictive-wins |
strict_mode | false | true aborts the review on preflight failures; false degrades to whichever proposers are available |
include_native_reviewers | true | Run Synthex's own reviewers alongside the external ones. Set false only to isolate external behavior |
min_family_diversity | 2 | Fewest distinct model families (natives count as anthropic) before preflight warns |
min_proposers_to_proceed | 2 | Fewest available proposers to proceed. Below it, preflight aborts (strict) or warns (lenient) |
per_reviewer_timeout_seconds | 180 | How long to wait on one proposer. A timeout is that reviewer's error, not the whole review's |
reviewers | [] | External adapters to run, by agent name (codex-review-prompter, etc.). Empty means natives only |
per_reviewer.<adapter> | unset | Per-adapter overrides (model, family, flags), forwarded to the adapter as-is. User-owned |
sandbox_profile_path | plugins/synthex/config/sandbox.sb | macOS sandbox-exec profile used for sandbox-yolo adapters |
sandbox_bwrap_flags | --ro-bind / / --bind /tmp /tmp --proc /proc --dev /dev | Linux bwrap flags used for sandbox-yolo adapters |
Codex billing. per_reviewer.codex-review-prompter.allow_api_key_billing defaults to
false: Synthex unsets CODEX_API_KEY and OPENAI_API_KEY for Codex calls so they use your
stored codex login. Set it to true to allow per-token API-key billing.
context
The context bundle every proposer receives, assembled once per review.
| Key | Default | What it does |
|---|---|---|
context.max_bundle_bytes | 204800 | Hard cap on the bundle (200 KB). An oversized artifact asks you to narrow scope |
context.max_file_bytes | 65536 | Files over 64 KB are summarized instead of sent verbatim |
context.convention_paths | CLAUDE.md, .eslintrc, .prettierrc | Convention files included verbatim. Mirrors code_review.convention_sources |
context.spec_paths | docs/specs | Where to find specs for touched files. Mirrors code_review.spec_paths |
aggregator
| Key | Default | What it does |
|---|---|---|
aggregator.command | auto | Which model consolidates. auto picks the strongest configured family from tier_table, else the host Claude session |
aggregator.tier_table | 6 rows | Ranked {tier, family, model} rows: Claude Opus, GPT-5, Claude Sonnet, Gemini 2.5 Pro, DeepSeek V3, Qwen 32B. Override to re-rank or add families |
per_command
| Key | Default | What it does |
|---|---|---|
per_command.review_code.enabled | false | Use multi-model review in review-code/synthex:review-code |
per_command.review_code.complexity_gate.threshold_lines_changed | 50 | Smaller diffs skip multi-model review |
per_command.review_code.complexity_gate.threshold_files_touched | 3 | Diffs touching fewer files skip multi-model review |
per_command.review_code.complexity_gate.always_escalate_paths | auth, payments, billing, migrations, security, secrets, crypto globs | Diffs touching these always get multi-model review |
per_command.write_implementation_plan.enabled | false | Use multi-model review in write-implementation-plan/synthex:write-implementation-plan. No complexity gate |
Consolidation, demotion, and audit
| Key | Default | What it does |
|---|---|---|
consolidation.stage2_jaccard_threshold | 0.8 | Lexical similarity at which two findings merge |
consolidation.stage3_embedding_threshold | 0.85 | Embedding-based merge threshold. Not active yet |
consolidation.stage4.max_calls_per_consolidation | 25 | Cap on LLM tiebreaker calls per consolidation |
minority_of_one.enabled | true | Demote a finding only one reviewer raised |
minority_of_one.skip_categories | ["security"] | Categories never demoted |
audit.enabled | true | Write an audit file for every multi-model review |
audit.output_path | docs/reviews/ | Where audit files go |
audit.raw_output_path | docs/reviews/raw/ | Where each adapter's raw output goes |
audit.record_finding_attribution_telemetry | true | Record who raised each finding and how many agreed |
external_permission_mode
How much each external CLI may do. read-only runs the CLI in its read-only or sandbox mode.
parent-mediated proxies its tool approvals back to your session. sandbox-yolo gives it full
permissions inside an OS sandbox and asks you to confirm at spawn.
| Key | Default | Notes |
|---|---|---|
default | read-only | Applies to any CLI not listed |
codex | parent-mediated | Runs as codex exec --sandbox read-only with one warning for now |
claude | parent-mediated | Approval proxying over --output-format stream-json |
gemini | read-only | |
bedrock | read-only | No tool-use surface |
llm | read-only | No tool-use surface |
ollama | read-only | No tool-use surface |
Any other key in this block is ignored. Adapter binary names are fixed in each adapter, never read from config.
Standing pools
The standing_pools block controls standing review pools: long-lived reviewer teams that
review-code/synthex:review-code and performance-audit/synthex:performance-audit route to when one is running. It is off by default; configure-teams/synthex:configure-teams writes it for you. Pools need Claude Code's Agent Teams tools. See Standing pools.
| Key | Default | What it does |
|---|---|---|
enabled | false | Turn on pool routing. Pool commands work either way |
ttl_minutes | 60 | Idle minutes before a pool may be reaped, checked lazily at the next discovery. 0 disables TTL |
default_name | review-pool | Pool name when start-review-team/synthex:start-review-team gets no --name |
default_reviewers | code-reviewer, security-reviewer | Pool roster when no reviewers are given; matches code_review.reviewers |
default_multi_model | false | Start pools with multi-model review on |
storage_root | ~/.claude/teams/standing | Where pools live. Not user-configurable |
tasks_root | ~/.claude/tasks/standing | Where pool tasks live. Not user-configurable |
routing_mode | prefer-with-fallback | prefer-with-fallback falls back to fresh reviewers; explicit-pool-required aborts with no pool |
matching_mode | covers | covers: pool roster is a superset of the needed reviewers; exact: identical |
Standing-pool settings used to live in synthex-plus's .synthex-plus/config.yaml. Since Synthex
2.0 they belong in .synthex/config.yaml; the legacy file is still read for one major version,
with a deprecation warning when a value only resolves there.
configure-teams/synthex:configure-teams writes only .synthex/config.yaml.
Lifecycle
lifecycle:
submission_timeout_seconds: 300| Key | Default | What it does |
|---|---|---|
submission_timeout_seconds | 300 | How long a command waits on a pool's result before timing out and falling back |
This is a top-level block, not nested under standing_pools, because it governs the submitting
command, not the pool.
Hooks
The TaskCompleted and TeammateIdle hooks only act when standing_pools.enabled is true;
otherwise they do nothing.
| Key | Default | What it does |
|---|---|---|
hooks.task_completed.review_gate.enabled | true | Require the right reviewers to see a teammate's completed task |
hooks.task_completed.review_gate.reviewers | code / frontend / infrastructure table | Illustrative only; the hook script holds the real table |
hooks.teammate_idle.work_assignment.enabled | true | Point an idle teammate at an unblocked task |
hooks.teammate_idle.work_assignment.allow_cross_functional | false | Let idle teammates take tasks outside their role |
See Hooks for every hook Synthex installs.
Document paths
Default locations for project documents. Commands consult these unless overridden by their own parameters.
documents:
requirements: docs/reqs/main.md
implementation_plan: docs/plans/main.md
specs: docs/specs
decisions: docs/specs/decisions
rfcs: docs/specs/rfcs
runbooks: docs/runbooks
retros: docs/retrosMost commands accept an explicit path parameter, so changing these is rarely necessary.
A minimal override file
If your project follows the defaults closely, your .synthex/config.yaml can be very short:
next_priority:
concurrent_tasks: 6
code_review:
reviewers:
- code-reviewer
- security-reviewer
- performance-engineerEverything else inherits from the plugin defaults. init/synthex:init will scaffold a fully-commented file when you want every setting visible at once.
Next
- The lifecycle — how each command fits into the five-phase loop
- Parallel execution — how
concurrent_tasksand worktree settings interact - Workspaces & config layers — when to use each config layer
- Getting started — install Synthex and run your first command