For the past few months, I have been quietly working with family and friends on a small open-source AI tool that performs code reviews. It reads the diff of a pull request from GitHub and then fetches requirements from Jira or from a GitHub issue.
The tool is called Gaunt Sloth assistant, the source code can be found at GitHub:
https://github.com/andruhon/gaunt-sloth-assistant
The tool is built with TypeScript and working on Linux, Windows and MacOS.
https://www.npmjs.com/package/gaunt-sloth-assistant
Installation is as simple as npm install gaunt-sloth-assistant -g
Currently we have presets for Gemini (VertexAI), Claude (Anthropic) and for text generation models provided by Groq.
I never anticipated Gaunt Sloth to be a coding agent; I was primarily aiming for it to do code reviews for me.
But since we added filesystem support, it appeared that Gaunt Sloth is actually capable of doing a coding job (particularly with thinking models).
Today I wanted to add DeepSeek support and first I installed the necessary dependency `@langchain/deepseek` and created the following manual config:
.gsloth.config.mjs
```javascript
import { statusUpdate } from './dist/tools/statusUpdate.js';
import GthFileSystemToolkit from './dist/tools/GthFileSystemToolkit.js';
export async function configure() {
const deepseek = await import('@langchain/deepseek');
return {
llm: new deepseek.ChatDeepSeek({
model: 'deepseek-reasoner',
}),
tools: [
statusUpdate,
new GthFileSystemToolkit()
]
};
}
```
With this, I was able to confirm that all functions I tried were working well.
I thought, "Why don't I ask DeepSeek to create a config preset for itself?", so I quickly created the following requirements file:
```
# Add DeepSeek preset
DeepseekReasoner confirmed to work well with Gaunt Sloth.
- Inspect manual DeepSeek config at .gsloth.config.mjs
- Inspect other existing configs at src/configs/,
- Create similar preset config for deepseek (please structure it like src/configs/anthropic.ts, but use ChatDeepSeek from `@langchain/deepseek` like in .gsloth.config.mjs)
- Update src/config.ts to make sure deepseek is supported
- Add a new integration test config to integration-tests/configs
- Don't forget to update integration-tests/setup-config.js
```
Then I started Gaunt Sloth with `gth code` and typed `implement req/deepseek.md`, and it went on building.
It's a bit slowish, but once it finished, I quickly reviewed the code and it was looking fine, so I went straight to running integration tests
with `npm run it deepseek` and they all passed! This is truly impressive considering how much cheaper this model is; as of today it is US$2.19 per million tokens (Gemini Pro is $10/MTok and Claude is $15/MTok)!
I just ran `npm run lint -- --fix` and pushed this commit https://github.com/andruhon/gaunt-sloth-assistant/commit/6fe9fbd20232a63953b9dc1e5563ad8bf8eb8da9