Local-first · v1.2.0
Δ Local-first Verified Diff Learning

知返 AhaDiff

AI 写完,Diff 教回

Ship with AI. Learn it back.

一个 local-first 的 verified diff learning layer。把 Claude / Codex / Cursor 等 AI 工具写出的 git diff,变成带代码证据链的学习笔记、概念图谱、主动回忆测验和 SRS 复习卡。

v1.2.0 · pip install ahadiff

Get Started GitHub
auth/session.py
@@ -12,6 +12,10 @@ class SessionManager:     def validate(self, token: str): -       return jwt.decode(token, KEY) +       try: +           payload = jwt.decode(token, KEY, algorithms=["HS256"]) +           return payload if payload["exp"] > time.time() else None +       except jwt.InvalidTokenError: +           return None
AhaDiff Verified Lesson
verifiedAdded explicit algorithm pinning (HS256) to prevent algorithm confusion attacks auth/session.py:15
verifiedToken expiry is checked against the current system time (time.time()) auth/session.py:16
weakException handler catches all JWT errors including expired signatures auth/session.py:17
每一行 AI 写的代码,都应该能把学习教回给你。AhaDiff
THE PROBLEM

Vibe Coding 的知识断层

AI 工具让你 10x 产出,但学习曲线变成了一条平线。

AI 写的代码看不懂

Copilot / Claude 产出大量代码,你点了 Accept,却说不清它为什么有效、何时会失败。

Code Review 成了橡皮图章

diff 太大、上下文不够,review 变成形式主义。关键逻辑在 LGTM 中悄悄滑过。

知识债务无声堆积

用 AI 交付越快,技术债中「人脑里欠的那部分」累积越深,直到一次线上事故暴露一切。

HOW IT WORKS

四步从 Diff 到掌握

每次 AI 写完代码,AhaDiff 用证据链帮你学会它。

1
git diff

捕获变更

捕获工作区、提交范围、时间窗口、patch URL、文件和目录对比等 10 种 diff 来源。

2
verify

AI 验证分析

生成 verified claims,每句解释绑定 file:line 证据。五种状态确保可信度。

3
learn

生成学习材料

课文 + 测验 + SRS 卡片。三阶段撤架 (Full/Hint/Compact) 渐进掌握。

4
ratchet

棘轮质量追踪

8 维评估 100 分制。Git ratchet 只接受通过确定性门禁且不低于基线的 run,Phase 2.5 突破瓶颈。

FEATURES

每个细节都为学习设计

这是一个让你和 AI 共同成长的学习系统。

Verified Claims

每句解释都链接到 file:line 代码证据。5 种 claim 状态 (verified / weak / not_proven / contradicted / rejected) 确保可信。

FSRS Spaced Repetition

采用 Anki 同源的 FSRS-6 算法,根据你的答题表现自动调整复习间隔。

Three-Stage Scaffolding

Full → Hint → Compact 三阶段学习撤架。由 FSRS 记忆稳定度自动驱动,越熟悉提示越少。

8-Dimension Rubric

accuracy / evidence / diff_coverage / learnability / quiz_transfer / spec_alignment / conciseness / safety_privacy = 100 分。

Git Ratchet

只进不退:improve loop 渐进优化,Phase 2.5 在卡住时触发结构性重写,突破质量瓶颈。

Privacy First

strict_local / redacted_remote / explicit_remote 三档隐私。远端请求前会执行隐私与脱敏门禁。

8 LLM Providers

OpenAI / Anthropic / Gemini / Azure / Ollama 等 8 种 API 格式。BYOK,自动探测上下文长度。

15 Tool Targets

Claude、Codex、Gemini、Cursor、GitHub Actions、Git hooks 等 CLI / IDE / CI 目标都能接入。

TAKE IT WITH YOU

学完之后,带着走

把学习记录导出、复习,或接进你的 agent 与 CI。

导出到 Anki / TSV

WebUI 一键导出 Anki .apkg;CLI 用 export-results 写 results.tsv,export preview 生成本地静态预览包。

接入 15 个工具目标

Claude、Codex、Cursor、Copilot、GitHub Actions、Git hooks 等 CLI / IDE / CI 的项目级接入指引。

ARCHITECTURE

八层分层架构

从 diff 捕获到 UI 渲染,每一层各司其职。

0
Schema & Contract
ClaimStatus / RunSource / EvalBundle / EventLog
Core contract freeze: immutable type definitions
1
Diff Capture
worktree / range / since / patch / URL / compare
10 capture sources, including file and directory compare
2
Context
2a Assembly + 2b Safety Gate + 2c Budget
Repo files, secret scan, token budget
3
Lesson Generation
prompts/*.md + claim extraction
Markdown prompts generate structured lessons
4
Verification
claims.jsonl + score + judge artifacts
5-state claims: verified / weak / not_proven / contradicted / rejected
5
Ratchet
evaluation bundle (immutable) + review.sqlite
Git ratchet: accepted runs must pass deterministic gates
6
Learning
quiz + SRS review + concepts.jsonl
FSRS-6 spaced repetition + concept graph
7
Wiki + UI
React SPA via ahadiff serve
Starlette API + Vite + React 19
TUTORIAL VIDEO

看一遍完整流程

从 learn 到复习,一个真实 run 的完整演示(带字幕)。

视频里的安装就是 pip install ahadiff,一行装好。

SEE IT IN ACTION

一条命令开始学习

在任何 git 仓库中运行 ahadiff,立刻获得带证据链的学习反馈。

Terminal
$ pip install ahadiff
$ cd my-project
$ ahadiff learn --last
 
Captured 3 files, 47 lines changed
Generated 12 verified claims (10 verified, 2 weak)
Created lesson (full/hint/compact)
Generated 5 quiz questions
Score: 86/100 (PASS) ; weakest: quiz_transfer
Opening http://127.0.0.1:8765 ...

示例输出。具体数字取决于你的 diff。

WEBUI

界面预览

Dashboard、Lesson、Diff、Quiz、Review、Concepts、Settings:一个本地 React SPA。

Dashboard
运行面板:运行记录、分数、棘轮轨迹
Lesson
课程页:带证据链的解释
Diff
差异查看器:claim 高亮
Quiz
测验:证据在作答前锁定
Review
复习:FSRS 间隔重复
Concept graph
概念图谱:跨 diff 概念
Run detail overview
运行详情:概览与分数
Settings
设置:供应商与偏好
COMPARISON

AhaDiff vs. Alternatives

保留 Code Review,再补上缺失的学习环。

Tool Verified Claims SRS Ratchet Local-first Evidence Chain Agent Install
AhaDiff
Code Wiki
Diffity
Anki + Code
Exercism

本表反映 AhaDiff 自身的定位和设计重点,不是对其他工具的独立评测。

COMMANDS

一套命令覆盖学习闭环

从捕获到复习,常用命令一览。

ahadiff init在仓库里初始化 .ahadiff/ 状态目录
ahadiff provider test注册并探测一个 LLM 供应商
ahadiff learn <range>把一段 diff 变成带证据的课程
ahadiff quiz <run_id>对刚学的 run 做主动回忆测验
ahadiff review按 FSRS 复习到期卡片
ahadiff verify <run_id>重新校验 claims 与评分
ahadiff improve --rounds N在 git worktree 里迭代优化生成 prompt(仅源码 checkout)
ahadiff improve-run <run_id>重新生成课程,仅当确定性评分更高时保留;任何安装方式可用(含 pip)
ahadiff serve打开本地 Web UI
ahadiff export preview生成本地静态预览包

完整命令和 10 种捕获来源见使用指南。

PYPI INSTALL

三步开始

几步之内,从安装到第一节课。

1

安装并配置

用 pip 安装已发布的 CLI 和内置 WebUI,然后配置一个 LLM 供应商。learn 在配置供应商前无法运行。

提示:provider test 会发一个小探针请求,成功后把供应商写入 .ahadiff/config.toml--api-key-env 填的是环境变量名,不是密钥本身。不想敲命令?先 ahadiff serve,在 Settings 里用表单添加供应商,保存前还能预览模型限额。
$ pip install ahadiff
$ ahadiff init
$ export AHADIFF_PROVIDER_API_KEY="<your-provider-api-key>"
$ export AHADIFF_PROVIDER_BASE_URL="<provider-base-url>"
$ ahadiff provider test \
    --name default \
    --provider-class openai \
    --base-url "$AHADIFF_PROVIDER_BASE_URL" \
    --api-key-env AHADIFF_PROVIDER_API_KEY
2

学习

在你的项目中运行 learn 命令,分析最近一次提交的 diff。

$ cd your-project
$ ahadiff learn --last
3

复习

打开 Web UI 进行 SRS 复习和测验,巩固知识。

$ ahadiff serve
# Opens http://127.0.0.1:8765
FAQ

你可能会问

我的代码会被上传吗?
默认 strict_local,不向任何远端模型发送内容。要用远端模型时,必须显式切到 redacted_remote 或 explicit_remote;远端请求前会执行隐私与脱敏门禁。
需要从 PyPI 安装吗?
是。直接用 pip install ahadiff 安装已发布的 CLI 和内置 WebUI;源码 checkout 只适合贡献者开发。
支持哪些模型?
BYOK,覆盖 8 种 API 格式(OpenAI / Anthropic / Gemini / Azure / Ollama / LM Studio 等),并会自动探测上下文长度。
要花钱吗?
AhaDiff 本身免费、在本地运行;你只为自己的 LLM 供应商付费(BYOK)。
评分会因为模型不稳定而乱跳吗?
评分主体是 8 维确定性打分;LLM judge 只是可选 advisory,即使 judge 失败也会保留确定性分数。
TECH STACK

Built On

Python 3.11+
React 19
SQLite WAL
Starlette
FSRS-6
Vite