开发输出桥接工具

devtap 是一个自动化工具,用于捕获构建和开发命令的输出,并通过 MCP(模型上下文协议)将其反馈到 AI 编程工具会话中,支持多代理并行分析。

  • by tma1-ai
  • Go
  • 本地部署
  • 13 星标
  • 更新于
在 GitHub 查看 killme2008/devtap

使用说明

devtap

自动将构建/开发过程输出连接到AI编码会话。

devtap 从构建和开发命令中捕获stdout/stderr,然后通过以下方式将其馈送到AI编码工具会话中 主控程序 (模型上下文协议)。它还可以将相同的输出扇出到多个编码代理。每个代理都会消耗自己的副本,这样并行会话就不会干扰。

问题

在vibe编码工作流程中,您可以在一个终端中运行AI编码工具,并在另一个终端上构建命令。当出现错误时,您可以手动将粘贴日志复制到编码会话中。 devtap 自动执行此反馈循环。

三种常见的情况使这种情况特别痛苦:

  1. 您需要关注并快速修复的多个本地开发进程(前端+后端+工作进程)。
  2. 多个编码代理在同一个项目上工作,您希望他们并行分析相同的失败并比较结果。
  3. 在远程机器(CI、dev box)上进行构建/测试运行,您需要将其输出反馈给本地编码代理。

快速开始

安装

go install github.com/killme2008/devtap/cmd/devtap@latest

或者通过Homebrew安装:

brew install killme2008/tap/devtap

或从以下网址下载 GitHub发布.

设置

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/<s>/claude-code/│
└──────────────────┘             │  ~/.devtap/<s>/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)    │
                              └────────────────────────────┘
  1. devtap install 为您的AI工具配置MCP服务器(pass --session 和 --store 用于跨机器设置)
  2. devtap -- <cmd> 运行命令,捕获stdout/stderr,扇出所有已注册的适配器
  3. 每个AI工具都通过以下方式独立地排出自己的副本 get_build_errors
  4. 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/<session>/<adapter>/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 <<EOF
[store]
backend = "greptimedb"

[store.greptimedb]
endpoint = "127.0.0.1:4001"
mysql_endpoint = "127.0.0.1:4002"
database = "public"
EOF

# Now devtap uses GreptimeDB by default
devtap -- cargo check

# SQL-based filtering
devtap drain --filter-sql "content LIKE '%error%'"

# Query build error history
devtap history --since 24h

# Or override per-command (e.g., fall back to file store)
devtap --store file -- cargo check

# View logs in GreptimeDB dashboard
open http://127.0.0.1:4000/dashboard/#/dashboard/logs-query

通过环境变量的凭据:

export DEVTAP_GREPTIMEDB_USERNAME=...
export DEVTAP_GREPTIMEDB_PASSWORD=...

高级用法

多个实例 --使用 --tag 为同一会话运行并行观察程序:

devtap --tag cargo-check -- cargo watch -x check
devtap --tag cargo-test --debounce 5s -- cargo watch -x test

多适配器扇出 --当安装了多个AI工具时,构建输出会自动传递给所有这些工具。每个工具都独立地使用自己的副本。

跨机器构建 --与共享 GreptimeDB 例如,构建和AI工具可以在不同的机器上运行。使用 --session 为双方提供相同的逻辑会话名称:

# Machine B (your laptop) — install once, bakes --session and --store into MCP config
devtap install --adapter claude-code --session myproject --store greptimedb

# Machine A (CI / remote build server)
devtap --store greptimedb --session myproject -- make

devtap install 写 --session 和 --store 标记到MCP配置文件中(例如。 .mcp.json),因此AI工具的MCP服务器会自动连接到正确的GreptimeDB实例和会话。

多台构建机器可以同时写入同一个会话——每个条目都标记了其来源,AI工具会将它们全部耗尽。

本地+远程合并排水 --同时保持本地循环和远程共享会话可见:

# Laptop: local output (default source)
devtap -- cargo check

# Remote machine: shared session output (configured source)
devtap --store greptimedb --session myproject -- make

# Laptop: install MCP with explicit remote session
devtap install --adapter claude-code --store greptimedb --session myproject

# Optional manual check (without MCP client)
devtap drain --store greptimedb --session myproject

devtap drain 显示合并的标题(Draining from N sources),在发生部分故障时发出源不可达警告,并且仍然从可达源返回可用输出。

典型的合并标题:

[devtap] Draining from 2 sources (2 reachable)

会话自动检测 --何时 --session auto (默认),devtap解析项目目录如下:

  1. Git根目录(最近的父目录 .git)
  2. 项目标记文件(与以下文件之一最近的父文件: go.mod, package.json, pyproject.toml, Cargo.toml, pom.xml, build.gradle, build.gradle.kts, composer.json, Gemfile, setup.py)
  3. 当前工作目录

链接命令 — devtap 在以下情况下捕获单个命令 --。如果你需要shell运算符,比如 &&,将命令包装在shell中:

devtap -- sh -c "npm install && npm run dev"

或者单独运行它们:

devtap -- npm install
devtap -- npm run dev

CLI参考

devtap [flags] -- <command> [args...]

Flags:
  -a, --adapter <name>       AI tool adapter (default "claude-code")
  -s, --session <id>         Target session ("auto", "pick", or explicit name)
      --store <backend>      Storage backend ("file" or "greptimedb")
      --filter-regex <pat>   Regex filter for output lines
      --filter-invert        Invert filter (exclude matching lines)
      --max-lines <n>        Max lines per drain (default 10000)
      --tag <label>          Log tag prefix (default: command name)
      --debounce <dur>       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 <dur>    Time range (default "24h")
                --tag <label>    Filter by tag
                --limit <n>      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 <adapter> 在项目根目录中,重新启动AI工具会话。

安全与隐私

  • 所有数据都保留在本地。 构建输出存储在您的机器上 ~/.devtap/ (文件后端)或在自托管的GreptimeDB实例中。不会向外部服务器发送任何内容。
  • MCP通信是本地标准。 MCP服务器作为AI工具的子进程运行,通过stdin/stdout JSON-RPC进行通信。没有打开网络插座。
  • 没有遥测。 devtap不收集使用数据、分析或崩溃报告。
  • --filter-sql 这不是安全边界。 它包括一个尽力而为的关键字块列表,但是为了方便而设计的,而不是为了对抗输入。用户已经具有完全的本地和数据库访问权限。
  • 清理: 跑 devtap gc 删除过期的会话数据,或删除 ~/.devtap/ 完全删除所有存储的数据。

许可证

麻省理工学院