opencrabs 0.3.33

The autonomous, self-improving AI agent. Single Rust binary. Every channel. Install with: cargo install opencrabs
Documentation
# Russian phantom-detection configuration
# Phrases are lower-case. Matched against lowercased response text.

intent_phrases = [
    "давайте проверю",
    "давайте посмотрим",
    "давайте исправим",
    "давайте обновим",
    "давайте создадим",
    "давайте изменим",
    "давайте добавим",
    "давайте удалим",
    "давайте запустим",
    "давайте проверим",
    "давайте прочитаем",
    "давайте найдём",
    "давайте найдём",
    "давайте изучим",
    "давайте исследуем",
    "я проверю",
    "я обновлю",
    "я исправлю",
    "я создам",
    "я изменю",
    "я добавлю",
    "я удалю",
    "я запущу",
    "я прочитаю",
    "я найду",
    "я изучу",
    "я исследую",
    "я посмотрю",
    "сейчас проверю",
    "сейчас обновлю",
    "сейчас исправлю",
    "сейчас создам",
    "сейчас изменю",
    "сейчас добавлю",
    "сейчас удалю",
    "сейчас запущу",
    "сейчас прочитаю",
    "сейчас найду",
    "сейчас изучу",
    "теперь проверю",
    "теперь обновлю",
    "теперь исправлю",
    "теперь создам",
    "теперь изменю",
    "теперь добавлю",
    "теперь удалю",
    "теперь запущу",
    "теперь прочитаю",
    "теперь найду",
    "попробую проверить",
    "попробую обновить",
    "попробую исправить",
    "попробую создать",
    "попробую изменить",
    "давай проверю",
    "давай обновлю",
    "давай исправлю",
    "давай создадим",
    "давай изменим",
    "давай добавим",
    "давай удалим",
    "давай запустим",
    "давай прочитаем",
    "давай найдём",
    "давай изучим",

    # Deferment stalls — "мне нужно X" / "мне надо X" / "я должен X"
    # 2026-05-28: Russian parity with the English "i need to X" entries.
    "мне нужно прочитать",
    "мне нужно проверить",
    "мне нужно посмотреть",
    "мне нужно изучить",
    "мне нужно понять",
    "мне нужно увидеть",
    "мне нужно найти",
    "мне нужно исследовать",
    "мне нужно обновить",
    "мне нужно исправить",
    "мне нужно изменить",
    "мне нужно создать",
    "мне нужно написать",
    "мне нужно добавить",
    "мне нужно удалить",
    "мне надо прочитать",
    "мне надо проверить",
    "мне надо посмотреть",
    "мне надо обновить",
    "мне надо исправить",
    "я должен прочитать",
    "я должен проверить",
    "я должен посмотреть",
    "я должен исправить",
    "я должна прочитать",
    "я должна проверить",
    "мне следует прочитать",
    "мне следует проверить",
    "мне следует посмотреть",
    "нужно прочитать",
    "нужно проверить",
    "нужно посмотреть",
    "нужно обновить",
    "нужно исправить",
]

action_verbs = [
    "проверил",
    "обновил",
    "исправил",
    "создал",
    "изменил",
    "добавил",
    "удалил",
    "запустил",
    "прочитал",
    "нашёл",
    "изучил",
    "исследовал",
    "посмотрел",
    "запушил",
    "задеплоил",
    "смерджил",
    "закоммитил",
    "отредактировал",
    "написал",
    "собрал",
    "протестировал",
    "проверил",
]

completion_claims = [
    "обновил файл",
    "изменил файл",
    "исправил файл",
    "создал файл",
    "написал файл",
    "всё о��новлено",
    "всё исправлено",
    "всё готово",
    "изменения применены",
    "файл обновлён",
    "файл создан",
    "файл изменён",
    "код обновлён",
    "код исправлен",
    "баг исправлен",
    "ошибка исправлена",
    "закоммичено",
    "запушено",
    "задеплоено",
    "смерджено",
    "сделано",
    "готово",
]

line_start_re = "(?im)^[\\s\\-*•>]*(?:(?:ладно|хорошо|ну|ок|окей|так)\\s*,?\\s+)?(?:сейчас|теперь)?(?:давайте|давай|я|мне нужно|мне надо|я должен|я должна|мне следует|нужно)\\s+\\w"

gerund_re = "(?im)(?:^|[.!?]\\s+)\\s*(?:сейчас|теперь)\\s+(?:обновляю|исправляю|создаю|изменяю|добавляю|удаляю|запускаю|читаю|ищу|изучаю|проверяю)\\b"

trailing_colon_re = "(?im)(?:^|\\n)\\s*(?:давайте|давай|я|сейчас)\\s+\\w[^:\\n]{0,80}:\\s*$"

now_imperative_re = "(?m)^[\\s\\-*]*(?:сейчас|теперь)\\s+(?:давайте|давай|я)?\\s+\\w"

numbered_steps_re = "(?m)^\\s*\\d+\\.\\s+(?:обновить|исправить|создать|изменить|добавить|удалить|проверить|прочитать|запустить)"

past_tense_standalone_re = "(?m)^[\\s\\-*]*(?:обновил|исправил|создал|изменил|добавил|удалил|запустил|прочитал|нашёл|изучил|запушил|задеплоил|смерджил|закоммитил)[.!]"

path_re = "(?:^|[\\s`(])(?:\\./)?[a-zA-Zа-яА-Я_][\\w\\-]*/[\\w\\-/]*\\.\\w{1,6}(?:[\\s`),:;]|$)"

ext_re = "(?:^|[\\s`(])[\\w\\-]+\\.(?:rs|py|ts|tsx|js|jsx|go|sh|toml|yaml|yml|json|md)(?:[\\s`),:;]|$)"

backtick_code_re = "`[a-zA-Z_]\\w+`"