nfi工具
CLI工具和MCP服务器,用于处理敏感信息,而不会将秘密值暴露给AI助手。
当你告诉AI助手“将我的Stripe密钥添加到.env”时,助手会调用 nfi 这将打开一个基于浏览器的提示,让您输入密码。该值直接进入文件——AI永远不会看到它。
安装
npm install -g nfi-tools或者在不安装的情况下使用:
npx nfi-tools set .env STRIPE_SECRET_KEY运作原理
- 你告诉AI:“将我的Stripe密钥添加到
.env" - AI运行:
nfi set .env STRIPE_SECRET_KEY - 浏览器选项卡打开,显示密码输入表单
- 你粘贴你的秘密(密码管理器在这里工作)
- 工具写入
STRIPE_SECRET_KEY=sk_live_...到.env - AI只看到:“给.env写了一个秘密”
秘密永远不会进入AI的上下文窗口。基于浏览器的输入也意味着您可以从1Password、Bitwarden、LastPass或浏览器的内置密码管理器自动填充。
命令
设置秘密
nfi set .env STRIPE_SECRET_KEY # single secret
nfi set .env STRIPE_SECRET_KEY DATABASE_URL # multiple secrets in one form
nfi set config.json database.password # nested key in JSON
nfi set config.yaml api.key --overwrite # overwrite existing检查是否存在密钥
nfi has API_KEY .env # exit code 0 if exists, 1 if not
nfi has API_KEY .env -q # quiet mode, exit code only列出键(无值)
nfi keys .env # flat list for .env
nfi keys config.json # leaf paths: database.host, database.port, ...
nfi keys config.json --depth 1 # top-level only: database, api, ...文件之间的差异密钥
nfi diff .env .env.example # what's missing from each取出钥匙
nfi remove API_KEY .env # deletes the line entirely在文件之间复制秘密
nfi copy DATABASE_URL .env config.json --path database.url该值是在内部读写的——它从不出现在stdout中。
生成随机秘密
nfi generate SESSION_SECRET .env # default: hex, 64 chars
nfi generate APP_KEY .env --template uuid # UUID v4
nfi generate TOKEN .env --template base64:32 # base64, 32 chars
nfi generate SECRET .env --template alphanumeric:48 # alphanumeric, 48 chars
nfi generate KEY .env --dry-run # preview without writing支持的格式
| 格式 | 检测 | 注释 |
|---|---|---|
.env | .env, .env.local, .env.* | 保留注释和空白行。手柄 export 前缀和内联注释。 |
.json | .json | 嵌套路径的点表示法(database.password) |
.yaml / .yml | .yaml, .yml | 嵌套路径的点表示法 |
.toml | .toml | 嵌套路径的点表示法 |
覆盖检测 --format:
nfi set secrets.txt API_KEY --format envMCP服务器
对于支持MCP但不支持shell访问的AI客户端(Claude Desktop、Cursor等):
nfi mcp install # auto-detect client
nfi mcp install --client cursor # specify client此注册 nfi 作为MCP服务器。然后,人工智能可以调用以下工具 store_secret, check_secret, list_keys,以及 generate_secret 直接。
可用的MCP工具:
store_secret-通过浏览器提示输入机密,写入文件check_secret-检查是否存在键(从不显示值)list_keys-列出文件中的所有键名diff_keys-比较两个文件之间的密钥generate_secret-生成并写入随机秘密remove_secret-从文件中删除密钥copy_secret-在文件之间复制秘密describe_capabilities-列出可用的工具、格式和模板
配置
可选配置文件位于 ~/.config/nfi/config.json:
{
"timeout": 300000,
"defaultFormat": null,
"overwriteByDefault": false,
"inputMethod": "auto",
"generateTemplate": "hex:64"
}timeout-浏览器提示超时(毫秒)(默认值:5分钟)inputMethod-"auto"(具有TTY回退功能的浏览器),"browser",或"tty"generateTemplate-默认模板nfi generate
CLI标志始终覆盖配置值。
全球旗帜
| 标志 | 描述 |
|---|---|
--format | 覆盖格式检测(env, json, yaml, toml) |
--overwrite | 允许替换现有钥匙 |
--verbose | 显示详细输出 |
--quiet | 抑制输出(仅退出代码) |
--timeout | 浏览器提示超时 |
--dry-run | 预览而不写(仅生成) |
安全
- 机密值从不出现在stdout、stderr或工具返回值中
- 通过带有一次性令牌的临时本地主机服务器收集的浏览器输入
- 令牌比较使用恒定的时间相等性来防止定时攻击
- 根据Origin标头验证POST提交
- 请求限制正文大小以防止内存耗尽
- TTY回退读取自
/dev/tty直接绕过人工智能控制的stdin - 如果
/dev/tty不可用,工具错误而不是回退到stdin .gitignore写入未涵盖的文件时的警告.gitignore
输入回退链
- 浏览器 -打开一个包含密码字段的localhost页面(支持密码管理器自动填充)
- URL中继 -如果浏览器无法自动打开(MCP/remote),则返回一个可点击的URL
- 电传打字机 -直接
/dev/tty带有掩码输入的提示(SSH会话、无头环境)
需求
- Node.js 20+
- 也与Bun合作
许可证
麻省理工学院
