From ab3b67af926e9b0e5bb7fa74e94233ee7ef074fa Mon Sep 17 00:00:00 2001 From: Lap Tran Date: Mon, 21 Sep 2026 17:38:35 -0400 Subject: [PATCH] gate: add kunchenguid/no-mistakes for all Nix harnesses - home.nix: add home.activation.noMistakes (declarative install to ~/.no-mistakes/bin + daemon via launchd, global config fallback agent: [pi, opencode, grok, claude, codex] covering every harness declared in Nix; fix shadowing of jonathanong npm no-mistakes) - ~/.no-mistakes/config.yaml: switched from auto to ordered fallback, pi first (firstmate crewmates), then opencode/grok - home/.pi/agent/*, home/.grok/config.toml, home/.config/opencode2: align to oMLX/qwen3.6-35b local model (was mixed Talos/genesis) - rebuild.sh: ensure grok-build upgrade and OpenCode 1.x install on rebuild (stable CLI for free-tier, opencode2 beta is 426 there) - dotfiles repo: no-mistakes init (gate at ~/.no-mistakes/repos/916cb6ded81b.git, remote no-mistakes) --- home.nix | 37 +++++++++++ home/.config/opencode2/opencode.json | 91 ++-------------------------- home/.grok/config.toml | 34 ++++------- home/.pi/agent/models.json | 64 +++---------------- home/.pi/agent/settings.json | 20 ++---- rebuild.sh | 26 ++++++++ 6 files changed, 91 insertions(+), 181 deletions(-) diff --git a/home.nix b/home.nix index 6f1020e..81429f8 100644 --- a/home.nix +++ b/home.nix @@ -227,5 +227,42 @@ in fi "$npm" install -g --allow-scripts=@opencode-ai/cli @opencode-ai/cli@beta ''; + + # kunchenguid/no-mistakes gate (git push no-mistakes) - declarative install + daemon + global config + # Covers every harness declared in Nix: pi (pi-coding-agent), opencode (oc2/fm), grok (grok-build), + # plus claude/codex aspirational (aliases cc/co). Binary lives in ~/.no-mistakes/bin + # with symlink ~/.local/bin/no-mistakes (installer default). Do NOT npm install -g no-mistakes + # - that npm name is jonathanong's static-analysis tool (shadowing bug fixed 2026-09-21). + home.activation.noMistakes = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + set -euo pipefail + bin="$HOME/.no-mistakes/bin/no-mistakes" + link="$HOME/.local/bin/no-mistakes" + # Install/refresh via upstream installer if missing or not kunchenguid build + if [ ! -x "$bin" ] || ! "$bin" --version 2>/dev/null | grep -q "kunchenguid\|v1\."; then + if [ -x "$bin" ]; then + echo "no-mistakes: replacing unexpected binary at $bin" >&2 + fi + curl -fsSL https://raw.githubusercontent.com/kunchenguid/no-mistakes/main/docs/install.sh | sh + fi + # Ensure global config covers all Nix harnesses (idempotent - only writes if missing or still `agent: auto`) + cfg="$HOME/.no-mistakes/config.yaml" + if [ -f "$cfg" ] && grep -qE '^\s*agent:\s*auto\s*$' "$cfg"; then + tmp="$(mktemp)" + awk ' + /^\s*agent:\s*auto\s*$/ { + print "# Managed by dotfiles/home.nix home.activation.noMistakes"; + print "agent: [pi, opencode, grok, claude, codex]"; + next + } + { print } + ' "$cfg" > "$tmp" && mv "$tmp" "$cfg" + fi + if [ ! -f "$cfg" ]; then + mkdir -p "$(dirname "$cfg")" + printf 'agent: [pi, opencode, grok, claude, codex]\n' > "$cfg" + fi + # Ensure daemon running (launchd on macOS) + "$bin" daemon restart >/dev/null 2>&1 || "$bin" daemon start >/dev/null 2>&1 || true + ''; } diff --git a/home/.config/opencode2/opencode.json b/home/.config/opencode2/opencode.json index 9cda252..709b232 100644 --- a/home/.config/opencode2/opencode.json +++ b/home/.config/opencode2/opencode.json @@ -1,52 +1,8 @@ { "$schema": "https://opencode.ai/config.json", - "model": "talos/ornith-worker-1", + "model": "omlx/qwen3.6-35b", "autoupdate": false, "providers": { - "talos": { - "name": "Talos Cluster", - "package": "@opencode-ai/ai/providers/openai-compatible", - "settings": { - "baseURL": "http://10.37.0.165:30081/v1" - }, - "models": { - "ornith-worker-1": { - "modelID": "ornith-worker-1", - "name": "Ornith Worker 1 (RTX 4070 Super)", - "capabilities": { - "tools": true, - "input": ["text"], - "output": ["text"] - }, - "limit": { - "context": 132768, - "output": 65536 - } - } - } - }, - "talos-worker-2": { - "name": "Talos Worker 2", - "package": "@opencode-ai/ai/providers/openai-compatible", - "settings": { - "baseURL": "http://10.37.0.219:30082/v1" - }, - "models": { - "genesis-hermes-worker-2": { - "modelID": "/models/Hermes3.6-35B-A3B-Uncensored-Genesis-V6-APEX.gguf", - "name": "Genesis Hermes V6 APEX (RTX 3080 12GB, vision)", - "capabilities": { - "tools": true, - "input": ["text"], - "output": ["text"] - }, - "limit": { - "context": 131072, - "output": 65536 - } - } - } - }, "omlx": { "name": "oMLX (Local)", "package": "@opencode-ai/ai/providers/openai-compatible", @@ -54,48 +10,9 @@ "baseURL": "http://localhost:8000/v1" }, "models": { - "ornith-35b": { - "modelID": "Ornith-35B", - "name": "Ornith 35B (Qwen3.5 MoE, 4-bit, 131K ctx)", - "capabilities": { - "tools": true, - "input": ["text"], - "output": ["text"] - }, - "limit": { - "context": 131072, - "output": 65536 - } - }, - "ornith-5bit": { - "modelID": "Ornith-1.0-35B-5bit-mlx", - "name": "Ornith 35B (5-bit, 262K ctx)", - "capabilities": { - "tools": true, - "input": ["text"], - "output": ["text"] - }, - "limit": { - "context": 262144, - "output": 65536 - } - }, - "ternary-bonsai": { - "modelID": "Ternary-Bonsai-27B-mlx-2bit", - "name": "Ternary Bonsai 27B (2-bit, ternary weights)", - "capabilities": { - "tools": true, - "input": ["text"], - "output": ["text"] - }, - "limit": { - "context": 131072, - "output": 65536 - } - }, - "dagger-qwen36-27b": { - "modelID": "Dagger-Qwen3.6-27B-MLX", - "name": "Dagger Qwen3.6 27B MLX (M5, 32GB)", + "qwen3.6-35b": { + "modelID": "Jundot/Qwen3.6-35B-A3B-oQ4-mtp", + "name": "Qwen 3.6 35B (o4-mtp)", "capabilities": { "tools": true, "input": ["text"], diff --git a/home/.grok/config.toml b/home/.grok/config.toml index 05421e3..e274b77 100644 --- a/home/.grok/config.toml +++ b/home/.grok/config.toml @@ -1,37 +1,24 @@ -# Grok Build user config - managed via home-manager (edit here, then rebuild if needed). -# Source of truth: home/.grok/config.toml in dotfiles. - [marketplace] official_marketplace_auto_installed = true +default_skills_installs_purged = true [[marketplace.sources]] name = "xAI Official" git = "https://github.com/xai-org/plugin-marketplace.git" [models] -default = "ornith" +default = "qwen" -[model.ornith] -model = "/models/ornith-1.0-35b-Q6_K.gguf" -base_url = "http://10.37.0.165:30081/v1" -name = "Ornith 1.0 35B (Talos)" -description = "Local Ornith-1.0-35B Q6_K via llama.cpp on Talos worker 1 (RTX 4070 Super)" +[model.qwen] +model = "Jundot/Qwen3.6-35B-A3B-oQ4-mtp" +base_url = "http://localhost:8000/v1" +name = "Qwen 3.6 35B (o4-mtp)" +description = "Qwen3.6-35B-A3B with o4-mtp on oMLX" api_backend = "chat_completions" temperature = 0.7 top_p = 0.95 -context_window = 132768 -max_completion_tokens = 16384 - -[model.genesis] -model = "/models/Hermes3.6-35B-A3B-Uncensored-Genesis-V6-APEX.gguf" -base_url = "http://10.37.0.219:30082/v1" -name = "Genesis Hermes V6 (Talos W2)" -description = "Local Qwen3.6-35B-A3B Genesis Hermes V6 APEX + vision via llama.cpp on Talos worker 2 (RTX 3080)" -api_backend = "chat_completions" -temperature = 0.7 -top_p = 0.95 -context_window = 131072 -max_completion_tokens = 16384 +context_window = 65536 +max_completion_tokens = 65536 [ui] theme = "rosepine" @@ -43,3 +30,6 @@ compact_mode = false [cli] installer = "internal" + +[privacy] +privacy_banner_acked = "2026-09-21T16:02:21Z" diff --git a/home/.pi/agent/models.json b/home/.pi/agent/models.json index 5359eec..23e4a08 100644 --- a/home/.pi/agent/models.json +++ b/home/.pi/agent/models.json @@ -1,57 +1,5 @@ { "providers": { - "genesis": { - "baseUrl": "http://10.37.0.219:30082/v1", - "api": "openai-completions", - "apiKey": "none", - "compat": { - "maxTokensField": "max_tokens" - }, - "models": [ - { - "id": "genesis", - "name": "Hermes3.6-35B-A3B-Uncensored-Genesis-V6-APEX (Local)", - "reasoning": false, - "input": [ - "text" - ], - "contextWindow": 132864, - "maxTokens": 32768, - "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, - "cacheWrite": 0 - } - } - ] - }, - "ornith": { - "baseUrl": "http://10.37.0.165:30081/v1", - "api": "openai-completions", - "apiKey": "none", - "compat": { - "maxTokensField": "max_tokens" - }, - "models": [ - { - "id": "ornith", - "name": "Ornith 1.0 35B (Local)", - "reasoning": false, - "input": [ - "text" - ], - "contextWindow": 132864, - "maxTokens": 32768, - "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, - "cacheWrite": 0 - } - } - ] - }, "omlx": { "baseUrl": "http://localhost:8000/v1", "api": "openai-completions", @@ -61,12 +9,14 @@ }, "models": [ { - "id": "Dagger-Qwen3.6-27B-MLX", - "name": "Dagger Qwen3.6 27B MLX (M5, 32GB)", - "reasoning": true, - "input": ["text"], + "id": "Jundot/Qwen3.6-35B-A3B-oQ4-mtp", + "name": "Qwen 3.6 35B (o4-mtp)", + "reasoning": false, + "input": [ + "text" + ], "contextWindow": 65536, - "maxTokens": 32768, + "maxTokens": 65536, "cost": { "input": 0, "output": 0, diff --git a/home/.pi/agent/settings.json b/home/.pi/agent/settings.json index 17f9b10..088748a 100644 --- a/home/.pi/agent/settings.json +++ b/home/.pi/agent/settings.json @@ -1,23 +1,13 @@ { "lastChangelogVersion": "0.84.1", "theme": "rose-pine-moon", - "defaultProvider": "ornith", - "defaultModel": "ornith", + "defaultProvider": "omlx", + "defaultModel": "qwen3.6-35b", "models": [ { - "name": "Genesis (Local)", - "provider": "genesis", - "model": "/models/Hermes3.6-35B-A3B-Uncensored-Genesis-V6-APEX.gguf" - }, - { - "name": "Ornith 1.0 35B (Local)", - "provider": "ornith", - "model": "/models/ornith-1.0-35b-Q6_K.gguf" - }, - { - "name": "Dagger Qwen3.6 27B MLX (M5)", + "name": "Qwen 3.6 35B (o4-mtp)", "provider": "omlx", - "model": "Dagger-Qwen3.6-27B-MLX" + "model": "Jundot/Qwen3.6-35B-A3B-oQ4-mtp" } ], "compaction": { @@ -44,4 +34,4 @@ "steeringMode": "all", "followUpMode": "all", "collapseChangelog": true -} \ No newline at end of file +} diff --git a/rebuild.sh b/rebuild.sh index d2879c5..3088f8b 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -1,10 +1,36 @@ #!/usr/bin/env bash # Rebuild nix-darwin + home-manager. Rotates stale home-manager *.backup files # so a second switch never fails with "would be clobbered". +# Also upgrades grok-build and installs OpenCode 1.x (stable CLI for free-tier). set -euo pipefail DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" ln -sfn "$DIR" ~/.dotfiles +# Upgrade grok-build to latest (Homebrew cask). +# Skip if Homebrew API is unreachable (DNS/network issues). +echo "==> Upgrading grok-build..." +if brew upgrade grok-build 2>&1; then + echo "==> grok-build upgrade complete" +else + echo "==> WARNING: grok-build upgrade failed (network issue). Skipping." +fi + +# Install OpenCode 1.x (stable CLI, binary "opencode") if absent. +# Required for free-tier models; opencode2 beta returns HTTP 426 on those endpoints. +# Uses Homebrew's npm (not Nix's npm) to avoid EACCES on the store. +# Skip if npm is unavailable (e.g., network issues preventing fetch). +OPENCODE_BIN=/opt/homebrew/bin/opencode +if [ ! -x "$OPENCODE_BIN" ]; then + echo "==> Installing OpenCode 1.x (stable) via Homebrew npm..." + if /opt/homebrew/bin/npm install -g --allow-scripts=opencode-ai opencode-ai@1.18 2>&1; then + echo "==> OpenCode 1.x installed successfully" + else + echo "==> WARNING: OpenCode 1.x installation failed (network issue). Skipping." + fi +else + echo "==> OpenCode 1.x already installed: $(${OPENCODE_BIN} --version)" +fi + stamp="$(date +%Y%m%d-%H%M%S)" # Paths home-manager manages via home.file (regular files become out-of-store symlinks). managed=(