kiari
kiari is a CLI tool for developing and experimenting with qualia-oriented LLM agents.
Installation
pip install kiari
Usage
Start the interactive console:
kiari
kiari stores its configuration, persistent data, and cache under ~/.kiari/config,
~/.kiari/data, and ~/.kiari/cache, respectively.
Run a one-shot batch prompt:
kiari "hello"
Manage profiles:
kiari profile list
kiari profile new
kiari profile use
Generate an image with the built-in image_generate tool:
kiari -t image_generate "Generate an illustration of a cat reading a book"
Generate a video with the built-in video_predict tool:
kiari -t video_predict "Generate a short video of a cat playing with a ball"
Search the web with the built-in web tool:
kiari -t web "Search the web for the latest Python release"
Operate connected Chrome profiles with the built-in chrome tool:
kiari -t chrome "List Chrome tabs, select example.com, and summarize its current page"
The Chrome tool requires Chrome Bridge 0.6.x (extension 0.6.0 or later). Install and connect its Chrome extension; the SDK reuses or starts the loopback server automatically. Each tool action acquires and releases its own exclusive Chrome Bridge session.
To run the real SDK/extension integration test, connect Chrome Bridge and run:
make chrome_test
The test opens and closes only its own loopback fixture tab. It is marked costly and is
skipped by the normal test suite.
See Chrome Tool and Chrome Bridge for session, target/ref, error, ownership, and SDK update semantics.
FastAPI Mode
Start an automatically reloading development server:
kiari fastapi --chat-model openai
Run multiple production-style workers without reload:
kiari fastapi --fastapi-workers 4 --fastapi-path /agent
The service exposes GET /health and streams agent events as NDJSON from
POST / (or the configured path):
curl -N http://localhost:8000/ \
-H 'Content-Type: application/json' \
-d '{"text":"hello"}'
Authentication defaults to none. Configure Bearer authentication before exposing the
server to an untrusted network, for example with
--fastapi-authenticator 'bearer?api_key=secret' or the corresponding component config.
Request files are resolved by the server; they are not uploaded by this API.
Streamlit Mode
Start the browser chat UI:
kiari streamlit --chat-model openai --history-repository local
The default browser-session authenticator isolates data for the lifetime of one browser
session. For durable multi-user identity, configure Streamlit OIDC in
.streamlit/secrets.toml and start with --streamlit-authenticator oidc (or
oidc?provider=google for a named provider). Secrets stay in Streamlit configuration and
are not copied into kiari profiles or startup payloads.
Each user creates and selects globally unique agent IDs in the sidebar. Agent IDs accept
letters, digits, ., _, and -. Deleting an agent removes its registered identity and
History; generated files and caches are retained.
The sidebar can apply per-session YAML overrides for agent, tool, workflow, prompt, chat, and speech options. Runtime-wide settings such as profiles, plugins, repositories, authentication, loggers, and server options remain fixed at startup.
Watch Mode
Watch file changes:
kiari watch "file?paths=.&include_patterns=*.md"
Watch Pub/Sub:
kiari ext pubsub create-topic --project-id kiarina --topic-id tmp
kiari ext pubsub create-subscription --project-id kiarina --topic-id tmp --subscription-id tmp
kiari watch "pubsub?project_id=kiarina&subscription_id=tmp"
kiari ext pubsub publish-message --project-id kiarina --topic-id tmp --attribute hoge=fuga "hello"
Watch Realtime Database:
DATABASE_URL=https://kiarina-python.firebaseio.com/
kiari watch "rtdb?database_url=$DATABASE_URL&path=/posts/kiarina"
kiari ext rtdb set --database-url $DATABASE_URL --path /posts/kiarina '{"message":"hello"}'
kiari ext rtdb get --database-url $DATABASE_URL --path /posts/kiarina
kiari ext rtdb watch --database-url $DATABASE_URL --path /posts/kiarina
Watch Slack:
CHANNEL_ID=C077QKNDCUR
kiari watch "slack?"
kiari watch --watch-handler slack "slack?"
kiari ext slack post-message --channel $CHANNEL_ID "hello"
kiari ext -v slack get-channel-messages --channel $CHANNEL_ID --limit 1
kiari ext slack watch-channel --channel $CHANNEL_ID
Development
mise run setup
mise run ci
Using the working tree as the global kiari
Install the checkout as a uv tool so that kiari on PATH runs the working tree while its
dependencies stay isolated from the development .venv:
uv tool install --editable .
Source edits take effect immediately. After adding a dependency to pyproject.toml, refresh
the tool environment:
uv tool upgrade kiari
A plugin that needs an extra package must declare it with --with. The tool environment is
owned declaratively by uv-receipt.toml, so packages installed into it by hand are removed
on the next upgrade. Every --with has to be repeated on each reinstall:
uv tool install --editable . --with <package> --force
Reinstalling without --with rebuilds the environment from pyproject.toml alone:
uv tool install --editable . --force
The tool environment resolves its own dependencies and does not read uv.lock, so its
versions can drift from the development environment. Run uv tool upgrade kiari after
make upgrade to keep them aligned.
Remove the command with:
uv tool uninstall kiari
Metadata
Release files for kiari 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kiari-0.6.0.tar.gz | 219.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kiari-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 578.5 kB
Release files / kiari-0.6.0.tar.gz
| Download URL | kiari-0.6.0.tar.gz |
|---|---|
| Size | 219.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8b33bf0d001ee470ff990029bd97677663aafc92e361a60173779670ca987ee4
|
|
BLAKE2b-256 checksum How to use checksums |
e5a5e0461d11b14639e9c718c1a8f6490f6b112c1d74f42a37c7783261415185
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency logRelease files / kiari-0.6.0-py3-none-any.whl
| Download URL | kiari-0.6.0-py3-none-any.whl |
|---|---|
| Size | 358.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
05d2f971a85097d3ea2397dc012b29aa58eaf5dc82fd3a40be7fb3e4f7f8e6c1
|
|
BLAKE2b-256 checksum How to use checksums |
51cf81bc0371444bdd523328ff63761cf7ab968915759ad893e6bf44824bc05f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency log