Minimal AI coding agent with a simple tool loop and skill support.
Project description
KittyCode
KittyCode is a minimal terminal coding agent focused on a compact, readable implementation. It keeps the core runtime straightforward, with an agent loop, local tools, context compression, a small command-line interface, and support for both OpenAI-compatible and Anthropic APIs.
Background
KittyCode is inspired by NanoCoder and keeps the same general idea of a small terminal coding agent while simplifying the project around the core runtime.
KittyCode follows a simple terminal-agent runtime model:
- A user message is sent through the configured model interface.
- The model can either answer directly or call tools.
- Tool calls are executed locally and the results are fed back into the conversation.
- The loop continues until the model returns plain text.
The project is intentionally small. It includes the core agent runtime, a compact CLI, session persistence, context compression, and a default built-in tool set.
Features
- Minimal agent loop with optional parallel execution for multiple tool calls.
- LLM adapter that supports both OpenAI-compatible and Anthropic interfaces.
- Core built-in tools for shell execution, file operations, web search, web fetch/crawling, TODO tracking, and sub-agents.
- Interactive REPL and one-shot command mode, with
Escinterrupt support. - Context compression to keep long sessions manageable.
- Session save and resume support.
Requirements
- Python 3.10 or newer
- An API key for either an OpenAI-compatible endpoint or an Anthropic-compatible endpoint
Installation
Install from PyPI:
pip install kittycode
Configuration
KittyCode reads startup configuration from ~/.kittycode/config.json.
Supported fields:
interface:openaioranthropicapi_keymodelbase_urlmax_tokenstemperaturemax_context
OpenAI-compatible example:
{
"interface": "openai",
"api_key": "sk-...",
"model": "gpt-4o",
"base_url": "https://api.openai.com/v1",
"max_tokens": 4096,
"temperature": 0,
"max_context": 128000
}
Anthropic example:
{
"interface": "anthropic",
"api_key": "sk-ant-...",
"model": "claude-3-7-sonnet-latest",
"base_url": "https://api.anthropic.com",
"max_tokens": 4096,
"temperature": 0,
"max_context": 128000
}
The CLI still allows explicit overrides such as --model, --interface, --base-url, and --api-key.
Skills
At startup, KittyCode scans ~/.kittycode/skills for skill folders. Each skill should live in its own directory and include a SKILL.md file at the top level.
Expected layout:
~/.kittycode/skills/
example-skill/
SKILL.md
other-files...
KittyCode reads the leading name and description fields from each SKILL.md, keeps the resulting skill list in memory, and inserts the list into the system prompt at the start of every round. The prompt includes:
namedescriptionpath
This allows the model to see which local skills are available and decide when to read and use them.
Before each round, KittyCode checks whether the skill directory changed and reloads the cached skill metadata when needed, so adding or editing skills does not require restarting the process.
You can also invoke a loaded skill directly from the CLI with /<skill name>.
/<skill name>selects that skill for your next non-command message./<skill name> <task>runs the next request immediately with that skill.
Usage
Run the interactive terminal UI:
kittycode
When the CLI is busy, press Esc to interrupt the current run. The stop is cooperative: KittyCode cancels at the next safe checkpoint between LLM streaming, tool dispatch, and loop rounds. A blocking external call may still need to return before the run fully stops.
You can also use the module entry point:
python -m kittycode
Run a one-shot prompt and exit:
kittycode -p "Explain the project structure"
Resume a saved session:
kittycode -r session_1234567890
Override model, interface, or endpoint from the command line:
kittycode --interface anthropic --model claude-3-7-sonnet-latest
Interactive Commands
Inside the REPL, KittyCode supports:
/help/reset/skills/<skill name>/model <name>/tokens/compact/save/sessions/quit
The /skills command refreshes the local skill cache if the skill directory has changed and then prints the currently loaded skills.
Slash commands also support prefix matching while typing, so entering / shows matching commands and skills through completion suggestions.
Project Layout
kittycode/agent.py: core agent loopkittycode/llm.py: streaming LLM wrapperkittycode/context.py: context compressionkittycode/cli.py: interactive and one-shot CLIkittycode/session.py: session persistencekittycode/tools/: built-in toolstests/: focused runtime and tool tests
Development
Run the test suite:
python -m pytest -q
The current test suite covers the exported API, config-file behavior, provider conversion helpers, context compression, session helpers, the default tool registry, and skill discovery/prompt injection.
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 kittycode-0.1.4.tar.gz.
File metadata
- Download URL: kittycode-0.1.4.tar.gz
- Upload date:
- Size: 51.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4fda44763efa7909215bd501b488b87cbb845662b37c6ad6842ba67d5312d04
|
|
| MD5 |
dac54447648b34e07eff616438996333
|
|
| BLAKE2b-256 |
bfa923f4ae4393bf5b711ea7a58f590927459446450513a41ac92d5371a457d7
|
File details
Details for the file kittycode-0.1.4-py3-none-any.whl.
File metadata
- Download URL: kittycode-0.1.4-py3-none-any.whl
- Upload date:
- Size: 49.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de33616c01e378fdf9a77fdc24feb57ae1cd6c96d522af4c519574be1f7bef3e
|
|
| MD5 |
0815fd2bdeae21ccb84710c5dd8cb4db
|
|
| BLAKE2b-256 |
606d585de468745931075542f2a3bce602549ef2b9aa9c56ecb6082955c21a72
|