mycode-cli
Interactive coding agent CLI and web server, built on mycode-sdk.
Quick Start
Requires Python 3.12+. Install via uv:
uv tool install mycode-cli
Set a provider API key, then start:
export ANTHROPIC_API_KEY=...
mycode
Web UI (default at http://localhost:8000):
mycode web [--port <port>] [--host <host>]
Single message, non-interactive:
mycode run "explain how the session store works"
Providers
| Provider | id | Env var |
|---|---|---|
| Anthropic | anthropic |
ANTHROPIC_API_KEY |
| OpenAI | openai |
OPENAI_API_KEY |
| Google Gemini | google |
GEMINI_API_KEY |
| Moonshot | moonshotai |
MOONSHOT_API_KEY |
| MiniMax | minimax |
MINIMAX_API_KEY |
| DeepSeek | deepseek |
DEEPSEEK_API_KEY |
| Z.AI | zai |
ZAI_API_KEY |
| OpenRouter | openrouter |
OPENROUTER_API_KEY |
| Alibaba Cloud | alibaba |
DASHSCOPE_API_KEY |
| xAI | xai |
XAI_API_KEY |
| OpenAI-compatible | openai_chat |
- |
Run /model in the TUI to see available models. --model takes a listed model id or provider/model (for example --model deepseek/deepseek-v4-pro); see docs/cli.md.
Configuration
A config file is optional — API keys from the environment are usually enough. Create ~/.mycode/config.json (global) or .mycode/config.json in a project to customize further.
Expose additional models on an existing provider, or register a custom endpoint such as a private or regional deployment:
{
"providers": {
"openrouter": {
"models": {"deepseek/deepseek-v4-pro": {}}
},
"my-endpoint": {
"type": "openai_chat",
"base_url": "https://example.com/v1",
"api_key": "${MY_API_KEY}",
"models": {"my-model": {}}
}
}
}
A providers key matching a built-in provider id overrides it; other names are custom providers and must declare a type (one of the ids in the table above). api_key accepts a literal value or a ${ENV_VAR} reference. {} is enough for models covered by the bundled models.dev metadata; add fields only for models it doesn't list.
Built-in Moonshot, MiniMax, and Z.AI providers default to international endpoints. Override
base_urlfor China endpoints.
See docs/config.md for the full schema — permission levels, web providers, and resolution rules.
Skills and instructions
The CLI assembles the system prompt from instructions files and discovered skills.
AGENTS.mdfiles are injected as project instructions:~/.mycode/AGENTS.md(fallback~/.agents/AGENTS.md), then everyAGENTS.mdfrom the project root down to the current directory. Later files take precedence.- A skill is a directory containing a
SKILL.md, up to three levels below a scan root, or a.mdfile directly in a scan root. Scan roots, lowest to highest priority:~/.agents/skills/,~/.mycode/skills/, then.agents/skills/and.mycode/skills/from the project root down to the current directory. Later roots override earlier ones by skill name. The file needs YAML frontmatter with adescription;namedefaults to the directory or file name and may contain only letters, digits,-, and_(at most 64 characters). - A standalone
/<skill-name>token in a message loads the matching skill, e.g.Use /fastapi to review this route. Names matching built-in slash commands are reserved.
Terminal UI
| Key | Action |
|---|---|
| Enter | Send the message (steer while a reply runs); with a completion menu open, accept it |
| Ctrl+Q | Queue the message for after the reply; otherwise send it |
| Alt+Up | Take back pending steers and queued messages into the input |
| Shift+Enter or Alt+Enter | Insert a newline (Esc then Enter also works) |
| Esc | Take back pending messages and interrupt the reply; close a selection list |
| Ctrl+C | Take back pending messages and interrupt the reply; otherwise clear the input |
| Ctrl+D | Exit (empty input only) |
| Ctrl+L | Clear the screen |
| Up / Down | Move between lines; on the first or last line, browse input history |
While a reply runs, Enter steers it: the model sees the message at its next step, after the running tools finish. Ctrl+Q queues the message instead; queued messages are sent together as the next turn when the reply finishes. Pending messages show above the input. Commands are unavailable until the reply ends.
A bash call with background=true keeps running after the reply ends (docs/tools.md). Its result is steered into the running reply, or wakes the idle session as a new turn, printed as a Background finished card with the command, its exit code, and the output tail. Esc, Ctrl+C, or denying a tool call holds wakes until the next message, which then carries the waiting results. /new, /rewind, a completed /resume, and exit stop the session's background commands.
@path attaches a file to the message: text files as snapshots, images and PDFs as image or document input. Pasted file paths become @path references.
Slash commands: /new (alias /clear) /resume /rewind /model /effort /compact /quit (alias /exit). exit and quit also exit.
CLI Reference
mycode start interactive session (new)
mycode --continue resume the most recent session
mycode --session <id> resume a specific session
mycode --effort high set effort for this session
mycode run "..." send one prompt, print the reply, exit
git diff | mycode run "review" piped stdin is appended to the prompt
mycode run --format json "..." machine-readable result (also: jsonl)
mycode web start web server (default port 8000, or $PORT)
mycode web --dev API only, with hot reload
mycode session list [--all] list saved sessions
mycode -h help; also works on every subcommand
Options before a subcommand configure the interactive session only; pass run options after run. Full reference, output formats, and exit codes: docs/cli.md.
License
MIT
Metadata
Release files for mycode-cli 0.21.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mycode_cli-0.21.0.tar.gz | 2.8 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mycode_cli-0.21.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 5.7 MB
Release files / mycode_cli-0.21.0.tar.gz
| Download URL | mycode_cli-0.21.0.tar.gz |
|---|---|
| Size | 2.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9aef7e8f0535c18c5f93b6c4ab0ed153d74746ea9530a38622b64970a697e887
|
|
BLAKE2b-256 checksum How to use checksums |
101da1fc635f8a54aff9fc3e5168119f70920e2445a2ac1b43dc9ad1ef5249ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / mycode_cli-0.21.0-py3-none-any.whl
| Download URL | mycode_cli-0.21.0-py3-none-any.whl |
|---|---|
| Size | 2.9 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b36fe9c5cd8c0ec8f15d84cb792dc1214d14f04b7c880fd213c6b98e31ab95f2
|
|
BLAKE2b-256 checksum How to use checksums |
852e4e0786acac406b72e4eec99528e303b898e8283851ccd7f6e93026a2de10
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|