tachibot-mcp 2.26.0 → 2.27.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/README.md CHANGED
@@ -4,18 +4,18 @@
4
4
 
5
5
  ### Multi-Model AI Orchestration Platform
6
6
 
7
- [![Version](https://img.shields.io/badge/version-2.26.0-blue.svg)](https://www.npmjs.com/package/tachibot-mcp)
8
- [![Tools](https://img.shields.io/badge/tools-64_active-brightgreen.svg)](#-tool-ecosystem-64-tools)
7
+ [![Version](https://img.shields.io/badge/version-2.27.0-blue.svg)](https://www.npmjs.com/package/tachibot-mcp)
8
+ [![Tools](https://img.shields.io/badge/tools-65_active-brightgreen.svg)](#-tool-ecosystem-65-tools)
9
9
  [![License](https://img.shields.io/badge/license-AGPL--3.0-green.svg)](LICENSE)
10
10
  [![Node](https://img.shields.io/badge/node-%3E%3D22.0.0-brightgreen.svg)](https://nodejs.org)
11
11
  [![MCP](https://img.shields.io/badge/MCP-Compatible-purple.svg)](https://modelcontextprotocol.io)
12
12
 
13
- **64 AI tools. 12 providers. One protocol.**
13
+ **65 AI tools. 12 providers. One protocol.**
14
14
 
15
15
  Orchestrate Perplexity, Grok, GPT-5.5, Gemini, Qwen, Kimi K2.7-Code, and MiniMax M3
16
16
  from Claude Code, Claude Desktop, Cursor, or any MCP client.
17
17
 
18
- [Get Started](#-quick-start) · [View Tools](#-tool-ecosystem-64-tools) · [Documentation](https://tachibot.com/docs)
18
+ [Get Started](#-quick-start) · [View Tools](#-tool-ecosystem-65-tools) · [Documentation](https://tachibot.com/docs)
19
19
 
20
20
  <br>
21
21
 
@@ -28,25 +28,37 @@ from Claude Code, Claude Desktop, Cursor, or any MCP client.
28
28
 
29
29
  ---
30
30
 
31
- ## What's New in v2.26.0
31
+ ## What's New
32
32
 
33
- ### Prompt stack, modernized
33
+ ### v2.27.0
34
+ - **Grok 4.5** (Jul 8 flagship, "Opus-class") now powers all Grok tools, with automatic fallback to `grok-4.3` while xAI's region-staged rollout completes (EU mid-July) — tools keep working everywhere, and 4.5 activates by itself.
35
+ - **`grok_search_lite`** (new tool, 65 total) — the same Grok live search on `grok-4-1-fast` ($0.20/$0.50, 2M ctx), ~10x cheaper than `grok_search`. Use it for high-volume lookups and jury/council fan-outs.
36
+ - **GPT-5.6 tiers** — `openai_*` tools move to `gpt-5.6-sol` (flagship, same $5/$30 as 5.5 but stronger), `terra` for code (5.5-level at half price), `luna` for explanations ($1/$6). The $30/$180 `gpt-5.5-pro` tier is replaced by sol + reasoning effort; a permission fallback (sol → terra → 5.5) covers org-gated accounts.
37
+
38
+ ### v2.26.1
39
+ - **`/test` and `/audit` skills** (19 skills total) — `/test` generates runnable tests via `testgen`; `/audit` runs an OWASP/CWE security review via `security_review`.
40
+ - **Skill install in the wizard** — `tachibot init` now offers to install Claude Code skills with a per-skill skip choice (`[Enter]`=all · `[s]`=choose which to skip · `[n]`=none). Skills are opt-in — `postinstall` no longer writes to `~/.claude` silently (`npm run install-skills` still installs all non-interactively).
41
+ - **Fixes** — the one-click `.mcpb` extension now points at a valid entry point (was broken) and tracks the package version; `tachibot init` exits cleanly on non-interactive/CI stdin instead of hanging.
42
+
43
+ ### v2.26.0
44
+
45
+ #### Prompt stack, modernized
34
46
  - **`refine_prompt`** (new tool) &mdash; opt-in prompt improver on a cheap/fast model: raw query → goal-first brief + **what changed** + **open questions**. Never auto-fires, never executes anything — you review, then use the brief. In Claude Code, `/prompt refine` presents the open questions as clickable choices and merges your answers into a final brief.
35
47
  - **Curated technique list** &mdash; `list_prompt_techniques` now defaults to the ~9 core techniques that still help 2026 reasoning models (output contracts like `scot`, `pre_mortem`, `bdd_spec`); `all=true` for the full 31.
36
48
  - **`technique="auto"`** &mdash; `preview_prompt_technique` recommends the right technique for your task, with reasons. Ask `tachi` "improve my prompt" for the symptom-based menu.
37
49
 
38
- ### Setup, de-mystified
50
+ #### Setup, de-mystified
39
51
  - **`tachibot init`** (new CLI wizard) &mdash; detects your API keys and clients, prints the exact config for Claude Code and Claude Desktop. Never writes or echoes keys.
40
52
  - **One-click Claude Desktop install** &mdash; download the `.mcpb` from the latest release and double-click. No JSON editing.
41
53
  - **`doctor`** &mdash; shows which keys are set, which tools are visible vs hidden and why, and what to try first.
42
54
 
43
- ### New tools & skills (64 tools · 17 skills)
55
+ #### New tools & skills (65 tools · 19 skills)
44
56
  - `debug_triage` &mdash; ranked root-cause hypotheses with the cheapest discriminating check for each (Grok 4.3)
45
57
  - `spec_writer` &mdash; loose request → reviewable spec: user stories, Given/When/Then, out-of-scope, open questions (GPT-5.5)
46
58
  - `diff_review` / `plan_critique` / `testgen` / `security_review` &mdash; multi-model diff review, adversarial plan red-team, test generation, OWASP/CWE audit
47
59
  - Skills: `/review`, `/redteam`, `/spec`, `/triage`, `/setup`
48
60
 
49
- ### Fixes
61
+ #### Fixes
50
62
  - `focus` orchestration screen: 37 lines of repeated scaffolding → 10 focused lines
51
63
  - `npm test` exits 0 again (uncancelled race timers leaked past Jest teardown)
52
64
  - GPT-5.5 high-effort reasoning no longer cut off at 3 minutes (timeout 180s → 600s)
@@ -55,7 +67,7 @@ from Claude Code, Claude Desktop, Cursor, or any MCP client.
55
67
 
56
68
  ## Skills (Claude Code)
57
69
 
58
- TachiBot ships with 17 slash commands for Claude Code. These orchestrate the tools into powerful workflows:
70
+ TachiBot ships with 19 slash commands for Claude Code. These orchestrate the tools into powerful workflows:
59
71
 
60
72
  | Skill | What it does | Example |
61
73
  |-------|-------------|---------|
@@ -75,6 +87,8 @@ TachiBot ships with 17 slash commands for Claude Code. These orchestrate the too
75
87
  | `/review` | Multi-model diff review — panel + Gemini judge verdict | `/review` (or paste a diff) |
76
88
  | `/redteam` | Adversarial plan red-team — pre-mortem, risks, plan edits | `/redteam <paste plan>` |
77
89
  | `/triage` | Ranked root-cause bug triage | `/triage <paste stack trace>` |
90
+ | `/test` | Generate runnable tests (edge cases first) | `/test src/auth.ts` |
91
+ | `/audit` | Security review — OWASP/CWE findings + fixes | `/audit the login handler` |
78
92
  | `/tachi` | Help - see available skills, tools, key status | `/tachi` |
79
93
 
80
94
  Skills automatically adapt to your configured API keys. Even with just 1-2 providers, all skills work.
@@ -86,7 +100,7 @@ Skills automatically adapt to your configured API keys. Even with just 1-2 provi
86
100
  ## Key Features
87
101
 
88
102
  ### Multi-Model Intelligence
89
- - **64 AI Tools** across 12 providers &mdash; Perplexity, Grok, GPT-5, Gemini, Qwen, Kimi, MiniMax, DeepSeek, GLM (Zhipu), StepFun, ERNIE (Baidu), plus free local models (Ollama / LM Studio / llama.cpp / vLLM)
103
+ - **65 AI Tools** across 12 providers &mdash; Perplexity, Grok, GPT-5, Gemini, Qwen, Kimi, MiniMax, DeepSeek, GLM (Zhipu), StepFun, ERNIE (Baidu), plus free local models (Ollama / LM Studio / llama.cpp / vLLM)
90
104
  - **Gemini 3.5 Flash** (`gemini-3.5-flash`, GA May 19 2026) &mdash; Flash/search tier; reasoning default stays `gemini-3.1-pro-preview`
91
105
  - **Multi-Model Council** &mdash; planner_maker synthesizes plans from 5+ models into bite-sized TDD steps
92
106
  - **Smart Routing** &mdash; Automatic model selection for optimal results
@@ -102,11 +116,11 @@ Skills automatically adapt to your configured API keys. Even with just 1-2 provi
102
116
  | Profile | Tools | Best For |
103
117
  |---------|-------|----------|
104
118
  | **Minimal** | 13 | Quick tasks, low token budget |
105
- | **Research Power** | 35 | Deep investigation, multi-source |
119
+ | **Research Power** | 36 | Deep investigation, multi-source |
106
120
  | **Code Focus** | 42 | Software development, SWE tasks |
107
- | **Balanced** | 53 | General-purpose, mixed workflows |
108
- | **Heavy Coding** | 57 | Max code tools + agentic workflows |
109
- | **Full** (default) | 64 | Everything enabled |
121
+ | **Balanced** | 54 | General-purpose, mixed workflows |
122
+ | **Heavy Coding** | 58 | Max code tools + agentic workflows |
123
+ | **Full** (default) | 65 | Everything enabled |
110
124
 
111
125
  ### Developer Experience
112
126
  - **Claude Code** &mdash; First-class support
@@ -186,10 +200,10 @@ See [Installation Guide](docs/INSTALLATION_BOTH.md) for detailed instructions.
186
200
 
187
201
  ---
188
202
 
189
- ## Tool Ecosystem (64 Tools)
203
+ ## Tool Ecosystem (65 Tools)
190
204
 
191
- ### Research & Search (5)
192
- `perplexity_ask` &#183; `perplexity_reason` &#183; `grok_search` &#183; `openai_search` &#183; `gemini_search`
205
+ ### Research & Search (6)
206
+ `perplexity_ask` &#183; `perplexity_reason` &#183; `grok_search` &#183; `grok_search_lite` &#183; `openai_search` &#183; `gemini_search`
193
207
 
194
208
  ### Reasoning & Planning (14)
195
209
  `grok_reason` &#183; `openai_reason` &#183; `qwen_reason` &#183; `qwq_reason` &#183; `kimi_thinking` &#183; `kimi_decompose` &#183; `deepseek_reason` &#183; `glm_reason` &#183; `stepfun_reason` &#183; `ernie_reason` &#183; `planner_maker` &#183; `planner_runner` &#183; `list_plans` &#183; `spec_writer`
@@ -8,6 +8,7 @@ import * as fs from "node:fs";
8
8
  import * as os from "node:os";
9
9
  import * as path from "node:path";
10
10
  import * as readline from "node:readline/promises";
11
+ import { fileURLToPath } from "node:url";
11
12
  const KEYS = [
12
13
  { name: "OpenRouter", envVar: "OPENROUTER_API_KEY", unlocks: "DeepSeek/GLM/Kimi/Qwen/MiniMax/StepFun/ERNIE + planner (~30 tools)" },
13
14
  { name: "Perplexity", envVar: "PERPLEXITY_API_KEY", unlocks: "web research tools" },
@@ -86,6 +87,62 @@ export function buildDesktopSnippet(setup, profile) {
86
87
  return JSON.stringify({ mcpServers: { tachibot: { command: "tachibot", env } } }, null, 2);
87
88
  }
88
89
  const mask = (v) => (v ? `${v.slice(0, 6)}…` : "");
90
+ /** The package's bundled skills dir. dist/src/cli/init.js → up 3 → pkg root. */
91
+ export function resolveSkillsDir() {
92
+ const here = path.dirname(fileURLToPath(import.meta.url));
93
+ return path.resolve(here, "..", "..", "..", "skills");
94
+ }
95
+ /** Read `skills/<name>/SKILL.md`, pulling the frontmatter `description`. */
96
+ export function listAvailableSkills(skillsDir) {
97
+ let entries;
98
+ try {
99
+ entries = fs.readdirSync(skillsDir).sort();
100
+ }
101
+ catch {
102
+ return [];
103
+ }
104
+ const skills = [];
105
+ for (const name of entries) {
106
+ let text;
107
+ try {
108
+ text = fs.readFileSync(path.join(skillsDir, name, "SKILL.md"), "utf8");
109
+ }
110
+ catch {
111
+ continue;
112
+ } // not a skill dir
113
+ const m = text.match(/^description:\s*(.+)$/m);
114
+ skills.push({ name, description: m ? m[1].trim() : "" });
115
+ }
116
+ return skills;
117
+ }
118
+ /**
119
+ * Parse a "skip which" answer ("1,3, 5") into a set of 0-based indices over a
120
+ * list of `count`. Blanks, non-numbers, and out-of-range tokens are ignored so
121
+ * a fat-fingered entry never throws or skips the wrong skill.
122
+ */
123
+ export function parseSkipSelection(input, count) {
124
+ const skip = new Set();
125
+ for (const tok of input.split(/[\s,]+/).filter(Boolean)) {
126
+ const n = Number(tok);
127
+ if (Number.isInteger(n) && n >= 1 && n <= count)
128
+ skip.add(n - 1);
129
+ }
130
+ return skip;
131
+ }
132
+ /** Copy the chosen skills' SKILL.md into `targetDir/<name>/`. Returns installed names. */
133
+ export function installSkills(names, skillsDir, targetDir) {
134
+ const installed = [];
135
+ for (const name of names) {
136
+ const src = path.join(skillsDir, name, "SKILL.md");
137
+ if (!fs.existsSync(src))
138
+ continue;
139
+ const dest = path.join(targetDir, name);
140
+ fs.mkdirSync(dest, { recursive: true });
141
+ fs.copyFileSync(src, path.join(dest, "SKILL.md"));
142
+ installed.push(name);
143
+ }
144
+ return installed;
145
+ }
89
146
  export async function runInitWizard() {
90
147
  const setup = detectSetup();
91
148
  const out = (s) => process.stdout.write(s + "\n");
@@ -100,12 +157,27 @@ export async function runInitWizard() {
100
157
  out("\nClients detected:");
101
158
  out(` ${setup.clients.claudeCode ? "✓" : "✗"} Claude Code (claude on PATH)`);
102
159
  out(` ${setup.clients.claudeDesktop ? "✓" : "✗"} Claude Desktop${setup.clients.desktopConfigPath ? ` (${setup.clients.desktopConfigPath})` : ""}`);
160
+ // Non-interactive (piped stdin / CI): prompting would hang on EOF with an
161
+ // "unsettled top-level await". Print the config for both clients with sane
162
+ // defaults and how to install skills, then exit cleanly.
163
+ if (!process.stdin.isTTY) {
164
+ out("\n(non-interactive: printing full config — run in a terminal to choose options)\n");
165
+ out("— Claude Code —\n");
166
+ out(buildClaudeCodeCommand(setup));
167
+ out("\n— Claude Desktop — double-click the .mcpb from GitHub releases, or merge into");
168
+ out((setup.clients.desktopConfigPath ?? desktopConfigPath()) + ":\n");
169
+ out(buildDesktopSnippet(setup, "full"));
170
+ const n = listAvailableSkills(resolveSkillsDir()).length;
171
+ out(`\nClaude Code skills (${n}): install with npm run install-skills (or re-run this wizard in a terminal to choose which).`);
172
+ out("\nOnce connected, run the `doctor` tool to see which tools your keys unlock.");
173
+ return;
174
+ }
103
175
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
104
176
  try {
105
177
  const choice = (await rl.question("\nSet up for: [1] Claude Code [2] Claude Desktop [3] both [q] quit > ")).trim();
106
178
  if (choice === "q")
107
179
  return;
108
- const profile = (await rl.question("Profile [full=all 63 tools | balanced | code_focus] (default: full) > ")).trim() || "full";
180
+ const profile = (await rl.question("Profile [full=all 64 tools | balanced | code_focus] (default: full) > ")).trim() || "full";
109
181
  if (choice === "1" || choice === "3") {
110
182
  out("\n— Claude Code — run this (fill in your real keys):\n");
111
183
  out(buildClaudeCodeCommand(setup));
@@ -117,6 +189,27 @@ export async function runInitWizard() {
117
189
  out(buildDesktopSnippet(setup, profile));
118
190
  out("\nThen restart Claude Desktop.");
119
191
  }
192
+ // Skills — Claude Code slash commands, opt-in with per-skill skip.
193
+ const skillsDir = resolveSkillsDir();
194
+ const available = listAvailableSkills(skillsDir);
195
+ if (available.length > 0 && choice !== "2") {
196
+ const target = path.join(os.homedir(), ".claude", "skills");
197
+ const ans = (await rl.question(`\nInstall ${available.length} Claude Code skills to ${target}? [Enter]=all · [s]=choose which to skip · [n]=none > `)).trim().toLowerCase();
198
+ if (ans !== "n") {
199
+ let chosen = available.map((s) => s.name);
200
+ if (ans === "s") {
201
+ out("");
202
+ available.forEach((s, i) => out(` ${String(i + 1).padStart(2)}. /${s.name} — ${s.description}`));
203
+ const skip = parseSkipSelection((await rl.question("\nSkip which? (comma-separated numbers, blank = skip none) > ")).trim(), available.length);
204
+ chosen = available.filter((_, i) => !skip.has(i)).map((s) => s.name);
205
+ }
206
+ const installed = installSkills(chosen, skillsDir, target);
207
+ out(`\n✓ Installed ${installed.length} skill${installed.length === 1 ? "" : "s"}: ${installed.map((n) => "/" + n).join(", ")}`);
208
+ const skipped = available.filter((s) => !installed.includes(s.name));
209
+ if (skipped.length)
210
+ out(` Skipped: ${skipped.map((s) => "/" + s.name).join(", ")}`);
211
+ }
212
+ }
120
213
  out("\nFirst thing to run once connected: the `doctor` tool — it shows which tools your keys unlock.");
121
214
  }
122
215
  finally {
@@ -6,26 +6,33 @@
6
6
  // =============================================================================
7
7
  // OPENAI MODELS (provider-based naming)
8
8
  // =============================================================================
9
- // GPT-5.5 released Apr 23, 2026 - CURRENT (agentic-focused, 1.1M context, omnimodal)
10
- // GPT-5.4 released Mar 5, 2026 - previous flagship (kept for MINI tier no 5.5-mini yet)
11
- // Model is "gpt-5.5", "thinking" is controlled by reasoning.effort parameter
12
- // OpenRouter uses prefix: openai/gpt-5.5, openai/gpt-5.5-pro
9
+ // GPT-5.6 released Jul 9, 2026 - CURRENT. Three durable tiers replace the pro/mini split:
10
+ // sol (flagship $5/$30) / terra (balanced $2.50/$15) / luna (fast $1/$6). All 1.05M ctx, 128K out.
11
+ // "Pro" is no longer a model: sol + reasoning.effort (the $30/$180 gpt-5.5-pro tier is gone).
12
+ // GPT-5.5 (Apr 23, 2026) kept as fallback. OpenRouter uses prefix: openai/gpt-5.6-sol etc.
13
13
  export const OPENAI_MODELS = {
14
- // GPT-5.5 (Apr 23, 2026 - CURRENT)
15
- // Note: "gpt-5.5" + reasoning.effort="high"/"xhigh" = "thinking" mode
16
- DEFAULT: "gpt-5.5", // Most capable - agentic, reasoning, omnimodal (1.1M ctx)
17
- MINI: "gpt-5.4-mini", // Fast/efficient coding & subagents (no 5.5-mini available yet)
18
- PRO: "gpt-5.5-pro", // Expert: higher compute for harder problems ($30/$180)
14
+ // GPT-5.6 tiers (Jul 9, 2026 - CURRENT)
15
+ DEFAULT: "gpt-5.6-sol", // Flagship: coding/agentic SOTA, 54% more token-efficient than 5.5
16
+ SOL: "gpt-5.6-sol", // Explicit tier alias (also aliased "gpt-5.6" server-side)
17
+ TERRA: "gpt-5.6-terra", // Balanced: matches gpt-5.5 at half price ($2.50/$15)
18
+ LUNA: "gpt-5.6-luna", // Fast/cheap: $1/$6 (weaker long-context recall avoid huge inputs)
19
+ MINI: "gpt-5.6-luna", // "mini" tier successor (was gpt-5.4-mini)
20
+ PRO: "gpt-5.6-sol", // Pro tier eliminated in 5.6 — sol + reasoning.effort xhigh (was gpt-5.5-pro $30/$180)
21
+ // GPT-5.5 (Apr 2026) - fallback
22
+ FALLBACK_5_5: "gpt-5.5",
19
23
  // Aliases for backward compatibility
20
- THINKING: "gpt-5.5", // "Thinking" = gpt-5.5 with high reasoning effort
21
- FULL: "gpt-5.5", // Map old FULL to DEFAULT
22
- CODEX: "gpt-5.4-mini", // Map old codex to MINI (no 5.5 mini yet)
23
- CODEX_MINI: "gpt-5.4-mini", // Map old codex-mini to MINI
24
- CODEX_MAX: "gpt-5.5-pro", // Map old codex-max to PRO
25
- INSTANT: "gpt-5.4-mini", // Map old instant to MINI
24
+ THINKING: "gpt-5.6-sol", // "Thinking" = sol with high reasoning effort
25
+ FULL: "gpt-5.6-sol", // Map old FULL to DEFAULT
26
+ CODEX: "gpt-5.6-terra", // Coding workhorse tier
27
+ CODEX_MINI: "gpt-5.6-luna", // Cheapest tier
28
+ CODEX_MAX: "gpt-5.6-sol", // Map old codex-max to flagship (use high effort)
29
+ INSTANT: "gpt-5.6-luna", // Fast tier
26
30
  };
27
31
  // OpenRouter model ID mapping (add prefix when using OpenRouter gateway)
28
32
  export const OPENROUTER_PREFIX_MAP = {
33
+ "gpt-5.6-sol": "openai/",
34
+ "gpt-5.6-terra": "openai/",
35
+ "gpt-5.6-luna": "openai/",
29
36
  "gpt-5.5": "openai/",
30
37
  "gpt-5.5-pro": "openai/",
31
38
  "gpt-5.4-mini": "openai/",
@@ -63,18 +70,21 @@ export const PERPLEXITY_MODELS = {
63
70
  SONAR_PRO: "sonar-pro", // Advanced search
64
71
  SONAR_REASONING: "sonar-reasoning-pro", // Reasoning model (expensive - avoid)
65
72
  };
66
- // Grok Models (xAI) - Updated 2026-06-01 with Grok 4.3 (Apr 30, 2026 flagship)
73
+ // Grok Models (xAI) - Updated 2026-07-11 with Grok 4.5 (Jul 8, 2026 flagship)
67
74
  export const GROK_MODELS = {
68
- // Grok 4.3 (Apr 30, 2026) - CURRENT FLAGSHIP
69
- // Single model ID with configurable reasoning effort (replaces 4.20's reasoning/non-reasoning/multi-agent split).
70
- // 1M context, $1.25/$2.50 (cheaper than 4.20), xAI's recommended model, lowest hallucination rate.
71
- _4_3: "grok-4.3", // Flagship: 1M ctx, $1.25/$2.50, reasoning.effort low|high
75
+ // Grok 4.5 (Jul 8, 2026) - CURRENT FLAGSHIP ("Opus-class")
76
+ // 500K context (SMALLER than 4.3's 1M — fine for tools, mind huge inputs), $2/$6,
77
+ // configurable reasoning effort. EU API rollout was "mid-July" 4.3 stays the fallback.
78
+ _4_5: "grok-4.5", // Flagship: 500K ctx, $2/$6, reasoning.effort low|high
79
+ // Grok 4.3 (Apr 30, 2026) - previous flagship, kept as FALLBACK
80
+ // 1M context, $1.25/$2.50, lowest verified hallucination rate.
81
+ _4_3: "grok-4.3", // Fallback: 1M ctx, $1.25/$2.50, reasoning.effort low|high
72
82
  _4_3_LATEST: "grok-4.3-latest", // Rolling alias for newest 4.3 snapshot
73
83
  _BUILD: "grok-build-0.1", // Coding specialist (May 29, 2026): 256k ctx, fast agentic coding
74
- // Grok 4.20 models (Mar 10, 2026) - LEGACY (still valid; kept as fallback). Now resolve to 4.3 via deprecated keys.
75
- _4_20_REASONING: "grok-4.3", // [deprecated key] → grok-4.3 (was grok-4.20-0309-reasoning)
76
- _4_20_NON_REASONING: "grok-4.3", // [deprecated key] → grok-4.3 (was grok-4.20-0309-non-reasoning)
77
- _4_20_MULTI_AGENT: "grok-4.3", // [deprecated key] → grok-4.3 (architect uses high reasoning.effort)
84
+ // Grok 4.20 models (Mar 10, 2026) - LEGACY keys. Deprecated keys now resolve to the current flagship (4.5).
85
+ _4_20_REASONING: "grok-4.5", // [deprecated key] → grok-4.5 (was grok-4.20-0309-reasoning)
86
+ _4_20_NON_REASONING: "grok-4.5", // [deprecated key] → grok-4.5 (was grok-4.20-0309-non-reasoning)
87
+ _4_20_MULTI_AGENT: "grok-4.5", // [deprecated key] → grok-4.5 (architect uses high reasoning.effort)
78
88
  // Grok 4.1 fast models (Nov 2025) - BEST VALUE (10x cheaper)
79
89
  _4_1_FAST_REASONING: "grok-4-1-fast-reasoning", // Fast reasoning: 2M context, $0.20/$0.50
80
90
  _4_1_FAST_NON_REASONING: "grok-4-1-fast-non-reasoning", // Tool-calling optimized: 2M context, $0.20/$0.50
@@ -159,26 +169,27 @@ export const DEFAULT_WORKFLOW_SETTINGS = {
159
169
  // When new models release, update ONLY this section!
160
170
  // All tools automatically use the new models.
161
171
  // ============================================================================
162
- // UPDATED Apr 26, 2026: GPT-5.5 (flagship, agentic-focused) + GPT-5.4-mini (coding/fast no 5.5-mini yet)
163
- // Kimi K2.6 (Apr 20, 2026 - SWE-bench Pro leader)
172
+ // UPDATED Jul 11, 2026: GPT-5.6 tiers (sol/terra/luna — Jul 9) + Grok 4.5 (Jul 8 flagship)
173
+ // Kimi K2.7-Code (Jun 12, 2026)
164
174
  export const CURRENT_MODELS = {
165
175
  openai: {
166
- default: OPENAI_MODELS.DEFAULT, // gpt-5.5 - most capable, agentic (Apr 2026)
167
- reason: OPENAI_MODELS.DEFAULT, // Deep reasoning (gpt-5.5 + effort=high)
168
- brainstorm: OPENAI_MODELS.DEFAULT, // Creative ideation (gpt-5.5 + effort=medium)
169
- code: OPENAI_MODELS.MINI, // Code tasks (gpt-5.4-mini - cheapest tier, no 5.5-mini yet)
170
- explain: OPENAI_MODELS.MINI, // Explanations (gpt-5.4-mini - fast & capable)
171
- search: OPENAI_MODELS.DEFAULT, // Web search (gpt-5.5 + web_search tool)
172
- // Premium option for opt-in (use sparingly - $30/$180 per 1M tokens)
173
- premium: OPENAI_MODELS.PRO, // Expert mode (gpt-5.5-pro - higher compute)
176
+ default: OPENAI_MODELS.DEFAULT, // gpt-5.6-sol - flagship, agentic/coding SOTA (Jul 2026)
177
+ reason: OPENAI_MODELS.DEFAULT, // Deep reasoning (sol + effort=high)
178
+ brainstorm: OPENAI_MODELS.DEFAULT, // Creative ideation (sol + effort=medium)
179
+ code: OPENAI_MODELS.TERRA, // Code tasks (gpt-5.6-terra - 5.5-level at half price)
180
+ explain: OPENAI_MODELS.LUNA, // Explanations (gpt-5.6-luna - $1/$6, fast)
181
+ search: OPENAI_MODELS.DEFAULT, // Web search (sol + web_search tool)
182
+ // Premium: the 5.5-pro tier ($30/$180) is gone — sol + effort=xhigh replaces it at $5/$30
183
+ premium: OPENAI_MODELS.PRO, // Expert mode (gpt-5.6-sol - crank reasoning effort)
174
184
  },
175
185
  grok: {
176
- reason: GROK_MODELS._4_3, // grok-4.3 (flagship, low hallucination, high reasoning effort)
177
- code: GROK_MODELS._4_3, // grok-4.3 (flagship quality, tool-calling)
178
- debug: GROK_MODELS._4_3, // grok-4.3 (low hallucination for debugging)
179
- brainstorm: GROK_MODELS._4_3, // grok-4.3 (1M context)
180
- search: GROK_MODELS._4_3, // grok-4.3 LOW HALLUCINATION - critical for search
181
- architect: GROK_MODELS._4_3, // grok-4.3 with high reasoning.effort (agentic swarm behaviour)
186
+ reason: GROK_MODELS._4_5, // grok-4.5 (Jul 2026 flagship, high reasoning effort)
187
+ code: GROK_MODELS._4_5, // grok-4.5 (flagship quality, tool-calling)
188
+ debug: GROK_MODELS._4_5, // grok-4.5 (flagship debugging)
189
+ brainstorm: GROK_MODELS._4_5, // grok-4.5 (500K context)
190
+ search: GROK_MODELS._4_5, // grok-4.5 flagship synthesis over live search
191
+ search_lite: GROK_MODELS._4_1_FAST_NON_REASONING, // grok-4-1-fast: $0.20/$0.50, 2M ctx, tool-calling optimized 10x cheaper search
192
+ architect: GROK_MODELS._4_5, // grok-4.5 with high reasoning.effort (agentic swarm behaviour)
182
193
  },
183
194
  gemini: {
184
195
  default: GEMINI_MODELS.GEMINI_3_PRO,
@@ -275,6 +286,11 @@ export const TOOL_DEFAULTS = {
275
286
  maxTokens: 3000,
276
287
  temperature: 0.7,
277
288
  },
289
+ grok_search_lite: {
290
+ model: CURRENT_MODELS.grok.search_lite,
291
+ maxTokens: 3000,
292
+ temperature: 0.3,
293
+ },
278
294
  grok_brainstorm: {
279
295
  model: CURRENT_MODELS.grok.brainstorm,
280
296
  maxTokens: 4000,
@@ -343,6 +359,10 @@ export const DEFAULT_WORKFLOW_TOOL = "openai_brainstorm";
343
359
  // Used in tool outputs, usage stats, logs - keeps display consistent
344
360
  export const MODEL_DISPLAY_NAMES = {
345
361
  // OpenAI
362
+ "gpt-5.6-sol": "gpt-5.6-sol",
363
+ "gpt-5.6-terra": "gpt-5.6-terra",
364
+ "gpt-5.6-luna": "gpt-5.6-luna",
365
+ "gpt-5.6": "gpt-5.6-sol",
346
366
  "gpt-5.5": "gpt-5.5",
347
367
  "gpt-5.5-pro": "gpt-5.5-pro",
348
368
  "gpt-5.4": "gpt-5.4",
@@ -354,6 +374,7 @@ export const MODEL_DISPLAY_NAMES = {
354
374
  "gemini-3-flash-preview": "gemini-3-flash",
355
375
  "gemini-3.1-flash-lite": "gemini-3.1-flash-lite",
356
376
  // Grok (xAI)
377
+ "grok-4.5": "grok-4.5",
357
378
  "grok-4.3": "grok-4.3",
358
379
  "grok-4.3-latest": "grok-4.3",
359
380
  "grok-build-0.1": "grok-build",
@@ -397,8 +418,11 @@ export function getModelDisplayName(modelId) {
397
418
  // Model pricing per 1K tokens (input/output average) for cost tracking
398
419
  export const MODEL_PRICING = {
399
420
  // OpenAI
400
- "gpt-5.5": 0.0175, // ($5 + $30) / 2 / 1000 (Apr 23, 2026)
401
- "gpt-5.5-pro": 0.105, // ($30 + $180) / 2 / 1000 (Apr 23, 2026)
421
+ "gpt-5.6-sol": 0.0175, // ($5 + $30) / 2 / 1000 (Jul 9, 2026)
422
+ "gpt-5.6-terra": 0.00875, // ($2.50 + $15) / 2 / 1000 (Jul 9, 2026)
423
+ "gpt-5.6-luna": 0.0035, // ($1 + $6) / 2 / 1000 (Jul 9, 2026)
424
+ "gpt-5.5": 0.0175, // ($5 + $30) / 2 / 1000 (Apr 23, 2026 - fallback)
425
+ "gpt-5.5-pro": 0.105, // ($30 + $180) / 2 / 1000 (Apr 23, 2026 - tier removed in 5.6)
402
426
  "gpt-5.4": 0.00875, // ($2.50 + $15) / 2 / 1000 (Mar 2026 - legacy)
403
427
  "gpt-5.4-mini": 0.002625, // ($0.75 + $4.50) / 2 / 1000 (Mar 17, 2026)
404
428
  "gpt-5.4-pro": 0.105, // ($30 + $180) / 2 / 1000 (Mar 2026)
@@ -408,7 +432,8 @@ export const MODEL_PRICING = {
408
432
  "gemini-3-flash-preview": 0.00175, // ($0.50 + $3) / 2 / 1000 (legacy)
409
433
  "gemini-3.1-flash-lite": 0.001, // Cheapest/fastest in 3.1 series (Mar 2026)
410
434
  // Grok
411
- "grok-4.3": 0.001875, // ($1.25 + $2.50) / 2 / 1000 (Apr 30, 2026 - cheaper than 4.20)
435
+ "grok-4.5": 0.004, // ($2 + $6) / 2 / 1000 (Jul 8, 2026 flagship)
436
+ "grok-4.3": 0.001875, // ($1.25 + $2.50) / 2 / 1000 (Apr 30, 2026 - fallback)
412
437
  "grok-4.3-latest": 0.001875,
413
438
  "grok-build-0.1": 0.001875, // Coding specialist (estimate, same tier)
414
439
  "grok-4.20-0309-reasoning": 0.004, // ($2 + $6) / 2 / 1000 (legacy)
@@ -1,5 +1,5 @@
1
1
  export const balancedProfile = {
2
- description: "Balanced set for general use (53 tools)",
2
+ description: "Balanced set for general use (54 tools)",
3
3
  tools: {
4
4
  think: true,
5
5
  focus: true,
@@ -16,6 +16,7 @@ export const balancedProfile = {
16
16
  grok_architect: false,
17
17
  grok_brainstorm: false,
18
18
  grok_search: true,
19
+ grok_search_lite: true,
19
20
  openai_reason: true,
20
21
  openai_brainstorm: true,
21
22
  openai_code_review: false,
@@ -16,6 +16,7 @@ export const codeFocusProfile = {
16
16
  grok_architect: false,
17
17
  grok_brainstorm: false,
18
18
  grok_search: false,
19
+ grok_search_lite: false,
19
20
  openai_reason: false,
20
21
  openai_brainstorm: false,
21
22
  openai_code_review: true,
@@ -1,5 +1,5 @@
1
1
  export const fullProfile = {
2
- description: "Default profile — all tools enabled for maximum capability (64 tools)",
2
+ description: "Default profile — all tools enabled for maximum capability (65 tools)",
3
3
  tools: {
4
4
  think: true,
5
5
  focus: true,
@@ -16,6 +16,7 @@ export const fullProfile = {
16
16
  grok_architect: true,
17
17
  grok_brainstorm: true,
18
18
  grok_search: true,
19
+ grok_search_lite: true,
19
20
  openai_reason: true,
20
21
  openai_brainstorm: true,
21
22
  openai_code_review: true,
@@ -1,5 +1,5 @@
1
1
  export const heavyCodingProfile = {
2
- description: "Heavy coding with all reasoning & code tools (57 tools)",
2
+ description: "Heavy coding with all reasoning & code tools (58 tools)",
3
3
  tools: {
4
4
  // Core reasoning - all enabled
5
5
  think: true,
@@ -19,6 +19,7 @@ export const heavyCodingProfile = {
19
19
  grok_architect: true,
20
20
  grok_brainstorm: true,
21
21
  grok_search: true,
22
+ grok_search_lite: true,
22
23
  // OpenAI - all enabled for heavy coding
23
24
  openai_reason: true,
24
25
  openai_brainstorm: true,
@@ -16,6 +16,7 @@ export const minimalProfile = {
16
16
  grok_architect: false,
17
17
  grok_brainstorm: false,
18
18
  grok_search: false,
19
+ grok_search_lite: false,
19
20
  openai_reason: false,
20
21
  openai_brainstorm: false,
21
22
  openai_code_review: false,
@@ -1,5 +1,5 @@
1
1
  export const researchPowerProfile = {
2
- description: "Research-focused with Grok search + all Perplexity + brainstorming (35 tools)",
2
+ description: "Research-focused with Grok search + all Perplexity + brainstorming (36 tools)",
3
3
  tools: {
4
4
  think: true,
5
5
  focus: true,
@@ -16,6 +16,7 @@ export const researchPowerProfile = {
16
16
  grok_architect: false,
17
17
  grok_brainstorm: false,
18
18
  grok_search: true,
19
+ grok_search_lite: true,
19
20
  openai_reason: false,
20
21
  openai_brainstorm: true,
21
22
  openai_code_review: false,
@@ -38,9 +38,11 @@ export async function callGrokEnhanced(messages, options = {}) {
38
38
  // Use different endpoint and format for search vs non-search
39
39
  if (enableLiveSearch) {
40
40
  // NEW Agent Tools API (Jan 2025) - uses /v1/responses endpoint
41
- // with 'input' instead of 'messages' and tools array
41
+ // with 'input' instead of 'messages' and tools array.
42
+ // Respects options.model so grok_search (flagship) and grok_search_lite
43
+ // (grok-4-1-fast, 10x cheaper) share this path.
42
44
  const searchRequestBody = {
43
- model: GrokModel.GROK_4_20_NON_REASONING, // 4.20 standard is better for tool-calling search
45
+ model,
44
46
  input: messages.map(m => ({ role: m.role, content: m.content })),
45
47
  tools: [
46
48
  { type: "web_search" },
@@ -132,8 +134,14 @@ export async function callGrokEnhanced(messages, options = {}) {
132
134
  };
133
135
  }
134
136
  catch (error) {
137
+ const errMsg = error instanceof Error ? error.message : String(error);
138
+ // grok-4.5's rollout is region-staged (EU lands mid-July 2026) — fall back to grok-4.3
139
+ if (model.startsWith('grok-4.5') && errMsg.includes('not available in your region')) {
140
+ console.error(`[Grok] grok-4.5 region-blocked, falling back to grok-4.3`);
141
+ return callGrokEnhanced(messages, { ...options, model: GrokModel.GROK_4_3 });
142
+ }
135
143
  return {
136
- content: `[Grok error: ${error instanceof Error ? error.message : String(error)}]`
144
+ content: `[Grok error: ${errMsg}]`
137
145
  };
138
146
  }
139
147
  }
@@ -348,7 +356,7 @@ export const grokSearchTool = {
348
356
  const messages = [
349
357
  {
350
358
  role: "system",
351
- content: `You are Grok 4.3 with live search. Search for: "${query}".
359
+ content: `You are Grok 4.5 with live search. Search for: "${query}".
352
360
  ${recencyPrompt}
353
361
  Provide concise, factual results with sources.
354
362
  Limit search to ${max_search_results} sources for cost control.
@@ -359,13 +367,13 @@ ${FORMAT_INSTRUCTION}`
359
367
  content: `Search for: ${query}`
360
368
  }
361
369
  ];
362
- log?.info(`Grok Search: ${max_search_results} sources, recency: ${recency} (using grok-4.20 reasoning)`);
370
+ log?.info(`Grok Search: ${max_search_results} sources, recency: ${recency} (using grok-4.5 flagship)`);
363
371
  // Extract domains from sources if specified
364
372
  const domains = sources
365
373
  ?.filter((s) => s.allowed_websites)
366
374
  ?.flatMap((s) => s.allowed_websites) || [];
367
375
  const result = await callGrokEnhanced(messages, {
368
- model: GrokModel.GROK_4_20_REASONING, // Low hallucination is CRITICAL for search accuracy
376
+ model: GrokModel.GROK_4_20_REASONING, // grok-4.5 flagship (grok_search_lite is the cheap tier)
369
377
  enableLiveSearch: true,
370
378
  searchSources: max_search_results,
371
379
  searchDomains: domains,
@@ -403,11 +411,11 @@ export function isGrokAvailable() {
403
411
  export function getGrokStatus() {
404
412
  return {
405
413
  available: isGrokAvailable(),
406
- model: "grok-4.3",
414
+ model: "grok-4.5",
407
415
  features: [
408
- 'Grok 4.3 (grok-4.3): Flagship, lowest hallucination, 1M context, configurable reasoning effort ($1.25/$2.50)',
416
+ 'Grok 4.5 (grok-4.5): Flagship ("Opus-class", Jul 2026), 500K context, configurable reasoning effort ($2/$6)',
417
+ 'Grok 4.3 (grok-4.3): Previous flagship, kept as fallback — 1M context, lowest verified hallucination ($1.25/$2.50)',
409
418
  'Grok Build (grok-build-0.1): Fast agentic coding specialist, 256k context',
410
- 'Grok 4.20 (grok-4.20-0309-*): Legacy flagship, still available as fallback (2M context)',
411
419
  'Live web search with citations',
412
420
  'Function calling',
413
421
  'Structured outputs',
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Grok Search Lite — cost-optimized live web search.
3
+ *
4
+ * Same xAI live-search path as grok_search, but on grok-4-1-fast
5
+ * (tool-calling optimized, 2M context, $0.20/$0.50 — ~10x cheaper than the
6
+ * grok-4.5 flagship). Use for high-volume lookups, jury/council fan-outs, and
7
+ * quick fact checks; use grok_search when synthesis quality matters most.
8
+ */
9
+ import { z } from "zod";
10
+ import { callGrokEnhanced, GrokModel } from "./grok-enhanced.js";
11
+ import { defineModelTool } from "./factory/define-model-tool.js";
12
+ import { link } from "../utils/ansi-renderer.js";
13
+ import { stripFormatting } from "../utils/format-stripper.js";
14
+ import { FORMAT_INSTRUCTION } from "../utils/format-constants.js";
15
+ /** Pure prompt builder — exported for tests. */
16
+ export function buildGrokSearchLitePrompt(query, maxSearchResults, recency) {
17
+ const recencyPrompt = recency !== "all" ? `Focus on information from the last ${recency}.` : "";
18
+ return `You are Grok with live search (fast tier). Search for: "${query}".
19
+ ${recencyPrompt}
20
+ Provide concise, factual results with sources.
21
+ Limit search to ${maxSearchResults} sources for cost control.
22
+ ${FORMAT_INSTRUCTION}`;
23
+ }
24
+ export const grokSearchLiteTool = defineModelTool({
25
+ name: "grok_search_lite",
26
+ description: "Cheap web search (grok-4-1-fast, ~10x cheaper than grok_search). Put your QUERY in the 'query' parameter.",
27
+ parameters: z.object({
28
+ query: z.string(),
29
+ sources: z
30
+ .array(z.object({
31
+ type: z.enum(["web", "news", "x", "rss"]),
32
+ country: z.string().optional(),
33
+ allowed_websites: z.array(z.string()).optional(),
34
+ }))
35
+ .optional(),
36
+ max_search_results: z.number().optional(),
37
+ recency: z.enum(["all", "day", "week", "month", "year"]).optional(),
38
+ }),
39
+ execute: async (args, { log }) => {
40
+ const { query, sources = [{ type: "web" }], max_search_results = 20, recency = "all", } = args;
41
+ const messages = [
42
+ {
43
+ role: "system",
44
+ content: buildGrokSearchLitePrompt(query, max_search_results, recency),
45
+ },
46
+ {
47
+ role: "user",
48
+ content: `Search for: ${query}`,
49
+ },
50
+ ];
51
+ log?.info(`Grok Search Lite: ${max_search_results} sources, recency: ${recency} (using grok-4-1-fast, $0.20/$0.50)`);
52
+ // Extract domains from sources if specified
53
+ const domains = sources
54
+ ?.filter((s) => s.allowed_websites)
55
+ ?.flatMap((s) => s.allowed_websites) || [];
56
+ const result = await callGrokEnhanced(messages, {
57
+ model: GrokModel.GROK_4_1_FAST, // Tool-calling optimized cheap tier — the whole point of this tool
58
+ enableLiveSearch: true,
59
+ searchSources: max_search_results,
60
+ searchDomains: domains,
61
+ temperature: 0.3, // Low temperature for factual search
62
+ maxTokens: 3000,
63
+ });
64
+ // Format sources with ANSI links (same shape as grok_search output)
65
+ let output = result.content;
66
+ if (result.sources && result.sources.length > 0) {
67
+ const sourcesText = result.sources
68
+ .slice(0, 10)
69
+ .map((s, i) => {
70
+ const title = s.title || "Source";
71
+ const url = s.url || "";
72
+ return ` ${link(url, `[${i + 1}] ${title}`)}`;
73
+ })
74
+ .join("\n");
75
+ output += `\n\nSources:\n${sourcesText}`;
76
+ }
77
+ // Add cost info
78
+ const estimatedCost = (max_search_results / 1000) * 0.025;
79
+ output += `\n\nSearch used up to ${max_search_results} sources (~$${estimatedCost.toFixed(4)})`;
80
+ return stripFormatting(output);
81
+ },
82
+ });
@@ -23,18 +23,20 @@ config({ path: path.resolve(__dirname, '../../../.env') });
23
23
  // Grok API configuration
24
24
  const GROK_API_KEY = getGrokApiKey();
25
25
  const GROK_API_URL = "https://api.x.ai/v1/chat/completions";
26
- // Available Grok models - Updated 2026-06-01 with Grok 4.3 (Apr 30, 2026 flagship)
26
+ // Available Grok models - Updated 2026-07-11 with Grok 4.5 (Jul 8, 2026 flagship)
27
27
  export var GrokModel;
28
28
  (function (GrokModel) {
29
- // Grok 4.3 (Apr 30, 2026) - CURRENT FLAGSHIP
30
- // Single model ID with configurable reasoning effort; 1M ctx, $1.25/$2.50 (cheaper than 4.20).
29
+ // Grok 4.5 (Jul 8, 2026) - CURRENT FLAGSHIP ("Opus-class")
30
+ // 500K ctx (smaller than 4.3's 1M), $2/$6, configurable reasoning effort.
31
+ GrokModel["GROK_4_5"] = "grok-4.5";
32
+ // Grok 4.3 (Apr 30, 2026) - previous flagship, kept as FALLBACK
31
33
  GrokModel["GROK_4_3"] = "grok-4.3";
32
34
  GrokModel["GROK_4_3_LATEST"] = "grok-4.3-latest";
33
35
  GrokModel["GROK_BUILD"] = "grok-build-0.1";
34
- // Grok 4.20 keys (Mar 2026) - DEPRECATED, retained for back-compat → now resolve to grok-4.3
35
- GrokModel["GROK_4_20_REASONING"] = "grok-4.3";
36
- GrokModel["GROK_4_20_NON_REASONING"] = "grok-4.3";
37
- GrokModel["GROK_4_20_MULTI_AGENT"] = "grok-4.3";
36
+ // Grok 4.20 keys (Mar 2026) - DEPRECATED, retained for back-compat → now resolve to the current flagship
37
+ GrokModel["GROK_4_20_REASONING"] = "grok-4.5";
38
+ GrokModel["GROK_4_20_NON_REASONING"] = "grok-4.5";
39
+ GrokModel["GROK_4_20_MULTI_AGENT"] = "grok-4.5";
38
40
  // Grok 4.1 fast models (Nov 2025) - BEST VALUE (10x cheaper)
39
41
  GrokModel["GROK_4_1_FAST_REASONING"] = "grok-4-1-fast-reasoning";
40
42
  GrokModel["GROK_4_1_FAST"] = "grok-4-1-fast-non-reasoning";
@@ -53,7 +55,7 @@ export var GrokModel;
53
55
  * - 'code-analysis': Relaxed for code analysis tools
54
56
  * - 'llm-orchestration': Medium for LLM-to-LLM calls
55
57
  */
56
- export async function callGrok(messages, model = GrokModel.GROK_4_3, temperature = 0.7, maxTokens = 16384, // Increased default for comprehensive responses
58
+ export async function callGrok(messages, model = GrokModel.GROK_4_5, temperature = 0.7, maxTokens = 16384, // Increased default for comprehensive responses
57
59
  forceVisibleOutput = true, validationContext = 'llm-orchestration', reasoningEffort) {
58
60
  // Try OpenRouter gateway first if enabled
59
61
  if (isGatewayEnabled()) {
@@ -78,9 +80,9 @@ forceVisibleOutput = true, validationContext = 'llm-orchestration', reasoningEff
78
80
  }
79
81
  return { ...msg, content: validation.sanitized };
80
82
  });
81
- // Grok 4.x reasoning can take 60-90s; 4.20/4.3 flagship and multi-agent can take longer
83
+ // Grok 4.x reasoning can take 60-90s; 4.3/4.5 flagship and multi-agent can take longer
82
84
  const isReasoning = model.includes('reasoning') || model.includes('multi-agent');
83
- const isFlagship = model.includes('4.20') || model.startsWith('grok-4.3');
85
+ const isFlagship = model.includes('4.20') || model.startsWith('grok-4.3') || model.startsWith('grok-4.5');
84
86
  const timeoutMs = isFlagship ? 180000 : (isReasoning ? 120000 : 60000);
85
87
  try {
86
88
  // For Grok 4+ models, we need to handle reasoning tokens specially
@@ -94,8 +96,8 @@ forceVisibleOutput = true, validationContext = 'llm-orchestration', reasoningEff
94
96
  }
95
97
  const controller = new AbortController();
96
98
  const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
97
- // grok-4.3 (single flagship) and 4.20 multi-agent both accept reasoning.effort
98
- const supportsReasoningEffort = model.includes('multi-agent') || model.startsWith('grok-4.3');
99
+ // grok-4.3/4.5 flagships and 4.20 multi-agent all accept reasoning.effort
100
+ const supportsReasoningEffort = model.includes('multi-agent') || model.startsWith('grok-4.3') || model.startsWith('grok-4.5');
99
101
  const requestBody = {
100
102
  model,
101
103
  messages: validatedMessages,
@@ -138,7 +140,13 @@ forceVisibleOutput = true, validationContext = 'llm-orchestration', reasoningEff
138
140
  if (error instanceof Error && error.name === 'AbortError') {
139
141
  return `[Grok timeout: ${model} exceeded ${isReasoning ? '120' : '60'}s limit]`;
140
142
  }
141
- return `[Grok error: ${error instanceof Error ? error.message : String(error)}]`;
143
+ const errMsg = error instanceof Error ? error.message : String(error);
144
+ // grok-4.5's rollout is region-staged (EU lands mid-July 2026) — fall back to grok-4.3
145
+ if (model.startsWith('grok-4.5') && errMsg.includes('not available in your region')) {
146
+ console.error(`[Grok] grok-4.5 region-blocked, falling back to grok-4.3`);
147
+ return callGrok(validatedMessages, GrokModel.GROK_4_3, temperature, maxTokens, forceVisibleOutput, validationContext, reasoningEffort);
148
+ }
149
+ return `[Grok error: ${errMsg}]`;
142
150
  }
143
151
  }
144
152
  /**
@@ -171,7 +179,7 @@ export const grokReasonTool = defineModelTool({
171
179
  const messages = [
172
180
  {
173
181
  role: "system",
174
- content: `You are Grok 4.3, an expert at logical reasoning and problem-solving.
182
+ content: `You are Grok 4.5, an expert at logical reasoning and problem-solving.
175
183
  ${approachPrompts[approach]}.
176
184
  ${context ? `Context: ${context}` : ''}
177
185
  ${FORMAT_INSTRUCTION}`
@@ -221,7 +229,7 @@ export const grokCodeTool = defineModelTool({
221
229
  const messages = [
222
230
  {
223
231
  role: "system",
224
- content: `You are Grok 4.3, expert programmer and code analyst.
232
+ content: `You are Grok 4.5, expert programmer and code analyst.
225
233
  Task: ${taskPrompts[task]}
226
234
  ${language ? `Language: ${language}` : ''}
227
235
  ${requirements ? `Requirements: ${requirements}` : ''}
@@ -143,8 +143,13 @@ reasoningEffort = "low", requireConfirmation = false, skipValidation = false) {
143
143
  }
144
144
  return { ...msg, content: validation.sanitized };
145
145
  });
146
- // Model fallback chain - no fallbacks to test actual availability
146
+ // Model fallback chain
147
147
  const modelFallbacks = {
148
+ // gpt-5.6-sol is org-verification gated (403 "insufficient permissions" until verified);
149
+ // terra matches gpt-5.5 quality at half price, so it's the safe runtime fallback.
150
+ "gpt-5.6-sol": ["gpt-5.6-terra", "gpt-5.5"],
151
+ "gpt-5.6-terra": ["gpt-5.5"],
152
+ "gpt-5.6-luna": ["gpt-5.6-terra"],
148
153
  "gpt-5.4": [], // No fallback - test actual gpt-5.4
149
154
  "gpt-5.4-mini": ["gpt-5.4"], // Mini falls back to flagship
150
155
  "gpt-5.4-pro": [] // No fallback - test actual gpt-5.4-pro
@@ -204,8 +209,9 @@ reasoningEffort = "low", requireConfirmation = false, skipValidation = false) {
204
209
  const error = await response.text();
205
210
  lastError = `${currentModel}: ${response.statusText} - ${error}`;
206
211
  console.error(`🔍 TRACE: ${currentModel} failed - Status: ${response.status}, Error: ${error}`);
207
- // Check if it's a model not found error
208
- if (response.status === 404 || error.includes('model') || error.includes('not found')) {
212
+ // Check if it's a model not found / not-yet-unlocked error
213
+ // (403 "insufficient permissions" = org-verification-gated tier, e.g. gpt-5.6-sol)
214
+ if (response.status === 404 || response.status === 403 || error.includes('model') || error.includes('not found') || error.includes('insufficient permissions')) {
209
215
  console.error(`🔍 TRACE: Model ${currentModel} not available, trying fallback...`);
210
216
  continue; // Try next model
211
217
  }
@@ -33,6 +33,7 @@ export const PROVIDER_GROUPS = [
33
33
  "grok_architect",
34
34
  "grok_brainstorm",
35
35
  "grok_search",
36
+ "grok_search_lite",
36
37
  ],
37
38
  },
38
39
  {
@@ -143,6 +144,8 @@ export const SKILLS = [
143
144
  { name: "redteam", desc: "Adversarial plan red-team (pre-mortem, risks, edits)" },
144
145
  { name: "spec", desc: "Loose request to reviewable spec before planning" },
145
146
  { name: "triage", desc: "Ranked root-cause bug triage from an error/trace" },
147
+ { name: "test", desc: "Generate runnable tests (edge cases first) via testgen" },
148
+ { name: "audit", desc: "Security review: OWASP/CWE findings + fixes via security_review" },
146
149
  { name: "setup", desc: "Guided configuration — runs doctor, walks keys/profiles" },
147
150
  { name: "tachi", desc: "Help & discovery" },
148
151
  ];
@@ -39,6 +39,7 @@
39
39
  import { getAllPerplexityTools, isPerplexityAvailable } from "./perplexity-tools.js";
40
40
  import { getAllGrokTools, isGrokAvailable } from "./grok-tools.js";
41
41
  import { debugTriageTool } from "./debug-triage-tool.js";
42
+ import { grokSearchLiteTool } from "./grok-search-lite-tool.js";
42
43
  import { isOpenAIAvailable, getAllOpenAITools } from "./openai-tools.js";
43
44
  import { specWriterTool } from "./spec-writer-tool.js";
44
45
  import { refinePromptTool } from "./refine-prompt-tool.js";
@@ -74,8 +75,10 @@ export async function getAllTools(inlineTools = []) {
74
75
  // 2) Grok (custom API).
75
76
  if (isGrokAvailable()) {
76
77
  tools.push(...getAllGrokTools());
77
- // debug_triage — ranked-hypothesis bug triage (Grok 4.3) — gated on Grok.
78
+ // debug_triage — ranked-hypothesis bug triage (Grok flagship) — gated on Grok.
78
79
  tools.push(debugTriageTool);
80
+ // grok_search_lite — cheap live search (grok-4-1-fast, ~10x cheaper) — gated on Grok.
81
+ tools.push(grokSearchLiteTool);
79
82
  }
80
83
  // 3) OpenAI (GPT-5 suite). NB: getAllOpenAITools() ALSO self-guards (returns
81
84
  // [] when unavailable); the outer guard is kept to mirror server.ts 1:1.
@@ -1,6 +1,6 @@
1
1
  # TachiBot MCP - Complete Tools Reference
2
2
 
3
- **Complete parameter schemas and example calls for all 64 tools** (65 registered — `continue_focus` is an always-on companion to `focus` outside the profile system; see [Meta & Orchestration](#meta--orchestration)).
3
+ **Complete parameter schemas and example calls for all 65 tools** (66 registered — `continue_focus` is an always-on companion to `focus` outside the profile system; see [Meta & Orchestration](#meta--orchestration)).
4
4
 
5
5
  Schemas below are generated from the wire contract (`test/golden/__snapshots__/tool-contracts.json`) — the exact JSON Schema the MCP server publishes for each tool.
6
6
 
@@ -8,7 +8,7 @@ Schemas below are generated from the wire contract (`test/golden/__snapshots__/t
8
8
 
9
9
  ## Table of Contents
10
10
 
11
- - [Research & Search](#research--search) (5): [perplexity_ask](#perplexity_ask) &#183; [perplexity_reason](#perplexity_reason) &#183; [grok_search](#grok_search) &#183; [openai_search](#openai_search) &#183; [gemini_search](#gemini_search)
11
+ - [Research & Search](#research--search) (6): [perplexity_ask](#perplexity_ask) &#183; [perplexity_reason](#perplexity_reason) &#183; [grok_search](#grok_search) &#183; [grok_search_lite](#grok_search_lite) &#183; [openai_search](#openai_search) &#183; [gemini_search](#gemini_search)
12
12
  - [Reasoning & Planning](#reasoning--planning) (14): [grok_reason](#grok_reason) &#183; [openai_reason](#openai_reason) &#183; [qwen_reason](#qwen_reason) &#183; [qwq_reason](#qwq_reason) &#183; [kimi_thinking](#kimi_thinking) &#183; [kimi_decompose](#kimi_decompose) &#183; [deepseek_reason](#deepseek_reason) &#183; [glm_reason](#glm_reason) &#183; [stepfun_reason](#stepfun_reason) &#183; [ernie_reason](#ernie_reason) &#183; [planner_maker](#planner_maker) &#183; [planner_runner](#planner_runner) &#183; [list_plans](#list_plans) &#183; [spec_writer](#spec_writer)
13
13
  - [Code Intelligence](#code-intelligence) (11): [kimi_code](#kimi_code) &#183; [grok_code](#grok_code) &#183; [grok_debug](#grok_debug) &#183; [qwen_coder](#qwen_coder) &#183; [qwen_algo](#qwen_algo) &#183; [qwen_competitive](#qwen_competitive) &#183; [deepseek_algo](#deepseek_algo) &#183; [minimax_code](#minimax_code) &#183; [minimax_agent](#minimax_agent) &#183; [testgen](#testgen) &#183; [debug_triage](#debug_triage)
14
14
  - [Analysis & Judgment](#analysis--judgment) (14): [gemini_analyze_text](#gemini_analyze_text) &#183; [gemini_analyze_code](#gemini_analyze_code) &#183; [gemini_judge](#gemini_judge) &#183; [jury](#jury) &#183; [diff_review](#diff_review) &#183; [plan_critique](#plan_critique) &#183; [gemini_brainstorm](#gemini_brainstorm) &#183; [openai_brainstorm](#openai_brainstorm) &#183; [openai_code_review](#openai_code_review) &#183; [openai_explain](#openai_explain) &#183; [grok_brainstorm](#grok_brainstorm) &#183; [grok_architect](#grok_architect) &#183; [security_review](#security_review) &#183; [kimi_long_context](#kimi_long_context)
@@ -95,6 +95,30 @@ grok_search({
95
95
 
96
96
  ---
97
97
 
98
+ ### grok_search_lite
99
+
100
+ Cheap web search (grok-4-1-fast, ~10x cheaper than grok_search). Same live-search pipeline and parameters as `grok_search` — use it for high-volume lookups and quick fact checks; use `grok_search` when synthesis quality matters most.
101
+
102
+ #### Parameters
103
+
104
+ | Parameter | Type | Required | Default | Description |
105
+ |-----------|------|----------|---------|-------------|
106
+ | `query` | `string` | ✅ Yes | - | Search query |
107
+ | `max_search_results` | `number` | No | - | Max sources searched (costs per 1k) |
108
+ | `recency` | `"all" \| "day" \| "week" \| "month" \| "year"` | No | - | Time filter |
109
+ | `sources` | `Array<{type: "web"\|"news"\|"x"\|"rss", allowed_websites?: string[], country?: string}>` | No | - | Source configuration |
110
+
111
+ #### Example
112
+
113
+ ```typescript
114
+ grok_search_lite({
115
+ query: "current stable Node.js LTS version",
116
+ recency: "month"
117
+ })
118
+ ```
119
+
120
+ ---
121
+
98
122
  ### openai_search
99
123
 
100
124
  Web search using GPT-5.4 with real-time web access. Put your QUERY in the `query` parameter.
@@ -25,11 +25,11 @@ Counts below are generated from `src/profiles/*.ts` via `npm run build:profiles`
25
25
  | Profile | Tools | Description |
26
26
  |---------|-------|-------------|
27
27
  | `minimal` | 13 | Minimal essential tools for basic tasks |
28
- | `research_power` | 35 | Research-focused with Grok search + all Perplexity + brainstorming |
28
+ | `research_power` | 36 | Research-focused with Grok search + all Perplexity + brainstorming |
29
29
  | `code_focus` | 42 | Code-heavy work with debugging and analysis |
30
- | `balanced` | 53 | Balanced set for general use |
31
- | `heavy_coding` | 57 | Heavy coding with all reasoning & code tools |
32
- | `full` | 64 | **Default profile** — every tool enabled |
30
+ | `balanced` | 54 | Balanced set for general use |
31
+ | `heavy_coding` | 58 | Heavy coding with all reasoning & code tools |
32
+ | `full` | 65 | **Default profile** — every tool enabled |
33
33
 
34
34
  ---
35
35
 
@@ -50,13 +50,13 @@ Minimal essential tools for basic tasks.
50
50
 
51
51
  ---
52
52
 
53
- ### 2. `research_power` (35 tools)
53
+ ### 2. `research_power` (36 tools)
54
54
 
55
55
  Research-focused with Grok search + all Perplexity + brainstorming + the full reasoning/planning suite.
56
56
 
57
57
  **Tools:**
58
58
  - Meta: `think`, `focus`, `tachi`, `doctor`, `nextThought`, `usage_stats`
59
- - Research: `perplexity_ask`, `perplexity_reason`, `grok_search`, `openai_search`, `gemini_search`
59
+ - Research: `perplexity_ask`, `perplexity_reason`, `grok_search`, `grok_search_lite`, `openai_search`, `gemini_search`
60
60
  - Reasoning: `grok_reason`, `qwq_reason`, `qwen_reason`, `kimi_thinking`, `kimi_decompose`, `deepseek_reason`, `glm_reason`, `stepfun_reason`, `ernie_reason`
61
61
  - Judgment: `gemini_judge`, `jury`
62
62
  - Creative: `openai_brainstorm`, `gemini_brainstorm`
@@ -68,7 +68,7 @@ Research-focused with Grok search + all Perplexity + brainstorming + the full re
68
68
  **Best for:** Deep research, fact-checking, multi-source verification, brainstorming sessions.
69
69
 
70
70
  **Key tools for research:**
71
- - `grok_search` / `openai_search` / `gemini_search` — live web search, three different engines
71
+ - `grok_search` / `openai_search` / `gemini_search` — live web search, three different engines (`grok_search_lite` = same Grok search on grok-4-1-fast, ~10x cheaper for high-volume lookups)
72
72
  - `jury` — multi-model consensus (parallel jurors + Gemini synthesis)
73
73
  - `gemini_judge` — evaluate/synthesize/rank/resolve multiple perspectives into one verdict
74
74
 
@@ -94,13 +94,13 @@ Code-heavy work with debugging and analysis.
94
94
 
95
95
  ---
96
96
 
97
- ### 4. `balanced` (53 tools)
97
+ ### 4. `balanced` (54 tools)
98
98
 
99
99
  Balanced set for general use — nearly everything except the deepest niche reasoning/creative extras.
100
100
 
101
101
  **Tools:**
102
102
  - Meta: `think`, `focus`, `tachi`, `doctor`, `nextThought`, `usage_stats`
103
- - Research: `perplexity_ask`, `perplexity_reason`, `grok_search`, `openai_search`, `gemini_search`
103
+ - Research: `perplexity_ask`, `perplexity_reason`, `grok_search`, `grok_search_lite`, `openai_search`, `gemini_search`
104
104
  - Reasoning: `grok_reason`, `qwq_reason`, `qwen_reason`, `kimi_thinking`, `kimi_decompose`, `deepseek_reason`, `glm_reason`, `stepfun_reason`, `ernie_reason`
105
105
  - Code: `grok_code`, `qwen_coder`, `qwen_algo`, `kimi_code`, `kimi_long_context`, `minimax_code`, `minimax_agent`, `deepseek_algo`, `debug_triage`
106
106
  - Judgment: `gemini_judge`, `jury`
@@ -117,13 +117,13 @@ Balanced set for general use — nearly everything except the deepest niche reas
117
117
 
118
118
  ---
119
119
 
120
- ### 5. `heavy_coding` (57 tools)
120
+ ### 5. `heavy_coding` (58 tools)
121
121
 
122
122
  Heavy coding with the full reasoning & code toolset, minus the general workflow-management tools.
123
123
 
124
124
  **Tools:**
125
125
  - Meta: `think`, `focus`, `tachi`, `doctor`, `nextThought`, `usage_stats`
126
- - Research: `perplexity_ask`, `perplexity_reason`, `grok_search`, `openai_search`, `gemini_search`
126
+ - Research: `perplexity_ask`, `perplexity_reason`, `grok_search`, `grok_search_lite`, `openai_search`, `gemini_search`
127
127
  - Reasoning: `grok_reason`, `openai_reason`, `qwq_reason`, `qwen_reason`, `kimi_thinking`, `kimi_decompose`, `deepseek_reason`, `glm_reason`, `stepfun_reason`
128
128
  - Code: `grok_code`, `grok_debug`, `grok_architect`, `openai_code_review`, `openai_explain`, `gemini_analyze_code`, `qwen_coder`, `qwen_algo`, `kimi_code`, `kimi_long_context`, `minimax_code`, `minimax_agent`, `deepseek_algo`, `debug_triage`
129
129
  - Judgment: `gemini_judge`, `jury`
@@ -141,7 +141,7 @@ Heavy coding with the full reasoning & code toolset, minus the general workflow-
141
141
 
142
142
  ---
143
143
 
144
- ### 6. `full` (64 tools) — default
144
+ ### 6. `full` (65 tools) — default
145
145
 
146
146
  All tools enabled for maximum capability. This is the profile set in `tools.config.json`'s `activeProfile` by default.
147
147
 
@@ -149,7 +149,7 @@ All tools enabled for maximum capability. This is the profile set in `tools.conf
149
149
 
150
150
  **Best for:** Maximum flexibility, specialized tasks, demonstrations.
151
151
 
152
- **Note:** tools still self-gate on API keys — with no `OPENROUTER_API_KEY`, the Qwen/Kimi/MiniMax/DeepSeek/GLM/StepFun/ERNIE tools won't register even under `full`. Run `doctor` to see exactly what's active. `continue_focus` is always registered regardless of profile (see [TOOLS_REFERENCE.md](TOOLS_REFERENCE.md#continue_focus)) and isn't counted in the 64.
152
+ **Note:** tools still self-gate on API keys — with no `OPENROUTER_API_KEY`, the Qwen/Kimi/MiniMax/DeepSeek/GLM/StepFun/ERNIE tools won't register even under `full`. Run `doctor` to see exactly what's active. `continue_focus` is always registered regardless of profile (see [TOOLS_REFERENCE.md](TOOLS_REFERENCE.md#continue_focus)) and isn't counted in the 65.
153
153
 
154
154
  ---
155
155
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "tachibot-mcp",
3
3
  "mcpName": "io.github.byPawel/tachibot-mcp",
4
4
  "displayName": "TachiBot MCP - Universal AI Orchestrator",
5
- "version": "2.26.0",
5
+ "version": "2.27.0",
6
6
  "type": "module",
7
7
  "main": "dist/src/server.js",
8
8
  "bin": {
@@ -47,7 +47,8 @@
47
47
  "package:extension": "npm run build && ./scripts/package-extension.sh",
48
48
  "build:mcpb": "npm run package:extension",
49
49
  "verify": "node scripts/verify-installation.js",
50
- "postinstall": "bash scripts/install-skills.sh 2>/dev/null || true",
50
+ "postinstall": "node scripts/postinstall-hint.js || true",
51
+ "install-skills": "bash scripts/install-skills.sh",
51
52
  "add-tool": "plop tool",
52
53
  "test:golden": "node --experimental-vm-modules node_modules/jest/bin/jest.js test/golden",
53
54
  "test:smoke": "node --experimental-vm-modules node_modules/jest/bin/jest.js test/smoke"
@@ -75,7 +76,7 @@
75
76
  "node": ">=22.0.0"
76
77
  },
77
78
  "license": "AGPL-3.0",
78
- "description": "TachiBot MCP: 51 AI tools, 7 providers. Multi-model orchestration (Perplexity, Grok, OpenAI, Gemini, Qwen, Kimi, MiniMax), YAML workflows, token-optimized profiles. Smart routing, parallel execution, jury system.",
79
+ "description": "TachiBot MCP: 65 AI tools, 12 providers. Multi-model orchestration (Perplexity, Grok, OpenAI, Gemini, Qwen, Kimi, MiniMax, DeepSeek, GLM, StepFun, ERNIE, local), YAML workflows, token-optimized profiles. Smart routing, parallel execution, jury system.",
79
80
  "dependencies": {
80
81
  "@types/node": "^22.13.17",
81
82
  "@types/react": "^19.2.7",
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Balanced set for general use (53 tools)",
2
+ "description": "Balanced set for general use (54 tools)",
3
3
  "tools": {
4
4
  "think": true,
5
5
  "focus": true,
@@ -16,6 +16,7 @@
16
16
  "grok_architect": false,
17
17
  "grok_brainstorm": false,
18
18
  "grok_search": true,
19
+ "grok_search_lite": true,
19
20
  "openai_reason": true,
20
21
  "openai_brainstorm": true,
21
22
  "openai_code_review": false,
@@ -16,6 +16,7 @@
16
16
  "grok_architect": false,
17
17
  "grok_brainstorm": false,
18
18
  "grok_search": false,
19
+ "grok_search_lite": false,
19
20
  "openai_reason": false,
20
21
  "openai_brainstorm": false,
21
22
  "openai_code_review": true,
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Default profile — all tools enabled for maximum capability (64 tools)",
2
+ "description": "Default profile — all tools enabled for maximum capability (65 tools)",
3
3
  "tools": {
4
4
  "think": true,
5
5
  "focus": true,
@@ -16,6 +16,7 @@
16
16
  "grok_architect": true,
17
17
  "grok_brainstorm": true,
18
18
  "grok_search": true,
19
+ "grok_search_lite": true,
19
20
  "openai_reason": true,
20
21
  "openai_brainstorm": true,
21
22
  "openai_code_review": true,
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Heavy coding with all reasoning & code tools (57 tools)",
2
+ "description": "Heavy coding with all reasoning & code tools (58 tools)",
3
3
  "tools": {
4
4
  "think": true,
5
5
  "focus": true,
@@ -16,6 +16,7 @@
16
16
  "grok_architect": true,
17
17
  "grok_brainstorm": true,
18
18
  "grok_search": true,
19
+ "grok_search_lite": true,
19
20
  "openai_reason": true,
20
21
  "openai_brainstorm": true,
21
22
  "openai_code_review": true,
@@ -16,6 +16,7 @@
16
16
  "grok_architect": false,
17
17
  "grok_brainstorm": false,
18
18
  "grok_search": false,
19
+ "grok_search_lite": false,
19
20
  "openai_reason": false,
20
21
  "openai_brainstorm": false,
21
22
  "openai_code_review": false,
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Research-focused with Grok search + all Perplexity + brainstorming (35 tools)",
2
+ "description": "Research-focused with Grok search + all Perplexity + brainstorming (36 tools)",
3
3
  "tools": {
4
4
  "think": true,
5
5
  "focus": true,
@@ -16,6 +16,7 @@
16
16
  "grok_architect": false,
17
17
  "grok_brainstorm": false,
18
18
  "grok_search": true,
19
+ "grok_search_lite": true,
19
20
  "openai_reason": false,
20
21
  "openai_brainstorm": true,
21
22
  "openai_code_review": false,
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: audit
3
+ description: Use when the user wants a security review of code or a diff — OWASP/CWE findings with severity, taint/data-flow analysis, and concrete fixes via security_review
4
+ user-invocable: true
5
+ ---
6
+
7
+ # /audit — Security Review
8
+
9
+ Run a dedicated security audit with the `security_review` tool — it carries an attacker mental model (taint/data-flow, OWASP/CWE), not a generic code review.
10
+
11
+ ## Steps
12
+
13
+ 1. Scope the review: a diff (paste it, or `git diff`) to check changed code only, or `code` / `files` for a whole component.
14
+ 2. Add what sharpens it: `language`/framework, and `context` for the trust boundaries (e.g. "public internet-facing API", "internal service behind VPN", "handles untrusted uploads").
15
+ 3. Choose `standard`: `owasp`, `cwe`, or `both` (default).
16
+ 4. Call `security_review({ code | diff | files, language?, context?, standard? })`.
17
+ 5. Relay findings led by the highest severity — each has a CWE/OWASP ref, a short exploitability sketch, and a concrete fix. Offer to apply the top fix.
18
+
19
+ For code you are authorized to review. Requires OPENROUTER_API_KEY. If the tool returns its missing-key error, relay it and suggest /setup.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: test
3
+ description: Use when the user wants tests generated for code or a diff — enumerates edge cases and failure modes first, then emits runnable test code via testgen
4
+ user-invocable: true
5
+ ---
6
+
7
+ # /test — Generate Tests
8
+
9
+ Generate runnable tests for code with the `testgen` tool (a coding-specialized model that lists edge cases before writing tests).
10
+
11
+ ## Steps
12
+
13
+ 1. Collect the code under test. If the user pointed at files, pass them via `files` (use `path:start-end` line ranges for large files). Otherwise take the pasted `code`.
14
+ 2. Infer the test framework from the project (jest / vitest / pytest / go test / …) or ask, and pass it as `framework`. If there are existing tests nearby, paste one via `existingTests` so the generated tests match your conventions.
15
+ 3. Pick the coverage focus from intent: `edge` (boundaries + failure modes), `happy` (main paths), `regression` (lock current behavior), or `all` (default).
16
+ 4. Call `testgen({ code | files, framework?, coverage?, existingTests? })`.
17
+ 5. Relay the generated test file, then offer to write it to the right path and run it.
18
+
19
+ Requires OPENROUTER_API_KEY. If the tool returns its missing-key error, relay it and suggest /setup.
package/tools.config.json CHANGED
@@ -23,7 +23,8 @@
23
23
  "debug_triage",
24
24
  "grok_architect",
25
25
  "grok_brainstorm",
26
- "grok_search"
26
+ "grok_search",
27
+ "grok_search_lite"
27
28
  ],
28
29
  "openai": ["openai_brainstorm", "openai_reason", "openai_code_review", "openai_explain", "openai_search", "spec_writer", "refine_prompt"],
29
30
  "gemini": [
@@ -73,6 +74,7 @@
73
74
  "grok_architect": true,
74
75
  "grok_brainstorm": true,
75
76
  "grok_search": true,
77
+ "grok_search_lite": true,
76
78
  "openai_brainstorm": true,
77
79
  "openai_reason": true,
78
80
  "openai_code_review": true,