ZettCode
Your terminal. Your coding partner.
A focused coding agent that reads your project, shows its work, and keeps you in control.
English · 简体中文
Get started ·
Documentation ·
Commands
Illustrative conversation, rendered with ZettCode’s actual terminal widgets.
Get running
You need Python 3.10+, a UTF-8 terminal, and an OpenAI-compatible API (or Anthropic's Messages API). Works on macOS, Linux, and Windows (use Windows Terminal).
1. Install
uv tool install zettcode
# or: pip install zettcode
2. Connect a model
Create ~/.zettcode/config.toml (and its parent directory) with one model:
[[models]]
model = "deepseek-v4-pro" # the model id sent to DeepSeek
display_model = "DeepSeek Pro" # the name shown in ZettCode
token = "sk-..." # replace with your DeepSeek API key
base_url = "https://api.deepseek.com" # DeepSeek's OpenAI-compatible API root
context_window = 1000000 # verify against the endpoint's current limits
multimodal = false # this model accepts text, not images
Get a key from the DeepSeek platform, not from
the chat website. Alternatively, omit token and set OPENAI_API_KEY to that
key. Add more [[models]] entries to switch with /model; the first is selected
at startup. See the
configuration reference
for complete examples, defaults, and troubleshooting.
3. Start a task
cd /path/to/project
zettcode
# or: zettcode --workspace /path/to/project
Describe a change and press Enter. Type / for commands, @ to reference a
skill, and Ctrl-C to stop a request. Ctrl-D with an empty composer exits
and prints the command to resume your session.
Built for the way you work
| See every step | Reasoning, answers, and tool calls stream as readable rows — not raw JSON. |
| Keep the decision | Review shell commands before they run. When the agent needs your input, choose an option or type an answer. |
| Keep moving | Type during a reply and choose: steer it now, or queue a follow-up you can edit, delete and reorder with Option+↑/↓. Use /btw for a side question that stays out of later context. |
| Come back later | /resume restores a conversation; /export saves a readable HTML record. |
| Understand the context | Monitor token usage and caching, inspect /context, and compact when needed. |
| Bring your tools | Use project AGENTS.md instructions, skills, MCP servers, and Python plugins. |
The palette follows your terminal’s background, or your own theme.toml.
Select and copy text, scroll through answers, and paste images when your model
supports them.
Find your next step
The user guide is available in English and 简体中文.
| First time | Everyday use | Configuration & extensions |
|---|---|---|
| Getting started | Keys & mouse | Configuration |
| The interface | Commands | Models & context |
| Problems & questions | Sessions | Project instructions |
| Skills & MCP · Plugins |
Development
uv sync # install dependencies
make check # Ruff, mypy, and tests
make hooks # enforce mypy before commits
make demo # browse terminal widgets
make docs # preview the user guide locally
uv run zettcode --workspace . # run from the checkout
ZettCode provides the terminal application; the agent runtime is
zett-agent. Contributor notes and
invariants live in AGENTS.md and
docs/internal/, separately from the user guide. See
docs/internal/site-design.md for preview and
asset-generation instructions.
License
MIT. See LICENSE.
Metadata
Release files for zettcode 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| zettcode-0.1.8.tar.gz | 616.8 kB | Without provenance | Details for zettcode-0.1.8.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| zettcode-0.1.8-py3-none-any.whl | Python 3 | none | any | Details for zettcode-0.1.8-py3-none-any.whl |
Total release size: 1.4 MB
Release files / zettcode-0.1.8.tar.gz
| Download URL | zettcode-0.1.8.tar.gz |
|---|---|
| Size | 616.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8deaa184daa76a22abaf67fa162edc2594bdd47f91837a7c1b59baa29098244d
|
|
BLAKE2b-256 checksum How to use checksums |
7e1e31691983970d72cf0dd125e6591d09ace585bfb871a48141cc9ec679d5c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / zettcode-0.1.8-py3-none-any.whl
| Download URL | zettcode-0.1.8-py3-none-any.whl |
|---|---|
| Size | 766.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a086d413ecfa8a12766d24ea4cae76b19ead9fb1465e07e028f8e208cac34562
|
|
BLAKE2b-256 checksum How to use checksums |
e37e093f3d1c94e7d4154bfbdaf95488ea0f0be7f3c0b3bb62d734daf0bdb83d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for zettcode 0.1.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.