Skip to content

配置指南

Rnix 使用分层配置系统,通过 YAML 配置文件、Agent 定义和 Skill 定义来控制行为。运行 rnix init 可初始化配置环境。


配置模型

Rnix 的配置有三个独立维度:

1. 配置文件分层(XDG 风格)

YAML 配置文件(providers.yamlconfig.yamlweb-search.yaml)遵循 全局 + 项目 双层模型:

层级位置用途
全局层~/.config/rnix/(或 $XDG_CONFIG_HOME/rnix/用户级默认配置
项目层<project>/.rnix/项目级覆盖

YAML 文件采用深度合并:项目级值覆盖全局级值。

2. Skill 存储(agentskills.io 2×2 模型)

Skill 遵循 agentskills.io 规范的 dual-scope × dual-namespace 模型。Rnix 在每个 scope 下实现了两个 namespace

Native Namespace(Rnix)Agents Namespace(agentskills.io)
Project scope<project>/.rnix/skills/<project>/.agents/skills/
User scope~/.config/rnix/skills/~/.agents/skills/
  • Native namespace.rnix/skills/~/.config/rnix/skills/):Rnix 专属 skill,同 scope 内优先级最高
  • Agents namespace.agents/skills/~/.agents/skills/):遵循 agentskills.io 跨工具标准——置于此处的 skill 对 Cursor、OpenCode、Windsurf 等兼容工具可见

优先级:project/native > project/agents > user/native > user/agents。详见 Skill 包管理

3. 数据目录(会话与历史)

运行时产物——推理步骤、检查点、events.jsonl、可恢复历史——存放在配置旁边,而是位于单一的全局数据目录,按以下顺序解析:

优先级来源解析路径
1RNIX_DATA_DIR取其原值
2XDG_DATA_HOME$XDG_DATA_HOME/rnix
3(默认)~/.local/share/rnix

在数据目录下,每个项目在项目注册表中拥有自己的子树,以一个确定性的、可读的 ID 作为键:

<data-dir>/
└── projects/
    ├── my-api-3f9a1c2b/         ← <sanitized-basename>-<hash8>
    │   └── steps/
    │       └── <uuid>/          ← events.jsonl、proc-info.json、检查点
    └── another-repo-7c4e0d11/
        └── steps/

ID 形如 <sanitized-basename>-<hash8>,其中 hash8sha256(项目绝对路径) 的前 4 字节。哈希可避免两个同名 basename 的项目(例如两个不同的 api/ 目录)相互冲突,basename 则保持目录可读。如此集中存储,使得 rnix ps -arnix recordrnix replayrnix resume 能从单一根目录跨所有项目枚举历史,也让下文的**垃圾回收(GC)**能全局地应用 retention_days / max_entries

旧版本曾将会话数据存放在相对当前目录的 <project>/.rnix/data/steps/。该位置已被全局数据目录取代——.rnix/ 现在仅保存配置、状态和 skill。

目录结构

~/.config/rnix/                  ← 全局配置(由 rnix init 创建)
├── providers.yaml
├── config.yaml
├── web-search.yaml
├── agents/                      ← 全局 Agent 定义
│   └── code-analyst/
│       ├── agent.yaml
│       └── instructions.md
└── skills/                      ← 用户 skill(native namespace)
    └── code-analysis/
        └── SKILL.md

~/.agents/skills/                ← 用户 skill(agents namespace,agentskills.io 标准)
└── web-research/                ←   与 Cursor、OpenCode 等共享
    └── SKILL.md

<project>/.rnix/                  ← 项目配置(由 rnix init 创建)
├── providers.yaml
├── config.yaml
├── init.yaml
├── compose.yaml
├── web-search.yaml
├── agents/                      ← 项目 Agent 定义
├── skills/                      ← 项目 skill(native namespace)
└── state/                       ← 运行时状态(trust marker 等)
                                 ← (会话数据位于全局数据目录——见"3. 数据目录")

<project>/.agents/skills/        ← 项目 skill(agents namespace,agentskills.io 标准)
└── shared-util/                 ←   项目内跨工具共享
    └── SKILL.md

注意~/.agents/skills/.agents/skills/ rnix init 创建,而是在首次使用(rnix skill install --shared)时创建。这遵循 agentskills.io 约定——.agents/ 目录属于生态,不属于单一工具。

合并规则

  • YAML 文件providers.yamlconfig.yamlweb-search.yaml):深度合并——项目覆盖全局
  • Agent 目录agents/):Shadow——同名项目 agent 完全替代全局 agent
  • Skill 目录skills/):Shadow,按 2×2 优先级——project/native > project/agents > user/native > user/agents。胜出副本完全替代被 shadow 的副本。

例外——init.yaml:daemon 是单一的每用户进程,其启动配置读取全局 ~/.config/rnix/init.yaml参与项目级合并,项目级 .rnix/init.yaml 永远不会被读取。

初始化

bash
# 同时创建全局(~/.config/rnix/)和项目(.rnix/)目录
$ rnix init
[init] created ~/.config/rnix/
[init] created .rnix/

# 带 MCP 示例配置
$ rnix init --with-mcp-examples
[init] created ~/.config/rnix/
[init] created .rnix/
[init] added agents/playwright-demo/ with MCP Playwright config
[init] added agents/github-assistant/ with MCP GitHub config

rnix init 是幂等的——已存在的文件和目录会被跳过。--with-mcp-examples 会在创建示例配置之前执行预检查,验证所需二进制文件(如 npx)是否可用。


config.yaml — 全局配置

位于 ~/.config/rnix/config.yaml(全局)和可选的 .rnix/config.yaml(项目覆盖)。

特性档案(Feature Profile)

特性档案控制运行时激活哪些涌现子系统。它们支持消融实验——选择性禁用能力,以衡量每一层对整体智能涌现的贡献。

提供四个命名预设和一个 custom 模式,用于精细控制:

档案描述
baseline仅基础设施——裸 LLM + VFS 设备。无规划、无子进程、无自适应机制。
core基础设施 + 核心机制——规划、子进程派生、上下文压缩。
adaptive核心 + 反馈闭环——运行时学习、技能获取、路径重规划。
full所有能力启用,包括免疫系统。默认值。
custom逐项控制——未显式列出的 flag 默认为 true

配置方式:

yaml
# .rnix/config.yaml 或 ~/.config/rnix/config.yaml
features:
  profile: full   # baseline | core | adaptive | full | custom
  custom:         # 仅 profile=custom 时生效
    planning: true
    replan: false
    specialize: true
    discover_skill: true
    spawn: true
    diff_memory: false
    stem_matcher: false
    immune: true
    compaction: true

预设矩阵:

特性baselinecoreadaptivefull(默认)
planningfalsetruetruetrue
replanfalsefalsetruetrue
specializefalsefalsetruetrue
discover_skillfalsefalsetruetrue
spawnfalsetruetruetrue
diff_memoryfalsefalsetruetrue
stem_matcherfalsefalsetruetrue
immunefalsefalsefalsetrue
compactionfalsetruetruetrue

环境变量覆盖:

设置 RNIX_FEATURE_PROFILE 可覆盖配置文件中的设定。有效值:baselinecoreadaptivefullcustom。无效值会产生警告并回退到 full

bash
RNIX_FEATURE_PROFILE=baseline rnix "analyze this code"

Custom 模式:

profile: custom 时,仅应用 custom: 下显式列出的 flag。未列出的 flag 默认为 true——custom 模式用于精准消融,而非全面禁用。

查看当前活跃档案:

使用 rnix config show 显示活跃的特性档案和各项 flag。详见 CLI 参考

参见特性档案与消融了解档案如何映射到涌现堆栈。

垃圾回收(GC)

yaml
gc:
  retention_days: 30      # 删除 N 天前的 dead_at 条目;0 = 禁用
  max_entries: 500        # 最多保留 N 条历史;0 = 禁用
  interval_seconds: 3600  # 后台扫描周期(最小 60,默认 1h)
  • retention_daysmax_entries 取并集——命中任一即触发清理
  • 两者均设为 0 可完全关闭 GC daemon
  • Running 和 Suspended 进程永久豁免

CLI 操作:

bash
rnix gc --dry-run          # 预览候选(表格)
rnix gc --dry-run --json   # 预览候选(JSON,脚本友好)
rnix gc                    # 执行清理;> 100 条会提示 [y/N]
rnix gc --force            # 跳过确认
rnix gc --json             # JSON 输出(隐含 --force)

详见 进程恢复


providers.yaml — LLM 提供商

定义可用的 LLM 提供商。位于 ~/.config/rnix/providers.yaml(全局)和可选的 .rnix/providers.yaml(项目覆盖)。

yaml
version: "1"
default_provider: deepseek

providers:
  - name: claude
    driver: claude-cli
    default_model: haiku

  - name: cursor
    driver: cursor-cli
    command: agent

  - name: groq
    driver: openai-compat
    base_url: https://api.groq.com/openai/v1
    default_model: llama-3.3-70b-versatile
    api_key_env: GROQ_API_KEY

  - name: ollama
    driver: openai-compat
    base_url: http://localhost:11434/v1
    default_model: llama3

  - name: deepseek
    driver: openai-compat
    base_url: https://api.deepseek.com/v1
    default_model: deepseek-chat
    api_key_env: DEEPSEEK_API_KEY

字段

字段类型描述
versionstring配置格式版本("1"
default_providerstring未指定时的默认提供商(默认:deepseek
providers[].namestring提供商名称,映射到 /dev/llm/<name>
providers[].driverstring驱动类型(8 选 1):claude-clicursor-cliqwen-clicodex-cliopenai-compatopenaigeminianthropic
providers[].commandstringCLI 驱动器的二进制名称覆盖
providers[].default_modelstring默认模型名称
providers[].base_urlstringAPI 基础 URL(用于 openai-compat 驱动)
providers[].api_key_envstringAPI 密钥的环境变量名
providers[].timeout_secint每请求超时(秒);0 = 驱动默认值(CLI 驱动为 5 分钟)
providers[].grace_secintCLI 在 SIGTERMSIGKILL 之间的宽限期;0 = 驱动默认值(20 秒)
providers[].modelsmap按模型名分键的元数据:<model>: {context_window: N},用于推导 context_budget(context_window × 0.9)

更多高级提供商选项(modemax_tokenscost_per_tokenthinking_budgetreasoning_effortextra_argspermission_mode)见 LLM 提供商 › 高级提供商选项

驱动类型

驱动工作原理示例
claude-cli调用 Claude Code CLI(claude -pAnthropic Claude
cursor-cli调用 Cursor CLI(agent --printCursor
qwen-cli调用 Qwen Code CLIQwen Code
codex-cli调用 OpenAI Codex CLIOpenAI Codex
openai-compat调用 OpenAI 兼容 HTTP APIOllama、Groq、DeepSeek 等任意 OpenAI 兼容端点
openai官方 OpenAI SDKOpenAI GPT-4、GPT-4o
gemini原生 Gemini APIGoogle Gemini
anthropic官方 Anthropic SDKClaude(经 API,非 CLI)

推理强度(Reasoning Effort)

在提供商上(或按 spawn)设置 reasoning_effort 以控制离散的推理强度。该值原样透传给提供商,通过四级兜底解析(按 spawn → agent → 提供商 → 原生默认),并在与旧版 thinking_budget 同时设置时优先生效;budget 路径保留,供仍需要它的提供商兜底。详情与大小写注意见 LLM 提供商 › 推理强度

API 密钥管理

API 密钥通过环境变量引用——绝不直接存储在配置文件中。优先从项目 .env 文件解析,再回退到 daemon 进程环境。


web-search.yaml — Web 搜索后端

配置 /dev/web 设备的搜索后端。位于 ~/.config/rnix/web-search.yaml(全局)或 .rnix/web-search.yaml(项目,优先)。

yaml
version: "1"
default_backend: tavily
backends:
  - name: tavily
    driver: tavily
    api_key_env: TAVILY_API_KEY
    max_results: 5
    search_depth: basic

  - name: exa
    driver: exa
    api_key_env: EXA_API_KEY
    num_results: 5

  - name: local-searxng
    driver: searxng
    base_url: http://localhost:8888

项目文件完全覆盖全局文件(不合并)。详见 Web 搜索


环境文件(.env)

Rnix 支持项目级 .env 文件,用于管理 API 密钥等环境变量,而不会污染 daemon 的进程环境。

加载顺序

  1. .env — 基础环境
  2. .env.local — 本地覆盖(应加入 .gitignore)
  3. .env.{RNIX_ENV} — 环境特定(如 .env.production
  4. .env.{RNIX_ENV}.local — 环境特定的本地覆盖

RNIX_ENV

RNIX_ENV 环境变量选择要加载的环境文件集。默认:development

项目隔离

每次 spawn 请求会从 .env 文件生成独立的环境快照。变量写入 os.Setenv——不同项目的环境完全隔离,即使共享同一 daemon。


init.yaml — 启动服务与监督树

定义 daemon 启动时运行的服务(services)与受监督的 agent 树(supervisors)。daemon 是单一的每用户进程,因此启动配置是全局关注点:该文件~/.config/rnix/init.yaml 读取,项目级 .rnix/init.yaml 永远不会被读取。

rnix init 会在此写入一个默认空服务列表的脚手架。支持两个顶层小节:servicessupervisors

yaml
services:
  - name: skills
    type: skill_registry
    required: false
    config:
      scan_path: lib/skills

  - name: mcp
    type: mcp_manager
    required: false

supervisors:
  - name: monitors
    strategy: one_for_one
    max_restarts: 3
    max_window: 60s
    required: false
    children:
      - name: health-monitor
        intent: "Monitor system health and report anomalies"
        agent: monitor
        model: deepseek-v4-flash
        restart: permanent

Services

services 是一个数组,每项为一个 ServiceConfig

字段类型默认值描述
namestring必填服务显示名
typestring必填注册的服务类型——skill_registrymcp_managerlog_aggregator 之一
requiredboolfalsetrue = 该服务失败则启动中止;false = 警告并继续
configmap{}类型特定的键值选项(如 skill_registry 接受 scan_path

即使省略,mcp_manager 也会被隐式加载,因此 mcp.yaml 中声明的 MCP 服务器始终可被 rnix mcp test/rnix mcp list 解析。用户显式声明的 mcp_manager 优先于隐式加载。

Supervisors

supervisors 是一个数组,每项为一个 SupervisorConfig,描述一棵长期运行的受监督 agent 树。

字段类型默认值描述
namestring必填监督树显示名
strategystring""该树的重启策略
max_restartsint0max_window 窗口内的最大重启次数
max_windowduration0重启计数的滑动窗口(如 60s
requiredboolfalsetrue = 失败时启动中止(并回滚);false = 警告并继续
children[]object[]该树监督的子进程

children 下每一项为一个 ChildConfig

字段类型描述
namestring子进程显示名
intentstring子 agent 的 intent 字符串
agentstring命名的 agent 定义(可选;空 = 通用)
modelstring模型覆盖
providerstring提供商覆盖
context_budgetint单步上下文窗口守卫
restartstring子进程重启策略

compose.yaml — 多 Agent 工作流

Compose 文件定义基于 DAG 的多 agent 工作流。位于 .rnix/compose.yaml

yaml
version: "1.0"
intent: "Code review workflow"
model: "deepseek-v4-flash"

agents:
  analyzer:
    intent: "Analyze kernel/kernel.go code quality"
    agent: "code-analyst"

  doc-gen:
    intent: "Generate improvement documentation"
    depends_on:
      analyzer: completed

  checker:
    intent: "Verify analysis and documentation quality"
    depends_on:
      doc-gen: completed

顶层字段

字段类型描述
versionstringCompose 规范版本(当前为 "1.0"
intentstring整体工作流描述
modelstring全局默认模型(agent 可覆盖)
providerstring全局默认提供商(agent 可覆盖)
reasoning_effortstringspec 级推理强度默认值(透传;agent 可覆盖)
token_budgetint工作流整体 token 预算
agentsmapAgent 定义

Agent 字段

字段类型描述
intentstring该 agent 的任务描述
agentstring命名的 agent 定义(可选)
modelstring该 agent 的模型覆盖
providerstring该 agent 的提供商覆盖
reasoning_effortstring该 agent 的推理强度覆盖(透传)
skills[]string该 agent 加载的 skill 名称
prioritystring调度优先级:highnormallow
max_tokensint单进程 token 预算
timeout_msint执行超时(毫秒)
depends_onmap依赖:<上游>: completed
candidates[]string自动选择的候选 agent

运行 Compose 工作流

bash
rnix compose up          # 运行工作流
rnix compose up --json   # JSON 输出
rnix compose down        # 停止所有 compose 进程
rnix compose resume --node <name>  # 恢复失败的 DAG 节点

Agent 清单 — agent.yaml

每个 Agent 由 agents/<name>/ 目录下的 agent.yamlinstructions.md 文件定义(全局:~/.config/rnix/agents/,项目:.rnix/agents/)。

yaml
name: code-analyst
description: "Code quality analysis agent"
models:
  provider: deepseek
  preferred: deepseek-v4-flash
  fallback: deepseek-v4-pro
max_steps: 20
max_tokens: 50000
skills:
  - code-analysis
  - security-scan
mcp:
  servers:
    github:
      command: "npx"
      args: ["-y", "@anthropic/mcp-github"]
      env:
        GITHUB_TOKEN: "${GITHUB_TOKEN}"
      timeout: 30s
      max_output_tokens: 4096

字段

字段类型必填描述
namestring唯一 agent 标识
descriptionstring可读描述
modelsobjectLLM 模型偏好
models.providerstringLLM 提供商名称
models.preferredstring首选模型
models.fallbackstring回退模型(同提供商)
models.fallback_providerstring跨提供商回退;空 = 同提供商
models.reasoning_effortstringagent 级推理强度默认值(透传,不校验/不转换大小写);空 = 沿用提供商快照
context_budgetint单步上下文窗口守卫:单次 LLM 调用允许的最大输入 token 数。超限时进程自暂停(退出码 3, context_full),可通过 resume 恢复。0 = 自动推导为 context_window × 0.9;显式设置的值会截断为 min(budget, context_window)
ctx_sizeint单进程消息历史槽位数(覆盖默认值 256)
max_stepsint最大推理步数。0 = 使用 DefaultMaxSteps(当前为 0,即不设步数上限)。
max_tokensint最大总 token 数(0 = 无限制)
max_costfloat64单进程成本预算(美元,0 = 无限制)
step_timeoutstring单步超时,duration 字符串如 "10m"(默认 "5m""0" = 禁用)
skills[]string引用的 skill 名称
deferred_skills[]string仅加载元数据的 skill;正文在 discover_skill 时加载
tools[]stringagent 级工具声明,与 skill 的 allowed-tools 取并集
planningbool启用规划能力(未设置时默认 true
project_docbool将项目根 AGENTS.md 注入 system prompt(默认 true;设为 false 禁用)
languagestring首选响应语言(如 ChineseEnglish);空 = 无偏好
mcpobjectMCP 服务器配置

MCP 服务器配置字段

字段类型必填描述
commandstring启动 MCP 服务器的可执行文件
args[]string命令行参数
envmap[string]string环境变量(支持 ${VAR} 展开)
timeoutduration每服务器超时(默认:30s
max_output_tokensint每工具输出的最大 token 数

Skill 定义 — SKILL.md

Skill 遵循 agentskills.io 标准,使用 YAML frontmatter + Markdown 正文。存储采用四路径模型(project/user × native/agents namespace):

路径ScopeNamespace优先级
<project>/.rnix/skills/projectnative1(最高)
<project>/.agents/skills/projectagents2
~/.config/rnix/skills/usernative3
~/.agents/skills/useragents4(最低)

详见 Skill 包管理

markdown
---
name: code-analysis
description: >
  分析代码质量,识别 bug、性能问题和安全漏洞。
allowed-tools: /dev/fs /dev/shell /dev/web
metadata:
  author: rnix
  version: "1.0"
  tags: "code, quality"
---

# 代码分析

## 使用场景
...

## 工作流程
1. 通过 /dev/fs 读取源文件
2. 通过 /dev/shell 运行分析
3. 生成报告

allowed-tools 与安全

allowed-tools 字段是 Rnix 权限模型的核心。skill 只能访问此处列出的 VFS 设备:

设备能力
/dev/fs主机文件系统读写
/dev/shellShell 命令执行
/dev/llm/<provider>LLM 推理
/dev/webWeb 搜索和页面抓取
/mnt/mcp/*MCP 服务器工具

多个 skill 的 allowed-tools并集。空 allowed-tools 表示无限制(可访问所有设备)。


环境变量

变量描述
RNIX_ENV选择 .env 文件加载环境(默认:development
RNIX_ASCII设为 1 强制 ASCII 模式(禁用 Unicode)
RNIX_FEATURE_PROFILE特性档案覆盖:baselinecoreadaptivefullcustom
XDG_CONFIG_HOME覆盖全局配置目录(默认:~/.config
XDG_RUNTIME_DIR用于确定 socket 路径
TAVILY_API_KEYTavily 搜索 API 密钥(/dev/web 自动检测)
EXA_API_KEYExa 搜索 API 密钥(/dev/web 自动检测)
RNIX_SEARCH_URLSearXNG 实例 URL(/dev/web 自动检测)

Socket 路径

Daemon socket 位置优先级:

  1. $XDG_RUNTIME_DIR/rnix/rnix.sock
  2. /tmp/rnix-{uid}/rnix.sock(回退)

目录权限:0700(仅当前用户)。


相关文档

Released under the MIT License.