Skip to content
Development
Hook

Hooks

What optimus runs automatically, and when. A hook is a command Claude Code fires at a fixed moment, without you asking for it.

From plugin
optimus
7519 skills2 agents1 hook
Install
> /plugin marketplace add oprogramadorreal/optimus-claude
> /plugin install optimus@optimus-claude

Ships with optimus. Installing the plugin gets these hooks.

What fires, and when

SessionStart

Fires once when a session begins, and again after a context compaction. It is where a plugin sets up its environment, or restores state the compaction dropped.

  • Matchesstartup|resume|clear|compactbash "${CLAUDE_PLUGIN_ROOT}/hooks/session-start"
Read hooks/hooks.json

Where it lives

  • hooks/session-start.ps1GitHub
    Read the script
    # Native Windows entry point for Codex. Launch Bash directly: Git shell aliases
    # change cwd, and mixing Git's bundled shell with another Bash can lose env vars.
    $ErrorActionPreference = 'Stop'
    [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding $false
    
    function Find-NativeBash {
        if ($env:CLAUDE_CODE_GIT_BASH_PATH) {
            if (-not (Test-Path -LiteralPath $env:CLAUDE_CODE_GIT_BASH_PATH -PathType Leaf)) {
                throw 'CLAUDE_CODE_GIT_BASH_PATH does not point to a Bash executable.'
            }
            return $env:CLAUDE_CODE_GIT_BASH_PATH
        }
    
        # Inspect paths without running Git: a broken repository config must not
        # prevent startup, and a minimal Git installation may contain no Bash.
        foreach ($git in @(Get-Command git.exe -All -CommandType Application -ErrorAction SilentlyContinue)) {
            $gitDir = Split-Path -Parent $git.Source
            foreach ($relative in @('../bin/bash.exe', '../usr/bin/bash.exe', '../../bin/bash.exe', '../../usr/bin/bash.exe')) {
                $candidate = [IO.Path]::GetFullPath((Join-Path $gitDir $relative))
                if (Test-Path -LiteralPath $candidate -PathType Leaf) {
                    return $candidate
                }
            }
        }
    
        # System32's bash.exe is a WSL launcher, not an interpreter for native paths.
        foreach ($bash in @(Get-Command bash.exe -All -CommandType Application -ErrorAction SilentlyContinue)) {
            if ($bash.Source -notmatch '\\Windows\\(?:System32|SysWOW64|Sysnative)\\') {
                return $bash.Source
            }
        }
    
        foreach ($base in @($env:ProgramFiles, ${env:ProgramFiles(x86)}, "$env:LOCALAPPDATA/Programs")) {
            if ($base) {
                $candidate = Join-Path $base 'Git/bin/bash.exe'
                if (Test-Path -LiteralPath $candidate -PathType Leaf) {
                    return $candidate
                }
            }
        }
        throw 'Optimus needs native Bash. Install Git for Windows or set CLAUDE_CODE_GIT_BASH_PATH to bash.exe.'
    }
    
    $bashPath = Find-NativeBash
    $bashDir = Split-Path -Parent $bashPath
    $bashRoot = Split-Path -Parent $bashDir
    if ((Split-Path -Leaf $bashRoot) -eq 'usr') {
        $bashRoot = Split-Path -Parent $bashRoot
    }
    # Use utilities from the selected Bash installation, including find rather than
    # Windows find.exe. Keep the caller's PATH afterward for project tools.
    $toolPaths = @(
        (Join-Path $bashRoot 'usr/bin')
        (Join-Path $bashRoot 'bin')
        (Join-Path $bashRoot 'cmd')
    ) | Where-Object { Test-Path -LiteralPath $_ -PathType Container }
    $env:PATH = (@($toolPaths) + @($env:PATH)) -join [IO.Path]::PathSeparator
    
    $scriptPath = (Join-Path $PSScriptRoot 'session-start').Replace('\', '/')
    & $bashPath $scriptPath
    exit $LASTEXITCODE
    

Read the script before you install anything that runs on your machine. This is the one part of a plugin that acts without being asked.

Ships withoptimus

Primes your project for peak Claude Code performance

Get the whole plugin
Stats
75
Stars
14
Forks
Active
Maintenance
Python
Language
MIT
License
13m ago
Last commit
8mo ago
Created

Repo: oprogramadorreal/optimus-claude