v0.25.3 - Provider-neutral model profile routing
v0.25.3 is a patch release that makes role and team-member model
routing portable across harnesses. Concrete provider/model descriptions
remain timestamped Artifact(kind=model-spec) deliverables, while
roles, actors, team members, and default assignments now bind to
provider-neutral Artifact(kind=model-profile) artifacts.
Added
- Added provider-neutral model-profile artifacts. processkit now
ships nineArtifact(kind=model-profile)deliverables covering
general, coding, research, writing, and governed routing profiles.
Model-profile filenames deliberately avoid provider and model names;
their content carries ranked candidateArtifact(kind=model-spec)
references. - Added model-profile schema support. Artifact schemas now recognize
model-profile, binding schemas allow model-assignment targets to be
eitherModelProfileorModelSpecartifacts, and role schemas expose
default_model_profilewhile keeping legacydefault_model
compatibility. - Added a model-profile migration helper.
migrate_model_profiles.pycreates the shipped profile artifacts and
rewrites role/team-member model-assignment bindings from concrete
model specs to profile targets. - Added runtime provider access gates to the resolver. The resolver
now expands model profiles into concrete model candidates only after
applying runtime access constraints from user config,aibox.toml
model providers, and native harnesses such as Codex, Claude, Gemini,
Aider, Continue, Cursor, OpenCode, and Hermes. - Added
available_providersto model-recommender configuration.
MCP callers can declare which providers are callable in the current
environment without hard-coding a provider into role or team-member
bindings. - Added pk-doctor checks for routing portability.
pk-doctornow
flags provider/model names in model-profile filenames, missing profile
candidate model specs, and Role/TeamMember bindings that directly pin a
ModelSpec withoutconditions.direct_model_pin: true.
Changed
- Role and team-member bindings now target model profiles. Shipped
default bindings, including Cora's default, no longer point directly to
OpenAI, Anthropic, Google, or other concrete model artifacts. - Concrete model specs remain provider/model named. The release keeps
the v0.25.2 decision thatModelSpecartifacts map directly to
provider/model families and therefore may include provider/model names
in their filenames. - Default binding documentation now describes two layers.
Role/team-member defaults bind to profile artifacts; model profiles
list provider-specific model-spec candidates; project overrides may
still use direct ModelSpec pins when intentional. - The release deliverable boundary accepts model-profile artifacts.
scripts/check-src-context-drift.sh --release-deliverablenow permits
timestampedModelProfileartifacts insrc/context/artifacts/. - Team and model-recommender docs now define harness portability.
The docs make aibox responsible for surfacing runtime provider access,
while processkit owns provider-neutral defaults and local fallback
checks.
Removed
- Removed dogfood-specific provider bias/veto bindings from the
deliverable. The old processkit-local Codex/OpenAI preference and
Anthropic veto bindings no longer ship to derived projects.
Fixed
- Fixed Cora and role defaults under non-Codex harnesses. Changing
aibox.tomlfrom Codex to Claude, Gemini, OpenCode, Hermes, or another
supported harness no longer leaves role/team-member defaults bound to a
provider the harness cannot call. - Fixed pk-doctor's blind spot around direct model pins. The doctor
now distinguishes portable Role/TeamMember profile bindings from
explicit direct model pins. - Fixed resolver explanations for profile-expanded candidates.
Resolved candidates now carryprofile_idandprofile_rank, making
it visible which neutral profile produced the concrete model choice.
Verification
pk-doctor --no-logpassed with0 ERROR / 0 WARN.scripts/check-src-context-drift.sh --release-deliverablepassed.release_audit.py --tree=src-contextpassed with0 ERROR / 0 WARN.35 passedfor resolver and default-binding coverage tests.21 passedfor model-recommender MCP filter tests.20 passedfor model migration tests.26 passedfor release-audit tests.uv run scripts/smoke-test-servers.pypassed across the MCP smoke
suite.