원클릭으로
aether-setup
Aether 集群配置引导。首次使用时配置集群入口地址,支持全局配置和项目级配置。 其他 skills 依赖此配置来连接 Aether 集群。 使用场景:"配置 Aether 集群"、"首次使用 Aether"、"切换集群"、"查看当前配置"
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Aether 集群配置引导。首次使用时配置集群入口地址,支持全局配置和项目级配置。 其他 skills 依赖此配置来连接 Aether 集群。 使用场景:"配置 Aether 集群"、"首次使用 Aether"、"切换集群"、"查看当前配置"
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | aether-setup |
| description | Aether 集群配置引导。首次使用时配置集群入口地址,支持全局配置和项目级配置。 其他 skills 依赖此配置来连接 Aether 集群。 使用场景:"配置 Aether 集群"、"首次使用 Aether"、"切换集群"、"查看当前配置" |
| argument-hint | [--global|--project|--show] |
| disable-model-invocation | false |
| user-invocable | true |
| allowed-tools | Read, Write, Bash, AskUserQuestion |
版本: 0.2.0 | 优先级: P0
配置按以下优先级读取(高 → 低):
1. 环境变量 → NOMAD_ADDR, CONSUL_HTTP_ADDR 等
2. 项目级配置 → ./.aether/config.yaml (当前项目目录)
3. 用户级全局配置 → ~/.aether/config.yaml
4. 插件默认值 → 无(必须配置入口地址)
| 配置项 | 环境变量 | 说明 |
|---|---|---|
| Nomad 地址 | NOMAD_ADDR | Nomad API 入口,如 http://192.168.69.70:4646 |
| Consul 地址 | CONSUL_HTTP_ADDR | Consul API 入口,如 http://192.168.69.70:8500 |
| Registry 地址 | AETHER_REGISTRY | 容器镜像仓库,如 forgejo.10cg.pub |
以下信息无需配置,skills 会自动从集群 API 发现:
| 信息 | 发现方式 |
|---|---|
| 节点类型 (node_class) | GET /v1/nodes → 提取 NodeClass |
| 可用 Driver | GET /v1/nodes → 提取 Drivers |
| 节点 IP | GET /v1/nodes → 提取 Address |
| 节点状态 | GET /v1/nodes → 提取 Status |
/aether:setup --show
输出:
Aether 集群配置
===============
配置来源: ~/.aether/config.yaml (全局)
配置优先级: 环境变量 > 项目级 .aether/config.yaml > 全局 ~/.aether/config.yaml > 默认值
入口地址:
Nomad: http://192.168.69.70:4646 ✓ 可达 (v1.11.2)
Consul: http://192.168.69.70:8500 ✓ 可达 (v1.22.3)
Registry: forgejo.10cg.pub
DNS: ✓ .service.consul 可解析 (dnsmasq)
集群拓扑 (从 API 发现):
heavy_workload (3 nodes): Docker 29.2.1, exec, raw_exec
- heavy-1 (192.168.69.80) host_volumes: [data-vol, log-vol]
- heavy-2 (192.168.69.81) host_volumes: [data-vol]
- heavy-3 (192.168.69.82) host_volumes: [data-vol]
light_exec (5 nodes): exec only
- light-1~5 (192.168.69.90~94)
总节点数: 8
运行中 Jobs: 5
其他 Skills (init, deploy, status, rollback, dev) 自动读取此配置连接集群。
/aether:setup --global
交互流程:
创建全局配置 (~/.aether/config.yaml)
此配置将被所有项目共享。
请输入 Nomad 地址 [http://localhost:4646]: http://192.168.69.70:4646
自动推导 Consul 地址:
规则: 同 IP + 端口 8500
推导结果: http://192.168.69.70:8500
确认? [Y/n]:
请输入 Registry 地址: forgejo.10cg.pub
验证连接...
Nomad: ✓ 连接成功 (v1.11.2)
Consul: ✓ 连接成功 (v1.22.3)
配置已保存到 ~/.aether/config.yaml
┌─────────────────────────────────────────────────┐
│ 配置优先级链 (高 → 低) │
├─────────────────────────────────────────────────┤
│ 1. 环境变量 NOMAD_ADDR, CONSUL_HTTP_ADDR │
│ 2. 项目级 .aether/config.yaml (当前目录) │
│ 3. 全局 ~/.aether/config.yaml ← 当前生效 │
│ 4. 默认值 无(必须配置入口地址) │
└─────────────────────────────────────────────────┘
→ 项目级配置会覆盖全局配置的对应字段
→ 例: 在 /home/dev/payment-service 创建 .aether/config.yaml
则该项目使用项目级配置,其他项目仍用全局配置
接下来可以使用这些 Skills:
/aether:status → 查询集群状态(读取上述配置)
/aether:init → 初始化项目部署(读取上述配置)
/aether:deploy → 部署到生产(读取上述配置)
/aether:dev → 部署到开发环境(读取上述配置)
生成的文件 ~/.aether/config.yaml:
# Aether 集群配置
# 由 /aether:setup 生成
cluster:
nomad_addr: "http://192.168.69.70:4646"
consul_addr: "http://192.168.69.70:8500"
registry: "forgejo.10cg.pub"
/aether:setup --project
生成的文件 .aether/config.yaml:
# Aether 项目级配置
# 覆盖全局配置中的对应字段
cluster:
nomad_addr: "http://192.168.69.70:4646"
consul_addr: "http://192.168.69.70:8500"
registry: "forgejo.10cg.pub"
当其他 skill(如 /aether:init)检测到未配置时,自动触发引导,询问用户选择全局配置或项目配置。
Skills 按优先级链读取配置:项目级 .aether/config.yaml → 全局 ~/.aether/config.yaml → 环境变量。使用 yq 读取 cluster.* 字段。未找到任何配置时,提示用户运行 /aether:setup。
配置入口地址后,必须展示完整的集群拓扑信息,让用户了解集群全貌。
GET /v1/nodes → 按 NodeClass 分组GET /v1/node/{id} → 提取详细属性| 类别 | API 字段 | 输出示例 |
|---|---|---|
| 节点分类 | NodeClass | heavy_workload (3), light_exec (5) |
| 可用 Drivers | Drivers | docker, exec, raw_exec |
| Docker 版本 | Attributes["driver.docker.version"] | 29.2.1 |
| Host Volumes | HostVolumes | data-vol → /opt/data, log-vol → /var/log |
| 节点状态 | Status | ready / down |
| 节点 IP | Address | 192.168.69.80 |
集群拓扑:
heavy_workload (3 nodes): Docker 29.2.1, exec, raw_exec
- heavy-1 (192.168.69.80) host_volumes: [data-vol, log-vol]
- heavy-2 (192.168.69.81) host_volumes: [data-vol]
- heavy-3 (192.168.69.82) host_volumes: [data-vol]
light_exec (5 nodes): exec only
- light-1~5 (192.168.69.90~94)
Skills 使用发现的信息(如 node_class)而非硬编码值。
http:// 前缀 + 端口号,缺少时提示补全curl ${NOMAD_ADDR}/v1/agent/self,检查 HTTP 状态码curl ${CONSUL_HTTP_ADDR}/v1/status/leader,检查 HTTP 状态码curl、jq、yq 已安装,未安装时给出安装命令用户可能不确定正确的入口地址。按以下策略探测:
localhost、已知的 Infra 节点 IP(如 192.168.69.70~72)候选地址探测结果:
| 候选地址 | HTTP 状态 | 响应时间 | 版本 | 诊断 |
|----------------------|----------|---------|---------|----------------|
| 192.168.69.70:4646 | 200 | 0.7ms | v1.11.2 | ✓ 可用 |
| 192.168.69.71:4646 | 200 | 1.2ms | v1.11.2 | ✓ 可用 (备选) |
| 10.0.0.1:4646 | 000 | timeout | - | ✗ 网络不可达 |
连接失败时,必须根据 HTTP 状态码和响应特征进行分类诊断:
| 失败类型 | HTTP 状态 | 响应特征 | 诊断命令 | 处理步骤 |
|---|---|---|---|---|
| 网络不可达 | 000 | timeout/无响应 | ping <ip> | 检查网络连通性、VPN、防火墙规则 |
| 服务未启动 | 000 | connection refused | ssh root@<node> "systemctl status nomad" | 启动服务或检查端口绑定 |
| 地址错误 | 非 JSON 响应 | HTML 或空 | 确认 IP:端口 | Nomad 默认 4646、Consul 默认 8500 |
| 认证失败 | 403 | Permission denied | echo $NOMAD_TOKEN | ACL 启用时需要有效 token |
| TLS 错误 | 000 | SSL 相关 | curl -k https://... | 检查是否需要 https:// 前缀 |
诊断输出示例:
连接失败诊断:
地址: http://10.0.0.1:4646
HTTP 状态: 000 (无响应)
响应时间: 5000ms (超时)
故障分类: 网络不可达
可能原因: 目标 IP 不在本机路由范围内
建议操作:
1. ping 10.0.0.1 — 确认网络连通
2. 检查 VPN 或 SSH 隧道是否已建立
3. 尝试其他候选地址 (192.168.69.70~72)
创建 ~/.aether/ 或 .aether/ 时,如遇权限错误,提示检查 $HOME 路径和目录所有权。
/aether:setup → 配置集群入口(首次使用)
↓
↓ 提供 NOMAD_ADDR, CONSUL_HTTP_ADDR, AETHER_REGISTRY
↓
/aether:init → 读取配置 + API 发现 → 生成部署文件
/aether:dev → 读取配置 → 执行开发部署
/aether:status → 读取配置 → 查询集群状态
/aether:deploy → 读取配置 → 执行生产部署
/aether:rollback → 读取配置 → 执行回滚
新项目接入 Aether 集群。先分析项目特征生成部署方案,确认后生成部署文件。 两阶段流程:Phase 1 分析与设计 → Phase 2 生成文件。 使用场景:"接入新项目到 Aether"、"生成部署配置"、"初始化 CI/CD"、"规划部署方案"
Aether 集成规范速查 —— 四域 investigation-first hub。消费方项目里临时手写 dev env / 测试配置 / 连接串时的规范速查点 (#185→#186→#241 同根因三次复发的知识层加固)。 回答: "内网服务连接该用 consul 名还是 IP"、"数据库怎么连"、"DATABASE_URL 怎么写"、 "REDIS_URL 怎么写"、"连接串该用 IP 还是 consul"、"连 postgres/redis/内网服务的地址"、 "host volume 该注册几个节点/规范"、"stateful 服务模板规范"、"有状态服务该怎么配"、 "DB 密码该存哪"、"应用 secret 该存哪"、"连接串密码能不能硬编码进 HCL"。 使用场景: "Aether 集成规范速查"、"consul 名还是 IP"、"内网服务怎么连"、"数据库怎么连"、 "DATABASE_URL 怎么写"、"REDIS_URL 怎么写"、"连接串用 IP 还是 consul"、"连 postgres/redis 地址"、"host volume 该注册几个节点"、"volume 规范"、"stateful 服务模板规范"、"有状态服务 该怎么配"、"DB 密码该存哪"、"应用 secret 该存哪"、"连接串密码能不能硬编码进 HCL"
Aether 环境下 Forgejo 凭据的决策 / 诊断 / 轮换指南。回答"该用哪个 token"、 拆解人机两账号模型 (simonfish 人 / 10cg-ci-bot 机)、辨别 CF Access 与 forgejo PAT 两个凭据平面、诊断误导性 403 ("Only signed in user")、安全轮换 (先枚举全部 store)、 凭据卫生红线。深度内容指向 docs/guides/forgejo-token-map.md + .aether/pat-inventory.yaml。 使用场景: "该用哪个 forgejo token"、"which forgejo token"、"forgejo 401"、 "forgejo 403"、"Only signed in user"、"docker login forgejo"、"CF Access 403"、 "token rotation"、"凭据轮换"、"FORGEJO_TOKEN"、"forgejo credential"、 "人机账号"、"registry pull 401"、"docker push unauthorized"
管理 Nomad 节点的 host volume 配置。支持创建、列出、删除 volume。 使用场景:"配置 volume"、"创建 host volume"、"删除 volume"、"查看 volume"
Aether 集群上 owner-triggered 一次性 build container 原语 (walking skeleton, #27). 把本地 git ref 的 tracked 树打包送上 heavy 节点宿主 docker, build + push 到内网 registry, 返回 immutable image_sha256 契约。无 CLI 子命令、无版本 bump、零 Go 代码。 使用场景: "build 镜像", "build aria-runner", "构建容器镜像", "build container", "把 Dockerfile 推到 registry", "image build", "用 Aether 跑 build", "10CG 项目 build image", "首次镜像构建", "无 CI 触发的镜像 build"
向 Aether 维护团队报告 Bug 或提交功能建议。自动收集环境信息, 自动路由到 Forgejo(内部用户)或 GitHub(外部用户)。 使用场景:"报告 bug"、"report an issue"、"提交功能建议"、 "aether 有个问题想反馈"、"feature request"、"提 issue"、 "反馈问题"、"report bug to aether"