Repository navigation
Choose the Harness, Model and Effort on the command line and in the User config (#392) - #402
Merged
Merged
Conversation
…ser config (#392) harness <name>, model <name> and effort <level> on a Run, an Architect run (not with --plan-only) and a Pickup run, falling back to the User config's [harness] section, then to claude with its own Model and Effort. The choice reaches every session and child Run, is checked before any work (CLI on PATH, a test call for a named Claude Model, codex not supported yet), and is recorded in the Command log, the Activity log, the PR body and the Run notification. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Read [harness.<name>] through Harness::named and Settings::of_mut, keep a User config's Model and Effort as written, move the PR body's Built with line next to the Delivery that writes it, and rewrap doc comments. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 5, 2026
Closed
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Each of the three is chosen by the command first, then the User config, then the default:
harness <name>,model <name>,effort <level>(with or without dashes) on a Run, an Architect run and a Pickup run. They are rejected with--plan-only, when repeated, or when given without a value.[harness],[harness.claude]and[harness.codex]are parsed intoharness::Settings. Unknown keys and wrong types are User config errors.Built with …line.Evidence
thirdshift <url> model opus→not a GitHub issue URL: model; every session runsclaude -p --permission-mode auto …with no--model.tests/harness_choice.rsand new tests inspec_run,pickup_run,architect_runandbase_fixpass. They cover:issue-136. The Factory skills were updated in a2afa36 without regenerating them:prompts_page_shows_what_the_binary_sends(stalesite/prompts) andloads_every_factory_skill_as_the_thirdshift_plugin(missingresolving-merge-conflicts). Neither involves this change.Merge Danger
Door: two-way
With no flag and no
[harness], sessions run exactly as before. The new visible output is:sessions run on …line in the Command log;, on claude · default model · default effortat the end of the Activity log start line;Built with …line, with a hidden marker, appended to each pull request body.Blast Radius: moderate
Anything that parses the Activity log start line, or a PR body exactly, sees the new text. A Run with a named Model makes one extra small Claude call before work.
Unaddressed findings
Standards
Choice::checkdoes I/O inside a value type (testability). It is covered end to end by the fakeclaudeon PATH, which is the seam the spec names. Injecting a runner adds a seam no test needs.Flags::harnessandStarted::built_withare middle men. They mirror the existingFlags::notificationandStarted::took, keeping one way to resolve and record an ask.claudeflags), so a shared helper would need its own mapping table.Choiceflattensmodel/effortinstead of holdingModelAndEffort;Readerkeeps them separate. Flat fields read more simply at every use (choice.model). It is cosmetic.harness: Choiceparameters lead toself.harness.harness, andbuilt_withis both a getter and a setter. The parameter name matches the domain term (the Harness choice). Renaming every site is churn without clearer meaning. I renamed the unclear localsessions_on.&Choicethrough ~12 signatures. This is explicit by design. The alternative is process-wide state, and the spec requires the choice to reach every session and child Run.--plan-onlyflag list is repeated in the message, docs and tests. That matches how the existing list was already spelled out.zip/cycle. It is a test idiom only.Spec
claudewould equally hang the session that follows.ChosenBy::Commandeven when the User config chose. It is never shown, because child Runs make no checks. It is documented at the field.harness/model/effort. Kept, so the retried Run asks for what the original asked.Closes #392
🤖 Generated with Claude Code