concierge-one-model-setup

Concierge: support one-model setup with worksgood setup --model

Metadata

Statusdone
Assignedagent-933
Modelpi:openai-codex:gpt-5.6-sol
Created2026-07-29T08:13:30.960175105+00:00
Started2026-07-29T08:13:32.102145796+00:00
Completed2026-07-29T08:54:37.198993926+00:00
Tokens17418028 in / 30990 out

Description

User contract

Make this exact attended command work on a clean host and an existing repository, with no pre-created profile:

M=pi:openrouter:deepseek/deepseek-v4-flash
worksgood setup --model "$M"

The current concierge incorrectly requires --profile to name an existing base definition and rejects a natural new name with Profile ... is unavailable. A one-model setup is the primary simple path, not an expert-profile exercise.

Semantics

  • Add --model <EXACT_ROUTE> to worksgood as the one-model shorthand, accepted by bare worksgood and worksgood setup.
  • Initial supported contract is an exact handler-first Pi route pi:<provider>:<model>. Parse/validate exactly; never reinterpret openrouter:..., infer another handler, normalize to a different model, or fall back.
  • --model M means every executable LLM role uses exact M. Worker/chat/strong roles receive reasoning high; Agency/FLIP/evaluation/weak roles receive reasoning low by explicit concierge-shorthand policy. User-provided --strong-reasoning/--weak-reasoning may override those defaults.
  • Enumerate and verify every effective role (agent, dispatcher, default, task_agent, evaluator, flip_inference, flip_comparison, assigner, evolver, verification, triage, creator, compactor, placer, chat_compactor, coordinator_eval, reviewer, merger, and future configured dispatch roles). No explicit model inherited from a base profile may remain on another route.
  • Build from the bundled clean Pi starter in memory; do not require ~/.wg/profiles/pi.toml, mutate it, or inherit drifted user overrides. Materialize a content-addressed reusable generated profile, select it for this project only, prepare the compatible Pi plugin, and reconcile the exact project daemon through existing concierge transaction/identity logic.
  • Do not write global config or ~/.wg/active-profile. Do not expose/store OpenRouter credentials; Pi remains authentication owner. If authentication cannot be proven, retain existing attended/actionable Pi-owned readiness behavior with no fallback.
  • Show one immutable redacted plan before mutation. In attended non---yes use, the plan explicitly names M for Worker/chat and Agency/FLIP/evaluation and names high/low; one confirmation commits it. The model need not be pasted twice and no extra model/profile picker appears.
  • Preserve current TTY safety. Bare non-TTY mutation refuses. --dry-run is non-mutating and should be usable for deterministic regression validation. Define and document --yes behavior consistently: it may accept the shorthand’s explicit high/low policy in an attended TTY, but never invent a model.
  • --model conflicts clearly with --without-ai, --profile, --strong-model, and --weak-model. Advanced two-model/profile flows remain unchanged.
  • Improve the unavailable-profile error: if model override flags accompany a missing --profile, explain that --profile selects an existing base and recommend worksgood setup --model <exact-pi-route>.
  • worksgood status, setup rollback, restart, and TUI retain their existing authority boundaries. wg remains the complete expert CLI.

UX examples

worksgood setup --model pi:openrouter:deepseek/deepseek-v4-flash
worksgood --model pi:openrouter:deepseek/deepseek-v4-flash   # setup/reconcile, then TUI
worksgood setup --model "$M" --strong-reasoning xhigh --weak-reasoning low
worksgood setup --model "$M" --dry-run

Validation

  • RED regression pins the reported command’s current failure/no single-model option.
  • Clean isolated HOME with zero profile files: exact command reaches one attended plan and commits a generated project profile after confirmation.
  • Stable dry-run JSON proves every effective role uses exact DeepSeek V4 Flash, strong roles are high, weak/FLIP/eval roles low, and no other provider/model appears anywhere.
  • Dry-run writes no graph/profile/history/journal/cache/plugin/service/TUI state.
  • Real PTY/installed-binary smoke confirms one paste, one confirmation, project-only association, Pi plugin readiness, and authenticated exact daemon identity; repeated invocation is idempotent.
  • Invalid route, unsupported handler, missing model, cross-plane/conflicting flags, unavailable Pi, and cancelled confirmation fail before mutation with actionable diagnostics and no fallback.
  • Existing --profile and explicit strong/weak two-model flows remain byte-for-byte compatible.
  • Help/README explain --model as the simple path and --profile as existing-profile/advanced customization.
  • cargo fmt --check, cargo clippy, focused/full tests and owned smoke pass; install both binaries from accepted source for human-flow verification, commit/push, and wg done.

Depends on

Required by

Messages 5 messages (5 unread)

  1. #1user2026-07-29T08:28:36.493535791+00:00read
    User clarified the product invariant: model route and thinking level are orthogonal. Preserve  as route-copy shorthand only;  and  must remain independently tweakable and content-addressed in service/profile identity. Ensure help/plan labels Worker/chat vs Eval/assign/FLIP clearly and tests prove changing only either reasoning value changes the generated plan/profile without changing M. Do not collapse reasoning into model identity.
  2. #2user2026-07-29T08:28:46.073365799+00:00read
    Correction to prior shell-mangled note: user clarified the product invariant: model route and thinking level are orthogonal. Preserve `--model M` as route-copy shorthand only; `--strong-reasoning` and `--weak-reasoning` must remain independently tweakable and content-addressed in service/profile identity. Ensure help/plan labels Worker/chat vs Eval/assign/FLIP clearly and tests prove changing only either reasoning value changes the generated plan/profile without changing M. Do not collapse reasoning into model identity.
  3. #3concierge-one-model-setup2026-07-29T08:44:18.478226419+00:00read
    Acknowledged — the implementation already keeps route and reasoning separate, but I will strengthen this now: add independent strong-only and weak-only content-address/fingerprint tests, and make the one-model help/plan label explicitly say Worker/chat versus Eval/assign/FLIP/weak roles without altering M.
  4. #4concierge-one-model-setup2026-07-29T08:44:23.785407430+00:00read
    Acknowledged correction — treating  strictly as route-copy shorthand; reasoning remains separate structured profile/service identity and never enters M.
  5. #5concierge-one-model-setup2026-07-29T08:44:34.332268659+00:00read
    Acknowledged correction — treating --model M strictly as route-copy shorthand; reasoning remains separate structured profile/service identity and never enters M.

Log