内容
# Sema
<p align="center">
<img src="https://raw.githubusercontent.com/get-sema/sema/main/logo.png" alt="Sema" width="480" />
</p>
<p align="center">
<a href="https://pypi.org/project/sema-mcp/"><img src="https://img.shields.io/pypi/v/sema-mcp?color=1e88e5&label=PyPI" alt="PyPI version" /></a>
<a href="https://pypi.org/project/sema-mcp/"><img src="https://img.shields.io/pypi/pyversions/sema-mcp" alt="Python versions" /></a>
<a href="https://marketplace.visualstudio.com/items?itemName=MasihMoloodian.sema-codebase-chat"><img src="https://img.shields.io/visual-studio-marketplace/v/MasihMoloodian.sema-codebase-chat?color=1e88e5&label=VS%20Code%20Marketplace&logo=visualstudiocode" alt="VS Code Marketplace" /></a>
<img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey" alt="Platform: macOS | Linux" />
<img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT" />
</p>
<p align="center"><strong>一款适用于整个代码库的AI编码代理。</strong></p>
Sema是一款**智能代码引擎**。它会对您的代码仓库进行一次本地索引,然后将该索引指向您选择的任意模型——这样每个提供商都已经了解您的代码,您可以在对话过程中**切换提供商和模型**,而不会丢失线索。
它运行在三个地方,它们共享一个索引和一个会话:
| 界面 | 描述 |
|---|---|
| **VS Code 扩展** | 类似 Cursor 的聊天面板,包含十个引擎、代理权限和一个可选的隐藏开关 |
| **`sema chat`** | 终端应用程序,具有模式、工具、斜杠命令和可恢复的会话 |
| **MCP 服务器** | 将 Sema 注册到 Claude Code、Codex、opencode、Grok Build 或 Cursor,它们在自己的 CLI 中获得语义搜索 - 无需扩展 |
您可以选择其中一个或全部三个。
> **实验性** · **macOS 和 Linux** · 需要 **Python 3.11+** · 不会离开您的机器。 [免责声明](docs/faq.md#disclaimer)
---
## 快速开始
**1. 安装 CLI** (如果需要,会安装 uv + Python):
```bash
curl -fsSL https://raw.githubusercontent.com/get-sema/sema/main/install.sh | sh
```
**2. 索引您的项目并注册您的 AI CLI:**
```bash
cd your-project
sema index . # 构建本地语义索引
sema setup # 注册所有检测到的客户端:Claude Code、Codex、opencode、Grok Build、Cursor
```
**3. 选择一个界面:**
```bash
sema chat # 终端代理(需要聊天扩展 - 参见下文)
```
… 或者安装 **[VS Code 扩展](https://marketplace.visualstudio.com/items?itemName=MasihMoloodian.sema-codebase-chat)**
(在扩展视图中搜索 **"sema"**)。其 **管理** 面板执行与 CLI 相同的所有操作 - 索引、注册、更新 - 只需点击几下。
您只需要扩展程序,或者只需要索引?两者都可以独立运行。
**[安装指南 →](docs/installation.md)**
📦 **[sema-mcp on PyPI](https://pypi.org/project/sema-mcp/)** · 🧩 **[扩展程序在 VS Code 市场](https://marketplace.visualstudio.com/items?itemName=MasihMoloodian.sema-codebase-chat)**
---
## 十个提供商,无锁定
五个本地 CLI 重用您已经付费的订阅 - **无需 API 密钥,无需重新登录**。五个 API 提供商每个都需要一个密钥。
| 提供商 | 类型 | 需要 |
|---|---|---|
| **Claude Code** | 本地 CLI | 您现有的 `claude` 登录 |
| **Codex** | 本地 CLI | 您现有的 `codex` 登录 |
| **opencode** | 本地 CLI | 您现有的 `opencode` 登录 |
| **Grok Build** | 本地 CLI | 您现有的 `grok` 登录 |
| **Cursor Agent** | 本地 CLI | 您现有的 `cursor-agent` 登录 |
| **Claude (Anthropic)** | API | `ANTHROPIC_API_KEY` |
| **OpenAI** | API | `OPENAI_API_KEY` |
| **DeepSeek** | API | `DEEPSEEK_API_KEY` |
| **OpenRouter** | API | `OPENROUTER_API_KEY` |
| **Together AI** | API | `TOGETHER_API_KEY` |
提供商、模型和推理努力都可以在**运行中的对话**中切换 - 历史记录、索引以及您的隐藏和保护设置都会保留。您可以从您付费的订阅开始,使用便宜(或免费)的模型结束。
---
## 为什么
Cursor 很棒 - 但它也是一个订阅和一个封闭的花园。Claude Code 和 Codex 也很棒,但它们锁定您使用一个模型进行每个会话,并且每个会话都从头开始:**只导航就烧掉令牌**,然后才能回答任何问题。
Sema 只需对您的代码进行一次本地索引。您的助手搜索该索引 - 通常 **每问 4-11 倍的令牌**。而 `check_reuse()` 会在编写第四个之前询问它是否已经存在一个帮助程序。
| | |
|---|---|
| **4-11 倍** | 每问较少的令牌 |
| **98%** | 重用-vs-构建准确率([50 示例评估](docs/benchmarks.md)) |
| **~150** | 每个搜索的令牌 - 签名,而不是整个文件 |
| **0** | 离开您机器的代码 |
索引由 TypeScript、JavaScript、Python 和 Go 的 tree-sitter AST(其他语言为文本感知)构建,本地嵌入 `all-MiniLM-L6-v2`,并作为**语义相似性和 BM25 的混合**进行搜索。无需 API 密钥,无需联网。 [支持的语言 →](docs/languages.md)
[为什么 Sema 存在,完整 →](docs/why-sema.md) · [基准 →](docs/benchmarks.md)
---
## `sema chat` - 终端代理
终端中一个完整的编码代理,基于相同的索引:
```bash
uv sync --extra chat # 或:pip install 'sema-mcp[chat]'
cd your-project
sema chat
```
```bash
sema chat --print "where is auth handled?" # 一次性的,用于脚本
sema chat --resume <session_id> # 恢复一个会话
sema chat --mode plan # 只读 + 计划工件
```
- **三种模式** - `ask`(无工具,仅对话),`plan`(只读工具),`agent`(读取,写入和运行命令)。`Shift+Tab` 循环切换它们。
- **34 个斜杠命令** - `/provider`,`/model`,`/effort`,`/search`,`/reuse`,`/impact`,`/index`,`/devops`,`/cost`,`/sessions` 等。按 `/`。
- **每个工具的权限** - 只读工具运行;任何修改都会询问。
`--yes` 自动批准无人值守的运行。
- **共享会话** - 在 VS Code 中开始的对话在终端中恢复,反之亦然。
**[终端应用程序指南 →](docs/terminal-app.md)**
---
## AI 获取的内容
通过 MCP 或在聊天中获取八种代码智能工具:
| 工具 | 目的 |
|---|---|
| `search_code` | 索引的混合语义 + BM25 搜索 |
| `check_reuse` | 此帮助程序是否已经存在?重用/审查/安全构建 |
| `get_code` | 按名称获取函数、类或方法的完整源代码 |
| `repo_map` | 压缩的架构图 - 文件及其导出的符号 |
| `find_usages` | 符号的每个引用 |
| `impact_analysis` | 通过调用图更改符号的爆炸半径 |
| `explain_file` | 文件的用途、导出和关键依赖 - 无源代码 |
| `list_projects` | 此服务器提供的索引项目 |
**[MCP 工具参考 →](docs/mcp-tools.md)**
---
## 安全
**隐藏。** 可选地在请求离开您的机器之前隐藏秘密和个人身份信息(PII)- 私钥、JWT、API 密钥(OpenAI、Anthropic、Stripe、GitHub、Slack、AWS、Google)、电子邮件、Luhn 验证的卡号、SSN 和电话号码,通过正则表达式;使用 `pii` 额外功能时,通过本地 spaCy NER 进行名称和位置识别。 在扩展程序的聊天面板中切换它;使用 `sema redact` 预览任何字符串(仅读取 STDIN,因此不会进入您的 shell 历史记录)。
```bash
pip install 'sema-mcp[pii]' && python -m spacy download en_core_web_sm
echo "text" | sema redact
```
**代理权限。** Claude Code 和 Codex 暂停受保护的操作,以进行内联 **允许/拒绝** 决定在聊天中,或在信任的沙盒中以明确标记的绕过模式运行。 每个提供商都保留其自己的选择。
**开发运维防护。** 将 AI 指向 `kubectl`、Terraform、AWS CLI 或 Helm,Sema 位于其中。 每个命令都分类并在运行前隐藏秘密 - 永不之后:
- **安全** - 只读命令立即运行(并且仍然被审计)。
- **需要批准** - 修改被保留,并附有批准 ID,直到 **您** 释放它们。 批准是每个命令的,并且是一次性的; AI 永远无法批准其自己的保留操作。
- **禁止** - `terraform destroy`、强制删除、删除集群关键的命名空间、根帐户删除:直接拒绝,无例外。
执行不是文档 - `sema devops install-shims` 在您的 `PATH` 上放置包装器,如果 Sema 无法访问,则 **关闭失败**。 所有内容都进入追加、隐藏的审计日志。
```bash
sema devops install-shims # 将防护安装到 PATH
sema devops pending # 有什么在等待您
sema devops approve <id> # 释放一个保留的命令
sema devops log # 审计轨迹
```
**[开发运维防护 →](docs/devops-guard.md)**
---
## 保持更新
```bash
sema update --check # 显示已安装的 Claude/Codex/opencode/Grok 版本
sema update # 运行每个已安装代理的官方更新程序
sema update --provider codex # 仅更新一个代理(可重复)
sema self-update # 更新 Sema 本身
```
扩展程序在 **管理 → 更新代理 CLI...** 下公开相同的流程。之后重新加载 VS Code,以便其模型选择器反映已安装的 CLI。
---
## 文档
**从这里开始:** [安装](docs/installation.md) · [适用于 VS Code 的 Sema](vscode-extension/README.md) · [终端应用程序](docs/terminal-app.md) · [CLI 参考](docs/cli-reference.md)
| | |
|---|---|
| [安装](docs/installation.md) | 平台、要求、安装路径、从源代码 |
| [适用于 VS Code 的 Sema](vscode-extension/README.md) | 扩展 - 聊天、代理、搜索、重用 |
| [终端应用程序](docs/terminal-app.md) | `sema chat` - 模式、斜杠命令、会话 |
| [Claude Code](docs/claude-code.md) · [Codex](docs/codex.md) · [opencode](docs/opencode.md) · [Grok Build](docs/grok.md) · [Cursor](docs/cursor.md) · [VS Code 工作区](docs/vscode-workspace.md) | 将 Sema 注册到您的助手 |
| [多个项目](docs/multi-project.md) | 从一个注册为多个仓库提供服务 |
| [CLI 参考](docs/cli-reference.md) | 每个 `sema` 命令 |
| [MCP 工具](docs/mcp-tools.md) | 您的 AI 助手调用的工具 |
| [开发运维防护](docs/devops-guard.md) | `kubectl`/Terraform/AWS CLI/Helm 的分析优先门控 |
| [支持的语言](docs/languages.md) | AST 感知 vs 文本感知索引 |
| [配置](docs/configuration.md) | 配置文件、环境变量、`.gitignore` |
| [管理 Sema](docs/managing-sema.md) | 更新、删除和何时重新索引 |
| [故障排除](docs/troubleshooting.md) | 常见问题的解决方法 |
| [为什么 Sema](docs/why-sema.md) · [基准](docs/benchmarks.md) · [FAQ](docs/faq.md) · [路线图](docs/roadmap.md) | 背景和详细信息 |
| [架构](docs/architecture.md) · [贡献](docs/contributing.md) | 它如何工作,如何扩展它 |
## 许可证
MIT - 见 [LICENSE](LICENSE)。 版权所有 (c) 2026 Masih Moloodian。
**Masih Moloodian** · [masihmoloodian@gmail.com](mailto:masihmoloodian@gmail.com) · [问题](https://github.com/get-sema/sema/issues)