mcpField
C
cfgd

cfgd

本地服务
github.com云与基础设施72 周前更新

关于 cfgd

cfgd 是以声明式配置管理整台机器的命令行工具,面向需要在多台设备或跨平台环境中复用开发配置的开发者和平台团队。它通过配置文件、可共享模块和持续协调来检测并处理状态偏差。

主要功能

  1. 01声明式管理软件包、文件与系统设置
  2. 02通过继承组合配置档案
  3. 03创建和分享跨平台模块
  4. 04持续检测并协调配置偏差
  5. 05提供 MCP 服务供 AI 操作 CLI

适用场景

  1. 01在新机器上引导开发环境
  2. 02在工作与个人设备间同步配置
  3. 03向团队分发带策略的机器配置
  4. 04让 AI Agent 协调机器状态

MCP 相关

cfgd 提供 MCP 服务,将 CLI 操作作为工具供 AI Agent 和编辑器调用;另有面向配置编写的 MCP 服务。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"tj-smith47-cfgd": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/tj-smith47/cfgd:0.12.0"
]
}
}
}
启动命令docker run -i --rm ghcr.io/tj-smith47/cfgd:0.12.0

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/tj-smith47/cfgd:0.12.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

cfgd 齿轮图标

cfgd

通过可组合的配置档案和可分享的跨平台模块,声明整台机器的配置(软件包、点文件、系统设置、机密信息)。

CI E2E Release Coverage License: MIT OR Apache-2.0

cfgd 在一个空白 Ubuntu 容器中通过一条命令安装 Neovim 配置

一个空白的 ubuntu:24.04 容器,没有 Neovim、没有 Homebrew,也没有任何配置。执行一次 cfgd init 后,nvim 就能打开配置完整的 LazyVim。使用 VHS 录制。

状态: Alpha。API 可能会变更。



什么是 cfgd

大多数点文件管理器都会跟踪文件。cfgd 管理整台机器。你可以在受版本控制的 YAML 中声明软件包、文件、机密信息和系统设置。cfgd 会对比你期望的状态与当前状态,生成计划并持续协调。如果配置发生偏移,系统会检测并修正。

工作原理

配置档案声明机器的期望状态:软件包、文件和系统设置。它们通过继承组合:在多台机器间共享通用基础配置,再根据不同场景进行专门配置。参见 docs/profiles.md。

             base
            ╱    ╲
        work    personal
       ╱    ╲
  laptop    devcontainer

模块是可分享、独立完整的配置包。你可以安装他人的开发环境,也可以发布自己的模块。跨平台的软件包解析会自动选择合适的软件包管理器。参见 docs/modules.md。

协调会持续确保机器符合声明的状态。系统会检测并报告配置偏移,并可选择自动修正。操作失败不会中止流程,而是记录日志并跳过。参见 docs/reconciliation.md,或观看两台机器通过守护进程逐步收敛到一致状态。

cfgd 使用 cfgd status 发现被篡改的文件,使用 cfgd diff 说明差异,并使用 cfgd apply 修复

快速入门

# Install via Homebrew
brew install tj-smith47/tap/cfgd

# Or via install script
curl -fsSL https://github.com/tj-smith47/cfgd/releases/latest/download/install.sh | sh

# Or via cargo
cargo install cfgd

# Bring your config to a new machine in seconds
cfgd init --from [email protected]:you/machine-config.git

# Or start fresh
cfgd init

# Or let AI scan your system and generate config for you
export ANTHROPIC_API_KEY=sk-...
cfgd generate

# Set up shell completions (add to your shell's rc file)
source <(cfgd completion bash)  # .bashrc
source <(cfgd completion zsh)   # .zshrc
cfgd completion fish | source   # config.fish

cfgd 的由来

我最近换了工作,在上一份工作的最后一周里,我备份了脚本和点文件,筛出了公司专属信息,并打包成 tarball 进行迁移。到了新工作后,我又花了几天时间重新配置新机器。后来我不断发现自己漏掉了东西,也发现有些东西(比如系统设置)本该包含在备份里。整个过程既手动又不完整:我应该能够克隆一个仓库,就让整台工作站(软件包、脚本、点文件、系统设置)恢复熟悉的状态。更理想的是,还能让家里和工作用的笔记本电脑之间的部分配置保持同步。

另一个灵感来自 devcontainers。在上一家公司,我设置了自定义脚本,把点文件注入 devcontainer,让用户进入 Shell 后就能复现自己的开发环境。至少,我希望在任何临时容器中都能使用完整的 Neovim 配置,而不必修改每个团队仓库中的 devcontainer 配置来适配它。我需要一种能从外部将配置引导到任何环境的方式,不受我正在处理哪个仓库的影响。此外,我还有几位同事需要了解 vim-motions 的优越之处,因此想找一种快捷方式,分享完全一致的配置,连别名也不例外。

cfgd 借鉴了多种实践中的优秀理念:

  • Kubernetes:声明式协调循环、KRM 资源模型
  • Terraform:计划/应用工作流、状态跟踪、漂移检测
  • Puppet:通过守护进程持续强制执行、模块生态系统
  • Nix:通过单一事实来源实现可复现的机器状态
  • Ansible:由 YAML 驱动的配置管理、幂等任务执行
  • Kustomize:分层覆盖和补丁
  • chezmoi:点文件管理

可分享的模块

这是我最喜欢的功能:一个适用于任何地方的工具配置包。

cfgd module create my-dev-env
cfgd profile update --module community/nvim

模块可以声明支持跨平台解析的软件包、配置文件、Shell 环境变量和别名,以及生命周期脚本:

apiVersion: cfgd.io/v1alpha1
kind: Module
metadata:
  name: nvim
  description: Neovim editor configuration
spec:
  depends: [node, python]
  packages:
    - name: neovim
      minVersion: "0.10"
      prefer: [brew, snap]
      deny: [apt]
    - name: ripgrep
    - name: fd
      aliases:
        apt: fd-find
        dnf: fd-find
    - name: gcc
      aliases:
        apt: build-essential
        dnf: "@development-tools"
      platforms: [linux]
  files:
    - source: files/init.lua
      target: ~/.config/nvim/init.lua
    - source: files/lua
      target: ~/.config/nvim/lua
  env:
    - name: EDITOR
      value: nvim
  aliases:
    - name: v
      command: nvim
  scripts:
    postApply:
      - nvim --headless '+Lazy! sync' '+MasonToolsInstallSync' +qa

完整规范(包括 git 文件源、注册表和依赖解析)请参阅 docs/modules.md。

cfgd 对比

cfgdchezmoiNix Home ManagerAnsiblePuppet
侧重点完整机器状态点文件点文件 + 软件包(Nix)通用自动化服务器/基础设施状态
软件包18 种管理器无仅 Nix任意(通过任务)任意(通过提供程序)
漂移检测持续(守护进程)手动重建时手动持续(Agent)
跨平台解析按软件包映射管理器不适用仅 Nix按任务设置条件按操作系统提供 Hiera 数据
可分享的模块一等支持仅模板Flakes角色(Galaxy)Forge(面向服务器)
团队配置策略层级 + Crossplane不适用Flake 输入不适用Puppet Enterprise
基础设施单个二进制文件,无需服务器单个二进制文件Nix 守护进程SSH(或 AWX)PuppetServer + PuppetDB + CA
学习曲线YAML + CLIGo 模板Nix 语言YAML + Jinja2Puppet DSL(Ruby)

从理念上说,Puppet 最为接近:声明式状态、持续强制执行、模块生态系统。如果你认同这种模式,但不想在 2026 年为了管理点文件而搭建 JVM 服务器、编写 Ruby 时代的 DSL,那么 cfgd 就是从头为开发者工作站重新打造的这一理念。

如果你需要跨平台机器引导的一行命令、可分享的开发环境模块、在机器之间或订阅源之间持续协调,或者带策略强制执行的团队配置分发,那么 cfgd 就很适合你。

功能

面向开发者:

  • 单命令引导:在新机器上运行 cfgd init --from <repo> --apply
  • AI 引导生成:cfgd generate 会扫描系统并构建配置档案/模块;提供 MCP 服务以集成 AI 编辑器
  • MCP 服务:cfgd mcp 将 CLI 本身作为工具提供服务,让助手能够协调机器,而不仅仅是为机器编写配置
  • 编写技能:cfgd skill install 可教会你的编码 Agent(Claude Code、Gemini、Copilot、Codex、Cursor)编写高质量的 cfgd 资源
  • 可共享模块:支持跨平台的开发环境包,具备依赖解析和注册表
  • 18 种包管理器:brew、apt、dnf、pacman、cargo、npm、pipx、snap 等,并支持自动感知平台的解析
  • 密钥:SOPS/age 加密,以及 1Password、Bitwarden、HashiCorp Vault;由密钥提供支持的环境变量
  • Tera 模板:使用变量、操作系统检测和自定义函数渲染点文件
  • 持续漂移检测:守护进程监控变更、自动同步,并发送通知或自动纠正

面向平台和基础设施工程师:

  • 多源配置:通过策略层级(锁定/必需/推荐/可选)发布团队基线配置
  • Kubernetes 运算符:提供 MachineConfig、ConfigPolicy、ClusterConfigPolicy、DriftAlert、BackupPolicy、Module 的 CRD;准入 Webhook;带有集群仪表板的设备网关
  • 节点配置:sysctl、内核模块、containerd、kubelet、AppArmor、seccomp、证书
  • CSI 驱动程序:通过卷将基于 OCI 的模块注入 Pod
  • Crossplane 集成:用于自助分发团队环境的 TeamConfig XR
  • kubectl 插件:使用 kubectl cfgd debug/exec/inject/status 检查节点

面向安全与合规:

  • 合规快照:持续捕获机器状态,并导出 JSON/YAML 供 Vanta、Drata 或自定义集成使用
  • 密钥配置:声明式 SSH 密钥生成、GPG 密钥管理和 Git 签名配置
  • 强制加密:逐文件设置加密要求,并验证 SOPS/age 后端
  • 策略执行:锁定文件、必需软件包,以及目标路径上的加密约束
  • 漂移修复:守护进程检测并自动纠正配置漂移,并应用各模块的策略
  • 集群可视性:设备网关汇总已登记机器的合规评分

文档

文档描述
配置根配置(cfgd.yaml)、文件策略、别名、主题
配置档案配置档案 YAML、继承、合并规则、变量
模块模块规范、跨平台软件包、依赖项、Git 文件源、注册表
协调阶段顺序、故障处理、状态存储
软件包所有软件包管理器、跳过行为、试运行
模板Tera 模板系统、上下文变量、自定义函数
密钥SOPS/age 后端、1Password、Bitwarden、Vault
系统配置器Shell、macOS 默认设置、systemd、sysctl、kubelet 等
来源多来源配置、策略层级、组合、订阅
守护进程文件监视、协调循环、同步、通知、服务安装
运维器基于 CRD 的机器管理、设备网关、DaemonSet 节点 Agent
团队配置由 Crossplane 驱动的团队配置分发
安全性原子写入、备份、回滚、应用锁定、路径安全
声明式备份spec.backups[] 快照、钩子顺序、保留、恢复
备份策略全机群备份计划、优先级表、scheduleOwner
CLI 参考完整的命令参考,包含标志和示例
安装所有安装渠道、签名下载验证、自行升级
引导cfgd init 流程、应用选项、安装脚本
AI 生成AI 引导的配置生成,两个 MCP 服务(用于编写配置的 mcp-server,以及用于驱动 CLI 的 mcp)
编写技能cfgd skill 安装程序、支持的 Agent 提供方、如何在生成与技能之间选择
发布由 CI 执行的发布流程、预发布检查清单、故障恢复
镜像打包将目录打包成 OCI 镜像卷、签名、固定部署版本
多租户运维器的命名空间隔离和租户边界
生命周期脚本run: 解析、钩子阶段、超时、交互式脚本

分发

除了将二进制文件发布到 GitHub Releases(Linux、macOS、Windows 支持 amd64 和 arm64;FreeBSD 支持 amd64)外,每个版本还会发布到:

渠道制品
Homebrewbrew install tj-smith47/tap/cfgd
crates.iocargo install cfgd(或使用预构建二进制文件的 cargo binstall cfgd)
AURyay -S cfgd(Arch Linux;从源代码构建)
wingetwinget install --id TJSmith.cfgd
Scoopscoop bucket add tj-smith47 https://github.com/tj-smith47/scoop-bucket; scoop install cfgd
Chocolateychoco install cfgd
Nixnix profile install github:tj-smith47/nix-pkgs#cfgd
deb / rpm / apk静态二进制原生软件包,也镜像到 CloudSmith
GHCRDocker 镜像:cfgd、cfgd-operator、cfgd-csi
Helmhelm install cfgd oci://ghcr.io/tj-smith47/charts/cfgd
Krewkubectl krew install cfgd(用于节点调试和集群检查的 kubectl 插件)
OLM适用于由 OLM 管理的集群的 Operator 捆绑包
Crossplane用于团队配置分发的 function-cfgd 组合函数
MCP Registryio.github.tj-smith47/cfgd:面向 AI Agent 和编辑器的 cfgd mcp-server 标准输入输出服务

CI/CD 集成:

集成说明
cfgd SetupGitHub Action:使用配置仓库中的模块引导运行器
cfgd PlanGitHub Action:在 PR 上运行 cfgd plan,并将差异作为评论发布
GitLab CI可引入的 .cfgd-ci.yml 模板,包含 .cfgd-plan 和 .cfgd-apply 作业
Tekton适用于 Tekton Pipelines 的 cfgd-apply Task
# Example: set up your dev tools on a GitHub Actions runner
- uses: tj-smith47/cfgd/ecosystem/github-actions/setup@master
  with:
    source: [email protected]:you/machine-config.git
    module: dev-tools

# Example: plan config changes on every PR, comment the diff, gate the merge
- uses: tj-smith47/cfgd/ecosystem/github-actions/plan@master
  with:
    config-dir: .
    fail-on-error: true

模块也可以导出为 DevContainer Features,以便注入到开发容器中:

cfgd module export my-tool --as devcontainer

从源代码构建:

git clone https://github.com/tj-smith47/cfgd.git && cd cfgd
cargo build --release

许可证

可选择以下任一许可证:

由你选择。

贡献

除非你明确另行说明,否则你根据 Apache-2.0 许可证定义、并有意提交以纳入本项目的任何贡献,均按上述双重许可证授权,且不附加任何条款或条件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。