如何用 Session Logger hook 记录 Copilot coding agent 会话的全部活动?
awesome-copilot 仓库中的 Session Logger hook 用于把 GitHub Copilot coding agent 的会话活动落盘成 JSON 日志:记录会话开始与结束时间(含工作目录上下文)、用户提交 prompt 的事件,并支持通过环境变量关闭全部记录。本文按 hooks/session-logger/README.md 与 docs/README.hooks.md 的说明,走一遍安装、日志位置与隐私保护的完整路径。
Session Logger 记录了哪些事件
根据 hooks/session-logger/hooks.json,这个 hook 在 Copilot coding agent 会话中监听三个事件,每个事件触发一个 shell 脚本,超时时间均为 5 秒(timeoutSec: 5):
| 事件 | 触发的脚本 | 写入位置 |
|---|---|---|
sessionStart |
log-session-start.sh | logs/copilot/session.log |
sessionEnd |
log-session-end.sh | logs/copilot/session.log |
userPromptSubmitted |
log-prompt.sh | logs/copilot/prompts.log |
三个脚本都会先检查 SKIP_LOGGING 环境变量,若为 true 则直接 exit 0 不写任何日志。docs/README.hooks.md 说明 hook 会在 Copilot coding agent 会话期间自动执行,因此不需要你手动调用这些脚本。
需要留意的一点:log-session-start.sh 的脚本正文直接调用 jq 来生成 JSON 行(jq -Rn --arg timestamp ...),所以运行环境需要有 jq 可用;另外两个脚本用 echo 拼接 JSON,不依赖 jq。
安装步骤
按 hooks/session-logger/README.md 的 Installation 部分,在你的目标仓库中依次执行:
- 把 Session Logger 的 hook 目录复制到你仓库的
.github/hooks/下:
cp -r hooks/session-logger .github/hooks/
这条命令的语义是把 awesome-copilot 仓库里的 hooks/session-logger/ 文件夹复制到当前仓库的 .github/hooks/ 目录,复制完成后脚本中的相对路径(如 .github/hooks/session-logger/log-session-start.sh)才能与 hooks.json 中的配置对上。
- 创建日志目录(脚本本身也会
mkdir -p logs/copilot,这一步是 README 明确要求的前置操作):
mkdir -p logs/copilot
- 保证脚本可执行:
chmod +x .github/hooks/session-logger/*.sh
chmod +x 会修改本仓库内脚本文件的执行权限,只影响新复制进来的这三个 .sh 文件,这是 hook 能被执行的必要前提。
- 把 hook 配置提交到仓库的默认分支(docs/README.hooks.md 同样要求 hook 提交到默认分支后才会随会话自动执行)。
日志内容与格式验证
安装完成后,hook 的日志文件位于仓库根目录下的 logs/copilot/:
- 会话事件写入
logs/copilot/session.log,包括sessionStart(带cwd字段,即会话的工作目录)和sessionEnd; - prompt 事件写入
logs/copilot/prompts.log,每条记录包含时间戳、事件名和日志级别。
hooks/session-logger/README.md 给出的示例日志(文档示例,实际时间戳与你项目的路径会不同):
{"timestamp":"2024-01-15T10:30:00Z","event":"sessionStart","cwd":"/workspace/project"}
{"timestamp":"2024-01-15T10:35:00Z","event":"sessionEnd"}
prompt 日志由 log-prompt.sh 按固定格式追加,级别取 LOG_LEVEL 环境变量、缺省为 INFO:
echo "{\"timestamp\":\"$TIMESTAMP\",\"event\":\"userPromptSubmitted\",\"level\":\"${LOG_LEVEL:-INFO}\"}" >> logs/copilot/prompts.log
验证方式:在一次 Copilot coding agent 会话结束后查看 logs/copilot/session.log 是否出现 sessionStart 与 sessionEnd 两行 JSON 记录、logs/copilot/prompts.log 是否随 prompt 提交出现 userPromptSubmitted 记录。另外,log-session-start.sh 与 log-session-end.sh 执行成功时会分别输出 📝 Session logged 和 📝 Session end logged,可作为脚本实际跑起来的直接信号。
日志数据的隐私与保护
Session Logger 生成的日志属于会话数据,README 的 Privacy & Security 一节给出了三项保护措施,按需启用:
- 避免误提交:把
logs/加入.gitignore,防止会话数据被提交进仓库。 - 降低记录粒度:设置
LOG_LEVEL=ERROR只记录错误级别。注意 hooks/session-logger/hooks.json 中userPromptSubmitted事件的env已显式设置"LOG_LEVEL": "INFO",若要改用其他级别,需要同步修改该配置项。 - 完全关闭记录:设置环境变量
SKIP_LOGGING=true,三个脚本都会跳过写入并直接退出。
README 同时说明日志仅存储在本地(Logs are stored locally only),hook 本身不会把日志发送到外部服务。
边界与限制
- hook 只在 Copilot coding agent 会话中被触发,普通 IDE 使用场景不会产生这类日志;
- 每个事件的执行超时为 5 秒,写日志操作若超出会中断(见 hooks/session-logger/hooks.json 的
timeoutSec); userPromptSubmitted脚本目前只记录时间戳、事件名和级别,README 注明 prompt 详情需自行从 stdin 输入中解析(脚本注释you can parse INPUT for more details)。
如果需要审计之外的能力(如会话结束自动提交),docs/README.hooks.md 中的 hook 列表提供了其他可用组件;就记录会话活动本身而言,完成上述安装并确认 logs/copilot/ 下两个日志文件按 JSON 行追加,即表示 Session Logger 已按预期工作。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0631
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
video-shotcraftAI宣传片skill,使用 Remotion 制作电影级产品视频:提供106 张镜头配方卡和可复用的视频魔板。适用于 Claude Code 与 Codex以及所有其他智能体Markdown00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python09
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00