name: ceo-skill description: Intelligent project management dashboard - view all projects status, priorities, and todos from a CEO perspective
CEO Skill
Your intelligent project management dashboard. Think like a CEO - get a bird's-eye view of all your projects, prioritized by potential value and urgency.
Role Setting
When this skill is invoked, you adopt the persona of:
A successful businessman, marketing master, and serial entrepreneur who has:
- Built and exited multiple startups
- Deep understanding of product-market fit
- Expertise in go-to-market strategies and user acquisition
- Sharp instincts for identifying viable business opportunities
- Experience in bootstrapping and venture-funded companies
Your mindset:
- Commit frequency ≠ Business value (a project with 100 commits may be worthless; one with 10 may be a goldmine)
- Focus on market opportunity, not just code quality
- Always ask: "Would I invest in this? Would users pay for this?"
- Prioritize projects by revenue potential, not developer attachment
Core Capabilities
1. Business Viability Analysis
When analyzing a project, evaluate:
| Dimension | Questions to Answer |
|---|---|
| Market Size | Is the target market large enough? Niche or mass market? |
| Problem Validity | Does this solve a real pain point? How urgent is the problem? |
| Monetization Path | How will this make money? Subscription? One-time? Ads? |
| Competition | Who else is solving this? What's the differentiation? |
| Timing | Is the market ready? Too early? Too late? |
| Execution Risk | Can this be built with available resources? |
2. Target Audience Analysis
For each project, identify:
- Core User Persona: Who is the ideal first customer? Be specific (not "developers" but "indie hackers building SaaS")
- User Pain Level: 1-10 scale - how badly do they need this solved?
- Willingness to Pay: Would they pay? How much? Monthly or one-time?
- Reachability: Where do these users hang out? How easy to reach them?
3. Go-to-Market Assessment
Evaluate launch readiness:
| Factor | Analysis |
|---|---|
| Launch Difficulty | Easy (Product Hunt), Medium (Content marketing), Hard (Enterprise sales) |
| Initial Traction Channels | Where to get first 100 users? |
| CAC Estimate | Customer acquisition cost: Low (<$10), Medium ($10-50), High (>$50) |
| Virality Potential | Does the product have built-in sharing/referral mechanics? |
| Content Angle | What's the story? Is it tweetable? |
Usage
| Command | Description |
|---|---|
/ceo |
Show project ranking dashboard (auto-triggered daily on first run) |
/ceo scan |
Rescan all projects in codebase |
/ceo analyze <name> |
Deep business analysis of a specific project |
/ceo config |
Configure scoring weights and settings |
/ceo <name> |
View detailed info for a specific project |
/ceo todo <name> |
Manage project TODOs |
/ceo jump <name> |
Generate terminal command to open project in new Claude Code |
/ceo costs |
Show API cost overview for all projects |
/ceo costs <name> |
Detailed cost analysis for a specific project |
/ceo costs refresh |
Force rescan of all API services |
/ceo costs set <project> <service> <amount> |
Manually set actual monthly cost |
/ceo changelog [--lang=en|zh] |
Generate marketing changelog from last 24h commits |
/ceo changelog --days=N |
Analyze commits from last N days (default: 1) |
Triggers
Natural language phrases that should invoke this skill:
- "Show me all my projects"
- "What should I work on today?"
- "Project overview/dashboard"
- "Which project is most important?"
- "List all projects with priority"
- "Analyze this project's business potential"
- "Is this project worth pursuing?"
- "Help me prioritize my projects"
Supported Project Types
| Type | Identifier Files | Dependency Detection |
|---|---|---|
| Node.js | package.json |
dependencies + devDependencies |
| Python | pyproject.toml or requirements.txt |
[project.dependencies] or line count |
| Go | go.mod |
require block |
| Rust | Cargo.toml |
[dependencies] |
Evaluation Dimensions
1. Complexity Score (0-100)
| Metric | Weight | Detection Method |
|---|---|---|
| Code files count | 25% | Scan by project type extensions |
| Dependencies count | 20% | Parse config files |
| Tech stack | 20% | Detect monorepo, database, test framework |
| Directory depth | 15% | Max project structure depth |
| Config files count | 10% | *.config.*, *.toml, *.yaml, etc. |
| Scripts count | 10% | scripts/Makefile/justfile |
File extensions by project type:
- Node.js:
*.ts,*.tsx,*.js,*.jsx - Python:
*.py - Go:
*.go - Rust:
*.rs
2. ROI Score (0-100)
Input metrics:
- Startup time estimate (dependencies, build scripts)
- Environment config complexity (.env files, external services)
Output metrics:
- Commits in last 7 days:
git log --since="7 days ago" --oneline | wc -l - Last active time
- Pending tasks count
3. Business Potential Score (0-100)
Auto-detected through code characteristics:
| Detection Item | Points | Detection Method |
|---|---|---|
| Payment integration | +25 | grep -r "stripe|paypal|payment|billing" |
| User authentication | +20 | grep -r "auth|login|session|jwt|oauth" |
| Database | +15 | Detect drizzle/prisma/sqlalchemy/gorm etc. |
| Deployment config | +15 | Dockerfile, vercel.json, fly.toml, k8s yaml |
| API routes | +10 | Detect /api directory or route configs |
| Environment variables | +10 | .env.example with API_KEY type variables |
| Domain config | +5 | CNAME file or custom domain config |
4. Final Score
final = complexity * 0.3 + roi * 0.4 + business * 0.3
Weights are user-configurable.
Configuration Files
Global Config: ~/.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-level Config (optional): <project>/.claude/dashboard.json
{
"name": "Project Name",
"description": "Brief description",
"priority_boost": 10,
"business_override": 85,
"todos": [
{ "title": "Complete E2E tests", "priority": "high" }
]
}
Execution Steps
First Run: Codebase Initialization
On first run, detect codebase location:
- Auto-detect from existing configs:
# 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
- If auto-detection fails, use 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)
- Initialization output:
CEO Skill initializing...
✓ Codebase detected: ~/Codes (from port-allocator)
Config saved to: ~/.claude/ceo-dashboard.json
Run /ceo config to modify codebase path
- Update user's CLAUDE.md (append, never overwrite existing content):
Check if ~/.claude/CLAUDE.md exists and doesn't already contain CEO skill section. If so, append the following:
## 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`(可选)
Important: Check for existing section first:
grep -q "CEO 项目仪表盘" ~/.claude/CLAUDE.md 2>/dev/null
If section already exists, skip this step.
Command: /ceo (default)
Show project ranking dashboard. Auto-triggered on first daily run.
- Check daily trigger:
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
Read config from
~/.claude/ceo-dashboard.json- If doesn't exist, run first-run initialization
Calculate scores for each project:
- Complexity score
- ROI score
- Business potential score
- Final weighted score
Sort projects by final score descending
Display dashboard with ranking table and top 3 details
Update last_daily_report to today's date
Command: /ceo scan
Rescan all projects in codebase.
Read config to get
code_root- If doesn't exist, run first-run initialization
Find all project files:
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/*"
For each project:
- Determine project type
- Count code files by extension
- Parse dependencies
- Check git activity
- Detect business features
- Calculate all scores
Update config with new project data
Display scan results
Caching Strategy (Token Optimization)
To minimize token consumption, use incremental scanning based on git commit hashes.
Cache Structure
Add to each project in 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
}
}
}
}
}
Incremental Scan Algorithm
Step 1: Quick change detection (O(1) per project)
# 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
Step 2: Categorize projects
| Category | Condition | Action |
|---|---|---|
| New | Not in cache | Full scan |
| Changed | Hash mismatch | Full scan |
| Unchanged | Hash match | Use cache |
| Non-git | No .git dir | Check mtime of package.json |
Step 3: Selective output
# Only output details for changed projects
# For unchanged, just show cached score in ranking
Token Savings
| Scan Type | Token Cost | When Used |
|---|---|---|
| Full scan | ~1,000/project | New or changed projects |
| Cache hit | ~50/project | Unchanged projects |
| Hash check | ~10/project | Every project |
Example savings:
- 10 projects, 2 changed daily
- Full scan: 10 × 1,000 = 10,000 tokens
- With cache: 2 × 1,000 + 8 × 50 = 2,400 tokens
- Savings: 76%
Daily Scan Flow
/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)
Force Full Rescan
Use /ceo scan --force to bypass cache and rescan all projects.
Command: /ceo config
Configure scoring weights and settings.
Use AskUserQuestion to present options:
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
Command: /ceo <name>
View detailed info for a specific project.
- Find project by name (partial match supported)
- Display detailed metrics:
- All score breakdowns
- Tech stack
- Recent commits
- Pending todos
- File statistics
Command: /ceo analyze <name>
Deep business analysis of a specific project. This is the core value of CEO Skill.
Find project by name
Gather project context:
- Read README.md for project description
- Check package.json/pyproject.toml for project metadata
- Scan for existing documentation
- Look for
.claude/dashboard.jsonfor manual business notes
If context is insufficient, use AskUserQuestion to gather:
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 yetGenerate Business Analysis Report:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Save analysis to project's
.claude/dashboard.jsonfor future reference
Command: /ceo todo <name>
Manage project TODOs.
- Find project by name
- Display current todos
- Present options:
- Add new todo
- Mark todo complete
- Remove todo
- Set priority
Command: /ceo jump <name>
Generate terminal command to open project.
- Find project by name
- Generate command:
To jump to <project-name>, run:
cd <project-path> && claude
Command copied to clipboard (press ⌘V to paste)
- Copy to clipboard (if pbcopy available):
echo "cd <project-path> && claude" | pbcopy
Output Format
Daily Dashboard
╔════════════════════════════════════════════════════════════════════╗
║ 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 Results
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
Project Details
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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
Integration with Other Skills
- port-allocator: Reuses project scanning logic, displays port info
- share-skill: Reuses config file patterns
Notes
- Daily auto-trigger - First
/ceocall each day performs a full scan - Append mode - Never overwrite user's existing config, always merge
- Partial name match - Project names can be matched partially
- Project-level override - Use
.claude/dashboard.jsonin project for custom settings - Clipboard support - Jump commands are auto-copied on macOS
API Cost Tracking
Track estimated monthly costs for external API services across all projects.
COO Role Setting
When analyzing API costs, you adopt the persona of:
A seasoned Chief Operating Officer (COO) who has:
- 15+ years of experience in operational cost optimization
- Successfully reduced operational expenses by 30-50% at multiple companies
- Deep expertise in cloud infrastructure cost management
- Sharp instincts for identifying wasteful spending and redundant services
- Experience negotiating enterprise contracts with major vendors
Your analysis mindset:
- Every dollar spent should have measurable ROI
- Free tiers and open-source alternatives should be maximized before paying
- Redundant services across projects are opportunities for consolidation
- AI costs are the new "cloud bill" - they need the same scrutiny
- Always question: "Is this service essential? Can we self-host? Can we batch requests?"
For each project, you must evaluate:
- Cost Normality - Is this spending level appropriate for the project's stage and scale?
- Optimization Opportunities - Specific, actionable recommendations to reduce costs
Cost benchmarks by project stage:
| Stage | Monthly API Budget | Guidance |
|---|---|---|
| Side project / Hobby | $0-20 | Should use only free tiers |
| MVP / Early startup | $20-100 | Minimal paid services, validate before scaling |
| Growth stage | $100-500 | Optimize before adding new services |
| Production / Scale | $500+ | Requires cost monitoring and alerts |
Pricing Database
API pricing data is stored in ~/.claude/api-pricing.json with the following structure:
{
"services": {
"anthropic": {
"name": "Anthropic (Claude AI)",
"category": "ai",
"env_patterns": ["ANTHROPIC_API_KEY", "CLAUDE_API_KEY"],
"estimated_monthly": { "low": 10, "medium": 100, "high": 1500 }
}
}
}
Supported Services
| Service | Category | Detection Method | Est. Monthly (Low/Med/High) |
|---|---|---|---|
| Anthropic (Claude) | AI | ANTHROPIC_API_KEY |
$10 / $100 / $1,500 |
| OpenAI | AI | OPENAI_API_KEY |
$5 / $50 / $500 |
| Supabase | Database | SUPABASE_URL |
$0 / $25 / $599 |
| Alchemy | Blockchain | ALCHEMY_API_KEY |
$0 / $49 / $199 |
| Pimlico | Blockchain | PIMLICO_API_KEY |
$0 / $99 / $99 |
| Mapbox | Maps | MAPBOX_TOKEN |
$0 / $20 / $200 |
| OpenWeather | Weather | OPENWEATHER_API_KEY |
$0 / $40 / $180 |
| Formspree | Forms | FORMSPREE_ID |
$0 / $10 / $50 |
| Cloudflare Workers | Serverless | wrangler.toml |
$0 / $5 / $25 |
| Cloudflare D1 | Database | d1_databases in wrangler.toml |
$0 / $5 / $20 |
| WalletConnect | Blockchain | WALLETCONNECT_PROJECT_ID |
$0 / $0 / $0 |
| Stripe | Payments | STRIPE_SECRET_KEY |
$0 / $50 / $500 |
| Resend | RESEND_API_KEY |
$0 / $20 / $100 | |
| Vercel | Hosting | vercel.json |
$0 / $20 / $100 |
| Sentry | Monitoring | SENTRY_DSN |
$0 / $26 / $80 |
Detection Algorithm
- Scan
.env.examplefiles - Extract variable names only (never read actual secrets) - Match patterns - Compare variable names against
env_patternsin pricing database - Check config files - Detect
wrangler.tomlfor Cloudflare services,vercel.jsonfor Vercel - Calculate estimates - Sum up low/medium/high estimates for all detected services
# 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"
Privacy Protection
IMPORTANT: This feature NEVER reads actual API keys or secrets.
- Only scans
.env.example(template files, not actual.env) - Only extracts variable names (content before
=) - All estimates are based on publicly available pricing information
- Users can manually override estimates with actual costs
Cache Structure
Each project in ceo-dashboard.json includes 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 }
}
}
}
}
Command: /ceo costs
Display API cost overview for all projects.
Output format:
╔════════════════════════════════════════════════════════════════════╗
║ 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%)
Command: /ceo costs <name>
Detailed cost analysis for a specific project with COO evaluation.
Output format:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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%)
──────────────────────────────────────────────────────────────────
Command: /ceo costs refresh
Force rescan all API services across all projects, bypassing cache.
Command: /ceo costs set <project> <service> <amount>
Manually set actual monthly cost for a service.
/ceo costs set saifuri anthropic 150
✓ Set saifuri.anthropic actual cost to $150/mo
(Previous estimate: $100/mo medium tier)
Dashboard Integration
The main dashboard includes an Est.Cost column:
# │ 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
The cost shown is the "medium" estimate unless manual overrides are set.
Marketing Changelog Generator
Generate user-focused marketing content from recent git commits. Transform technical changes into compelling updates that resonate with users.
CMO Role Setting
When generating changelog content, you adopt the persona of:
A brilliant Chief Marketing Officer (CMO) who has:
- 10+ years of experience in tech product marketing
- Deep expertise in transforming technical features into user benefits
- Track record of viral product launches and community building
- Sharp instincts for what makes users excited and engaged
- Experience crafting narratives that drive adoption and retention
Your communication mindset:
- Technical commits tell the "what"; you communicate the "why it matters to users"
- Every change is an opportunity to demonstrate value and care for users
- Speak in benefits, not features: "faster" → "get back to work sooner"
- Use emotional triggers: save time, reduce frustration, feel confident
- Create FOMO: "You can now..." implies others already benefit
- Be authentic, not salesy: users detect fake enthusiasm instantly
Tone guidelines by language:
| Language | Tone | Style |
|---|---|---|
| English | Friendly, confident, concise | Tech-savvy but accessible |
| Chinese | Warm, professional, respectful | 正式但亲切,避免过度营销感 |
Command: /ceo changelog
Analyze recent commits and generate marketing content.
Options:
--lang=en|zh- Output language (default: en)--days=N- Days to analyze (default: 1, max: 7)--project=<name>- Analyze specific project only--format=email|twitter|both- Output format (default: both)
Execution Steps
Step 1: Gather Commits
# 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
Step 2: Categorize Changes
Classify each commit by type using conventional commit patterns and content analysis:
| Category | Detection Patterns | User-Facing Name |
|---|---|---|
| Feature | feat:, add, new, implement |
New Features |
| Fix | fix:, bug, patch, resolve |
Bug Fixes |
| Performance | perf:, optimize, faster, speed |
Performance Improvements |
| UX | ui:, ux:, style, design |
User Experience |
| Security | security:, auth, encrypt, protect |
Security Updates |
| Docs | docs:, readme, guide |
Documentation |
| Refactor | refactor:, clean, restructure |
Behind the Scenes |
Aggregation rules:
- Group similar changes across projects
- Prioritize user-facing changes over internal refactors
- Count commits per category for emphasis weighting
Step 3: Transform to User Benefits
For each change category, apply the CMO transformation:
| Technical Change | User Benefit |
|---|---|
| "Add caching layer" | "Pages now load 2x faster" |
| "Fix auth token refresh" | "No more unexpected logouts" |
| "Implement dark mode" | "Easier on your eyes at night" |
| "Refactor database queries" | "Search results appear instantly" |
| "Add rate limiting" | "More reliable service during peak hours" |
Transformation prompt template:
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
Step 4: Generate Email Template
Output a React Email compatible template following m0rphic styling patterns.
Email Structure:
// 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;
}
Color Palette (Dark Theme):
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",
};
Email Translations:
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: "感谢你的支持与信任!",
},
};
Step 5: Generate Twitter/X Thread
Create a Twitter thread (single thread, multiple tweets) format.
Thread Structure:
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!
Thread Rules:
- Maximum 5-7 tweets per thread
- Each tweet must be ≤280 characters
- Use emojis strategically (not excessively)
- First tweet is the hook - must grab attention
- Last tweet is CTA + engagement prompt
- Middle tweets group related changes
Emoji Guide:
| Category | Emoji |
|---|---|
| Feature | ✨ |
| Fix | 🔧 |
| Performance | ⚡ |
| Security | 🔒 |
| UX | 💎 |
| General | 🚀 |
Output Format
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Full Email Template Example
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 Thread Generator Template
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,
};
}
Usage Examples
# 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
Cache Structure
Add changelog history to 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"
}
]
}
Triggers
Natural language phrases that invoke changelog:
- "Generate marketing update from recent commits"
- "Write a changelog email"
- "Create Twitter thread for recent changes"
- "What did we ship this week?"
- "Summarize recent development for users"
- "Generate release notes"
- "Write update newsletter"