需预先装好 Python 3.11~3.14 和 ripgrep,bat 可选但强烈建议装;默认只处理 README 列出的固定后缀文件,其他语言不会被索引;默认端口 31134 且服务端只接受本机连接,远程访问要改 host 为 0.0.0.0;用 --generative 时默认连本地 Ollama,没装 Ollama 需改用云端 provider 并设 API key。

SeaGOAT
kantordMIT活跃维护本地优先的语义代码搜索引擎,用向量嵌入理解代码含义,支持像 grep 一样搜索,但能按语义而非仅靠正则匹配找代码。
local-first semantic code search engine
pipx install seagoat
seagoat-server start /path/to/your/repo
gt "Where are the numbers rounded"README 只说「任何像样的笔记本都能跑」,未给出具体显存或内存数字;不依赖 GPU,CPU 即可运行,嵌入计算在本地完成。
本地优先的语义代码搜索引擎,用向量嵌入按意思搜代码而不是只靠关键词
本地优先的语义代码搜索引擎,用向量嵌入理解代码含义,支持像 grep 一样搜索,但能按语义而非仅靠正则匹配找代码。
核心能力
- 用 ChromaDB 向量库加本地嵌入模型做语义检索
- 结合 ripgrep 同时给出正则和关键词匹配结果
- 查询支持正则表达式,可与自然语言混用
- 常驻 seagoat-server 后台索引,边索引边可查询
- 默认走本地 Ollama,云端 LLM 需显式配置开启
容易踩的坑
- v1.6.1最新正式版2026-10-25 · 2026-10-25 13:59 UTC
Fixed
- require patched certifi and uv, and harden workflows (#1075)
- v1.6.02026-10-24 · 2026-10-24 22:40 UTC
查看更新说明
Added
- support Python 3.14 (#1048)
Fixed
- (deps) update chardet to v7 and mcp to v2, keep stop-words 2018 (#1074)
- (deps) update dependency openai to v3 (#1070)
- (deps) update dependency deepmerge to v3 (#1068)
- (deps) update non-major dependencies (#1053)
Other
- (deps) update dependency syrupy to v6 (#1065)
- (deps) update dependency pytest-cov to v7 (#1064)
- (deps) update actions/setup-python action to v7 (#1062)
- (deps) update pre-commit hook pre-commit/pre-commit-hooks to v6 (#1066)
- (deps) update astral-sh/setup-uv action to v10.3.1 (#1060)
- (deps) update actions/checkout action to v7 (#1061)
- (deps) update codecov/codecov-action action to v7 (#1063)
- (deps) lock file maintenance (#1072)
- adopt ruff 0.17 and its default rules (#1059)
- (deps) update pre-commit hook robertcraigie/pyright-python to v1.1.414 (#1058)
- (deps) update dependency release-plz to v0.3.174 (#1056)
- pin a stable Codecov action and stop coverage uploads failing tests (#1055)
- drop unmaintained and unused dependencies (#1054)
- (deps) lock file maintenance (#1051)
- (renovate) fix maturin lookup and pyright grouping (#1049)
- v1.5.02026-10-24 · 2026-10-24 19:08 UTC
查看更新说明
What's Changed
- fix: fix some vulnerable dependencies by @kantord in https://github.com/kantord/SeaGOAT/pull/1038
- chore(renovate): adopt shared config and align with uv lock settings by @kantord in https://github.com/kantord/SeaGOAT/pull/1039
- chore(renovate): batch updates into weekly grouped PRs by @kantord in https://github.com/kantord/SeaGOAT/pull/1040
- fix(config): only read embeddingFunction from the global config file by @kantord in https://github.com/kantord/SeaGOAT/pull/1041
- refactor: move file chunking to a Rust extension built with maturin by @kantord in https://github.com/kantord/SeaGOAT/pull/1042
- fix: harden the local server and stop docs deploy until release rework by @kantord in https://github.com/kantord/SeaGOAT/pull/1043
- fix(deps): update dependency setuptools to v84 [security] by @renovate[bot] in https://github.com/kantord/SeaGOAT/pull/1044
- fix(cli): only warn about updates when PyPI has a newer version by @kantord in https://github.com/kantord/SeaGOAT/pull/1045
- fix: harden the server against hostile repos, web pages and queries by @kantord in https://github.com/kantord/SeaGOAT/pull/1046
- build: release with release-plz and publish wheels to PyPI by @kantord in https://github.com/kantord/SeaGOAT/pull/1047
Full Changelog: https://github.com/kantord/SeaGOAT/compare/v1.4.1...v1.5.0
- v0.54.172025-05-14 · 2025-05-14 03:48 UTC
查看更新说明
v0.54.17 (2025-05-14)
Bug Fixes
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Chores
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Detailed Changes: v0.54.16...v0.54.17
- v0.54.162025-05-13 · 2025-05-13 03:20 UTC
查看更新说明
v0.54.16 (2025-05-13)
Bug Fixes
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Chores
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Detailed Changes: v0.54.15...v0.54.16
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
[!TIP] Check out zeitgrep, another search tool I am working on!
A code search engine for the AI age. SeaGOAT is a local search tool that leverages vector embeddings to enable you to search your codebase semantically.
Getting started
Install SeaGOAT
In order to install SeaGOAT, you need to have the following dependencies already installed on your computer:
- Python 3.11 to 3.14
- ripgrep
- bat (optional, highly recommended)
When bat is installed,
it is used to display results as long as color is enabled. When SeaGOAT is
used as part of a pipeline, a grep-line output format is used. When color is
enabled, but bat is not installed, SeaGOAT will highlight the output using
pygments. Using bat is recommended.
To install SeaGOAT using pipx, use the following command:
pipx install seagoat
System requirements
Hardware
Should work on any decent laptop.
Operating system
SeaGOAT is designed to work on Linux (tested ✅), macOS (partly tested, help 🙏) and Windows (help needed 🙏).
Start SeaGOAT server
In order to use SeaGOAT in your project, you have to start the SeaGOAT server using the following command:
seagoat-server start /path/to/your/repo
One SeaGOAT server process (an instance) serves every repository (a
project). The first seagoat-server start launches the instance; running
it again for another repository adds that repository to the running
instance, starts indexing it and returns at once.
Search your repository
If you have the server running, you can simply use the
gt or seagoat command to query your repository. For example:
gt "Where are the numbers rounded"
You can also use Regular Expressions in your queries, for example
gt "function calc_.* that deals with taxes"
Stopping the server
You can stop the running server using the following command:
seagoat-server stop
This stops the instance and, with it, every repository it serves. A path
after stop is accepted and ignored.
Configuring SeaGOAT
SeaGOAT can be tailored to your needs through YAML configuration files,
either globally or project-specifically with a .seagoat.yml file.
For instance:
# global config file
server:
port: 31134 # Specify server port
Generative search providers
The --generative flag uses an LLM to enhance search results. By default it
uses a local Ollama server, but you can configure a
cloud provider instead. Cloud providers send your code snippets to a third
party, so they are opt-in. This setting is only read from the global config
file, never from a repository's .seagoat.yml:
# global config file — use MiniMax as the generative provider
generative:
provider: minimax # ollama | openai | minimax
model: MiniMax-M2.5 # optional, provider-specific default used otherwise
| Provider | Default model | API key env var | Base URL |
|---|---|---|---|
ollama (default) | deepseek-r1:8b | — | local |
openai | gpt-4o-mini | OPENAI_API_KEY | https://api.openai.com/v1 |
minimax | MiniMax-M2.5 | MINIMAX_API_KEY | https://api.minimax.io/v1 |
If no provider is configured, SeaGOAT uses Ollama. API keys are read from the
environment variables above; prefer them over putting apiKey in the config
file.
Check out the documentation for more details!
Development
Requirements:
Install dependencies
After cloning the repository, install dependencies using the following command:
uv sync
Running tests
Watch mode (recommended)
uv run ptw .
Test changed files
uv run pytest . --testmon
Test all files
uv run pytest .
Manual testing
You can test any SeaGOAT command manually in your local development
environment. For example to test the development version of the
seagoat-server command, you can run:
uv run seagoat-server start ~/path/an/example/repository
FAQ
The points in this FAQ are indications of how SeaGOAT works, but are not a legal contract. SeaGOAT is licensed under an open source license and if you are in doubt about the privacy/safety/etc implications of SeaGOAT, you are welcome to examine the source code, raise your concerns, or create a pull request to fix a problem.
How does SeaGOAT work? Does it send my data to ChatGPT?
SeaGOAT does not rely on 3rd party APIs or any remote APIs and executes all functionality locally using the SeaGOAT server that you are able to run on your own machine.
Instead of relying on APIs or "connecting to ChatGPT", it uses the vector database called ChromaDB, with a local vector embedding engine and telemetry disabled by default.
Apart from that, SeaGOAT also uses ripgrep, a regular-expression based code search engine in order to provider regular expression/keyword based matches in addition to the "AI-based" matches.
While the current version of SeaGOAT does not send your data to remote servers, it might be possible that in the future there will be optional features that do so, if any further improvement can be gained from that.
Why does SeaGOAT need a server?
SeaGOAT needs a server in order to provide a speedy response. SeaGOAT heavily relies on vector embeddings and vector databases, which at the moment cannot be replace with an architecture that processes files on the fly.
It's worth noting that you are able to run SeaGOAT server entirely locally, and it works even if you don't have an internet connection. This use case does not require you to share data with a remote server, you are able to use your own SeaGOAT server locally, albeit it's also possible to run a SeaGOAT server and allow other computers to connect to it, if you so wish.
Does SeaGOAT create AI-derived work? Is SeaGOAT ethical?
If you are concerned about the ethical implications of using AI tools keep in mind that SeaGOAT is not a code generator but a code search engine, therefore it does not create AI derived work.
That being said, a language model is being used to generate vector embeddings. At the moment SeaGOAT uses ChromaDB's default model for calculating vector embeddings, and I am not aware of this being an ethical concern.
What programming languages are supported?
Currently SeaGOAT is hard coded to only process files in the following formats:
- Text Files (
*.txt) - Markdown (
*.md) - Python (
*.py) - C (
*.c,*.h) - C++ (
*.cpp,*.cc,*.cxx,*.hpp) - TypeScript (
*.ts,*.tsx) - JavaScript (
*.js,*.jsx) - HTML (
*.html) - Go (
*.go) - Java (
*.java) - PHP (
*.php) - Ruby (
*.rb)
Why is SeaGOAT processing files so slowly while barely using my CPU?
Since processing files for large repositories can take a long time, SeaGOAT is designed to allow you to use your computer while processing files. It is an intentional design choice to avoid blocking/slowing down your computer.
This design decision does not affect the performance of queries.
By the way, you are able to use SeaGOAT to query your repository while it's processing your files! When you make a query, and the files are not processed yet, you will receive a warning with an estimation of the accuracy of your results. Also, regular expression/full text search based results will be displayed from the very beginning!
What character encodings are supported?
The preferred character encoding is UTF-8. Most other character encodings should also work. Only text files are supported, SeaGOAT ignores binary files.
Where does SeaGOAT store it's database/cache?
Where SeaGOAT stores databases and cache depends on your operating system.
For your convenience, you can use the seagoat-server server-info
command to find out where these files are stored on your system.
Can I host SeaGOAT server on a different computer?
Yes, if you would like to use SeaGOAT without having to run the server on
the same computer, you can simply self-host SeaGOAT server on a different
computer or in the cloud, and
configure
the seagoat/gt command to connect to this remote server through the
internet.
By default the server only accepts connections from the same computer. To
accept remote connections, set host: 0.0.0.0 under server in the global
configuration file of the computer running the server.
The instance serves the repositories listed in the repositories.json file
next to the instance file, in the cache directory of the computer running
the server (for example ~/.cache/seagoat-servers/repositories.json on
Linux); seagoat-server start writes this file. With client.host set, the
CLI sends no repository path, so that remote instance must serve exactly one
repository.
Keep in mind that SeaGOAT itself does not enforce any security as it is primarily designed to run locally. If you have private code that you do not wish to leak, you will have to make sure that only trusted people have access to the SeaGOAT server. This could be done by making it only available through a VPN that only your teammates can access.
Can I ignore files/directories?
SeaGOAT already ignores all files/directories ignored in your .gitignore.
If you wish to ignore additional files but keep them in git, you can use the
ignorePatterns attribute from the server configuration.
Learn more