opencrabs 0.3.33

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

intent_phrases = [
    "now let me ",
    "now update ",
    "now fix ",
    "now add ",
    "now bump ",
    "now run ",
    "now check ",
    "now read ",
    "now commit",
    "now amend",
    "now updating",
    "now fixing",
    "now committing",
    "now amending",
    "now pushing",
    "now cherry-picking",
    "now merging",
    "now rebasing",
    "now deploying",
    "now building",
    "now testing",
    "now checking",
    "now applying",
    "now restarting",
    "now creating",
    "now writing",
    "now editing",
    "now adding",
    "now removing",
    "now deleting",
    "now reading",
    "now running",
    "now starting",
    "now finishing",
    "now finalizing",
    "now installing",
    "now configuring",
    "now wiring",
    "now setting up",
    "i'll update",
    "i'll fix",
    "i'll modify",
    "i'll create",
    "i'll write",
    "i'll edit",
    "i'll add",
    "i'll change",
    "i'll replace",
    "i'll commit",
    "i'll amend",
    "i'll proceed",
    "i'll start",
    "i'll finish",
    "i'll run",
    "i'll check",
    "i'll see",
    "i'll look",
    "i'll prepare",
    "i'll take a look",
    "i will proceed",
    "let me update",
    "let me fix",
    "let me modify",
    "let me create",
    "let me write",
    "let me edit",
    "let me add",
    "let me change",
    "let me commit",
    "let me amend",
    "let me see",
    "let me check",
    "let me look",
    "let me read",
    "let me examine",
    "let me verify",
    "let me inspect",
    "let me review",
    "let me take",
    "let me actually",
    "let me prepare",
    "let me proceed",
    "let me start",
    "let me first",
    "let me finish",
    "let me finalize",
    "let me run",
    "let's update",
    "let's fix",
    "let's modify",
    "let's create",
    "let's write",
    "let's edit",
    "let's add",
    "let's change",
    "let's replace",
    "let's commit",
    "let's amend",
    "let's see",
    "let's check",
    "let's look",
    "let's read",
    "let's examine",
    "let's verify",
    "let's inspect",
    "let's review",
    "let's take a look",
    "let's prepare",
    "let's proceed",
    "let's start",
    "let's first",
    "let's finish",
    "let's finalize",
    "let's run",
    "let's dig",
    "let's investigate",
    "let's explore",
    "let's search",
    "let's find",
    "let's gather",
    "let's pull",
    "let's grab",
    "let's get",
    "let's fetch",
    "let's query",
    "let's scan",
    "let's hunt",
    "let's trace",
    "let's track",
    "let's look into",
    "let's check into",
    "let's find out",
    "let's dig into",
    "let me dig",
    "let me investigate",
    "let me explore",
    "let me search",
    "let me find",
    "let me gather",
    "let me pull",
    "let me grab",
    "let me get",
    "let me fetch",
    "let me query",
    "let me scan",
    "let me hunt",
    "let me trace",
    "let me track",
    "let me look into",
    "let me check into",
    "let me find out",
    "let me dig into",
    "i'll dig",
    "i'll investigate",
    "i'll explore",
    "i'll search",
    "i'll find",
    "i'll gather",
    "i'll pull",
    "i'll grab",
    "i'll get",
    "i'll fetch",
    "i'll query",
    "i'll scan",
    "i'll hunt",
    "i'll trace",
    "i'll track",
    "i'll look into",
    "i'll check into",
    "i'll find out",
    "i'll dig into",
    "let me build",
    "let me push",
    "let me deploy",
    "let me sync",
    "let me migrate",
    "let me apply",
    "let me install",
    "let me configure",
    "let me set up",
    "let me wire",
    "let's build",
    "let's push",
    "let's deploy",
    "let's sync",
    "let's migrate",
    "let's apply",
    "let's install",
    "let's configure",
    "let's set up",
    "let's wire",
    "i'll build",
    "i'll push",
    "i'll deploy",
    "i'll sync",
    "i'll migrate",
    "i'll apply",
    "i'll install",
    "i'll configure",
    "i'll set up",
    "i'll wire",
    "now build",
    "now push",
    "now deploy",
    "now sync",
    "now migrate",
    "now apply",
    # Deferment stalls — "I need to X", "I have to X", "I must X" —
    # 2026-05-28: model emitted "I need to read the actual code before
    # writing concrete task descriptions." and the existing list didn't
    # cover that shape. These are pre-action narration just like
    # "let me X" / "I'll X" and never produced a tool call in the same
    # turn.
    "i need to read",
    "i need to check",
    "i need to look",
    "i need to examine",
    "i need to inspect",
    "i need to verify",
    "i need to review",
    "i need to understand",
    "i need to see",
    "i need to find",
    "i need to investigate",
    "i need to explore",
    "i need to search",
    "i need to gather",
    "i need to fetch",
    "i need to update",
    "i need to fix",
    "i need to modify",
    "i need to create",
    "i need to write",
    "i need to edit",
    "i need to add",
    "i need to remove",
    "i need to delete",
    "i need to run",
    "i need to install",
    "i need to configure",
    "i need to dig",
    "i have to read",
    "i have to check",
    "i have to look",
    "i have to verify",
    "i have to update",
    "i have to fix",
    "i have to write",
    "i have to investigate",
    "i must read",
    "i must check",
    "i must verify",
    "i must update",
    "i must fix",
    "i should read",
    "i should check",
    "i should look",
    "i should verify",
    "i should update",
    "i should fix",
    "i should investigate",
    "i should examine",
    "i should review",
]

action_verbs = [
    "pushed",
    "deployed",
    "merged",
    "migrated",
    "committed",
    "rebased",
    "tagged",
    "released",
    "published",
    "synced",
    "rolled back",
    "rolled out",
]

completion_claims = [
    "here's what changed",
    "here's what's changed",
    "here are the changes",
    "here's what i did",
    "here is what i did",
    "changes applied",
    "updated the file",
    "updated the code",
    "updated src/",
    "modified the file",
    "modified src/",
    "fixed the file",
    "fixed the bug",
    "fixed the issue",
    "fixed src/",
    "created the file",
    "wrote the file",
    "everything is updated",
    "i've made the changes",
    "i've completed",
    "i've finished",
    "i've updated",
    "i've written",
    "i've created",
    "i've saved",
    "i've modified",
    "i've fixed",
    "i've replaced",
    "i've amended",
    "i've committed",
    "i've bumped",
    "i've made all",
    "all changes have been",
    "all files have been",
    "the changes have been applied",
    "changes are now in place",
    "the file now contains",
    "the file has been",
    "file updated",
    "file created",
    "file saved",
    "changes saved",
    "amended.",
    "committed.",
    "amended the commit",
    "bumped the version",
    "version bumped",
]

# Regex patterns — all use (?im) for case-insensitive multiline matching.

line_start_re = "(?im)^[\\s\\-*•>]*(?:(?:ok|okay|sure|alright|right|hmm|well|actually|so)\\s*,?\\s+)?(?:now\\s+)?(?:let\\s+me|i['\u2019]ll|let['\u2019]s|i\\s+need\\s+to|i\\s+have\\s+to|i\\s+must|i\\s+should|i\\s+want\\s+to|i['\u2019]d\\s+need\\s+to)\\s+\\w"

gerund_re = "(?im)(?:^|[.!?]\\s+)\\s*now\\s+(?:updating|fixing|committing|amending|pushing|cherry-picking|merging|rebasing|deploying|building|testing|checking|applying|restarting|creating|writing|editing|adding|removing|deleting|reading|running|starting|finishing|finalizing|installing|configuring|wiring)\\b"

trailing_colon_re = "(?im)(?:^|\\n)\\s*(?:let\\s+me|i'll|i\\s+will|now\\s+let\\s+me|now\\s+i'll)\\s+\\w[^:\\n]{0,80}:\\s*$"

now_imperative_re = "(?m)^[\\s\\-*]*(?:now\\s+(?:let\\s+me\\s+)?|let\\s+me\\s+)\\w"

numbered_steps_re = "(?m)^\\s*\\d+\\.\\s+(?:update|fix|modify|create|write|edit|add|change|remove|delete|check|read|run|bump|amend|verify|test|deploy|install)"

past_tense_standalone_re = "(?m)^[\\s\\-*]*(?:amended|updated|fixed|modified|created|written|saved|deleted|removed|replaced|bumped|deployed|committed)[.!]"

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+`"