@bkm016/basalt

中文文档
0.1.29发布于 2026/11/08MITES Module零依赖近 30 天下载 5100

本地首个AI软件工程代理运行时间和网络工作台

中文使用文档
文档目录18 节
  1. 核心特性
  2. 系统架构与工作区
  3. 工作区包一览
  4. 内置插件模块
  5. 快速开始
  6. 全局安装
  7. 从源码运行
  8. 配对与首次使用
  9. 远程访问(Cloudflare 隧道)
  10. 命令行与配置参考
  11. CLI 选项
  12. 环境变量
  13. 数据目录与存储布局
  14. 插件开发
  15. 最小服务端插件示例
  16. 构建、验证与开发脚本
  17. 版本发布
  18. 工程文档索引
Basalt

Basalt

Basalt(玄武岩)是基于 Bun 与严格 TypeScript 构建的本地优先、可扩展 AI 工程代理运行时与 Web 工作台。

它采用 启动即服务(Launch-as-a-Server) 与 微内核 + 全栈插件(Microkernel & Full-stack Plugins) 架构:服务直接运行在本地开发机上,具备完整的文件系统、Shell 进程、隔离浏览器与 MCP(Model Context Protocol)访问能力;前端工作台既可由单文件可执行程序直接内嵌提供,也可独立部署并通过一次性配对码与本地服务建立受保护的 HTTP / WebSocket 连接。


核心特性

  • 单文件分发,启动即服务:可编译为内嵌 Web 工作台的零依赖单文件可执行程序;服务在本地运行并直连开发机环境,支持通过终端二维码或一次性配对码从桌面、手机或远程浏览器跨设备安全接入。
  • 微内核与热插拔全栈插件:核心仅保留会话、存储与工具调度原语;17 个内置模块与自定义扩展共享同一套插件 SDK,支持后端路由、生命周期钩子与前端动态视图不停机热重载,并可在对话中直接编写、测试与加载新插件。
  • 完备的工程代理工具链:原生提供文件并发读取与批量精确编辑、会话级后台进程管理与流式日志监控、受控隔离浏览器自动化(快照、交互、调试、截图)、联网搜索抓取,以及 MCP 与 Skills 生态无缝接入。
  • 多代理协作与长周期自治:支持创建跨模型子代理任务并控制上下文继承策略;结合持久目标与预算控制(Goal)、延时自唤醒(Wake)与 Cron 定时任务(Automations),可独立推进跨阶段、长耗时的工程与运维工作。
  • 长程上下文压缩与透视工作台:自动对超长对话执行分层封存与摘要折叠,在保持模型缓存高命中率的同时支持随时检索折叠原文;配套 React 19 工作台支持会话任意节点分叉重放、实时上下文构成透视、用量统计与多协议模型热切换。

系统架构与工作区

Basalt 采用 Bun Workspaces 管理的单仓多包(Monorepo)结构,严格约束包边界与单向依赖流向:

cli ──► builtins ──► plugin ──► core ──► protocol
 │         ▲           ▲         ▲          ▲
 │         └───────────┼─────────┼──────────┤
 └────────► server ────┼─────────┘          │
              │        │                    │
              ▼        │                    │
             web ──────┴────────────────────┘

工作区包一览

包名路径职责说明
@basalt/protocolpackages/protocol跨进程、服务端与 Web 客户端共享的唯一线协议(PROTOCOL_VERSION = 4)、消息契约与数据类型,零运行时与平台依赖。
@basalt/corepackages/core核心领域运行时(Runtime)、会话生命周期(Session)、SQLite 存储(Store)、上下文投影与折叠引擎(Projection)、全文搜索服务(SearchService)及插件宿主(PluginHost)。
@basalt/pluginpackages/plugin插件开发 SDK,导出 definePlugin、工具构造器、生命周期与条目 Hook 类型,以及供前端动态模块使用的 @basalt/plugin/web 桥接契约。
@basalt/builtinspackages/builtins基于 @basalt/plugin 实现的 17 个随包内置功能插件(含服务端逻辑、独立协议与配套 Web 视图),彼此之间零实现导入耦合。
@basalt/serverpackages/server基于 Bun.serve 与 Hono 的 HTTP API(/api/*)、增量同步 WebSocket(/api/ws)、设备配对与令牌鉴权(Auth)及模型提供商管理(ModelProviderManager)。
@basalt/webpackages/webReact 19 前端工作台,包含设计令牌系统、通用 UI 原语(Radix UI + Motion)、会话流式视图、Shiki 按需语法高亮、Mermaid/KaTeX 渲染与插件动态视图插槽。
@basalt/clipackages/cli命令行入口(basalt)、单实例进程锁管理、Windows 系统托盘集成、终端二维码配对引导及单文件可执行程序编译入口。

内置插件模块

@basalt/builtins 中的所有模块均通过标准 PluginHost 装配,可在 Web 设置中心或通过管理 API 独立启用、禁用、查看状态或热重载:

插件 ID名称核心职责与提供能力
agents子代理委派提供 task / task_job 工具与子任务卡片视图;管理子会话生命周期、readonly 工具授权策略、跨会话历史引用与完成通知。
automations自动化支持按 Cron 表达式与服务器时区定时启动项目会话自动执行任务,提供独立的自动化管理页面。
basalt-creatorBasalt Creator提供 basalt_plugin 工具与内嵌开发文档,支持在会话中创建、静态校验(check/verify)、无头 UI 测试(ui_test)及热加载用户插件。
bash进程与监控提供 bash、bash_job 与 monitor 工具及后台任务卡片视图,管理会话级后台进程池、交互式标准输入与流式输出正则监控通知。
browser浏览器提供 8 个延迟加载的 browser_* 工具,管理按会话/项目隔离的受控浏览器实例、可访问性树快照与端到端页面验证。
computer-use控制电脑仅 Windows:提供延迟加载的 computer_use 工具与配套 computer-use 技能,通过已安装的 Codex 桌面端 helper 操作本机应用;操作应用前弹出授权(允许本次 / 本会话始终允许 / 拒绝),选择始终允许后本会话内所有应用都不再弹窗。
context上下文透视提供 GET /api/sessions/:id/context 快照路由与右侧上下文透视面板(展示系统提示词分段、封存/折叠块、可用工具 Schema、待办与原始消息)。
goal持久目标提供 goal_create / goal_get / goal_update 工具与目标状态栏,支持会话级长周期目标追踪、Token 预算控制、耗时统计与自动续跑审计。
imagegen图像生成提供 image_generation 延迟工具与配套 imagegen 技能指南,支持文生图与基于参考图的视觉编辑。
markdown-graph图表渲染将回复中的 mermaid 代码块实时渲染为流程图/时序图,将 echarts 代码块渲染为交互式数据图表。
mcpMCP 集成管理全局与项目级(.mcp.json)Model Context Protocol 服务器连接、OAuth 认证、工具快照同步及设置页管理视图;模型可经内置 basalt_mcp 工具直接安装与运维服务器。
prompt-optimizer提示词优化在输入框提供草稿澄清与优化能力,使用显式选择的模型在独立请求中改写提示词,不污染当前会话历史。
question交互提问提供主会话 question 工具、输入等待闸门(waiting_user)与交互式提问面板,支持单选、多选与自定义补充回答。
session-ops会话操作提供会话复制(duplicate)、任意序号分叉(fork)、历史消息编辑(edit)与破坏性重放(replay)路由、命令及确认交互。
skills技能系统扫描并管理全局与项目级技能目录(SKILL.md),提供 skill 按需加载工具、确定性系统提示词片段注入与设置页开关。
stats统计分析提供一级统计分析页面,聚合全局、各项目与每日的运行耗时、Token 消耗、缓存命中率、模型吞吐量与工具调用分布。
wake定时唤醒提供会话内 wake 工具(set / list / cancel),支持基于追加日志持久化的延时自唤醒通知,服务重启后自动恢复与补投。
webfetch网络访问提供延迟加载的 webfetch(网页抓取转 Markdown/Text/HTML 及图片提取)与 websearch(多渠道联网搜索与回退)工具及配置测试页。

快速开始

全局安装

通过 npm 或 Bun 全局安装预构建、零外部依赖的 @bkm016/basalt(约 4 MB,内嵌完整 Web 工作台):

# 通过 npm 全局安装(推荐,若本机尚未安装 Bun 会在首次启动时自动按需下载运行时)
npm i -g @bkm016/basalt

# 或使用 Bun 全局安装
bun i -g @bkm016/basalt

# 后台启动并打开工作台(就绪后命令返回,服务继续运行)
basalt --open

# 提示 command not found 时(Bun 的全局 bin 目录不在 PATH),先用完整路径运行一次 setup,再重开终端
~/.bun/bin/basalt setup

升级:服务运行时每 6 小时查一次 npm 上的最新版本,按安装方式自动用 npm 或 bun 全局安装,并等所有对话空闲后按原参数重启,不会打断进行中的对话。也可以手动更新,运行中的服务同样会在空闲时切换到新版本:

basalt update
# 或直接用包管理器
npm i -g @bkm016/basalt@latest
bun add -g @bkm016/basalt@latest

从源码运行

需要安装 Bun >= 1.4.0:

bun install
bun run dev                            # 启动开发服务器(支持热重载)
bun packages/cli/src/main.ts --demo --open  # 无需 API Key,使用内置演示模型体验工作台

配对与首次使用

  1. 首次启动建议使用 basalt --open,服务就绪后会自动在浏览器中打开带配对链接的工作台。未使用 --open 或配对码已过期时,在服务所在机器上运行 basalt pair,即可生成 10 分钟有效的一次性配对码及配对链接。
  2. 首次进入工作台若尚未配置模型,界面会引导前往「设置 → 模型」添加服务商与 API Key。

远程访问(Cloudflare 隧道)

用自己域名下的固定主机名,从手机或另一台电脑访问这台机器上的 Basalt。前提:域名托管在 Cloudflare,本机装好 cloudflared。

在工作台 设置 → 远程访问 里按向导走,全程不用进 Cloudflare 后台:

  1. 连接 Cloudflare 账号:点「连接 Cloudflare」,Basalt 会给出一个授权链接。在浏览器(手机也行)里打开它,登录并选择你的域名,点授权。完成后页面自动继续。
  2. 选一个访问地址:填该域名下的子域名,如 basalt.example.com。
  3. 创建并连接:Basalt 通过 cloudflared 自动创建隧道、添加域名解析、写好转发配置并连接。

之后每次启动 basalt 都会自动带起隧道,随 Basalt 退出而退出,掉线自动重连;终端里的配对二维码和链接改用 https://basalt.example.com。授权证书和隧道凭据保存在数据目录的 cloudflared/ 下,不会写进你自己的 ~/.cloudflared。

已经在 Cloudflare 后台建好隧道的人,向导里点「我已有隧道令牌」,把后台给出的安装命令整段粘贴进来即可(也可用命令行:BASALT_TUNNEL_TOKEN=<令牌> basalt tunnel set basalt.example.com;basalt tunnel status / basalt tunnel off 查看或删除)。令牌模式下,隧道的服务地址要在 Cloudflare 里填 http://localhost:<端口>,设置页会显示端口。

可选:Cloudflare Access(再加一道只认你的登录)

配好之后在同一页的「Access 校验」点「配置引导」,再点弹窗里的链接直达你账号的 Cloudflare 应用程序页(账号 ID 从登录证书自动读出,令牌模式则先进入 Zero Trust)。点右上角「新建应用程序」,选「自托管和私有」、保持「公共 DNS」,点「继续使用」;「子域」填子域名(如 micode)、「域」下拉选根域(如 taboo.sh),路径留空;在「Access 策略」里点「创建新策略」,选「允许」、按「电子邮件」填你的邮箱;只允许指定 GitHub 用户时,再在「要求」里加「登录方法 = GitHub」,并在「身份验证」里关闭「接受所有可用的标识提供程序」、只选 GitHub(「应用即时身份验证」开启后会直接跳 GitHub),然后点「创建」;最后到应用的「其他设置」→「AUD 标签」,复制「令牌」下的字符串,回到 Basalt 点「设置」粘贴,团队域名会自动识别。之后经隧道进来的请求必须带 Cloudflare 签发的有效 JWT,否则被直接拒绝。

安全说明

  • 配置了远程访问就不能用 --no-auth 启动,设置页也会拒绝在免认证服务上开启。
  • 配了 Access 后,Basalt 会校验 Cloudflare 签发的 Cf-Access-Jwt-Assertion(签名、颁发者、Audience、有效期;公钥取自团队域名的 /cdn-cgi/access/certs):经隧道进来且没有合法凭据的请求会被直接 403,即使 Access 策略被误改成放行也不会只剩 Basalt 自己的令牌守着公网。本机直连不受影响。
  • 直接用 https://你的主机名 打开时,页面与 API 同源,无需额外设置。若用 basalt.work 等其他网址连接,需要在 Access 应用里为跨域请求开启「Bypass OPTIONS」,并在添加服务器时填写服务令牌请求头(CF-Access-Client-Id / CF-Access-Client-Secret)。
  • 远程设备只能用终端里的配对码配对;「本机免码授权」对经隧道的请求不可用。

命令行与配置参考

CLI 选项

用法: basalt [选项]                       后台启动服务,就绪后返回
      basalt status                         查看服务状态
      basalt stop                           停止服务
      basalt restart                        按原参数重启服务
      basalt logs                           查看最近后台日志
      basalt pair                           为运行中的服务生成新配对码和配对链接
      basalt autostart <enable|disable|status> 管理登录自启
      basalt update                         用安装时的 npm/bun 更新到最新版本(运行中的服务空闲时自动重启)
      basalt setup                          把 basalt 所在目录加入 PATH(装完提示找不到命令时用)
      basalt plugin reload <id> [--data <目录>]
      basalt tunnel set <主机名> [--token <令牌>] [--aud <Audience> [--team <团队域名>]]
      basalt tunnel off | status             远程访问(Cloudflare 隧道)

选项:
  --host <地址>          监听地址(默认 127.0.0.1,仅本机回环)
  --port <端口>          监听端口(默认 7420)
  --open                 启动后在浏览器里打开工作台(带配对链接)
  --foreground           在前台运行服务,供调试、launchd 和 systemd 使用
  --replace              已有实例在运行时先停止旧实例再启动
  --model <provider/id>  指定启动时默认使用的模型(如 anthropic/claude-sonnet-4-20250514)
  --demo                 启用内置演示模型(demo/echo,无需 API Key)
  --data <目录>          指定运行时数据目录(默认遵循平台规范或 BASALT_HOME)
  --web-url <地址>       生成配对链接时使用的外部 Web 工作台地址
  --allow-origin <来源>  允许跨域访问的 Web 来源,可多次传入;* 表示允许任意来源
  --token <令牌>         tunnel set 用:隧道令牌(更推荐用环境变量,避免进 shell 历史)
  --aud <Audience>       tunnel set 用:Access 应用的 Audience 标签
  --team <团队域名>      tunnel set 用:Access 团队域名(不填按公共域名的登录跳转自动探测)
  --no-tray              不启动系统托盘图标
  --no-update-check      不自动检查和安装新版本(也可设 BASALT_NO_UPDATE_CHECK=1)
  --no-auth              关闭令牌认证(仅本机监听可用,或需配合 --allow-remote-no-auth)
  --insecure-http        允许在非本机回环地址上使用明文 HTTP 监听
  --allow-remote-no-auth 允许在非本机回环地址上关闭认证(极不安全,仅限受控隔离环境)
  -v, --version          显示版本
  -h, --help             显示帮助信息

默认 basalt 会在后台启动服务,等待 HTTP 就绪后返回终端;需要查看实时输出或由服务管理器托管时使用 --foreground。basalt restart 沿用当前实例的参数和工作目录,basalt logs 读取最近 256 KB 后台日志。

执行一次 basalt autostart enable 即可注册当前用户的登录自启:Windows 使用隐藏启动脚本,macOS 使用 LaunchAgent,Linux 使用 systemd 用户服务。启动项固定当前 Bun/npm 包入口,登录时不会联网安装或升级;disable 关闭自启,status 查看配置。启用时会沿用正在运行实例的参数,不会改变或重启当前服务。

自启只保存启动参数、数据目录和工作目录,不复制当前终端的环境变量。只在交互式 shell 中设置的 API Key、BASALT_MODEL 等变量不会自动带入登录会话;请在 Web 中配置模型,或把所需变量配置到系统用户环境。

环境变量

环境变量说明
BASALT_HOME显式指定 Basalt 数据根目录,优先级高于平台默认路径。
BASALT_MODEL默认启动模型标识符(格式为 <provider>/<model-id>),命令行 --model 优先级高于此变量。
BASALT_TOKEN执行 basalt plugin reload <id> 等 CLI 进程外管理命令时,用于向已开启认证的运行中服务提供设备令牌。
BASALT_TUNNEL_TOKENbasalt tunnel set 读取的 Cloudflare 隧道令牌,等价于 --token。
BASALT_NO_UPDATE_CHECK设为 1 时禁用后台自动检查与安装新版本;手动装好的新版本仍会在对话空闲时生效。
ANTHROPIC_API_KEY / OPENAI_API_KEY 等供显式指定的 pi 内置模型解析凭据;对应 provider 不会自动进入 Basalt 模型列表。

数据目录与存储布局

未指定 --data 与 BASALT_HOME 时,Basalt 按操作系统惯例存放运行时数据:

  • Windows:%LOCALAPPDATA%\basalt(或 ~\AppData\Local\basalt)
  • macOS:~/Library/Application Support/basalt
  • Linux / BSD:$XDG_DATA_HOME/basalt(或 ~/.local/share/basalt)

数据目录内核心文件结构:

<dataDir>/
├── basalt.db        # 主 SQLite 数据库(会话、只追加条目日志、项目、插件迁移与 KV 存储)
├── search.db        # 独立 Worker 维护的会话历史全文检索索引库
├── models.json      # Web 端配置的自定义模型提供商与脱敏凭据持久化文件
├── devices.json     # 已配对设备的元数据与令牌 SHA-256 哈希记录
├── basalt.log       # 后台服务标准输出与错误日志
├── server.json      # 单实例运行锁文件(记录当前活动服务的 PID、监听 URL 与托盘句柄)
└── plugins/         # 用户级自定义插件目录(支持 <id>.ts 或 <id>/index.ts)

插件开发

Basalt 支持在用户数据目录 <dataDir>/plugins/ 或项目工作区 <project>/.basalt/plugins/ 下编写进程内、完全信任的 Bun TypeScript 全栈插件。

最小服务端插件示例

创建 <dataDir>/plugins/hello.ts:

import { definePlugin, Type, text, tool } from "@basalt/plugin"

export default definePlugin({
  id: "hello",
  name: "Hello Plugin",
  description: "最小工具与生命周期扩展示例",
  version: "1.0.0",
  apiVersion: 1,
  setup(b) {
    // 1. 注册供模型调用的工具
    b.registerTool(
      tool({
        name: "hello_greet",
        label: "问候",
        description: "向指定对象返回问候消息",
        parameters: Type.Object({
          target: Type.String({ minLength: 1 }),
        }),
        async execute(_callID, { target }) {
          return text(`你好,${target}!`)
        },
      }),
    )

    // 2. 注册自定义 HTTP 路由(自动复用宿主来源检查与令牌认证)
    b.registerRoute({
      method: "GET",
      path: "/api/plugins/hello/status",
      handler() {
        const recentSessions = b.sessions.list({ limit: 5 })
        return Response.json({ ok: true, recentCount: recentSessions.length })
      },
    })
  },
})

保存后可通过以下任一方式热重载插件,无需重启服务进程:

basalt plugin reload hello

或在 Web 工作台的「设置 → 插件」页面中点击重载。关于同目录 web.tsx 动态前端模块(Sidebar / Page / Tab / Card / Slot)、SQL 迁移、条目 Hook(entry.before_append / entry.after_append)与代际租约的完整契约,请参阅 插件 SDK 文档 与 宿主架构设计。


构建、验证与开发脚本

在仓库根目录下执行以下命令进行日常开发、质量检查与生产构建:

命令说明
bun run dev以守护模式启动本地 CLI 与内嵌 Web 服务:监听源码变更,重启前先整包预检,预检失败时保持当前服务运行不退出。
bun test运行所有工作区包的单元与集成测试套件。
bun run typecheck使用 tsgo 对所有工作区包执行严格 TypeScript 类型检查。
bun run lint使用 Biome 检查全仓代码规范、导入排序与格式一致性。
bun run format使用 Biome 自动格式化全仓代码。
bun run build编译内嵌完整 Web 前端资源的单文件可执行程序,产物位于 packages/cli/dist/basalt(Windows 下为 basalt.exe)。
bun run build:web构建可独立部署(如 Vercel)的静态 Web 工作台与 PWA 资产,产物位于 packages/web/dist(Shiki 语言包自动按需分块)。
bun run build:npm构建自包含、零外部依赖的 npm 发布包(含预构建 Web 静态目录与 Node/Bun 双运行时引导入口),产物位于 packages/cli/dist/npm。

如需交叉编译单文件可执行程序,可直接向构建脚本传入 --target 参数:

bun scripts/build.ts cli --target=bun-windows-x64
bun scripts/build.ts cli --target=bun-darwin-arm64
bun scripts/build.ts cli --target=bun-linux-x64

版本发布

更新 packages/cli/package.json 中的 version 字段并推送至 main 分支,GitHub Actions 检测到 @bkm016/basalt 的该版本尚未发布到 npm 时,将自动构建 npm 包并发布(需在仓库机密中配置 NPM_TOKEN;包含 - 的版本号如 0.2.0-beta.1 将发布到 next 标签,不进入 latest)。


工程文档索引

版本与发布记录

@bkm016/basalt 共发布 31 个版本,首次发布于 2026/10/23;过去 12 个月发布了 31 个版本。

版本发布日期距今
0.1.29latest2026/11/08今天
0.1.282026/11/07今天
0.1.272026/11/07今天
0.1.262026/11/062 天前
0.1.252026/11/053 天前
0.1.242026/11/043 天前

关于 @bkm016/basalt 的常见问题

@bkm016/basalt 是什么?

本地首个AI软件工程代理运行时间和网络工作台

如何安装 @bkm016/basalt?

在项目目录运行 npm install @bkm016/basalt,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 basalt,可以用 npx basalt 直接运行。

@bkm016/basalt 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bkm016__basalt 是否存在。

@bkm016/basalt 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@bkm016/basalt 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@bkm016/basalt 可以商用吗?

@bkm016/basalt 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bkm016/basalt 的下载量有多少?

根据 npm 官方下载统计,@bkm016/basalt 在 2026/10/08 – 2026/11/06 这 30 天内被下载 5,100 次,日均约 170 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bkm016/basalt 还在维护吗?

最新版本 0.1.29 发布于 2026/11/08(今天);至今共发布 31 个版本,其中过去 12 个月发布了 31 个;首次发布于 2026/10/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。