Development
Hook
Hooks
What aegis runs automatically, and when. A hook is a command Claude Code fires at a fixed moment, without you asking for it.
Install
> /plugin marketplace add GanyuanRan/Aegis > /plugin install aegis@aegis-dev
Ships with aegis. 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.
- Matches
startup|clear|compact"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.cmd" session-start
Where it lives
- hooks/copilot-session-start.ps1GitHub
Read the script
#!/usr/bin/env pwsh $ErrorActionPreference = "Stop" $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $repoRoot = Split-Path -Parent $scriptDir $sessionStart = Join-Path $scriptDir "session-start" $homeDirectory = if ($env:HOME) { $env:HOME } elseif ($env:USERPROFILE) { $env:USERPROFILE } else { [Environment]::GetFolderPath("UserProfile") } $legacySkillsDir = Join-Path $homeDirectory ".config/aegis/skills" $usingAegisPath = Join-Path $repoRoot "skills/using-aegis/SKILL.md" $env:AEGIS_HOOK_JSON_STYLE = "compact" $env:COPILOT_CLI = "1" Remove-Item Env:CLAUDE_PLUGIN_ROOT -ErrorAction SilentlyContinue function Get-AegisConfigValue { param( [string]$Key, [string[]]$AllowedValues, [string]$DefaultValue ) $environmentName = "AEGIS_{0}" -f $Key.ToUpper() $configured = [Environment]::GetEnvironmentVariable($environmentName) $configFile = Join-Path $homeDirectory ".config/aegis/config.toml" if ([string]::IsNullOrWhiteSpace($configured) -and (Test-Path $configFile)) { $matches = Select-String -Path $configFile -Pattern "^\s*$Key\s*=\s*(.+)$" if ($matches) { $configured = $matches[-1].Matches[0].Groups[1].Value } } if (-not [string]::IsNullOrWhiteSpace($configured)) { $configured = ($configured -replace "#.*$", "").Trim() $configured = $configured.Trim('"') $configured = $configured.Trim("'") $configured = $configured.Trim() } if ($AllowedValues -contains $configured) { return $configured } return $DefaultValue } function Write-CopilotFallbackBootstrap { if ((Get-AegisConfigValue -Key "activation_mode" -AllowedValues @("auto", "explicit") -DefaultValue "auto") -eq "explicit") { Write-Output "{}" return } $tddMode = Get-AegisConfigValue -Key "tdd_mode" -AllowedValues @("auto", "off") -DefaultValue "off" try { $usingAegisContent = Get-Content -LiteralPath $usingAegisPath -Raw } catch { $usingAegisContent = "Error reading using-aegis skill" } $warningMessage = if (Test-Path $legacySkillsDir) { "`n`n<important-reminder>IN YOUR FIRST REPLY AFTER SEEING THIS MESSAGE YOU MUST TELL THE USER:⚠️ **WARNING:** Aegis no longer reads custom skills from ~/.config/aegis/skills. Move them to the current host's supported skills surface (for example ~/.claude/skills, ~/.copilot/skills, ~/.agents/skills, or repository .github/skills as appropriate). To make this message go away, remove ~/.config/aegis/skills</important-reminder>" } else { "" } $sessionContext = @" <EXTREMELY_IMPORTANT> You have Aegis. Aegis TDD mode: $tddMode. off is the default and disables automatic TDD while verification-before-completion still applies; auto routes strict TDD only when risk warrants. **Below is the compact 'aegis:using-aegis' hot path. For task-specific workflows, use the Skill tool to load only the relevant skill or reference:** $usingAegisContent$warningMessage </EXTREMELY_IMPORTANT> "@ @{ additionalContext = $sessionContext } | ConvertTo-Json -Compress | Write-Output } $gitBash = $null if ($env:AEGIS_COPILOT_SKIP_BASH -ne "1") { $gitBash = @( "C:\Program Files\Git\bin\bash.exe", "C:\Program Files (x86)\Git\bin\bash.exe" ) | Where-Object { Test-Path $_ } | Select-Object -First 1 } if ($gitBash) { & $gitBash $sessionStart exit $LASTEXITCODE } if ($env:AEGIS_COPILOT_SKIP_BASH -ne "1" -and (Get-Command bash -ErrorAction SilentlyContinue)) { & bash $sessionStart exit $LASTEXITCODE } Write-CopilotFallbackBootstrap exit 0
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 withaegis
Aegis Method Pack Make your AI coding agent trustworthy: fewer reworks, safer changes, proof before "done". English · 中文 · Fast-Track Playbook · 速通秘籍 Stop babysitting your agent.
Get the whole plugin

