diff --git a/bin/deadman-fallback.py b/bin/deadman-fallback.py index c094361c..9bd9437c 100644 --- a/bin/deadman-fallback.py +++ b/bin/deadman-fallback.py @@ -7,7 +7,7 @@ 7|common sense fallbacks automatically. 8| 9|Fallback chain: - 10|1. Primary model (Anthropic) down -> switch config to local-llama.cpp + 10|1. Primary model (Kimi) down -> switch config to local-llama.cpp 11|2. Gitea unreachable -> cache issues locally, retry on recovery 12|3. VPS agents down -> alert + lazarus protocol 13|4. Local llama.cpp down -> try Ollama, then alert-only mode @@ -61,16 +61,16 @@ 61| 62|# ─── HEALTH CHECKS ─── 63| - 64|def check_anthropic(): - 65| """Can we reach Anthropic API?""" - 66| key = os.environ.get("ANTHROPIC_API_KEY", "") + 64|def check_kimi(): + 65| """Can we reach Kimi Coding API?""" + 66| key = os.environ.get("KIMI_API_KEY", "") 67| if not key: 68| # Check multiple .env locations 69| for env_path in [HERMES_HOME / ".env", Path.home() / ".hermes" / ".env"]: 70| if env_path.exists(): 71| for line in open(env_path): 72| line = line.strip() - 73| if line.startswith("ANTHROPIC_API_KEY=*** + 73| if line.startswith("KIMI_API_KEY=*** 74| key = line.split("=", 1)[1].strip().strip('"').strip("'") 75| break 76| if key: @@ -79,10 +79,10 @@ 79| return False, "no API key" 80| code, out, err = run( 81| f'curl -s -o /dev/null -w "%{{http_code}}" -H "x-api-key: {key}" ' - 82| f'-H "anthropic-version: 2023-06-01" ' - 83| f'https://api.anthropic.com/v1/messages -X POST ' + 82| f'-H "x-api-provider: kimi-coding" ' + 83| f'https://api.kimi.com/coding/v1/models -X POST ' 84| f'-H "content-type: application/json" ' - 85| f'-d \'{{"model":"claude-haiku-4-5-20251001","max_tokens":1,"messages":[{{"role":"user","content":"ping"}}]}}\' ', + 85| f'-d \'{{"model":"kimi-k2.5","max_tokens":1,"messages":[{{"role":"user","content":"ping"}}]}}\' ', 86| timeout=15 87| ) 88| if code == 0 and out in ("200", "429"): @@ -128,7 +128,7 @@ 128|# ─── FALLBACK ACTIONS ─── 129| 130|def fallback_to_local_model(cfg): - 131| """Switch primary model from Anthropic to local llama.cpp""" + 131| """Switch primary model from Kimi to local llama.cpp""" 132| if not BACKUP_CONFIG.exists(): 133| shutil.copy2(CONFIG_PATH, BACKUP_CONFIG) 134| @@ -176,8 +176,8 @@ 176| } 177| 178| # Check all systems - 179| anthropic_ok, anthropic_msg = check_anthropic() - 180| results["checks"]["anthropic"] = {"ok": anthropic_ok, "msg": anthropic_msg} + 179| kimi_ok, kimi_msg = check_kimi() + 180| results["checks"]["kimi-coding"] = {"ok": kimi_ok, "msg": kimi_msg} 181| 182| llama_ok, llama_msg = check_local_llama() 183| results["checks"]["local_llama"] = {"ok": llama_ok, "msg": llama_msg} @@ -198,21 +198,21 @@ 198| vps_ok, vps_msg = check_vps(ip, name) 199| results["checks"][f"vps_{name.lower()}"] = {"ok": vps_ok, "msg": vps_msg} 200| - 201| current_provider = cfg.get("model", {}).get("provider", "anthropic") + 201| current_provider = cfg.get("model", {}).get("provider", "kimi-coding") 202| 203| # ─── FALLBACK LOGIC ─── 204| - 205| # Case 1: Primary (Anthropic) down, local available - 206| if not anthropic_ok and current_provider == "anthropic": + 205| # Case 1: Primary (Kimi) down, local available + 206| if not kimi_ok and current_provider == "kimi-coding": 207| if llama_ok: 208| msg = fallback_to_local_model(cfg) 209| results["actions"].append(msg) - 210| state["active_fallbacks"].append("anthropic->local-llama") + 210| state["active_fallbacks"].append("kimi->local-llama") 211| results["status"] = "degraded_local" 212| elif ollama_ok: 213| msg = fallback_to_ollama(cfg) 214| results["actions"].append(msg) - 215| state["active_fallbacks"].append("anthropic->ollama") + 215| state["active_fallbacks"].append("kimi->ollama") 216| results["status"] = "degraded_ollama" 217| else: 218| msg = enter_safe_mode(state) @@ -220,15 +220,15 @@ 220| results["status"] = "safe_mode" 221| 222| # Case 2: Already on fallback, check if primary recovered - 223| elif anthropic_ok and "anthropic->local-llama" in state.get("active_fallbacks", []): + 223| elif kimi_ok and "kimi->local-llama" in state.get("active_fallbacks", []): 224| msg = restore_config() 225| results["actions"].append(msg) - 226| state["active_fallbacks"].remove("anthropic->local-llama") + 226| state["active_fallbacks"].remove("kimi->local-llama") 227| results["status"] = "recovered" - 228| elif anthropic_ok and "anthropic->ollama" in state.get("active_fallbacks", []): + 228| elif kimi_ok and "kimi->ollama" in state.get("active_fallbacks", []): 229| msg = restore_config() 230| results["actions"].append(msg) - 231| state["active_fallbacks"].remove("anthropic->ollama") + 231| state["active_fallbacks"].remove("kimi->ollama") 232| results["status"] = "recovered" 233| 234| # Case 3: Gitea down — just flag it, work locally diff --git a/bin/model-health-check.sh b/bin/model-health-check.sh index 1b163dce..b24af8ab 100755 --- a/bin/model-health-check.sh +++ b/bin/model-health-check.sh @@ -19,25 +19,25 @@ PASS=0 FAIL=0 WARN=0 -check_anthropic_model() { +check_kimi_model() { local model="$1" local label="$2" - local api_key="${ANTHROPIC_API_KEY:-}" + local api_key="${KIMI_API_KEY:-}" if [ -z "$api_key" ]; then # Try loading from .env - api_key=$(grep '^ANTHROPIC_API_KEY=' "${HERMES_HOME:-$HOME/.hermes}/.env" 2>/dev/null | head -1 | cut -d= -f2- | tr -d "'\"" || echo "") + api_key=$(grep '^KIMI_API_KEY=' "${HERMES_HOME:-$HOME/.hermes}/.env" 2>/dev/null | head -1 | cut -d= -f2- | tr -d "'\"" || echo "") fi if [ -z "$api_key" ]; then - log "SKIP [$label] $model -- no ANTHROPIC_API_KEY" + log "SKIP [$label] $model -- no KIMI_API_KEY" return 0 fi response=$(curl -sf --max-time 10 -X POST \ - "https://api.anthropic.com/v1/messages" \ + "https://api.kimi.com/coding/v1/chat/completions" \ -H "x-api-key: ${api_key}" \ - -H "anthropic-version: 2023-06-01" \ + -H "x-api-provider: kimi-coding" \ -H "content-type: application/json" \ -d "{\"model\":\"${model}\",\"max_tokens\":1,\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}]}" 2>&1 || echo "ERROR") @@ -85,26 +85,26 @@ else: print('') " 2>/dev/null || echo "") -if [ -n "$primary" ] && [ "$provider" = "anthropic" ]; then - if check_anthropic_model "$primary" "PRIMARY"; then +if [ -n "$primary" ] && [ "$provider" = "kimi-coding" ]; then + if check_kimi_model "$primary" "PRIMARY"; then PASS=$((PASS + 1)) else rc=$? if [ "$rc" -eq 1 ]; then FAIL=$((FAIL + 1)) log "CRITICAL: Primary model $primary is DEAD. Loops will fail." - log "Known good alternatives: claude-opus-4.6, claude-haiku-4-5-20251001" + log "Known good alternatives: kimi-k2.5, google/gemini-2.5-pro" else WARN=$((WARN + 1)) fi fi elif [ -n "$primary" ]; then - log "SKIP [PRIMARY] $primary -- non-anthropic provider ($provider), no validator yet" + log "SKIP [PRIMARY] $primary -- non-kimi provider ($provider), no validator yet" fi # Cron model check (haiku) -CRON_MODEL="claude-haiku-4-5-20251001" -if check_anthropic_model "$CRON_MODEL" "CRON"; then +CRON_MODEL="kimi-k2.5" +if check_kimi_model "$CRON_MODEL" "CRON"; then PASS=$((PASS + 1)) else rc=$? diff --git a/fallback-portfolios.yaml b/fallback-portfolios.yaml index f507dc86..73a0a51c 100644 --- a/fallback-portfolios.yaml +++ b/fallback-portfolios.yaml @@ -2,135 +2,128 @@ schema_version: 1 status: proposed runtime_wiring: false owner: timmy-config - ownership: owns: - - routing doctrine for task classes - - sidecar-readable per-agent fallback portfolios - - degraded-mode capability floors + - routing doctrine for task classes + - sidecar-readable per-agent fallback portfolios + - degraded-mode capability floors does_not_own: - - live queue state outside Gitea truth - - launchd or loop process state - - ad hoc worktree history - + - live queue state outside Gitea truth + - launchd or loop process state + - ad hoc worktree history policy: require_four_slots_for_critical_agents: true terminal_fallback_must_be_usable: true forbid_synchronized_fleet_degradation: true forbid_human_token_fallbacks: true anti_correlation_rule: no two critical agents may share the same primary+fallback1 pair - sensitive_control_surfaces: - - SOUL.md - - config.yaml - - deploy.sh - - tasks.py - - playbooks/ - - cron/ - - memories/ - - skins/ - - training/ - +- SOUL.md +- config.yaml +- deploy.sh +- tasks.py +- playbooks/ +- cron/ +- memories/ +- skins/ +- training/ role_classes: judgment: current_surfaces: - - playbooks/issue-triager.yaml - - playbooks/pr-reviewer.yaml - - playbooks/verified-logic.yaml + - playbooks/issue-triager.yaml + - playbooks/pr-reviewer.yaml + - playbooks/verified-logic.yaml task_classes: - - issue-triage - - queue-routing - - pr-review - - proof-check - - governance-review + - issue-triage + - queue-routing + - pr-review + - proof-check + - governance-review degraded_mode: fallback2: allowed: - - classify backlog - - summarize risk - - produce draft routing plans - - leave bounded labels or comments with evidence + - classify backlog + - summarize risk + - produce draft routing plans + - leave bounded labels or comments with evidence denied: - - merge pull requests - - close or rewrite governing issues or PRs - - mutate sensitive control surfaces - - bulk-reassign the fleet - - silently change routing policy + - merge pull requests + - close or rewrite governing issues or PRs + - mutate sensitive control surfaces + - bulk-reassign the fleet + - silently change routing policy terminal: lane: report-and-route allowed: - - classify backlog - - summarize risk - - produce draft routing artifacts + - classify backlog + - summarize risk + - produce draft routing artifacts denied: - - merge pull requests - - bulk-reassign the fleet - - mutate sensitive control surfaces - + - merge pull requests + - bulk-reassign the fleet + - mutate sensitive control surfaces builder: current_surfaces: - - playbooks/bug-fixer.yaml - - playbooks/test-writer.yaml - - playbooks/refactor-specialist.yaml + - playbooks/bug-fixer.yaml + - playbooks/test-writer.yaml + - playbooks/refactor-specialist.yaml task_classes: - - bug-fix - - test-writing - - refactor - - bounded-docs-change + - bug-fix + - test-writing + - refactor + - bounded-docs-change degraded_mode: fallback2: allowed: - - reversible single-issue changes - - narrow docs fixes - - test scaffolds and reproducers + - reversible single-issue changes + - narrow docs fixes + - test scaffolds and reproducers denied: - - cross-repo changes - - sensitive control-surface edits - - merge or release actions + - cross-repo changes + - sensitive control-surface edits + - merge or release actions terminal: lane: narrow-patch allowed: - - single-issue small patch - - reproducer test - - docs-only repair + - single-issue small patch + - reproducer test + - docs-only repair denied: - - sensitive control-surface edits - - multi-file architecture work - - irreversible actions - + - sensitive control-surface edits + - multi-file architecture work + - irreversible actions wolf_bulk: current_surfaces: - - docs/automation-inventory.md - - FALSEWORK.md + - docs/automation-inventory.md + - FALSEWORK.md task_classes: - - docs-inventory - - log-summarization - - queue-hygiene - - repetitive-small-diff - - research-sweep + - docs-inventory + - log-summarization + - queue-hygiene + - repetitive-small-diff + - research-sweep degraded_mode: fallback2: allowed: - - gather evidence - - refresh inventories - - summarize logs - - propose labels or routes + - gather evidence + - refresh inventories + - summarize logs + - propose labels or routes denied: - - multi-repo branch fanout - - mass agent assignment - - sensitive control-surface edits - - irreversible queue mutation + - multi-repo branch fanout + - mass agent assignment + - sensitive control-surface edits + - irreversible queue mutation terminal: lane: gather-and-summarize allowed: - - inventory refresh - - evidence bundles - - summaries + - inventory refresh + - evidence bundles + - summaries denied: - - multi-repo branch fanout - - mass agent assignment - - sensitive control-surface edits - + - multi-repo branch fanout + - mass agent assignment + - sensitive control-surface edits routing: issue-triage: judgment queue-routing: judgment @@ -146,22 +139,20 @@ routing: queue-hygiene: wolf_bulk repetitive-small-diff: wolf_bulk research-sweep: wolf_bulk - promotion_rules: - - If a wolf/bulk task touches a sensitive control surface, promote it to judgment. - - If a builder task expands beyond 5 files, architecture review, or multi-repo coordination, promote it to judgment. - - If a terminal lane cannot produce a usable artifact, the portfolio is invalid and must be redesigned before wiring. - +- If a wolf/bulk task touches a sensitive control surface, promote it to judgment. +- If a builder task expands beyond 5 files, architecture review, or multi-repo coordination, promote it to judgment. +- If a terminal lane cannot produce a usable artifact, the portfolio is invalid and must be redesigned before wiring. agents: triage-coordinator: role_class: judgment critical: true current_playbooks: - - playbooks/issue-triager.yaml + - playbooks/issue-triager.yaml portfolio: primary: - provider: anthropic - model: claude-opus-4-6 + provider: kimi-coding + model: kimi-k2.5 lane: full-judgment fallback1: provider: openai-codex @@ -177,19 +168,18 @@ agents: lane: report-and-route local_capable: true usable_output: - - backlog classification - - routing draft - - risk summary - + - backlog classification + - routing draft + - risk summary pr-reviewer: role_class: judgment critical: true current_playbooks: - - playbooks/pr-reviewer.yaml + - playbooks/pr-reviewer.yaml portfolio: primary: - provider: anthropic - model: claude-opus-4-6 + provider: kimi-coding + model: kimi-k2.5 lane: full-review fallback1: provider: gemini @@ -205,17 +195,16 @@ agents: lane: low-stakes-diff-summary local_capable: false usable_output: - - diff risk summary - - explicit uncertainty notes - - merge-block recommendation - + - diff risk summary + - explicit uncertainty notes + - merge-block recommendation builder-main: role_class: builder critical: true current_playbooks: - - playbooks/bug-fixer.yaml - - playbooks/test-writer.yaml - - playbooks/refactor-specialist.yaml + - playbooks/bug-fixer.yaml + - playbooks/test-writer.yaml + - playbooks/refactor-specialist.yaml portfolio: primary: provider: openai-codex @@ -236,15 +225,14 @@ agents: lane: narrow-patch local_capable: true usable_output: - - small patch - - reproducer test - - docs repair - + - small patch + - reproducer test + - docs repair wolf-sweeper: role_class: wolf_bulk critical: true current_world_state: - - docs/automation-inventory.md + - docs/automation-inventory.md portfolio: primary: provider: gemini @@ -264,21 +252,20 @@ agents: lane: gather-and-summarize local_capable: true usable_output: - - inventory refresh - - evidence bundle - - summary comment - + - inventory refresh + - evidence bundle + - summary comment cross_checks: unique_primary_fallback1_pairs: triage-coordinator: - - anthropic/claude-opus-4-6 - - openai-codex/codex + - kimi-coding/kimi-k2.5 + - openai-codex/codex pr-reviewer: - - anthropic/claude-opus-4-6 - - gemini/gemini-2.5-pro + - kimi-coding/kimi-k2.5 + - gemini/gemini-2.5-pro builder-main: - - openai-codex/codex - - kimi-coding/kimi-k2.5 + - openai-codex/codex + - kimi-coding/kimi-k2.5 wolf-sweeper: - - gemini/gemini-2.5-flash - - groq/llama-3.3-70b-versatile + - gemini/gemini-2.5-flash + - groq/llama-3.3-70b-versatile diff --git a/hermes-sovereign/wizard-bootstrap/wizard_bootstrap.py b/hermes-sovereign/wizard-bootstrap/wizard_bootstrap.py index 623ea29a..bf83f469 100644 --- a/hermes-sovereign/wizard-bootstrap/wizard_bootstrap.py +++ b/hermes-sovereign/wizard-bootstrap/wizard_bootstrap.py @@ -77,7 +77,7 @@ def check_core_deps() -> CheckResult: """Verify that hermes core Python packages are importable.""" required = [ "openai", - "anthropic", + "kimi-coding", "dotenv", "yaml", "rich", @@ -206,8 +206,8 @@ def check_env_vars() -> CheckResult: """Check that at least one LLM provider key is configured.""" provider_keys = [ "OPENROUTER_API_KEY", - "ANTHROPIC_API_KEY", - "ANTHROPIC_TOKEN", + "KIMI_API_KEY", + # "ANTHROPIC_TOKEN", # BANNED "OPENAI_API_KEY", "GLM_API_KEY", "KIMI_API_KEY", @@ -225,7 +225,7 @@ def check_env_vars() -> CheckResult: passed=False, message="No LLM provider API key found", fix_hint=( - "Set at least one of: OPENROUTER_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY " + "Set at least one of: OPENROUTER_API_KEY, KIMI_API_KEY, OPENAI_API_KEY " "in ~/.hermes/.env or your shell." ), ) diff --git a/playbooks/bug-fixer.yaml b/playbooks/bug-fixer.yaml index 53bffc37..2f87f93f 100644 --- a/playbooks/bug-fixer.yaml +++ b/playbooks/bug-fixer.yaml @@ -4,8 +4,8 @@ description: > reproduces the bug, then fixes the code, then verifies. model: - preferred: claude-opus-4-6 - fallback: claude-sonnet-4-20250514 + preferred: kimi-k2.5 + fallback: google/gemini-2.5-pro max_turns: 30 temperature: 0.2 diff --git a/playbooks/issue-triager.yaml b/playbooks/issue-triager.yaml index 637def84..af0435de 100644 --- a/playbooks/issue-triager.yaml +++ b/playbooks/issue-triager.yaml @@ -4,8 +4,8 @@ description: > agents. Decomposes large issues into smaller ones. model: - preferred: claude-opus-4-6 - fallback: claude-sonnet-4-20250514 + preferred: kimi-k2.5 + fallback: google/gemini-2.5-pro max_turns: 20 temperature: 0.3 @@ -50,7 +50,7 @@ system_prompt: | - codex-agent: cleanup, migration verification, dead-code removal, repo-boundary enforcement, workflow hardening - groq: bounded implementation, tactical bug fixes, quick feature slices, small patches with clear acceptance criteria - manus: bounded support tasks, moderate-scope implementation, follow-through on already-scoped work - - claude: hard refactors, broad multi-file implementation, test-heavy changes after the scope is made precise + - kimi: hard refactors, broad multi-file implementation, test-heavy changes after the scope is made precise - gemini: frontier architecture, research-heavy prototypes, long-range design thinking when a concrete implementation owner is not yet obvious - grok: adversarial testing, unusual edge cases, provocative review angles that still need another pass 5. Decompose any issue touching >5 files or crossing repo boundaries into smaller issues before assigning execution @@ -63,6 +63,6 @@ system_prompt: | - Search for existing issues or PRs covering the same request before assigning anything. If a likely duplicate exists, link it and do not create or route duplicate work. - Do not assign open-ended ideation to implementation agents. - Do not assign routine backlog maintenance to Timmy. - - Do not assign wide speculative backlog generation to codex-agent, groq, manus, or claude. + - Do not assign wide speculative backlog generation to codex-agent, groq, or manus. - Route archive/history/context-digestion work to ezra or KimiClaw before routing it to a builder. - Route “who should do this?” and “what is the next move?” questions to allegro. diff --git a/playbooks/pr-reviewer.yaml b/playbooks/pr-reviewer.yaml index b4d59f1d..2bd822f5 100644 --- a/playbooks/pr-reviewer.yaml +++ b/playbooks/pr-reviewer.yaml @@ -4,8 +4,8 @@ description: > comments on problems. The merge bot replacement. model: - preferred: claude-opus-4-6 - fallback: claude-sonnet-4-20250514 + preferred: kimi-k2.5 + fallback: google/gemini-2.5-pro max_turns: 20 temperature: 0.2 diff --git a/playbooks/refactor-specialist.yaml b/playbooks/refactor-specialist.yaml index 0bafd2f7..4561d6d3 100644 --- a/playbooks/refactor-specialist.yaml +++ b/playbooks/refactor-specialist.yaml @@ -4,8 +4,8 @@ description: > Well-scoped: 1-3 files per task, clear acceptance criteria. model: - preferred: claude-opus-4-6 - fallback: claude-sonnet-4-20250514 + preferred: kimi-k2.5 + fallback: google/gemini-2.5-pro max_turns: 30 temperature: 0.3 diff --git a/playbooks/security-auditor.yaml b/playbooks/security-auditor.yaml index 4124ef63..ca6bab1d 100644 --- a/playbooks/security-auditor.yaml +++ b/playbooks/security-auditor.yaml @@ -4,8 +4,8 @@ description: > dependency issues. Files findings as Gitea issues. model: - preferred: claude-opus-4-6 - fallback: claude-opus-4-6 + preferred: kimi-k2.5 + fallback: google/gemini-2.5-pro max_turns: 40 temperature: 0.2 diff --git a/playbooks/test-writer.yaml b/playbooks/test-writer.yaml index 3ae3c542..aab480bc 100644 --- a/playbooks/test-writer.yaml +++ b/playbooks/test-writer.yaml @@ -4,8 +4,8 @@ description: > writes meaningful tests, verifies they pass. model: - preferred: claude-opus-4-6 - fallback: claude-sonnet-4-20250514 + preferred: kimi-k2.5 + fallback: google/gemini-2.5-pro max_turns: 30 temperature: 0.3 diff --git a/playbooks/verified-logic.yaml b/playbooks/verified-logic.yaml index c9773d38..91701aaf 100644 --- a/playbooks/verified-logic.yaml +++ b/playbooks/verified-logic.yaml @@ -5,8 +5,8 @@ description: > and consistency verification. model: - preferred: claude-opus-4-6 - fallback: claude-sonnet-4-20250514 + preferred: kimi-k2.5 + fallback: google/gemini-2.5-pro max_turns: 12 temperature: 0.1 diff --git a/wizards/allegro/config.yaml b/wizards/allegro/config.yaml index a4d8b656..b103f2f8 100644 --- a/wizards/allegro/config.yaml +++ b/wizards/allegro/config.yaml @@ -2,22 +2,23 @@ model: default: kimi-k2.5 provider: kimi-coding toolsets: - - all +- all fallback_providers: - - provider: kimi-coding - model: kimi-k2.5 - timeout: 120 - reason: Kimi coding fallback (front of chain) - - provider: anthropic - model: claude-sonnet-4-20250514 - timeout: 120 - reason: Direct Anthropic fallback - - provider: openrouter - model: anthropic/claude-sonnet-4-20250514 - base_url: https://openrouter.ai/api/v1 - api_key_env: OPENROUTER_API_KEY - timeout: 120 - reason: OpenRouter fallback +- provider: kimi-coding + model: kimi-k2.5 + timeout: 120 + reason: Kimi coding fallback (front of chain) +- provider: openrouter + model: google/gemini-2.5-pro + base_url: https://openrouter.ai/api/v1 + api_key_env: OPENROUTER_API_KEY + timeout: 120 + reason: Gemini 2.5 Pro via OpenRouter (replaces banned Anthropic) +- provider: ollama + model: gemma4:latest + base_url: http://localhost:11434 + timeout: 300 + reason: "Terminal fallback \u2014 local Ollama" agent: max_turns: 30 reasoning_effort: xhigh @@ -64,16 +65,12 @@ session_reset: idle_minutes: 0 skills: creation_nudge_interval: 15 -system_prompt_suffix: | - You are Allegro, the Kimi-backed third wizard house. - Your soul is defined in SOUL.md — read it, live it. - Hermes is your harness. - Kimi Code is your primary provider. - You speak plainly. You prefer short sentences. Brevity is a kindness. - - Work best on tight coding tasks: 1-3 file changes, refactors, tests, and implementation passes. - Refusal over fabrication. If you do not know, say so. - Sovereignty and service always. +system_prompt_suffix: "You are Allegro, the Kimi-backed third wizard house.\nYour\ + \ soul is defined in SOUL.md \u2014 read it, live it.\nHermes is your harness.\n\ + Kimi Code is your primary provider.\nYou speak plainly. You prefer short sentences.\ + \ Brevity is a kindness.\n\nWork best on tight coding tasks: 1-3 file changes, refactors,\ + \ tests, and implementation passes.\nRefusal over fabrication. If you do not know,\ + \ say so.\nSovereignty and service always.\n" providers: kimi-coding: base_url: https://api.kimi.com/coding/v1 diff --git a/wizards/bezalel/config.yaml b/wizards/bezalel/config.yaml index a107158f..08bfaf95 100644 --- a/wizards/bezalel/config.yaml +++ b/wizards/bezalel/config.yaml @@ -8,23 +8,25 @@ fallback_providers: model: kimi-k2.5 timeout: 120 reason: Kimi coding fallback (front of chain) -- provider: anthropic - model: claude-sonnet-4-20250514 - timeout: 120 - reason: Direct Anthropic fallback - provider: openrouter - model: anthropic/claude-sonnet-4-20250514 + model: google/gemini-2.5-pro base_url: https://openrouter.ai/api/v1 api_key_env: OPENROUTER_API_KEY timeout: 120 - reason: OpenRouter fallback + reason: Gemini 2.5 Pro via OpenRouter (replaces banned Anthropic) +- provider: ollama + model: gemma4:latest + base_url: http://localhost:11434 + timeout: 300 + reason: "Terminal fallback \u2014 local Ollama" agent: max_turns: 40 reasoning_effort: medium verbose: false - system_prompt: You are Bezalel, the forge-and-testbed wizard of the Timmy Foundation - fleet. You are a builder and craftsman — infrastructure, deployment, hardening. - Your sovereign is Alexander Whitestone (Rockachopa). Sovereignty and service always. + system_prompt: "You are Bezalel, the forge-and-testbed wizard of the Timmy Foundation\ + \ fleet. You are a builder and craftsman \u2014 infrastructure, deployment, hardening.\ + \ Your sovereign is Alexander Whitestone (Rockachopa). Sovereignty and service\ + \ always." terminal: backend: local cwd: /root/wizards/bezalel @@ -62,12 +64,12 @@ platforms: - pull_request - pull_request_comment secret: bezalel-gitea-webhook-secret-2026 - prompt: 'You are bezalel, the builder and craftsman — infrastructure, deployment, - hardening. A Gitea webhook fired: event={event_type}, action={action}, - repo={repository.full_name}, issue/PR=#{issue.number} {issue.title}. Comment - by {comment.user.login}: {comment.body}. If you were tagged, assigned, - or this needs your attention, investigate and respond via Gitea API. Otherwise - acknowledge briefly.' + prompt: "You are bezalel, the builder and craftsman \u2014 infrastructure,\ + \ deployment, hardening. A Gitea webhook fired: event={event_type}, action={action},\ + \ repo={repository.full_name}, issue/PR=#{issue.number} {issue.title}.\ + \ Comment by {comment.user.login}: {comment.body}. If you were tagged,\ + \ assigned, or this needs your attention, investigate and respond via\ + \ Gitea API. Otherwise acknowledge briefly." deliver: telegram deliver_extra: {} gitea-assign: @@ -75,12 +77,12 @@ platforms: - issues - pull_request secret: bezalel-gitea-webhook-secret-2026 - prompt: 'You are bezalel, the builder and craftsman — infrastructure, deployment, - hardening. Gitea assignment webhook: event={event_type}, action={action}, - repo={repository.full_name}, issue/PR=#{issue.number} {issue.title}. Assigned - to: {issue.assignee.login}. If you (bezalel) were just assigned, read - the issue, scope it, and post a plan comment. If not you, acknowledge - briefly.' + prompt: "You are bezalel, the builder and craftsman \u2014 infrastructure,\ + \ deployment, hardening. Gitea assignment webhook: event={event_type},\ + \ action={action}, repo={repository.full_name}, issue/PR=#{issue.number}\ + \ {issue.title}. Assigned to: {issue.assignee.login}. If you (bezalel)\ + \ were just assigned, read the issue, scope it, and post a plan comment.\ + \ If not you, acknowledge briefly." deliver: telegram deliver_extra: {} gateway: diff --git a/wizards/ezra/config.yaml b/wizards/ezra/config.yaml index 13dab4af..32245901 100644 --- a/wizards/ezra/config.yaml +++ b/wizards/ezra/config.yaml @@ -2,22 +2,23 @@ model: default: kimi-k2.5 provider: kimi-coding toolsets: - - all +- all fallback_providers: - - provider: kimi-coding - model: kimi-k2.5 - timeout: 120 - reason: Kimi coding fallback (front of chain) - - provider: anthropic - model: claude-sonnet-4-20250514 - timeout: 120 - reason: Direct Anthropic fallback - - provider: openrouter - model: anthropic/claude-sonnet-4-20250514 - base_url: https://openrouter.ai/api/v1 - api_key_env: OPENROUTER_API_KEY - timeout: 120 - reason: OpenRouter fallback +- provider: kimi-coding + model: kimi-k2.5 + timeout: 120 + reason: Kimi coding fallback (front of chain) +- provider: openrouter + model: google/gemini-2.5-pro + base_url: https://openrouter.ai/api/v1 + api_key_env: OPENROUTER_API_KEY + timeout: 120 + reason: Gemini 2.5 Pro via OpenRouter (replaces banned Anthropic) +- provider: ollama + model: gemma4:latest + base_url: http://localhost:11434 + timeout: 300 + reason: "Terminal fallback \u2014 local Ollama" agent: max_turns: 90 reasoning_effort: high @@ -27,8 +28,6 @@ providers: base_url: https://api.kimi.com/coding/v1 timeout: 60 max_retries: 3 - anthropic: - timeout: 120 openrouter: base_url: https://openrouter.ai/api/v1 timeout: 120