AIFlare
愿景文档
登录免费开始
入门
  • 简介
  • 快速开始
功能
  • 项目仪表板
  • 项目设置
  • 时间线
  • 团队协作
技能
  • 技能总览
  • 上下文捕获
  • 代码意图查询
  • 上下文注入
  • 日报摘要
  • 周报摘要
  • 会话对比
  • 会话摘要
  • 会话评估
管理
  • 成员 & 邀请
  • 账户设置
功能

代码意图查询 (why)

一个 MCP 工具,可以把 AI 智能体写下的某一行(或某个文件)代码的「为什么」以时间线方式取回——每一次改动过该行的提交、当时记录的意图、被否决的备选方案,以及当时的对话。可在 Claude Code 中用 `/why <file>:<line>` 手动调用,也可由智能体在调试时自动调用。

概述

提交信息只告诉你「改了什么」,why 告诉你「为什么这么改」。它在本地运行 `git log -L` 找出修改过目标行(或文件)的所有提交,再逐条取回每次提交在 AIFlare 中保存的捕获——意图、备选方案、对话、diff 元数据——并按最新提交在上的顺序拼接成时间线返回。没有捕获的提交会落到回退分支,仅返回提交列表。

查询粒度文件 + 行号(`git log -L`)或整个文件(`git log -- file`)。两种模式下都最多返回最近 5 个提交。
查询范围仅查询 API Key 所属活跃项目作用域内的捕获,其他项目的提交哈希会被静默过滤。
安全性只读工具,无任何副作用。所有 git 命令都经过转义并在仓库根目录执行,防止 shell 注入。
上限提示当目标超过 5 个相关提交时,响应会明确写「5 most recent of N」,避免被误以为是完整历史。

使用场景

在动手修改 AI 写下的代码之前先查一下意图——在已记录的依据上调试或重构,而不是靠猜测。

01
调试 Bug

当某一行看起来不对时,通过该提交记录的意图与被否决的备选方案,判断它到底是有意为之的 workaround 还是真正的错误。

02
重构前检查

在重构不是自己写的代码之前,先调出形成该代码的约束与权衡,避免破坏看不见的契约。

03
快速理解陌生代码

在不是自己写的模块里追踪某一行的诞生过程,连同每次提交背后的对话片段一起读。

04
智能体回看自己的代码

AI 智能体在打补丁前应当先调用 `why`,把自己(或另一个智能体)的过去意图查出来,再决定要不要动。

使用方法

语法

在 Claude Code 中用斜杠命令调用,或者让智能体直接调用工具。在文件路径后加 `:<line>` 即可只追踪某一行。

/why <file>[:<line>]

参数

名称类型必填默认值说明
filestring必填-要查询的文件路径(相对于 git 根目录,或绝对路径)。
linenumber可选-要解释的行号。省略则使用文件的完整历史(同样限制为最近 5 个提交)。

处理流程

1用户运行 `/why <file>:<line>` → Skill 将参数拆分为 `file` 与 `line`。无参数时,从当前调试上下文推断。
2MCP 工具用本地 git 查出修改过目标行(或文件)的提交哈希列表(`git log -L`),上限取最近 5 个。
3调用后端 `/api/v1/captures/by-commits` 批量拉取这些哈希在 AIFlare 中的捕获(意图、备选方案、对话、diff 元数据)。
4以 Markdown 时间线返回,最新提交在上。没有捕获的提交回退为仅显示提交列表。

常见错误

未配置 AIFlare

`aiflare.yml` 不存在或 `api_key` 为空时,返回「AIFlare is not configured. Place aiflare.yml in your project root.」。

不在 git 仓库

无法定位 git 根目录时,返回「Not in a git repository.」。

路径或行号有误

文件不存在或行号超范围时,返回「git query failed — check the file path …」。

输出格式

返回 Markdown 字符串。有捕获和无捕获两种形态。

TIMELINE
有捕获时——时间线

每个提交以卡片形式呈现,依次显示 Title / Tag / Intent / Alternatives considered / Diff around this line / Conversation behind this commit。最新提交在上;只有 1 条捕获时标签为 `only`,多条时为 `latest / earlier / oldest`。

FALLBACK
无捕获时——回退

存在提交但 AIFlare 中无任何捕获时使用。提示「N commits touched this line, but none are captured in AIFlare.」,并列出提交哈希·日期·subject。(在引入 AIFlare 前或在 Claude Code 之外的提交)

why output — timeline (excerpt)
## Intent history for this line
Showing the 5 most recent of 12 commits. 4 of them have AIFlare captures.
### 1. latest — e395786 (2026-05-12)
**Title**: Add JWT token issuance logic
**Tag**: FEATURE
#### Intent
Use HS256 with a short access token (15 min) and a refresh token to balance UX and revocation latency …
#### Alternatives considered
Considered RS256 with key rotation, rejected for ops overhead at the current scale.
5 个上限提示

当相关提交超过 5 个时,时间线会附加「Showing the 5 most recent of N commits.」,回退则附加「Checked the 5 most recent of N commits, but none are captured in AIFlare.」。

错误与回退

所有错误都作为工具响应文本返回,绝不会中断 Claude Code 会话。智能体读到提示后,自然地继续常规调试流程。

情形返回文本
未配置 AIFlareAIFlare is not configured. Place aiflare.yml in your project root.
不在 git 仓库Not in a git repository.
git log 失败(路径或行号错误)git query failed — check the file path …
无提交历史No commit history found for {file}:{line}. (或 …for {file}.)
后端超时 / 网络错误Error querying AIFlare: {message}
某次提交的 git show 失败仅省略该提交的 diff 段,其余时间线照常返回。

相关功能

`why` 与其他依赖捕获数据的功能协同工作。

context-capture

在提交时将意图、备选方案与对话捕获到 AIFlare 的 skill——它就是 `why` 读取的数据源。没有捕获的提交会落到 `why` 的回退分支。

时间线

在 Web 控制台中以可视化方式浏览同一份捕获数据。`why` 用于调试中按行调取意图,而时间线则按时间顺序展示完整的工作流。

本页内容

AIFlare
Made with ♥ in Seoul
© 2026 AIFlare. All rights reserved.
Product
SkillDocs
Company
Vision
Resources
PrivacyTerms
Connect
GitHub