code mode

Code Mode

Code Mode 是 Hawa Code 内置的一款工具,它允许模型通过一段 JavaScript 代码来调用已配置的 MCP server 能力,并把执行结果返回给模型继续处理。

简单来说,Code Mode 把 MCP server 的工具变成了一段可编程的 JavaScript API。你可以像写普通 JS 一样,把多个 MCP 工具的调用组合起来,完成搜索、查询、计算、写入等更复杂的任务。

  • 支持几万级别 MCP 工具数量,通过 Search 渐进式按需发现,不占用上下文窗口体积。
  • 通过代码串联多个 MCP 工具调用,减少 MCP 工具调用结果往复传输,减少 Token 使用。
  • 通用的代码逻辑可以保存,自动复用,可以实现业务功能自进化。

Code Mode 界面


快速开始

1. 配置文件

Code Mode 使用 .codemode.json 配置 MCP server,格式与 .mcp.json 一致。

配置文件支持两个层级:

  • 全局配置:~/.hcode/.codemode.json
  • 项目配置:{项目目录}/.codemode.json

项目配置会覆盖全局配置。

示例 .codemode.json

{
"mcpServers": {
"supabase": {
"type": "http",
"url": "https://mcp.supabase.com/mcp",
"headers": {
"Authorization": "Bearer your-token"
}
},
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "Bearer your-token"
}
}
}
}

提示:如果没有单独配置 .codemode.json,Code Mode 也会复用 Hawa Code 已有的 MCP 配置(全局配置、项目配置、.mcp.json)。

2. 使用方式

在对话中让 Hawa Code 进入 Code Mode,模型会自动生成 JavaScript 代码并执行。你无需手动安装插件或执行额外命令。

典型用法:

  • 调用某个 MCP 工具查询数据
  • 组合多个 MCP 工具完成多步骤任务
  • 搜索可用工具并自动发现能力

代码格式

Code Mode 接收一段 JavaScript 异步箭头函数,并执行它。

你可以直接写箭头函数体:

async () => {
const result = await codemode.supabase.list_tables();
return result;
}

也可以只写函数体内容,系统会自动包装:

const result = await codemode.supabase.list_tables();
return result;

调用 MCP 工具

已配置的 MCP server 会以 <codemode.<server>.<tool>> 的形式暴露为 JavaScript 函数。

例如,配置了一个名为 supabase 的 server,其中有一个工具叫 list_tables,可以这样调用:

async () => {
const tables = await codemode.supabase.list_tables();
return tables;
}

如果 server 名或工具名包含特殊字符,会自动转换为合法的 JavaScript 标识符。例如 my-server 会变成 codemode.my_server


发现可用工具

搜索工具

如果你不确定某个能力在哪里,可以使用 codemode.search()

async () => {
const matches = await codemode.search("list tables");
return matches;
}

返回的结果包含工具路径、所属 server、方法名、描述和匹配分数,帮助你快速定位需要的工具。

查看工具详情

使用 codemode.describe() 查看某个工具的类型定义和参数说明:

async () => {
const docs = await codemode.describe("supabase.list_tables");
return docs;
}

也可以只描述整个 server:

async () => {
const docs = await codemode.describe("supabase");
return docs;
}

保存和复用代码片段

你可以把常用的代码保存为 snippet,方便后续调用:

async () => {
await codemode.saveSnippet(
"list-supabase-tables",
"const tables = await codemode.supabase.list_tables(); return tables;",
"列出 supabase 中的所有表"
);
return "saved";
}

snippet 会保存在项目目录的 .codemode-snippets.json 文件中,和 MCP 工具一样可以被 codemode.search()codemode.describe() 找到。


组合多个工具

Code Mode 的真正价值在于可以组合多个 MCP 工具完成复杂任务。

例如:

async () => {
const tables = await codemode.supabase.list_tables();
const details = [];
for (const table of tables.slice(0, 5)) {
const schema = await codemode.supabase.describe_table({ table });
details.push({ table, schema });
}
return details;
}

执行环境说明

  • Code Mode 在独立的 Node 子进程中执行代码,代码通过 IPC 与 Hawa Code 通信。
  • 执行环境不包含 fsrequireprocess 等 Node.js API,所有 I/O 只能通过已配置的 MCP 工具完成。
  • 单次执行默认超时时间为 60 秒,超时会自动终止。
  • 标准 JavaScript 语法可用,但不支持 TypeScript 类型注解

权限与确认

Code Mode 属于需要用户确认的工具。执行前会询问你是否允许,确认后才会运行代码。如果你开启了自动权限模式,符合条件时可能无需每次确认。


常见场景

场景 示例
查询数据库 codemode.supabase.query({ sql: "SELECT * FROM users" })
查询 GitHub 信息 codemode.github.search_issues({ query: "repo:owner/repo is:open" })
组合多工具 先列表面板,再查询每个表的 Schema
复用逻辑 把常用查询保存为 snippet

故障排查

执行超时

如果代码执行超过 60 秒,会返回超时错误。建议拆分为多个步骤,或减少单次处理的数据量。

找不到工具

  • 检查 .codemode.json 是否已正确配置。
  • 使用 codemode.search("关键词") 确认工具是否已加载。
  • 使用 codemode.describe("server.tool") 查看工具名是否正确。

返回结果过长

Code Mode 会自动截断过长的结果,避免占用过多上下文。如果结果被截断,建议使用更精确的查询条件,或分批获取数据。


小结

Code Mode 把 MCP server 的能力变成了一段可执行的 JavaScript 代码,让模型可以:

  • 自动发现工具
  • 组合多个工具
  • 复用常用代码片段
  • 在安全的沙箱环境中执行

通过 Code Mode,你可以让 Hawa Code 处理更复杂、更灵活的多步骤任务。