使用说明
✈️ 预检
停止在模糊的提示下焚烧代币。
用于Claude Code的24工具MCP服务器,可以在错误的指令花费2-3倍之前捕捉到模糊的指令→修复周期——加上整个会话历史的语义搜索、跨服务合同感知和12个类别记分卡。
v3.2.0的新增功能
- 统一
preflight_check入口点 --一个工具,可以对每个提示进行分类,并自动链接正确的检查 - 智能分诊分类 --通过决策树路由提示(琐碎→ 模糊的→ 多步骤→ 交叉服务)
- 校正模式学习 --记住过去的错误,并在重复之前警告你
- 交叉服务合同 --在相关项目中提取类型、接口、路由和模式
.preflight/配置目录 --用于分流规则和阈值的团队可共享YAML配置- 趋势和比较记分卡 --每周/每月趋势线、跨项目比较、雷达图、PDF导出
- 成本估计员 --估算修正带来的代币支出和浪费
问题
我们在分析后构建了这个 9个月真实的Claude代码使用 --在生产Next.js/Prisma/Supabase应用程序中生成512个会话、32000多个事件、3200+个提示、1642个提交和258个子代理。调查结果很残酷:
- 41%的提示少于50个字符 --比如
fix the tests,commit this,remove them - 每个模糊的提示都会触发一个 wrong→修复周期成本为2-3x代币
- ~33K字符/天 从重复的上下文粘贴中复制
- 记录了124次更正 --克劳德误入歧途,不得不被拉回的地方
- 94个上下文压缩 从上下文窗口吹过的无限会话范围
- 预计 30%至40%的代币被浪费 关于可避免的反复
模式总是一样的:模糊提示→ 克劳德猜测→ 错误输出→ 你说对了→ 重复。那是你的钱在蒸发。
解决方案
在Claude Code中作为MCP服务器运行的5类24个工具:
| 类别 | 工具 | 功能 |
|---|---|---|
| ✈️ 预制芯 | 1 | 统一入口点——对每个提示进行分类,自动链接正确的检查 |
| 🎯 迅速的纪律 | 12 | 捕捉模糊提示,加强结构,防止浪费 |
| 🔍 时间线情报 | 4 | LanceDB在数月的会话历史中进行矢量搜索 |
| 📊 分析和报告 | 4 | 记分卡、成本估算、会话统计、模式检测 |
| ✅ 验证与卫生 | 3 | 类型检查、测试、审计和合同搜索 |
之前/之后
❌ "fix the auth bug"
→ Claude guesses which auth bug, edits wrong file
→ You correct it, 3 more rounds
→ 12,000 tokens burned
✅ preflight intercepts → clarify_intent fires
→ "Which auth bug? I see 3 open issues:
1. JWT expiry not refreshing (src/auth/jwt.ts)
2. OAuth callback 404 (src/auth/oauth.ts)
3. Session cookie SameSite (src/middleware/session.ts)
Pick one and I'll scope the fix."
→ 4,000 tokens, done right the first time
快速开始
选项A:npx(最快--无需安装)
claude mcp add preflight -- npx -y preflight-dev-serve
对于环境变量:
claude mcp add preflight \
-e CLAUDE_PROJECT_DIR=/path/to/your/project \
-- npx -y preflight-dev-serve
选项B:手动克隆和配置
git clone https://github.com/TerminalGravity/preflight.git
cd preflight && npm install
添加到您的项目 .mcp.json:
{
"mcpServers": {
"preflight": {
"command": "npx",
"args": ["tsx", "/path/to/preflight/src/index.ts"],
"env": {
"CLAUDE_PROJECT_DIR": "/path/to/your/project"
}
}
}
}
重新启动克劳德代码。这些工具会自动激活。
选项C:npm(全局)
npm install -g preflight-dev
claude mcp add preflight -- preflight-dev-serve
注:
preflight-dev运行交互式安装向导。preflight-dev-serve启动MCP服务器——这就是您在Claude Code配置中想要的。
运作原理
分类决策树
在任何工作开始之前,每个提示都会经过一个分类引擎。这是来自的实际决策树 src/lib/triage.ts:
flowchart TD
A[Prompt Arrives] --> B{Skip keyword?}
B -->|Yes| T1[✅ TRIVIAL]
B -->|No| C{Multi-step indicators?}
C -->|Yes| MS[🔶 MULTI-STEP]
C -->|No| D{Cross-service keywords?}
D -->|Yes| CS[🔗 CROSS-SERVICE]
D -->|No| E{always_check keyword?}
E -->|Yes| AM1[⚠️ AMBIGUOUS]
E -->|No| F{"< 20 chars + common cmd?"}
F -->|Yes| T2[✅ TRIVIAL]
F -->|No| G{"< 50 chars, no file refs?"}
G -->|Yes| AM2[⚠️ AMBIGUOUS]
G -->|No| H{Vague pronouns or verbs?}
H -->|Yes| AM3[⚠️ AMBIGUOUS]
H -->|No| CL[✅ CLEAR]
style T1 fill:#2d6a4f,color:#fff
style T2 fill:#2d6a4f,color:#fff
style CL fill:#2d6a4f,color:#fff
style AM1 fill:#e9c46a,color:#000
style AM2 fill:#e9c46a,color:#000
style AM3 fill:#e9c46a,color:#000
style CS fill:#457b9d,color:#fff
style MS fill:#e76f51,color:#fff
每个级别都会触发不同的工具链:
| 级别 | 触发内容 | 示例提示 |
|---|---|---|
| 琐碎的 | 没什么——通过 | commit |
| 清除 | 仅用于文件验证 | fix null check in src/auth/jwt.ts line 42 |
| 模糊的 | 明确意图+git状态+工作区优先级 | fix the auth bug |
| 交叉服务 | 澄清+搜索相关项目+合同 | add tiered rewards |
| 多步骤 | 澄清+范围+顺序+检查点 | refactor auth to OAuth2 and update all consumers |
另外, 校正模式匹配 可以提高任何分流水平。如果你的提示与之前记录的更正中的2+个关键字匹配,它至少会被提升到 ambiguous --即使它以其他方式通过。
数据流
flowchart LR
A[User Prompt] --> B[Triage Engine]
B --> C[Tool Chain]
C --> D[Response]
B -.-> E[".preflight/\nconfig.yml\ntriage.yml"]
B -.-> F["Patterns\nLog"]
C -.-> G["LanceDB\n(per-project)"]
C -.-> H["Contracts\n(per-project)"]
G -.-> I["~/.claude/projects/\n(session JSONL)"]
style A fill:#264653,color:#fff
style B fill:#2a9d8f,color:#fff
style C fill:#e9c46a,color:#000
style D fill:#e76f51,color:#fff
会话数据结构
Claude Code将会话数据存储为JSONL文件:
~/.claude/projects/<encoded-path>/
├── <session-uuid>.jsonl # Main session
├── <session-uuid>/
│ └── subagents/
│ └── <sub-uuid>.jsonl # Sub-agent sessions
每一行JSONL都是一个事件。这 会话解析器 提取物 8事件类型:
| 事件类型 | 来源 | 它捕获了什么 |
|---|---|---|
prompt |
user messages |
开发人员键入了什么 |
assistant |
assistant 消息 |
克劳德的短信回复 |
tool_call |
assistant tool_use块 |
工具调用(读、写、Bash等) |
sub_agent_spawn |
Task/dispatch_agent tool_use | 当Claude委托给子代理时 |
correction |
user 助手后的消息 |
通过否定模式检测到(否、错误、实际上、撤消…) |
compaction |
system messages |
上下文已压缩(会话命中令牌限制) |
error |
tool_result is_error |
操作失败 |
commit |
git日志集成 | 会话期间提交 |
LanceDB架构
事件存储在每个项目中 LanceDB 具有用于语义搜索的向量嵌入的数据库:
~/.preflight/projects/<sha256-12-char>/
├── timeline.lance/ # LanceDB vector database
├── contracts.json # Extracted API contracts
└── meta.json # Project metadata
Table: events
├── id: string (UUID)
├── content: string (event text)
├── content_preview: string (first 200 chars)
├── vector: float32[384] (Xenova/all-MiniLM-L6-v2) or float32[1536] (OpenAI)
├── type: string (event type from above)
├── timestamp: string (ISO 8601)
├── session_id: string (session UUID)
├── project: string (decoded project path)
├── project_name: string (short name)
├── branch: string (git branch at time of event)
├── source_file: string (path to JSONL file)
├── source_line: number (line number in JSONL)
└── metadata: string (JSON — model, tool name, etc.)
项目注册处 ~/.preflight/projects/index.json 将绝对路径映射到它们的SHA-256哈希值。
合同提取
这 合同提取器 扫描您的项目以查找API曲面:
| 模式 | 它发现了什么 |
|---|---|
export interface/type/enum |
TypeScript类型定义 |
export function GET/POST/… |
Next.js API路线 |
router.get/post/… |
快递路线处理人员 |
model Foo { … } |
Prisma模型和枚举 |
| OpenAPI/Swagger规范 | 路由和模式组件 |
.preflight/contracts/*.yml |
手动合同定义 |
合同按项目存储,并在跨服务分流期间跨相关项目搜索。
启动项目
跑 onboard_project 为项目的历史建立索引。事情是这样的:
- 发现会话 --在中查找JSONL文件
~/.claude/projects/<encoded-path>/,包括子代理会话 - 解析事件 --从每个会话文件中提取8种事件类型(流文件>10MB)
- 提取合同 --扫描源以查找类型、接口、枚举、路由、Prisma模型、OpenAPI模式
- 加载手动合同 --合并任何
.preflight/contracts/*.yml定义(手动赢得名称冲突) - 生成嵌入 --本地 Xenova/全迷你LM-L6-v2 默认情况下(首次运行时下载约90MB模型,约50个事件/秒)或OpenAI,如果
OPENAI_API_KEY已设置(约200个事件/秒) - LanceDB的商店 --按项目数据库
~/.preflight/projects/<sha256-12>/timeline.lance/ - 更新注册表 --将项目记录在
~/.preflight/projects/index.json
除非你选择OpenAI嵌入,否则没有数据离开你的机器。
入职后,您将获得:
- 🔎 语义搜索 --“我上个月是如何设置身份验证中间件的?”实际上是有效的
- 📊 时间线视图 --按时间顺序查看会话中发生了什么
- 🔄 实时扫描 --在新会话发生时为其建立索引
- 🔗 跨服务搜索 --跨相关项目查询
工具参考
✈️ 预制芯
| 工具 | 它做什么 |
|---|---|
preflight_check |
主要切入点。 将你的提示(琐碎→ 多步骤),自动链接正确的检查,与已知的校正模式进行匹配。接受 force_level 以(权力)否决 skip, light, full. |
🎯 迅速的纪律
| 工具 | 它做什么 |
|---|---|
scope_work |
在编码开始之前创建结构化执行计划 |
clarify_intent |
收集项目上下文(git状态、工作区文档、歧义信号)以消除模糊提示的歧义 |
enrich_agent_task |
使用文件路径、模式和跨服务上下文丰富子代理任务 |
sharpen_followup |
将“fix it”/“do the other”解析为实际的文件目标 |
token_audit |
检测废物模式,将您的会话分级为A-F |
sequence_tasks |
按依赖关系、位置和风险对任务进行排序 |
checkpoint |
压缩前保存游戏——提交+恢复笔记 |
check_session_health |
监控未提交的文件、提交后的时间、周转次数 |
log_correction |
跟踪更正并识别重复出现的错误模式 |
check_patterns |
根据学习到的纠正模式检查提示——警告已知的陷阱 |
session_handoff |
为新会话生成切换简报 |
what_changed |
总结自上次检查点以来的差异 |
🔍 时间线情报
| 工具 | 它做什么 |
|---|---|
onboard_project |
将项目的会话历史+合同编入每个项目的LanceDB |
search_history |
带范围的语义搜索:当前项目、相关项目或所有索引项目 |
timeline |
按时间顺序查看各届会议的事件 |
scan_sessions |
实时扫描活动会话数据 |
📊 分析和报告
| 工具 | 它做什么 |
|---|---|
generate_scorecard |
12类报告卡——会话、趋势(周/月)或跨项目比较。雷达图SVG、PDF或markdown。 |
estimate_cost |
代币使用、美元成本、更正造成的浪费、飞行前节省 |
session_stats |
轻量级会话分析——无需嵌入 |
prompt_score |
特异性、范围、可操作性、完成情况的游戏化A-F分级 |
✅ 验证与卫生
| 工具 | 它做什么 |
|---|---|
verify_completion |
在声明完成之前运行类型检查+测试+构建 |
audit_workspace |
查找过时/缺失的工作区文档与git活动 |
search_contracts |
在当前和相关项目中搜索API合同、类型和架构 |
用法示例
安装预检后,您将键入Claude Code的真实提示。工具通过以下方式自动点火 preflight_check,或者你可以直接给他们打电话。
在浪费令牌之前抓住一个模糊的提示
> fix the auth bug
preflight_check intercepts → clarify_intent fires:
"I found 3 auth-related recent changes:
1. JWT refresh logic in src/auth/jwt.ts (modified 2h ago)
2. OAuth callback route in src/routes/oauth.ts (3 open TODOs)
3. Session middleware in src/middleware/auth.ts (failing test)
Which one? Or describe the symptoms."
开始前确定多步骤任务的范围
> refactor the database layer to use Drizzle instead of Prisma
preflight_check triages as MULTI-STEP → scope_work + sequence_tasks fire:
Phase 1: Install drizzle-orm, create schema (src/db/schema.ts)
Phase 2: Migrate queries in src/services/ (12 files)
Phase 3: Update tests (8 files reference prisma mocks)
Phase 4: Remove prisma dependencies, delete prisma/ dir
Estimated: 4 checkpoints, ~45 min
搜索您的会话历史记录
> use search_history to find how I set up the rate limiter
Searches LanceDB across your indexed sessions:
Found 3 relevant events (similarity > 0.82):
- Session abc123 (Jan 15): Added express-rate-limit to src/middleware/
- Session def456 (Jan 16): Configured per-route limits in src/routes/api.ts
- Session ghi789 (Feb 2): Fixed rate limit bypass via X-Forwarded-For
对你的提示习惯进行评分
> use prompt_score on "update the thing"
Grade: D
- Specificity: 1/5 — no file paths, no identifiers
- Scope: 1/5 — "the thing" is completely ambiguous
- Actionability: 2/5 — "update" is vague (refactor? fix? add feature?)
- Done-condition: 0/5 — no way to know when it's done
Suggestion: "Update the price formatter in src/utils/currency.ts
to handle JPY (zero-decimal currency)"
工作中检查会话健康状况
> use check_session_health
⚠️ 47 uncommitted files (last commit: 38 min ago)
⚠️ 23 turns since last checkpoint
💡 Consider running `checkpoint` before context compaction hits
获取成本估算
> use estimate_cost
This session: ~$2.40 (148K tokens)
Waste from corrections: ~$0.85 (3 wrong→fix cycles)
Preflight savings: ~$1.20 (4 vague prompts caught early)
Net: saving roughly 35% vs unchecked prompting
12分类记分卡
generate_scorecard 在12个类别中评估你的快速纪律。每个指标都衡量了你与Claude Code互动的具体方式:
| # | 类别 | 衡量标准 | 评分方式 |
|---|---|---|---|
| 1 | 计划 | 你开始会议时有计划吗?前3个提示包含文件引用和>100个字符的会话百分比 | |
| 2 | 澄清 | 你的提示是否具体? | %的用户提示包含文件路径或特定标识符 |
| 3 | 授权 | 子代理任务是否定义明确? | %的子代理生成具有>200个字符描述的子代理 |
| 4 | 随访特异性 | 是否有后续参考文件? | %的后续提示(助理响应后)包含文件引用或≥50个字符 |
| 5 | 代币效率 | 每个文件有多少次工具调用? | 工具调用与被触摸的唯一文件的比率(理想值:5-10次调用/文件) |
| 6 | 测序 | 你是保持专注还是切换上下文? | 主题切换率——提示在不同目录区域之间跳转的频率 |
| 7 | 压实管理 | 你在压实之前承诺了吗? | 10条消息内提交的压缩事件的百分比 |
| 8 | 会话生命周期 | 你经常承诺吗? | 健康提交频率的会话百分比(每15-30分钟一次) |
| 9 | 错误恢复 | 你从错误中恢复的速度有多快? | 纠正率(邮件百分比)+恢复速度(2条以内) |
| 10 | 工作场所卫生 | 您是否维护工作区文档? | 基准75+奖励用于会话引用 .claude/ 或 CLAUDE.md |
| 11 | 跨会话连续性 | 新会话是否阅读上下文? | 前3个工具调用读取项目上下文文档的会话百分比 |
| 12 | 验证 | 你在最后测试吗? | 在最后10%的事件中运行测试/build/lint的会话百分比 |
报告类型
| 类型 | 你得到了什么 |
|---|---|
| 记分卡 | 12类单周期快照、雷达图、最佳/最差亮点 |
| 趋势 | 每周或每月趋势线、每个类别的变动、前3个改进领域、最佳/最差提示 |
| 比较的 | 并行跨多个项目,跨项目模式检测 |
三大支持 PDF导出 (需要剧作家)和 历史基线 它追踪你的滚动平均值随时间的变化。
跨服务意识
Preflight了解微服务共享合约。当您的提示提到相关项目中的关键字时,分类升级为 cross-service 并在这些项目中搜索相关上下文。
设置
选项1: .preflight/config.yml (推荐-承诺回购)
# my-api/.preflight/config.yml
related_projects:
- path: /Users/jack/Developer/auth-service
alias: auth-service
- path: /Users/jack/Developer/notifications
alias: notifications
- path: /Users/jack/Developer/shared-types
alias: shared-types
选项2:环境变量 (每个用户)
PREFLIGHT_RELATED=/path/to/auth-service,/path/to/notifications
运作原理
- 您键入:
"add rewards tier validation" - 分类检测
rewards火柴always_check关键词→ambiguous - 跨服务关键字(
auth,notification)不匹配,但如果你输入了"add rewards with auth check"→cross-service - Preflight搜索相关项目的LanceDB索引和合同注册表
- 从这些项目返回相关类型、接口和路由
- 你会得到这样的上下文:“身份验证服务具有
interface AuthToken { userId, tier, permissions }和POST /api/validate-tier"
这可以防止常见的故障模式:在一个服务中更改共享类型并忘记消费者。
配置参考
.preflight/config.yml
将此放入您的项目根目录中。每个字段都是可选的——默认值是合理的。
# Profile controls overall verbosity
# "minimal" — only flag ambiguous+, skip clarification detail
# "standard" — default behavior
# "full" — maximum detail on every non-trivial prompt
profile: standard # type: "minimal" | "standard" | "full"
# Related projects for cross-service awareness
related_projects: # type: RelatedProject[]
- path: /absolute/path/to/service # path: string (absolute)
alias: service-name # alias: string (used in output + triage matching)
# Behavioral thresholds
thresholds:
session_stale_minutes: 30 # type: number — warn if no activity for this long
max_tool_calls_before_checkpoint: 100 # type: number — suggest checkpoint after N tool calls
correction_pattern_threshold: 3 # type: number — min corrections to form a pattern
# Embedding configuration
embeddings:
provider: local # type: "local" | "openai"
openai_api_key: sk-... # type: string — only needed if provider is "openai"
.preflight/triage.yml
控制分流分类引擎。
# Keywords that control routing
rules:
# Prompts containing these → always at least AMBIGUOUS
always_check: # type: string[] — default: [rewards, permissions, migration, schema]
- rewards
- permissions
- migration
- schema
# Prompts containing these → TRIVIAL (pass through)
skip: # type: string[] — default: [commit, format, lint]
- commit
- format
- lint
# Prompts containing these → CROSS-SERVICE
cross_service_keywords: # type: string[] — default: [auth, notification, event, webhook]
- auth
- notification
- event
- webhook
# How aggressively to classify
# "relaxed" — more prompts pass as clear
# "standard" — balanced
# "strict" — more prompts flagged as ambiguous
strictness: standard # type: "relaxed" | "standard" | "strict"
.preflight/contracts/*.yml
补充自动提取的手动合同定义:
# .preflight/contracts/api.yml
- name: RewardsTier
kind: interface
description: Reward tier levels and their perks
fields:
- name: tier
type: string
required: true
- name: multiplier
type: number
required: true
- name: perks
type: string[]
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
CLAUDE_PROJECT_DIR |
要监视的项目根 | 必需 |
OPENAI_API_KEY |
用于嵌入的OpenAI密钥 | 使用本地Xenova |
PREFLIGHT_RELATED |
逗号分隔的相关项目路径 | 无 |
EMBEDDING_PROVIDER |
local 或 openai |
local |
PROMPT_DISCIPLINE_PROFILE |
minimal, standard,或 full |
standard |
环境变量为 后备方案 — .preflight/ config在存在时优先。
💡 即用型示例: 复制
examples/.preflight/在项目根目录中添加一个带有详细注释的工作启动器配置。
嵌入提供者
| 提供商 | 设置 | 速度 | 尺寸 | 质量 | 隐私 |
|---|---|---|---|---|---|
| 当地(Xenova) | 零配置 | ~50个事件/秒 | 384 | 良好 | 100%本地 |
| 开放人工智能 | 设置 OPENAI_API_KEY |
约200个事件/秒 | 1536 | 优秀 | API调用 |
首次运行本地嵌入下载 Xenova/全迷你LM-L6-v2 型号(~90MB)。之后,一切都离线运行。
建筑
flowchart TB
CC[Claude Code] <-->|MCP Protocol| PS[preflight server]
PS --> PC[✈️ Preflight Core]
PS --> DT[🎯 Discipline Tools]
PS --> TL[🔍 Timeline Tools]
PS --> AN[📊 Analysis Tools]
PS --> VR[✅ Verify Tools]
PC --> TE[Triage Engine]
DT --> PL[Pattern Learning]
TL --> LDB[(LanceDB\nper-project)]
AN --> SCE[Scorecard Engine]
TE -.-> CFG[".preflight/\nconfig.yml\ntriage.yml\ncontracts/"]
LDB --> SP[Session Parser]
SP --> JSONL["~/.claude/projects/\n(session JSONL files)"]
style CC fill:#264653,color:#fff
style PS fill:#2a9d8f,color:#fff
style PC fill:#e76f51,color:#fff
style DT fill:#e9c46a,color:#000
style TL fill:#457b9d,color:#fff
style AN fill:#6a4c93,color:#fff
style VR fill:#2d6a4f,color:#fff
style LDB fill:#1d3557,color:#fff
按项目数据布局
~/.preflight/
├── config.json # Global config (embedding provider, indexed projects)
└── projects/
├── index.json # Registry: path → { hash, onboarded_at }
├── a1b2c3d4e5f6/ # SHA-256(project_path)[:12]
│ ├── timeline.lance/ # LanceDB vector database
│ ├── contracts.json # Extracted API contracts
│ ├── meta.json # Event count, onboard timestamp
│ └── baseline.json # Historical scorecard averages
└── f6e5d4c3b2a1/
└── ... # Another project
故障排除
“找不到模块'vectordb'”或LanceDB导入错误
LanceDB使用本机二进制文件。如果您看到模块解析错误:
# Clean install with native deps rebuilt
rm -rf node_modules package-lock.json
npm install
# If still failing, check your Node version (20+ required)
node --version
在苹果Silicon Mac上,确保你运行的是原生arm64节点,而不是Rosetta。与核对 node -e "console.log(process.arch)" (应打印 arm64).
首次运行速度较慢(约90MB型号下载)
本地嵌入提供商(Xenova/全迷你LM-L6-v2)首次使用时下载约90MB的型号。这是一次性成本——后续运行使用缓存模型。如果下载挂在公司代理后面,请切换到OpenAI嵌入:
export OPENAI_API_KEY=sk-...
export EMBEDDING_PROVIDER=openai
“OpenAI嵌入提供程序需要OpenAI API密钥”
你设置 EMBEDDING_PROVIDER=openai (或 embeddings.provider: openai 在 .preflight/config.yml)但没有提供钥匙。要么:
- 集
OPENAI_API_KEY在您的环境中,或 - 切换回本地:
export EMBEDDING_PROVIDER=local
Claude代码中未显示工具
- 确保MCP服务器已注册。跑
claude mcp list--你应该看看preflight. - 如果缺失,请重新添加:
claude mcp add preflight -- npx tsx /path/to/preflight/src/index.ts - 添加后重新启动Claude Code。
CLAUDE_PROJECT_DIR 未设置
一些工具(入职培训、会话搜索、合同)需要了解您的项目根。如果返回空结果:
claude mcp add preflight \
-e CLAUDE_PROJECT_DIR=/path/to/your/project \
-- npx tsx /path/to/preflight/src/index.ts
或者全局设置: export CLAUDE_PROJECT_DIR=/path/to/your/project
.preflight/config.yml 解析错误
如果你看到 warning - failed to parse .preflight/config.yml,你的YAML格式不正确。常见问题:
- 标签而不是空格(YAML需要空格)
- 带有特殊字符的值周围缺少引号
- 下方压痕不正确
related_projects
验证方式: npx yaml-lint .preflight/config.yml 或粘贴到 yamllint.com.
入职期间未找到会话数据
onboard_project 在中查找JSONL文件 ~/.claude/projects/<encoded-path>/.如果什么也没找到:
- 确保您在项目中实际使用了Claude Code(至少一次会话)
- 检查一下
CLAUDE_PROJECT_DIR与Claude Code打开的确切路径匹配 - 路径编码是URL样式--
/Users/jack/my-app成为%2FUsers%2Fjack%2Fmy-app
Ollama嵌入连接被拒绝
如果使用Ollama作为您的嵌入提供商并收到连接错误:
# Make sure Ollama is running
ollama serve
# Pull the embedding model
ollama pull all-minilm
# Verify it works
curl http://localhost:11434/api/embed -d '{"model":"all-minilm","input":"test"}'
贡献
这个项目很年轻,有很多事情要做。查看 问题 --有几个被标记 good first issue.
PR欢迎。没有CLA,就没有官僚主义。如果它使工具变得更好,它就会被合并。
发展
git clone https://github.com/TerminalGravity/preflight.git
cd preflight
npm install
npm run build
npm test
项目结构
src/
├── index.ts # MCP server entry point
├── lib/
│ ├── triage.ts # Prompt classification engine
│ ├── session-parser.ts # JSONL session file parser
│ ├── timeline-db.ts # LanceDB operations
│ ├── contracts.ts # Contract extraction & search
│ ├── patterns.ts # Correction pattern learning
│ ├── config.ts # .preflight/ config loading
│ ├── embeddings.ts # Embedding provider abstraction
│ ├── state.ts # Persistent state (logs, patterns)
│ ├── git.ts # Git operations
│ └── files.ts # File discovery
└── tools/
├── preflight-check.ts # Unified entry point
├── generate-scorecard.ts # 12-category scoring + trends
└── ... # One file per tool
许可证
麻省理工学院——随心所欲。