diff --git a/.gitignore b/.gitignore index ee8ab5a..55db3f4 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,9 @@ tmp/ temp/ *.tmp +# Git worktrees +.worktrees/ + # Package manager lock files (keep package-lock.json for npm ci in CI/CD) # package-lock.json - DO NOT IGNORE (needed for npm ci) yarn.lock diff --git a/packages/autonav/src/adapter/navigator-adapter.ts b/packages/autonav/src/adapter/navigator-adapter.ts index eb16366..10621f0 100644 --- a/packages/autonav/src/adapter/navigator-adapter.ts +++ b/packages/autonav/src/adapter/navigator-adapter.ts @@ -69,7 +69,8 @@ async function initializeLangSmith(): Promise { */ export interface NavigatorAdapterOptions { /** - * Claude model to use (defaults to claude-sonnet-4-5) + * Model to use. When omitted, each harness uses its own default + * (claude-sonnet-4-5 for ClaudeCodeHarness; user's configured default for ChibiHarness). */ model?: string; diff --git a/packages/autonav/src/harness/chibi-harness.ts b/packages/autonav/src/harness/chibi-harness.ts index 8bb09d5..e3b2433 100644 --- a/packages/autonav/src/harness/chibi-harness.ts +++ b/packages/autonav/src/harness/chibi-harness.ts @@ -51,6 +51,10 @@ interface ChibiToolServer { * * When destroyAfterSecondsInactive is set, it is passed in `flags` so chibi * registers the TTL on the context entry at touch time. + * + * When `model` is provided it is passed via `config.model` so chibi uses + * that model for the invocation. When omitted chibi falls back to whatever + * model is configured in the user's config.toml (i.e. the user's default). */ function buildInput( command: Record | string, @@ -58,6 +62,7 @@ function buildInput( projectRoot?: string, home?: string, destroyAfterSecondsInactive?: number, + model?: string, ): string { const input: Record = { command, context }; if (projectRoot) { @@ -69,6 +74,9 @@ function buildInput( if (destroyAfterSecondsInactive !== undefined) { input.flags = { destroy_after_seconds_inactive: destroyAfterSecondsInactive }; } + if (model) { + input.config = { model }; + } return JSON.stringify(input); } @@ -265,6 +273,7 @@ class ChibiSession implements HarnessSession { config.cwd, this.ephemeralHome.homePath, CONTEXT_TTL_SECONDS, + config.model, ); try { runSync(input, { env: this.extraEnv, sandboxConfig: this.sandboxConfig }); @@ -291,6 +300,8 @@ class ChibiSession implements HarnessSession { this.contextName, this.config.cwd, this.ephemeralHome?.homePath, + undefined, + this.config.model, ); const { command, args } = wrapCommand("chibi-json", [], this.sandboxConfig);