Goal
Ship should support selecting different models for different Phases of a Run.
The blog post calls out selecting different models for different phases. Today Ship has a single model setting, and that same model is passed to every Agent invocation.
Why
Implement, Review, and Final have different cost and quality tradeoffs.
Examples:
- Implement might use a strong coding model.
- Review might use a stronger reasoning model.
- Final might use a slower or more careful model for integration review and PR creation.
- Some users may want cheaper models for low-risk tickets and stronger models for Final.
Initial scope
Allow model selection at Phase granularity:
- Implement model
- Review model
- Final model
The current global model setting should probably remain as a default or fallback.
Questions to answer during planning
- What config shape is easiest to understand?
- How should flags override phase-specific YAML config?
- Should
--model continue to set all Phases for a single invocation?
- Should there be flags like
--implement-model, --review-model, and --final-model?
- How should this interact with different Agent kinds, since model names are provider-specific?
Possible implementation direction
Add config like:
model: "" # default for all phases when phase-specific model is absent
models:
implement: ""
review: ""
final: ""
Then resolve the model in runPhase based on the Phase name.
Acceptance sketch
- A user can configure a different model for Implement, Review, and Final.
- The existing
model config keeps working as a fallback.
- CLI flags can override the config in a predictable way.
- Tests verify each Agent request receives the expected model for each Phase.
Goal
Ship should support selecting different models for different Phases of a Run.
The blog post calls out selecting different models for different phases. Today Ship has a single
modelsetting, and that same model is passed to every Agent invocation.Why
Implement, Review, and Final have different cost and quality tradeoffs.
Examples:
Initial scope
Allow model selection at Phase granularity:
The current global
modelsetting should probably remain as a default or fallback.Questions to answer during planning
--modelcontinue to set all Phases for a single invocation?--implement-model,--review-model, and--final-model?Possible implementation direction
Add config like:
Then resolve the model in
runPhasebased on the Phase name.Acceptance sketch
modelconfig keeps working as a fallback.