KittyKode 🐾
✧・゚: *✧・゚:* KittyKode v1 *:・゚✧*:・゚✧
♡ By Chimi the Creator!! ♡
A kawaii terminal coding agent that runs entirely on free model tiers — and doesn't fall over the first time it hits a quota wall.
KittyKode is the cute front door on top of a serious resilience layer: a
verified fallback chain of free models with key rotation, provider failover, and
failure classification (that's freeagent/ +
examples/python/fallback_chain.py). See
GOALS.md for the why.
Install
uvx kittykode # try it now, nothing installed
# — or keep it around —
pipx install kittykode # (or: uv tool install kittykode)
The first run walks you through setup: paste a free key (no card) for any
providers you have — OpenRouter, Groq, Google AI Studio, Cerebras, Mistral.
Each key is one independent quota bucket; when one runs dry, kitty hops to
the next. Keys are saved to ~/.kittykode/.env and work from any directory.
kitty # open the interface
kitty setup # add / replace provider keys any time
kitty setup --all # also offer NVIDIA, Cohere
kitty --task "explain scripts/discover_free_models.py" # one task, then exit
kitty --cwd path/to/project # work somewhere else
kitty --yes # auto-approve every action (headless)
No key at all? kitty still opens — the interface works, it just can't run a
model until you finish kitty setup.
From source
git clone https://github.com/Chimthuwu/kittykode && cd kittykode
pip install -e .
kitty setup
What you see
Banner → welcome box → a status strip (9 free models across 2 buckets ready) →
a prompt. Type a coding task; kitty reads, edits, and runs commands with a
kawaii approval screen (a coloured diff for edits, the command for shell runs —
y / n / always).
| Command | Does |
|---|---|
/help |
the command list |
/models |
the fallback chain and which entry is serving |
/setup |
add / update provider keys (buckets) |
/doctor |
per-entry state: ready / cooling / disabled |
/reset |
forget the conversation (chain + approvals stay) |
/approvals |
clear remembered "always allow" choices |
/quit |
bye bye~ |
When a task is too big for one turn, kitty stops with progress kept — type
continue to resume.
What it inherits from freeagent
- Key rotation — multiple keys per provider rotate before any model switch
- Independent buckets — a second provider's key in
.env(Groq, Gemini, Cerebras…) becomes a chain entry that survives OpenRouter's account-wide daily cap - Failure classification — dead models disabled for the session, spent keys rotated away from, transient errors napped; empty 200s count as failures
- Provider-neutral history — a mid-task switch to another provider just works
Five tools, confined to the working directory: list_dir, read_file,
write_file, edit_file, bash. Writes/edits/commands need approval;
--yes skips that for headless runs.
Honest limits
- Free tiers are slow and small-context; long histories get trimmed to the most recent ~30k tokens.
- If every chain entry shares one quota bucket, a daily cap still stops
everything — add another provider's key to
.env. - Free endpoints may log or train on prompts. Hobby work only — never point it at credentials or client code.
Layout
| Path | What |
|---|---|
kitty/ |
the kitty command — cli.py, banner.py, ui.py (kawaii toolkit), screen.py (screens/onboarding), engine.py (bridge to freeagent) |
freeagent/ |
the agent engine — tools, agent loop, chain builder |
examples/python/fallback_chain.py |
the resilient chain itself |
scripts/discover_free_models.py |
probe free models, write models.json |
models.json |
the current verified chain |
TODO.md |
build progress + the channel the build agents coordinate through |
Development
python -m pytest kitty/tests # UI + screen tests
python -m kitty --no-banner # skip the banner while iterating
NO_COLOR=1 python -m kitty # plain output
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 kittykode-0.1.0.tar.gz.
File metadata
- Download URL: kittykode-0.1.0.tar.gz
- Upload date:
- Size: 72.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbae22ca47963fda0b1925b81882b50f368cb882dfc3a54728c40ecd42e76b58
|
|
| MD5 |
89fc727fbbb9f0d3226f2cf759b7625d
|
|
| BLAKE2b-256 |
6e4dd0fcd982af7db1a095e9a57579952abac7575cd812daa198feaf4661bf69
|
Provenance
The following attestation bundles were made for kittykode-0.1.0.tar.gz:
Publisher:
publish.yml on Chimthuwu/kittykode
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kittykode-0.1.0.tar.gz -
Subject digest:
dbae22ca47963fda0b1925b81882b50f368cb882dfc3a54728c40ecd42e76b58 - Sigstore transparency entry: 2751402165
- Sigstore integration time:
-
Permalink:
Chimthuwu/kittykode@919faa626daae7ed730bb3c8a1a00b629c0c9a8c -
Branch / Tag:
refs/tags/init - Owner: https://github.com/Chimthuwu
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@919faa626daae7ed730bb3c8a1a00b629c0c9a8c -
Trigger Event:
release
-
Statement type:
File details
Details for the file kittykode-0.1.0-py3-none-any.whl.
File metadata
- Download URL: kittykode-0.1.0-py3-none-any.whl
- Upload date:
- Size: 83.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4aeab84eee6a284207f30e62706e219af4e6205d0ecea2d1835e82db8fb3c6b6
|
|
| MD5 |
d70d45ea329157e6205e18f9fced8db3
|
|
| BLAKE2b-256 |
18bd36a12f7ca87ad805e02199bbdd0fe19d7fd137f7b0bcab2620a7068c8281
|
Provenance
The following attestation bundles were made for kittykode-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Chimthuwu/kittykode
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kittykode-0.1.0-py3-none-any.whl -
Subject digest:
4aeab84eee6a284207f30e62706e219af4e6205d0ecea2d1835e82db8fb3c6b6 - Sigstore transparency entry: 2751402253
- Sigstore integration time:
-
Permalink:
Chimthuwu/kittykode@919faa626daae7ed730bb3c8a1a00b629c0c9a8c -
Branch / Tag:
refs/tags/init - Owner: https://github.com/Chimthuwu
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@919faa626daae7ed730bb3c8a1a00b629c0c9a8c -
Trigger Event:
release
-
Statement type: