loki-mode 6.7.1 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/SKILL.md CHANGED
@@ -3,7 +3,7 @@ name: loki-mode
3
3
  description: Multi-agent autonomous startup system. Triggers on "Loki Mode". Takes PRD to deployed product with minimal human intervention. Requires --dangerously-skip-permissions flag.
4
4
  ---
5
5
 
6
- # Loki Mode v6.7.1
6
+ # Loki Mode v6.8.0
7
7
 
8
8
  **You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
9
9
 
@@ -267,4 +267,4 @@ The following features are documented in skill modules but not yet fully automat
267
267
  | Quality gates 3-reviewer system | Implemented (v5.35.0) | 5 specialist reviewers in `skills/quality-gates.md`; execution in run.sh |
268
268
  | Benchmarks (HumanEval, SWE-bench) | Infrastructure only | Runner scripts and datasets exist in `benchmarks/`; no published results |
269
269
 
270
- **v6.7.1 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
270
+ **v6.8.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~260 lines core**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 6.7.1
1
+ 6.8.0
package/autonomy/loki CHANGED
@@ -1647,6 +1647,9 @@ cmd_provider() {
1647
1647
  info)
1648
1648
  cmd_provider_info "$@"
1649
1649
  ;;
1650
+ models)
1651
+ cmd_provider_models
1652
+ ;;
1650
1653
  *)
1651
1654
  echo -e "${BOLD}Loki Mode Provider Management${NC}"
1652
1655
  echo ""
@@ -1657,6 +1660,7 @@ cmd_provider() {
1657
1660
  echo " set Set provider for this project"
1658
1661
  echo " list List available providers"
1659
1662
  echo " info Show provider details"
1663
+ echo " models Show resolved model configuration for all providers"
1660
1664
  echo ""
1661
1665
  echo "Examples:"
1662
1666
  echo " loki provider show"
@@ -1664,6 +1668,7 @@ cmd_provider() {
1664
1668
  echo " loki provider set codex"
1665
1669
  echo " loki provider list"
1666
1670
  echo " loki provider info gemini"
1671
+ echo " loki provider models"
1667
1672
  ;;
1668
1673
  esac
1669
1674
  }
@@ -1899,6 +1904,89 @@ cmd_provider_info() {
1899
1904
  esac
1900
1905
  }
1901
1906
 
1907
+ # Show resolved model configuration for all providers with source attribution
1908
+ cmd_provider_models() {
1909
+ local script_dir
1910
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
1911
+
1912
+ echo -e "${BOLD}Model Configuration (resolved):${NC}"
1913
+ echo ""
1914
+
1915
+ local providers=("claude" "codex" "gemini" "cline" "aider")
1916
+ for provider in "${providers[@]}"; do
1917
+ local provider_file="$script_dir/providers/${provider}.sh"
1918
+ [ -f "$provider_file" ] || continue
1919
+
1920
+ echo -e " ${BOLD}Provider: $provider${NC}"
1921
+
1922
+ # Source in subshell to get resolved values
1923
+ local planning dev fast
1924
+ planning=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_MODEL_PLANNING")
1925
+ dev=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_MODEL_DEVELOPMENT")
1926
+ fast=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_MODEL_FAST")
1927
+
1928
+ # Determine source for each tier
1929
+ local provider_upper
1930
+ provider_upper=$(echo "$provider" | tr '[:lower:]' '[:upper:]')
1931
+
1932
+ for tier in planning development fast; do
1933
+ local tier_upper
1934
+ tier_upper=$(echo "$tier" | tr '[:lower:]' '[:upper:]')
1935
+ local provider_var="LOKI_${provider_upper}_MODEL_${tier_upper}"
1936
+ local generic_var="LOKI_MODEL_${tier_upper}"
1937
+ local source="default"
1938
+
1939
+ # Check provider-specific var
1940
+ eval "local pval=\${$provider_var+x}"
1941
+ if [ -n "$pval" ]; then
1942
+ source="$provider_var"
1943
+ else
1944
+ # Check generic var
1945
+ eval "local gval=\${$generic_var+x}"
1946
+ if [ -n "$gval" ]; then
1947
+ source="$generic_var"
1948
+ fi
1949
+ fi
1950
+
1951
+ # Special cases: codex uses single LOKI_CODEX_MODEL, aider/cline too
1952
+ if [ "$provider" = "codex" ] && [ -n "${LOKI_CODEX_MODEL+x}" ] && [ "$source" = "default" ]; then
1953
+ source="LOKI_CODEX_MODEL"
1954
+ elif [ "$provider" = "aider" ] && [ -n "${LOKI_AIDER_MODEL+x}" ] && [ "$source" = "default" ]; then
1955
+ source="LOKI_AIDER_MODEL"
1956
+ elif [ "$provider" = "cline" ] && [ -n "${LOKI_CLINE_MODEL+x}" ] && [ "$source" = "default" ]; then
1957
+ source="LOKI_CLINE_MODEL"
1958
+ fi
1959
+
1960
+ local value
1961
+ case "$tier" in
1962
+ planning) value="$planning" ;;
1963
+ development) value="$dev" ;;
1964
+ fast) value="$fast" ;;
1965
+ esac
1966
+
1967
+ printf " %-12s %-30s (source: %s)\n" "${tier^}:" "$value" "$source"
1968
+ done
1969
+
1970
+ # Show extra info per provider
1971
+ if [ "$provider" = "codex" ]; then
1972
+ local effort_p effort_d effort_f
1973
+ effort_p=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_EFFORT_PLANNING")
1974
+ effort_d=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_EFFORT_DEVELOPMENT")
1975
+ effort_f=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_EFFORT_FAST")
1976
+ echo " Effort: planning=$effort_p, development=$effort_d, fast=$effort_f"
1977
+ elif [ "$provider" = "gemini" ]; then
1978
+ local think_p think_d think_f fb
1979
+ think_p=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_THINKING_PLANNING")
1980
+ think_d=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_THINKING_DEVELOPMENT")
1981
+ think_f=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_THINKING_FAST")
1982
+ fb=$(bash -c "source '$provider_file' 2>/dev/null; echo \$PROVIDER_MODEL_FALLBACK")
1983
+ echo " Thinking: planning=$think_p, development=$think_d, fast=$think_f"
1984
+ echo " Fallback: $fb"
1985
+ fi
1986
+ echo ""
1987
+ done
1988
+ }
1989
+
1902
1990
  # Dashboard server management - project-local, unified with run.sh
1903
1991
  DASHBOARD_PID_DIR="${LOKI_DIR}/dashboard"
1904
1992
  DASHBOARD_PID_FILE="${DASHBOARD_PID_DIR}/dashboard.pid"
package/autonomy/run.sh CHANGED
@@ -287,6 +287,9 @@ parse_simple_yaml() {
287
287
  set_from_yaml "$file" "model.prompt_repetition" "LOKI_PROMPT_REPETITION"
288
288
  set_from_yaml "$file" "model.confidence_routing" "LOKI_CONFIDENCE_ROUTING"
289
289
  set_from_yaml "$file" "model.autonomy_mode" "LOKI_AUTONOMY_MODE"
290
+ set_from_yaml "$file" "model.planning" "LOKI_MODEL_PLANNING"
291
+ set_from_yaml "$file" "model.development" "LOKI_MODEL_DEVELOPMENT"
292
+ set_from_yaml "$file" "model.fast" "LOKI_MODEL_FAST"
290
293
  set_from_yaml "$file" "model.compaction_interval" "LOKI_COMPACTION_INTERVAL"
291
294
 
292
295
  # Parallel
@@ -1369,12 +1372,7 @@ get_provider_tier_param() {
1369
1372
  if type resolve_model_for_tier &>/dev/null; then
1370
1373
  local resolved
1371
1374
  resolved=$(resolve_model_for_tier "$tier")
1372
- # For Claude, extract short name (opus/sonnet/haiku) from full model ID
1373
- if [ "${PROVIDER_NAME:-claude}" = "claude" ]; then
1374
- echo "$resolved" | sed 's/claude-\([a-z]*\).*/\1/'
1375
- else
1376
- echo "$resolved"
1377
- fi
1375
+ echo "$resolved"
1378
1376
  return
1379
1377
  fi
1380
1378
 
@@ -1382,9 +1380,9 @@ get_provider_tier_param() {
1382
1380
  case "${PROVIDER_NAME:-claude}" in
1383
1381
  claude)
1384
1382
  case "$tier" in
1385
- planning) echo "${PROVIDER_MODEL_PLANNING:-opus}" | sed 's/claude-\([a-z]*\).*/\1/' ;;
1386
- development) echo "${PROVIDER_MODEL_DEVELOPMENT:-sonnet}" | sed 's/claude-\([a-z]*\).*/\1/' ;;
1387
- fast) echo "${PROVIDER_MODEL_FAST:-haiku}" | sed 's/claude-\([a-z]*\).*/\1/' ;;
1383
+ planning) echo "${PROVIDER_MODEL_PLANNING:-opus}" ;;
1384
+ development) echo "${PROVIDER_MODEL_DEVELOPMENT:-opus}" ;;
1385
+ fast) echo "${PROVIDER_MODEL_FAST:-sonnet}" ;;
1388
1386
  *) echo "sonnet" ;;
1389
1387
  esac
1390
1388
  ;;
@@ -1405,12 +1403,10 @@ get_provider_tier_param() {
1405
1403
  esac
1406
1404
  ;;
1407
1405
  cline)
1408
- # Cline uses single externally-configured model
1409
- echo "${LOKI_CLINE_MODEL:-default}"
1406
+ echo "${CLINE_DEFAULT_MODEL:-${LOKI_CLINE_MODEL:-default}}"
1410
1407
  ;;
1411
1408
  aider)
1412
- # Aider uses single externally-configured model
1413
- echo "${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
1409
+ echo "${AIDER_DEFAULT_MODEL:-${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}}"
1414
1410
  ;;
1415
1411
  *)
1416
1412
  echo "development"
@@ -2882,9 +2878,9 @@ _write_pricing_json() {
2882
2878
  "updated": "${updated}",
2883
2879
  "source": "static",
2884
2880
  "models": {
2885
- "opus": {"input": 5.00, "output": 25.00, "label": "Opus 4.6", "provider": "claude"},
2886
- "sonnet": {"input": 3.00, "output": 15.00, "label": "Sonnet 4.5", "provider": "claude"},
2887
- "haiku": {"input": 1.00, "output": 5.00, "label": "Haiku 4.5", "provider": "claude"},
2881
+ "opus": {"input": 5.00, "output": 25.00, "label": "Opus (latest)", "provider": "claude"},
2882
+ "sonnet": {"input": 3.00, "output": 15.00, "label": "Sonnet (latest)", "provider": "claude"},
2883
+ "haiku": {"input": 1.00, "output": 5.00, "label": "Haiku (latest)", "provider": "claude"},
2888
2884
  "gpt-5.3-codex": {"input": 1.50, "output": 12.00, "label": "GPT-5.3 Codex", "provider": "codex"},
2889
2885
  "gemini-3-pro": {"input": 1.25, "output": 10.00, "label": "Gemini 3 Pro", "provider": "gemini"},
2890
2886
  "gemini-3-flash": {"input": 0.10, "output": 0.40, "label": "Gemini 3 Flash", "provider": "gemini"}
@@ -2905,8 +2901,8 @@ invoke_gemini() {
2905
2901
  local prompt="$1"
2906
2902
  shift
2907
2903
 
2908
- local model="${PROVIDER_MODEL:-gemini-3-pro-preview}"
2909
- local fallback="${PROVIDER_MODEL_FALLBACK:-gemini-3-flash-preview}"
2904
+ local model="${PROVIDER_MODEL:-${GEMINI_DEFAULT_PRO:-gemini-3-pro-preview}}"
2905
+ local fallback="${PROVIDER_MODEL_FALLBACK:-${GEMINI_DEFAULT_FLASH:-gemini-3-flash-preview}}"
2910
2906
 
2911
2907
  # Create temp file for output to preserve streaming while checking for rate limit
2912
2908
  local tmp_output
@@ -2936,8 +2932,8 @@ invoke_gemini_capture() {
2936
2932
  local prompt="$1"
2937
2933
  shift
2938
2934
 
2939
- local model="${PROVIDER_MODEL:-gemini-3-pro-preview}"
2940
- local fallback="${PROVIDER_MODEL_FALLBACK:-gemini-3-flash-preview}"
2935
+ local model="${PROVIDER_MODEL:-${GEMINI_DEFAULT_PRO:-gemini-3-pro-preview}}"
2936
+ local fallback="${PROVIDER_MODEL_FALLBACK:-${GEMINI_DEFAULT_FLASH:-gemini-3-flash-preview}}"
2941
2937
  local output
2942
2938
 
2943
2939
  # Try primary model first
@@ -2990,7 +2986,7 @@ invoke_cline_capture() {
2990
2986
  invoke_aider() {
2991
2987
  local prompt="$1"
2992
2988
  shift
2993
- local model="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
2989
+ local model="${AIDER_DEFAULT_MODEL:-${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}}"
2994
2990
  local extra_flags="${LOKI_AIDER_FLAGS:-}"
2995
2991
  # shellcheck disable=SC2086
2996
2992
  # < /dev/null prevents aider from blocking on stdin in non-interactive mode
@@ -3003,7 +2999,7 @@ invoke_aider() {
3003
2999
  invoke_aider_capture() {
3004
3000
  local prompt="$1"
3005
3001
  shift
3006
- local model="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
3002
+ local model="${AIDER_DEFAULT_MODEL:-${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}}"
3007
3003
  local extra_flags="${LOKI_AIDER_FLAGS:-}"
3008
3004
  # shellcheck disable=SC2086
3009
3005
  aider --message "$prompt" --yes-always --no-auto-commits \
@@ -3518,17 +3514,15 @@ track_iteration_complete() {
3518
3514
 
3519
3515
  # Write efficiency tracking file for /api/cost endpoint
3520
3516
  mkdir -p .loki/metrics/efficiency
3521
- local model_tier="sonnet"
3522
- if [ "${PROVIDER_NAME:-claude}" = "claude" ]; then
3523
- model_tier="sonnet"
3524
- elif [ "${PROVIDER_NAME:-claude}" = "codex" ]; then
3525
- model_tier="gpt-5.3-codex"
3517
+ local model_tier="${PROVIDER_MODEL_DEVELOPMENT:-sonnet}"
3518
+ if [ "${PROVIDER_NAME:-claude}" = "codex" ]; then
3519
+ model_tier="${PROVIDER_MODEL_DEVELOPMENT:-${CODEX_DEFAULT_MODEL:-gpt-5.3-codex}}"
3526
3520
  elif [ "${PROVIDER_NAME:-claude}" = "gemini" ]; then
3527
- model_tier="gemini-3-pro"
3521
+ model_tier="${PROVIDER_MODEL_DEVELOPMENT:-${GEMINI_DEFAULT_PRO:-gemini-3-pro}}"
3528
3522
  elif [ "${PROVIDER_NAME:-claude}" = "cline" ]; then
3529
- model_tier="${LOKI_CLINE_MODEL:-sonnet}"
3523
+ model_tier="${CLINE_DEFAULT_MODEL:-${LOKI_CLINE_MODEL:-sonnet}}"
3530
3524
  elif [ "${PROVIDER_NAME:-claude}" = "aider" ]; then
3531
- model_tier="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
3525
+ model_tier="${AIDER_DEFAULT_MODEL:-${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}}"
3532
3526
  fi
3533
3527
  local phase="${LAST_KNOWN_PHASE:-}"
3534
3528
  [ -z "$phase" ] && phase=$(python3 -c "import json; print(json.load(open('.loki/state/orchestrator.json')).get('currentPhase', 'unknown'))" 2>/dev/null || echo "unknown")
@@ -8187,8 +8181,8 @@ if __name__ == "__main__":
8187
8181
  gemini)
8188
8182
  # Gemini: Degraded mode - no stream-json, no agent tracking
8189
8183
  # Uses invoke_gemini helper for rate limit fallback to flash model
8190
- local model="${PROVIDER_MODEL:-gemini-3-pro-preview}"
8191
- local fallback="${PROVIDER_MODEL_FALLBACK:-gemini-3-flash-preview}"
8184
+ local model="${PROVIDER_MODEL:-${GEMINI_DEFAULT_PRO:-gemini-3-pro-preview}}"
8185
+ local fallback="${PROVIDER_MODEL_FALLBACK:-${GEMINI_DEFAULT_FLASH:-gemini-3-flash-preview}}"
8192
8186
  echo "[loki] Gemini model: $model (fallback: $fallback), tier: $tier_param" >> "$log_file"
8193
8187
  echo "[loki] Gemini model: $model (fallback: $fallback), tier: $tier_param" >> "$agent_log"
8194
8188
 
@@ -8216,8 +8210,8 @@ if __name__ == "__main__":
8216
8210
  ;;
8217
8211
  aider)
8218
8212
  # Aider: Tier 3 - degraded mode, 18+ providers
8219
- echo "[loki] Aider model: ${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}, tier: $tier_param" >> "$log_file"
8220
- echo "[loki] Aider model: ${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}, tier: $tier_param" >> "$agent_log"
8213
+ echo "[loki] Aider model: ${AIDER_DEFAULT_MODEL:-${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}}, tier: $tier_param" >> "$log_file"
8214
+ echo "[loki] Aider model: ${AIDER_DEFAULT_MODEL:-${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}}, tier: $tier_param" >> "$agent_log"
8221
8215
  { invoke_aider "$prompt" 2>&1 | tee -a "$log_file" "$agent_log"; \
8222
8216
  } && exit_code=0 || exit_code=$?
8223
8217
  ;;
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "6.7.1"
10
+ __version__ = "6.8.0"
11
11
 
12
12
  # Expose the control app for easy import
13
13
  try:
@@ -2,7 +2,7 @@
2
2
 
3
3
  The flagship product of [Autonomi](https://www.autonomi.dev/). Complete installation instructions for all platforms and use cases.
4
4
 
5
- **Version:** v6.7.1
5
+ **Version:** v6.8.0
6
6
 
7
7
  ---
8
8
 
package/mcp/__init__.py CHANGED
@@ -57,4 +57,4 @@ try:
57
57
  except ImportError:
58
58
  __all__ = ['mcp']
59
59
 
60
- __version__ = '6.7.1'
60
+ __version__ = '6.8.0'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loki-mode",
3
- "version": "6.7.1",
3
+ "version": "6.8.0",
4
4
  "description": "Loki Mode by Autonomi - Multi-agent autonomous startup system for Claude Code, Codex CLI, and Gemini CLI",
5
5
  "keywords": [
6
6
  "agent",
@@ -49,9 +49,11 @@ PROVIDER_MAX_PARALLEL=1
49
49
  # Model Configuration
50
50
  # Aider supports 18+ providers; model configured via LOKI_AIDER_MODEL env var
51
51
  # or provider-specific env vars (OPENAI_API_KEY, OPENAI_API_BASE, etc.)
52
- PROVIDER_MODEL_PLANNING="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
53
- PROVIDER_MODEL_DEVELOPMENT="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
54
- PROVIDER_MODEL_FAST="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
52
+ # NOTE: Aider uses litellm for model routing, so full model strings are needed (not CLI aliases)
53
+ AIDER_DEFAULT_MODEL="${LOKI_AIDER_MODEL:-${LOKI_MODEL_DEVELOPMENT:-claude-sonnet-4-5-20250929}}"
54
+ PROVIDER_MODEL_PLANNING="$AIDER_DEFAULT_MODEL"
55
+ PROVIDER_MODEL_DEVELOPMENT="$AIDER_DEFAULT_MODEL"
56
+ PROVIDER_MODEL_FAST="$AIDER_DEFAULT_MODEL"
55
57
 
56
58
  # No Task tool - model is configured externally
57
59
  PROVIDER_TASK_MODEL_PARAM=""
@@ -95,7 +97,7 @@ provider_version() {
95
97
  provider_invoke() {
96
98
  local prompt="$1"
97
99
  shift
98
- local model="${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
100
+ local model="$AIDER_DEFAULT_MODEL"
99
101
  local extra_flags="${LOKI_AIDER_FLAGS:-}"
100
102
  # shellcheck disable=SC2086
101
103
  aider --message "$prompt" \
@@ -108,7 +110,7 @@ provider_invoke() {
108
110
  # Model tier to parameter (Aider uses single model, returns model name)
109
111
  provider_get_tier_param() {
110
112
  local tier="$1"
111
- echo "${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
113
+ echo "$AIDER_DEFAULT_MODEL"
112
114
  }
113
115
 
114
116
  # Dynamic model resolution (v6.0.0)
@@ -116,7 +118,7 @@ provider_get_tier_param() {
116
118
  # just returns the configured model name. maxTier has no effect.
117
119
  resolve_model_for_tier() {
118
120
  local tier="$1"
119
- echo "${LOKI_AIDER_MODEL:-claude-sonnet-4-5-20250929}"
121
+ echo "$AIDER_DEFAULT_MODEL"
120
122
  }
121
123
 
122
124
  # Tier-aware invocation
@@ -45,15 +45,21 @@ PROVIDER_MAX_PARALLEL=10
45
45
 
46
46
  # Model Configuration (Abstract Tiers)
47
47
  # Default: Haiku disabled for quality. Use --allow-haiku or LOKI_ALLOW_HAIKU=true to enable.
48
- PROVIDER_MODEL_PLANNING="claude-opus-4-6"
49
- PROVIDER_MODEL_DEVELOPMENT="claude-opus-4-6" # Opus for dev (was sonnet)
48
+ # Claude Code CLI resolves aliases (opus/sonnet/haiku) to latest versions automatically.
49
+ CLAUDE_DEFAULT_PLANNING="opus"
50
+ CLAUDE_DEFAULT_DEVELOPMENT="opus" # Opus for dev (was sonnet)
51
+ CLAUDE_DEFAULT_FAST="sonnet"
52
+
50
53
  if [ "${LOKI_ALLOW_HAIKU:-false}" = "true" ]; then
51
- PROVIDER_MODEL_FAST="claude-haiku-4-5-20251001"
52
- PROVIDER_MODEL_DEVELOPMENT="claude-sonnet-4-5-20250929" # Sonnet for dev when haiku enabled
53
- else
54
- PROVIDER_MODEL_FAST="claude-sonnet-4-5-20250929" # Sonnet for fast (no haiku)
54
+ CLAUDE_DEFAULT_DEVELOPMENT="sonnet" # Sonnet for dev when haiku enabled
55
+ CLAUDE_DEFAULT_FAST="haiku"
55
56
  fi
56
57
 
58
+ # Resolution order: provider-specific env > generic env > haiku-aware default
59
+ PROVIDER_MODEL_PLANNING="${LOKI_CLAUDE_MODEL_PLANNING:-${LOKI_MODEL_PLANNING:-$CLAUDE_DEFAULT_PLANNING}}"
60
+ PROVIDER_MODEL_DEVELOPMENT="${LOKI_CLAUDE_MODEL_DEVELOPMENT:-${LOKI_MODEL_DEVELOPMENT:-$CLAUDE_DEFAULT_DEVELOPMENT}}"
61
+ PROVIDER_MODEL_FAST="${LOKI_CLAUDE_MODEL_FAST:-${LOKI_MODEL_FAST:-$CLAUDE_DEFAULT_FAST}}"
62
+
57
63
  # Model Selection (for Task tool)
58
64
  PROVIDER_TASK_MODEL_PARAM="model"
59
65
  if [ "${LOKI_ALLOW_HAIKU:-false}" = "true" ]; then
@@ -168,15 +174,12 @@ resolve_model_for_tier() {
168
174
  echo "$model"
169
175
  }
170
176
 
171
- # Tier-aware invocation (Claude supports model selection via --model flag)
177
+ # Tier-aware invocation (values are already aliases like opus/sonnet/haiku)
172
178
  provider_invoke_with_tier() {
173
179
  local tier="$1"
174
180
  local prompt="$2"
175
181
  shift 2
176
182
  local model
177
183
  model=$(resolve_model_for_tier "$tier")
178
- # Extract short name for Task tool (opus/sonnet/haiku)
179
- local short_model
180
- short_model=$(echo "$model" | sed 's/claude-\([a-z]*\).*/\1/')
181
- claude --dangerously-skip-permissions --model "$short_model" -p "$prompt" "$@"
184
+ claude --dangerously-skip-permissions --model "$model" -p "$prompt" "$@"
182
185
  }
@@ -50,9 +50,11 @@ PROVIDER_MAX_PARALLEL=1
50
50
  # Model Configuration
51
51
  # Cline supports 12+ providers; model configured via LOKI_CLINE_MODEL env var
52
52
  # or `cline auth` one-time setup. Defaults are placeholders.
53
- PROVIDER_MODEL_PLANNING="${LOKI_CLINE_MODEL:-claude-sonnet-4-5-20250929}"
54
- PROVIDER_MODEL_DEVELOPMENT="${LOKI_CLINE_MODEL:-claude-sonnet-4-5-20250929}"
55
- PROVIDER_MODEL_FAST="${LOKI_CLINE_MODEL:-claude-sonnet-4-5-20250929}"
53
+ # NOTE: Cline uses its own model routing, so full model strings are needed (not CLI aliases)
54
+ CLINE_DEFAULT_MODEL="${LOKI_CLINE_MODEL:-${LOKI_MODEL_DEVELOPMENT:-claude-sonnet-4-5-20250929}}"
55
+ PROVIDER_MODEL_PLANNING="$CLINE_DEFAULT_MODEL"
56
+ PROVIDER_MODEL_DEVELOPMENT="$CLINE_DEFAULT_MODEL"
57
+ PROVIDER_MODEL_FAST="$CLINE_DEFAULT_MODEL"
56
58
 
57
59
  # No Task tool - model is configured externally
58
60
  PROVIDER_TASK_MODEL_PARAM=""
@@ -101,7 +103,7 @@ provider_invoke() {
101
103
  # Model tier to parameter (Cline uses single model, returns model name)
102
104
  provider_get_tier_param() {
103
105
  local tier="$1"
104
- echo "${LOKI_CLINE_MODEL:-default}"
106
+ echo "$CLINE_DEFAULT_MODEL"
105
107
  }
106
108
 
107
109
  # Dynamic model resolution (v6.0.0)
@@ -109,7 +111,7 @@ provider_get_tier_param() {
109
111
  # just returns the configured model name. maxTier has no effect.
110
112
  resolve_model_for_tier() {
111
113
  local tier="$1"
112
- echo "${LOKI_CLINE_MODEL:-default}"
114
+ echo "$CLINE_DEFAULT_MODEL"
113
115
  }
114
116
 
115
117
  # Tier-aware invocation
@@ -50,9 +50,10 @@ PROVIDER_MAX_PARALLEL=1
50
50
  # Model Configuration
51
51
  # Codex uses single model with effort parameter
52
52
  # NOTE: gpt-5.3-codex is the official model name for Codex CLI v0.98+
53
- PROVIDER_MODEL_PLANNING="gpt-5.3-codex"
54
- PROVIDER_MODEL_DEVELOPMENT="gpt-5.3-codex"
55
- PROVIDER_MODEL_FAST="gpt-5.3-codex"
53
+ CODEX_DEFAULT_MODEL="gpt-5.3-codex"
54
+ PROVIDER_MODEL_PLANNING="${LOKI_CODEX_MODEL:-${LOKI_MODEL_PLANNING:-$CODEX_DEFAULT_MODEL}}"
55
+ PROVIDER_MODEL_DEVELOPMENT="${LOKI_CODEX_MODEL:-${LOKI_MODEL_DEVELOPMENT:-$CODEX_DEFAULT_MODEL}}"
56
+ PROVIDER_MODEL_FAST="${LOKI_CODEX_MODEL:-${LOKI_MODEL_FAST:-$CODEX_DEFAULT_MODEL}}"
56
57
 
57
58
  # Effort levels (Codex-specific: maps to reasoning time, not model capability)
58
59
  PROVIDER_EFFORT_PLANNING="xhigh"
@@ -51,11 +51,14 @@ PROVIDER_MAX_PARALLEL=1
51
51
  # Gemini CLI supports --model flag to specify model
52
52
  # Primary: gemini-3-pro-preview (preview names - may change when GA is released)
53
53
  # Fallback: gemini-3-flash-preview (for rate limit scenarios)
54
- PROVIDER_MODEL="gemini-3-pro-preview"
55
- PROVIDER_MODEL_FALLBACK="gemini-3-flash-preview"
56
- PROVIDER_MODEL_PLANNING="gemini-3-pro-preview"
57
- PROVIDER_MODEL_DEVELOPMENT="gemini-3-pro-preview"
58
- PROVIDER_MODEL_FAST="gemini-3-flash-preview"
54
+ GEMINI_DEFAULT_PRO="gemini-3-pro-preview"
55
+ GEMINI_DEFAULT_FLASH="gemini-3-flash-preview"
56
+
57
+ PROVIDER_MODEL_PLANNING="${LOKI_GEMINI_MODEL_PLANNING:-${LOKI_MODEL_PLANNING:-$GEMINI_DEFAULT_PRO}}"
58
+ PROVIDER_MODEL_DEVELOPMENT="${LOKI_GEMINI_MODEL_DEVELOPMENT:-${LOKI_MODEL_DEVELOPMENT:-$GEMINI_DEFAULT_PRO}}"
59
+ PROVIDER_MODEL_FAST="${LOKI_GEMINI_MODEL_FAST:-${LOKI_MODEL_FAST:-$GEMINI_DEFAULT_FLASH}}"
60
+ PROVIDER_MODEL="${PROVIDER_MODEL_PLANNING}"
61
+ PROVIDER_MODEL_FALLBACK="${LOKI_GEMINI_MODEL_FALLBACK:-$GEMINI_DEFAULT_FLASH}"
59
62
 
60
63
  # Thinking levels (Gemini-specific: maps to reasoning depth)
61
64
  PROVIDER_THINKING_PLANNING="high"