feat(finance): add saas-metrics-coach skill#298
feat(finance): add saas-metrics-coach skill#298abbasmir12 wants to merge 1 commit intoalirezarezvani:mainfrom
Conversation
- SaaS metrics calculator (ARR, MRR, churn, CAC, LTV, NRR) - Quick Ratio calculator for growth efficiency - Unit economics simulator for 12-month projections - Industry benchmarks by stage/segment (OpenView, Bessemer, SaaS Capital) - 3 stdlib-only Python tools with CLI and JSON output - Complements financial-analyst skill for SaaS founders
| parser.add_argument("--churned-mrr", type=float, default=0, help="Churned MRR") | ||
| parser.add_argument("--contraction-mrr", type=float, default=0, help="Contraction MRR") | ||
| parser.add_argument("--profit-margin", type=float, help="Net profit margin %%") | ||
| parser.add_argument("--json", action="store_true", help="Output JSON format") |
There was a problem hiding this comment.
🔴 metrics_calculator.py uses --json flag instead of required --format flag
The finance/CLAUDE.md:86 Quality Standards mandate: "Support both JSON and human-readable output via --format flag". All 4 existing finance tools (finance/financial-analyst/scripts/) implement this as --format json|text. This new script uses --json (a boolean flag) instead, violating the domain's mandatory convention and making the CLI interface inconsistent with all other finance tools.
Prompt for agents
In finance/saas-metrics-coach/scripts/metrics_calculator.py, replace the `--json` boolean flag (line 172) with a `--format` flag matching the existing finance tool convention. Change line 172 to: parser.add_argument("--format", choices=["text", "json"], default="text", help="Output format (default: text)"). Then update line 193 from `if args.json:` to `if args.format == "json":`. This matches the pattern used in finance/financial-analyst/scripts/ratio_calculator.py and all other existing finance tools.
Was this helpful? React with 👍 or 👎 to provide feedback.
| parser.add_argument( | ||
| "--contraction", type=float, default=0, help="Contraction MRR from downgrades (default: 0)" | ||
| ) | ||
| parser.add_argument("--json", action="store_true", help="Output JSON format") |
There was a problem hiding this comment.
🔴 quick_ratio_calculator.py uses --json flag instead of required --format flag
The finance/CLAUDE.md:86 Quality Standards mandate: "Support both JSON and human-readable output via --format flag". All 4 existing finance tools use --format json|text. This new script uses --json (a boolean flag) instead, violating the domain's mandatory convention.
Prompt for agents
In finance/saas-metrics-coach/scripts/quick_ratio_calculator.py, replace the `--json` boolean flag (line 159) with: parser.add_argument("--format", choices=["text", "json"], default="text", help="Output format (default: text)"). Then update line 170 from `if args.json:` to `if args.format == "json":`. This matches the convention used by all existing finance tools.
Was this helpful? React with 👍 or 👎 to provide feedback.
| parser.add_argument( | ||
| "--months", type=int, default=12, help="Months to project (default: 12)" | ||
| ) | ||
| parser.add_argument("--json", action="store_true", help="Output JSON format") |
There was a problem hiding this comment.
🔴 unit_economics_simulator.py uses --json flag instead of required --format flag
The finance/CLAUDE.md:86 Quality Standards mandate: "Support both JSON and human-readable output via --format flag". All 4 existing finance tools use --format json|text. This new script uses --json (a boolean flag) instead, violating the domain's mandatory convention.
Prompt for agents
In finance/saas-metrics-coach/scripts/unit_economics_simulator.py, replace the `--json` boolean flag (line 188) with: parser.add_argument("--format", choices=["text", "json"], default="text", help="Output format (default: text)"). Then update line 202 from `if args.json:` to `if args.format == "json":`. This matches the convention used by all existing finance tools.
Was this helpful? React with 👍 or 👎 to provide feedback.
| if r.get("MoM_Growth_Pct") and profit_margin is not None: | ||
| r["Rule_of_40"] = round(r["MoM_Growth_Pct"] * 12 + profit_margin, 1) |
There was a problem hiding this comment.
🔴 Rule of 40 silently skipped when MoM growth is exactly 0%
Line 93 uses if r.get("MoM_Growth_Pct") and profit_margin is not None: — when MoM_Growth_Pct is 0.0 (flat month-over-month), r.get("MoM_Growth_Pct") returns 0.0 which is falsy in Python, so the Rule of 40 is never calculated. This is incorrect: 0% growth + profit margin is a perfectly valid Rule of 40 input (e.g., 0% growth + 40% profit margin = score of 40). The check should test is not None instead of truthiness.
| if r.get("MoM_Growth_Pct") and profit_margin is not None: | |
| r["Rule_of_40"] = round(r["MoM_Growth_Pct"] * 12 + profit_margin, 1) | |
| if r.get("MoM_Growth_Pct") is not None and profit_margin is not None: | |
| r["Rule_of_40"] = round(r["MoM_Growth_Pct"] * 12 + profit_margin, 1) |
Was this helpful? React with 👍 or 👎 to provide feedback.
Summary
Adds
saas-metrics-coachskill to the finance domain - a specialized tool for SaaS financial health analysis with three production-ready calculators.Motivation
SaaS founders and operators need quick access to SaaS-specific metrics (ARR, MRR, churn, CAC, LTV, Quick Ratio) that aren't covered by traditional financial analysis tools. This skill complements the existing
financial-analystskill by focusing exclusively on SaaS unit economics and growth metrics.Features
Core Metrics Calculator
Quick Ratio Calculator
Unit Economics Simulator
Technical Details
Language: Python 3.7+
Dependencies: None (stdlib-only)
Lines of Code: 595 across 3 scripts
Output Formats: Human-readable text, JSON
CLI Support: All scripts support
--helpand--jsonflagsFiles Added
Testing
financial-analystskillRelationship to Existing Skills
Complements
financial-analyst:financial-analyst: Traditional corporate finance (DCF, budgets, variance analysis)saas-metrics-coach: SaaS-specific metrics (ARR, churn, unit economics)Different use cases and target audiences with no functional overlap.