﻿---
title: "压缩后要补上下文，用 SessionStart 的 compact 匹配"
summary: "matcher 写成 ^compact$。自动压缩发生在一轮中间时，钩子给出的 additionalContext 会立刻送进续写，不必等下一句用户输入。"
category: hooks
level: advanced
surfaces: [cli]
tags: ["hooks", "/compact", "SessionStart"]
canonical: /tips/hooks-after-compact/
---

# 压缩后要补上下文，用 SessionStart 的 compact 匹配

matcher 写成 ^compact$。自动压缩发生在一轮中间时，钩子给出的 additionalContext 会立刻送进续写，不必等下一句用户输入。

`SessionStart` 的 `source` 是 `startup`、`resume`、`clear` 或 `compact`。仓库根下的示例：

```toml
[[hooks.SessionStart]]
matcher = "^compact$"

[[hooks.SessionStart.hooks]]
type = "command"
command = '/usr/bin/python3 "$(git rev-parse --show-toplevel)/.codex/hooks/session_start.py"'
additionalContextLimit = 5000
```

压缩后、下一次模型请求前会跑。自动 compact 插在一轮中间时也一样。钩子返回 `continue: false` 会结束这一轮、不再发请求。

压缩前后还有 `PreCompact` / `PostCompact`，`matcher` 对 `manual` 或 `auto`。`PreCompact` 返回 `continue: false` 会取消压缩。

命令钩子默认会堵住触发它的操作。`async = true` 可放到后台；`SessionEnd` 永远同步，输出也不能转向 agent。相对路径 `.codex/hooks/...` 在子目录启动会漂，用 git 根锚定。

## 来源

- [OpenAI · Hooks](https://learn.chatgpt.com/docs/hooks)
