内容摘录
tunacode-cli
<img src="assets/home.png" alt="tunacode" width="600"/>
PyPI version
Downloads
Python 3.11+
License: MIT
Discord Shield
A terminal-based AI coding agent with a NeXTSTEP-inspired interface.
**Early stage software — not production ready.** Under active development, expect bugs and breaking changes.
Features
**Any model** - Works with any OpenAI-compatible API (Anthropic, OpenAI, Google, Ollama, vLLM, etc.)
**File operations** - Read, write, update files with fuzzy matching for edits
**Shell access** - Run bash commands with output capture
**Code search** - Glob patterns and grep with ripgrep integration
**Session persistence** - Resume previous conversations with /resume
**LSP diagnostics** - Real-time code errors after file writes (Python, TypeScript, Go, Rust)
**Themeable UI** - CSS-based theming with NeXTSTEP-inspired design
**Copy-on-select** - Automatically copies highlighted text to clipboard
**Agent loop** - Powered by tinyAgent
Built With
**tinyAgent** - Core agent loop handling LLM interaction and tool execution
**alchemy-rs** - Rust-powered tokenizer and utilities via PyO3 bindings
**Textual** - Terminal UI framework with CSS-based styling
**Rich** - Terminal rendering with syntax highlighting
**Typer** - CLI framework
Installation
End Users
Or with pip:
Developers (Fresh Clone)
Or without make:
Development
Common development tasks:
View technical debt:
Quick Start
Configuration
Set your API key as an environment variable:
Config file: ~/.config/tunacode.json
For local models and advanced settings, see the Configuration Guide.
Commands
Slash commands are command objects in tunacode.ui.commands; each one is a Command subclass and is registered in COMMANDS. handle_command() also routes shell commands (!<cmd>), legacy exit, and slash /exit.
| Command | Description |
|---------|-------------|
| /help | Show available commands |
| /clear | Clear transient agent state while preserving message history. |
| /compact | Force context compaction |
| /debug | Toggle debug logging to screen (includes parallel tool-call lifecycle lines) |
| /model | Open model picker or switch model |
| /theme | Open theme picker or switch theme |
| /resume | List, load, or delete persisted sessions. |
| /update | Check for or install updates. |
| !<cmd> | Run shell command |
| /exit | Exit TunaCode |
| exit | Legacy alias for exit |
Confirm Parallel Tool Calls
Run /debug to enable lifecycle logs. During agent execution, parallel batches are reported with lines prefixed by:
[LIFECYCLE] Parallel tool calls active: ...
[LIFECYCLE] Parallel tool calls update: ...
[LIFECYCLE] Parallel tool calls complete
If no Parallel tool calls lifecycle lines appear, that request did not execute a parallel tool batch.
Tools
The agent has access to:
| Tool | Description |
|------|-------------|
| read_file | Read file contents with line ranges |
| write_file | Create new files |
| update_file | Edit existing files with fuzzy matching |
| bash | Execute shell commands |
| glob | Find files by pattern |
| grep | Search file contents |
| list_dir | List directory tree |
| web_fetch | Fetch web page content |
<img src="assets/hashline-edit.png" alt="hashline-edit tool in tunacode" width="600"/>
LSP Integration
Automatic code diagnostics when LSP servers are in PATH:
| Language | Server |
|----------|--------|
| Python | ruff server |
| TypeScript/JS | typescript-language-server |
| Go | gopls |
| Rust | rust-analyzer |
Security
TunaCode has **full shell access** with no permission prompts. If you're concerned:
Use git so you can revert changes
Run in a container/sandbox
Discord
<img src="https://discord.com/api/guilds/1447688577126367346/widget.png?style=banner3" alt="Discord"/>
License
MIT