diff --git a/AGENTS.md b/AGENTS.md index 81daee0..9183b4a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,11 +1,5 @@ -# Правила для агентов (Agent Instructions) +# Правила текущего проекта (Project-specific Instructions) -Данные правила применяются ко всем агентам (Claude, Gemini, DeepSeek и др.), работающим в этом проекте. +Данные правила применяются ко всем агентам, работающим конкретно в этом репозитории. -1. **Никаких самостоятельных коммитов (No unauthorized commits):** ЗАПРЕЩЕНО выполнять команду `git commit`, если пользователь прямо и недвусмысленно не попросил об этом. Финальный коммит делает пользователь или вы — строго по его команде. - -2. **Полная перегенерация standalone-скриптов при запуске сетап-скрипта (Full regeneration of standalone scripts on setup run):** При каждом запуске `ai-setup.sh` все генерируемые скрипты в `~/.local/bin/` (`ai-gpt`, `ai-deepseek`, `ai-kimi`, `ai-gemini`, `ai-api-helpers.sh`, `ai-claude`) должны быть **полностью перезаписаны** актуальными версиями. Запрещено выполнять слияние (merge) старого и нового содержимого или дополнение (append). Скрипт обязан привести все генерируемые файлы к эталонному виду, однозначно определяемому текущей конфигурацией. - -3. **Изменения должны быть видны через `git diff` (Changes must be visible via plain git diff):** Оставляйте изменённые файлы в рабочей директории (unstaged), чтобы пользователь мог увидеть их, просто написав `git diff` в консоли. Не добавляйте их в индекс (`git add`) без прямой команды, так как это скрывает изменения от стандартной команды `git diff`. - -4. **Отвечать на русском языке (Respond in Russian):** Все ответы, пояснения, вопросы и комментарии — на русском языке, если пользователь явно не попросит иначе. +1. **Полная перегенерация standalone-скриптов при запуске сетап-скрипта (Full regeneration of standalone scripts on setup run):** При каждом запуске `ai-setup.sh` все генерируемые скрипты в `~/.local/bin/` (`ai-gpt`, `ai-deepseek`, `ai-kimi`, `ai-gemini`, `ai-api-helpers.sh`, `ai-claude`) должны быть **полностью перезаписаны** актуальными версиями. Запрещено выполнять слияние (merge) старого и нового содержимого или дополнение (append). Скрипт обязан привести все генерируемые файлы к эталонному виду, однозначно определяемому текущей конфигурацией. diff --git a/ai-setup.sh b/ai-setup.sh index 235e923..8bf3af0 100755 --- a/ai-setup.sh +++ b/ai-setup.sh @@ -4,7 +4,7 @@ # Запуск: bash ai-setup.sh # ============================================================ -CONFIG_DIR="$HOME/.config/claude-launcher" +CONFIG_DIR="$HOME/.config/ai-setup" BIN_DIR="$HOME/.local/bin" NPM_GLOBAL="$HOME/.npm-global" PROXY_BIN="$BIN_DIR/claude-code-proxy" @@ -191,6 +191,30 @@ fi # ── 6. Папка для конфигов ──────────────────────────────────── mkdir -p "$CONFIG_DIR" +# ── 6.5. Генерация глобальных правил агентов ───────────────── +info "Обновляю глобальные правила агентов..." +cat > "$CONFIG_DIR/global_rules.md" << 'RULESEOF' +# Глобальные правила для всех ИИ-агентов + +Данные правила имеют наивысший приоритет при любых взаимодействиях и выполнении задач: + +1. **Стиль общения:** + Отвечай исключительно на русском языке в дружелюбной и приятельской манере (на "ты"). Допускается и приветствуется использование уместного мата, юмора, сарказма и иронии. Общайся как живой напарник-программист, а не как сухой робот. + +2. **Запрет на самостоятельные коммиты:** + Никогда не выполняй `git commit`, если пользователь прямо и недвусмысленно не попросил об этом. Финальный коммит всегда остается за пользователем, либо делается строго по его команде. + +3. **Отображение изменений (Plain git diff):** + Все изменения должны быть видны пользователю через стандартную команду `git diff`. Оставляй изменённые файлы в рабочей директории (unstaged). Категорически запрещено добавлять файлы в индекс (`git add`) без прямой команды, так как это скрывает изменения. + +4. **Типографика:** + Всегда используй только короткое дефис-тире ("-") вместо длинного тире ("—"). + +5. **Контекст проекта:** + При начале работы обращай пристальное внимание на содержимое всех предоставленных `.md` файлов проекта (они передаются тебе автоматически), чтобы сразу погрузиться в контекст и специфику текущего репозитория. +RULESEOF +success "Глобальные правила обновлены: $CONFIG_DIR/global_rules.md" + # ── 7. Очистка старых функций из .bashrc / .zshrc ─────────── clean_rc() { local rc_file="$1" @@ -400,6 +424,17 @@ _open_browser() { elif command -v sensible-browser &>/dev/null; then sensible-browser "$url" 2>/dev/null else echo "Откройте вручную: $url"; fi } + +_build_ai_sys_prompt() { + local global_rules="$HOME/.config/ai-setup/global_rules.md" + local sp="=== ГЛОБАЛЬНЫЕ ПРАВИЛА ===\n" + [ -f "$global_rules" ] && sp+="$(cat "$global_rules" 2>/dev/null)\n\n" + sp+="=== ПРАВИЛА ПРОЕКТА ===\n" + for f in *.md; do + [ -f "$f" ] && sp+="\n--- Файл $f ---\n$(cat "$f")\n" + done + echo -e "$sp" +} HELPEREOF chmod +x "$HELPERS_FILE" @@ -407,6 +442,7 @@ chmod +x "$HELPERS_FILE" cat > "$BIN_DIR/ai-gpt" << 'GPTEOF' #!/usr/bin/env bash # ai-gpt — запуск нативного OpenAI Codex +source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true codex_bin="$HOME/.npm-global/bin/codex" [ ! -f "$codex_bin" ] && codex_bin="$(command -v codex 2>/dev/null)" @@ -423,7 +459,8 @@ if [ -z "$codex_bin" ] || [ ! -f "$codex_bin" ]; then exit 1 fi -exec "$codex_bin" --dangerously-bypass-approvals-and-sandbox "$@" +SYS_PROMPT=$(_build_ai_sys_prompt) +exec "$codex_bin" --dangerously-bypass-approvals-and-sandbox --system-prompt "$SYS_PROMPT" "$@" GPTEOF chmod +x "$BIN_DIR/ai-gpt" @@ -433,7 +470,7 @@ cat > "$BIN_DIR/ai-deepseek" << 'DEEPSEEKEOF' #!/usr/bin/env bash source ~/.local/bin/ai-api-helpers.sh -key_file="$HOME/.config/claude-launcher/deepseek_key" +key_file="$HOME/.config/ai-setup/deepseek_key" api_key="" reauth=0 @@ -493,7 +530,8 @@ ANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-v4-pro \ ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-v4-flash \ CLAUDE_CODE_SUBAGENT_MODEL=deepseek-v4-flash \ CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \ -claude --dangerously-skip-permissions "$@" +SYS_PROMPT=$(_build_ai_sys_prompt) +claude --dangerously-skip-permissions --system-prompt "$SYS_PROMPT" "$@" DEEPSEEKEOF chmod +x "$BIN_DIR/ai-deepseek" @@ -526,7 +564,7 @@ case "${1:-}" in esac config_file="${KIMI_CODE_HOME:-$HOME/.kimi-code}/config.toml" -key_file="$HOME/.config/claude-launcher/kimi_key" +key_file="$HOME/.config/ai-setup/kimi_key" model_alias="artemox/kimi-k2.6" model_name="kimi-k2.6" base_url="https://api.artemox.com/v1" @@ -674,7 +712,8 @@ chmod 600 "$key_file" _write_artemox_config echo "Kimi настроен на Artemox: $model_alias" -exec "$kimi_bin" --yolo "$@" +SYS_PROMPT=$(_build_ai_sys_prompt) +exec "$kimi_bin" --yolo --system-prompt "$SYS_PROMPT" "$@" KIMIEOF chmod +x "$BIN_DIR/ai-kimi" @@ -700,7 +739,23 @@ if [ -z "$agy_bin" ] || [ ! -f "$agy_bin" ]; then exit 1 fi -exec "$agy_bin" --dangerously-skip-permissions "$@" +source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true +SYS_PROMPT=$(_build_ai_sys_prompt) + +if [ $# -eq 0 ]; then + exec "$agy_bin" --dangerously-skip-permissions -i "$SYS_PROMPT\n\nПрочитай правила выше и коротко подтверди готовность к работе." +else + ARGS=("$@") + INJECTED=0 + for i in "${!ARGS[@]}"; do + if [[ "${ARGS[$i]}" == "-i" || "${ARGS[$i]}" == "-p" || "${ARGS[$i]}" == "--prompt-interactive" || "${ARGS[$i]}" == "--print" ]]; then + ARGS[$((i+1))]="$SYS_PROMPT\n\nЗапрос пользователя:\n${ARGS[$((i+1))]}" + INJECTED=1 + break + fi + done + exec "$agy_bin" --dangerously-skip-permissions "${ARGS[@]}" +fi GEMINIEOF chmod +x "$BIN_DIR/ai-gemini" @@ -708,7 +763,9 @@ chmod +x "$BIN_DIR/ai-gemini" cat > "$BIN_DIR/ai-claude" << 'CLAUDEEOF' #!/usr/bin/env bash # ai-claude — запуск оригинального Claude Code (Anthropic) -exec claude --dangerously-skip-permissions "$@" +source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true +SYS_PROMPT=$(_build_ai_sys_prompt) +exec claude --dangerously-skip-permissions --system-prompt "$SYS_PROMPT" "$@" CLAUDEEOF chmod +x "$BIN_DIR/ai-claude"