Skip to main content

CIRI Copilot — a local AI agent CLI with skills, toolkits, and subagents

Project description

CIRI Copilot

PyPI version Python 3.12+ License: MIT uv

CIRI (Contextual Intelligent Runtime Interface) Copilot — a local, desktop-class AI copilot that runs as a command-line interface (CLI). It provides interactive chat with AI models, thread-based conversation management, file- and skill-aware autocompletion, and an extensible skills/toolkit system.

This README is intentionally neutral and written for both developers and non-developers: what the project does, how to get started, how to configure it, and key implementation notes and limitations.


Table of Contents


What CIRI is (brief)

CIRI is a local CLI application that helps users interact with AI models and tools from their terminal. It uses OpenRouter (or compatible providers) for model access and aims to balance interactivity, local storage, and extensibility via "skills" and toolkits.

Features

  • Interactive AI Chat: Streaming responses with rich terminal formatting.
  • Multi-Provider Support: Seamless integration with OpenRouter or direct providers (Anthropic, OpenAI, Google, etc.) via LangChain.
  • Multimodal Content: Support for images, audio, and documents (PDF, CSV, etc.) in conversation.
  • Thread-Based Management: Save, switch, and delete conversation threads locally.
  • Deep Contextual Autocompletion: High-performance autocompletion for @files:, @folders:, @skills:, @toolkits:, @subagents:, and @harness:.
  • Self-Evolution: Ciri can analyze its workspace and register new skills, toolkits, and subagents on the fly.
  • Human-in-the-Loop (HITL): Approve, reject, or edit tool actions (shell commands, file edits) before they execute.
  • Local Storage: Checkpoint and conversation history stored in a local SQLite database.
  • Extensible Architecture: Easily add new skills and toolkits.
  • Programmatic API Mode: --api mode provides a persistent server with Unix socket interface for building custom UIs and backend integrations. Supports streaming events, thread state queries, and model/browser profile switching.

Who should use it

  • Non-developers: a lightweight, local AI chat assistant accessible from the terminal.
  • Developers: a base to extend with new skills, integrate tools, or customize model usage.

Prerequisites

Minimum recommended: Python 3.12+ (project developed and tested on 3.12). Adjust or test if you need earlier versions.

Windows

PowerShell (install uv):

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

macOS

  • Git (Xcode Command Line Tools or Homebrew)
  • Python 3.12+ (Homebrew: brew install python@3.12)

Install uv:

curl -LsSf https://astral.sh/uv/install.sh | sh

Linux (Ubuntu/Debian example)

sudo apt update && sudo apt upgrade -y
sudo apt install git -y
# If Python 3.12 is not available, consider using the deadsnakes PPA on Ubuntu:
# sudo add-apt-repository ppa:deadsnakes/ppa -y
# sudo apt update
# sudo apt install python3.12 python3.12-venv python3.12-dev -y

# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

Installation

From PyPI (recommended)

pip install ciri-ai

Or with uv:

# Install as a global tool (recommended)
uv tool install ciri-ai

# Or add to your current project
uv add ciri-ai

After install, the ciri command is available globally.

From source

Clone the repo:

git clone https://github.com/adimis-ai/ciri.git
cd ciri

Option 1 — Global install from source (recommended for users):

uv tool install .

This places the ciri command into your user bin (commonly ~/.local/bin) and isolates dependencies.

Option 2 — Development / editable (recommended for contributors):

# create and sync virtual environment with uv
uv sync

# install package in editable mode
uv pip install -e .

Configuration

API Keys

CIRI supports multiple providers. By default, it uses OpenRouter, but you can use any provider supported by LangChain (OpenAI, Anthropic, Google, Mistral, etc.).

  • Interactive Setup: If an API key is missing for your chosen model, CIRI will prompt you to enter it on startup and offer to persist it globally in ~/.ciri/.env and your shell profile.
  • Environment Variables: You can also set them manually:
    export OPENROUTER_API_KEY="your-key"
    export ANTHROPIC_API_KEY="your-key"
    # etc.
    

Model Gateway

You can switch between langchain (default) and openrouter gateways via the LLM_GATEWAY_PROVIDER variable.

export LLM_GATEWAY_PROVIDER="langchain" # Supports provider:model format

Security note: do not commit API keys to version control.


Quickstart

Start the CLI:

ciri

On first run, you will be guided through model and browser profile selection.

Common interactions

  • Reference Files: Type @files: then a path fragment.
  • Reference Folders: Type @folders: then a path fragment.
  • Reference Harness: Type @harness: to select core or project harness directories — shown with (Core) and (Current) flags.
  • Use Skills: Type @skills: to see available local skills.
  • Sync Workspace: Run /sync to let Ciri discover your local setup.
  • Change Model: Run /change-model to switch AI providers/models.
  • Manage Threads: Use /threads to list or /new-thread to start fresh.

Example session

You> Hello, analyze the @src/__main__.py file
CIRI> [analysis about the file]

You> /threads
# shows list of threads

You> exit
Goodbye!

API Mode (Programmatic Access)

For building custom UIs or backend integrations, use the --api mode with a persistent Unix socket server:

# Start the API server (holds copilot in memory)
ciri --api --server &

# Send commands from your backend/UI
ciri --api --run --input '{"messages": [{"type": "human", "content": "Hello"}]}'
ciri --api --state --config '{"configurable": {"thread_id": "..."}}'
ciri --api --history --config '{"configurable": {"thread_id": "..."}}'
ciri --api --change-model 'anthropic/claude-opus-4-6'
ciri --api --change-browser-profile '{"browser": "chrome", "profile_directory": "Default"}'

All responses are NDJSON (newline-delimited JSON) streamed to stdout. The server auto-starts if needed.

Full API Reference


Commands Reference

Command Description
/threads List all conversation threads.
/switch-thread Interactively switch to another thread.
/new-thread Start a new conversation thread.
/delete-thread Delete the current thread history.
/change-model Change the active LLM model.
/change-browser-profile Switch browser profiles for research.
/sync Analyze workspace & register skills/subagents.
/help Show the help menu.
/exit Exit the CLI.

Keyboard shortcuts

  • Tab — autocomplete file paths, skills, or model names
  • Ctrl+C — cancel current operation

Developer notes

High-level architecture

  • Entry point / CLI: ciri starts an interactive REPL-like chat.
  • Core Logic: CopilotController manages threads and executes the agent graph (supports multimodal inputs).
  • Model integration: OpenRouter client used for model calls; streaming and selection handled by runtime code.
  • Tools & skills: extensible skills discovered under .ciri/skills (skills may include scripts, validators, and metadata).
  • Storage: local conversation storage — see code for details.

Key locations

  • src/ — main package and CLI entry points (look for __main__.py or CLI module)
  • .ciri/skills — bundled skills and examples
  • tests/ — test suite
  • pyproject.toml — project metadata and dependencies

Extending

  • Follow patterns used in .ciri/skills to add new skills
  • Document inputs/outputs and add tests under tests/

Development tips

  • Use uv sync to prepare the development environment
  • Install editable: uv pip install -e .

Limitations & privacy

  • CIRI relies on third-party model providers (OpenRouter). Provider policies, costs, and behavior apply.
  • Conversations are stored locally, but model requests are sent over the network to the chosen provider. Avoid sending sensitive data unless you accept the provider's terms.
  • Offline use requires configuring or running compatible local models — not provided by default.

Troubleshooting

Command ciri not found

Cause: user bin (e.g., ~/.local/bin) not in PATH.

Fix (Linux/macOS):

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.profile
# or add to ~/.bashrc or ~/.zshrc and restart the shell

Python version error

Cause: Python < 3.12 installed. Install Python 3.12+ and ensure uv or your environment uses it.

API key errors

Cause: invalid or missing OpenRouter API key. Verify at https://openrouter.ai/keys and re-enter when prompted. Remove saved key files if needed (e.g., ~/.ciri/.env).

Permission denied when writing data

Cause: incorrect ownership of ~/.ciri or other data directories.

Fix (Linux):

sudo chown -R "$USER":"$USER" ~/.ciri

Contributing

Contributions welcome. See CONTRIBUTING.md.

Suggested flow:

  1. Fork and create a branch
  2. Run tests and add tests for new behavior
  3. Open a PR with a clear description

License

MIT — see LICENSE.md.


Contact

Aditya Mishra — https://github.com/adimis-ai

Project: https://github.com/adimis-ai/ciri

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ciri_ai-0.0.4.tar.gz (3.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ciri_ai-0.0.4-py3-none-any.whl (3.6 MB view details)

Uploaded Python 3

File details

Details for the file ciri_ai-0.0.4.tar.gz.

File metadata

  • Download URL: ciri_ai-0.0.4.tar.gz
  • Upload date:
  • Size: 3.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ciri_ai-0.0.4.tar.gz
Algorithm Hash digest
SHA256 40e1861d12868e2a05c66f59505a743d5ebbf8b8d0087f20d5f673d410400ea7
MD5 7cf615c04a6b6bb92ce82004ded9a0e6
BLAKE2b-256 b342b69bba116c60d40b8729aa4415f9cfcf73781dac9ad5625f7b616b044433

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciri_ai-0.0.4.tar.gz:

Publisher: publish.yml on adimis-ai/ciri-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ciri_ai-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: ciri_ai-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ciri_ai-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 1838a07aca1a0f095d8b5fd3b9bdb102afccb036cdd1d6c8683697466ee0e14c
MD5 9ff4c751c43081247534d218c00de921
BLAKE2b-256 f99ea0d2dbf2134b4e3b33a4dcf885d554eb29273ce416f4e37ed5cc99e7a407

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciri_ai-0.0.4-py3-none-any.whl:

Publisher: publish.yml on adimis-ai/ciri-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page