CLI tool
lessweb/deepcode-cli avatar
lessweb/deepcode-cli

DeepCode CLI: a terminal coding agent tuned for one model family

Deep Code 是专为 deepseek-v4 模型优化的终端 AI 编码助手,支持深度思考、推理强度控制以及 Agent Skills。

2,249 stars217 forksTypeScriptMIT

At a glance

What is it?
A TypeScript monorepo shipping a terminal agent, a core library and a VSCode companion, built on the premise that tool schemas should fit the model rather than stay neutral.
Who is it for?
DeepCode CLI is best understood as an argument rather than a tool: the README claims that tool schemas are not neutral, so a harness should be shaped to one model instead of trying to serve all of them. Whether that pays off depends entirely on whether you use DeepSeek and accept the maintenance cost of a single-vendor harness.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 20 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

One harness for one model family, on purpose

Most terminal coding agents present themselves as model-agnostic: the harness talks to whatever endpoint you configure, and the same tool definitions are expected to work well across providers. DeepCode CLI argues the opposite in its README, and cites Armin Ronacher's essay Better Models: Worse Tools as the starting point.

The argument is that tool schemas are not neutral. Models form habits about tool use during training and reinforcement, so the same harness can produce a model that is very capable inside one tool shape and noticeably unstable in another. From that, the project's premise follows: tune the harness for DeepSeek and let it stay shaped that way.

The README then cites a specific benchmark rather than asking for belief. The deepcode-qrcode-benchmark project is described as showing an advantage for Deep Code paired with DeepSeek in plan mode over Claude Code paired with DeepSeek on a real and non-trivial Python requirement. That is a narrow claim on a narrow task, and the project states it that way, pointing readers to docs/architecture.md for the fuller argument.

The repository is a TypeScript monorepo named `@vegamo/deepcode-monorepo`, private, under the MIT license, with npm 10.9.4 as its declared package manager and `packages/*` as its workspaces. It ships three things: the CLI, a core library and a VSCode companion extension. GitHub reports 2,249 stars, 217 forks and 139 open issues, with a last push on 2026-09-17.

Install, configure, and the one shared settings file

Installation is a single global npm install, after which a binary named `deepcode` runs from any project directory:

bash
npm install -g @vegamo/deepcode-cli

Configuration lives in a single JSON file at `~/.deepcode/settings.json`. The README's example shows three environment entries plus two behaviour flags:

json
{
  "env": {
    "MODEL": "deepseek-flash",
    "BASE_URL": "https://api.deepseek.com",
    "API_KEY": "sk-..."
  },
  "thinkingEnabled": true,
  "reasoningEffort": "max"
}

That file is shared with the VSCode extension, which the README lists in the Marketplace and describes as sharing `~/.deepcode/settings.json` so terminal and editor use one configuration. Layered precedence and environment variable overrides are documented separately in docs/configuration.md rather than on the README page.

The base URL is not limited to DeepSeek. The README documents Coding Plan support by pointing `env.BASE_URL` at any OpenAI-compatible endpoint, using a Volcengine Ark coding plan as its worked example, and the supported model list ends with any other OpenAI-compatible model. The listed options are `deepseek-flash` as the recommended default, `deepseek-v4-pro`, `deepseek-v4-flash` and `deepseek-v4-flash-vision-exp`.

So the tuning argument is about defaults and tool shape rather than a hard lock. You can point it elsewhere; the claim is that it will work best with one family.

Skills, slash commands and the four-level lookup

Agent skills are supported and scanned from four locations in a stated priority order. Project-local `.deepcode/skills/` and `.agents/skills/` are checked, then user-level `~/.deepcode/skills/` and `~/.agents/skills/`. The duplication is deliberate: the `.deepcode` paths are native, the `.agents` paths exist so a skill written for another client is found anyway.

The slash command set is wide for a terminal tool. `/new` starts a conversation, `/resume` picks a historical one, `/fork` branches the current conversation into an independent session, `/continue` picks up where things stopped or restores from history, `/model` switches model, thinking mode and reasoning strength, `/raw` toggles between Normal, Lite and a Raw scrolling review mode, `/init` creates an AGENTS.md, `/skills` lists what is available, `/mcp` shows MCP server status, `/undo` restores code and conversation state, and `/exit` quits.

Keyboard handling is also documented rather than left to discovery. Enter sends, Shift+Enter or Ctrl+J inserts a newline, Ctrl+V pastes an image from the clipboard, Esc interrupts a reply in progress, and double Ctrl+D exits.

`/undo` restoring both code and conversation is the one that goes beyond a normal terminal agent, and `/raw` exists because reviewing a stream of tool calls is otherwise awkward in a scrollback buffer. Neither is deeply explained in the README, so both deserve a direct look before you rely on them.

Permissions, MCP and a Slack webhook on completion

The README is explicit that this is not a YOLO-only tool. There is a fine-grained permission mechanism where shell commands, file reads and writes, and network access each require confirmation, and a `permissions` field in the settings file sets any given scope to always allow, always ask, or deny.

MCP support is standard. Servers are declared in an `mcpServers` field, and `/mcp` shows configured servers and their tools at runtime, with details in docs/mcp.md. The README mentions GitHub, browsers and databases as example connections.

Web search goes through the DeepSeek Responses API native capability rather than a bundled search tool, with an escape hatch: `webSearchTool` can be set to the full path of a custom script, and the README links a third-party repository as an example.

Completion notifications are handled by running a script. The `notify` field takes the full path of a shell script, and the README's worked example is a script that posts to a Slack webhook, with the rest in docs/notify.md.

Taken together these three features say something specific about how the project is built: the agent is the part that talks to the model, and everything an agent might need from the outside world is delegated to something you supply and configure. That is a good default for a tool that runs shell commands on your machine.

Three releases in a month, and a manifest that lags the tags

The release history is short and moving. Version 0.3.1 on 2026-08-25 added a local image reading tool called `ReadImage`, the `deepseek-v4-flash-vision-exp` vision model, DeepSeek Files API support and the latest reasoning effort controls.

`ReadImage` is worth reading closely because the limits are documented precisely. Input formats are PNG, JPEG, WebP and GIF. A source file is capped at 20 MiB, decoded pixels at 64 million, and either side at 8192 pixels, with the image sent to the model scaled to a longest edge of 2048 pixels and no more than 4 MiB encoded. The tool rejects empty, corrupt and mislabelled files, applies EXIF orientation, converts to sRGB, keeps transparency, and prefers PNG palette encoding for low-colour images such as screenshots and icons. If it downscales, it tells the model the original dimensions with a coordinate conversion hint, which is what makes it usable for locating elements in a UI screenshot.

Version 0.4.0 on 2026-09-10 moved the default model to `deepseek-flash`, described as DeepSeek-V4.1-Flash, with reasoning strength at low, high or max and a default context window of 1M tokens. It also added a built-in video-generator skill, streaming preview and automatic retry for the model call, a refactored image path, more tolerant snippet matching in the Edit tool, and a Plan Mode option to clear context and implement.

Version 0.4.1 on 2026-09-17 is a fix for the bash tool hanging indefinitely when a child process holds the pipe open, plus a permission prompt colour change and a video prompt guide update. One contributor made that first pull request.

One detail to note: the root `package.json` still reads version 0.4.0 while the newest tag is v0.4.1, so the published package version and the tag have drifted apart by a patch.

Editorial conclusion

DeepCode CLI is best understood as an argument rather than a tool: the README claims that tool schemas are not neutral, so a harness should be shaped to one model instead of trying to serve all of them. Whether that pays off depends entirely on whether you use DeepSeek and accept the maintenance cost of a single-vendor harness. What the project does well is explain its reasoning in public, name the essay it is responding to, and link a benchmark rather than asking for belief. The permissions model, the four-level skills lookup and the shared settings file between terminal and editor are the parts most likely to matter to you on day one. Configure a model and a base URL, then read docs/permission.md before letting it run shell commands.

Frequently asked questions

What is DeepCode and what does it do?

It is a terminal AI coding assistant built specifically for DeepSeek models, with thinking mode and reasoning strength control, agent skills and MCP integration. It is distributed as the @vegamo/deepcode-cli npm package and runs as a command named deepcode from any project directory.

Does DeepCode work with models other than DeepSeek?

Yes. The README says any OpenAI-compatible model can be used, and documents pointing env.BASE_URL at a different OpenAI-compatible endpoint, with a Volcengine Ark coding plan as the worked example. The tuning work described in the README concerns defaults and tool shape rather than a hard restriction to one provider.

Is DeepCode a YOLO mode tool that runs everything without asking?

No, and the README addresses the question directly. There is a fine-grained permission system covering shell commands, file reads and writes and network access, and the permissions field in settings.json sets each scope to always allow, always ask or deny. Shell, file and network actions each require confirmation before they run.

Can DeepCode read images from my screen?

Yes, through the ReadImage tool added in version 0.3.1. It accepts PNG, JPEG, WebP and GIF up to 20 MiB with a 64 megapixel decoded limit, and Ctrl+V pastes an image straight from the clipboard. The deepseek-flash model views images directly, while non-multimodal models fall back to the separate UnderstandImage tool.

How do I get notified when a DeepCode task finishes?

Set the notify field in ~/.deepcode/settings.json to the full path of a shell script, and have that script deliver the result. The README's worked example posts to a Slack webhook, and the full walkthrough lives in docs/notify.md. The same mechanism works for system notifications or any other channel the script can reach.

Official sources

  1. lessweb/deepcode-cli on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/lessweb-deepcode-cli.svg)](https://hysenlabs.com/projects/lessweb-deepcode-cli)