Experimental Python-runner coding agent with a Textual TUI
Project description
uv-agent
uv-agent is a portable coding agent with a Textual TUI. Its only external
action surface is run_python: the model submits Python scripts to a managed
uv run runner, and those scripts do the actual work. This single-tool design
keeps agent behavior consistent across platforms—any OS with Python and uv
behaves the same way.
Public APIs, config fields, and runtime behavior may still change as the project evolves.
Prerequisites
Install the following tools:
- uv — https://docs.astral.sh/uv/getting-started/installation/ Python package and project manager used to run the agent.
- ripgrep — https://github.com/BurntSushi/ripgrep#installation Used for fast file-content searches inside the workspace.
Install And Run
Run the latest published package:
uvx uv-agent@latest
Run from a local checkout:
uv run uv-agent
Ask a single prompt without opening the TUI:
uvx uv-agent@latest ask "Reply with exactly: ok"
Resume an existing thread:
uvx uv-agent@latest ask --thread thr_xxx "Continue from here"
Configuration
User config lives at ~/.uv-agent/config.json. A project can override it with
.uv-agent/config.json; that project-local directory is ignored by git. Keep
API keys in environment variables or ignored local config.
API compatibility
This project supports three API formats — setapion your model config:
apivalueFormat Status "chat_completions"OpenAI Chat Completions API ✅ Supported "responses"OpenAI Responses API ✅ Supported "anthropic_messages"Anthropic Messages API ✅ Supported Issues and PRs are welcome for any format!Example configuration:
{
"providers": {
"deepseek": {
"base_url": "https://api.deepseek.com",
"api_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"chat_completions": {
"path": "/chat/completions"
},
"message_passthrough": {
"assistant": [
"reasoning_content"
]
},
"reasoning_display": {
"assistant_message_fields": [
"reasoning_content"
],
"stream_delta_fields": [
"reasoning_content"
]
}
}
},
"models": {
"deepseek-v4-flash": {
"provider": "deepseek",
"model": "deepseek-v4-flash",
"api": "chat_completions",
"supports_images": false,
"context_window_tokens": 1000000,
"params": {
"reasoning_effort": "high"
}
},
"deepseek-v4-pro": {
"provider": "deepseek",
"model": "deepseek-v4-pro",
"api": "chat_completions",
"supports_images": false,
"context_window_tokens": 1000000,
"params": {
"reasoning_effort": "max"
}
}
},
"levels": {
"deepseek-flash": {
"model": "deepseek-v4-flash"
},
"deepseek-pro": {
"model": "deepseek-v4-pro"
}
},
"runtime": {
"default_level": "deepseek-flash",
"store_provider_response": false,
"max_agent_rounds": 1000,
"compression": {
"enabled": true,
"model_level": "deepseek-flash",
"trigger_ratio": 0.9
},
"title_generation": {
"enabled": true,
"model_level": "deepseek-flash"
}
},
"runner": {
"default_timeout_s": 7200,
"max_output_bytes": 1000000
},
"pricing": {
"currency": "RMB",
"unit": "1M_tokens",
"models": {
"deepseek-v4-flash": {
"input": 1,
"output": 2,
"cached_input": 0.02
},
"deepseek-v4-pro": {
"input": 3,
"output": 6,
"cached_input": 0.025
}
}
},
"ui": {
"completion_notification": {
"enabled": true
}
}
}
Use /config in the TUI to switch the default level, language, and automatic
compression. Set ui.language to zh-CN for a Chinese UI. Completion
notifications can be configured under ui.completion_notification. Non-Windows
platforms use the terminal bell for completion sound.
See configuration for all supported options and config.example.json for a detailed example.
Documentation
Core Ideas
- The agent has exactly one external action surface:
run_python. - Managed scripts run in a project-shared uv environment; scripts add
third-party dependencies to that environment with
add_dependency. - The distributed package includes both
uv_agentanduv_agent_runtime; managed scripts import helpers fromuv_agent_runtime. - Workspace rules, skills, and MCP declarations are progressively disclosed as context. MCP calls happen from Python runtime helpers, not direct model tools.
- Thread state, run logs, the shared script environment, and attachments live under
~/.uv-agent/projects/<project-id>/.
Development
uv run pytest
Local debug state, screenshots, config, scripts, runs, and thread data belong in
.uv-agent/ and should stay out of git.
License
MIT. See LICENSE.
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 uv_agent-0.7.3.tar.gz.
File metadata
- Download URL: uv_agent-0.7.3.tar.gz
- Upload date:
- Size: 490.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a397e4655e0fb5ae010d62823d9483bd614fa4f22619fb32adbec6a73c09e6a2
|
|
| MD5 |
4e6a967fcc371e038cb6fefcf1601207
|
|
| BLAKE2b-256 |
fb061e0c380dd8674be1391b331b10f9ca9b152533e1bcefaebaace912473046
|
File details
Details for the file uv_agent-0.7.3-py3-none-any.whl.
File metadata
- Download URL: uv_agent-0.7.3-py3-none-any.whl
- Upload date:
- Size: 180.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df02f521c76ff1892ce13dea5262771f0aaf051b34641a607f679171176a4552
|
|
| MD5 |
42a4273cd574a899f299853e5932a95d
|
|
| BLAKE2b-256 |
fef0fb8349753133ee199df5b7a8c4bc8acf4297c31dbc301dce861638c18523
|