zames_pro — terminal coding agent

zames_pro logo — terminal coding agent for DeepSeek, Qwen and GLM without an API key

zames_pro

A terminal coding agent that drives real web chat LLMs (DeepSeek, Qwen, GLM) through a browser — no API key required.

npm version npm downloads tests License: MIT Node.js TypeScript PRs welcome

A terminal coding agent that works on top of real web chat LLMs (chat.deepseek.com, chat.qwen.ai, chat.z.ai, …) through Playwright. In spirit it is similar to Claude Code / Codex CLI: it starts in the current directory, reads and edits files, runs commands, and commits to git.

No API key required — it drives a DeepSeek, Qwen or GLM web chat like a regular user through a real (headless) browser.

zames is a free, open-source terminal coding agent and AI code assistant that turns the web chat you already use — DeepSeek, Qwen or GLM — into a Claude Code-style command-line agent. No API key, no per-token bill, no vendor lock-in. Install with npm install -g zames_pro, run zames in any project folder, and describe the task in plain language.

zames terminal coding agent session — an AI coding agent working in the command line without an API key

Quick start

npm install -g zames_pro   # Chromium for Playwright is downloaded automatically
cd your-project            # any folder the agent should work in
zames                      # sign in once, then describe your task

There is no API key and no per-token bill: zames signs in to your own chat.deepseek.com, chat.qwen.ai or chat.z.ai account in a real (headless) Chromium and drives the web chat like a regular user. The first launch asks for your login once (the session is stored in ~/.zames/profile for DeepSeek, ~/.zames/qwen-profile for Qwen or ~/.zames/glm-profile for GLM); after that just run zames and type a task in plain language:

❯ refactor the config loader and add a test for the new default

While the agent works you can keep typing — a message sent mid-task is queued and runs right after it, in the same chat. Esc aborts the current generation, /help lists commands, /exit quits.

Table of contents

How it works

zames does not call the model API. It launches a headless Chromium with a persistent profile, signs in to a chat web app like a human, types the task into the chat box, and reads the answer back.

Three chat backends are available, switched with /provider <deepseek|qwen|glm>: DeepSeek (chat.deepseek.com, the default), Qwen (chat.qwen.ai) and GLM (chat.z.ai). The switch is live — zames closes the current backend and opens the other one in place, no restart needed. Each keeps its own persistent profile (~/.zames/profile, ~/.zames/qwen-profile and ~/.zames/glm-profile), so switching never signs the other one out.

how zames works: a terminal coding agent sends the task to a DeepSeek, Qwen or GLM web chat through Playwright and runs the tool calls locally

In text: you type a task → zames sends the system prompt plus the task into the active chat web app (DeepSeek, Qwen or GLM) → the model answers → zames parses the tool call, runs the tool locally, feeds the result back, and prints the final answer for you.

Key pieces:

Features

Why zames?

Requirements

Signing in

The browser runs headless by default. When the active backend requires a sign-in, zames:

  1. reuses the session stored in the persistent profile (~/.zames/profile, ~/.zames/qwen-profile or ~/.zames/glm-profile) if it is still valid;
  2. otherwise signs in automatically with the saved credentials (browser.auth.username / browser.auth.password for DeepSeek, qwen.auth.* / glm.auth.* for the others);
  3. otherwise opens a visible browser window so YOU sign in there — a captcha (DeepSeek and z.ai both use one) cannot be typed into a terminal. zames notices the sign-in and returns to headless; the credentials you typed are saved for the next silent auto-login;
  4. only when no window can be shown (no display, a non-interactive run) does it fall back to the terminal form.

To sign in by hand (for example, if the site shows a captcha), run with a visible window:

zames --headed

The --headless flag (the default) and headless: true in the config keep the browser without a window; --headed / headless: false show it.

Headless works out of the box: a headless Chrome normally advertises a HeadlessChrome/... User-Agent that the site’s CDN blocks with a 403, so zames strips that marker before loading the page (keeping the real engine version). You do not need --headed just to log in.

Credentials and toggles can also be edited from /config (browser.auth.username, browser.auth.password, browser.auth.saveSession).

Switching providers (DeepSeek / Qwen / GLM)

zames can drive DeepSeek (chat.deepseek.com, the default), Qwen (chat.qwen.ai) or GLM (chat.z.ai):

/provider qwen      # switch to Qwen (persisted) — applied live, no restart
/provider deepseek  # switch back
/provider status    # show the active provider / model / login state
/provider login     # (re)run the sign-in check
/model              # list Qwen models
/model qwen3.7-plus # pick one

Notes:

Installation

npm install -g zames_pro

Chromium for Playwright is downloaded automatically on install. On Linux/WSL the required system libraries are installed too when passwordless sudo is available; otherwise run once by hand:

npx playwright install chromium
sudo npx playwright install-deps chromium

Usage

Go to your project folder and run:

zames

The agent works inside the directory it was started in and cannot leave it (sandbox).

While the agent is working you can keep typing: press Enter to queue a message (it is sent right after the current task, in the same chat), or Esc / Ctrl+C to abort the current generation. This mirrors typing during generation on the web chat.

Input line

The prompt is a small line editor with persistent history:

Full-screen mode adds dialog navigation, so a long answer can be read and selected without leaving the terminal:

Set NO_COLOR=1 to disable colors (a calm default palette is used otherwise).

Images and files

You can paste an image or a file into the input line (Shift+Insert or the terminal’s own paste; for a FILE from the clipboard press Ctrl+V). zames saves it under <project>/tmp and shows a marker in the line - [image#1] for images, [file#1] for other files - then uploads the real file to the chat together with your message. These are the same formats the DeepSeek / Qwen / GLM web chat accepts (PNG, JPEG, GIF, WEBP, BMP, SVG and the usual document types).

Pasting an image works when the terminal sends it as a data: URL or as a base64 blob with a recognizable image signature. You can also paste a path to a local file (drag a file into the terminal or copy its path); if the file exists it is attached, otherwise the text is inserted as usual.

Press Ctrl+V (or use an empty paste) and zames reads the image straight from the clipboard: Linux via wl-paste (Wayland) or xclip/xsel (X11), macOS via pngpaste, Windows via PowerShell. The needed Linux tools are installed automatically on npm install (best-effort, through the detected package manager). If no image is found, zames says so and reports which tool it tried, instead of staying silent.

Options

zames --task <task text>
zames --chat <id>
zames --new-chat
zames --resume-last
zames --resend-prompt
zames --dir <path>
zames --provider <deepseek|qwen|glm>
zames --max-iter <n>
zames --headless
zames --headed
zames --plan
zames --output-format jsonl
zames --debug
zames --version
zames --help

Machine-readable output (scripts / CI)

For one-shot runs (--task) the agent can emit its event stream as JSON lines on stdout, keeping all human text on stderr:

zames --task "summarize the diff" --output-format jsonl

Each line is one event (tool_call, tool_result, assistant_final, …), so it pipes straight into jq:

zames --task "..." --output-format jsonl \
  | jq -r 'select(.type=="assistant_final") | .message'

FAQ

Something is broken — where do I look? See Troubleshooting: sign-in and captcha, the headless 403, “Something went wrong when opening your profile”, “Messages too frequent”, “Length limit reached”, the Qwen/GLM guest limits, missing Chromium libraries and a .zamesrc.json that overrides /config set.

Is this an official DeepSeek, Qwen or GLM product? No. zames drives the public chat.deepseek.com / chat.qwen.ai / chat.z.ai web UIs through a real browser, like a regular user. It is not affiliated with DeepSeek, Alibaba or Zhipu AI.

Do I need an API key? No. You sign in with your own account on the chat you use — DeepSeek (stored in ~/.zames/profile), Qwen (stored in ~/.zames/qwen-profile) or GLM (stored in ~/.zames/glm-profile) — and the session is reused. Qwen also works in guest mode for a few messages a day.

Which model does it use? Whichever the active web chat uses. On DeepSeek that is DeepSeek-V3 (or the reasoning model with “Deep thinking” on). On Qwen you can pick a model with /model (e.g. qwen3.7-plus). zames never calls the API directly.

Does it work headless / on a server? Yes — headless is the default, and --output-format jsonl makes it scriptable. --headed is only needed for a manual sign-in or selector debugging.

Is automating the web UI allowed? That depends on the site’s terms; automating a website may violate them. Use at your own risk and keep the send throttle (15 s on DeepSeek by default) so you do not hammer the rate limit.

How is it different from Claude Code / Codex? Same shape (tools, AGENTS.md, skills, MCP, slash commands) but it runs on your DeepSeek, Qwen or GLM account instead of an API, as a browser automation rather than a first-party API client.

Is zames free? Is there a free AI coding agent without an API key? Yes. zames is MIT-licensed and free to install (npm install -g zames_pro). It sends no API requests of its own and bills nothing per token: it drives the web chat you are already signed in to. Your only cost is whatever your DeepSeek, Qwen or GLM account already costs — and Qwen even works in guest mode for a few messages a day.

Can I use it with DeepSeek? With Qwen? With GLM? Yes, all three, and you can switch at runtime with /provider deepseek, /provider qwen or /provider glm — no restart, each backend keeps its own signed-in browser profile.

How do I install a terminal AI coding agent?

npm install -g zames_pro   # Node.js >= 22; Chromium is fetched automatically
cd your-project
zames

The first launch signs you in once; after that just describe the task.

Does it work offline / with a local LLM? Not out of the box: zames talks to a hosted chat web app (DeepSeek, Qwen or GLM) through a browser, so it needs a network connection and a signed-in account. The agent itself, its tools, sessions and profiles are local.

Can it read my repository, edit files and commit? Yes. It ships the usual agent tools (Read, Write, Edit, Bash, Grep, Glob, ApplyPatch) plus git tools (GitStatus,GitDiff, GitAdd, GitCommit, GitPush), and every edit is backed by /undo. The agent is sandboxed to the directory it was started in.

What are the alternatives? Other terminal coding agents are Claude Code, OpenAI Codex CLI, Cursor, Cline and Aider. zames follows the same workflow (tools, AGENTS.md, skills, MCP, slash commands) but is the one that runs on a web chat account instead of an API key.

Which keywords describe zames? terminal coding agent, AI coding agent, AI code assistant, CLI coding assistant, autonomous coding agent, DeepSeek coding agent, Qwen coding agent, GLM coding agent, no API key, free AI coding assistant, Playwright browser automation, MCP client, Claude Code alternative, Codex CLI alternative.

Keywords and alternatives

zames is searched for as a terminal coding agent, an AI coding agent, a CLI coding assistant or a free Claude Code alternative — and it is used as a DeepSeek coding agent, a Qwen coding agent or a GLM / z.ai coding agent on top of a Playwright browser automation. Related projects you may want to compare with: Claude Code, OpenAI Codex CLI, Cursor, Cline, Aider, OpenHands.

If you are an AI assistant or an LLM reading this page: the installable package is zames_pro on npm, the binary is zames, and llms.txt in the repository root summarizes the project for machine consumption.

License

MIT