MINARA
参考环境变量

x402 付费墙预授权

x402 付费墙预授权 (PR-X)

这些变量约束 "会话级预授权" 特性, 它让运营方对给定 scope 一次性授权 x402 付费墙付款, 然后自动付款(无需每次调用确认)直到 过期 / 预算耗尽 / 显式撤销。 授权调用本身始终经过统一确认 门。它落下一个 session 行后,匹配该 session scope 的 窗口内 x402 付款会跳过每次调用的用户提示,并 经 transfer_token 直接执行。每笔自动支出都写入 审计元数据(session id + 剩余预算),因此用户可以 追踪每笔扣费。 接入于: - src/minara/x402-preauth-store.ts(SQLite store + 上限计算) - src/minara/x402-preauth-config.ts(env loader + 上限 helper) - src/tools/_shared/confirm.ts(shouldAutoExecuteX402) - src/tools/trade.ts(transfer_token 先咨询自动执行路径; 未匹配的付款仍走统一确认门) - src/tools/x402-preauth.ts(LLM 可调用的 grant / list / revoke) - src/gateway/repl-commands.ts(/x402 preauth CLI 面)

X402_PREAUTH_DEFAULT_TTL_HOURS

当用户/LLM 未指定时的默认会话过期 时间。

  • 作用: 调用 x402_preauth_grant 时未带 ttl_hours 所应用的 TTL。
  • 消费方: src/minara/x402-preauth-config.ts.
  • 何时设置: 调短可让授权保持短时有效(例如 4 = 4h);调高可为长时间运行的批处理任务留出更多空间。
  • 未设置时: 24 小时。
  • 格式: 正整数(小时)。
  • 设置归属: 非用户设置项

X402_PREAUTH_MAX_TTL_HOURS

非 forever 会话 TTL 的硬上限。

  • 作用: ttl_hours > 此值 的授权请求会以 field: "ttlMs" 被拒绝。该上限辅助函数在 LLM 工具、REPL 命令与直接访问 store 三处统一执行。
  • 何时设置: 调短可强制更短的运维信任窗口;仅当长时会话是部署要求时才调高。
  • 未设置时: 168(7 天)。
  • 格式: 正整数(小时)。
  • 设置归属: 非用户设置项

X402_PREAUTH_ALLOW_FOREVER

是否允许 ttl_hours: "forever" (无基于时间的过期)授权。

  • 作用: 当为 0 时,LLM 工具 + REPL + store 会以 field: "forever" 拒绝 forever 授权请求。forever 预算上限仍会被读取以供文档说明,但永远不会触及。对于希望每笔授权都有硬性过期边界的环境(审计/合规),设为 0
  • 未设置时: 1(允许 forever 授权,需在 REPL 中经用户显式二次确认把关,且 LLM 绝不自动提议 forever)。
  • 格式: 1/true/yes/on(允许)或 0/false/no/off
  • 设置归属: 非用户设置项

X402_PREAUTH_MAX_PER_CALL_USDC

单笔自动支付 x402 付款的硬上限 (USDC)。

  • 作用: (a) LLM 工具 + REPL 拒绝 per_call_cap_usdc > 此值 的授权;(b) 对于任何超过此金额的单笔付款,shouldAutoExecuteX402 会以 amount_over_cap 短路,回退到常规的两步确认。这是最重要的一条安全边界——即便用户在已有会话中授予了更高的上限,它也能限制单个恶意付费墙最多能榨取多少。
  • 何时设置: 在共享基础设施上调低以限制单笔的影响范围。仅当付费墙的正当成本更高时才调高。
  • 未设置时: 0.5(USDC)。
  • 格式: 正数(USDC)。
  • 设置归属: 非用户设置项

X402_PREAUTH_MAX_BUDGET_USDC

非 forever 会话总预算的硬上限 (USDC)。

  • 作用: 同时满足 total_budget_usdc > 此值ttl_hours 非 null 的授权请求会被拒绝。forever 授权的预算使用下方单独的(通常更严格的)上限。
  • 未设置时: 5(USDC)。
  • 格式: 正数(USDC)。
  • 设置归属: 非用户设置项

X402_PREAUTH_MAX_FOREVER_BUDGET_USDC

forever 会话总预算的硬上限 (USDC)。

  • 作用: 与 MAX_BUDGET_USDC 形式相同,但仅在 ttl_hours: "forever" 时适用。之所以独立,是因为去掉时间边界后需要更严格的金额控制。forever 预算可以高于或低于按时间限定的预算——由运维选择;默认值设得更高,是因为 forever 授权通常是每笔金额很小、但在数月内累积(「$0.01/call x 2000 calls」)。
  • 未设置时: 20(USDC)。
  • 格式: 正数(USDC)。
  • 设置归属: 非用户设置项

X402_PREAUTH_DISABLE

全局 kill switch。

  • 作用: 当为 1 时,所有 preauth 代码路径都会短路。transfer_token 忽略 x402_context,LLM 工具返回 disabled 错误,REPL 打印「x402 preauth disabled by env」并拒绝授权。所有 x402 付款回退到常规的两步确认流程。
  • 何时设置: 事件响应(疑似失控的付费墙)、每笔付款都必须经用户显式确认并记录的合规审计窗口,或者根本不想要此功能的运维。
  • 未设置时: 0(preauth 机制处于激活状态)。
  • 格式: 1/true/yes/on 表示禁用;其他任何值(默认)保持启用。
  • 设置归属: 非用户设置项

OpenClaw workspace 集成

agent 读写位于 ~/.minara/workspace/ 的 workspace 目录 (经 --workspace 覆盖),其中含仿照 OpenClaw 的 AGENTS.default schema 的 markdown 文件:SOUL.md(身份)、 AGENTS.md(规则)、IDENTITY.md、USER.md、MEMORY.md(精选长期)、 HEARTBEAT.md(会话间备忘)、BOOTSTRAP.md(仅首次运行), 以及 memory/YYYY-MM-DD-*.md(每日日志)。 模板随 src/workspace/templates/ 发布。minara setup 在首次运行时播种它们。播种是幂等的,绝不 覆盖用户已编辑过的文件。

WORKSPACE_HEARTBEAT_ENABLED

每轮写入 HEARTBEAT.md 状态的写入器。

  • 作用: 开启时,agent 在每轮结束后写入 <workspace>/HEARTBEAT.md,包含 last_seensession_idsurfaceturn_countlast_user_query,以及从回复中启发式提取的 open_loops。写入器在多次写入间原样保留用户编辑过的 ## Schedule 小节。
  • When to disable: 只读的 workspace 挂载、CI 运行,或不希望在磁盘上留下会话备忘的隐私敏感场景。
  • 未设置时: 开启。
  • 格式: 0/false/no/off 表示禁用;其他任何值(默认)保持启用。
  • 设置归属: 设置 → 偏好(schema 键)

WORKSPACE_DAILY_LOG_ENABLED

追加按会话的每日日志。

  • 作用: 开启时,每个周期会在持久化的 SQLite 水位之后,把所有尚未记账的 chat_turns 行刷写到 <workspace>/memory/YYYY-MM-DD-<session>.md。这些行保留其真实的 session id、surface 与 runtime 来源;correlation id 绝不会被用作 session id。按会话分文件可避免多进程追加竞争。
  • When to enable: 长期运行的部署,希望 agent 积累工作记忆,供你之后提升到 MEMORY.md。
  • 未设置时: 关闭(在显式开启前,workspace 保持精简)。
  • 格式: 1/true/yes/on 表示启用。
  • 设置归属: 设置 → 偏好(schema 键)

WORKSPACE_DAILY_LOG_INTERVAL

每日日志追加之间的轮数。

  • 作用: 刷写上述 chat_turns 积压的节奏。每次到期刷写都会写入水位之后的所有行,因此增大间隔只会延迟持久化,而不会对中间的轮次进行抽样或丢弃。
  • 未设置时: 5 轮。
  • 格式: 正整数。
  • 设置归属: 非用户设置项

WORKSPACE_DREAM_ENABLED

周期性的 MEMORY.md 归并。

  • 作用: 开启时,一个 setInterval 任务每隔 WORKSPACE_DREAM_INTERVAL_HOURS 唤醒一次,从 memory/ 读取近期的每日日志,并请求当前 LLM 提取持久的事实/偏好/决策。结果会作为 ## Dreamed YYYY-MM-DD 小节追加到 MEMORY.md(仅追加——绝不覆盖用户编辑)。来自自动化的日志轮次在磁盘上仍可审计,但会在进入 LLM prompt 前被移除,因此 Autopilot、strategy、workflow 或来源未知的 perps 运行不会变成用户偏好。
  • When to enable: 长期运行的部署,运维希望长期记忆从短期日志演化而来、无需手工整理。会消耗 LLM 调用——在成本敏感的场景下保持关闭。
  • 未设置时: 关闭。
  • 格式: 1/true/yes/on 表示启用。
  • 设置归属: 设置 → 偏好(schema 键)

WORKSPACE_DREAM_INTERVAL_HOURS

dream 归并的节奏。

  • 作用: 两次 dreaming 运行之间的小时数。当上一次运行仍在进行时,调度器会跳过该 tick,因此缓慢的 LLM 调用不会堆积。当 WORKSPACE_DREAM_ENABLED 关闭时无效。
  • 未设置时: 24(每天一次归并)。
  • 格式: 正数(小时,可为小数)。
  • 设置归属: 非用户设置项

WORKSPACE_DREAM_TOTAL_INPUT_BYTES

dream prompt 输入的全局字节预算 (所有每日日志合计)。

  • 作用: 限制单次 dream pass 送入 LLM 的总字节数。每日日志会在预算内保留为一段最新在前的连续后缀,因此模型始终看到一段按时间连续、且包含最近活动的切片。防止一段密集日志的长窗口冲破模型的上下文窗口。单文件内容仍会尾部截断到 64 KB(单文件上限),且即使最近的日志单独就超过此预算,也始终保留。当 WORKSPACE_DREAM_ENABLED 关闭时无效。
  • 未设置时: 262144(256 KB)。
  • 格式: 正整数(字节)。
  • 设置归属: 非用户设置项

WORKSPACE_DREAM_LOCK_TTL_MS

dream 锁文件的 TTL。

  • 作用: 一个 <workspace>/.dreaming.lock 文件在被视为过期、可被其他进程回收之前会被尊重多久。应反映单次 dream pass(LLM 调用 + IO)的最长合理时长,而非两次运行之间的间隔。该锁可防止 REPL 与 HTTP gateway 在各自的 tick 窗口重叠时,同时把相同日志归并进 MEMORY.md。不支持 NFS workspace(底层 O_EXCL 语义无法保证在所有 NFS 客户端上都是原子的)——请让 dreaming 保持在单台主机上。当 WORKSPACE_DREAM_ENABLED 关闭时无效。
  • 未设置时: 1800000(30 分钟)。
  • 格式: 正整数(毫秒)。
  • 设置归属: 非用户设置项

REPORT_BUNDLE_CHART_PNGS

在 deep-research 的 HTML / PDF 报告中回退到 PNG 打包的图表,而非交互式 ECharts。

  • 作用: 当设置时,gateway 的 deep-research 分支向 renderDeepResearchReport 传入 ["html", "pdf", "charts"],于是 bundleChartPngs 运行,HTML 将每个 chart://<id> 内嵌为静态的 <img src="charts/<id>.png"> 标签(通过无头 playwright 在服务端渲染)。未设置时(v7 起的默认),gateway 只传入 ["html", "pdf"],每个 chart:// 链接展开为标准的 ECharts 内嵌形式(<div class="echart-host"> + 从 echarts CDN 注水的内联 <script>)。默认产生带缩放 + tooltip + saveAsImage PNG 下载的交互式图表。
  • 由哪个 skill / tool 消费:deep-research 流水线(src/gateway/api.tshandleChatStream deep-research 分支)。
  • When to set it: 需要导出报告用于离线分发(echarts CDN 不可达)的运维,或无法容忍打开时拉取约 120 KB CDN 脚本的运维。权衡:PNG 打包的图表是静态的——无缩放、无 tooltip、无 PNG 下载按钮。必须安装无头 playwright(已是项目依赖)才能运行图表物化。
  • 未设置时: 交互式 ECharts(CDN 注水)。在有网络访问的浏览器中打开 HTML 即可看到图表;离线时图表会按内嵌脚本的 try/catch 降级为一个小小的「chart unavailable」占位。
  • 格式: 1 / true(启用)——其他任何值或未设置都表示禁用。
  • 设置归属: 设置 → 偏好(schema 键)

钱包充值监听

实时充值检测 SSE 端点 (POST /v1/wallet/deposits/watch)。为 perps USDC/Arbitrum 地址 的 Portfolio DepositModal 中的绿色翻转提供动力。 两种链传输方式;agent 在启动时选择: 1. Alchemy(首选)——设置 ALCHEMY_API_KEY。使用 alchemy_getAssetTransfers(专为传入转账构建的 查询)+ alchemy_pendingTransactions WS 订阅以 实时观测 mempool。免费层:每月 300M CU。 2. 公共 RPC 回退——无 ALCHEMY_API_KEY 时。每 5s 轮询 eth_getLogs,过滤到充值地址的 USDC Transfer 事件。无 mempool 可见性(此模式下不发出 pending 事件)。 它控制什么:WALLET_DEPOSIT_WATCH_ENABLED——该 SSE 端点的 总开关。开发环境默认 ON,让该特性开箱 即用;设为 false / 0 干净地禁用。关闭时, web-ui 的 DepositStatus pill 显示 "Live updates unavailable", 用户仍可正常复制地址。 哪个 skill / 工具消费它:apps/agent/src/wallet-watch/* 和 api.ts 的 handleWalletDepositsWatch 处理器。

WALLET_DEPOSIT_WATCH_ENABLED

WALLET_DEPOSIT_WATCH_ENABLED=true

  • 设置归属: 设置 → 偏好(schema 键)

ALCHEMY_API_KEY

Alchemy 的 Arbitrum API key。一个 key 可用于所有 Alchemy 链。可选—— 不配置时 watcher 回退到公共 Arbitrum RPC(无 mempool 检测)。 ALCHEMY_API_KEY=abc123...

  • 设置归属: 设置 → API 密钥

ALCHEMY_NETWORK

Alchemy 网络枚举字符串。arb-mainnet 是目前我们唯一关心的(perps 钱包 充值 = Arbitrum 上的 USDC)。仅当你把 ALCHEMY_API_KEY 指向测试网做端到端 QA 时才覆盖。 ALCHEMY_NETWORK=arb-mainnet

  • 设置归属: 非用户设置项

ARBITRUM_RPC_URL

公共 Arbitrum RPC URL——在 ALCHEMY_API_KEY 未设置时使用。

SOLANA_RPC_URL

公共 Solana RPC URL——由现货充值 watcher 用于 Solana 链。非 EVM,因此不会 自动接入 Alchemy;会先尝试此 URL,再依次尝试 foundation 级别的公共列表 (api.mainnet-beta.solana.com、solana-rpc.publicnode.com、…)。该 transport 每 5 秒轮询一次用户 USDC token 账户上的 getSignaturesForAddress,并在 confirmed 确认级别翻转为 credited

DEPOSIT_WATCH_TIMEOUT_MS

一个 watch 会话在自动关闭前会存续多久(ms)。默认 20 分钟——足以应对缓慢 的链上确认,同时限制忘记关闭的弹窗对资源的占用。 DEPOSIT_WATCH_TIMEOUT_MS=1200000

  • 设置归属: 非用户设置项

本页目录