Show HN: Declarative, reproducible configuration materializer for AI agents
Notifications You must be signed in to change notification settings Fork 0 Star 0 BranchesTags Open more actions menu Latest commit History 203 Commits 203 Commits Folders and files NameName Last commit message Last com…
Notifications You must be signed in to change notification settings Fork 0 Star 0 BranchesTags Open more actions menu Latest commit History 203 Commits 203 Commits Folders and files NameName Last commit message Last commit date .devcontainer .devcontainer .enozunu .enozunu .github .github .kura/tools/hooks/_ .kura/tools/hooks/_ .rellog .rellog .reportage .reportage bin bin docs docs e2e e2e just just scripts scripts src src tests tests .editorconfig .editorconfig .gitattributes .gitattributes .gitignore .gitignore AGENTS.md AGENTS.md CHANGELOG.md CHANGELOG.md CLAUDE.md CLAUDE.md Cargo.lock Cargo.lock Cargo.toml Cargo.toml Justfile Justfile LICENSE LICENSE README.md README.md codecov.yml codecov.yml enozunu.kdl enozunu.kdl enozunu.lock.json enozunu.lock.json install.sh install.sh renovate.json renovate.json reportage.kdl reportage.kdl rust-toolchain.toml rust-toolchain.toml Repository files navigation 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. Why Enozunu? 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. What Enozunu Is Not 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. Quick Start homebrew brew install tooppoo/tap-catalog/enozunu Scoop(Windows) scoop bucket add philomagi https://github.com/tooppoo/catalog-scoop-bucket scoop install enozunu curl install curl -fsSL https://raw.githubusercontent.com/tooppoo/enozunu/refs/heads/main/install.sh | sh Overview 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. Usage Create a starter manifest filled with placeholder values: enozunu init This also generates .enozunu/.gitignore so the resolver cache under .enozunu/cache/ stays out of version control. Validate the manifest of the current project: enozunu validate Resolve declared sources and materialize them into target AI project paths: enozunu summon 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. Documentation The documentation is split by intent. To use Enozunu, read the guide: Why or why not Enozunu? Supported targets Manifest format Generated output To understand how Enozunu works, read the design docs: Philosophy v0.0.x goal v0.1.x goal Architecture Decision Records Topics Resources Readme Apache-2.0 license Activity Stars 0 stars Watchers 0 watching Forks 0 forks Report repository