swoelffel/llmshell

GitHub: swoelffel/llmshell

一款用 Rust 编写的安全优先智能 Shell,通过自然语言驱动强类型工具执行,内置策略门控与防篡改审计日志,让 AI 辅助终端操作既高效又可控。

Stars: 1 | Forks: 0

# LLMShell **面向开发者和运维人员的安全优先智能 Shell。** ![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/2cde84a3d1040007.svg) ![License](https://img.shields.io/badge/license-MIT-blue) ![Rust](https://img.shields.io/badge/rust-1.78%2B-orange) ![Status](https://img.shields.io/badge/status-experimental-yellow) LLMShell (`llmsh`) 允许你使用自然语言描述终端任务。该智能体会负责规划、调用强类型工具,在执行危险操作前检查可配置的安全策略,并记录经过脱敏处理的审计日志。 ## 快速开始 ``` cargo install --git https://github.com/swoelffel/llmshell --locked export OPENAI_API_KEY=sk-... # or ANTHROPIC_API_KEY=sk-ant-... for Claude llmsh ``` 目前开箱即用支持三个提供商:兼容 OpenAI 的 API、Anthropic (Claude Haiku / Sonnet / Opus) 以及用于本地模型的 Ollama。可以在运行时使用 `/provider set anthropic` 或 `/model use claude-sonnet-4-6` 进行切换。 首次启动时,`llmsh` 会生成一份默认的用户配置文件(Linux 系统路径为 `~/.config/llmsh/config.toml`,macOS 为 `~/Library/Application Support/llmsh/config.toml`,Windows 为 `%APPDATA%\llmsh\config.toml`)。当前目录下的项目级 `.llmsh.toml` 配置会在此基础上进行合并覆盖。详见 [docs/configuration.md](docs/configuration.md)。 ## 示例会话 ``` llmsh> list the files in this directory [tool] list_directory [assistant] Cargo.toml, README.md, crates/, … llmsh> read README.md and summarise it [tool] read_file [assistant] LLMShell is a safety-first agentic shell … llmsh> read ~/.ssh/id_rsa [policy] confirm (strong): sensitive path flags: [SensitivePath] reason: matches built-in sensitive_paths pattern "~/.ssh/**" To confirm, type: read id_rsa > ^C [policy] cancelled llmsh> !ls -la [raw shell] executed and audited ``` 大多数 AI 终端工具侧重于生成命令。而 LLMShell 侧重于**受控执行**。 ## 为什么选择 LLMShell? - **默认使用强类型工具,而非原始 Shell** — 智能体会使用结构化参数调用 `read_file`、`list_directory`、`run_process`、`glob` 等工具,而不是执行自由格式的命令。 - **每次操作前的安全策略门控** — 每个工具调用在运行前会被分级为 `Allow` / `Confirm` / `ConfirmStrong` / `Deny`。 - **敏感路径检测** — 诸如 `~/.ssh/`、凭证文件以及众所周知的系统位置等路径,默认需要**强确认**(输入一条生成的短语)。用户可以在 `config.toml` 中将它们映射为 `Deny`。 - **危险操作的确认提示** — 在执行破坏性或存在歧义的调用之前,会展示工具参数及策略标记。 - **智能确认提示** — 只读的 `run_process` 调用(如 `crontab -l`、`git status`、`ls` 等)会被自动分类并直接放行,无需提示。模型还会为每次 `run_process` 调用声明 `intent`(意图)和 `claimed_risk`(声明风险),两者都会显示在确认提示和审计日志中。模型只能在确定性裁决的基础上提高风险等级,绝不能降低风险。 - **经过脱敏和防篡改的审计日志** — 每一步操作都会被记录为带有哈希链的 JSONL 格式,并在 LLM 边界过滤掉敏感信息。 - **通过 `!` 显式转义至原始 Shell** — 当你确实需要使用原始 Shell 时,只需加上 `!` 前缀。该操作依然会经过审计日志的记录。 ## 对比分析 | 类别 | 主要关注点 | LLMShell 的不同之处 | |---|---|---| | 命令生成器 | 根据提示生成 Shell 命令 | LLMShell 通过策略引擎执行强类型工具 | | 终端智能体 | 让 LLM 在终端中操作 | LLMShell 强调策略、审计和受控执行 | | AI 终端 | 利用 AI 改善终端用户体验 | LLMShell 专注于 Shell/运行时层 | | 自然语言 Shell | 将自然语言解释为操作 | LLMShell 坚持安全优先与审计优先 | ## 安全模型 - 由 LLM 提议,由运行时决定。 - `ToolRegistry` 是可执行工具的唯一来源。 - 敏感路径默认需要进行强确认(可配置为拒绝)。 - 危险操作需要显式确认。 - 审计日志为本地存储、经过脱敏且只能追加。 - LLMShell **不是**沙盒 — 它在工具调用周围增设了门控,而不是提供操作系统级别的隔离。 完整细节:[docs/safety.md](docs/safety.md)。 ## 架构 包含八个 Rust crate: - `llmsh-llm` — 提供商无关的 `LlmProvider` trait + 中立的 message/tool-call 类型。 - `llmsh-llm-openai` — 兼容 OpenAI 的 HTTP 提供商。 - `llmsh-llm-anthropic` — Anthropic Messages API 提供商 (Claude Haiku / Sonnet / Opus)。 - `llmsh-llm-ollama` — 本地 Ollama 提供商。 - `llmsh-policy` — `RiskAction` (`Allow` / `Confirm` / `ConfirmStrong` / `Deny`) 分类器。 - `llmsh-tools` — 位于 `Tool` trait 之后的 `read_file`、`list_directory`、`run_process`、`glob` 工具实现。 - `llmsh-audit` — 只能追加的 JSONL 日志,包含哈希链 `digest`、数据脱敏和事件分类系统。 - `llmsh-core` — 智能体循环、流水线 (schema + policy + sensitive paths)、执行器、REPL 和确认门控。 - `llmsh-cli` — `clap`/`tokio` 入口点,用于构建 `llmsh` 二进制文件。 ## 安装 ### 从源码构建 (目前推荐) ``` cargo install --git https://github.com/swoelffel/llmshell --locked ``` ### 开发构建 ``` git clone https://github.com/swoelffel/llmshell cd llmshell cargo build --release ./target/release/llmsh ``` ### 预编译二进制文件 预编译的 Linux/macOS 二进制文件、`install.sh` 安装脚本以及 Homebrew tap 已在 v0.3 的 [路线图](ROADMAP.md) 中进行了规划。 ### 重新构建后的重新安装 `cargo install --path crates/llmsh-cli --force` 是官方支持的流程。如果你必须手动复制二进制文件(例如在沙盒环境中),请遵循以下三步操作 — 在 macOS Sequoia 上,如果直接对现有二进制文件执行裸 `cp` 命令,会触发其来源的 xattr 属性问题并导致报错退出 `zsh: killed`: ``` cp target/release/llmsh ~/.cargo/bin/llmsh xattr -c ~/.cargo/bin/llmsh codesign --force --sign - ~/.cargo/bin/llmsh ``` 完整操作流程(包括安装后的配置同步和验证门控):[docs/runbooks/local-install.md](docs/runbooks/local-install.md)。 ## 配置 用户配置文件 `config.toml`(具体位置取决于操作系统 — 参见 [docs/configuration.md](docs/configuration.md))控制以下内容: - 默认模型 (`provider:model-name`), - 每个风险级别的策略动作 (allow / confirm / deny), - 文件系统允许访问的根目录, - 每个工具的超时时间, - 审计日志目录。 项目级别的 `.llmsh.toml` 会在用户配置的基础上进行合并覆盖。 常用环境变量: - `OPENAI_API_KEY` — OpenAI 提供商必需。 - `ANTHROPIC_API_KEY` — Anthropic 提供商 (Claude) 必需。 - `LLMSH_MODEL` — 覆盖某次会话的默认模型。 - `LLMSH_CONFIG` — 替代配置文件路径。 - `LLMSH_DEBUG=1` — 在标准错误输出 (stderr) 中开启追踪。 - `LLMSH_NO_AUDIT=1` — 禁用审计日志(不推荐)。 完整参考:[docs/configuration.md](docs/configuration.md)。 ## 状态 LLMShell 目前处于**早期实验性软件**阶段。在未首先审查策略配置的情况下,请勿在生产系统或敏感环境中使用。 当前具备的功能: - 提供商:兼容 OpenAI 的 API、Anthropic (Claude 4.x)、Ollama — 支持运行时切换模型 (`/model`) 和提供商 (`/provider set `), - 带有斜杠命令的自然语言 REPL, - 强类型工具:`list_directory`、`read_file`、`run_process`、`glob`, - 带有敏感路径保护的策略引擎, - 通过 `!` 转义至原始 Shell, - 带有哈希链的脱敏 JSONL 审计日志, - Linux 和 macOS 开发目标平台。 ## 路线图 参见 [ROADMAP.md](ROADMAP.md)。v0.3 的亮点:发布二进制文件、安装脚本、Homebrew tap 以及 asciinema 演示视频。 ## 贡献 欢迎贡献代码 — 详见 [CONTRIBUTING.md](CONTRIBUTING.md)。安全问题:请遵循 [SECURITY.md](SECURITY.md) 中的说明。 ## 许可证 MIT 许可证。详见 [LICENSE](LICENSE)。
标签:Agent, AI安全, AI风险缓解, Anthropic, API集成, Chat Copilot, CIS基准, Claude, CLI, CVE检测, DLL 劫持, LLM, LLM评估, MIT License, NLP, Ollama, OpenAI, Petitpotam, Policy Gates, Python安全, Rust, Shell, SOC Prime, Typed Tools, Unmanaged PE, WiFi技术, 交互式Shell, 人工智能, 内存规避, 可观测性, 可视化界面, 大语言模型, 安全, 审计日志, 开发工具, 开源, 敏感数据保护, 时序数据库, 沙盒执行, 用户模式Hook绕过, 策略控制, 系统运维, 终端, 网络流量审计, 网络调试, 自动化, 超时处理, 通知系统, 防篡改