diff --git a/README.md b/README.md index a6c0508..d33b95b 100644 --- a/README.md +++ b/README.md @@ -1,91 +1,190 @@ # assistant-claw(总助Claw) -总助 Claw 的"配置中心"——同时承载两个 agent profile: +> "把太多不了了之的事,重新装回老板的视野里。" -- **Vega** —— 通用助理(general-purpose teammate,原 README 设定) -- **Atlas** —— 老板视角项目执行雷达(new;详见 [`atlas/README.md`](./atlas/README.md)) +`assistant-claw` 是 Moments / 莫曼茨智能科技的**总助 Claw 配置中心**,一个仓库装两个 agent profile: -两个 profile 共用本仓库的目录约定(prompts / skills / tools / autopilots / docs),但 Atlas 是按客户实例化部署的纵向产品,所有 Atlas 特有资产(OpenClaw 8 件套 + 6 个子 skill + email-extractor + boss_skill 蒸馏 demo + 客户演示 deck)封装在 [`atlas/`](./atlas/) 子目录里。Vega 的内容继续按原计划长在顶层。 +| Profile | 角色 | 状态 | 入口 | +|---------|------|------|------| +| **Atlas** 🦅 | 老板视角项目执行雷达——按客户部署的纵向产品 | 设计 + 邮件抽取实现 + 蒸馏 demo 完成 | [`atlas/`](./atlas/) | +| **Vega** ⭐ | 通用助理 agent——莫曼茨内部多面手 | 骨架占位 | [`prompts/`](./prompts/) `skills/` `tools/` | -Atlas 部署时建议直接 `cd atlas && cat README.md` 走它的部署 SOP;本仓库根目录的下面这份 Vega 配置说明保持不变。 +两个 profile 共用本仓库的目录约定(prompts / skills / tools / autopilots / docs),**Atlas 资产隔离在 `atlas/` 子目录**,避免污染 Vega 的演进路径。 --- -总助 Claw 的"配置中心"——管理 Vega(通用助理 Agent)的全部可托管内容: +## 📍 想做什么 → 看哪里 -- **prompts/** — 系统提示词、人格设定、风格 guideline -- **skills/** — 可复用的 skill 定义(Markdown + frontmatter) -- **tools/** — Vega 调用的工具:MCP 服务配置、自定义 CLI 脚本、HTTP 工具适配 -- **autopilots/** — 定时 / 触发式自动任务(对应 Multica `multica autopilot` 的配置) -- **docs/** — 设计文档、ADR、运行手册 +| 目标 | 路径 | +|------|------| +| 看 Atlas 是个什么产品 | [`atlas/README.md`](./atlas/README.md) | +| 给客户讲 Atlas(2 页文档) | [`atlas/client-deck/总助Claw_客户演示_v1.md`](./atlas/client-deck/) | +| 看 Atlas 的 6 个 sub-skill | [`atlas/skills/`](./atlas/skills/) | +| 看 boss_skill 蒸馏 demo(10 封邮件 → 5 层老板 OS) | [`atlas/skills/claw-boss-distiller/demo/`](./atlas/skills/claw-boss-distiller/demo/) | +| 跑邮件抽取(Python 实现,pytest 通过) | [`atlas/mcp-tools/email-extractor/`](./atlas/mcp-tools/email-extractor/) | +| 把 Atlas 装到 Hermes Agent 上跑 | [`atlas/INTEGRATION-hermes.md`](./atlas/INTEGRATION-hermes.md) | +| 项目卡 / 人员卡 / 客户卡 JSON schema | [`atlas/state-schemas/`](./atlas/state-schemas/) | +| 自动化任务定义(cron + 事件) | [`autopilots/atlas-*.yaml`](./autopilots/) | +| 设计决策记录 | [`docs/decisions/`](./docs/decisions/) | +| Vega 配置(待填) | [`prompts/`](./prompts/) `skills/` `tools/` | -> Vega 在 Multica workspace 里的 agent ID 是 `877b1ea4-d096-4323-9ccc-cda31a3a7b3d`,归属 project **总助Claw**(`fdc928a7-d204-4a9f-929e-2c59bea9cda3`)。她和其他垂直 Claw(`research-claw`、`trainer-claw`、`geo-claw`)并列,但 scope 故意更宽:日常杂活、轻量编码、写作、调研、规划、跨工具协作。 +--- -## 仓库结构 +## 🚀 快速启动 — Atlas -``` -. -├── README.md -├── prompts/ # 系统提示词、人格、风格 -│ └── system.md # 单一可信源(待落地) -├── skills/ # 可触发的 skill 集合 -│ └── / -│ └── SKILL.md # 含 frontmatter: name / description / type -├── tools/ # Vega 调用的工具 -│ ├── mcp/ # MCP server 配置 -│ └── scripts/ # 自定义 CLI / shell 脚本 -├── autopilots/ # 定时 / 触发的 autopilot 定义 -│ └── .yaml # title / agent / mode / schedule / payload -└── docs/ - └── decisions/ # ADR +### 浏览设计 + +```bash +git clone https://git.moments.top/Moments.top/assistant-claw.git +cd assistant-claw/atlas +cat README.md # 总览 +open client-deck/ # 客户演示 ``` -各目录现在用 `.gitkeep` 占位,会随后补齐。 +### 跑邮件抽取(本地,无需任何外部凭据) -## 内容类型说明 +```bash +cd assistant-claw/atlas/mcp-tools/email-extractor +python -m venv .venv && .venv/bin/pip install -e '.[test]' +.venv/bin/pytest -q # 7/7 测试通过 +.venv/bin/atlas-extract dir \ + --input-dir ../../skills/claw-boss-distiller/demo/INPUT \ + --state-dir /tmp/atlas-test +``` -### prompts/ -Vega 的 system prompt 与人格设定,唯一可信源。线上 agent 的 prompt 应该从这里发布,而不是直接在 Multica 后台手动编辑。 +### 拉 nuwa-skill 上游(claw-boss-distiller 依赖) -### skills/ +```bash +# 公网部署 +git clone --depth 1 https://github.com/alchaincyf/nuwa-skill.git \ + atlas/skills/claw-boss-distiller/upstream + +# 客户内网(air-gapped)部署 —— 用 Moments 私有 Gitea 镜像 +# (镜像建立流程见 docs/decisions/0001-mirror-nuwa-skill.md) +git clone --depth 1 https://git.moments.top/Moments.top/nuwa-skill.git \ + atlas/skills/claw-boss-distiller/upstream +``` + +### 接到 Hermes Agent 跑 + +详见 [`atlas/INTEGRATION-hermes.md`](./atlas/INTEGRATION-hermes.md)。一句话:6 个 SKILL.md 已经按 agentskills.io / Hermes 兼容格式写好,直接 `cp -r atlas/skills/* ~/.hermes/skills/atlas/`。 + +--- + +## 📐 仓库目录约定 + +``` +assistant-claw/ +├── README.md ← 本文件 +├── .gitignore +│ +├── prompts/ Vega system prompt + 人格(占位,待填) +├── skills/ Vega 通用 skill(占位) +├── tools/ Vega 调用的 MCP / 自定义脚本(占位) +├── docs/ +│ └── decisions/ ADR — 架构决策记录 +│ └── 0001-mirror-nuwa-skill.md +│ +├── autopilots/ Multica autopilot 配置(YAML,多 profile 共用) +│ ├── atlas-daily-brief.yaml +│ ├── atlas-weekly-rollup.yaml +│ ├── atlas-monthly-customer-health.yaml +│ ├── atlas-quarterly-boss-skill-refresh.yaml +│ └── atlas-andon-event.yaml +│ +├── scripts/ 一次性运维脚本 +│ └── mirror-nuwa-to-moments.sh (nuwa-skill 镜像到 Moments Gitea) +│ +└── atlas/ 🦅 Atlas profile 全部资产 + ├── README.md + ├── INTEGRATION-hermes.md Hermes Agent 集成 SOP + ├── IDENTITY.md SOUL.md USER.md AGENTS.md TOOLS.md MEMORY.md + │ BOOTSTRAP.md HEARTBEAT.md (+ .zh-CN.md 镜像) + ├── CLAUDE.md → AGENTS.md 软链 + ├── client-deck/ 客户演示主材料 + ├── mcp-tools/ + │ ├── email-extractor.md 设计 spec(7 阶段流水线) + │ └── email-extractor/ Python V0 实现(fetch + decode + dequote) + ├── skills/ + │ ├── DESCRIPTION.md Hermes category 描述 + │ ├── claw-email-parser/SKILL.md + │ ├── claw-project-tracker/SKILL.md + │ ├── claw-people-observer/SKILL.md 硬约束:永不打员工等级 + │ ├── claw-customer-radar/SKILL.md CHS + Andon + │ ├── claw-boss-distiller/ ⭐ nuwa-skill 衍生 + │ │ ├── SKILL.md ADAPTER.md boss_skill.seed.md + │ │ ├── upstream/README.md 部署时拉取的 SOP + │ │ └── demo/ 完整蒸馏 demo + │ └── claw-report-writer/SKILL.md + └── state-schemas/ 项目 / 人员 / 客户 三张卡 JSON schema +``` + +### 内容约定 + +#### `prompts/` — system prompt + 人格 +单一可信源。线上 agent 的 prompt 应该从这里发布,不直接在 Multica 后台手动编辑。 + +#### `skills/` 每个 skill 一个子目录,至少包含 `SKILL.md`,frontmatter 必须有: - `name` — 唯一短名(kebab-case) -- `description` — 一行触发说明(用于决定何时调用,写得越具体越好) -- `type` — `rigid`(必须严格遵循) 或 `flexible`(按情境调整) +- `description` — 一行触发说明 +- 可选增强字段(推荐):`version`、`author`、`license`、`metadata.hermes.{tags, category, related_skills, boundaries}` —— 这些让 skill 兼容 [agentskills.io](https://agentskills.io) 和 Hermes Agent -Skill 必须能给出一个具体的 trigger 场景;写不出来的就不要加。 +#### `tools/` +- `tools/mcp/` — MCP server 配置 +- `tools/scripts/` — Vega 通过 Bash 调用的自定义脚本 -### tools/ -- `tools/mcp/` — MCP server 的连接配置(command、env、scope 等) -- `tools/scripts/` — Vega 通过 Bash 调用的自定义脚本,每个脚本顶部一段说明 + 用法示例 - -### autopilots/ -对应 `multica autopilot create` 的配置文件,每个 autopilot 一个 YAML/JSON: -- `title`、`description`、`agent`、`mode`(默认 `create_issue`) -- `schedule`(cron 或 trigger 描述) -- `payload` / `template`(每次触发时落到 issue 的内容模板) +#### `autopilots/` +对应 `multica autopilot create` 的配置文件,一个 autopilot 一个 YAML: +- `title`、`description`、`agent`、`mode` +- `schedule`(cron 或事件触发) +- `payload` / `delivery` +- `guardrails` 发布时通过脚本读这些文件批量调 `multica autopilot create/update`,避免漂移。 -### docs/ -设计决策(ADR)、运行手册、复盘记录。改 `prompts/` 或 `skills/` 之前先写一段 ADR,比事后追溯便宜。 +#### `docs/decisions/` — ADR +改动 prompts / skills / tools 之前先写一段 ADR,比事后追溯便宜。 -## 工作约定 +--- -- **Issue / 任务流转走 Multica**:所有给 Vega 的任务、反馈、复盘走 Multica 的 issue + comment,**不在仓库里开 issue**。 -- **改动走 PR**:`prompts/`、`skills/`、`tools/`、`autopilots/` 下的内容都会进 production,必须 PR + review,不直接 push main。 -- **保持 lean**:宁可少加,也不堆没人用的脚手架。每加一个 skill / tool / autopilot 都要能回答:"谁在什么场景下会触发它"。 +## ⚙️ 工作约定 -## 路线图(暂定) +- **Issue / 任务流转走 Multica**:所有给 agent 的任务、反馈、复盘走 Multica 的 issue + comment,**不在仓库里开 issue** +- **改动走 PR**:`prompts/`、`skills/`、`tools/`、`autopilots/`、`atlas/` 下的内容都进 production,必须 PR + review,不直接 push main +- **Atlas profile 是按客户实例化部署的**:每个客户的 `state/` 永远在客户机器上,不进本仓库 +- **保持 lean**:宁可少加,也不堆没人用的脚手架 -- [ ] 把当前 Vega 的 system prompt 落到 `prompts/system.md` -- [ ] 抽出最常用的 3–5 个 skill 到 `skills/`(issue triage、comment drafting、研究汇总等) -- [ ] 把现有 autopilot 反向导出到 `autopilots/`,建立"配置即代码"基线 -- [ ] `docs/decisions/0001-why-general-agent.md`:为什么是通用 agent 而不是又一个垂直 claw +--- + +## 🔗 相关 + +- **Multica project**:总助 Claw(`fdc928a7-d204-4a9f-929e-2c59bea9cda3`) +- **兄弟仓库**:`research-claw` / `trainer-claw` / `geo-claw` +- **上游开源依赖**: + - [`alchaincyf/nuwa-skill`](https://github.com/alchaincyf/nuwa-skill)(MIT)—— Atlas 心智蒸馏方法论的来源 + - [`NousResearch/hermes-agent`](https://github.com/NousResearch/hermes-agent)(MIT)—— 推荐运行时 +- **agentskills.io 标准**:https://agentskills.io +- **Atlas 北极星**:老板每天 5 分钟看完日 Brief,能立刻说出今日 3 件事 + +--- + +## 🗺️ 路线图 + +### Atlas +- [x] OpenClaw 8 件套 + 6 sub-skill 设计 +- [x] email-extractor V0(Stage 1-3 实现 + 7 测试通过) +- [x] boss-distiller demo run(10 封邮件 → 5 层蒸馏验证) +- [x] 客户演示 deck v1 +- [x] Hermes 集成 SOP +- [ ] **nuwa-skill 镜像到 Moments Gitea**(仓库已建则一键 `scripts/mirror-nuwa-to-moments.sh`) +- [ ] email-extractor Stage 4-7(threading / entities / intent / canonical) +- [ ] 6 个 sub-skill 的可执行实现(当前是设计文档) +- [ ] `atlas-extractor` 包成 MCP server +- [ ] 第一个客户 W1 部署 + +### Vega +- [ ] system prompt 落到 `prompts/system.md` +- [ ] 抽出最常用的 3–5 个通用 skill +- [ ] 把现有 autopilot 反向导出到 `autopilots/` - [ ] CI:对 `prompts/` 和 `skills/` 做 schema / lint 校验 -- [ ] 发布脚本:从 `autopilots/*.yaml` 批量同步到 Multica - -## 相关链接 - -- Multica project:总助Claw(`fdc928a7-d204-4a9f-929e-2c59bea9cda3`) -- 兄弟仓库:`research-claw` / `trainer-claw` / `geo-claw` diff --git a/atlas/INTEGRATION-hermes.md b/atlas/INTEGRATION-hermes.md new file mode 100644 index 0000000..5c165a9 --- /dev/null +++ b/atlas/INTEGRATION-hermes.md @@ -0,0 +1,122 @@ +# Hermes Agent Integration + +Atlas can run on **[hermes-agent](https://github.com/NousResearch/hermes-agent)** +(MIT, by Nous Research) as the host runtime. Hermes provides exactly what Atlas +needs: agentskills.io-compatible skill loader, cron scheduler, MCP client, +multi-platform delivery (incl. email/feishu/dingtalk), session memory + FTS5, +and subagent delegation. + +This doc tells the operator how to install Atlas on top of Hermes in ≤ 30 minutes. + +## What you need + +- Hermes installed: `curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash` +- Python 3.10+ (for `atlas-extractor` MCP wrapper) +- This repo (`assistant-claw`) cloned + +## Step 1 — Drop Atlas skills into Hermes skills dir + +```bash +# Hermes scans ~/.hermes/skills/ on startup +mkdir -p ~/.hermes/skills/atlas +cp -r atlas/skills/* ~/.hermes/skills/atlas/ + +# Check Hermes sees them +hermes skills list | grep claw- +``` + +Each `claw-*/SKILL.md` already has the agentskills.io-compatible frontmatter +(`name`, `description`, `version`, `author`, `license`, `metadata.hermes.*`) +so Hermes recognizes them immediately. + +## Step 2 — Fetch the nuwa-skill upstream once + +```bash +# Public deployment +git clone --depth 1 https://github.com/alchaincyf/nuwa-skill.git \ + ~/.hermes/skills/atlas/claw-boss-distiller/upstream + +# Air-gapped deployment (after Moments mirror is up — see ADR-0001) +git clone --depth 1 https://git.moments.top/Moments.top/nuwa-skill.git \ + ~/.hermes/skills/atlas/claw-boss-distiller/upstream +``` + +## Step 3 — Install atlas-extractor as an MCP server (TBD code) + +The `atlas/mcp-tools/email-extractor/` Python package currently exposes a CLI +(`atlas-extract`). Wrapping it as an MCP server is V0.5 work; until then +Hermes can call the CLI via Bash. + +```bash +cd atlas/mcp-tools/email-extractor +python -m venv .venv +.venv/bin/pip install -e '.[test]' +.venv/bin/pytest -q # confirm 7/7 passing +``` + +## Step 4 — Configure the boss's email account + +```bash +hermes env set BOSS_EMAIL boss@clientco.com +hermes env set ATLAS_IMAP_HOST imap.clientco.com +hermes env set ATLAS_IMAP_USER atlas-readonly@clientco.com +hermes env set ATLAS_IMAP_PASSWORD # never main password +hermes env set ATLAS_STATE_DIR ~/.atlas/state +``` + +## Step 5 — Wire the autopilots into Hermes cron + +Atlas's 5 autopilot YAMLs live in `../autopilots/atlas-*.yaml`. Translate each +into Hermes natural-language cron: + +```bash +hermes cron add "every day 7:30" "Run Atlas daily-brief skill" +hermes cron add "every monday 8:00" "Run Atlas weekly-rollup skill" +hermes cron add "every month on 1st 9:00" "Run Atlas monthly customer-health skill" +hermes cron add "every quarter on 1st 10:00" "Run Atlas boss_skill quarterly refresh" +``` + +Andon (event-triggered) is set up via `hermes hooks add` once Atlas writes a +sentinel file like `~/.atlas/state/runs/_andon_pending.flag`. + +## Step 6 — Smoke test + +```bash +# Manually invoke claw-boss-distiller on the demo input +hermes "Run claw-boss-distiller on atlas/skills/claw-boss-distiller/demo/INPUT/ \ + and write the result to atlas/skills/claw-boss-distiller/demo/OUTPUT/boss_skill.live.md" + +# Check it produced a 5-layer doc +diff atlas/skills/claw-boss-distiller/demo/OUTPUT/boss_skill.demo.md \ + atlas/skills/claw-boss-distiller/demo/OUTPUT/boss_skill.live.md +``` + +## Step 7 — First Daily Brief + +Wait until the next scheduled 7:30, OR force-run: + +```bash +hermes "Run Atlas daily-brief now and email it to ${BOSS_EMAIL}" +``` + +The boss receives a 5-minute Brief in their inbox. + +## Caveats + +1. **Hermes self-improving loop** — Hermes can auto-edit its own skills based + on usage. **Lock down `SOUL.md` and the SKILL.md `boundaries:` list** by + adding them to Hermes's skill-write deny list. We never want Atlas to + auto-relax its own guardrails. + +2. **Branding** — Hermes's default identity is "Hermes Agent by Nous Research". + Override the system prompt to introduce as "Atlas / 总助 Claw" for client + deployments. See `hermes_cli/skin_engine.py` for theming hooks. + +3. **Execution environment** — Use `local` or `docker` backends only for + client-internal deployments. SSH / Daytona / Modal assume external network. + +## Roadmap + +- [ ] V0.5: Wrap `atlas-extractor` as proper MCP server (replace Bash CLI invocation) +- [ ] V0.5: Auto-generate Hermes skill manifest from `atlas/skills/*/SKILL.md` on commit +- [ ] V1: Build a Hermes "skill pack" installer (`hermes skills install moments/atlas`) diff --git a/atlas/skills/DESCRIPTION.md b/atlas/skills/DESCRIPTION.md new file mode 100644 index 0000000..060378d --- /dev/null +++ b/atlas/skills/DESCRIPTION.md @@ -0,0 +1,36 @@ +--- +description: > + Atlas (总助 Claw) — boss-perspective project execution radar. Six sub-skills + that turn raw email into a 3D map of "people × project × customer", surface + what's slipping, and write a 5-minute daily Brief in the boss's voice. + Compatible with Hermes Agent (agentskills.io standard) and OpenClaw runtime. +metadata: + hermes: + category: atlas + tags: [boss-radar, project-tracking, gtd, raci, 9-box, customer-health, ona] +--- + +# Atlas Sub-Skills + +Six skills work in pipeline: + +``` +[email-parser] → [project-tracker] → [people-observer] → [customer-radar] + ↓ ↓ ↓ + └──────────────────┴─────────────────┘ + ↓ + [boss-distiller] (quarterly) + ↓ + [report-writer] (daily/weekly/monthly) +``` + +| Skill | Job | +|-------|-----| +| `claw-email-parser` | Fetch + extract canonical Email JSON | +| `claw-project-tracker` | Cluster threads → projects, GTD/RACI, state | +| `claw-people-observer` | 9-Box / BARS / CCAR / ONA — never assigns ratings | +| `claw-customer-radar` | CHS / VoC / churn — fires Andon alerts | +| `claw-boss-distiller` | nuwa-skill derivative, distill boss mental model | +| `claw-report-writer` | Daily / Weekly / Monthly briefs in boss's voice | + +See each `claw-*/SKILL.md` for inputs/outputs, judgment rules, and failure modes. diff --git a/atlas/skills/claw-boss-distiller/SKILL.md b/atlas/skills/claw-boss-distiller/SKILL.md index 09e03fb..d7dc872 100644 --- a/atlas/skills/claw-boss-distiller/SKILL.md +++ b/atlas/skills/claw-boss-distiller/SKILL.md @@ -1,6 +1,18 @@ --- name: claw-boss-distiller description: Distill the boss's mental model from outgoing email corpus into a 5-layer boss_skill.md (Expression DNA / Mental Models / Decision Heuristics / Anti-Patterns / Honest Boundaries). Derived from nuwa-skill (MIT). Drafts only — boss confirms every change. +version: 0.1.0 +author: Moments / Atlas team (adapted from alchaincyf/nuwa-skill, MIT) +license: MIT +metadata: + hermes: + category: atlas + tags: [mental-model, distillation, nuwa, boss-os, atlas] + related_skills: [claw-email-parser, claw-report-writer] + upstream_dependency: alchaincyf/nuwa-skill + boundaries: + - all_new_rules_default_to_status_draft + - never_apply_changes_without_explicit_boss_confirm --- # claw-boss-distiller diff --git a/atlas/skills/claw-customer-radar/SKILL.md b/atlas/skills/claw-customer-radar/SKILL.md index 8765e51..4b1bbce 100644 --- a/atlas/skills/claw-customer-radar/SKILL.md +++ b/atlas/skills/claw-customer-radar/SKILL.md @@ -1,6 +1,16 @@ --- name: claw-customer-radar description: Compute Customer Health Score, sentiment trend, RFM, decision-chain map, churn signals. Fire Andon alerts when health crosses thresholds. +version: 0.1.0 +author: Moments / Atlas team +license: MIT +metadata: + hermes: + category: atlas + tags: [customer-success, chs, voc, churn, rfm, andon, atlas] + related_skills: [claw-email-parser, claw-project-tracker, claw-report-writer] + boundaries: + - cross_customer_data_isolation --- # claw-customer-radar diff --git a/atlas/skills/claw-email-parser/SKILL.md b/atlas/skills/claw-email-parser/SKILL.md index 89875c7..1b68266 100644 --- a/atlas/skills/claw-email-parser/SKILL.md +++ b/atlas/skills/claw-email-parser/SKILL.md @@ -1,6 +1,14 @@ --- name: claw-email-parser description: Wraps the email-extractor MCP tool; orchestrates fetch → extract → write canonical Email JSON. The thin LLM layer that decides what to do with low-confidence extractions. +version: 0.1.0 +author: Moments / Atlas team +license: MIT +metadata: + hermes: + category: atlas + tags: [email, imap, extraction, atlas, intake] + related_skills: [claw-project-tracker, claw-people-observer, claw-customer-radar] --- # claw-email-parser diff --git a/atlas/skills/claw-people-observer/SKILL.md b/atlas/skills/claw-people-observer/SKILL.md index d0ec7bb..e728761 100644 --- a/atlas/skills/claw-people-observer/SKILL.md +++ b/atlas/skills/claw-people-observer/SKILL.md @@ -1,6 +1,18 @@ --- name: claw-people-observer description: Compute observation cards for each person — project density, response time, BARS behavior tags, CCAR critical incidents, ONA centrality, 9-Box performance dimension. NEVER assigns potential or final ratings — those are boss-only. +version: 0.1.0 +author: Moments / Atlas team +license: MIT +metadata: + hermes: + category: atlas + tags: [people-analytics, 9-box, bars, ccar, ona, atlas] + related_skills: [claw-email-parser, claw-project-tracker, claw-report-writer] + boundaries: + - never_assign_9box_potential + - never_assign_topgrading_grade + - never_recommend_pip_or_termination --- # claw-people-observer diff --git a/atlas/skills/claw-project-tracker/SKILL.md b/atlas/skills/claw-project-tracker/SKILL.md index 110d306..0a89310 100644 --- a/atlas/skills/claw-project-tracker/SKILL.md +++ b/atlas/skills/claw-project-tracker/SKILL.md @@ -1,6 +1,14 @@ --- name: claw-project-tracker description: Cluster threads into project entities, apply GTD/RACI logic, judge project state (Active/Stalled/Completed/Someday/Dropped) with rule citations. +version: 0.1.0 +author: Moments / Atlas team +license: MIT +metadata: + hermes: + category: atlas + tags: [project-management, gtd, raci, atlas, boss-perspective] + related_skills: [claw-email-parser, claw-people-observer, claw-customer-radar, claw-report-writer] --- # claw-project-tracker diff --git a/atlas/skills/claw-report-writer/SKILL.md b/atlas/skills/claw-report-writer/SKILL.md index 443711a..6f734fb 100644 --- a/atlas/skills/claw-report-writer/SKILL.md +++ b/atlas/skills/claw-report-writer/SKILL.md @@ -1,6 +1,18 @@ --- name: claw-report-writer description: Render Daily Brief / Weekly Rollup / Monthly Customer Health / one-time Inventory in Amazon WBR style with rule citations. Speaks in the boss's voice (Layer 1 of boss_skill.md). +version: 0.1.0 +author: Moments / Atlas team +license: MIT +metadata: + hermes: + category: atlas + tags: [reporting, wbr, daily-brief, atlas, boss-voice] + related_skills: [claw-project-tracker, claw-people-observer, claw-customer-radar, claw-boss-distiller] + delivery_channels: [email, feishu, dingtalk, wechat] + boundaries: + - send_only_to_boss + - cite_every_judgment --- # claw-report-writer diff --git a/docs/decisions/0001-mirror-nuwa-skill.md b/docs/decisions/0001-mirror-nuwa-skill.md new file mode 100644 index 0000000..d0d99e5 --- /dev/null +++ b/docs/decisions/0001-mirror-nuwa-skill.md @@ -0,0 +1,63 @@ +# ADR-0001: Mirror nuwa-skill into Moments private Gitea + +**Date:** 2026-05-09 +**Status:** Accepted +**Authors:** Atlas team + +## Context + +Atlas's `claw-boss-distiller` skill (under `atlas/skills/claw-boss-distiller/`) is +adapted from the open-source [`alchaincyf/nuwa-skill`](https://github.com/alchaincyf/nuwa-skill) +(MIT). It uses upstream's triple-verification methodology and skill template +(see `atlas/skills/claw-boss-distiller/ADAPTER.md`). + +For deployment, each Atlas instance needs the upstream code: + +```bash +git clone --depth 1 https://github.com/alchaincyf/nuwa-skill.git \ + atlas/skills/claw-boss-distiller/upstream +``` + +This works for environments with public internet. **It does not work for many +enterprise client deployments** which Atlas explicitly targets — most of our +customer base operates inside corporate networks that block direct GitHub access. + +## Decision + +Mirror `alchaincyf/nuwa-skill` to `git.moments.top/Moments.top/nuwa-skill` and +treat the Moments mirror as the canonical fetch source for client deployments. + +The bot account (`multica-bot`) cannot create org repos via API (lacks +`write:organization` scope). Repo creation is a one-time human step: + +> https://git.moments.top/repo/create → owner: `Moments.top` → name: `nuwa-skill` +> → empty (no auto-init) + +After repo exists, run `./scripts/mirror-nuwa-to-moments.sh` to populate it. + +## Consequences + +### Positive +- Air-gapped client deployments work (no GitHub access required) +- Stable fetch URL even if upstream is unavailable +- Allows pinning to a specific commit per-deployment if needed +- We retain MIT license attribution (no IP impact) + +### Negative +- Adds a sync responsibility — when upstream evolves, we need to re-mirror +- Slight risk of staleness if mirror cron fails silently + +## Mitigation + +- Run `./scripts/mirror-nuwa-to-moments.sh` on a weekly cron (TBD: add to + `autopilots/` once decided) +- Each Atlas deployment records the upstream commit SHA at install time so + drift is auditable +- README in `atlas/skills/claw-boss-distiller/upstream/` clearly notes the + mirror is a downstream copy, with last-mirrored timestamp + +## References + +- Upstream: https://github.com/alchaincyf/nuwa-skill (MIT) +- Mirror script: `scripts/mirror-nuwa-to-moments.sh` +- Adapter notes: `atlas/skills/claw-boss-distiller/ADAPTER.md` diff --git a/scripts/mirror-nuwa-to-moments.sh b/scripts/mirror-nuwa-to-moments.sh new file mode 100755 index 0000000..d33fb5f --- /dev/null +++ b/scripts/mirror-nuwa-to-moments.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# Mirror github.com/alchaincyf/nuwa-skill (MIT) into Moments private Gitea. +# +# Why we mirror: Atlas's claw-boss-distiller depends on nuwa-skill methodology +# (`references/extraction-framework.md`). For air-gapped client deployments where +# the client network cannot reach github.com, our private Gitea must serve nuwa. +# +# Prereq: a destination repo on git.moments.top must already exist (empty). +# Default target: https://git.moments.top/Moments.top/nuwa-skill.git +# +# Create it once via Gitea UI (the bot account doesn't have org-create scope): +# https://git.moments.top/repo/create → owner: Moments.top → name: nuwa-skill → empty +# +# Usage: +# ./scripts/mirror-nuwa-to-moments.sh +# ./scripts/mirror-nuwa-to-moments.sh https://git.moments.top/your-org/nuwa-skill.git +# +# After first mirror, schedule a weekly cron to re-mirror upstream changes. + +set -euo pipefail + +UPSTREAM="https://github.com/alchaincyf/nuwa-skill.git" +TARGET="${1:-https://git.moments.top/Moments.top/nuwa-skill.git}" +WORKDIR="$(mktemp -d -t nuwa-mirror-XXXXXX)" + +echo "Mirror $UPSTREAM → $TARGET" +echo "Workdir: $WORKDIR" + +# Bare clone preserves all branches/tags/refs +git clone --mirror "$UPSTREAM" "$WORKDIR" +cd "$WORKDIR" + +# Push everything (--mirror = all refs incl. delete on remote) +git push --mirror "$TARGET" + +cd / +rm -rf "$WORKDIR" + +echo "✅ Mirror complete: $TARGET" +echo +echo "Next: update atlas/skills/claw-boss-distiller/upstream/README.md to point" +echo " air-gapped deployments at the Moments mirror instead of GitHub."