Minimal coding agent CLI and web UI built on mycode-sdk.
Project description
mycode
There are many coding agents, but this one is mine.
A minimal coding agent. Inspired by pi.
- Minimal agent core (< 5k lines) with multiple provider support and robust message replay.
- 4 built-in tools only (
read,write,edit,bash), expanded via skills. - Mobile-friendly web UI.
- Native image and pdf input support.
Quick Start
Requires Python 3.12+. Install via uv:
uv tool install mycode-cli
Interactive terminal UI:
mycode
Web UI (default at http://localhost:8000):
mycode web [--port <port>] [--hostname <hostname>]
Single message, non-interactive:
mycode run "explain how the session store works"
API keys are discovered automatically from environment variables (see Providers).
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 |
| OpenAI-compatible | openai_chat |
— |
Run /model in tui to see the available models.
Configuration
A config file is optional — API keys from the environment are usually sufficient.
Create ~/.mycode/config.json (global) or <workspace>/.mycode/config.json (project, takes precedence) to:
- set a default provider, model, and reasoning effort
- expose additional models on an existing provider (e.g. OpenRouter's catalog)
- register a custom endpoint, such as a private or regional deployment
{
"default": {
"provider": "anthropic",
"model": "claude-sonnet-4-6",
"reasoning_effort": "medium"
},
"providers": {
"openrouter": {
"models": {
"deepseek/deepseek-v3.2": {},
"xiaomi/mimo-v2-pro": {}
}
},
"zhipu-coding-plan": {
"type": "zai",
"base_url": "https://open.bigmodel.cn/api/coding/paas/v4",
"api_key": "${ZHIPU_API_KEY}"
},
"custom-provider": {
"type": "openai_chat",
"base_url": "https://custom-endpoint.com/v1",
"api_key": "${CUSTOM_API_KEY}",
"models": {
"custom-model": {
"context_window": 128000,
"max_output_tokens": 16384,
"supports_reasoning": true,
"supports_image_input": false
}
}
}
}
}
- To override a built-in provider, reuse its id as the key — no
typeneeded. Custom providers must declare atype— one of the built-in protocols. reasoning_effortcontrols extended thinking for supported models:auto(default) ·none·low·medium·high·xhigh.- API keys in config accept
${ENV_VAR}references. - Model metadata is bundled from models.dev —
{}is enough for most models. Provide explicit fields only for models not listed there.
Built-in Moonshot, MiniMax, and Z.AI providers default to international endpoints. Override
base_urlfor China endpoints.
CLI Reference
mycode start interactive session (new)
mycode --continue resume the most recent session
mycode --session <id> resume a specific session
mycode run "..." send one message, non-interactive
mycode web start web server (default port 8000)
mycode web --dev API only, no static files
mycode session list list saved sessions
Interactive slash commands: /new /resume /rewind /provider /model /effort /clear /q
Development
git clone https://github.com/legibet/mycode.git && cd mycode
uv sync --dev
uv run mycode
Web development (backend + Vite dev server):
uv run mycode web --dev
pnpm --dir web install && pnpm --dir web dev
Or start both together:
just dev
Other useful shortcuts: just check · just test · just fmt
Build distributable artifacts:
uv build --package mycode-sdk
uv build --package mycode-cli
mycode-sdk
Agent core of mycode as a lightweight Python SDK for building custom agents. Install via: uv add mycode-sdk
from mycode import Agent, read_tool
agent = Agent(
model="claude-sonnet-4-6",
api_key="...",
tools=[read_tool],
)
result = agent.run("Read pyproject.toml and tell me the project name.")
print(result.text)
See mycode/README.md for details.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mycode_cli-0.6.0.tar.gz.
File metadata
- Download URL: mycode_cli-0.6.0.tar.gz
- Upload date:
- Size: 2.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b145cb8b245e30f5cfc584419767d32f625f590c6ab1f4a83fe585850bdc43bf
|
|
| MD5 |
795e9776d15b6c77fc0471c1966b121c
|
|
| BLAKE2b-256 |
d638a594e12eaf01511501fb60c21e154b4b8cba53b160fb8f6d0028fce6080b
|
File details
Details for the file mycode_cli-0.6.0-py3-none-any.whl.
File metadata
- Download URL: mycode_cli-0.6.0-py3-none-any.whl
- Upload date:
- Size: 3.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b149f4c88cf64e1675daa68d7dddf12f341ba9fc0996eb281255f4ab28b05e82
|
|
| MD5 |
e45c0d1ca94dfe1250ea0ed3eb4cfbf8
|
|
| BLAKE2b-256 |
7779dde15ec0d921644082fbc679652cbec8275e2fdc0954588fadadf0f29c89
|