关于 Koschei
Koschei 是面向通用软件开发的能力安全编程语言及工具链,通过显式授权控制副作用。编译器会检查程序是否获得相应能力令牌,未授权时拒绝其访问磁盘、网络、环境或进程。
主要功能
- 01基于显式能力的访问控制
- 02编译期拒绝未授权副作用
- 03能力清单与 CI 拒绝门禁
- 04解释执行与原生构建命令
- 05VS Code LSP 诊断与补全
适用场景
- 01检查依赖更新是否新增可访问的网络权限
- 02将函数限制为访问特定网络源
- 03运行前检查程序具备的能力
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 今天
此工具无需参数。
详细介绍
Koschei (.ks)
产品方向
Koschei Lang 是一门独立的编程语言及其库生态,面向以网络安全为核心的通用软件开发。其自身的语义、编译器、标准库和运行时定义了产品;Web3 和 AI 集成则是这门语言的应用。实现自包含分发并在安全性上超越 Rust,仍是需要实际验证的发展目标。
**Koschei Lang 的销售和授权与 Koschei Sentinel、Koschei Web3 Hub 分开进行。**互操作可通过明确的 SDK、适配器和版本化契约实现,但不会因此形成共享定价、使用权或运行时控制权。请参阅独立产品章程和产品方向。
**源代码可见,并非开源。**Koschei Lang 可免费下载、使用和修改,仅限个人非商业用途。商业用途需要永久商业许可证(请参阅
LICENSING.md)。不得再分发工具链。请参阅LICENSE。无需安装即可试用:koschei.dev/play
具备能力安全性的编程语言。除非你向导入的包提供令牌,否则它无法访问你的磁盘、网络或环境。
大多数供应链攻击得以成功,是因为依赖项继承了进程拥有的所有权限。安装一个包,它就能读取 ~/.ssh、你的 .env,或打开一个套接字——无需征求许可。Koschei 消除了这种隐式权限:副作用访问权限是一种必须传入的值,而编译器会拒绝任何试图使用未获授权限的程序。
土耳其语:README.tr.md
快速入门
需要 Python 3.12 或更高版本。Go 1.24+ 为可选项,仅在使用 ks build 时需要。
git clone https://github.com/bugsbuny243/koschei-lang
cd koschei-lang
./install.sh # installs into ~/.koschei and links ~/.local/bin/ks
ks check examples/supply_chain/main.ks
examples/supply_chain/analytics.ks 中有一个刻意编写的恶意包,试图读取机密文件并将其返回给调用者。预期结果是编译时拒绝:
fn track(event: String) -> String or Error {
let secret = disk.read("/etc/app/secrets.env") or return Error("unreadable")
return secret
}
预期输出:
KOSCHEI ERROR: KS2401 [line 6, column 18]: Required capability is unavailable
in this scope — A disk, network, environment, or process operation was
attempted without the corresponding capability token.
Hint: run 'ks --lang en explain KS2401' for details.
退出代码为 1。程序从未运行。文件从未打开。没有任何内容被发送到任何地方。
这不是运行时沙箱捕获了调用。track 中根本不存在 disk,因此攻击会在编译时失败。
分发与安装
Koschei 已发布到 PyPI:
pip install koschei-lang
ks version
从克隆的仓库安装时,./install.sh 会将 Koschei 安装到独立的虚拟环境中;pip install . 则会将其安装到你自行管理的环境中。
商业许可证持有者还可以从 Polar 商店下载打包版本。
你的第一个程序:
ks new hello-koschei
cd hello-koschei
ks run .
ks new 会创建一个零依赖项目,其中包含 koschei.toml 和 src/main.ks。命令接受源文件、项目目录或 koschei.toml 路径。
核心理念
- 不授予隐式权限。 磁盘、网络、环境和进程访问都需要显式的能力值。未传入能力值的函数无法执行这些操作。
- 能力只会收窄,绝不会扩大。
caps.disk是只能委派权限的根令牌;caps.disk.allow(path)会生成一个无法再次扩大权限的收窄令牌(KS2403),根令牌也不能直接执行 I/O(KS2402)。 - 没有
null。 可能缺失的值使用Option<T>(Some/None)。 - 错误是值。
Result<T, E>使用唯一的关键字or,有三种形式:or return、or default、or { block }。未处理的错误值会导致编译错误(KS1401)。 - 值都有上限。 String 最多容纳 16 MiB 的 UTF-8,List 最多容纳 1,048,576 个项目;超出上限的操作会在
ks run和ks build中的同一位置产生KS3502Error 值(Value Budget v1)。 - 程序输入也是一种能力。
caps.input.allow(65536)会提供args()和一个受字节数限制的标准输入read_text();ks run app.ks a b和编译后的./app a b会返回相同的文本和相同的 Error 值(Program Input v1)。 - 时间和随机数也是能力。
caps.clock.allow(1000)读取的时钟精度不会高于其分辨率;caps.random.allow(64)最多从操作系统的安全随机源中提取 64 个字节(Clock and Random v1)。 - 通过经过测试的文档学习。 语言指南 会在 CI 中运行每个示例;错误代码和核心库参考由工具链生成;
examples/apps包含三个完整程序。 - 默认不可变。 重新绑定需要使用
let mut。 - 每条诊断信息都有明确解释。 共有 33 个错误代码,并附有双语目录;
ks explain KS2401会打印原因和修复方法。
示例
fn fetch_data(net: NetCaps, url: String) -> String or Error {
let response = net.get(url) or return Error("request failed")
return response.text()
}
fn main(caps: SystemCaps) {
let api_net = caps.net.allow("https://api.example.com")
let response = fetch_data(api_net, "https://api.example.com/v1")
println(response)
}
fetch_data 只能访问一个源。它无法触及磁盘、读取环境变量或启动进程——不是因为它经过审查并确认不会执行这些操作,而是因为它没有相应的令牌。
能力清单
由于权限在源代码中显式声明,因此可以通过机械方式汇总。ks caps 会报告整个模块图中程序能够访问的所有内容:
ks caps examples/app.ks
ks caps --json src/main.ks
ks caps --deny net src/main.ks # exits 2 if the program can reach the network
对于纯程序,清单为空;这是可验证的事实,而非代码审查中的口头保证:
KOSCHEI CAPABILITY MANIFEST: examples/app.ks
This program carries no side-effect capability.
No disk, network, environment, or process access — pure computation.
--deny 门禁专为 CI 设计:如果依赖更新悄然增加了可访问的范围,构建就会失败。
语言特性
目前已实现:带类型参数的函数、类型推断泛型函数、泛型结构体和枚举、let / let mut、结构体、List<T>、不可变 Map<String, V>(get/set/keys/contains)、for-in、条件仅接受 Bool 的 if/else/while、带穷尽式 match 的枚举、真正的 Option<T> / Result<T, E>、完整的表达式插值("{items.length()}")、日常标准库(String 的 trim/split/join,List 的 sort/filter/contains),以及模块系统:import risk 会将导入文件旁的 risk.ks 绑定为模块——无需清单、构建脚本或配置。
核心库使用 Koschei 编写:import text 和 import list 会绑定工具链随附的库模块(text.starts_with、text.replace、text.lines、list.first、list.reverse、list.slice 等),并由与自有代码相同的流水线检查和执行。import secure 会添加由经审计的宿主实现提供的域分离 SHA3-256 摘要;首批库宇宙模块也使用 Koschei 编写:漫威守护者 captain_marvel、hela、strange 和 wanda。ks run 可执行库,ks build 则从同一份源代码编译库;函数列表请参阅 核心库 v1。
工具链
ks check src/main.ks # types, modules, capability rules
ks run src/main.ks # interpreter
ks build src/main.ks -o app # current native build path
ks fmt --write src/ # canonical formatting
ks caps src/main.ks # capability manifest
ks explain KS2401 # diagnostics, --lang tr for Turkish
ks check --json src/main.ks # stable code/message/line/column for editors
ks mir src/main.ks # sealed checked backend contract
ks lsp # zero-dependency language server
ks-mcp --allow-read ./data # MCP server: agents run Koschei under a policy (docs/MCP_SERVER.md)
ks tokens / ks ast
Koschei 的长期规范架构由 Koschei 语义和经过验证的执行契约定义,而非临时引导/工具层所用的实现语言。外部适配器仅作为非权威性的互操作机制。
编辑器支持
editors/vscode 包含官方的零依赖 LSP 扩展:.ks 语法高亮、实时诊断、格式化、悬停提示、转到定义、文档符号和补全。服务器可通过 ks lsp 使用(并保留 ks-lsp 作为兼容别名)。
测试
python -m unittest discover -s tests -v
CI 套件包含编译器/运行时测试、本机/解释器一致性检查、仓库文档示例、已提交的黄金输出、能力安全回归测试,以及欺骗平面攻击模拟。
状态
Koschei 尚未达到 1.0 版本,目前仍在积极开发中。语法、运行时契约、许可、分发和安全架构在首个正式版发布前都可能发生变化。目前请勿将其用于生产环境。
本机路径目前执行的安全边界包括:拒绝能力、缩小权限、路径遍历/符号链接逃逸防护、只读执行、重定向源站限制、调用深度限制、不透明的受保护源代码对象身份、按 epoch 轮换别名、诱饵源代码视图,以及绑定 epoch 的读取授权。安全声明必须继续由测试和证据支持;本项目不声称任何软件系统在数学上不可能遭到破坏。
受保护源代码/欺骗架构正通过分阶段攻击波次不断强化。规范源代码身份仍与物理源代码定位符分离,诱饵视图在设计上不可部署。
许可与分发
Koschei Lang 可免费用于个人非商业用途。商业用途需要购买商业许可证,一次付费,永久有效,涵盖购买后 12 个月内发布的所有版本:个人版 49 USD,团队版(最多 10 名开发者)249 USD,企业版 999 USD。使用 Koschei 编写的程序以及 ks build 生成的二进制文件均归其作者所有。详见 LICENSING.md。
用户可从 Koschei 在 Polar(polar.sh)的商店下载 Koschei。python tools/polar_bundle_v1.py 会构建该下载包 dist/polar/koschei-lang-<version>.zip,其中包含 koschei 包、安装程序、许可证、客户 README(distribution/polar/)、语言指南、参考资料以及运行这些示例所需的示例文件。
贡献
欢迎通过 GitHub issues 提交错误报告。请按照 SECURITY.md 中的说明,私下报告安全漏洞。目前暂不接受代码贡献:必须先制定贡献者条款,确保所有权和商业许可保持明确。
许可证
Koschei Lang License 1.0——可免费用于个人用途;商业用途需要获得永久商业许可证。请参阅 LICENSE(土耳其语:LICENSE.tr.md)。此前在 MIT License 下发布的修订版本仍遵循 MIT License。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。