This connects Claude to DeepSeek's API, giving you access to their V3.2 models for chat and reasoning tasks. You get two main models: deepseek-chat for general use with 128K context, and deepseek-reasoner for math and logic problems with thinking mode enabled. The skill includes examples for streaming responses, function calling, JSON mode, and fill-in-the-middle code completion. It's OpenAI SDK compatible, so you can swap it in by changing the base URL. Pricing is aggressive with cached prompts at $0.028 versus $0.28 per million tokens. Useful when you want an alternative inference provider or need the reasoner's extended 64K output window for complex tasks.
npx -y skills add vm0-ai/vm0-skills --skill deepseek --agent claude-codeInstalls into .claude/skills of the current project.
If requests fail, run zero doctor check-connector --env-name DEEPSEEK_TOKEN or zero doctor check-connector --url https://api.deepseek.com/chat/completions --method POST
All examples below assume you have DEEPSEEK_TOKEN set.
The base URL for the DeepSeek API is:
https://api.deepseek.com (recommended)https://api.deepseek.com/v1 (OpenAI-compatible)Send a simple chat message:
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-chat",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello, who are you?"
}
]
}
Then run:
curl -s "https://api.deepseek.com/chat/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json
Available models:
deepseek-chat: DeepSeek-V3.2 non-thinking mode (128K context, 8K max output)deepseek-reasoner: DeepSeek-V3.2 thinking mode (128K context, 64K max output)Adjust creativity/randomness with temperature:
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-chat",
"messages": [
{
"role": "user",
"content": "Write a short poem about coding."
}
],
"temperature": 0.7,
"max_tokens": 200
}
Then run:
curl -s "https://api.deepseek.com/chat/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json | jq -r '.choices[0].message.content'
Parameters:
temperature (0-2, default 1): Higher = more creative, lower = more deterministictop_p (0-1, default 1): Nucleus sampling thresholdmax_tokens: Maximum tokens to generateGet real-time token-by-token output:
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-chat",
"messages": [
{
"role": "user",
"content": "Explain quantum computing in simple terms."
}
],
"stream": true
}
Then run:
curl -s "https://api.deepseek.com/chat/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json
Streaming returns Server-Sent Events (SSE) with delta chunks, ending with data: [DONE].
Use the reasoner model for complex reasoning tasks:
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-reasoner",
"messages": [
{
"role": "user",
"content": "What is 15 * 17? Show your work."
}
]
}
Then run:
curl -s "https://api.deepseek.com/chat/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json | jq -r '.choices[0].message.content'
The reasoner model excels at math, logic, and multi-step problems.
Force the model to return valid JSON:
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-chat",
"messages": [
{
"role": "system",
"content": "You are a JSON generator. Always respond with valid JSON."
},
{
"role": "user",
"content": "List 3 programming languages with their main use cases."
}
],
"response_format": {
"type": "json_object"
}
}
Then run:
curl -s "https://api.deepseek.com/chat/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json | jq -r '.choices[0].message.content'
Continue a conversation with message history:
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-chat",
"messages": [
{
"role": "user",
"content": "My name is Alice."
},
{
"role": "assistant",
"content": "Nice to meet you, Alice."
},
{
"role": "user",
"content": "What is my name?"
}
]
}
Then run:
curl -s "https://api.deepseek.com/chat/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json | jq -r '.choices[0].message.content'
Use Fill-in-the-Middle for code completion (beta endpoint):
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-chat",
"prompt": "def add(a, b):\n ",
"max_tokens": 20
}
Then run:
curl -s "https://api.deepseek.com/beta/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json | jq -r '.choices[0].text'
FIM is useful for:
Define functions the model can call:
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-chat",
"messages": [
{
"role": "user",
"content": "What is the weather in Tokyo?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name"
}
},
"required": ["location"]
}
}
}
]
}
Then run:
curl -s "https://api.deepseek.com/chat/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json
The model will return a tool_calls array when it wants to use a function.
Extract usage information from response:
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-chat",
"messages": [
{
"role": "user",
"content": "Hello"
}
]
}
Then run:
curl -s "https://api.deepseek.com/chat/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json | jq '.usage'
Response includes:
prompt_tokens: Input token countcompletion_tokens: Output token counttotal_tokens: Sum of bothDeepSeek is fully compatible with OpenAI SDKs. Just change the base URL:
Python:
from openai import OpenAI
client = OpenAI(api_key="your-deepseek-key", base_url="https://api.deepseek.com")
Node.js:
import OpenAI from 'openai';
const client = new OpenAI({ apiKey: 'your-deepseek-key', baseURL: 'https://api.deepseek.com' });
For complex requests with nested JSON (like function calling), use a temp file to avoid shell escaping issues:
Write to /tmp/deepseek_request.json:
{
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "What is the weather in Tokyo?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather",
"parameters": {
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"]
}
}
}]
}
Then run:
curl -s "https://api.deepseek.com/chat/completions" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DEEPSEEK_TOKEN" -d @/tmp/deepseek_request.json
deepseek-chat for general tasks, deepseek-reasoner for complex reasoningresponse_format, include JSON instructions in system messageapi.deepseek.com/beta-d @filename to avoid shell quoting issuesjuliusbrussee/caveman
mattpocock/skills
shadcn/improve
obra/superpowers
forrestchang/andrej-karpathy-skills
vercel-labs/skills