本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:

  • 我的帖子已经打上 开源推广 标签:
  • 我的开源项目完整开源,无未开源部分:
  • 我的开源项目已链接认可 LINUX DO 社区:
  • 我帖子内的项目介绍,AI生成、润色内容部分已截图发出:
  • 以上选择我承诺是永久有效的,接受社区和佬友监督:

以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出


为 Codex 添加五个模型能使用的原生工具,通过 MCP 的方式向模型暴露。macOS、Linux、Windows 的 CLI 和 App 均支持。

  • read工具(目前支持一切常规编码文本文件,pdf文字或图片模式读取,后续会添加office读取)
  • glob工具:用于查找文件
  • grep工具:查找文件内容
  • bash前后台终端工具(windows使用git bash,mac linux使用系统bash)
  • 一个小巧的replace工具,用于匹配词的批量替换,比如将某文档某个函数名批量替换为另一个

五大工具完全避免codex将注意力放在各种终端各种命令拼写上。这会显著提高模型完成任务速度和准确性。对于Windows用户,这意味着可以永久不再受powershell折磨。

安装方法

windos用户需要安装git:Git - Install for Windows

全局安装(需要node.js:Node.js — Download Node.js® ):

npm install --global fastctx

如遇404,无法找到包,或无法更新,运行(本次安装强制使用官方源安装):

npm install --global fastctx --registry=https://registry.npmjs.org/

之后终端直接输入

fastctx

进入控制终端。存在自动更新检查

image

FastCtx 解决什么问题

要理解本项目做了什么,需要理解codex本身是如何和电脑系统进行交互的
下列以readgrep为例

1. read:读取文件

原生 Codex 读取一个 GBK 文件的第 120~159 行,可能需要临时构造:

$offset = 120
$limit = 40
$line = $offset
 
$bytes = [IO.File]::ReadAllBytes('V:\repo\docs\legacy.txt')
$text = [Text.Encoding]::GetEncoding(936).GetString($bytes)
 
$text -split "\r?\n" |
  Select-Object -Skip ($offset - 1) -First $limit |
  ForEach-Object { "{0}\`t{1}" -f $line++, $_ }

这里的代码页、分页、行号和“是否还有后续”都要由模型自己处理。
在FastCtx下

{
  "file_path": "V:/repo/docs/legacy.txt",
  "encoding": "gbk",
  "offset": 120,
  "limit": 40
}

工具调用结束后返回

文件文本
(Partial: lines 120-159 of 512 shown. Continue with offset=160.)

这能清晰的看出二者区别,让模型进行结构化的函数调用是一定比手动更加清晰,结果更明确。5.6sol是一个被codex拖累的模型,大量的注意力会放在命令拼写上而不是任务本身。

2. grep:搜索文件内容

原生 PowerShell 搜索整个项目:

Get-ChildItem -LiteralPath 'V:\repo' -Recurse -File -Force |
  Where-Object { $_.FullName -notmatch '[\\/]\.git[\\/]' } |
  Select-String -Pattern '^TODO$' -Context 1,1

Select-String 本身支持逐行正则搜索,但目录遍历规则需要模型自己拼接。

FastCtx 调用:

{
  "pattern": "^TODO$",
  "path": "V:/repo",
  "output_mode": "content",
  "context": 1
}

配置介绍

  • fastctx是一个mcp,他通过TUI进行安装,TUI可进行配置,更新检查,查看运行终端等操作。但模型调用环境随codex自动启动和终止,无需一直开着TUI。

image

详情见TUI选项和描述
需要注意的是

  • 输出档位是config.toml中的控制全局工具单次输出的最高长度。设置太高会导致上下文被快速占满,太低会导致模型产生太多读取次数。如果不知道这些什么意思,输出部分保持全默认
  • 扩展工具部分:bash终端启用后模型会使用我们提供的终端替代codex原始终端,windos强烈建议开启,linux和mac用户,如果需要我们提供的新功能,也可以开启

终端工具

fastctx提供这几个工具

工具用途
run前台执行 Bash 命令
run_background启动后台 Bash 任务
job_output增量读取后台任务输出
job_kill终止后台任务的整个进程树
job_list找回运行中及已留存的终态任务
  • run命令是前台终端,这是模型一次工具调用,模型会被挂起直到终端结束。存在timeout,但模型会自行选择前台还是后台终端。
  • run_background是启动一次后台终端,后台终端会运行在独立的和codex解耦的fastctx内核中,不和模型会话状态绑定,模型不会被挂起阻塞。
  • 模型能随时读取后台终端最新输出。终端内容会存储,任务存储上限即配置:所有会话后台终端输出内容在磁盘中总空间预算。若超出会自动从最老的进行清理(不影响运行中终端)
  • 后台终端无超时参数只要电脑不关机,进程不崩溃就会一直运行。这么做是为了避免长训练之类的终端任务被误杀。模型可手动终止,用户这边可以在TUI的任务界面看到具体信息。
  • 假如电脑意外重启,同一个会话下模型也可凭终端id查看输出
    image

仓库地址

github.com

GitHub - yc-duan/fastctx: Fast, context-efficient repository tools for AI…

Fast, context-efficient repository tools for AI agents (MCP)

系列文章

此文件夹下有0条笔记。