kia — an AI agent for your terminal¶
[source] · pip install "kiui[kia]"
kia is a lightweight coding agent that works where you do: in the terminal and inside your project. It can inspect a repository, edit files, run commands, search the web, delegate work, and keep long sessions focused. Bring any model served through an OpenAI-compatible API.
$ kia --model gpt
> find the cause of this failing test, fix it, and run the smallest relevant check
● reads the repository and test output
● edits only the affected files
● runs the focused test
✓ explains what changed and what was verified
Features¶
Agentic coding |
Model agnostic |
Terminal + Web UI |
Sub-agents and goals |
Skills |
Long-context management |
Rewind and sessions |
Human control |
Web access |
Developer-friendly UI |
One agent, two interfaces. Start work in the terminal, open the optional Web UI from another device, and interact with the same live session from either place.
Install¶
Install the agent and its optional dependencies from PyPI:
pip install "kiui[kia]"
For the latest development version:
pip install -U "kiui[kia] @ git+https://github.com/ashawkey/kiuikit.git"
This installs two commands:
kia— the coding agent and shared Web UI hub.kib— the optional Git-backed personal skill library.
Configure a model¶
Create .kiui.yaml in the current project or ~/.kiui.yaml for a global configuration. A project configuration takes precedence.
openai:
gpt: # short alias used by kia
model: gpt-5 # model ID sent to the provider
api_key: sk-...
base_url: https://api.openai.com/v1
reasoning_effort: high # optional
local:
model: my-model
api_key: not-needed
base_url: http://localhost:8000/v1
kia_web_token: change-me # optional fixed Web UI token
The provider only needs to expose an OpenAI-compatible chat-completions API. Keep API keys out of files committed to version control.
List the configured profiles and their detected capabilities:
kia --list
Quick start¶
Run kia from the root of the project you want it to work on:
cd my-project
kia --model gpt
If --model is omitted, the first profile in openai is used.
Talk to it naturally:
> explain how authentication flows through this repository
> fix the parser bug reported in issue #42 and run its tests
> compare these two approaches using current upstream documentation
> @src/server.py simplify this function without changing its API
Prefix a command with ! to bypass the model and run it directly:
> !git diff --stat
> !pytest tests/test_parser.py -q
Type @ to autocomplete a project path. Responses, reasoning for compatible models, tool activity, command output, and diffs stream in the terminal.
Web UI¶
kia remains terminal-first, but a shared hub can mirror many agents into one authenticated browser UI. Each running agent appears as a tab, even when agents were started in different projects or terminals.
┌──────────────────────────────┐ WebSocket ┌─────────────────────┐
│ kia --hub │◀──────────────────────▶│ browser │
│ ├─ project-a · gpt │ │ [project-a] [docs] │
│ └─ docs · local │ └─────────────────────┘
└──────────────▲───────────────┘
│ local agent links
┌──────┴──────┐
│ kia sessions │
└──────────────┘
Start the hub once, then launch agents normally:
# terminal 1: owns the browser UI port
kia --hub --web-port 8765
# other terminals: automatically discover and join the hub
cd ~/project-a && kia --model gpt
cd ~/project-b && kia --model local
Open the URL printed by the hub and sign in with its generated token, or set kia_web_token in .kiui.yaml. Connection information is stored in ~/.kia/hub.json; agents continue terminal-only if no hub is available.
The hub listens on loopback. To use it from another machine, forward the port with SSH or place it behind an authenticated tunnel:
ssh -L 8765:127.0.0.1:8765 user@workstation
Then open http://127.0.0.1:8765 locally.
Skills¶
Skills are reusable instruction packs in the open Agent Skills format. kia discovers them from:
The installed
kiuipackage — bundled skills; these take precedence and stay in sync with the installed version../.kia/skills/— project skills; these take precedence over personal skills.~/.kia/skills/— personal skills shared across projects.
Only each skill’s name and description enter the base prompt. Full instructions and bundled resources are loaded on demand, preserving context for the actual task.
.kia/skills/pdf-processing/
├── SKILL.md
├── scripts/ # optional
├── references/ # optional
└── assets/ # optional
A minimal SKILL.md looks like this:
---
name: pdf-processing
description: Extract, inspect, merge, and fill PDF documents. Use for PDF tasks.
---
Follow the workflow in `references/workflow.md`.
Use `scripts/extract.py` when text extraction is required.
Useful commands:
/skills list discovered skills
/skills reload discover new or edited skills
/skills pdf-processing load one manually
kia ships with skill-creator for drafting and validating skill packs and pdf-reading for converting PDFs to Markdown and structured data with the external MinerU CLI. The PDF skill reads extracted text, LaTeX, tables, and captions; direct image-pixel inspection requires a vision-capable tool. Bundled skills are loaded directly from the installed package rather than copied into .kia, so upgrading kiui also updates them. Create custom skills under a different name.
Personal skill library¶
Configure a Git repository to share skills between projects:
kia_lib: git@github.com:username/kia-skills.git
Then manage it with kib:
kib list
kib list --local
kib install pdf-processing
kib update [pdf-processing ...]
kib update pdf-processing --prefer local
kib upload pdf-processing
kib upload pdf-processing --force
kib remove pdf-processing
kib remove pdf-processing --local
Remote skills are not exposed to the agent until installed. kib update safely synchronizes all installed skills, or only the optional names: local-only changes are uploaded, remote-only changes are downloaded, and conflicts require --prefer local or --prefer remote. The committed .kib.json in each skill records its last synchronized tree, so this works across machines without relying on a local cache. kib remove deletes from the library; --local deletes only from the project. kib only manages project skills under ./.kia/skills/ and does not list or special-case bundled skills. Upload validates the pack and rejects symlinks; kib install never overwrites existing local skills.
Personas¶
A persona owns the agent’s identity, system prompt, and tool surface — unlike skills, which add instructions, a persona replaces them. Personas are Python modules bundled in kiui/agent/personas/; coder (the default) is the full coding agent, while chatter is a general chatbot limited to web_search and web_fetch, with no file/shell access and no environment context in its prompt.
kia --persona chatter # start as another persona
/persona list installed personas and their tool surface
/persona chatter switch persona (restarts the conversation, like /clear)
Each persona module defines build_system_prompt(ctx) — composed from the shared blocks and builders in kiui/agent/personas/common.py — and a TOOLS whitelist that controls which tools are advertised to the model. This is capability guidance, not a security boundary: interactive commands such as !<command> and /skills remain available to the user and are governed by the normal permission and safety checks.