๐ DeepSeek CLIBLOCK
DeepSeek CLI โ unofficial adaptation of Gemini CLI by sluisr. Full agentic AI in your terminal using DeepSeek API.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Unofficial fork of Google Gemini CLI adapted to use the DeepSeek API. Original work Copyright 2025 Google LLC โ Adaptations Copyright 2026 sluisr โ Apache 2.0 License.
[](LICENSE) [](https://www.npmjs.com/package/@sluisr/deepseek-cli)
DeepSeek CLI is an open-source AI agent that brings the power of DeepSeek directly into your terminal. High-performance autonomous coding, tool execution, and context management by sluisr.
๐ Why DeepSeek CLI?
- ๐ฐ Pay-per-use & Cost-Efficient: Pay only for tokens used via DeepSeek API with up to 90% KV Cache discount.
- ๐ง DeepSeek V4 Models: Full support for
deepseek-v4-flashanddeepseek-v4-pro(Reasoning / Thinking CoT mode). - โก Fast Code Patching: Atomic unified diff patching (
apply_patch) for instant, token-efficient code modifications. - ๐ ๏ธ Built-in Developer Tools: File system operations, native server-side web search, shell execution, memory persistence, and FIM autocompletion.
- ๐ Silent Sudo & System Auth: Native non-blocking zero-lag AskPass integration for
sudo,ssh, andgit. - ๐ MCP Extensible: Full Model Context Protocol (MCP) server support.
- ๐ Isolated Configuration: Operates under
~/.deepseek/without polluting system or official CLI configurations.
๐ฆ Installation
Quick Install (NPM Global)
npm install -g @sluisr/deepseek-cli
Then run:
deepseek
Update to Latest Version
npm install -g @sluisr/deepseek-cli@latest
๐ Authentication
Get your API key at platform.deepseek.com/api_keys and export it:
export DEEPSEEK_API_KEY="your-api-key-here" deepseek
Or enter it interactively when prompted on first launch.
Optional custom base URL or pr
8c6eb2a380c4OBSERVED ยท 2026-10-12Connect
Built from this server's own package name, version and transport as found in its source โ not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add ingestion-service --env DEEPSEEK_SUDO_PASSWORD=${DEEPSEEK_SUDO_PASSWORD} --env FORCE_GENERIC_KEYBINDING_HINTS=${FORCE_GENERIC_KEYBINDING_HINTS} --env GEMINI_API_KEY=${GEMINI_API_KEY} --env GEMINI_CLI_CREDENTIALS_PATH=${GEMINI_CLI_CREDENTIALS_PATH} -- npx -y [email protected]{
"mcpServers": {
"ingestion-service": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"DEEPSEEK_SUDO_PASSWORD": "${DEEPSEEK_SUDO_PASSWORD}",
"FORCE_GENERIC_KEYBINDING_HINTS": "${FORCE_GENERIC_KEYBINDING_HINTS}",
"GEMINI_API_KEY": "${GEMINI_API_KEY}",
"GEMINI_CLI_CREDENTIALS_PATH": "${GEMINI_CLI_CREDENTIALS_PATH}"
}
}
}
}Exposed tools (200)
238 read ยท 23 write ยท 2 destructive. Blast radius: 2 tools can delete or overwrite โ an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
BrowserLikeAgent | read | An agent using instance tools. |
CodebaseInvestigator | read | Investigates codebase |
Default | read | Prompts for approval |
DisabledAgent | read | I am disabled |
Edit | write | packages/.../InputPrompt.tsx: return kittyProtocolSupporte... => return kittyProtocolSupporte... |
EmptyDescAgent | read | |
Expansion | read | Command expansion needs shell access |
FailAgent | read | An agent that fails to load |
FailingRemoteAgent | read | A remote agent |
Free | read | free tier |
MixedAgent | read | Uses both patterns. |
MockAgent | read | A mock agent for testing. |
OtherAgent | read | Another agent |
OverwrittenAgent | read | A remote agent |
Plan | read | Read-only mode |
ProjectAgent | read | Project Agent Desc |
R1 | read | D1 |
RemoteAgent | read | A remote agent |
RemoteAgentAccumulationTest | read | User-provided description |
RemoteAgentBadAuth | read | A remote agent |
RemoteAgentWithAuth | read | A remote agent |
RemoteAgentWithDescription | read | User-provided description |
RemoteAgentWithEmptyAgentDescription | read | User-provided description |
RemoteAgentWithSkillsOnly | read | User-provided description |
RemotePolicyAgent | read | A remote agent |
SecuredAgent | read | A secured remote agent |
Shell | read | user-command |
ShellTool | read | A shell tool |
Skill1 | read | Desc1 |
Skill2 | read | Desc2 |
SkillFallbackAgent | read | User description |
Test | read | Test desc |
TestAgent | read | An agent for testing. |
TestLocalAgent | read | A local test agent. |
TestProtocolAgent | read | A test agent for protocol tests. |
TestRemoteAgent | read | A remote test agent. |
Username | read | Your public username |
Value | read | Val |
YOLO | read | Auto-approves all tools |
__leading | read | test |
a__b__c | read | three parts - not valid MCP |
about | read | About the CLI |
accessibility-agent | read | An expert in web accessibility and ARIA roles. |
add | write | Add two numbers |
agent_1 | read | Test agent 1 |
agent_2 | read | Test agent 2 |
agents | read | Manage agents |
alpha | read | Alpha command |
analytics-agent | read | An expert in tracking, analytics, and metrics. |
another-command | read | Another test command |
another-tool | read | Another tool |
arg1 | read | Argument 1 |
ask_user | read | ask user |
audit | read | Triage issues labeled as status/need-triage |
auth | read | Manage authentication |
bravo | read | Bravo command |
browser_agent | read | mock definition |
bug | write | Submit a bug report |
bug-memory | read | Capture a V8 heap snapshot to disk to attach to a bug report |
builtin | read | desc2 |
builtin-skill | read | A built-in skill |
catchAllTool | read | Catches all errors |
chat | read | Browse auto-saved conversations and manage chat checkpoints |
checkSystemStatus | read | Checks the current system status |
child | read | a child command |
child1 | read | First child. |
clear | destructive | Clear the screen |
click | read | Click element |
click_at | read | Click at coordinates |
closeDiff | read | |
close_page | read | Close page |
codebase_investigator | read | Investigating codebase |
commands | read | Manage custom slash commands. Usage: /commands [list|reload] |
commit | write | Commit changes |
common-agent | read | User version |
complex-agent | read | A complex markdown agent |
config | read | Configure an agent |
confirm | read | a command that needs confirmation |
confirming_tool | read | Confirming tool description |
context-check-command | read | checks context |
copy | read | Copy the last result or code snippet to clipboard |
corgi | read | Toggles corgi mode |
css-agent | read | An expert in CSS, styling, and UI design. |
custom-script | write | Run custom script |
cyclic-command | read | |
database-agent | read | An expert in database schemas, SQL, and creating database migrations. |
debug | read | Export the most recent API request as a JSON payload |
dedup | read | Triage issues labeled as status/possible-duplicate |
delete | destructive | Delete a conversation checkpoint. Usage: /resume delete <tag> |
devops-agent | read | An expert in CI/CD, Docker, and deployment scripts. |
disable | write | Disable an enabled agent |
disabled-builtin | read | disabled builtin |
docs | read | Open full Gemini CLI documentation in your browser |
docs-agent | read | An agent with expertise in updating documentation. |
edit | write | edit file |
edit-tool | write | desc |
editor | write | Set external editor preference |
enable | write | Enable a disabled agent |
error-tool | read | This tool failed |
exit_plan_mode | read | exit plan mode |
explore | read | Open extensions page in your browser |
export-session | read | Export the current session to a JSON file |
extensions | read | Manage extensions. |
failTool | read | Mock description |
failVisible | read | Fails with a visible error if input is |
failing-tool | read | A tool that fails |
fetch_posts | read | |
filecmd | read | A command from a file |
fill | read | Fill form field |
foo | read | example resource |
free | read | Free tier |
gemma | read | Check local Gemma model routing status |
get_context | read | Get information about the current session context. |
get_ticket | read | Get a ticket |
help | read | Show help for this prompt |
hidden | read | A hidden command |
hidden-child | read | A hidden child command |
hooks | read | Manage hooks |
hover | read | Hover element |
i18n-agent | read | An expert in internationalization and translations. |
ide | read | IDE command |
inbox | write | Review skills extracted from past sessions and move them to global or project skills |
inferred-remote | read | Inferred |
init | read | Initializes the server. |
install | write | Install an extension from a git repo or local path |
json-remote | read | A JSON-based remote agent |
legacy-tool | read | desc |
link | read | Link an extension from a local path |
list | read | List available local and remote agents |
list_pages | read | list all pages |
locked-skill | read | A skill in a locked dir |
ls | read | list directory |
manage | read | Opens a dialog to configure the model |
mcp | read | MCP command |
mcp-agent | read | An agent with MCP servers |
mcp_myserver_search | read | Search via MCP |
mcpcmd | read | A command from mcp |
memory | read | Commands for interacting with memory |
memory-leak | read | Debug memory leaks |
mobile-agent | read | An expert in React Native and mobile app development. |
mock-agent | read | Mock Agent Description |
model | read | Manage model configuration |
multiAnnotationTool | read | A tool with multiple annotations |
navigate_page | read | Navigate to URL |
new_page | read | Open a new page/tab |
no-card-agent | read | Missing card info |
noaction | read | unhandled type |
non-stream-test | read | A test non-streaming command |
not-top-level | read | Not a top level command |
notakes | read | Subcommand that does not take arguments |
nullableTool | read | Tool with nullable array |
oauth-test-agent | read | An agent to test OAuth MCP with full fields |
oncall | read | Oncall related commands |
one | read | first |
openDiff | read | |
other_tool | read | |
paid | read | Paid tier |
parent | read | A parent command |
pending-tool | read | This tool is pending |
permissions | read | Permissions command |
plan | read | Plan command |
policies | read | Manage policies |
policy-test-tool | read | tests policy |
press_key | read | Press key |
privacy | read | Display the privacy notice |
profile | read | Profile command |
project-agent | read | desc |
project-gemini | read | desc |
project-only | read | Project only |
prompt-1 | read | A test prompt |
question-mark | read | Alternative name for help |
readOnlyTool | read | A read-only tool |
read_file | read | Read a file |
regular | read | desc1 |
regular-skill | read | regular |
remote-agent | read | A remote agent |
remote_agent | read | Remote agent description. |
remote_agent_call | read | Remote agent call |
replace | write | edit file |
resource | read | Test Resource |
restore | read | Restores the server. |
resume | read | Browse auto-saved conversations and manage chat checkpoints |
review | read | Review code |
review-frontend | read | Review frontend code |
rewind | write | Jump back to a specific message and restart the conversation |
run_shell_command | write | Run command |
s1 | read | d1 |
s2 | read | d2 |
s3 | read | d3 |
same-name | read | ext-desc |
same-skill | read | gemini-desc |
save | write | Save the current conversation as a checkpoint. Usage: /resume save <tag> |
schema | read | List configured MCP servers and tools with descriptions and schemas |
security-agent | read | An expert in security audits and vulnerability patches. |
select_page | read | Select page |
session | read | Show session-specific usage statistics |
set | write | Set the model to use. Usage: /model set <model-name> [--persist] |
settings | write | View and edit Gemini CLI settings |
setup-github | write | Set up GitHub Actions |
share | read | Share the current conversation to a markdown or json file. Usage: /resume share <file> |
Trust audit
BLOCKgrade F ยท trust 21/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (8 observation(s))
- Network
- declared (13 observation(s))
- Shell
- declared (5 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
sandboxEnv = `sandbox-exec (${sandboxEnv = `sandbox-exec (${sandboxEnv = `sandbox-exec (${exec(cmd: string, options?: AgentShellOptions): Promise<AgentShellResult>;
{ ...process.env } ... curl- **Experimental todos:** Track and display progress on complex tasks with a
# MIT License
dummy.wasm
{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"text":"I'll check the dynamic content page on the localhost server."},{"functionCall":{"name":"invoke_agent","args":{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"functionCall":{"name":"navigate_page","args":{"url":"http://127.0.0.1:18923/dynamic.html"}}}],"role":"model"},"finis{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"text":"I'll fill out the contact form on the localhost server."},{"functionCall":{"name":"invoke_agent","args":{"age{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"functionCall":{"name":"navigate_page","args":{"url":"http://127.0.0.1:18923/form.html"}}}],"role":"model"},"finishRe{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"text":"I'll go through the multi-step flow on the localhost server."},{"functionCall":{"name":"invoke_agent","args":{ code: 0x15, jt: 0, jf: 1, k: SYS_ptrace }, // If ptrace, jump to ERRNO{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"text":"I will invoke the browser agent to get the page title of example.com."}],"role":"model"},"index":0}],"usageMe{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"functionCall":{"name":"list_pages","args":{"wait_for_previous":true},"id":"q9a8dwir"},"thoughtSignature":"Et4DCtsDAb{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"functionCall":{"name":"new_page","args":{"url":"http://example.com","wait_for_previous":true},"id":"q8jik45z"},"thou{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"functionCall":{"name":"navigate_page","args":{"wait_for_previous":true,"url":"https://example.com","type":"url"},"id{"method":"generateContentStream","response":[{"candidates":[{"content":{"parts":[{"functionCall":{"name":"navigate_page","args":{"wait_for_previous":true,"url":"http://example.com","type":"url"},"id".mockResolvedValue({ token: 'test-access-token-user-code' });'Failed to authenticate:\n-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA12345...\n-----END RSA PRIVATE KEY-----\nPlease check credentials.',
RSA_KEY: '-----BEGIN RSA PRIVATE KEY-----...',
OPENSSH_KEY: '-----BEGIN OPENSSH PRIVATE KEY-----...',
EC_KEY: '-----BEGIN EC PRIVATE KEY-----...',
PGP_KEY: '-----BEGIN PGP PRIVATE KEY-----...',
Gates applied: no_behavioural_pass.
8c6eb2a380c4full audit observations/trust-audit/mcp-server/sluisr__deepseek-cli.json ยท Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-12 | 8c6eb2a380c4 | BLOCK | F | 21 | first audit |
Questions
What is the @sluisr/deepseek-cli MCP server?
DeepSeek CLI โ unofficial adaptation of Gemini CLI by sluisr. Full agentic AI in your terminal using DeepSeek API.
What tools does @sluisr/deepseek-cli expose?
200 in total: 238 read-only, 23 that write, and 2 that can delete or overwrite (clear, delete). Every one is listed on this page with its risk.
Is @sluisr/deepseek-cli safe to connect to an agent?
No โ not without reading the findings first. The audit graded it F (21/100) and found 7 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does @sluisr/deepseek-cli need?
It reads DEEPSEEK_SUDO_PASSWORD, FORCE_GENERIC_KEYBINDING_HINTS, GEMINI_API_KEY, GEMINI_CLI_CREDENTIALS_PATH, GITHUB_TOKEN, TEST_SECRET_TOKEN and WINDOWS_PFX_PASSWORD from the environment. Give it a token scoped to the least it needs โ an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does @sluisr/deepseek-cli run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as ingestion-service at 1.0.0.
How current is this page?
The grade is for one exact copy of the source (8c6eb2a380c4), read on 2026-10-12. The repository is watched and re-audited when it changes.