npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

agent-calling

v1.0.5

Published

Codex MCP bridge for delegating plans to Claude Code.

Readme

agent-calling

agent-calling 是一个 Codex MCP 服务,用于把 Codex 生成的任务方案桥接给 Claude Code 执行。Codex 启动时会启动 MCP 服务,关闭时自动销毁;Claude 执行 workspace 固定为当前项目的 .agents/calling,运行数据和日志统一写入 .agents/calling/logs

config.toml 配置

推荐使用 npx 启动,不依赖本地源码路径。配置位置通常是 ~/.codex/config.toml

[mcp_servers.agent-calling]
command = "npx"
args = [
  "-y",
  "agent-calling",
  "mcp"
]
startup_timeout_sec = 20
tool_timeout_sec = 3600

npm 包入口

npm 包暴露命令:

npx -y agent-calling mcp

包内入口为 bin/agent-calling.js,它会启动包内 Python MCP 服务:

python <packageRoot>/python/start_worker.py --mcp

因此目标机器仍需要能执行:

python --version
claude --version

工作目录和日志

MCP 模式默认以 Codex 启动时的当前目录作为项目根目录。每次调用工具时也可以传入 projectRoot 覆盖。

  • workspace:<projectRoot>/.agents/calling
  • 日志根目录:<projectRoot>/.agents/calling/logs
  • MCP 日志:<projectRoot>/.agents/calling/logs/mcp.log
  • bridge 日志:<projectRoot>/.agents/calling/logs/bridge.log
  • run 数据:<projectRoot>/.agents/calling/logs/runs/<runId>/

不会生成 <projectRoot>/.agents/calling/.tmp/agent-bridge

MCP 工具

  • claude_bridge_health:检查 Claude Bridge 状态、workspace、日志目录、Windows Terminal、PowerShell7、Windows PowerShell、独立 worker 和 Claude 命令可用性。
  • claude_bridge_submit:提交 planTextplanPath 到独立 worker 队列,返回 runId 和 run 文件路径;不会主动打开窗口。
  • claude_bridge_run:提交任务并按 Windows Terminal -> PowerShell7 -> Windows PowerShell 的顺序打开可见 worker 窗口;Claude 实时输出只在该窗口展示,MCP 调用等待本地状态进入终态后返回 { status, worker, completion }

推荐调用流程:

claude_bridge_run -> PowerShell7 窗口展示 Claude 实时输出 -> MCP 调用轮询本地 status.json 到终态 -> 返回 status + worker + completion

MCP 服务不再声明 logging capability,不发送 notifications/messagenotifications/progress,也不提供 claude_bridge_wait / claude_bridge_read 工具。claude_bridge_run 只在 MCP 调用内部轮询本地 status.json 终态,不轮询 Claude 实时输出。

worker 窗口按 wt.exepwshpowershell 的顺序发现启动器。无论使用哪个启动器,最终都通过 -ExecutionPolicy Bypass -EncodedCommand <base64> 执行同一个 start_worker.py --once --run-id <runId>,不会生成临时 .ps1 启动脚本;执行结束后窗口自动关闭。bridge root 固定为:

<projectRoot>/.agents/calling/logs

Claude 执行命令会动态追加当前项目根目录,并使用用户明确要求的高权限模式:

claude -p --output-format stream-json --verbose --include-partial-messages --permission-mode bypassPermissions --add-dir <projectRoot>

bypassPermissions 会绕过 Claude Code 的权限确认,适合受信任自动化环境;不要在不可信仓库或不可信 plan 上使用。

开发验证

$env:PYTHONDONTWRITEBYTECODE='1'; python tests/claude_bridge_tests.py
$env:PYTHONDONTWRITEBYTECODE='1'; python -c "import ast, pathlib; files=[pathlib.Path(p) for p in ['tools/claude_bridge/common.py','tools/claude_bridge/submit_task.py','tools/claude_bridge/read_run.py','tools/claude_bridge/start_worker.py','python/common.py','python/start_worker.py','tests/claude_bridge_tests.py']]; [ast.parse(f.read_text(encoding='utf-8'), filename=str(f)) for f in files]; print('syntax ast parse passed')"