Override One Line

Layered, shareable model config

Model Routing & Provider Configuration

Routing every role to a model was solved — sharing it safely wasn't

Amplifier already routes each semantic role to a model through curated matrices. The missing piece: sharing that config with a team without leaking API keys.

First, the proof that the routing is real.

balanced.yaml maps 13 semantic roles to ranked provider/model candidates

A curated matrix ranks candidates per role. Its ordering rule: Anthropic candidates come above OpenAI candidates in every multi-provider role, reflecting current quality leadership in coding and critique workloads.

Routing is real and curated. So what was rigid?

general fast coding ui-coding security-audit reasoning critique creative writing research vision image-gen critical-ops

You couldn't share routing with a team while keeping credentials personal

Nor could you change a single value without duplicating the whole config block. The specification says it plainly: without deep merge, PROJECT must duplicate all base values.

The release exists to remove exactly this rigidity.

Share vs. secret — no clean way to commit routing yet keep API keys off git
One field — changing one model meant re-declaring the entire block

amplifier-config resolves settings across three scopes: USER, PROJECT, LOCAL

It's Microsoft's reference config library (source repo colombod/amplifier-config, a fork of microsoft/amplifier-config). A Scope enum defines USER='user', PROJECT='project', LOCAL='local'.

Each scope carries a distinct responsibility.

3
resolution scopes
v0.1.0
alpha, MIT, Python ≥3.11
41
test functions

The three scopes split responsibility so config is shareable yet keys stay personal

PROJECT is committed to git for the team; LOCAL is gitignored for credentials; USER holds personal global defaults. The .gitignore excludes .env, *.local, *.local.*, *.user.

Now: how does overriding avoid duplication?

LOCAL — highest precedence
settings.local.yaml — developer-specific overrides (gitignored)
PROJECT — middle precedence
settings.yaml — team-shared settings (committed to git)
USER — lowest precedence
~/.amplifier/settings.yaml — user-global defaults

Deep merge lets the higher scope win only where it sets a value

It recurses on nested dicts and lets the overlay replace non-dict values, preserving everything below untouched. Merge order is USER < PROJECT < LOCAL — later overrides earlier.

This is what makes the one-line override possible.

# deep_merge docstring example deep_merge( {'a':1, 'b':{'c':2, 'd':3}}, {'b':{'c':20}, 'e':5} ) # => {'a':1, 'b':{'c':20, 'd':3}, 'e':5} # c overridden, d preserved

PROJECT changes just the anthropic model — temperature and max_tokens survive

USER defines the base; PROJECT overrides only providers.anthropic.model from claude-sonnet-4-5 to claude-opus-4-1. Deep merge keeps temperature and max_tokens, and keys stay in gitignored LOCAL.

One field shared. Credentials never leave your machine.

# USER settings.yaml providers: anthropic: model: claude-sonnet-4-5 temperature: 0.5 max_tokens: 100000 # PROJECT settings.yaml — override just the model providers: anthropic: model: claude-opus-4-1 # temperature & max_tokens preserved via deep merge

Configure once, share via git, keep secrets local — and scale across provider instances

The routing-matrix bundle now supports multi-instance providers: the Ollama matrix runs two instances, ollama (local) plus ollama-cloud, routing heavy roles to gpt-oss:120b on cloud with local fallbacks.

Layered config plus multi-instance routing — shareable and personal at once.

Configure once — USER holds personal global defaults
Share via git — PROJECT committed for the team
Keep secrets local — LOCAL + .env gitignored
Scale out — ollama + ollama-cloud multi-instance
Sources

Research Methodology

Feature status: amplifier-config v0.1.0 · Development Status 3 — Alpha

Repos: colombod/amplifier-config (fork of microsoft/amplifier-config), microsoft/amplifier-app-cli, ramparte/amplifier-bundle-routing-matrix.

Commands run:

Primary contributors: Brian Krabach (10 commits), Bryce Cutt (1 commit).

Gaps: The pre-change "one instance per provider" limit is inferred (multi-instance is verified as now-supported; no explicit source states the prior limit). Model names in SPECIFICATION.md are documentation examples, not runtime defaults — matrices use class-scoped globs (e.g. claude-sonnet-*). No single release artifact bundles these changes; claims span three repos.

More Amplifier Stories