by agencyswarm (community) GPT, Claude, локальные модели через Ollama/vLLM, Python, Windows, macOS, Linux
CLI AI Agent for coding — терминальный AI pair-programmer с мульти-агентной оркестрацией, MCP-тулчейнами и контекстно-зависимыми, персистентными по памяти рефакторингами по всей кодовой базе.
Интерактивный CLI (и веб-интерфейс), использующий Claude 3.5 Sonnet для задач разработки ПО. Позволяет Claude генерировать и …
Token-эффективный AI-агент — та же плотность интеллекта при том же бюджете токенов.
Платформа для запуска и управления AI-агентами разработки — «ваша первая AI Agents Company».
Экспериментальный CLI coding-агент, эксперименты вокруг архитектуры Goose.
# Требуется Python 3.11+ # Клонировать репозиторий git clone git@github.com:agencyswarm/CLAII.git cd CLAII # Создать и активировать виртуальное окружение (рекомендуется) python -m venv .venv source .venv/bin/activate # на Windows: .venv\Scripts\activate # Установить в режиме разработки (editable) pip install -e . # Проверить установку CLI claii --help
██████╗ ██╗ █████╗ ██╗██╗
██╔════╝ ██║ ██╔══██╗██║██║
██║ ██║ ███████║██║██║
██║ ██║ ██╔══██║██║██║
╚██████╗ ███████╗██║ ██║██║██║
╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝╚═╝
(CLAII)
CLAII (произносится как «клей») — это AI-агент для кодинга с приоритетом командной строки, который может:
Он разработан как небольшое ядро, которое можно расширять дополнительными инструментами, провайдерами и поведением агента со временем.
CLAII вызывает LLM в цикле, планируя вызовы инструментов шаг за шагом, пока не сможет дать окончательный ответ или завершит последовательность изменений/тестов.
get_files_info – список файлов и директорий с размером и флагом is_dirget_file_content – чтение содержимого файла с ограничением по максимальной длине (MAX_FILE_CHARS)write_file – запись/перезапись файлов (в пределах разрешённой рабочей директории)run_python_file – выполнение Python-скриптов с тайм-аутом и захватом выводаВсе инструменты ограничены настроенной рабочей директорией (по умолчанию ./calculator), чтобы агент не выходил за её пределы.
kb/ внутри рабочей директории@kb/<путь> – встраивание содержимого базы знаний напрямую в промпт@file:<путь> – подсказка CLAII просмотреть конкретный файл проекта через get_file_content.claii_memory.json для каждого проекта--no-memory--no-pruneНебольшое приложение-калькулятор (calculator/), которое CLAII может читать, изменять и запускать — используется как тестовая площадка для автоматического исправления ошибок и рефакторинга.
Запустите claii "ваш запрос здесь" и получите приветственное сообщение с баннером CLAII перед запуском агента.
Направления развития расширенной версии AgencySwarm / CLAII:
Поддержка нескольких бэкендов (например, Google Gemini, OpenAI, Anthropic, локальные LLM) через простой переключатель в конфигурации/CLI с унифицированным интерфейсом вызова инструментов для агента.
functions/ и объявления схемТекущая высокоуровневая структура:
claii/
__init__.py
cli.py # CLI entrypoint (prints logo, parses args, calls run_agent)
agent.py # Core agent loop + function dispatch + memory + @mentions
memory.py # Load/save compressed conversation history
config.py # Provider config (CLAII_PROVIDER, CLAII_MODEL)
providers.py # GeminiProvider and future multi-provider abstractions
functions/
__init__.py
config.py # e.g. MAX_FILE_CHARS / function-level config
get_files_info.py # get_files_info(...) + schema_get_files_info
get_file_content.py # get_file_content(...) + schema_get_file_content
write_file.py # write_file(...) + schema_write_file
run_python.py # run_python_file(...) + schema_run_python_file
get_kb_file.py # get_kb_file(...) + schema_get_kb_file
calculator/
__init__.py
main.py # Calculator CLI app (demo project)
tests.py # Unit tests for calculator
main.txt # Example text file
README.md
pkg/
__init__.py
calculator.py
render.py
morelorem.txt
pyproject.toml
README.md
.env.example # Example environment file (optional)
.claii_memory.json # Created at runtime (per-project memory)
На высоком уровне агент получает инструкции следующего содержания:
get_files_info для обнаружения релевантных файловget_file_content для изучения кодаwrite_filerun_python_file для запуска тестов или скриптов с целью проверки@kb/<путь> → рассматривается как ссылка на kb/<путь> внутри рабочей директории@file:<путь> → рассматривается как подсказка просмотреть этот файл проекта через get_file_contentЦикл агента продолжает вызывать метод generate(...) провайдера, пока:
Требуется Python 3.11+.
# Clone the repo
git clone git@github.com:agencyswarm/CLAII.git
cd CLAII
# Create & activate a virtualenv (recommended)
python -m venv .venv
source .venv/bin/activate # on Windows: .venv\Scripts?ctivate
# Install in editable/dev mode
pip install -e .
# Run once to verify the CLI is installed
claii --help # (future: help text; for now, just try a prompt)
Основные зависимости (указаны в pyproject.toml):
google-genai – клиент Gemini APIpython-dotenv – загрузка GEMINI_API_KEY и других переменных окруженияСоздайте файл .env в корне проекта с как минимум:
GEMINI_API_KEY=your_gemini_api_key_here
Текущая абстракция провайдера находится в claii/providers.py:
GeminiProvider оборачивает google-genai и обрабатывает:dotenv)gemini-2.0-flash-001 по умолчанию)Дополнительная конфигурация (уже подготовлена в claii/config.py):
CLAII_PROVIDER=google-genai
CLAII_MODEL=gemini-2.0-flash-001
На данный момент get_provider() просто возвращает GeminiProvider, но класс конфигурации уже готов для добавления других провайдеров.
После установки (и активации виртуального окружения):
claii "explain how the calculator works"
Вы должны увидеть:
Calling function: get_files_info({...}))Текущий CLI настроен следующим образом:
claii "<prompt>" [--verbose] [--no-memory] [--no-prune]
--verbose
Выводит аргументы вызова инструментов и их сырые результаты (полезно для отладки).--no-memory
Отключает загрузку/сохранение .claii_memory.json для текущего проекта.
Агент работает только с текущим запросом и шагами в рамках этого запуска.--no-prune
Отключает обрезку истории сообщений перед сохранением.
По умолчанию сохраняются только последние MAX_MEMORY_MESSAGES (например, 200).# Normal run, memory enabled and pruned
claii "fix the bug where 3 + 7 * 2 returns 20 instead of 17"
# Debug everything, but do not persist history
claii "run the calculator tests" --verbose --no-memory
# Long-running debugging session, keep full history
claii "help me refactor calculator/pkg/calculator.py" --no-prune
В рабочей директории (по умолчанию calculator/) можно создать:
calculator/
kb/
design.md
architecture/decisions.md
lang/agent-architecture.md
Используйте их в запросах следующим образом:
# Inline KB context from kb/design.md
claii "Using @kb/design.md, refactor the calculator to follow the design guidelines."
# Hint to a specific project file
claii "Based on @kb/lang/agent-architecture.md, review @file:calculator/pkg/calculator.py and suggest improvements."
@kb/<путь>KB_PATTERN = r"@kb/([^\s]+)"CLAII разворачивает его в встроенный текст:
text
Ниже содержимое файла базы знаний "kb/<путь>":
--- НАЧАЛО БЗ [<путь>] ---
... содержимое файла (обрезается, если очень длинное) ...
--- КОНЕЦ БЗ [<путь>] ---
@file:<путь>FILE_PATTERN = r"@file:([^\s]+)"CLAII не загружает файл автоматически, а переписывает его как подсказку:
text
"<путь>" (ссылка на файл проекта; используйте get_file_content с file_path="<путь>")
Другие использования @ (электронные адреса, соцсети, обычный текст) не затрагиваются, так как распознаются только эти конкретные шаблоны.
Показать содержимое директории:
claii "what files are in the root of the calculator project?" --verbose
Прочитать файл:
claii "read the contents of calculator/main.py"
Записать файл (в рабочей директории):
claii "create a new file calculator/notes.txt summarising what the calculator does"
Запустить тесты:
claii "run the calculator tests in calculator/tests.py"
Классическая демонстрация исправления ошибки:
claii "fix the bug where '3 + 7 * 2' evaluates to 20 instead of 17 in the calculator"
Память реализована в claii/memory.py как простой JSON-лог:
.claii_memory.json в корне проекта{ "role": "...", "text": "..." }При запуске:
Если память включена (по умолчанию), CLAII вызывает:
messages = load_memory(project_root)
Затем добавляет текущий (возможно, расширенный) запрос пользователя:
messages.append(
types.Content(role="user", parts=[types.Part(text=expanded_prompt)])
)
При завершении:
Если память включена, опционально обрезает сообщения с помощью _prune_messages, а затем:
save_memory(project_root, messages)
Память можно отключить для запуска с помощью --no-memory или запретить обрезку с помощью --no-prune.
Абстракция провайдера находится в claii/providers.py:
class GeminiProvider:
def __init__(self, model_name: str = "gemini-2.0-flash-001") -> None:
load_dotenv()
api_key = os.getenv("GEMINI_API_KEY")
...
self.client = genai.Client(api_key=api_key)
self.model_name = model_name
def generate(self, *, messages, tools, system_prompt):
return self.client.models.generate_content(
model=self.model_name,
contents=messages,
config=types.GenerateContentConfig(
tools=tools,
system_instruction=system_prompt,
),
)
Агент вызывает только:
provider = get_provider()
response = provider.generate(
messages=messages,
tools=[tools],
system_prompt=system_prompt,
)
Возможные дополнения:
OpenAIProviderAnthropicProviderLocalProvider (например, vLLM, LM Studio и т. д.)Каждому достаточно реализовать ту же сигнатуру generate(...).
Некоторые направления для развития проекта:
Добавьте модули в functions/ и зарегистрируйте их в agent.py:
functions/git_tools.pyfunctions/http_request.pyfunctions/test_runner.pyКаждый должен экспортировать:
your_tool(...) – чистая Python-функция с входными/выходными данными в виде строкschema_your_tool – types.FunctionDeclaration, описывающая параметрыЗатем включите их в:
_build_tools() – добавьте в function_declarations=[...]_call_function() – расширьте fn_map = { ... }Создайте контроллер более высокого уровня, который:
run_agent с разными системными подсказками/ролямиИдеи оркестрации:
rich или colorama--diff, который выводит минимальные различия при изменении файла с помощью write_file--plan-only, в котором агент только проверяет и предлагает план без записи файловАвторские права (C) Swarmic LLC. Все права защищены.