Установка¶
Для flower нужен только Python ≥ 3.10. Единственная runtime-зависимость — claude-agent-sdk; нативный бинарник, который отправляет запросы, лежит прямо в его wheel, поэтому ни Node, ни Claude Code CLI ставить не надо. Эта страница проходит путь с нуля: установка одной строкой, установка из исходников, первая настройка ключей и команда, которая доказывает, что «всё действительно встало». Когда заработает — переходите к Быстрому старту.
Перед установкой: проверьте Python¶
Вывод вроде True 3.13.7 — этого достаточно. Если печатается False или python3 вообще нет, сначала поставьте его (brew install python / apt install python3), иначе установочный скрипт просто выйдет.
| Нужно | Не нужно |
|---|---|
Python ≥ 3.10 (pyproject.toml:5; install.sh:22-31 тоже проверяет сам) | Node.js |
| Сеть до API-эндпоинта | Claude Code CLI |
| API key или токен шлюза (спросят после установки) | Настройки в ~/.claude/ на хосте (единственное исключение — credentials, см. ниже) |
Имя пакета flower, версия 0.1.0, единственная runtime-зависимость claude-agent-sdk>=0.2.152 (pyproject.toml:2-6). mkdocs-material нужен только в CI для сборки сайта документации, для запуска flower он не требуется.
Установка одной строкой¶
После установки в терминале должно быть примерно это (без цветов):
== 用 uv 安装 flower…
== 装好了 /Users/you/.local/bin/flower
下一步:
cd 到任意项目目录,然后: flower
第一次会问你要 API key / 网关地址,配一次存到 ~/.config/flower/.env,处处生效。
本机已经装了 Claude Code 并配好的话,flower 会直接借它的 token,连问都不问。
文档:https://chenyuheee.github.io/flower/
Ключевая строка — == 装好了 <абсолютный путь>: это результат того, что скрипт сам выполнил command -v flower (install.sh:60-61). Если путь напечатан, значит flower уже в PATH.
Что установщик делает на самом деле¶
install.sh делает всего три вещи: выбирает установщик Python-инструментов, ставит с GitHub и говорит, что дальше. Он не трогает ваши credentials ни единым символом (install.sh:7-8). Источник установки жёстко зафиксирован: git+https://github.com/ChenyuHeee/flower.git (install.sh:11).
Установщик пробует варианты по порядку и останавливается на первом сработавшем (install.sh:33-57):
| Порядок | Условие | Реальная команда | Куда попадает исполняемый файл |
|---|---|---|---|
| 1 | uv есть в PATH | uv tool install --force <REPO> | tool bin-каталог uv, обычно ~/.local/bin/flower |
| 2 | uv нет, но есть pipx | pipx install --force <REPO> | ~/.local/bin/flower |
| 3 | Нет ни того, ни другого | Сначала curl -LsSf https://astral.sh/uv/install.sh \| sh ставит uv, и при успехе — возврат к пункту 1 | То же, что в пункте 1 |
| 4 | В пункте 3 uv тоже не поставился | python3 -m pip install --user --upgrade <REPO> | Пользовательский каталог скриптов — на macOS это не ~/.local/bin |
Во всех четырёх случаях ставится один и тот же console script: flower = "flower.cli:main" (pyproject.toml:12). После установки его можно вызывать и через python -m flower.cli — эффект тот же (cli.py:1451-1452).
Повторный запуск скрипта перезаписывает установку принудительно, без подтверждения
Три установочные команды идут с --force, --force и --upgrade (install.sh:37, :40, :54). Повторный запуск просто затирает существующую установку — именно так и делается обновление, но не ждите, что вас предварительно о чём-то спросят.
Как команда flower попадает в PATH¶
Если command -v flower ничего не находит, скрипт предлагает добавить $HOME/.local/bin в ~/.zshrc или ~/.bashrc (install.sh:62-70):
И uv tool install, и pipx install кладут файлы именно сюда, так что для них подсказка верна. Но для четвёртого пути (pip install --user) — не обязательно: каталог в этой подсказке зашит жёстко, а пользовательский каталог скриптов pip зависит от платформы. На macOS это ~/Library/Python/3.13/bin. Проверьте сами:
Вывод, например, /Users/you/Library/Python/3.13/bin — добавляйте в PATH именно этот каталог, а не ~/.local/bin, затем перезапустите терминал или сделайте source.
Установка из исходников¶
Если нужно читать код, менять фреймворк или запускать офлайн-проверки из tests/ — ставьте из исходников:
git clone https://github.com/ChenyuHeee/flower.git
cd flower
python3 -m venv .venv
.venv/bin/pip install -e .
После этого .venv/bin/flower --help должен напечатать несколько строк usage.
У исполняемого файла в venv shebang — абсолютный путь, поэтому activate не нужен: достаточно символьной ссылки, и команда работает из любого каталога:
Если ~/.local/bin в PATH, то cd в любой каталог проекта и набранное flower пойдут через интерпретатор из этого venv и через эти исходники.
У установки из исходников есть ещё одно место для credentials: .env в корне репозитория (пятое место в порядке поиска, см. Конфигурация · Приоритет поиска credentials). При разработке:
.env уже в .gitignore, в репозиторий он не попадёт. У flower, установленного через pip / pipx / uv, этого места нет — он лежит в site-packages, «корня репозитория» там не существует, — поэтому при такой установке используйте глобальный файл с credentials, описанный ниже.
Автообновление¶
flower пока быстро меняется, поэтому установка через pip / pipx / uv по умолчанию обновляет себя сама: баг, о котором сообщил человек с трёхдневной версией, может быть давно исправлен — и обе стороны теряют время. Тут нет вопроса «включать ли»: по умолчанию включено, выключается переменной окружения.
Что именно происходит (update.py:116-129):
- При каждом старте
flowerв фоновом потоке один раз проверяется последний commit веткиmainна GitHub (update.py:70-80). Основной поток не ждёт ни секунды — это первый инвариант. - Если commit отличается от установленного локально, запускается команда обновления тем же способом, каким было поставлено: есть
uv—uv tool install --force, естьpipx—pipx install --force, нет ничего —pip install --user --upgrade(update.py:83-93). - Даже после успешной установки текущий процесс не подменяется — новая версия применится при следующем запуске
flower(update.py:113). Подмена на середине выполнения — один из самых труднодиагностируемых видов отказа. - Троттлинг: не чаще одной проверки в 24 часа, метка времени пишется в
~/.config/flower/.update(update.py:32,:36-37,:124). - Любая ошибка — молча. Нет сети, GitHub лежит, установка не прошла — работу это не прерывает (
update.py:79,:108-110).
Запуск из исходников (git) это не затрагивает. Шаг с командой обновления сначала проверяет, есть ли в репозитории .git; если есть — сразу возвращается None и ничего не делается (update.py:83-87): вашей рабочей копией управляет git, а не flower. В неинтерактивном режиме (stdin не терминал — например, pipe / CI) проверка пропускается целиком (update.py:121).
Чтобы выключить:
Подходит любое непустое значение (update.py:33, :121). Пригодится в CI, в офлайн-окружении и когда надо воспроизвести поведение какой-то старой версии.
Первый запуск: настройка credentials¶
Все три входа запуска работы — go, run, once — в начале вызывают ensure_credentials() (cli.py:1192, :1160, :1225), и это два барьера:
- Есть ли они — поиск по приоритету; если не найдено, вас спросят прямо на месте.
- Работают ли они — реальный запрос к API. Минимальный запрос с
max_tokens=16(env.py:120-123), стоит почти ничего. Протухший токен или неверный адрес шлюза по переменным окружения не видны, и без пробы всё взорвётся только через несколько минут.
Если credentials нет, первый запуск flower остановится на этом экране (cli.py:1358-1388):
== 配置 flower ========================================
第一次用?给一次凭证就行。
凭证会存到 /Users/you/.config/flower/.env(只你可读)。装一次,处处生效。
1. 你的 API key 或网关 token (Anthropic 官方的 sk-ant-… 或第三方网关签发的)
>
2. 网关地址 (直接回车 = Anthropic 官方;第三方网关填它的 BASE_URL)
>
3. 模型名 (直接回车 = 默认;网关有自己的模型名就填,如 claude-opus-5[1m])
>
+ 存好了:/Users/you/.config/flower/.env
Первый вопрос обязателен: если оставить пустым, красным напечатается 没给 token,取消。 и программа выйдет. На второй и третий вопросы можно просто нажать Enter. Для официального эндпоинта оставьте второй вопрос пустым; для стороннего шлюза укажите его корневой адрес, без /v1 — проба flower стучится в <BASE_URL>/v1/messages (env.py:162).
Ключи, которые записываются по вашим ответам (cli.py:1378-1386):
| Что вы ввели | Ключ в .env |
|---|---|
Токен начинается с sk-ant- | ANTHROPIC_API_KEY |
| Любой другой токен | ANTHROPIC_AUTH_TOKEN |
| Адрес шлюза не пуст | ANTHROPIC_BASE_URL |
| Имя модели не пусто | ANTHROPIC_MODEL, ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL — все три сразу |
Файл лежит в ${XDG_CONFIG_HOME:-~/.config}/flower/.env (env.py:39-42), пишется целиком перезаписью, после записи — chmod 0o600 (cli.py:1336-1347). Это и есть тот самый файл «настроил один раз — работает везде»: при смене каталога проекта перенастраивать не нужно, значение каждой переменной см. в Конфигурации.
Если на машине уже стоит Claude Code, вопросов может не быть вовсе¶
В поиске credentials есть последний запасной вариант: прочитать ~/.claude/settings.json, затем ~/.claude/settings.local.json и взять из их блоков env 9 ключей credentials (env.py:56-75, :109-111). У тех, у кого Claude Code уже настроен, flower запускается и сразу работает — экран настройки вообще не появляется. Именно это и рекламирует install.sh:77.
Фраза в продукте «flower не читает ~/.claude/settings.json» — неверна
Когда credentials не находятся вообще, последняя строка выводимой flower ошибки такая: flower 不读 ~/.claude/settings.json —— 那是可移植性的代价。 (env.py:184-194, сама фраза — на :192). Истина — в коде: читает. env.py:56-75 явно читает блоки env этих двух файлов, просто берёт оттуда только 9 ключей credentials и не перехватывает никаких других настроек. Прочитав ту фразу, не решайте, что локальная конфигурация Claude Code игнорируется. Полная цепочка — Конфигурация · Приоритет поиска credentials.
Когда нужно перенастроить¶
Подкоманда flower setup зарегистрирована (cli.py:1326-1328), но в _CMDS её забыли (cli.py:937), поэтому flower setup переписывается в flower go setup — «setup» воспринимается как формулировка задачи и прогоняется целый workflow. Сейчас нет ни одного способа из командной строки добраться до этой подкоманды, хотя несколько текстов ошибок по-прежнему предлагают её запустить. Чтобы изменить credentials:
Либо удалите токен из этого файла и запустите flower ещё раз — барьер отсутствия credentials спросит заново (при условии, что в других местах их тоже нет, например в ~/.claude/settings.json). Если credentials отклонены (HTTP 401 / 403), тот же экран появится прямо на месте и предложит перенастроить — но только один раз (cli.py:1416-1428).
Проверка, что всё встало¶
Два уровня, от дешёвого к дорогому.
Первый уровень — есть ли команда (бесплатно):
Если видите эти строки, значит console script установлен и находится в PATH:
usage: flower [-h] [-w WORKSPACE] [-r RUN_DIR] [-v] [-W] [-T]
{go,run,once,setup} ...
可移植长程 agent 框架
Второй уровень — credentials, эндпоинт и нативный бинарник работают (несколько центов): самый дешёвый настоящий запуск — это once: один агент, по умолчанию только три read-only инструмента Read / Glob / Grep, без goal guard, без workbench:
-v перед стартом печатает действующую конфигурацию, от токена остаются только первые 4 символа (cli.py:1445-1447; env.py:197-211):
ANTHROPIC_AUTH_TOKEN = sk-1***(共 108 位)
ANTHROPIC_BASE_URL = https://cloud.infini-ai.com/maas
ANTHROPIC_MODEL = claude-opus-5[1m]
Эти строки подтверждают, что вы подключились к нужному шлюзу. Дальше идут проба credentials и сам запуск:
Заголовков step здесь нет. once идёт по пути _run_once → rt.run(), минуя _drive / Workflow.run, а Event("step", …) отправляется только в workflow/base.py:220 — поэтому разделительные строки вида == 步骤名 ===== 1/1 в режиме once не появляются, они бывают только у go / run.
Появилась строка + 完成 — проверка пройдена, и она доказывает сразу три вещи: credentials работают, эндпоинт доступен, нативный бинарник из wheel claude-agent-sdk на этой машине запускается. Если под - 验一下凭证… идёт ! 凭证被拒 или ! 网关地址或模型名不对 — смотрите таблицу диагностики ниже.
У once время работы и накопленная стоимость показываются как 0
once создаёт новый рендерер на каждое событие (cli.py:1239, :579-581), поэтому 用时 всегда равно 0:00, а 累计 $ в строке статуса никогда не накапливается — стоимость одного шага настоящая, а время — нет.
1 轮 · $0.1741 в строке выше — измерение с источником: 2026-09-06 в контейнере Linux/arm64, реальный запрос через cloud.infini-ai.com/maas (docker/README.md:24-25), то есть нижняя граница цены одного раунда для Opus 5 + окно 1M. Если вы запустите команду выше сами, агенту придётся прочитать репозиторий, раундов будет больше, и стоимость окажется несколько выше этой нижней границы. Полный учёт лежит в runs/manifest.json, см. Конфигурация · Раскладка на диске.
Когда установка не удаётся¶
| Симптом | Причина | Что делать |
|---|---|---|
需要 Python 3.10+。先装一个… | Ни python3, ни python не удовлетворяют 3.10+ (install.sh:31) | brew install python / apt install python3, затем запустить скрипт ещё раз |
Скрипт сообщил об успехе, но flower: command not found | Установлено в каталог, которого нет в PATH | См. выше «Как команда flower попадает в PATH». При пути через pip --user на macOS это ~/Library/Python/3.X/bin |
安装失败。手动试:uv tool install git+https://… | Все пути провалились, обычно нет сети до GitHub или PyPI | Запустите команду вручную, как предложено, и посмотрите настоящую ошибку |
缺少凭证:需要 ANTHROPIC_API_KEY 或 ANTHROPIC_AUTH_TOKEN。 (4 строки) | В неинтерактивном окружении (pipe, CI, nohup) нет credentials — экран настройки там не появляется, происходит выход | Сначала настройте в настоящем терминале одним запуском flower, либо запишите ~/.config/flower/.env напрямую |
! 凭证被拒:HTTP 401 … | Токен протух или введён неверно | В интерактивном терминале сразу предложат перенастроить; в неинтерактивном — выход |
! 网关地址或模型名不对:HTTP 404 … | Неверный ANTHROPIC_BASE_URL или имя модели | BASE_URL — до корня шлюза, без /v1; имя модели — то, которое у шлюза своё |
(探针没打通:… —— 当作网络问题,照常开跑) | DNS / TCP / таймаут / 5xx | Это не проблема credentials, flower намеренно не предлагает перенастройку, запускается как обычно и передаёт дело слою resilience |
! 标准输入不是终端,没人能回答提问 | Запуск в pipe или CI | Добавьте --timeout 0, чтобы система решала сама и не ждала человека |
flower setup запускается и спрашивает «что делать» | В _CMDS забыли setup (cli.py:937) | Правьте ~/.config/flower/.env напрямую, см. выше «Когда нужно перенастроить» |
Дальше¶
- Быстрый старт — зайти в каталог проекта и довести до конца первую настоящую задачу.
- Конфигурация — все переменные окружения, приоритет credentials, синтаксис
.env, что остаётся на диске. - Командная строка — все подкоманды и флаги.
- Развёртывание — запуск в контейнере, раздача доменных возможностей через plugin.
- Глоссарий — точное значение каждого термина в документации.