alkaid0

command module
v0.3.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 29, 2026 License: GPL-3.0 Imports: 1 Imported by: 0

README

alkaid0-logo

GitHub Repo stars GitHub Release GitHub License GitHub go.mod Go version Build and Package

Alkaid0

Alkaid0 是一个模块化的 AI Coding 工具 与 Agent 框架,专为构建具备多 Agent 能力、工具调用系统和流式响应处理功能的智能编码助手而设计。该框架基于 Go 语言构建。

设计理念:低消耗 用户友好 可扩展 强兼容性


核心特性

  • 多 Agent 架构:支持主 Agent 与子 Agent(Subagent)嵌套调用,子 Agent 可独立绑定路径和作用域
  • 沙箱安全执行:内置沙箱隔离机制,Linux 使用 mount namespace,Windows 使用 DACL + 受限令牌
  • 会话管理:支持会话断连延迟释放(保留上下文,断线可重连恢复)、后台运行模式
  • 自动审批规则:基于 expr 表达式引擎,支持细粒度工具调用自动审批/拒绝
  • 测试覆盖:持续提升测试覆盖率,集成 mock 服务器测试

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

日志

路径 ~/.config/alkaid0/log.log (直接启动二进制文件) / /var/log/alkaid0/log.log (Linux 系统级别安装) / C:\ProgramData\alkaid0\config.json (Windows 系统级别安装)

日志经过脱敏处理(脱去 Provider URL / KEY),但会保留请求的 Model ID 和 Agent Name 以及完整输入输出。日志不会携带工作区信息但 AI 模型的输出可能会包含部分用户代码。

提供 toolkit 包以查看日志。用法见其 --help


配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json
{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",

    "Version": 1,
    "ThemeID": 0,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里没用)",
        "ProviderKey": "sk-or-xxx(这里没用)",
        "DefaultModelID": 1,
        "Models": {
            "0": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ModelDescription": "模型描述(可选)",
                "ModelAddPrompt": "附加系统提示词(可选)",
                "ModelTopP": -1,
                "ModelTopK": -1,
                "ModelTemperature": -1,
                "TokenLimit": 8192,
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "EnableToolCalling": false,
                "CompressSize": 128000,
                "Hide": false,
                "Type": "",
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false,
                    "EnableUsage": true,
                    "Dimension": 0
                }
            },
            "1": {
                "ModelName": "embedding模型名",
                "ModelID": "embedding模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "EnableToolCalling": false,
                "Hide": true,
                "Type": "embedding",
                "ProviderSpecificConfig": {
                    "Dimension": 1024
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentShortDescription": "擅长前端开发的前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 0,
                "AutoApprove": "",
                "AutoReject": "",
                "DisableSandbox": false
            }
        },
        "IgnoreBuiltinAgents": false,
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 0,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": "",
        "IgnoreDefaultRules": false,
        "DisablePromptPreprocess": false,
        "UseShell": "",
        "TerminalEnvs": {
            "LANG": "zh_CN.UTF-8"
        },
        "DisableSandbox": false
    },
    "ignoreSignals": false,
    "Context": {
        "LSP": {
            "Enabled": false,
            "IdleTimeout": 600,
            "LanguageServers": {
                ".go": {
                    "Command": "gopls",
                    "Args": []
                }
            }
        },
        "EmbeddingModelID": 1,
        "SearchSummaryModel": 0,
        "OnlineSearch": {
            "timeout": 30,
            "proxy_url": "",
            "retry_count": 3,
            "bing": {
                "enable": true,
                "min_delay": 2,
                "max_delay": 5,
                "max_results": 10
            },
            "github": {
                "enable": false,
                "token": "ghp_xxx",
                "max_results": 5
            },
            "arxiv": {
                "enable": false,
                "max_results": 5
            },
            "tavily": {
                "enable": false,
                "api_key": "tvly-xxx",
                "search_depth": "basic",
                "include_answer": false,
                "include_raw_content": false,
                "max_results": 10
            }
        },
        "Codebase": {
            "BM25Weight": 0.7,
            "VectorMinSimilarity": 0.5,
            "BM25RetentionScore": 0.0
        }
    },
    "Server": {
        "Key": "<你的 websocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": false,
        "SessionTimeout": 60
    }
}
远程配置 RPC

支持通过 RPC 方法 alk.cxykevin.top/config/getalk.cxykevin.top/config/set 远程读取和修改配置,方便客户端集成。


客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。此时服务端同时会启动一个标准的 stdio 服务器便于调试。

服务端使用 Query 参数认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。如果你使用 go install 安装,则服务器绑定到了 alkaid0,单独的 helper 可以使用 alk 命令。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端不允许空 key 启动(stdio 服务器正常工作)。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。


会话管理

支持会话断连延迟释放——客户端断开后会话不会立即销毁,保留上下文状态,允许客户端重新连接后恢复。同时支持后台运行模式,适合长时间执行的命令或任务。


请求重试

网络请求采用指数退避重试机制,最多重试 3 次。当 LLM Provider 返回临时性错误时自动重试,提升系统稳定性。


终端与命令执行

命令执行 PTY 实现:

  • Linux/dev/ptmx PTY
  • macOS:基于 openpty
  • Windows:管道透传 (ConPTY 无法正确在 Service 中工作)
沙箱隔离
平台 隔离机制
Linux mount namespace + 挂载隔离
Windows 作业对象(Job Object)+ 令牌限制(Token Restrictions)
macOS 暂无

多 Agent 系统

支持动态创建、管理子 Agent(Subagent):

  • 每个子 Agent 可绑定特定工作路径、模型、提示词
  • 支持独立的作用域(Scope)控制
  • 子 Agent 可自动审批规则独立配置,未配置时回退到全局默认

Agent 命令

  • /effort (low|medium|high|xhigh|max|[unset]): 控制推理程度
  • /compress: 压缩上下文
  • /background (on|[off]): 后台运行
  • /reload: 重载配置
  • /approve 批准工具调用

ACP 协议扩展

docs 目录


自动审批规则(AutoApprove / AutoReject)

自动审批规则使用 github.com/expr-lang/expr 实现。这是一个轻量级的表达式语言,支持 C 风格的基本的逻辑运算和函数调用。

1. 可配置字段
  • 全局:Agent.AutoApprove / Agent.AutoReject
  • Subagent:Agent.Agents.{subagent}.AutoApprove / Agent.Agents.{subagent}.AutoReject
  • 规则空字符串表示不启用;Subagent 为空时会回退到全局默认。
2. 规则行为
  • Reject 优先:命中 AutoReject 直接拒绝,即使同时命中 AutoApprove。
  • Approve 需全需:所有 ToolCall 都命中 AutoApprove 才批准。
  • 程序内置了一套规则,AutoReject 和 AutoApprove 均取或的关系。AgentsConfig.IgnoreDefaultRules 设置为 true 后,全局默认规则不生效。除非你明确知道自己在做什么,否则不建议设置该字段。
3. 可用变量
  • ToolCalls:完整的 []ToolCall Array
  • ToolCall:当前工具调用(单个)
  • Agent:当前 Agent 配置

ToolCall 结构:

  • ToolCall.Name
  • ToolCall.ID
  • ToolCall.Parametersmap[string]*any,即 json 中 Object
4. 可用函数
  • regex(pattern, text) 正则匹配
  • contains(s, sub) 字符串包含
  • hasParam(call, key) 参数存在
  • param(call, key) 参数值
5. 示例
示例 A:仅允许 Read 自动批准(已经内置)
AutoApprove: "ToolCall.Name == 'trace'"
AutoReject:  ""
示例 B:拒绝任何包含 rm 的命令
AutoReject: "contains(ToolCall.Name, 'run') && regex('rm\\s', param(ToolCall, 'command'))"
示例 C:只允许 shell 且 command 包含 git status 或 git diff
AutoApprove: "ToolCall.Name == 'run' && (contains(param(ToolCall,'command'), 'git status') || contains(param(ToolCall,'command'), 'git diff'))"
示例 D:拒绝参数 key=path 且 path 以 /etc 开头
AutoReject: "hasParam(ToolCall, 'path') && regex('^/etc', param(ToolCall, 'path'))"

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
alk command
Package main 提供 alk 命令行程序的入口
Package main 提供 alk 命令行程序的入口
alkaid0 command
Package main 提供 alkaid0 命令行程序的入口
Package main 提供 alkaid0 命令行程序的入口
Package config 管理应用的配置加载、保存与热重载钩子
Package config 管理应用的配置加载、保存与热重载钩子
structs
Package structs 定义配置相关的数据结构与类型
Package structs 定义配置相关的数据结构与类型
context
codebase
Package codebase 代码向量数据库的生成与查询系统
Package codebase 代码向量数据库的生成与查询系统
lsp
Package lsp LSP 客户端实现
Package lsp LSP 客户端实现
Package helper 提供命令行连接工具
Package helper 提供命令行连接工具
internal
configutil
Package configutil 提供配置路径与其他配置相关的工具函数
Package configutil 提供配置路径与其他配置相关的工具函数
library
chancall
Package chancall 提供一个基于通道的异步调用机制,用于避免循环引用
Package chancall 提供一个基于通道的异步调用机制,用于避免循环引用
json
Package json 提供对 JSON 解析与封装的轻量工具
Package json 提供对 JSON 解析与封装的轻量工具
stack
Package stack 提供简单的栈数据结构实现与测试
Package stack 提供简单的栈数据结构实现与测试
Package log 提供项目的日志与异常处理封装
Package log 提供项目的日志与异常处理封装
Package mock 提供用于单元测试的模拟实现
Package mock 提供用于单元测试的模拟实现
openai
Package openai 提供对 OpenAI 服务的本地模拟实现用于测试
Package openai 提供对 OpenAI 服务的本地模拟实现用于测试
Code generated by go generate; DO NOT EDIT.
Code generated by go generate; DO NOT EDIT.
Package prompts 管理提示词模板与内置规则
Package prompts 管理提示词模板与内置规则
Package provider 封装与外部模型服务(如 OpenAI)交互的请求与响应逻辑
Package provider 封装与外部模型服务(如 OpenAI)交互的请求与响应逻辑
parser
Package parser 提供模型响应解析与结构化提取功能
Package parser 提供模型响应解析与结构化提取功能
request
Package request 构建与发送模型请求,管理请求策略与摘要
Package request 构建与发送模型请求,管理请求策略与摘要
request/agents
Package agents 管理请求层中的代理配置与生命周期
Package agents 管理请求层中的代理配置与生命周期
request/agents/actions
Package actions 提供请求层代理的内部动作处理
Package actions 提供请求层代理的内部动作处理
request/agents/config
Package agentconfig 代理配置加载与内置代理定义
Package agentconfig 代理配置加载与内置代理定义
request/build
Package build 处理模型请求的构建与摘要生成
Package build 处理模型请求的构建与摘要生成
request/structs
Package structs 定义请求相关的数据结构
Package structs 定义请求相关的数据结构
response
Package response 解析与处理模型响应数据
Package response 解析与处理模型响应数据
Package server 提供 JSON-RPC 服务端与服务端工具函数
Package server 提供 JSON-RPC 服务端与服务端工具函数
actions
Package actions 实现服务端的动作处理与消息路由
Package actions 实现服务端的动作处理与消息路由
client
Package client 实现服务端客户端管理与 WebSocket 服务启动
Package client 实现服务端客户端管理与 WebSocket 服务启动
client/jsonrpc
Package jsonrpc 实现 JSON-RPC 协议的服务端与客户端
Package jsonrpc 实现 JSON-RPC 协议的服务端与客户端
client/jsonrpc/connect
Package connect 提供 JSON-RPC 连接传输层实现
Package connect 提供 JSON-RPC 连接传输层实现
Package storage 提供持久化存储与数据库初始化封装
Package storage 提供持久化存储与数据库初始化封装
structs
Package structs 定义存储层的数据结构与 GORM 模型
Package structs 定义存储层的数据结构与 GORM 模型
Package terminal 提供终端交互、缓冲与伪终端封装
Package terminal 提供终端交互、缓冲与伪终端封装
buffer
Package buffer 提供终端输出缓冲区与解析功能
Package buffer 提供终端输出缓冲区与解析功能
pty
Package pty 提供伪终端创建与操作封装
Package pty 提供伪终端创建与操作封装
sandbox
Package sandbox 提供沙箱执行环境,隔离命令运行
Package sandbox 提供沙箱执行环境,隔离命令运行
Package main 提供开发与测试时使用的工具集合入口
Package main 提供开发与测试时使用的工具集合入口
Package tools 导入所有插件并提供通用工具注册与生成框架
Package tools 导入所有插件并提供通用工具注册与生成框架
actions
Package actions 提供工具操作与作用域管理
Package actions 提供工具操作与作用域管理
index
Package index 提供工具索引与搜索功能
Package index 提供工具索引与搜索功能
toolobj
Package toolobj 提供工具调用结果对象的封装与序列化
Package toolobj 提供工具调用结果对象的封装与序列化
tools/agent
Package agent 实现代理工具,支持子代理调用与提示词管理
Package agent 实现代理工具,支持子代理调用与提示词管理
tools/edit
Package edit 实现文件编辑工具,支持字符串替换与插入操作
Package edit 实现文件编辑工具,支持字符串替换与插入操作
tools/run
Package run 实现命令执行工具,支持异步管道读取与输出缓冲
Package run 实现命令执行工具,支持异步管道读取与输出缓冲
tools/scope
Package scope 实现作用域检查工具,验证文件路径在允许范围内
Package scope 实现作用域检查工具,验证文件路径在允许范围内
tools/search
Package search 提供代码库搜索工具,支持 AI 规则 grep 和上下文引擎(BM25 + 向量)混合搜索。
Package search 提供代码库搜索工具,支持 AI 规则 grep 和上下文引擎(BM25 + 向量)混合搜索。
tools/trace
Package trace 实现跟踪与日志工具,记录执行过程
Package trace 实现跟踪与日志工具,记录执行过程
tools/tree
Package tree 实现文件目录树工具,支持递归展示与克隆操作
Package tree 实现文件目录树工具,支持递归展示与克隆操作
tools/tree/ios
Package ios 提供文件与目录克隆的平台特定实现
Package ios 提供文件与目录克隆的平台特定实现
ui
Package ui 提供命令行界面的状态管理与渲染函数
Package ui 提供命令行界面的状态管理与渲染函数
funcs
Package funcs 提供 UI 渲染函数与模板辅助方法
Package funcs 提供 UI 渲染函数与模板辅助方法
loop
Package loop 提供主事件循环,管理用户输入与程序状态流转
Package loop 提供主事件循环,管理用户输入与程序状态流转
startup
Package startup 处理应用启动时的初始化与欢迎界面
Package startup 处理应用启动时的初始化与欢迎界面
state
Package state 管理 UI 状态与数据绑定
Package state 管理 UI 状态与数据绑定
Package u 提供极常用的公共短类型与工具函数
Package u 提供极常用的公共短类型与工具函数

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL