商业产业 Hacker News AI 2026-08-23T11:48 正文 ok 629 words

Show HN:面向 AI Agent 的声明式、可复现配置物化工具 Enozunu

英文标题:🔶 Show HN: Declarative, reproducible configuration materializer for AI agents

Enozunu(役小角)是一个面向 AI Agent 工具链的跨提供商配置物化工具,通过声明式清单将 Skills 和 Agent 配置写入 Claude、Codex 等目标工具的原生路径。它以 `enozunu.kdl` 与 `enozunu.lock.json` 为事实来源,记录可变 Git 分支或标签最终解析到的提交,从而让开发者机器与 CI 获得一致的配置结果。该项目不提供资源搜索、市场或交互式安装流程,而专注于解析、锁定、物化和验证配置输出。对工具作者而言,Enozunu 可使其发布工具专用的 Skills、Agent 工件及兼容清单,而无需自行实现安装器。
打开原文相关 3 · 机会 1
media162.2 KB media145.3 KB

中文

Enozunu(役小角)是一个面向 AI Agent 工具链的声明式、可复现、跨提供商配置物化工具。

它集中管理由人工编写的 AI Agent 配置源定义,并将其物化到目标 AI 工具的原生配置路径中。

  • 以声明方式复用 Skills 和 Agent。 在 enozunu.kdl 中声明来源与选择项,而非在项目之间复制配置文件。
  • 在任何环境中复现相同配置。 enozunu.kdl 和 enozunu.lock.json 是事实来源,因此每台开发者机器和每次 CI 运行都会根据相同声明物化出相同配置。
  • 无需自定义安装器即可分发特定工具的 Skills 和 Agent。 工具作者可发布相关工件和兼容 Enozunu 的清单声明,而不必实现自己的配置机制。

有关详细的使用场景、职责边界和当前限制,请参阅 Why or Why Not Enozunu?。

Enozunu 不是 AI Agent 资源的交互式资源管理器、市场或安装器。

  • 它不会搜索、推荐或提供 Skills、Agent 的市场发现功能。
  • 它不提供 GUI 或交互式安装流程。

其职责仅限于 Overview 中所述的解析、锁定、物化和验证流程,并且只处理 enozunu.kdl 声明的内容。其职责边界在于声明性、可复现性和生成输出管理,而不在于能够安装多少种工件,或这些工件如何被发现。

brew install tooppoo/tap-catalog/enozunu

scoop bucket add philomagi https://github.com/tooppoo/catalog-scoop-bucket
scoop install enozunu

curl -fsSL https://raw.githubusercontent.com/tooppoo/enozunu/refs/heads/main/install.sh | sh

Enozunu 管理 AI Agent 配置的来源及其物化位置。你只需在 enozunu.kdl 中声明一次来源,Enozunu 就会解析它们,并将内容写入各个目标 AI 工具的原生路径。

每次运行都会解析已声明的来源,将可变选择项解析得到的提交记录在 enozunu.lock.json 中,并将其物化到目标路径。在 CI 中,enozunu summon --frozen 会严格依据锁定文件进行物化;如果锁定文件缺失,或其中没有某个可变来源的条目,则命令会失败。运行后执行 git status,若工作区保持干净,即可验证已提交文件没有偏离声明的来源。

当前支持的目标 AI 是 Claude 和 Codex。二者都从同一来源池中选择资源,并将每项选择物化到各自的原生路径。有关每类工件的准确放置位置,请参阅支持目标指南。

Enozunu 仍处于早期设计阶段,其目标刻意保持狭窄。可变 Git 选择项通过 enozunu.lock.json 保持可复现;有关当前范围和非目标,请参阅 v0.1.x goal;有关初始阶段,请参阅 v0.0.x goal。

创建一个填入占位值的起始清单:

这还会生成 .enozunu/.gitignore,以确保 .enozunu/cache/ 下的解析器缓存不会被纳入版本控制。

验证当前项目的清单:

解析已声明的来源,并将其物化到目标 AI 的项目路径中:

首次运行会将每个 branch 和 tag 选择项所解析到的提交记录在 enozunu.lock.json 中;后续运行则物化这些已记录的提交。提交锁定文件即可让不同机器上的运行保持可复现。使用 enozunu summon --update 跟随已移动的引用并刷新锁定文件;在 CI 中使用 enozunu summon --frozen,使其在锁定文件未覆盖某些内容时失败,而不是继续解析。详情请参阅生成输出指南。

默认情况下,所有命令都会操作项目根目录中的 enozunu.kdl。可使用 --manifest 和 --project-root 覆盖默认值。

最小清单会在 provider 下声明来源,并在 consumer 下声明目标选择:

enozunu config-version=1 {
  provider {
    skills {
      skill "git-kura" {
        git {
          url "https://github.com/tooppoo/reportage"
          branch "main"
          path ".claude/skills/git-kura"
        }
      }
    }
  }

  consumer {
    claude {
      use-skills "git-kura"
    }
  }
}

有关完整的清单契约,包括 git、local 和 gist 来源引用,请参阅清单格式指南。

文档按使用意图划分。

如需使用 Enozunu,请阅读指南:

如需了解 Enozunu 的工作原理,请阅读设计文档:

English / 原文

Enozunu(役小角) is a declarative, reproducible cross-provider configuration materializer for AI agent tooling.

It centralizes human-authored definitions of AI-agent configuration sources and materializes them into target AI-native configuration paths.

Enozunu separates Skill and agent sources from the target-native files generated in each project.

  • Reuse Skills and agents declaratively. Declare sources and selections in enozunu.kdl instead of copying configuration files between projects.
  • Reproduce the same configuration everywhere. enozunu.kdl and enozunu.lock.json are the source of truth, so every developer machine and CI run materializes the same configuration from the same declarations.
  • Distribute tool-specific Skills and agents without a custom installer. Tool authors can publish the artifacts and an Enozunu-compatible manifest declaration instead of implementing their own setup mechanism.

See Why or Why Not Enozunu? for the detailed use cases, responsibility boundaries, and current limitations.

Enozunu is not an interactive resource manager, marketplace, or installer for AI agent resources.

  • It does not search for, recommend, or provide marketplace discovery of Skills or agents.
  • It does not provide a GUI or an interactive install flow.

Its responsibility is limited to the resolve, lock, materialize, and verify flow described in the Overview, applied to what enozunu.kdl declares. The responsibility boundary is declarativeness, reproducibility, and generated-output management — not how many kinds of artifacts can be installed or how they are discovered.

brew install tooppoo/tap-catalog/enozunu


scoop bucket add philomagi https://github.com/tooppoo/catalog-scoop-bucket
scoop install enozunu


curl -fsSL https://raw.githubusercontent.com/tooppoo/enozunu/refs/heads/main/install.sh | sh

Enozunu manages where AI-agent configuration comes from and where it is materialized. You declare sources once in enozunu.kdl, and Enozunu resolves them and writes them into each target AI's native paths.

Each run resolves the declared sources, records the resolved commits of mutable selections in enozunu.lock.json, and materializes them into target paths. In CI, enozunu summon --frozen materializes strictly from the lock and fails when the lock file is missing or lacks an entry for a mutable source; a clean git status after that run verifies that the committed files have not drifted from the declared sources.

The supported target AIs are Claude and Codex. Both select from the same source pool, and each selection is materialized into that target's native path. For the exact placement of each artifact, see the supported targets guide.

Enozunu is in early design and its goal is intentionally narrow. Mutable Git selections are kept reproducible through enozunu.lock.json; for the current scope and non-goals, see the v0.1.x goal, and for the initial phase, the v0.0.x goal.

Create a starter manifest filled with placeholder values:

This also generates .enozunu/.gitignore so the resolver cache under .enozunu/cache/ stays out of version control.

Validate the manifest of the current project:

Resolve declared sources and materialize them into target AI project paths:

The first run records the resolved commit of every branch and tag selection in enozunu.lock.json; later runs materialize those recorded commits. Commit the lock file to make runs reproducible across machines. Use enozunu summon --update to follow moved refs and refresh the lock, and enozunu summon --frozen in CI to fail instead of resolving anything the lock does not cover. See the generated output guide for details.

All commands operate on enozunu.kdl in the project root by default. Use --manifest and --project-root to override the defaults.

A minimal manifest declares sources under provider and target selections under consumer:

enozunu config-version=1 {
  provider {
    skills {
      skill "git-kura" {
        git {
          url "https://github.com/tooppoo/reportage"
          branch "main"
          path ".claude/skills/git-kura"
        }
      }
    }
  }

  consumer {
    claude {
      use-skills "git-kura"
    }
  }
}

For the full manifest contract, including git, local, and gist source references, see the manifest format guide.

The documentation is split by intent.

To use Enozunu, read the guide:

To understand how Enozunu works, read the design docs: