zames_pro 2.82.50 → 2.82.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +159 -26
- package/SECURITY.md +50 -0
- package/dist/agent-loop.js +24 -4
- package/dist/answer-parse.js +1 -1
- package/dist/attach-refs.js +22 -6
- package/dist/browser-chats.js +1 -1
- package/dist/browser-dom.js +1 -1
- package/dist/browser-pure.js +1 -1
- package/dist/browser.js +1 -1
- package/dist/changelog.js +1 -1
- package/dist/checkpoint.js +1 -1
- package/dist/cli-args.js +1 -1
- package/dist/config-command.js +1 -1
- package/dist/config-commands.js +1 -1
- package/dist/config.js +1 -1
- package/dist/context.js +19 -3
- package/dist/extraTools.js +7 -0
- package/dist/i18n/deepseek.js +3 -3
- package/dist/i18n.js +1 -1
- package/dist/index.js +3 -3
- package/dist/input/layout.js +1 -1
- package/dist/input/suggest.js +1 -1
- package/dist/input.js +1 -1
- package/dist/mcp.js +8 -2
- package/dist/path-token.js +1 -1
- package/dist/subagent.js +5 -12
- package/dist/tools.js +9 -0
- package/dist/tui/StatusBar.js +1 -1
- package/dist/web.js +16 -6
- package/llms-full.txt +679 -0
- package/llms.txt +102 -0
- package/package.json +84 -23
package/llms-full.txt
ADDED
|
@@ -0,0 +1,679 @@
|
|
|
1
|
+
# zames_pro — full documentation for LLMs
|
|
2
|
+
|
|
3
|
+
> Terminal coding agent that drives a real web chat LLM (DeepSeek, Qwen,
|
|
4
|
+
> GLM) through a headless Playwright browser — no API key required.
|
|
5
|
+
> Package: https://www.npmjs.com/package/zames_pro
|
|
6
|
+
> Source: https://github.com/Viqto0r/zames_pro
|
|
7
|
+
|
|
8
|
+
The text below is the English README verbatim.
|
|
9
|
+
A terminal coding agent that works on top of real web chat LLMs
|
|
10
|
+
([chat.deepseek.com](https://chat.deepseek.com/), [chat.qwen.ai](https://chat.qwen.ai/), [chat.z.ai](https://chat.z.ai/), …)
|
|
11
|
+
through Playwright.
|
|
12
|
+
In spirit it is similar to Claude Code / Codex CLI: it starts in the current
|
|
13
|
+
directory, reads and edits files, runs commands, and commits to git.
|
|
14
|
+
|
|
15
|
+
> No API key required — it drives a DeepSeek, Qwen or GLM web chat like a
|
|
16
|
+
> regular user through a real (headless) browser.
|
|
17
|
+
|
|
18
|
+
**zames is a free, open-source terminal coding agent and AI code assistant**
|
|
19
|
+
that turns the web chat you already use — DeepSeek, Qwen or GLM — into a
|
|
20
|
+
Claude Code-style command-line agent. No API key, no per-token bill, no vendor
|
|
21
|
+
lock-in. Install with `npm install -g zames_pro`, run `zames` in any project
|
|
22
|
+
folder, and describe the task in plain language.
|
|
23
|
+
|
|
24
|
+
<p align="center">
|
|
25
|
+
<img src="https://raw.githubusercontent.com/Viqto0r/zames_pro/master/docs/demo.png" alt="zames terminal coding agent session — an AI coding agent working in the command line without an API key" width="860">
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
## Quick start
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install -g zames_pro # Chromium for Playwright is downloaded automatically
|
|
32
|
+
cd your-project # any folder the agent should work in
|
|
33
|
+
zames # sign in once, then describe your task
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
There is **no API key and no per-token bill**: zames signs in to **your own
|
|
37
|
+
[chat.deepseek.com](https://chat.deepseek.com/),
|
|
38
|
+
[chat.qwen.ai](https://chat.qwen.ai/) or [chat.z.ai](https://chat.z.ai/)
|
|
39
|
+
account** in a real (headless) Chromium and drives the web chat like a regular
|
|
40
|
+
user. The first launch asks for your login once (the session is stored in
|
|
41
|
+
`~/.zames/profile` for DeepSeek, `~/.zames/qwen-profile` for Qwen or
|
|
42
|
+
`~/.zames/glm-profile` for GLM); after that just run `zames` and type a task in
|
|
43
|
+
plain language:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
❯ refactor the config loader and add a test for the new default
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
While the agent works you can keep typing — a message sent mid-task is queued
|
|
50
|
+
and runs right after it, in the same chat. `Esc` aborts the current generation,
|
|
51
|
+
`/help` lists commands, `/exit` quits.
|
|
52
|
+
|
|
53
|
+
## How it works
|
|
54
|
+
|
|
55
|
+
zames does not call the model API. It launches a headless Chromium with a
|
|
56
|
+
persistent profile, signs in to a chat web app like a human, types the task
|
|
57
|
+
into the chat box, and reads the answer back.
|
|
58
|
+
|
|
59
|
+
Three chat backends are available, switched with `/provider <deepseek|qwen|glm>`:
|
|
60
|
+
**DeepSeek** (`chat.deepseek.com`, the default), **Qwen** (`chat.qwen.ai`)
|
|
61
|
+
and **GLM** (`chat.z.ai`).
|
|
62
|
+
The switch is **live** — zames closes the current backend and opens the other
|
|
63
|
+
one in place, no restart needed. Each keeps its own persistent profile
|
|
64
|
+
(`~/.zames/profile`, `~/.zames/qwen-profile` and `~/.zames/glm-profile`), so
|
|
65
|
+
switching never signs the other one out.
|
|
66
|
+
|
|
67
|
+
<p align="center">
|
|
68
|
+
<img src="https://raw.githubusercontent.com/Viqto0r/zames_pro/master/docs/how-it-works.png" alt="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" width="860">
|
|
69
|
+
</p>
|
|
70
|
+
|
|
71
|
+
In text: you type a task → zames sends the system prompt plus the task into
|
|
72
|
+
the active chat web app (DeepSeek, Qwen or GLM) → the model answers → zames parses
|
|
73
|
+
the tool call, runs the tool locally, feeds the result back, and prints the
|
|
74
|
+
final answer for you.
|
|
75
|
+
|
|
76
|
+
Key pieces:
|
|
77
|
+
|
|
78
|
+
- **The answer is read from the raw network stream** (SSE), not the rendered
|
|
79
|
+
DOM, so tool-call JSON with template strings and escapes survives intact.
|
|
80
|
+
- **A persistent per-provider profile** (`~/.zames/profile` for DeepSeek,
|
|
81
|
+
`~/.zames/qwen-profile` for Qwen) keeps you signed in; the headless
|
|
82
|
+
User-Agent is patched so the site's CDN does not 403 the login.
|
|
83
|
+
- **A send throttle** (15 s on DeepSeek, ~1 s on Qwen, which tolerates rapid
|
|
84
|
+
sends; GLM uses an adaptive pause that starts at 0) keeps the web chat's rate
|
|
85
|
+
limit happy during long tool-heavy runs.
|
|
86
|
+
- **The agent is sandboxed** to the directory it was started in — no tool can
|
|
87
|
+
read or write above it.
|
|
88
|
+
|
|
89
|
+
## Table of contents
|
|
90
|
+
|
|
91
|
+
- [Quick start](#quick-start) · [Features](#features) · [Why zames?](#why-zames) · [Requirements](#requirements)
|
|
92
|
+
- [How it works](#how-it-works) · [Installation](#installation) · [Signing in](#signing-in) · [Usage](#usage)
|
|
93
|
+
- [Switching providers (DeepSeek / Qwen / GLM)](#switching-providers-deepseek--qwen--glm)
|
|
94
|
+
- [Tools](#tools) · [Slash commands](#slash-commands)
|
|
95
|
+
- [Project context, skills and memory](#project-context-skills-and-memory) · [MCP (external tools)](#mcp-external-tools) · [Configuration](#configuration)
|
|
96
|
+
- [FAQ](#faq) · [Keywords and alternatives](#keywords-and-alternatives) · [Links](#links) · [License](#license)
|
|
97
|
+
|
|
98
|
+
## Features
|
|
99
|
+
|
|
100
|
+
- **Tools like Claude Code / Codex** — `Read`, `Write`, `Edit`, `Bash`,
|
|
101
|
+
`Glob`, `Grep`, plus `MultiEdit`, `ApplyPatch`, `LS`, `TodoWrite`, git and web
|
|
102
|
+
tools. Every edit is backed by `/undo`.
|
|
103
|
+
- **Runs while you keep typing** — queue messages during a task; they run right
|
|
104
|
+
after it, in the same chat (like typing during generation on the web).
|
|
105
|
+
- **Plan mode** — `/plan` (or `--plan`) drops all mutating tools, so the agent
|
|
106
|
+
can investigate the code without touching the tree.
|
|
107
|
+
- **Project context** — reads `AGENTS.md`, `MEMORY.md`, skills (`SKILL.md`) and
|
|
108
|
+
custom commands from the repo and `~/.zames`, the same idea as Codex / Claude
|
|
109
|
+
Code.
|
|
110
|
+
- **Subagents** — the `Task` tool delegates a self-contained sub-task to an
|
|
111
|
+
agent in its own separate chat (isolated context), which returns only a
|
|
112
|
+
report, so heavy research does not flood the main context. On by default;
|
|
113
|
+
tune with `browser.subagents` / `browser.maxSubagents`.
|
|
114
|
+
- **MCP support** — plug in external tool servers (e.g. `@playwright/mcp`).
|
|
115
|
+
- **Scheduling** — `/loop`, `/cron` and `/jobs` repeat tasks on a timer.
|
|
116
|
+
- **Bilingual UI** — Russian / English (`/config lang`).
|
|
117
|
+
|
|
118
|
+
## Why zames?
|
|
119
|
+
|
|
120
|
+
- **Built with itself** — `zames_pro` is developed by `zames_pro`. No other
|
|
121
|
+
coding agent is used on this repository: the agent in this very terminal
|
|
122
|
+
reads the sources, runs the tests, fixes the bugs and commits the result.
|
|
123
|
+
That is the daily proof that it works and is actually used.
|
|
124
|
+
- **No API key, no per-token bill** — it uses your own DeepSeek, Qwen or GLM
|
|
125
|
+
chat account, not the paid API. Good for long, tool-heavy tasks.
|
|
126
|
+
- **Same workflow as Claude Code / Codex** — tools, `AGENTS.md`, skills, MCP
|
|
127
|
+
and slash commands, so it feels familiar from day one.
|
|
128
|
+
- **Runs unattended** — headless by default, resumable sessions, and `/loop`
|
|
129
|
+
plus `/cron` for scheduled work.
|
|
130
|
+
- **Local-first** — the browser profile, credentials and logs never leave your
|
|
131
|
+
machine, and the agent is sandboxed to the project directory.
|
|
132
|
+
|
|
133
|
+
## Requirements
|
|
134
|
+
|
|
135
|
+
- Node.js >= 20
|
|
136
|
+
- An account on the chat you want to use — **DeepSeek** (`chat.deepseek.com`,
|
|
137
|
+
the default), **Qwen** (`chat.qwen.ai`) or **GLM** (`chat.z.ai`). Qwen also
|
|
138
|
+
works in guest mode for a few messages. On first launch zames asks for your login in the terminal
|
|
139
|
+
(and stores it in `~/.zames/config.json` after a successful sign-in, so a
|
|
140
|
+
later logout is handled automatically without asking you again). You can also
|
|
141
|
+
sign in manually in the browser window when the browser is headed.
|
|
142
|
+
|
|
143
|
+
## Signing in
|
|
144
|
+
|
|
145
|
+
The browser runs **headless by default**. When the active backend requires a
|
|
146
|
+
sign-in, zames:
|
|
147
|
+
|
|
148
|
+
1. reuses the session stored in the persistent profile
|
|
149
|
+
(`~/.zames/profile`, `~/.zames/qwen-profile` or `~/.zames/glm-profile`)
|
|
150
|
+
if it is still valid;
|
|
151
|
+
2. otherwise signs in automatically with the saved credentials
|
|
152
|
+
(`browser.auth.username` / `browser.auth.password` for DeepSeek,
|
|
153
|
+
`qwen.auth.*` / `glm.auth.*` for the others);
|
|
154
|
+
3. otherwise opens a **visible browser window** so YOU sign in there — a
|
|
155
|
+
captcha (DeepSeek and z.ai both use one) cannot be typed into a terminal.
|
|
156
|
+
zames notices the sign-in and returns to headless; the credentials you
|
|
157
|
+
typed are saved for the next silent auto-login;
|
|
158
|
+
4. only when no window can be shown (no display, a non-interactive run) does it
|
|
159
|
+
fall back to the terminal form.
|
|
160
|
+
|
|
161
|
+
To sign in by hand (for example, if the site shows a captcha), run with a
|
|
162
|
+
visible window:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
zames --headed
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
The `--headless` flag (the default) and `headless: true` in the config keep
|
|
169
|
+
the browser without a window; `--headed` / `headless: false` show it.
|
|
170
|
+
|
|
171
|
+
Headless works out of the box: a headless Chrome normally advertises a
|
|
172
|
+
`HeadlessChrome/...` User-Agent that the site's CDN blocks with a 403, so
|
|
173
|
+
zames strips that marker before loading the page (keeping the real engine
|
|
174
|
+
version). You do not need `--headed` just to log in.
|
|
175
|
+
|
|
176
|
+
Credentials and toggles can also be edited from `/config`
|
|
177
|
+
(`browser.auth.username`, `browser.auth.password`, `browser.auth.saveSession`).
|
|
178
|
+
|
|
179
|
+
## Switching providers (DeepSeek / Qwen / GLM)
|
|
180
|
+
|
|
181
|
+
zames can drive either **DeepSeek** (`chat.deepseek.com`, the default) or
|
|
182
|
+
**Qwen** (`chat.qwen.ai`):
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
/provider qwen # switch to Qwen (persisted) — applied live, no restart
|
|
186
|
+
/provider deepseek # switch back
|
|
187
|
+
/provider status # show the active provider / model / login state
|
|
188
|
+
/provider login # (re)run the sign-in check
|
|
189
|
+
/model # list Qwen models
|
|
190
|
+
/model qwen3.7-plus # pick one
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Notes:
|
|
194
|
+
|
|
195
|
+
- The switch is **live**: zames closes the current backend and opens the other
|
|
196
|
+
one in place, so no restart is needed. The two backends use **separate
|
|
197
|
+
persistent profiles** (`~/.zames/profile` for DeepSeek, `~/.zames/qwen-profile`
|
|
198
|
+
for Qwen), so switching never signs the other one out.
|
|
199
|
+
- A chat id belongs to ONE backend, so the new provider opens a **fresh chat**.
|
|
200
|
+
If the previous chat had messages they are summarized and posted as a
|
|
201
|
+
handoff with the next task; an empty chat is switched silently.
|
|
202
|
+
- Qwen works in **guest mode** without an account, but a guest is limited to a
|
|
203
|
+
handful of messages per day; for long agent runs sign in (email / Google /
|
|
204
|
+
GitHub — no phone required). zames auto-logins from the saved credentials or
|
|
205
|
+
asks in the terminal, exactly like DeepSeek. `/model` changes the Qwen model
|
|
206
|
+
at runtime.
|
|
207
|
+
- **GLM** (`chat.z.ai`) is the third backend. Its first message from a fresh
|
|
208
|
+
profile is gated by a slider captcha, so sign in once in the visible window;
|
|
209
|
+
after that the stored session is reused. `/model` lists and picks GLM
|
|
210
|
+
models too.
|
|
211
|
+
- **GLM runs with a VISIBLE browser window.** Measured: the SAME signed-in
|
|
212
|
+
session is fine in a headed window but every send from HEADLESS is stopped by
|
|
213
|
+
the site's slider captcha (a different puzzle each time, so it cannot be
|
|
214
|
+
solved programmatically). zames therefore launches GLM headed by default and
|
|
215
|
+
prints a note about it; `--headless` still forces headless (sends will hit
|
|
216
|
+
the captcha). `--headed` is accepted everywhere.
|
|
217
|
+
- **Send telemetry**: every send is recorded in
|
|
218
|
+
`~/.zames/logs/sends-<provider>.jsonl` (timing, mode flags, the outcome and
|
|
219
|
+
the server error — never the prompt or the answer). Turn it off with
|
|
220
|
+
`/config set browser.sendTelemetry false`. `/limits` shows the recent sends
|
|
221
|
+
and the current pause. GLM additionally uses an **adaptive pause**: it starts
|
|
222
|
+
at 0 and backs off from a REAL rate limit.
|
|
223
|
+
- **Warning**: automating a web chat may violate the service's terms of use and
|
|
224
|
+
can get an account blocked. GLM (z.ai) has an official API — prefer it for
|
|
225
|
+
heavy automation.
|
|
226
|
+
- File attachments on Qwen go through the mode menu's **Upload attachment**
|
|
227
|
+
item; DeepSeek uses its own paperclip.
|
|
228
|
+
- `/doctor` shows the active provider and the UI health of that provider's
|
|
229
|
+
page.
|
|
230
|
+
|
|
231
|
+
## Installation
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
npm install -g zames_pro
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Chromium for Playwright is downloaded automatically on install. On Linux/WSL
|
|
238
|
+
the required system libraries are installed too when passwordless `sudo` is
|
|
239
|
+
available; otherwise run once by hand:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
npx playwright install chromium
|
|
243
|
+
sudo npx playwright install-deps chromium
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Usage
|
|
247
|
+
|
|
248
|
+
Go to your project folder and run:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
zames
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
The agent works inside the directory it was started in and cannot leave it (sandbox).
|
|
255
|
+
|
|
256
|
+
While the agent is working you can keep typing: press Enter to queue a message
|
|
257
|
+
(it is sent right after the current task, in the same chat), or Esc / Ctrl+C to
|
|
258
|
+
abort the current generation. This mirrors typing during generation on the
|
|
259
|
+
web chat.
|
|
260
|
+
|
|
261
|
+
### Input line
|
|
262
|
+
|
|
263
|
+
The prompt is a small line editor with persistent history:
|
|
264
|
+
|
|
265
|
+
- `↑` / `↓` — walk the message history (saved in `~/.zames/history.json`, so it
|
|
266
|
+
survives a restart); inside a multiline message the arrows move between lines.
|
|
267
|
+
- `Ctrl+R` — incremental reverse search over the history (bash-style): type to
|
|
268
|
+
filter, `Ctrl+R` for older matches, `Enter` to accept, `Esc` to cancel.
|
|
269
|
+
- `Ctrl+_` — undo the last edit in the input line (a fat-fingered `Ctrl+U` /
|
|
270
|
+
`Ctrl+K` is recoverable).
|
|
271
|
+
- `Ctrl+U` — clear the line, `Ctrl+K` — delete to end of line, `Ctrl+W` —
|
|
272
|
+
delete the word before the cursor, `Ctrl+←`/`Ctrl+→` — move by words.
|
|
273
|
+
- `\` + `Enter`, `Ctrl+J`, `Ctrl+Enter` or `Shift+Enter` — insert a newline.
|
|
274
|
+
- `/` + `Tab` — slash-command hints and completion.
|
|
275
|
+
- `!command` — run a shell command directly, bypassing the model (like
|
|
276
|
+
Claude Code's bash mode). The same sandbox guard as the `Bash` tool applies,
|
|
277
|
+
so a direct command cannot leave the project either.
|
|
278
|
+
|
|
279
|
+
Full-screen mode adds dialog navigation, so a long answer can be read and
|
|
280
|
+
selected without leaving the terminal:
|
|
281
|
+
|
|
282
|
+
- `ui.mouseScroll=false` (default) — the terminal owns the mouse: normal text
|
|
283
|
+
selection works and the wheel is inert (it never scrolls the input history —
|
|
284
|
+
history is arrow keys only).
|
|
285
|
+
- `ui.mouseScroll=true` — the app consumes the wheel and scrolls the dialog;
|
|
286
|
+
selecting text then needs `Shift`+click (the TUI convention).
|
|
287
|
+
- `PgUp` / `PgDn` — move up/down the dialog half a screen.
|
|
288
|
+
- `Home` / `End` — jump to the very top / bottom of the dialog (only while the
|
|
289
|
+
input line is empty; with text typed they move the caret as usual).
|
|
290
|
+
- To copy a LARGE block, use `/export` (writes the whole session as Markdown)
|
|
291
|
+
or the transcript file (`/transcript` shows the path) — the terminal's own
|
|
292
|
+
drag-select cannot reach past one screen.
|
|
293
|
+
|
|
294
|
+
Set `NO_COLOR=1` to disable colors (a calm default palette is used otherwise).
|
|
295
|
+
|
|
296
|
+
### Images and files
|
|
297
|
+
|
|
298
|
+
You can paste an image or a file into the input line (Ctrl+Shift+V / Shift+Insert
|
|
299
|
+
or the terminal's own paste). zames saves it under `<project>/tmp` and shows a
|
|
300
|
+
marker in the line - `[image#1]` for images, `[file#1]` for other files - then
|
|
301
|
+
uploads the real file to the chat together with your message. These are the
|
|
302
|
+
same formats the DeepSeek / Qwen / GLM web chat accepts (PNG, JPEG, GIF, WEBP, BMP,
|
|
303
|
+
SVG and the usual document types).
|
|
304
|
+
|
|
305
|
+
Pasting an image works when the terminal sends it as a `data:` URL or as a
|
|
306
|
+
base64 blob with a recognizable image signature. You can also paste a path to a
|
|
307
|
+
local file (drag a file into the terminal or copy its path); if the file exists
|
|
308
|
+
it is attached, otherwise the text is inserted as usual.
|
|
309
|
+
|
|
310
|
+
Press Ctrl+V (or use an empty paste) and zames reads the image straight from
|
|
311
|
+
the clipboard: Linux via wl-paste (Wayland) or xclip/xsel (X11), macOS
|
|
312
|
+
via pngpaste, Windows via PowerShell. The needed Linux tools are installed
|
|
313
|
+
automatically on npm install (best-effort, through the detected package
|
|
314
|
+
manager). If no image is found, zames says so and reports which tool it tried,
|
|
315
|
+
instead of staying silent.
|
|
316
|
+
|
|
317
|
+
### Options
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
zames --task <task text>
|
|
321
|
+
zames --chat <id>
|
|
322
|
+
zames --new-chat
|
|
323
|
+
zames --resend-prompt
|
|
324
|
+
zames --dir <path>
|
|
325
|
+
zames --headless
|
|
326
|
+
zames --headed
|
|
327
|
+
zames --plan
|
|
328
|
+
zames --output-format jsonl
|
|
329
|
+
zames --debug
|
|
330
|
+
zames --version
|
|
331
|
+
zames --help
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Machine-readable output (scripts / CI)
|
|
335
|
+
|
|
336
|
+
For one-shot runs (`--task`) the agent can emit its event stream as JSON lines
|
|
337
|
+
on stdout, keeping all human text on stderr:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
zames --task "summarize the diff" --output-format jsonl
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Each line is one event (`tool_call`, `tool_result`, `assistant_final`, ...), so
|
|
344
|
+
it pipes straight into `jq`:
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
zames --task "..." --output-format jsonl \
|
|
348
|
+
| jq -r 'select(.type=="assistant_final") | .message'
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## Tools
|
|
352
|
+
|
|
353
|
+
The agent has the same style of tools as Claude Code / Codex CLI:
|
|
354
|
+
|
|
355
|
+
- **File tools** — `Read`, `Write`, `Edit`, `Bash`, `Glob`, `Grep`. `Read`
|
|
356
|
+
returns raw content by default; pass `numbered=true` to get `cat -n`-style
|
|
357
|
+
line numbers (for reference only — do not paste them into `Edit`).
|
|
358
|
+
- **Extra tools** — `LS` (list a directory), `MultiEdit` (several edits to one
|
|
359
|
+
file applied atomically), `TodoWrite` (session task checklist), `ApplyPatch`
|
|
360
|
+
(multi-file patch in Codex's V4A format: `*** Begin Patch` … `*** End Patch`).
|
|
361
|
+
- **Git** — `GitStatus`, `GitDiff`, `GitLog`, `GitShow`, `GitBranchList`,
|
|
362
|
+
`GitAdd`, `GitCommit`, `GitPush`.
|
|
363
|
+
- **Web** — `WebFetch`, `WebSearch`.
|
|
364
|
+
- **Service** — `respond` (final answer to the operator, ends the task).
|
|
365
|
+
|
|
366
|
+
All file tools stay inside the working directory (sandbox). `Write`/`Edit` and
|
|
367
|
+
`MultiEdit`/`ApplyPatch` make a backup (undo) before touching a file.
|
|
368
|
+
|
|
369
|
+
## Slash commands
|
|
370
|
+
|
|
371
|
+
Type / in the prompt for hints (Tab completes). Besides the session and
|
|
372
|
+
config commands (/new, /chats, /resume, /cd, /status, /config,
|
|
373
|
+
/undo, /transcript, /mcp, /skills, /memory, /init, /reload,
|
|
374
|
+
/debug-dom, /help, /exit) there are a few that mirror Claude Code /
|
|
375
|
+
Codex CLI:
|
|
376
|
+
|
|
377
|
+
- /diff [--staged] — show the working-tree git diff (--staged for the index).
|
|
378
|
+
- /diffstat — a one-line change summary (`git diff --stat`).
|
|
379
|
+
- /context — show what is loaded into the prompt (AGENTS.md, MEMORY.md,
|
|
380
|
+
skills, custom commands) and the system-prompt size.
|
|
381
|
+
- /retry — resend the last task into the same chat (handy after a truncated
|
|
382
|
+
or empty answer).
|
|
383
|
+
- /rename <title> — set the current session title (shown in /sessions).
|
|
384
|
+
- /copy — copy the last assistant answer to the OS clipboard.
|
|
385
|
+
- /cost (alias /usage) — session stats: tasks, tool calls, duration, and the
|
|
386
|
+
context size in tokens (DeepSeek's `accumulated_token_usage`, Qwen's
|
|
387
|
+
`input_tokens`, GLM's `prompt_tokens`).
|
|
388
|
+
- /export [file] — write the session transcript to a Markdown file
|
|
389
|
+
(zames-export-<stamp>.md by default).
|
|
390
|
+
- /doctor — diagnose node, git, config, browser, clipboard, MCP and the
|
|
391
|
+
active chat provider (it also reports that provider's UI health).
|
|
392
|
+
- /provider <deepseek|qwen|glm> — switch the chat backend (applied live, no
|
|
393
|
+
restart); /provider status shows the active provider/model/login; /provider
|
|
394
|
+
login re-runs the sign-in check. /model [id] lists or picks a Qwen/GLM model at
|
|
395
|
+
runtime.
|
|
396
|
+
- /add-dir <path> — validate an extra directory (the sandbox is fixed at
|
|
397
|
+
startup; relaunch with --dir to write there).
|
|
398
|
+
- /resume-id <id> (or picking a chat in the /chats list) — open a chat and
|
|
399
|
+
PRINT its dialogue into the terminal, so the restored context is visible. Only the
|
|
400
|
+
last 20 messages are shown (`RESTORED_HISTORY_LIMIT`). /last reopens the last
|
|
401
|
+
chat of the current directory with no lookup step; /sessions shows the saved
|
|
402
|
+
sessions with their relative age.
|
|
403
|
+
- /help <command> — the full description of a single command (e.g. `/help diff`)
|
|
404
|
+
instead of the whole list.
|
|
405
|
+
- /review [focus] [--staged] — ask the agent to review uncommitted changes
|
|
406
|
+
and report findings (no code changes).
|
|
407
|
+
- /plan [on|off] — plan (read-only) mode. While it is on, the mutating tools
|
|
408
|
+
(Write/Edit/MultiEdit/ApplyPatch/Bash, GitAdd/GitCommit/GitPush) are removed
|
|
409
|
+
from the tool set, so the agent can investigate without touching the tree.
|
|
410
|
+
Start in it with `--plan`.
|
|
411
|
+
- /compact — ask the active backend to compress the current chat into a handover
|
|
412
|
+
summary, then open a NEW chat, resend the system prompt and post the summary
|
|
413
|
+
as the carried-over context. Use it when the context gets long.
|
|
414
|
+
- /goal <condition> — set a **completion condition** (Claude Code parity). The
|
|
415
|
+
agent starts working toward it at once and keeps starting new turns until a
|
|
416
|
+
separate evaluator model judges the condition met. The goal clears itself
|
|
417
|
+
automatically when it is met (or judged impossible), or with `/goal clear`.
|
|
418
|
+
The condition is stored in `<project>/.zames-goal` (git-ignored) and restored
|
|
419
|
+
on the next launch. `/goal` with no argument shows the current state.
|
|
420
|
+
- /loop <interval> <task> — repeat a task periodically (e.g. `/loop 10m run the
|
|
421
|
+
tests`). /cron "<min> <hour> <dom> <month> <dow>" <task> — run on a schedule.
|
|
422
|
+
/jobs [rm <id>|clear] lists and stops them. A fired job is put into the same
|
|
423
|
+
message queue you type into, so it runs when the agent is free (never mid-
|
|
424
|
+
generation) and still respects the send throttle. The FIRST run of a `/loop`
|
|
425
|
+
is due at once (and runs as soon as the agent is idle); a `/cron` job waits
|
|
426
|
+
for its schedule.
|
|
427
|
+
- /thinking [on|off] and /web [on|off] — toggle the reasoning / web-search
|
|
428
|
+
behaviour. On **DeepSeek** these are the "Deep thinking" / "Smart search"
|
|
429
|
+
toggles; on **Qwen** they drive its thinking MODE (Thinking / Fast) and the
|
|
430
|
+
"Web search" item in the "+" menu.
|
|
431
|
+
These (and /queue, /jobs, /goal, `/config <sub>`) can be used WHILE the agent
|
|
432
|
+
is working — they do not touch the in-flight generation.
|
|
433
|
+
- /queue [clear] — list or clear the messages waiting to be sent after the
|
|
434
|
+
current task.
|
|
435
|
+
|
|
436
|
+
The token context is also shown live: the status line above the input has the
|
|
437
|
+
spinner/text on the left and the context on the right (e.g. `125k · 13%`,
|
|
438
|
+
percent of a 1M context). It is COLORED by fill level: green below 50%,
|
|
439
|
+
yellow 50-80%, red above 80%. It comes from the provider's own token
|
|
440
|
+
counter (DeepSeek's `accumulated_token_usage`, Qwen's `input_tokens`, GLM's
|
|
441
|
+
`prompt_tokens`) and is
|
|
442
|
+
hidden until the first answer delivers it.
|
|
443
|
+
|
|
444
|
+
## Project context, skills and memory
|
|
445
|
+
|
|
446
|
+
Like Codex / Claude Code, zames reads project instructions and reusable
|
|
447
|
+
workflows from your repository and from `~/.zames`.
|
|
448
|
+
|
|
449
|
+
- **AGENTS.md** — project instructions. Put one in the repo root (or in any
|
|
450
|
+
parent folder of the working directory). Global instructions live in
|
|
451
|
+
`~/.zames/AGENTS.md` (and `~/.claude/CLAUDE.md`). Run `/init` and the agent
|
|
452
|
+
will explore the project and write an AGENTS.md based on the real build/test
|
|
453
|
+
commands and conventions (use `/init --force` to overwrite an existing file).
|
|
454
|
+
- **MEMORY.md** — durable notes that persist between sessions. The agent
|
|
455
|
+
appends useful facts here; you can edit it by hand, or add one from the
|
|
456
|
+
prompt with `/remember <text>`.
|
|
457
|
+
- **Skills** — a folder with a `SKILL.md` file (YAML frontmatter: `name`,
|
|
458
|
+
`description`, optional `allowed-tools`, `user-invokable`) plus any helper
|
|
459
|
+
files. Discovered under `.zames/skills/`, `.claude/skills/`,
|
|
460
|
+
`.agents/skills/`, `skills/`, and `~/.zames/skills/`. The agent reads the
|
|
461
|
+
body only when a task matches the description. List them with `/skills`;
|
|
462
|
+
invoke one with `/<skill-name>`.
|
|
463
|
+
- **Custom commands** — `.md` files under `.zames/commands/` (or
|
|
464
|
+
`.claude/commands/`). They support `$ARGUMENTS` / `{{args}}` placeholders and
|
|
465
|
+
are invoked with `/<command-name>`.
|
|
466
|
+
|
|
467
|
+
Skills and custom commands show up in the «/» completion list and in `/help`.
|
|
468
|
+
|
|
469
|
+
```
|
|
470
|
+
/skills list discovered skills
|
|
471
|
+
/memory show AGENTS.md / MEMORY.md in effect
|
|
472
|
+
/remember <text> append a durable note to MEMORY.md
|
|
473
|
+
/init [--force] analyze the project and create AGENTS.md
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
## MCP (external tools)
|
|
477
|
+
|
|
478
|
+
zames can use tools from [MCP](https://modelcontextprotocol.io) servers.
|
|
479
|
+
The flagship example is @playwright/mcp: it gives the agent a real browser
|
|
480
|
+
(navigate, click, snapshot, type, ...) on top of the one zames already uses
|
|
481
|
+
for the DeepSeek, Qwen or GLM chat.
|
|
482
|
+
|
|
483
|
+
Drop a config file (same shape as Claude Code / Cursor):
|
|
484
|
+
|
|
485
|
+
- `~/.zames/mcp.json` - global
|
|
486
|
+
- `<project>/.zames/mcp.json` - project-scoped (later files win)
|
|
487
|
+
- `<project>/.mcp.json` - the common MCP name
|
|
488
|
+
|
|
489
|
+
```json
|
|
490
|
+
{
|
|
491
|
+
"mcpServers": {
|
|
492
|
+
"playwright": {
|
|
493
|
+
"command": "npx",
|
|
494
|
+
"args": ["-y", "@playwright/mcp@latest", "--headless", "--isolated"]
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
IMPORTANT: keep the MCP browser isolated. @playwright/mcp defaults to the
|
|
501
|
+
SAME profile directory as zames (~/.zames/profile). If it is launched
|
|
502
|
+
without --isolated (or without its own --user-data-dir), the MCP browser
|
|
503
|
+
and the agent browser fight over one profile and the DeepSeek chat shows
|
|
504
|
+
"Something went wrong when opening your profile". Always pass --isolated
|
|
505
|
+
as in the example above.
|
|
506
|
+
Servers can also be remote ("url": "https://...", "transport": "sse").
|
|
507
|
+
Their tools show up in the agent as `server__tool` (e.g.
|
|
508
|
+
`playwright__browser_navigate`) and are listed with `/mcp` and in `/status`.
|
|
509
|
+
A server that fails to connect is skipped with a warning and never breaks the
|
|
510
|
+
agent.
|
|
511
|
+
|
|
512
|
+
### Recommended servers (verified)
|
|
513
|
+
|
|
514
|
+
A few small, high-value servers tested end to end with zames (on the DeepSeek
|
|
515
|
+
and Qwen backends; the MCP layer is provider-agnostic, so they work with GLM
|
|
516
|
+
too):
|
|
517
|
+
|
|
518
|
+
- **Context7** (`@upstash/context7-mcp`) — fetches CURRENT, version-specific
|
|
519
|
+
documentation for a library before the agent writes code, instead of relying
|
|
520
|
+
on a stale training snapshot. Tools: `resolve_library_id` then `query_docs`.
|
|
521
|
+
Verified live on DeepSeek AND Qwen: the agent called both tools and got the
|
|
522
|
+
current Zod API. This is the one to add first.
|
|
523
|
+
|
|
524
|
+
```json
|
|
525
|
+
{
|
|
526
|
+
"context7": {
|
|
527
|
+
"command": "npx",
|
|
528
|
+
"args": ["-y", "@upstash/context7-mcp@latest"]
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
- **Sequential Thinking** (`@modelcontextprotocol/server-sequential-thinking`)
|
|
534
|
+
— one `sequentialthinking` tool that gives the model an explicit, revisable
|
|
535
|
+
plan before it acts; useful for long multi-step tasks.
|
|
536
|
+
|
|
537
|
+
- **Memory** (`@modelcontextprotocol/server-memory`) — a local knowledge graph
|
|
538
|
+
(9 tools) for durable facts across chats. NOTE: zames already has `MEMORY.md`
|
|
539
|
+
|
|
540
|
+
* `AGENTS.md`; add this only if you want a queryable graph.
|
|
541
|
+
|
|
542
|
+
Keep the stack SMALL: every server loads its tool definitions into the model's
|
|
543
|
+
context. Add one when you feel its absence, not before.
|
|
544
|
+
|
|
545
|
+
## Configuration
|
|
546
|
+
|
|
547
|
+
Global config: `~/.zames/config.json`
|
|
548
|
+
Local (per project): `.zamesrc.json`
|
|
549
|
+
|
|
550
|
+
You can view and change settings without leaving the agent — use the
|
|
551
|
+
`/config` command. Run it without arguments to open an interactive menu
|
|
552
|
+
(↑/↓ to move, Enter to change, `d` to reset, `q` to quit). Booleans and enums
|
|
553
|
+
toggle in place; numbers and strings open an input prompt.
|
|
554
|
+
|
|
555
|
+
```
|
|
556
|
+
/config interactive settings menu
|
|
557
|
+
/config list print all editable settings
|
|
558
|
+
/config get <path> show a setting
|
|
559
|
+
/config set <path> <value> change a setting
|
|
560
|
+
/config reset <path> reset a setting to its default
|
|
561
|
+
/config path show config file paths
|
|
562
|
+
/config lang <ru|en> switch interface and agent language
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
Examples:
|
|
566
|
+
|
|
567
|
+
```
|
|
568
|
+
/config set maxIterations 20
|
|
569
|
+
/config set browser.deepThinking true # DeepSeek Deep thinking (slow; reasoning is hidden)
|
|
570
|
+
/config set browser.webSearch false # DeepSeek Smart web search
|
|
571
|
+
/config lang en
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
Changes are written to the project `.zamesrc.json` and applied right away
|
|
575
|
+
(where possible without a restart).
|
|
576
|
+
|
|
577
|
+
### Language
|
|
578
|
+
|
|
579
|
+
`/config lang ru` or `/config lang en` switches both the interface language
|
|
580
|
+
(help, messages, spinner) and the language the agent answers you in. The
|
|
581
|
+
locale lives in `ui.locale` in the config file.
|
|
582
|
+
|
|
583
|
+
Agent data is stored in `~/.zames`: browser profile, logs, undo history, sessions.
|
|
584
|
+
|
|
585
|
+
## FAQ
|
|
586
|
+
|
|
587
|
+
**Is this an official DeepSeek, Qwen or GLM product?**
|
|
588
|
+
No. zames drives the public `chat.deepseek.com` / `chat.qwen.ai` / `chat.z.ai`
|
|
589
|
+
web UIs through a real browser, like a regular user. It is not affiliated with
|
|
590
|
+
DeepSeek, Alibaba or Zhipu AI.
|
|
591
|
+
|
|
592
|
+
**Do I need an API key?**
|
|
593
|
+
No. You sign in with your own account on the chat you use — DeepSeek (stored in
|
|
594
|
+
`~/.zames/profile`), Qwen (stored in `~/.zames/qwen-profile`) or GLM (stored in
|
|
595
|
+
`~/.zames/glm-profile`) — and the session is reused. Qwen also works in guest
|
|
596
|
+
mode for a few messages a day.
|
|
597
|
+
|
|
598
|
+
**Which model does it use?**
|
|
599
|
+
Whichever the active web chat uses. On DeepSeek that is DeepSeek-V3 (or the
|
|
600
|
+
reasoning model with "Deep thinking" on). On Qwen you can pick a model with
|
|
601
|
+
`/model` (e.g. `qwen3.7-plus`). zames never calls the API directly.
|
|
602
|
+
|
|
603
|
+
**Does it work headless / on a server?**
|
|
604
|
+
Yes — headless is the default, and `--output-format jsonl` makes it scriptable.
|
|
605
|
+
`--headed` is only needed for a manual sign-in or selector debugging.
|
|
606
|
+
|
|
607
|
+
**Is automating the web UI allowed?**
|
|
608
|
+
That depends on the site's terms; automating a website may violate them. Use at
|
|
609
|
+
your own risk and keep the send throttle (15 s on DeepSeek by default) so you do
|
|
610
|
+
not hammer the rate limit.
|
|
611
|
+
|
|
612
|
+
**How is it different from Claude Code / Codex?**
|
|
613
|
+
Same shape (tools, `AGENTS.md`, skills, MCP, slash commands) but it runs on your
|
|
614
|
+
DeepSeek, Qwen or GLM account instead of an API, as a browser automation rather
|
|
615
|
+
than a first-party API client.
|
|
616
|
+
|
|
617
|
+
**Is zames free? Is there a free AI coding agent without an API key?**
|
|
618
|
+
Yes. zames is MIT-licensed and free to install (`npm install -g zames_pro`).
|
|
619
|
+
It sends no API requests of its own and bills nothing per token: it drives the
|
|
620
|
+
web chat you are already signed in to. Your only cost is whatever your DeepSeek,
|
|
621
|
+
Qwen or GLM account already costs — and Qwen even works in guest mode for a few
|
|
622
|
+
messages a day.
|
|
623
|
+
|
|
624
|
+
**Can I use it with DeepSeek? With Qwen? With GLM?**
|
|
625
|
+
Yes, all three, and you can switch at runtime with `/provider deepseek`,
|
|
626
|
+
`/provider qwen` or `/provider glm` — no restart, each backend keeps its own
|
|
627
|
+
signed-in browser profile.
|
|
628
|
+
|
|
629
|
+
**How do I install a terminal AI coding agent?**
|
|
630
|
+
|
|
631
|
+
```bash
|
|
632
|
+
npm install -g zames_pro # Node.js >= 20; Chromium is fetched automatically
|
|
633
|
+
cd your-project
|
|
634
|
+
zames
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
The first launch signs you in once; after that just describe the task.
|
|
638
|
+
|
|
639
|
+
**Does it work offline / with a local LLM?**
|
|
640
|
+
Not out of the box: zames talks to a hosted chat web app (DeepSeek, Qwen or
|
|
641
|
+
GLM) through a browser, so it needs a network connection and a signed-in
|
|
642
|
+
account. The agent itself, its tools, sessions and profiles are local.
|
|
643
|
+
|
|
644
|
+
**Can it read my repository, edit files and commit?**
|
|
645
|
+
Yes. It ships the usual agent tools (`Read`, `Write`, `Edit`, `Bash`,
|
|
646
|
+
`Grep`, `Glob`, `ApplyPatch`) plus git tools (`GitStatus`,`GitDiff`,
|
|
647
|
+
`GitAdd`, `GitCommit`, `GitPush`), and every edit is backed by `/undo`.
|
|
648
|
+
The agent is sandboxed to the directory it was started in.
|
|
649
|
+
|
|
650
|
+
**What are the alternatives?**
|
|
651
|
+
Other terminal coding agents are Claude Code, OpenAI Codex CLI, Cursor,
|
|
652
|
+
Cline and Aider. zames follows the same workflow (tools, `AGENTS.md`, skills,
|
|
653
|
+
MCP, slash commands) but is the one that runs on a web chat account instead of
|
|
654
|
+
an API key.
|
|
655
|
+
|
|
656
|
+
**Which keywords describe zames?**
|
|
657
|
+
terminal coding agent, AI coding agent, AI code assistant, CLI coding
|
|
658
|
+
assistant, autonomous coding agent, DeepSeek coding agent, Qwen coding agent,
|
|
659
|
+
GLM coding agent, no API key, free AI coding assistant, Playwright browser
|
|
660
|
+
automation, MCP client, Claude Code alternative, Codex CLI alternative.
|
|
661
|
+
|
|
662
|
+
## Keywords and alternatives
|
|
663
|
+
|
|
664
|
+
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.
|
|
665
|
+
|
|
666
|
+
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.
|
|
667
|
+
|
|
668
|
+
## Links
|
|
669
|
+
|
|
670
|
+
- **npm:** <https://www.npmjs.com/package/zames_pro>
|
|
671
|
+
- **GitHub:** <https://github.com/Viqto0r/zames_pro>
|
|
672
|
+
- **Changelog:** [`CHANGELOG.md`](CHANGELOG.md)
|
|
673
|
+
- **Contributing:** [`CONTRIBUTING.md`](CONTRIBUTING.md)
|
|
674
|
+
- **Security policy:** [`SECURITY.md`](SECURITY.md)
|
|
675
|
+
- **Code of conduct:** [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
|
|
676
|
+
|
|
677
|
+
## License
|
|
678
|
+
|
|
679
|
+
MIT
|