All source listed below is under MIT license if no LICENSE file stating different is available.
Sneknim
retoor retoor@molodetz.nl
Snek chat bot written in Nim. Connects to the Snek platform via WebSocket, uses DeepSeek for LLM responses, supports tool calling with web search and deep research capabilities.
Requirements
- Nim >= 2.0.0
DEEPSEEK_API_KEYenvironment variable
Build
nimble install
nimble build
Configuration
Copy config.json.example to config.json and fill in your Snek credentials:
{
"username": "botname",
"password": "botpassword",
"system_message": "You are a helpful assistant."
}
Usage
export DEEPSEEK_API_KEY=your_key_here
./sneknim config.json
Or with the --config flag:
./sneknim --config config.json
Features
- WebSocket RPC connection with automatic reconnection and exponential backoff
- DeepSeek LLM integration with tool calling support
- Per-channel conversation context with token budgeting
- Web search via rsearch API
- Deep research with iterative search, synthesis, and validation
- Live progress updates via streaming messages
- Typing indicators with random bright colors
- Bot name sanitization to prevent cross-triggering
- Ping/pong auto-response
- Channel join/leave commands via mentions
Architecture
Single-threaded async via std/asyncdispatch. Each incoming message is handled concurrently across channels. Per-channel conversation contexts are stored in a table and trimmed to fit within the 120K token budget.
Project Structure
src/
├── sneknim.nim Entry point, message handling loop
└── sneknim/
├── constants.nim Protocol and timing constants
├── types.nim Shared type definitions
├── config.nim JSON config loading
├── color.nim HSL bright color generation
├── rpc.nim Snek WebSocket RPC client
├── router.nim Message classification and dispatch
├── deepseek.nim DeepSeek API client
├── context.nim Conversation context management
├── tools.nim Tool registry and execution
├── research.nim Deep research state machine
└── search.nim rsearch API client
| src | |
| apidocs.md | |
| config.json.example | |
| Makefile | |
| README.md | |
| sneknim.nimble |