devtap
    
自动将构建/开发过程输出连接到AI编码会话。
devtap 从构建和开发命令中捕获stdout/stderr,然后通过以下方式将其馈送到AI编码工具会话中 主控程序 (模型上下文协议)。它还可以将相同的输出扇出到多个编码代理。每个代理都会消耗自己的副本,这样并行会话就不会干扰。
问题
在vibe编码工作流程中,您可以在一个终端中运行AI编码工具,并在另一个终端上构建命令。当出现错误时,您可以手动将粘贴日志复制到编码会话中。 devtap 自动执行此反馈循环。
三种常见的情况使这种情况特别痛苦:
- 您需要关注并快速修复的多个本地开发进程(前端+后端+工作进程)。
- 多个编码代理在同一个项目上工作,您希望他们并行分析相同的失败并比较结果。
- 在远程机器(CI、dev box)上进行构建/测试运行,您需要将其输出反馈给本地编码代理。
快速开始
安装
go install github.com/killme2008/devtap/cmd/devtap@latest或者通过Homebrew安装:
brew install killme2008/tap/devtap或从以下网址下载 .
设置
cd /path/to/your-project
devtap install --adapter claude-code这配置了MCP服务器,并将devtap指令注入到项目的指令文件中(例如。, CLAUDE.md).看 支持的工具 适用于所有可用的适配器。
技能(可选)
devtap附带了一个内置 技能 当MCP不可用时,它作为CLI回退。安装它以让代理按需获取构建输出:
# Claude Code
mkdir -p ~/.claude/skills && cp -r skills/devtap-get-build-errors ~/.claude/skills/
# Codex CLI
mkdir -p ~/.codex/skills && cp -r skills/devtap-get-build-errors ~/.codex/skills/或者直接从仓库中获取,无需克隆:
DEST=~/.claude/skills/devtap-get-build-errors
mkdir -p "$DEST" && cd "$DEST"
for f in SKILL.md scripts/get_build_errors.sh; do
mkdir -p "$(dirname "$f")"
curl -sL "https://raw.githubusercontent.com/killme2008/devtap/main/skills/devtap-get-build-errors/$f" -o "$f"
done
chmod +x scripts/get_build_errors.sh用法
航站楼A --捕获构建输出:
devtap -- cargo check
devtap -- go build ./...
devtap --filter-regex "error|warning" -- npm run build
# Long-running dev servers (output is flushed every 2s by default)
devtap -- npm run dev端子B --像往常一样使用你的AI编码工具。它将自动调用 get_build_errors 通过MCP获取捕获的构建错误。
如果您想在没有MCP的情况下进行验证,请运行:
devtap drain典型输出:
[devtap: cargo check] Build failed (exit code 101):
...提示: 由于devtap从任何命令中捕获stdout,因此您可以向编码代理发送任意消息:
devtap -- echo "Please refactor the auth module to use JWT"这将devtap变成了一个通用的人→代理消息通道——无需复制粘贴。
运作原理
本地模式 (默认,基于文件):
Terminal A (Claude Code) Terminal B (build/dev)
┌──────────────────┐ ┌────────────────────────────┐
│ MCP tool call: │ stdio │ devtap -- cargo check │
│ get_build_errors├─────────────┤ │
│ │ JSON-RPC │ captures stdout/stderr, │
│ receives errors,│ │ fans out to all adapters: │
│ fixes code │ │ ~/.devtap//claude-code/│
└──────────────────┘ │ ~/.devtap//codex/ │
└────────────────────────────┘跨机模式 (与 GreptimeDB):
Your laptop CI / remote build server
┌──────────────────┐ ┌────────────────────────────┐
│ Claude Code │ │ devtap -- make │
│ get_build_errors│ │ │
│ │ │ captures stdout/stderr │
│ receives errors,│ └─────────────┬──────────────┘
│ fixes code │ │ write
└────────┬─────────┘ ▼
│ drain ┌────────────────────────────┐
└───────────────────►│ GreptimeDB │
│ (shared session store) │
└────────────────────────────┘devtap install为您的AI工具配置MCP服务器(pass--session和--store用于跨机器设置)devtap --运行命令,捕获stdout/stderr,扇出所有已注册的适配器- 每个AI工具都通过以下方式独立地排出自己的副本
get_build_errors - AI看到错误并修复它们
当 mcp-serve/drain 以显式开头 --session 或 --store,devtap可以合并两个来源的输出:
local:从默认后端自动检测项目会话configured:明确--session/--store目标
如果两者都解析为相同的后端+会话,devtap将使用单个源。否则,它会耗尽两者,消除相同的消息重复,并在标签前添加源信息(例如 myhost/local |).
支持的工具
| 工具 | 适配器 | 集成 | 配置文件 | 指令文件 |
|---|---|---|---|---|
| 克劳德代码 | claude-code | MCP服务器 | .mcp.json | CLAUDE.md |
| Codex CLI | codex | MCP服务器 | .codex/config.toml | AGENTS.md |
| 开源代码 | opencode | MCP服务器 | opencode.json | AGENTS.md |
| Gemini CLI | gemini | MCP服务器 | .gemini/settings.json | GEMINI.md |
| 帮助 | aider | --lint-cmd 包装纸 | .devtap-aider-lint.sh | CONVENTIONS.md |
任何与MCP兼容的工具都可以使用 devtap mcp-serve 直接。
自动循环模式(克劳德代码)
Claude Code支持一个Stop钩子,可以在错误仍然存在时阻止Claude停止:
devtap install --adapter claude-code --auto-loop --max-retries 5这将配置:
- 用于按需错误查询的MCP服务器
- 如果构建错误悬而未决,则停止阻止Claude完成的钩子
- 允许停止前重试5次的安全限制
存储后端
文件(默认)
零依赖JSONL文件 ~/.devtap///pending.jsonl每个适配器都有自己的队列供独立使用。原子重命名以确保并发安全。
GreptimeDB (可选)
用于持久历史记录、基于SQL的过滤和更丰富的统计数据。使用远程GreptimeDB实例,构建和AI工具甚至不需要在同一台机器上——请参阅 跨机器构建 了解详情。
看 GreoptimeDB安装指南 更多选择。
Docker快速入门:
docker run -d \
--name greptime-devtap \
--restart unless-stopped \
-p 127.0.0.1:4000-4002:4000-4002 \
-v ~/.devtap/greptimedb_data:/greptimedb_data \
greptime/greptimedb:latest standalone start \
--http-addr 0.0.0.0:4000 \
--rpc-bind-addr 0.0.0.0:4001 \
--mysql-addr 0.0.0.0:4002容器在后台运行(-d)Docker自动启动(--restart unless-stopped).这 -v 旗架 ~/.devtap/greptimedb_data/ 用于持久存储。
# Configure in ~/.devtap/config.toml (this becomes the default store)
cat > ~/.devtap/config.toml [args...]
Flags:
-a, --adapter AI tool adapter (default "claude-code")
-s, --session Target session ("auto", "pick", or explicit name)
--store Storage backend ("file" or "greptimedb")
--filter-regex
Regex filter for output lines
--filter-invert Invert filter (exclude matching lines)
--max-lines Max lines per drain (default 10000)
--tag Log tag prefix (default: command name)
--debounce Flush interval for captured output (default "2s", 0 to disable)
Subcommands:
install Configure AI tool integration (--session and --store are forwarded to MCP config)
mcp-serve Start MCP stdio server
drain Read pending messages as plain text
-q, --quiet Raw output without source/tag headers
status Show pending message counts
-q, --quiet Compact output (pending count only)
history Query build error history (GreptimeDB only)
--since Time range (default "24h")
--tag Filter by tag
--limit Max entries (default 20)
gc Remove expired session data (default TTL: 7 days)线路超过 --max-lines 被巧妙地截断:头部和尾部保留了省略通知。连续的重复行被合并。
devtap mcp-serve 和 devtap drain 可以如上所述聚合多个源(本地+配置)。 devtap drain --filter-sql 是单源模式,需要 --store greptimedb.
故障排除
- 没有输出,但您需要日志:run
devtap status首先,然后devtap drain --max-lines 200. - 使用意外会话:使用运行
--session pick一次确认目标会话。 - 多源漏极显示警告:可到达的源仍然返回;警告表示一个源不可用。
- MCP工具未被调用:重新运行
devtap install --adapter在项目根目录中,重新启动AI工具会话。
安全与隐私
- 所有数据都保留在本地。 构建输出存储在您的机器上
~/.devtap/(文件后端)或在自托管的GreptimeDB实例中。不会向外部服务器发送任何内容。 - MCP通信是本地标准。 MCP服务器作为AI工具的子进程运行,通过stdin/stdout JSON-RPC进行通信。没有打开网络插座。
- 没有遥测。 devtap不收集使用数据、分析或崩溃报告。
--filter-sql这不是安全边界。 它包括一个尽力而为的关键字块列表,但是为了方便而设计的,而不是为了对抗输入。用户已经具有完全的本地和数据库访问权限。- 清理: 跑
devtap gc删除过期的会话数据,或删除~/.devtap/完全删除所有存储的数据。
许可证
麻省理工学院

