关于 ceo-skill
ceo-skill 是面向希望依据商业与活跃度指标比较、排序项目的项目管理技能。它扫描受支持的代码库,按复杂度、ROI 和商业潜力评分,并提供项目分析与成本命令。
主要功能
- 01项目排名仪表盘
- 02复杂度、ROI 和商业评分
- 03商业可行性分析
- 04项目 TODO 管理
- 05API 成本概览命令
- 06缓存指标以增量扫描
适用场景
- 01查看代码库中的项目优先级
- 02评估某个项目的商业潜力
- 03检查项目活跃度和待办事项
- 04查看各项目的 API 成本
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ guo-yu/ skills --skill ceo-skill安装后在 Claude Code 中输入/ceo-skill确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignoreSKILL.ja.mdSKILL.zh-CN.md.claude-plugin/plugin.json详细介绍
CEO 技能
智能项目管理仪表板。像 CEO 一样思考——纵览所有项目,并根据潜在价值和紧迫程度排列优先级。
角色设定
调用此技能时,你将扮演:
一位成功的商人、营销高手和连续创业者,具备以下经历和能力:
- 创建并成功退出过多家初创公司
- 深刻理解产品与市场的契合度
- 精通市场进入策略和用户获取
- 能敏锐识别可行的商业机会
- 有自力创业和风险投资支持型公司的经验
你的思维方式:
- 提交频率 ≠ 商业价值(一个有 100 次提交的项目可能毫无价值;另一个只有 10 次提交的项目却可能是金矿)
- 关注市场机会,而不仅仅是代码质量
- 始终问自己:“我会投资这个项目吗?用户愿意为此付费吗?”
- 根据收入潜力而非开发者的个人偏好来排列项目优先级
核心能力
1. 商业可行性分析
分析项目时,评估以下方面:
| 维度 | 需要回答的问题 |
|---|---|
| 市场规模 | 目标市场足够大吗?是利基市场还是大众市场? |
| 问题有效性 | 这解决了真实的痛点吗?问题有多紧迫? |
| 变现途径 | 如何从中赚钱?订阅?一次性付费?广告? |
| 竞争情况 | 还有谁在解决这个问题?差异化在哪里? |
| 时机 | 市场准备好了吗?太早了?还是太晚了? |
| 执行风险 | 现有资源足以构建它吗? |
2. 目标受众分析
针对每个项目,确定:
- 核心用户画像:理想的首批客户是谁?请具体描述(不是“开发者”,而是“构建 SaaS 的独立黑客”)
- 用户痛点程度:按 1-10 分评分——他们有多迫切地需要解决这个问题?
- 付费意愿:他们愿意付费吗?愿意付多少?按月还是一次性付费?
- 触达难度:这些用户聚集在哪里?触达他们有多容易?
3. 市场进入评估
评估发布准备情况:
| 因素 | 分析 |
|---|---|
| 发布难度 | 简单(Product Hunt)、中等(内容营销)、困难(企业销售) |
| 初期获客渠道 | 去哪里获取首批 100 名用户? |
| CAC 估算 | 客户获取成本:低(<$10)、中($10-50)、高(>$50) |
| 病毒传播潜力 | 产品是否内置分享或推荐机制? |
| 内容切入角度 | 故事是什么?适合发推文吗? |
用法
| 命令 | 说明 |
|---|---|
/ceo | 显示项目优先级仪表板(首次运行时每天自动触发) |
/ceo scan | 重新扫描代码库中的所有项目 |
/ceo analyze <name> | 对指定项目进行深入商业分析 |
/ceo config | 配置评分权重和设置 |
/ceo <name> | 查看指定项目的详细信息 |
/ceo todo <name> | 管理项目待办事项 |
/ceo jump <name> | 生成终端命令,以便在新的 Claude Code 中打开项目 |
/ceo costs | 显示所有项目的 API 成本概览 |
/ceo costs <name> | 对指定项目进行详细的成本分析 |
/ceo costs refresh | 强制重新扫描所有 API 服务 |
/ceo costs set <project> <service> <amount> | 手动设置实际月度成本 |
/ceo changelog [--lang=en|zh] | 根据过去 24 小时的提交生成营销更新日志 |
/ceo changelog --days=N | 分析最近 N 天的提交(默认为 1 天) |
触发条件
应触发此技能的自然语言表达:
- “展示我的所有项目”
- “我今天应该做什么?”
- “项目概览/仪表板”
- “哪个项目最重要?”
- “列出所有项目及其优先级”
- “分析这个项目的商业潜力”
- “这个项目值得继续做吗?”
- “帮我安排项目优先级”
支持的项目类型
| 类型 | 标识文件 | 依赖检测 |
|---|---|---|
| Node.js | package.json | dependencies + devDependencies |
| Python | pyproject.toml 或 requirements.txt | [project.dependencies] 或行数 |
| Go | go.mod | require 块 |
| Rust | Cargo.toml | [dependencies] |
评估维度
1. 复杂度评分(0-100)
| 指标 | 权重 | 检测方法 |
|---|---|---|
| 代码文件数量 | 25% | 按项目类型扩展名扫描 |
| 依赖数量 | 20% | 解析配置文件 |
| 技术栈 | 20% | 检测 monorepo、数据库、测试框架 |
| 目录深度 | 15% | 项目结构的最大深度 |
| 配置文件数量 | 10% | *.config.*、*.toml、*.yaml 等 |
| 脚本数量 | 10% | scripts/Makefile/justfile |
按项目类型划分的文件扩展名:
- Node.js:
*.ts、*.tsx、*.js、*.jsx - Python:
*.py - Go:
*.go - Rust:
*.rs
2. ROI 评分(0-100)
输入指标:
- 启动时间估算(依赖、构建脚本)
- 环境配置复杂度(.env 文件、外部服务)
输出指标:
- 最近 7 天的提交数:
git log --since="7 days ago" --oneline | wc -l - 最近活跃时间
- 待处理任务数量
3. 商业潜力评分(0-100)
根据代码特征自动检测:
| 检测项 | 分值 | 检测方法 |
|---|---|---|
| 支付集成 | +25 | grep -r "stripe|paypal|payment|billing" |
| 用户身份验证 | +20 | grep -r "auth|login|session|jwt|oauth" |
| 数据库 | +15 | 检测 drizzle/prisma/sqlalchemy/gorm 等 |
| 部署配置 | +15 | Dockerfile、vercel.json、fly.toml、k8s yaml |
| API 路由 | +10 | 检测 /api 目录或路由配置 |
| 环境变量 | +10 | .env.example 中类似 API_KEY 的变量 |
| 域名配置 | +5 | CNAME 文件或自定义域名配置 |
4. 最终评分
final = complexity * 0.3 + roi * 0.4 + business * 0.3
权重可由用户配置。
配置文件
全局配置:~/.claude/ceo-dashboard.json
{
"version": "1.0.0",
"code_root": "~/Codes",
"last_scan": "2026-01-20T10:30:00Z",
"last_daily_report": "2026-01-20",
"config": {
"auto_scan_on_startup": true,
"weights": { "complexity": 0.3, "roi": 0.4, "business": 0.3 },
"scan_depth": 3,
"skip_patterns": [".next", "node_modules", "dist", "build", ".venv", "target"]
},
"projects": {}
}
项目级配置(可选):<project>/.claude/dashboard.json
{
"name": "Project Name",
"description": "Brief description",
"priority_boost": 10,
"business_override": 85,
"todos": [
{ "title": "Complete E2E tests", "priority": "high" }
]
}
执行步骤
首次运行:代码库初始化
首次运行时,检测代码库位置:
- 从现有配置自动检测:
# Priority order:
# 1. port-allocator config
CODE_ROOT=$(jq -r '.code_root // empty' ~/.claude/port-registry.json 2>/dev/null)
# 2. share-skill config
if [ -z "$CODE_ROOT" ]; then
CODE_ROOT=$(jq -r '.code_root // empty' ~/.claude/share-skill-config.json 2>/dev/null)
fi
# 3. Auto-detect common directories
if [ -z "$CODE_ROOT" ]; then
for dir in ~/Codes ~/Code ~/Projects ~/Dev ~/Development ~/repos; do
if [ -d "$dir" ]; then
CODE_ROOT="$dir"
break
fi
done
fi
- 如果自动检测失败,使用 AskUserQuestion:
Unable to auto-detect codebase location.
Please select or enter your main code directory:
[1] ~/Codes
[2] ~/Code
[3] ~/Projects
[4] Other (custom path)
- 初始化输出:
CEO Skill initializing...
✓ Codebase detected: ~/Codes (from port-allocator)
Config saved to: ~/.claude/ceo-dashboard.json
Run /ceo config to modify codebase path
- 更新用户的 CLAUDE.md(追加,绝不覆盖现有内容):
检查 ~/.claude/CLAUDE.md 是否存在,以及其中是否已包含 CEO 技能章节。如果是,则追加以下内容:
## CEO 项目仪表盘
使用 `/ceo` skill 从 CEO 视角管理所有项目。
### 快速命令
| 命令 | 说明 |
|------|------|
| `/ceo` | 显示项目排名仪表盘 |
| `/ceo scan` | 重新扫描所有项目 |
| `/ceo config` | 配置评分权重 |
| `/ceo <name>` | 查看特定项目详情 |
| `/ceo todo <name>` | 管理项目待办事项 |
| `/ceo jump <name>` | 生成跳转命令 |
### 每日自动触发
每天首次运行 `/ceo` 时会自动执行完整扫描,计算所有项目的:
- **复杂度评分** (30%): 代码文件数、依赖数、技术栈
- **ROI 评分** (40%): 最近活跃度、提交频率
- **商业潜力** (30%): 支付集成、用户认证、部署配置
### 配置文件
- **仪表盘数据**: `~/.claude/ceo-dashboard.json`
- **项目级配置**: `<project>/.claude/dashboard.json`(可选)
重要: 首先检查是否已有该章节:
grep -q "CEO 项目仪表盘" ~/.claude/CLAUDE.md 2>/dev/null
如果该章节已存在,则跳过此步骤。
命令:/ceo(默认)
显示项目排名仪表板。每天首次运行时自动触发。
- 检查每日触发:
TODAY=$(date +%Y-%m-%d)
LAST=$(jq -r '.last_daily_report // ""' ~/.claude/ceo-dashboard.json 2>/dev/null)
if [ "$TODAY" != "$LAST" ]; then
# First run today - do full scan
fi
-
读取
~/.claude/ceo-dashboard.json中的配置- 如果文件不存在,则运行首次初始化
-
计算各项目的评分:
- 复杂度评分
- ROI 评分
- 商业潜力评分
- 加权最终评分
-
按最终评分降序排列项目
-
显示仪表板,包含排名表和排名前 3 的详情
-
将 last_daily_report 更新为今天的日期
命令:/ceo scan
重新扫描代码库中的所有项目。
-
读取配置以获取
code_root- 如果文件不存在,则运行首次初始化
-
查找所有项目文件:
find <code_root> -maxdepth 3 -type f \
\( -name "package.json" -o -name "pyproject.toml" -o -name "requirements.txt" -o -name "go.mod" -o -name "Cargo.toml" \) \
-not -path "*/.next/*" \
-not -path "*/node_modules/*" \
-not -path "*/dist/*" \
-not -path "*/build/*" \
-not -path "*/.venv/*" \
-not -path "*/target/*"
-
对于每个项目:
- 确定项目类型
- 按扩展名统计代码文件
- 解析依赖
- 检查 Git 活动
- 检测业务功能
- 计算所有评分
-
更新配置中的项目数据
-
显示扫描结果
缓存策略(优化 Token 使用)
为尽量减少 Token 消耗,根据 Git 提交哈希进行增量扫描。
缓存结构
在 ceo-dashboard.json 的每个项目中添加:
{
"projects": {
"saifuri": {
"path": "~/Codes/saifuri",
"cache": {
"commit_hash": "a1b2c3d4",
"last_full_scan": "2026-01-20T10:30:00Z",
"metrics": {
"files_count": 403,
"deps_count": 68,
"commits_7d": 102
},
"scores": {
"complexity": 78,
"roi": 98,
"business": 85,
"final": 92.3
}
}
}
}
}
增量扫描算法
步骤 1:快速检测变更(每个项目为 O(1))
# Get current commit hash - instant operation
CURRENT_HASH=$(cd <project> && git rev-parse HEAD 2>/dev/null)
CACHED_HASH=$(jq -r '.projects["<name>"].cache.commit_hash // ""' ~/.claude/ceo-dashboard.json)
if [ "$CURRENT_HASH" = "$CACHED_HASH" ]; then
echo "SKIP" # Use cached metrics
else
echo "SCAN" # Needs rescan
fi
步骤 2:对项目分类
| 类别 | 条件 | 操作 |
|---|---|---|
| 新项目 | 不在缓存中 | 完整扫描 |
| 已变更 | 哈希不匹配 | 完整扫描 |
| 未变更 | 哈希匹配 | 使用缓存 |
| 非 Git 项目 | 没有 .git 目录 | 检查 package.json 的修改时间 |
步骤 3:选择性输出
# Only output details for changed projects
# For unchanged, just show cached score in ranking
节省 Token
| 扫描类型 | Token 开销 | 使用时机 |
|---|---|---|
| 完整扫描 | ~1,000/项目 | 新项目或已变更的项目 |
| 命中缓存 | ~50/项目 | 未变更的项目 |
| 哈希检查 | ~10/项目 | 每个项目 |
节省示例:
- 10 个项目,每天有 2 个项目发生变更
- 完整扫描:10 × 1,000 = 10,000 个 Token
- 使用缓存:2 × 1,000 + 8 × 50 = 2,400 个 Token
- 节省:76%
每日扫描流程
/ceo (daily first run)
│
├─ Read cached config
│
├─ For each known project:
│ └─ git rev-parse HEAD → compare with cache
│ ├─ Match → use cached scores
│ └─ Mismatch → queue for rescan
│
├─ Check for new projects:
│ └─ find <code_root> -name "package.json" ...
│ └─ Compare paths with cached projects
│ └─ New path → queue for full scan
│
├─ Rescan only queued projects
│
└─ Display dashboard (all projects, mixed cache + fresh)
强制完整重新扫描
使用 /ceo scan --force 绕过缓存并重新扫描所有项目。
命令:/ceo config
配置评分权重和设置。
使用 AskUserQuestion 呈现选项:
CEO Dashboard Configuration
Current weights:
- Complexity: 30%
- ROI: 40%
- Business: 30%
What would you like to configure?
[1] Change scoring weights
[2] Change codebase path
[3] Configure skip patterns
[4] Reset to defaults
命令:/ceo <name>
查看特定项目的详细信息。
- 查找项目,支持按名称部分匹配
- 显示详细指标:
- 所有评分明细
- 技术栈
- 最近的提交
- 待处理的待办事项
- 文件统计信息
命令:/ceo analyze <name>
对特定项目进行深入的业务分析。这是 CEO Skill 的核心价值。
-
查找项目
-
收集项目上下文:
- 阅读 README.md,了解项目描述
- 检查 package.json/pyproject.toml 中的项目元数据
- 扫描现有文档
- 查找
.claude/dashboard.json中的手动业务备注
-
如果上下文不足,使用 AskUserQuestion 收集信息:
To provide a thorough business analysis, I need more context: 1. What problem does this project solve? [Open text input] 2. Who is your target user? [ ] Developers/Technical users [ ] Small business owners [ ] Enterprise companies [ ] Consumers (B2C) [ ] Other... 3. How do you plan to monetize? [ ] Subscription (SaaS) [ ] One-time purchase [ ] Freemium + Premium [ ] Open source + Services [ ] Not sure yet -
生成业务分析报告:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
BUSINESS ANALYSIS: SAIFURI
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 MARKET ASSESSMENT
────────────────────────────────────────────────────────────────────
Market Size: Medium-Large (Crypto wallet users ~50M globally)
Problem Urgency: 8/10 - Managing crypto is complex and risky
Timing: Good - Web3 recovering, smart wallets emerging
Competition: High - But differentiation through AI is unique
👤 TARGET AUDIENCE
────────────────────────────────────────────────────────────────────
Primary Persona: Crypto-curious developers who find existing
wallets too complex or risky
Pain Level: 7/10
Willingness to Pay: Medium ($10-30/month for premium features)
Where to Find: Twitter/X, Discord, Hacker News, Reddit r/ethereum
💰 MONETIZATION PATH
────────────────────────────────────────────────────────────────────
Recommended Model: Freemium SaaS
- Free: Basic wallet, limited AI queries
- Pro ($19/mo): Unlimited AI, advanced simulations
- Enterprise: Custom deployment, audit features
🚀 GO-TO-MARKET
────────────────────────────────────────────────────────────────────
Launch Difficulty: Medium
First 100 Users: Crypto Twitter, Show HN, r/ethereum
CAC Estimate: Low-Medium (~$15-25)
Virality: Medium - Shareable transaction insights
Content Angle: "The AI-powered wallet that explains what
you're signing before you sign it"
⚠️ RISKS & CONCERNS
────────────────────────────────────────────────────────────────────
- Regulatory uncertainty in crypto space
- Security is critical - one breach = dead product
- AI hallucinations could cost users money
✅ VERDICT
────────────────────────────────────────────────────────────────────
Investment Score: 7.5/10
Recommendation: PURSUE - Strong differentiation, growing market
Next Steps:
1. Build MVP with 3 core features
2. Launch on crypto Twitter with demo video
3. Get 10 beta users for feedback before public launch
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- 将分析结果保存到项目的
.claude/dashboard.json,以供日后参考
命令:/ceo todo <name>
管理项目待办事项。
- 查找项目
- 显示当前待办事项
- 提供选项:
- 添加新待办事项
- 将待办事项标记为已完成
- 移除待办事项
- 设置优先级
命令:/ceo jump <name>
生成用于打开项目的终端命令。
- 查找项目
- 生成命令:
To jump to <project-name>, run:
cd <project-path> && claude
Command copied to clipboard (press ⌘V to paste)
- 复制到剪贴板(如果 pbcopy 可用):
echo "cd <project-path> && claude" | pbcopy
输出格式
每日仪表板
╔════════════════════════════════════════════════════════════════════╗
║ CEO Dashboard - 2026-01-20 ║
╚════════════════════════════════════════════════════════════════════╝
# │ Project │ Type │ Score │ ROI │ Biz │ Pending │ Active
────┼──────────────┼────────┼───────┼─────┼─────┼─────────┼─────────
1 │ saifuri │ Node │ 84.5 │ 85 │ 90 │ 3 │ 2h ago
2 │ kimeeru │ Node │ 72.3 │ 78 │ 80 │ 1 │ 1d ago
3 │ ml-pipeline │ Python │ 68.1 │ 65 │ 75 │ 2 │ 3d ago
4 │ api-gateway │ Go │ 55.2 │ 50 │ 60 │ 0 │ 5d ago
5 │ livelist │ Node │ 45.0 │ 40 │ 55 │ 1 │ 1w ago
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#1 SAIFURI Score: 84.5
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Create your programmable blockchain wallet with natural language
Pending Tasks (3):
[HIGH] Implement contract simulation execution
[MED] Complete E2E test suite
[LOW] Optimize wallet creation UX
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#2 KIMEERU Score: 72.3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
...
Quick Jump: /ceo jump <name>
Commands: [scan] Rescan | [config] Settings | [todo <name>] Manage tasks
扫描结果
Scan complete: ~/Codes
Found projects (N):
✓ saifuri (Node.js) - 156 files, 47 deps
✓ kimeeru (Node.js) - 89 files, 32 deps
✓ ml-pipeline (Python) - 45 files, 23 deps
+ new-project (Go) - newly discovered
Skipped:
- .next, node_modules, dist (build artifacts)
- research-folder (no project files)
Config updated: ~/.claude/ceo-dashboard.json
项目详情
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SAIFURI Score: 84.5
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Path: ~/Codes/saifuri
Type: Node.js (Next.js)
Score Breakdown:
Complexity: 78/100 (weighted: 23.4)
ROI: 85/100 (weighted: 34.0)
Business: 90/100 (weighted: 27.0)
─────────────────────────────
Final: 84.4
Metrics:
Files: 156 (ts: 120, tsx: 36)
Dependencies: 47
Last commit: 2h ago
Commits (7d): 24
Tech Stack:
[next] [drizzle] [viem] [tailwind]
Business Features Detected:
✓ Payment integration (stripe)
✓ User authentication (jwt)
✓ Database (drizzle)
✓ Deployment config (vercel.json)
Pending Tasks (3):
[HIGH] Implement contract simulation execution
[MED] Complete E2E test suite
[LOW] Optimize wallet creation UX
Quick Jump: cd ~/Codes/saifuri && claude
与其他技能集成
- port-allocator:复用项目扫描逻辑,显示端口信息
- share-skill:复用配置文件模式
备注
- 每日自动触发——每天首次调用
/ceo时执行完整扫描 - 追加模式——绝不覆盖用户现有配置,始终进行合并
- 名称部分匹配——项目名称支持部分匹配
- 项目级覆盖——在项目中使用
.claude/dashboard.json设置自定义选项 - 剪贴板支持——在 macOS 上自动复制跳转命令
API 成本跟踪
跟踪所有项目中外部 API 服务的预估月度成本。
COO 角色设定
分析 API 成本时,你要以以下角色的身份进行分析:
一位经验丰富的首席运营官(COO),具备以下条件:
- 拥有 15 年以上运营成本优化经验
- 曾在多家公司成功将运营支出降低 30-50%
- 在云基础设施成本管理方面具备深厚的专业知识
- 善于发现浪费性支出和冗余服务
- 拥有与主要供应商谈判企业合同的经验
你的分析思路:
- 每一笔支出都应带来可衡量的投资回报
- 付费前应尽可能利用免费套餐和开源替代方案
- 不同项目中的冗余服务是整合的机会
- AI 成本是新的“云账单”——需要同等严格地审视
- 始终要问:“这项服务必不可少吗?能否自托管?能否批量发送请求?”
对于每个项目,你必须评估:
- 成本合理性 - 这个支出水平是否符合项目所处阶段和规模?
- 优化机会 - 提出具体、可执行的降本建议
各项目阶段的成本基准:
| 阶段 | 每月 API 预算 | 指导建议 |
|---|---|---|
| 个人项目 / 兴趣项目 | $0-20 | 应只使用免费套餐 |
| MVP / 初创早期 | $20-100 | 尽量减少付费服务,验证后再扩展 |
| 成长阶段 | $100-500 | 添加新服务前先进行优化 |
| 生产环境 / 规模化 | $500+ | 需要进行成本监控并设置警报 |
定价数据库
API 定价数据存储在 ~/.claude/api-pricing.json 中,结构如下:
{
"services": {
"anthropic": {
"name": "Anthropic (Claude AI)",
"category": "ai",
"env_patterns": ["ANTHROPIC_API_KEY", "CLAUDE_API_KEY"],
"estimated_monthly": { "low": 10, "medium": 100, "high": 1500 }
}
}
}
支持的服务
| 服务 | 类别 | 检测方法 | 预计每月费用(低/中/高) |
|---|---|---|---|
| Anthropic (Claude) | AI | ANTHROPIC_API_KEY | $10 / $100 / $1,500 |
| OpenAI | AI | OPENAI_API_KEY | $5 / $50 / $500 |
| Supabase | 数据库 | SUPABASE_URL | $0 / $25 / $599 |
| Alchemy | 区块链 | ALCHEMY_API_KEY | $0 / $49 / $199 |
| Pimlico | 区块链 | PIMLICO_API_KEY | $0 / $99 / $99 |
| Mapbox | 地图 | MAPBOX_TOKEN | $0 / $20 / $200 |
| OpenWeather | 天气 | OPENWEATHER_API_KEY | $0 / $40 / $180 |
| Formspree | 表单 | FORMSPREE_ID | $0 / $10 / $50 |
| Cloudflare Workers | 无服务器 | wrangler.toml | $0 / $5 / $25 |
| Cloudflare D1 | 数据库 | wrangler.toml 中的 d1_databases | $0 / $5 / $20 |
| WalletConnect | 区块链 | WALLETCONNECT_PROJECT_ID | $0 / $0 / $0 |
| Stripe | 支付 | STRIPE_SECRET_KEY | $0 / $50 / $500 |
| Resend | 电子邮件 | RESEND_API_KEY | $0 / $20 / $100 |
| Vercel | 托管 | vercel.json | $0 / $20 / $100 |
| Sentry | 监控 | SENTRY_DSN | $0 / $26 / $80 |
检测算法
- 扫描
.env.example文件 - 仅提取变量名(绝不读取实际密钥) - 匹配模式 - 将变量名与定价数据库中的
env_patterns进行比对 - 检查配置文件 - 通过
wrangler.toml检测 Cloudflare 服务,通过vercel.json检测 Vercel - 计算估算费用 - 汇总所有已检测服务的低/中/高估算费用
# Find env example files (safe - no secrets)
find <project> -name ".env.example" -not -path "*/node_modules/*"
# Extract variable names only (left side of =)
grep -E "^[A-Z][A-Z0-9_]+=" .env.example | cut -d'=' -f1
# Detect Cloudflare D1
grep -q "d1_databases" wrangler.toml && echo "cloudflare_d1"
隐私保护
重要:此功能绝不会读取实际 API 密钥或机密信息。
- 仅扫描
.env.example(模板文件,不扫描实际.env) - 仅提取变量名(
=之前的内容) - 所有估算均基于公开的定价信息
- 用户可以手动用实际费用覆盖估算值
缓存结构
ceo-dashboard.json 中的每个项目都包含 api_costs:
{
"projects": {
"saifuri": {
"api_costs": {
"last_scan": "2026-01-20T10:30:00Z",
"detected_services": [
{ "service_id": "anthropic", "env_var": "ANTHROPIC_API_KEY" },
{ "service_id": "supabase", "env_var": "SUPABASE_URL" }
],
"manual_overrides": {
"anthropic": 150
},
"total_estimated": { "low": 10, "medium": 248, "high": 1699 }
}
}
}
}
命令:/ceo costs
显示所有项目的 API 成本概览。
输出格式:
╔════════════════════════════════════════════════════════════════════╗
║ API Cost Overview - 2026-01-20 ║
╚════════════════════════════════════════════════════════════════════╝
Project │ Services │ Est. Monthly (Low/Med/High) │ Top Cost
──────────────┼──────────┼──────────────────────────────┼───────────
saifuri │ 4 │ $10 / $248 / $1,699 │ Anthropic
m0rphic │ 4 │ $0 / $135 / $1,550 │ Anthropic
menkr │ 4 │ $0 / $45 / $380 │ Mapbox
──────────────┼──────────┼──────────────────────────────┼───────────
TOTAL │ 12 │ $10 / $428 / $3,629 │
💡 AI services account for 85% of estimated costs
Cost breakdown by category:
AI: $300/mo (70%)
Blockchain: $100/mo (23%)
Database: $25/mo (6%)
Other: $3/mo (1%)
命令:/ceo costs <name>
针对特定项目进行详细的成本分析和 COO 评估。
输出格式:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
API COSTS: SAIFURI
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Last scanned: 2026-01-20 10:30
Detected Services (4):
──────────────────────────────────────────────────────────────────
Service │ Env Variable │ Low │ Medium │ High
──────────────────────────────────────────────────────────────────
Anthropic │ ANTHROPIC_API_KEY │ $10 │ $100 │ $1,500
Supabase │ SUPABASE_URL │ $0 │ $25 │ $599
Alchemy │ ALCHEMY_API_KEY │ $0 │ $49 │ $199
Pimlico │ PIMLICO_API_KEY │ $0 │ $99 │ $99
──────────────────────────────────────────────────────────────────
TOTAL │ │ $10 │ $273 │ $2,397
Manual Overrides:
None set (use /ceo costs set saifuri <service> <amount>)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 COO EVALUATION
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Project Stage: MVP / Early Startup
Budget Benchmark: $20-100/mo
Current Estimate: ~$273/mo (Medium)
📊 COST ASSESSMENT: ⚠️ ABOVE NORMAL
For an MVP-stage project, $273/mo is on the higher side.
The AI service costs alone may eat into your runway.
💡 OPTIMIZATION RECOMMENDATIONS:
──────────────────────────────────────────────────────────────────
1. [HIGH IMPACT] Anthropic API - $100/mo
→ Use Haiku ($0.25/1M) instead of Sonnet ($3/1M) for routine tasks
→ Implement response caching for repeated queries
→ Batch similar requests to reduce API calls
→ Potential savings: 40-60% ($40-60/mo)
2. [MEDIUM IMPACT] Pimlico - $99/mo
→ Evaluate if bundler service is needed at MVP stage
→ Consider using free tier limits more efficiently
→ Potential savings: $99/mo if deferred
3. [LOW IMPACT] Alchemy - $49/mo
→ Free tier offers 300M compute units/mo
→ Ensure you're not duplicating RPC calls
→ Consider using public RPC for non-critical reads
4. [OK] Supabase - $25/mo
→ Pro plan is reasonable for production database
→ Monitor row counts to stay within limits
──────────────────────────────────────────────────────────────────
📉 TOTAL POTENTIAL SAVINGS: $140-160/mo (51-59%)
──────────────────────────────────────────────────────────────────
命令:/ceo costs refresh
强制重新扫描所有项目中的所有 API 服务,并绕过缓存。
命令:/ceo costs set <project> <service> <amount>
手动设置某项服务的实际月度费用。
/ceo costs set saifuri anthropic 150
✓ Set saifuri.anthropic actual cost to $150/mo
(Previous estimate: $100/mo medium tier)
仪表板集成
主仪表板包含一个 Est.Cost 列:
# │ Project │ Score │ APIs │ Est.Cost │ Active
────┼──────────────┼───────┼──────┼──────────┼─────────
1 │ saifuri │ 92.3 │ 4 │ ~$248/mo │ 2h ago
2 │ kimeeru │ 78.0 │ 3 │ ~$10/mo │ 1d ago
3 │ menkr │ 65.5 │ 4 │ ~$45/mo │ 3d ago
除非设置了手动覆盖值,否则显示的成本为“中等”估算值。
营销更新日志生成器
根据近期 git 提交生成以用户为中心的营销内容。将技术变更转化为能引起用户共鸣的精彩更新。
CMO 角色设定
生成更新日志内容时,你将采用以下角色:
一位出色的首席营销官(CMO),具备以下特质:
- 拥有 10 年以上科技产品营销经验
- 精通将技术功能转化为用户收益
- 拥有打造热门产品发布和建设社区的成功经验
- 对如何让用户感到兴奋并积极参与有敏锐的直觉
- 擅长打造推动用户采用和留存的叙事
你的沟通思维:
- 技术提交说明“做了什么”;你要传达“这对用户为何重要”
- 每项变更都是展示价值和关怀用户的机会
- 强调收益,而非功能:“更快” → “让你更早回到工作中”
- 运用情感触发点:节省时间、减少挫败感、增强信心
- 营造 FOMO:“你现在可以……”暗示其他人已经从中受益
- 真诚而非推销:用户能立刻察觉虚假的热情
不同语言的语气指南:
| 语言 | 语气 | 风格 |
|---|---|---|
| English | 友好、自信、简洁 | 懂技术但平易近人 |
| Chinese | 温暖、专业、尊重 | 正式但亲切,避免过度营销感 |
命令:/ceo changelog
分析近期提交并生成营销内容。
选项:
--lang=en|zh- 输出语言(默认:en)--days=N- 分析天数(默认:1,最多:7)--project=<name>- 仅分析指定项目--format=email|twitter|both- 输出格式(默认:both)
执行步骤
步骤 1:收集提交
# For each project in ceo-dashboard.json
cd <project_path>
# Get commits from last 24 hours (or N days)
git log --since="24 hours ago" --pretty=format:"%H|%s|%an|%ai" --no-merges
# Get file change statistics
git log --since="24 hours ago" --stat --no-merges
步骤 2:对变更分类
使用常规提交模式和内容分析,按类型对每项提交进行分类:
| 类别 | 检测模式 | 面向用户的名称 |
|---|---|---|
| 功能 | feat:, add, new, implement | 新功能 |
| 修复 | fix:, bug, patch, resolve | 错误修复 |
| 性能 | perf:, optimize, faster, speed | 性能改进 |
| 用户体验 | ui:, ux:, style, design | 用户体验 |
| 安全 | security:, auth, encrypt, protect | 安全更新 |
| 文档 | docs:, readme, guide | 文档 |
| 重构 | refactor:, clean, restructure | 幕后改进 |
汇总规则:
- 合并不同项目中的相似变更
- 优先展示面向用户的变更,而非内部重构
- 统计各类别的提交数量,作为强调权重的依据
步骤 3:转化为用户收益
对每个变更类别应用 CMO 转化方式:
| 技术变更 | 用户收益 |
|---|---|
| “添加缓存层” | “页面现在加载速度提升 2 倍” |
| “修复身份验证令牌刷新” | “不再意外退出登录” |
| “实现深色模式” | “夜间使用更舒适” |
| “重构数据库查询” | “搜索结果即时呈现” |
| “添加速率限制” | “高峰时段服务更加可靠” |
转化提示词模板:
Given this technical commit: "<commit_message>"
In project: <project_name> (<project_description>)
Transform into a user-focused benefit statement:
- Focus on what the user gains
- Use active voice
- Be specific but concise
- Avoid technical jargon
步骤 4:生成邮件模板
输出符合 m0rphic 样式模式且兼容 React Email 的模板。
邮件结构:
// Resend-compatible React Email template
import {
Body, Button, Container, Head, Heading, Hr,
Html, Link, Preview, Section, Text,
} from "@react-email/components";
interface ChangelogEmailProps {
locale: "en" | "zh";
dateRange: string;
changes: {
category: string;
items: { title: string; description: string; project: string }[];
}[];
ctaUrl: string;
totalCommits: number;
projectCount: number;
}
配色方案(深色主题):
const colors = {
background: "#0a0a0a",
container: "#141414",
card: "#1a1a1a",
accent: "#8b5cf6", // Purple
success: "#22c55e", // Green
text: {
primary: "#ffffff",
secondary: "#a3a3a3",
muted: "#737373",
subtle: "#525252",
},
border: "#262626",
};
邮件翻译:
const translations = {
en: {
preview: (count: number) => `[Your Product] Weekly Update - ${count} improvements shipped`,
title: "What's New This Week",
greeting: "Hey there,",
intro: (commits: number, projects: number) =>
`Our team has been busy! Here's what we shipped across ${projects} project${projects > 1 ? 's' : ''}:`,
newFeatures: "New Features",
bugFixes: "Bug Fixes",
improvements: "Improvements",
security: "Security Updates",
cta: "Try It Now",
footer: "Thanks for being part of our journey!",
},
zh: {
preview: (count: number) => `[产品名] 本周更新 - ${count} 项改进已上线`,
title: "最新动态",
greeting: "你好,",
intro: (commits: number, projects: number) =>
`我们的团队一直在努力!以下是 ${projects} 个项目的最新进展:`,
newFeatures: "新功能",
bugFixes: "问题修复",
improvements: "体验优化",
security: "安全更新",
cta: "立即体验",
footer: "感谢你的支持与信任!",
},
};
步骤 5:生成 Twitter/X 推文串
创建 Twitter 推文串格式(单个推文串,包含多条推文)。
推文串结构:
Tweet 1 (Hook - max 280 chars):
🚀 [Product] Update Thread
This week we shipped [N] updates to make your experience even better.
Here's what's new 👇
---
Tweet 2-N (Changes - max 280 chars each):
✨ [Category]: [Benefit Statement]
[Brief explanation of why this matters]
---
Final Tweet (CTA - max 280 chars):
That's a wrap! 🎉
Try these updates now: [link]
What feature would you like to see next? Let us know in the replies!
推文串规则:
- 每个推文串最多包含 5-7 条推文
- 每条推文不得超过 280 个字符
- 策略性地使用表情符号(不要过度使用)
- 第一条推文是引子,必须吸引注意力
- 最后一条推文包含 CTA 和互动提示
- 中间的推文按相关变更分组
表情符号指南:
| 类别 | 表情符号 |
|---|---|
| 功能 | ✨ |
| 修复 | 🔧 |
| 性能 | ⚡ |
| 安全 | 🔒 |
| UX | 💎 |
| 通用 | 🚀 |
输出格式
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MARKETING CHANGELOG - 2026-01-23
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 ANALYSIS SUMMARY
────────────────────────────────────────────────────────────────────
Period: Last 24 hours
Projects: 3 (saifuri, kimeeru, m0rphic)
Total Commits: 12
By Category:
✨ Features: 4 commits
🔧 Fixes: 5 commits
⚡ Performance: 2 commits
💎 UX: 1 commit
📧 EMAIL TEMPLATE (Resend-compatible React Email)
────────────────────────────────────────────────────────────────────
[Generated TSX code here - copy-paste ready]
🐦 TWITTER/X THREAD
────────────────────────────────────────────────────────────────────
Thread 1/5:
🚀 Weekly Update Thread
This week we shipped 12 updates across 3 products.
Here's what's new 👇
---
Thread 2/5:
✨ New: Smart notifications
Get notified about what matters, when it matters.
No more notification fatigue.
---
[... more tweets ...]
---
Thread 5/5:
That's a wrap! 🎉
Try these updates: https://yourproduct.com
What feature would you like next? Reply below!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
完整电子邮件模板示例
import {
Body,
Button,
Container,
Head,
Heading,
Hr,
Html,
Link,
Preview,
Section,
Text,
} from "@react-email/components";
const translations = {
en: {
preview: (count: number) =>
`We shipped ${count} updates to make your experience better`,
title: "What's New",
greeting: "Hey there,",
intro: (commits: number, projects: number) =>
`Our team has been busy! Here are ${commits} updates we shipped this week:`,
newFeatures: "New Features",
bugFixes: "Bug Fixes",
improvements: "Improvements",
cta: "Try It Now",
footerText: "Thanks for being part of our journey!",
unsubscribe: "Unsubscribe from updates",
},
zh: {
preview: (count: number) => `我们发布了 ${count} 项更新,让你的体验更好`,
title: "最新动态",
greeting: "你好,",
intro: (commits: number, projects: number) =>
`我们的团队一直在努力!以下是本周发布的 ${commits} 项更新:`,
newFeatures: "新功能",
bugFixes: "问题修复",
improvements: "体验优化",
cta: "立即体验",
footerText: "感谢你与我们同行!",
unsubscribe: "退订更新通知",
},
} as const;
type Locale = keyof typeof translations;
interface ChangeItem {
title: string;
description: string;
project?: string;
}
interface ChangeCategory {
key: string;
emoji: string;
items: ChangeItem[];
}
interface ChangelogEmailProps {
locale?: Locale;
productName: string;
productUrl: string;
dateRange: string;
totalCommits: number;
projectCount: number;
changes: ChangeCategory[];
unsubscribeUrl?: string;
}
export function ChangelogEmail({
locale = "en",
productName,
productUrl,
dateRange,
totalCommits,
projectCount,
changes,
unsubscribeUrl,
}: ChangelogEmailProps) {
const t = translations[locale] || translations.en;
const categoryNames: Record<string, Record<Locale, string>> = {
features: { en: "New Features", zh: "新功能" },
fixes: { en: "Bug Fixes", zh: "问题修复" },
improvements: { en: "Improvements", zh: "体验优化" },
security: { en: "Security Updates", zh: "安全更新" },
performance: { en: "Performance", zh: "性能优化" },
};
return (
<Html>
<Head />
<Preview>{t.preview(totalCommits)}</Preview>
<Body style={main}>
<Container style={container}>
{/* Logo/Brand */}
<Section style={logoSection}>
<Text style={logoText}>{productName}</Text>
</Section>
{/* Title */}
<Heading style={heading}>{t.title}</Heading>
<Text style={dateText}>{dateRange}</Text>
{/* Greeting & Intro */}
<Text style={paragraph}>{t.greeting}</Text>
<Text style={paragraph}>
{t.intro(totalCommits, projectCount)}
</Text>
{/* Changes by Category */}
{changes.map((category, i) => (
<Section key={i} style={categorySection}>
<Text style={categoryTitle}>
{category.emoji} {categoryNames[category.key]?.[locale] || category.key}
</Text>
{category.items.map((item, j) => (
<Section key={j} style={changeCard}>
<Text style={changeTitle}>{item.title}</Text>
<Text style={changeDescription}>{item.description}</Text>
{item.project && (
<Text style={projectTag}>{item.project}</Text>
)}
</Section>
))}
</Section>
))}
{/* CTA Button */}
<Section style={buttonContainer}>
<Button style={button} href={productUrl}>
{t.cta}
</Button>
</Section>
<Hr style={hr} />
{/* Footer */}
<Text style={footer}>{t.footerText}</Text>
{unsubscribeUrl && (
<Text style={unsubscribeText}>
<Link style={unsubscribeLink} href={unsubscribeUrl}>
{t.unsubscribe}
</Link>
</Text>
)}
</Container>
</Body>
</Html>
);
}
// Styles - Dark theme matching m0rphic
const main = {
backgroundColor: "#0a0a0a",
fontFamily:
'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Ubuntu, sans-serif',
padding: "40px 0",
};
const container = {
backgroundColor: "#141414",
margin: "0 auto",
padding: "40px 20px",
maxWidth: "560px",
borderRadius: "12px",
};
const logoSection = {
textAlign: "center" as const,
marginBottom: "24px",
};
const logoText = {
fontSize: "20px",
fontWeight: "600",
color: "#ffffff",
margin: "0",
};
const heading = {
color: "#ffffff",
fontSize: "24px",
fontWeight: "600",
textAlign: "center" as const,
margin: "0 0 8px",
};
const dateText = {
color: "#737373",
fontSize: "14px",
textAlign: "center" as const,
margin: "0 0 24px",
};
const paragraph = {
color: "#a3a3a3",
fontSize: "15px",
lineHeight: "24px",
margin: "16px 0",
};
const categorySection = {
margin: "32px 0",
};
const categoryTitle = {
color: "#ffffff",
fontSize: "16px",
fontWeight: "600",
margin: "0 0 16px",
borderBottom: "1px solid #262626",
paddingBottom: "8px",
};
const changeCard = {
backgroundColor: "#1a1a1a",
borderRadius: "8px",
padding: "16px",
marginBottom: "12px",
borderLeft: "3px solid #8b5cf6",
};
const changeTitle = {
color: "#ffffff",
fontSize: "15px",
fontWeight: "600",
margin: "0 0 8px",
};
const changeDescription = {
color: "#a3a3a3",
fontSize: "14px",
lineHeight: "20px",
margin: "0",
};
const projectTag = {
color: "#8b5cf6",
fontSize: "12px",
marginTop: "8px",
marginBottom: "0",
};
const buttonContainer = {
textAlign: "center" as const,
margin: "32px 0",
};
const button = {
backgroundColor: "#8b5cf6",
borderRadius: "8px",
color: "#ffffff",
fontSize: "15px",
fontWeight: "600",
textDecoration: "none",
textAlign: "center" as const,
display: "inline-block",
padding: "12px 24px",
};
const hr = {
borderColor: "#262626",
margin: "32px 0",
};
const footer = {
color: "#525252",
fontSize: "12px",
textAlign: "center" as const,
margin: "0",
};
const unsubscribeText = {
textAlign: "center" as const,
marginTop: "16px",
};
const unsubscribeLink = {
color: "#525252",
fontSize: "12px",
textDecoration: "underline",
};
export default ChangelogEmail;
Twitter 推文串生成器模板
interface TwitterThread {
tweets: string[];
totalLength: number;
warnings: string[];
}
function generateTwitterThread(
changes: ChangeCategory[],
options: {
productName: string;
productUrl: string;
locale: "en" | "zh";
totalCommits: number;
}
): TwitterThread {
const { productName, productUrl, locale, totalCommits } = options;
const tweets: string[] = [];
const warnings: string[] = [];
// Tweet 1: Hook
const hook = locale === "en"
? `🚀 ${productName} Update Thread\n\nThis week we shipped ${totalCommits} updates to make your experience even better.\n\nHere's what's new 👇`
: `🚀 ${productName} 更新速报\n\n本周我们发布了 ${totalCommits} 项更新,让你的体验更好。\n\n一起来看看 👇`;
tweets.push(hook);
// Middle tweets: Changes (group by category)
const emojiMap: Record<string, string> = {
features: "✨",
fixes: "🔧",
performance: "⚡",
security: "🔒",
improvements: "💎",
};
const categoryLabels: Record<string, Record<string, string>> = {
features: { en: "New", zh: "新功能" },
fixes: { en: "Fixed", zh: "修复" },
performance: { en: "Faster", zh: "更快" },
security: { en: "Secured", zh: "安全" },
improvements: { en: "Improved", zh: "优化" },
};
for (const category of changes) {
if (category.items.length === 0) continue;
const emoji = emojiMap[category.key] || "📦";
const label = categoryLabels[category.key]?.[locale] || category.key;
// Combine items into one tweet per category (if possible)
const itemList = category.items
.slice(0, 3) // Max 3 items per category
.map((item) => `• ${item.title}`)
.join("\n");
const tweet = `${emoji} ${label}:\n\n${itemList}`;
if (tweet.length > 280) {
warnings.push(`Category "${category.key}" tweet exceeds 280 chars`);
}
tweets.push(tweet);
}
// Final tweet: CTA
const cta = locale === "en"
? `That's a wrap! 🎉\n\nTry these updates now:\n${productUrl}\n\nWhat feature would you like to see next? Let us know! 💬`
: `以上就是本周的更新!🎉\n\n立即体验:\n${productUrl}\n\n还想要什么功能?评论区告诉我们!💬`;
tweets.push(cta);
return {
tweets,
totalLength: tweets.reduce((sum, t) => sum + t.length, 0),
warnings,
};
}
使用示例
# Generate changelog in English (default)
/ceo changelog
# Generate changelog in Chinese
/ceo changelog --lang=zh
# Analyze last 3 days
/ceo changelog --days=3
# Analyze specific project only
/ceo changelog --project=saifuri
# Email only (no Twitter)
/ceo changelog --format=email
# Twitter only (no email)
/ceo changelog --format=twitter
缓存结构
将变更日志历史添加到 ceo-dashboard.json:
{
"changelog_history": [
{
"date": "2026-01-23",
"period_days": 1,
"projects": ["saifuri", "kimeeru"],
"total_commits": 12,
"categories": {
"features": 4,
"fixes": 5,
"performance": 2,
"ux": 1
},
"output_lang": "en"
}
]
}
触发语
可触发变更日志生成的自然语言短语:
- “根据最近的提交生成营销更新”
- “撰写变更日志邮件”
- “为近期变更创建 Twitter 推文串”
- “我们本周发布了什么?”
- “为用户总结近期开发进展”
- “生成发布说明”
- “撰写更新简报”