Three things in this commit:
1. Atlas skills now agentskills.io / Hermes-compatible
- Each atlas/skills/claw-*/SKILL.md frontmatter enriched with version,
author, license, and metadata.hermes block (tags, category,
related_skills, boundaries)
- New atlas/skills/DESCRIPTION.md per Hermes category convention
- New atlas/INTEGRATION-hermes.md — step-by-step SOP to install Atlas
onto hermes-agent runtime (cp skills, fetch nuwa upstream, configure
env, wire cron, smoke test). Documents the branding override and
self-improving-loop guardrail.
2. nuwa-skill mirror prep (waiting on org-repo creation)
- scripts/mirror-nuwa-to-moments.sh — one-shot bare-clone + push --mirror
- docs/decisions/0001-mirror-nuwa-skill.md — ADR explaining the why,
the bot-token scope limitation, and the manual one-time repo creation
step required at https://git.moments.top/repo/create
3. README rewrite
- Atlas-forward navigation table ("想做什么 → 看哪里")
- Quickstart sections for browsing, running tests locally, fetching
nuwa upstream (public + air-gapped variants), and Hermes integration
- Preserved all original Vega working agreements
- Roadmap with explicit Atlas / Vega tracks
Bot account (multica-bot) lacks write:organization scope so cannot create
the nuwa-skill repo via API. After human creates the empty repo at
git.moments.top/Moments.top/nuwa-skill, run scripts/mirror-nuwa-to-moments.sh
to populate it.
3.9 KiB
3.9 KiB
| name | description | version | author | license | metadata | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| claw-project-tracker | Cluster threads into project entities, apply GTD/RACI logic, judge project state (Active/Stalled/Completed/Someday/Dropped) with rule citations. | 0.1.0 | Moments / Atlas team | MIT |
|
claw-project-tracker
Purpose
The middle of Atlas's pipeline. Reads canonical Email JSON, groups threads into projects, maintains the state/projects/ cards, and applies the boss's boss_skill.md rules to judge state.
Inputs
- All Email JSON in
state/extracted/newer thanstate/projects/.last_processed - Current
state/projects/*.json boss_skill.md(decision heuristics layer)
Outputs
- Updated
state/projects/PRJ-*.json(see schema in../../state-schemas/project.md) - New
state/projects/PRJ-*.jsonfor newly-detected projects state/unclustered/<thread_id>.jsonfor threads that won't cluster- Audit row per state transition into
state/audit/project_transitions.csv
Project Detection
A "project" emerges from a cluster of threads sharing:
- Stable subject keyword (after normalization)
- Stable participant set (≥ 2 of the original participants persist across threads)
- Time continuity (gap < 60 days)
- Optional: explicit project tag from boss (
#PRJ-XXXin subject or first message)
Atlas seeds project IDs as PRJ-YYYY-NNN-<short-name>. The short-name is derived from the most-common project keyword.
State Judgment Rules (default; boss can override via boss_skill.md)
Active := waiting_for.days_overdue ≤ R("stall_threshold_days", default 5)
AND last_action exists
AND not Completed
Stalled := waiting_for.days_overdue > stall_threshold_days
AND no Completed signal
Completed := terminal_keyword_seen("验收|结案|关闭|completed|signed off")
OR boss_explicit_complete = true
Someday := boss_replied_with("先放放|稍后|after Q|不急")
AND days_since_last_action > 30
Dropped := days_since_any_signal > R("drop_threshold_days", default 60)
AND state was Stalled or Someday
Every transition writes to state/audit/project_transitions.csv with: timestamp, project_id, from_state, to_state, rule_refs, source_email_ids.
RACI Inference
- Responsible = most frequent internal sender + receiver in thread
- Accountable = boss-tagged or boss-cc'd internal person who owns delivery
- Consulted = internal cc'd ≥ 30% of messages
- Informed = boss (always) + anyone cc'd < 30%
Missing Accountable for an Active or Stalled project = automatic R-RACI-A-missing flag, surface in Brief.
Failure Modes
| Failure | Behavior |
|---|---|
| Thread refuses to cluster | Move to state/unclustered/, surface in Brief weekly |
| Project ID collision | Append -2, log warning |
| Boss explicitly merges projects via override | Atomic merge, archive both originals to state/projects/.merged/ |
Sample Output
{
"id": "PRJ-2025-001-客户A官网改版",
"name": "客户A 官网改版",
"客户方": "CUST-clientco",
"raci": {
"responsible": ["张三"],
"accountable": "李四",
"consulted": ["设计部"],
"informed": ["Boss"]
},
"gtd": {
"next_action": "等张三发出修改稿 v3",
"waiting_for": {"who": "张三", "since": "2026-04-28", "days_overdue": 11},
"状态": "Stalled"
},
"落地率判定": {
"结论": "Stalled",
"依据": ["GTD-WF: 11 天无回复(阈值 5)", "R-37: 客户主动催办 2 次"],
"置信度": 0.82,
"source_email_ids": ["msg-abc", "msg-def"]
},
"时间线": [...],
"金额": 120000,
"下一步建议": "Boss 亲自 ping 张三 + cc 李四,表明 deadline"
}