Cascade strategy from vision to team-level execution — OKRs, initiative mapping, alignment verification, and gap identification across the organization.
Ensure every team member contributes to your top priorities by connecting company vision directly to daily execution. You'll spot misalignment between high-level objectives and team goals, highlighting conflicting priorities and communication gaps before they cause dysfunction. Use it when departments feel siloed or you need to verify that daily work actually supports your long-term mission.
name: “strategic-alignment”
description: “Cascades strategy from boardroom to individual contributor. Detects and fixes misalignment between company goals and team execution. Covers strategy articulation, cascade mapping, orphan goal detection, silo identification, communication gap analysis, and realignment protocols. Use when teams are pulling in different directions, OKRs don’t connect, departments optimize locally at company expense, or when user mentions alignment, strategy cascade, silo, conflicting OKRs, or strategy communication.”
license: MIT
metadata:
version: 1.0.0
author: Alireza Rezvani
category: c-level
domain: strategic-alignment
updated: 2026-03-05
python-tools: alignment_checker.py
frameworks: alignment-playbook
Strategic Alignment Engine
Strategy fails at the cascade, not the boardroom. This skill detects misalignment before it becomes dysfunction and builds systems that keep strategy connected from CEO to individual contributor.
The alignment problem: The further a goal gets from the strategy that created it, the less likely it reflects the original intent. This is the organizational telephone game. It happens at every stage. The question is how bad it is and how to fix it.
Step 1: Strategy Articulation Test
Before checking cascade, check the source. Ask five people from five different teams:
“What is the company’s most important strategic priority right now?”
Scoring:
All five give the same answer: ✅ Articulation is clear
3–4 give similar answers: 🟡 Loose alignment — clarify and communicate
< 3 agree: 🔴 Strategy isn’t clear enough to cascade. Fix this before fixing cascade.
Format test: The strategy should be statable in one sentence. If leadership needs a paragraph, teams won’t internalize it.
❌ “We focus on product-led growth while maintaining enterprise relationships and expanding our international presence and investing in platform capabilities”
✅ “Win the mid-market healthcare segment in DACH before Series B”
Step 2: Cascade Mapping
Map the flow from company strategy → each level of the organization.
Company level: OKR-1, OKR-2, OKR-3 ↓Dept level: Sales OKRs, Eng OKRs, Product OKRs, CS OKRs ↓Team level: Team A OKRs, Team B OKRs... ↓Individual: Personal goals / rocks
For each goal at every level, ask:
Which company-level goal does this support?
If this goal is 100% achieved, how much does it move the company goal?
Is the connection direct or theoretical?
Step 3: Alignment Detection
Three failure patterns:
Orphan goals: Team or individual goals that don’t connect to any company goal.
Symptom: “We’ve been working on this for a quarter and nobody above us seems to care”
Root cause: Goals set bottom-up or from last quarter’s priorities without reconciling to current company OKRs
Fix: Connect or cut. Every goal needs a parent.
Conflicting goals: Two teams’ goals, when both succeed, create a worse outcome.
Classic example: Sales commits to volume contracts (revenue), CS is measured on satisfaction scores. Sales closes bad-fit customers; CS scores tank.
Fix: Cross-functional OKR review before quarter begins. Shared metrics where teams interact.
Coverage gaps: Company has 3 OKRs. 5 teams support OKR-1, 2 support OKR-2, 0 support OKR-3.
Symptom: Company OKR-3 consistently misses; nobody owns it
Fix: Explicit ownership assignment. If no team owns a company OKR, it won’t happen.
See scripts/alignment_checker.py for automated detection against your JSON-formatted OKRs.
Step 4: Silo Identification
Silos exist when teams optimize for local metrics at the expense of company metrics.
Silo signals:
A department consistently hits their goals while the company misses
Teams don’t know what other teams are working on
“That’s not our problem” is a common phrase
Escalations only flow up; coordination never flows sideways
Data isn’t shared between teams that depend on each other
Silo root causes:
Incentive misalignment: Teams rewarded for local metrics don’t optimize for company metrics
No shared goals: When teams share a goal, they coordinate. When they don’t, they drift.
Geography or time zones: Silos accelerate when teams don’t interact organically
Silo measurement:
How often do teams request something from each other vs. proceed independently?
How much time does it take to resolve a cross-functional issue?
Can a team member describe the current priorities of an adjacent team?
Step 5: Communication Gap Analysis
What the CEO says ≠ what teams hear. The gap grows with company size.
The message decay model:
CEO communicates strategy at all-hands → managers filter through their lens → teams receive modified version → individuals interpret further
Gap sources:
Ambiguity: Strategy stated at too high a level (“grow the business”) lets each team fill in their own interpretation
Frequency: One all-hands per quarter isn’t enough repetition to change behavior
Medium mismatch: Long written strategy doc for teams that respond to visual communication
Trust deficit: Teams don’t believe the strategy is real (“we’ve heard this before”)
Gap detection:
Run the Step 1 articulation test across all levels
Compare what leadership thinks they communicated vs. what teams say they heard
Survey: “What changed about how you work since the last strategy update?”
Step 6: Realignment Protocol
How to fix misalignment without calling it a “realignment” (which creates fear).
Step 6a: Don’t start with what’s wrong
Starting with “here’s our misalignment” creates defensiveness. Start with “here’s where we’re heading and I want to make sure we’re connected.”
Step 6b: Re-cascade in a workshop, not a memo
Alignment workshops are more effective than documents. Get company-level OKR owners and department leads in a room. Map connections. Find gaps together.
Step 6c: Fix incentives before fixing goals
If department heads are rewarded for local metrics that conflict with company goals, no amount of goal-setting fixes the problem. The incentive structure must change first.
Step 6d: Install a quarterly alignment check
After fixing, prevent recurrence. See references/alignment-playbook.md for quarterly cadence.
Alignment Score
A quick health check. Score each area 0–10:
Area
Question
Score
Strategy clarity
Can 5 people from different teams state the strategy consistently?
/10
Cascade completeness
Do all team goals connect to company goals?
/10
Conflict detection
Have cross-team OKR conflicts been reviewed and resolved?
/10
Coverage
Does each company OKR have explicit team ownership?
/10
Communication
Do teams’ behaviors reflect the strategy (not just their stated understanding)?
/10
Total: __ / 50
Score
Status
45–50
Excellent. Maintain the system.
35–44
Good. Address specific weak areas.
20–34
Misalignment is costing you. Immediate attention required.
< 20
Strategic drift. Treat as crisis.
Key Questions for Alignment
“Ask your newest team member: what is the most important thing the company is trying to achieve right now?”
“Which company OKR does your team’s top priority support? Can you trace the connection?”
“When Team A and Team B both hit their goals, does the company always win? Are there scenarios where they don’t?”
“What changed in how your team works since the last strategy update?”
“Name a decision made last week that was influenced by the company strategy.”
Red Flags
Teams consistently hit goals while company misses targets
Cross-functional projects take 3x longer than expected (coordination failure)
Strategy updated quarterly but team priorities don’t change
“That’s a leadership problem, not our problem” attitude at the team level
New initiatives announced without connecting them to existing OKRs
Department heads optimize for headcount or budget rather than company outcomes
references/alignment-playbook.md — Cascade techniques, quarterly alignment check, common patterns
Strategic Alignment Playbook
Techniques for cascading strategy, detecting drift, and maintaining alignment at scale.
1. Strategy Cascade Techniques
The One-Page Strategy Filter
Before cascading, compress strategy to one page. If it doesn't fit on one page, it's not clear enough to cascade.
Template:
Company Strategy — [Quarter/Year]─────────────────────────────────WHERE WE'RE GOING (6-word vision):─────────────────────────────────TOP 3 PRIORITIES THIS QUARTER:1. [Priority] — owned by: [name]2. [Priority] — owned by: [name]3. [Priority] — owned by: [name]─────────────────────────────────WHAT WE'RE NOT DOING:- [Deprioritized initiative]- [Deferred until next quarter]─────────────────────────────────HOW WE MEASURE SUCCESS:- [Key metric 1]- [Key metric 2]- [Key metric 3]
The "What we're NOT doing" section is as important as the priorities. Without it, every team adds their own priorities.
The Cascade Workshop
Step 1: Company OKR owners present to all department leads (60 min)
Walk through each company OKR. Explain the "why" behind each — the reasoning, not just the what.
Step 2: Department leads draft their OKRs in response (90 min)
Each department answers: "Given these company OKRs, what is our department uniquely positioned to contribute?"
Step 3: Cross-check for conflicts and gaps (60 min)
All departments present their draft OKRs. Flag: Which company OKR has no department support? Which two departments might conflict?
Step 4: Resolve before publishing (30 min)
Assign missing coverage. Negotiate shared metrics for conflict-prone areas.
Step 5: Cascade to teams and individuals
Each department lead runs the same workshop with their teams within 1 week.
Cascade rules
Bottom-up complements top-down. Some goals should emerge from teams, not be handed down. Reserve 20–30% of each team's OKRs for team-defined goals that connect to company direction.
Every team goal needs a parent. If you can't draw a line from a team goal to a company OKR, the goal is either wrong or the company OKR is incomplete.
Cascade the WHY, not just the WHAT. "Achieve €800K ARR in DACH" without context produces different behaviors than "Achieve €800K ARR in DACH to demonstrate product-market fit before our Series B in Q4."
2. The Telephone Game Problem and How to Beat It
The problem
A study by a leadership development firm found that:
95% of employees can't name their company's top strategic priorities
Of those who can, 60% interpret them differently than leadership intended
This is the telephone game at scale. It's not a communication failure — it's an organizational physics problem.
Why strategy degrades
Layer 1 → Layer 2: Managers interpret strategy through their own context. "Focus on efficiency" becomes "cut costs" in Operations and "ship fewer features" in Engineering.
Layer 2 → Layer 3: Teams interpret their manager's interpretation. The original strategy is now third-hand.
Written vs. oral: Written documents persist. Oral communication changes with each telling. Most cascade happens orally.
Recency bias: The last thing said overwrites earlier context. A strategy set in January doesn't survive a September all-hands that emphasizes something different.
How to beat it
Repetition is the solution, not the problem. Most leaders communicate a strategy once and assume it was received. Research on organizational communication suggests 7+ exposures before a message changes behavior.
Vary the format. Same message in writing, verbal, visual, story, and example. Different people receive different formats.
Create shared vocabulary. If everyone calls the strategy by the same name, it creates a reference point. "We're in DACH focus mode" is more transmissible than a paragraph.
Test comprehension, not communication. Ask random team members: "What are our top 3 priorities right now?" The answer tells you whether cascade worked, not whether you communicated.
Use stories, not slides. "Here's a decision we made last week that's a perfect example of the strategy" is more memorable than restating the OKR.
3. Cross-Functional OKR Design
Silos form when teams have no shared goals. The fix: design OKRs that require multiple teams to cooperate.
Shared ownership OKR
Format:
Objective: [What we'll achieve together]Primary owner: [Team A]Contributing owner: [Team B]Key Results:- KR owned by Team A: [Metric]- KR owned by Team B: [Metric]- Shared KR (both teams): [Metric that requires both]
Example:
Objective: Launch the partner API and acquire first 3 integrationsPrimary owner: EngineeringContributing owner: Business DevelopmentKR 1 (Engineering): API v1 live with 100% documentation by Week 8KR 2 (BD): 3 signed partner integration agreements by EoQKR 3 (Shared): First partner integration live and in production by EoQ
Cross-functional conflict metric
When two teams' goals are potentially in conflict, add a shared guardrail metric:
Example:
Sales goal: 15 new logos
CS goal: Churn < 2%
Shared guardrail: New customer 90-day churn < 5% (Sales can't close unqualified customers; CS can't blame Sales for their churn)
4. Alignment Check Cadence
Quarterly alignment check (before OKR planning)
Run this before setting next quarter's OKRs:
Week −2 (2 weeks before quarter start):
All teams review current OKRs: Which are we hitting? Which are we missing?
Run the alignment checker: Orphans? Gaps? Conflicts?
Week −1:
Cascade workshop: Company sets next quarter's OKRs
Cross-functional conflict review
Coverage gap assignment
Week 1 of new quarter:
All teams have finalized OKRs with documented parent company OKRs
Shared OKRs documented with co-owners
Guardrail metrics in place for known conflict areas
Monthly alignment pulse
One question added to monthly department reviews:
"How is our work moving the company-level OKRs? What's the connection?"
Force each team lead to articulate the link. If they struggle, the cascade has broken.
Weekly alignment signal
One question added to leadership L10 meetings:
"Is there anything happening in our team that's at odds with the company strategy?"
This creates a standing invitation to surface misalignment before it compounds.
5. Common Misalignment Patterns by Company Stage
Seed stage (< 20 people)
Pattern: Everyone knows everything, alignment is informal. You don't need OKRs — you have daily contact.
Risk: Informal alignment breaks when you hire past 15 people and not everyone is in every conversation.
Fix: Start documenting strategy at 10–12 people, before it's painful. Establishing the habit early is easier than retrofitting at 50.
Early growth (20–60 people)
Pattern: Functions are forming. Sales, Product, Engineering operate somewhat independently. Communication slows.
Common misalignment: Engineering builds features that Sales didn't ask for. Sales promises features Engineering hasn't planned.
Fix: Introduce a shared quarterly planning session. Sales and Product review the roadmap together. Engineering and Sales share a customer pipeline update monthly.
Scaling (60–200 people)
Pattern: Multiple layers of management. Strategy takes longer to reach ICs. Managers filter differently.
Common misalignment: Department heads optimize their own metrics. Cross-functional projects stall because nobody owns the intersection.
Fix: Cross-functional OKRs. Shared metrics. An explicit alignment check in the quarterly planning process (use the alignment_checker.py script).
Large (200+ people)
Pattern: Sub-strategies form. Business units, geographies, and product lines develop their own goals that drift from company strategy over time.
Common misalignment: Business unit A and Business unit B compete for the same customer segment. Platform team builds for internal use-cases that differ from external product direction.
Fix: Annual strategy alignment summit across business units. Centralized OKR system with visible cross-functional connections. Dedicated alignment role (often the COO or Chief of Staff).
#!/usr/bin/env python3"""Strategic Alignment CheckerDetects misalignment in OKR structures:- Orphan OKRs: team goals with no connection to company goals- Conflicting OKRs: team goals that may work against each other- Coverage gaps: company goals with insufficient team supportInput: JSON file with company and team OKRsOutput: Alignment score, gap report, conflict mapUsage: python alignment_checker.py # Run with sample data python alignment_checker.py --file my_okrs.json # Run with your data python alignment_checker.py --sample # Print sample JSON format"""import jsonimport sysimport argparsefrom collections import defaultdict# ─────────────────────────────────────────────# Sample data# ─────────────────────────────────────────────SAMPLE_DATA = { "quarter": "Q2 2026", "company": { "name": "Acme Corp", "okrs": [ { "id": "C1", "objective": "Win mid-market DACH healthcare segment", "key_results": [ "Reach 50 paying customers in DACH by EoQ", "Achieve €800K ARR in DACH", "Net Revenue Retention > 110%" ] }, { "id": "C2", "objective": "Ship the platform API to unlock partner integrations", "key_results": [ "API v1 launched with 3 partner integrations", "API documentation coverage: 100% of endpoints", "< 200ms P95 response time under load" ] }, { "id": "C3", "objective": "Build a capital-efficient growth engine", "key_results": [ "CAC payback period < 12 months", "Burn multiple < 1.5x", "Revenue per employee up 20% vs Q1" ] } ] }, "teams": [ { "name": "Sales", "okrs": [ { "id": "S1", "objective": "Hit DACH new business targets", "parent_company_okr_id": "C1", "key_results": [ "Close 15 new DACH logos", "Pipeline coverage: 3x of target", "Average deal size > €18K ARR" ], "potential_conflicts": ["C3", "CS2"] }, { "id": "S2", "objective": "Expand into Austria market", "parent_company_okr_id": None, # ORPHAN — no company OKR parent "key_results": [ "5 qualified meetings with Austrian prospects", "1 pilot signed in Austria" ], "potential_conflicts": [] } ] }, { "name": "Engineering", "okrs": [ { "id": "E1", "objective": "Deliver API v1 on schedule", "parent_company_okr_id": "C2", "key_results": [ "API v1 feature complete by Week 8", "Zero critical bugs at launch", "P95 latency < 200ms under 500 RPS" ], "potential_conflicts": [] }, { "id": "E2", "objective": "Reduce infrastructure cost by 30%", "parent_company_okr_id": "C3", "key_results": [ "Migrate 3 services to spot instances", "Decommission legacy DB cluster", "Monthly infra cost < €12K" ], "potential_conflicts": [] }, { "id": "E3", "objective": "Achieve zero-downtime deployments", "parent_company_okr_id": None, # ORPHAN "key_results": [ "Implement blue-green deployment pipeline", "Deployment success rate > 99.5%" ], "potential_conflicts": [] } ] }, { "name": "Customer Success", "okrs": [ { "id": "CS1", "objective": "Drive retention and expansion in DACH", "parent_company_okr_id": "C1", "key_results": [ "NRR > 110% for DACH cohort", "Churn < 2% gross monthly", "CSAT score > 4.5/5" ], "potential_conflicts": [] }, { "id": "CS2", "objective": "Reduce support ticket volume by 40%", "parent_company_okr_id": "C3", "key_results": [ "Launch self-serve knowledge base", "Ticket deflection rate > 35%", "Time-to-first-response < 2 hours" ], "potential_conflicts": ["S1"] # Volume close pressure → more bad-fit customers → more tickets } ] }, { "name": "Marketing", "okrs": [ { "id": "M1", "objective": "Generate DACH pipeline to support sales targets", "parent_company_okr_id": "C1", "key_results": [ "€2.4M qualified pipeline from DACH", "30 qualified demo requests from target ICP", "CAC from inbound < €4K" ], "potential_conflicts": [] } ] } ], "known_conflicts": [ { "team_a": "Sales", "okr_a": "S1", "team_b": "Customer Success", "okr_b": "CS2", "description": "Sales closing volume deals to hit number may include poor-fit customers, increasing CS ticket load and reducing CSAT — directly conflicting with CS ticket reduction target." } ]}# ─────────────────────────────────────────────# Analysis functions# ─────────────────────────────────────────────def get_all_company_okr_ids(data): return {okr["id"] for okr in data["company"]["okrs"]}def detect_orphans(data, company_ids): """Find team OKRs with no parent company OKR.""" orphans = [] for team in data["teams"]: for okr in team["okrs"]: if okr.get("parent_company_okr_id") is None: orphans.append({ "team": team["name"], "okr_id": okr["id"], "objective": okr["objective"] }) elif okr["parent_company_okr_id"] not in company_ids: orphans.append({ "team": team["name"], "okr_id": okr["id"], "objective": okr["objective"], "note": f"References non-existent company OKR: {okr['parent_company_okr_id']}" }) return orphansdef detect_coverage_gaps(data, company_ids): """Find company OKRs with no team support.""" coverage = defaultdict(list) for team in data["teams"]: for okr in team["okrs"]: parent = okr.get("parent_company_okr_id") if parent and parent in company_ids: coverage[parent].append({ "team": team["name"], "okr_id": okr["id"], "objective": okr["objective"] }) gaps = [] over_indexed = [] for company_okr in data["company"]["okrs"]: cid = company_okr["id"] supporting = coverage.get(cid, []) entry = { "company_okr_id": cid, "objective": company_okr["objective"], "supporting_team_count": len(supporting), "supporting_teams": [s["team"] for s in supporting] } if len(supporting) == 0: gaps.append(entry) elif len(supporting) >= 4: over_indexed.append(entry) return gaps, over_indexed, coveragedef detect_conflicts(data): """Surface declared and potential OKR conflicts.""" conflicts = [] # Use declared known_conflicts for conflict in data.get("known_conflicts", []): conflicts.append({ "type": "declared", "team_a": conflict["team_a"], "okr_a": conflict["okr_a"], "team_b": conflict["team_b"], "okr_b": conflict["okr_b"], "description": conflict["description"] }) # Use potential_conflicts fields on OKRs for cross-reference okr_index = {} for team in data["teams"]: for okr in team["okrs"]: okr_index[okr["id"]] = {"team": team["name"], "objective": okr["objective"]} for team in data["teams"]: for okr in team["okrs"]: for conflict_id in okr.get("potential_conflicts", []): if conflict_id in okr_index: target = okr_index[conflict_id] # Avoid duplicate (A→B and B→A) already_declared = any( (c["okr_a"] == okr["id"] and c["okr_b"] == conflict_id) or (c["okr_a"] == conflict_id and c["okr_b"] == okr["id"]) for c in conflicts ) if not already_declared: conflicts.append({ "type": "potential", "team_a": team["name"], "okr_a": okr["id"], "team_b": target["team"], "okr_b": conflict_id, "description": f"Potential conflict between '{okr['objective']}' and '{target['objective']}' — review recommended" }) return conflictsdef compute_alignment_score(data, orphans, gaps, conflicts, coverage): """Score overall alignment from 0–100.""" total_team_okrs = sum(len(t["okrs"]) for t in data["teams"]) total_company_okrs = len(data["company"]["okrs"]) orphan_penalty = (len(orphans) / max(total_team_okrs, 1)) * 30 gap_penalty = (len(gaps) / max(total_company_okrs, 1)) * 30 conflict_penalty = min(len(conflicts) * 10, 30) score = max(0, 100 - orphan_penalty - gap_penalty - conflict_penalty) return round(score)def score_label(score): if score >= 85: return "✅ Excellent" elif score >= 70: return "🟡 Moderate misalignment" elif score >= 50: return "🟠 Significant misalignment" else: return "🔴 Critical misalignment"# ─────────────────────────────────────────────# Report generation# ─────────────────────────────────────────────def print_report(data, orphans, gaps, over_indexed, conflicts, coverage, score): sep = "─" * 60 print(f"\n{'═' * 60}") print(f" STRATEGIC ALIGNMENT REPORT — {data.get('quarter', 'Unknown Quarter')}") print(f" Company: {data['company']['name']}") print(f"{'═' * 60}\n") print(f" ALIGNMENT SCORE: {score}/100 {score_label(score)}\n") print(sep) # Company OKRs summary print("\n📋 COMPANY OKRs\n") for okr in data["company"]["okrs"]: supporting = coverage.get(okr["id"], []) teams_str = ", ".join(s["team"] for s in supporting) if supporting else "⚠️ NONE" print(f" [{okr['id']}] {okr['objective']}") print(f" Supported by: {teams_str}") print() print(sep) # Orphan OKRs print(f"\n🔍 ORPHAN OKRs ({len(orphans)} found)\n") if orphans: for o in orphans: note = f" — {o.get('note', 'No parent company OKR assigned')}" print(f" ⚠️ [{o['okr_id']}] {o['team']}: {o['objective']}") print(f" Issue: {note}") print() print(" → Action: Connect each orphan to a company OKR, or deprioritize it.") else: print(" ✅ None found. All team OKRs connect to company OKRs.") print() print(sep) # Coverage gaps print(f"\n🕳️ COVERAGE GAPS ({len(gaps)} company OKRs with zero team support)\n") if gaps: for g in gaps: print(f" 🔴 [{g['company_okr_id']}] {g['objective']}") print(f" No team is working on this. It will not be achieved.") print() print(" → Action: Assign at least one team owner to each unowned company OKR.") else: print(" ✅ All company OKRs have at least one team supporting them.") print() if over_indexed: print(f" 📊 OVER-INDEXED OKRs ({len(over_indexed)} company OKRs with 4+ teams)\n") for o in over_indexed: print(f" [{o['company_okr_id']}] {o['objective']}") print(f" {o['supporting_team_count']} teams: {', '.join(o['supporting_teams'])}") print() print(" → Note: High coverage isn't necessarily bad, but check if under-covered OKRs are being neglected.") print(sep) # Conflicts print(f"\n⚡ CONFLICTING OKRs ({len(conflicts)} found)\n") if conflicts: for i, c in enumerate(conflicts, 1): label = "🔴 Declared" if c["type"] == "declared" else "🟡 Potential" print(f" {label} Conflict #{i}") print(f" {c['team_a']} [{c['okr_a']}] ↔ {c['team_b']} [{c['okr_b']}]") print(f" {c['description']}") print() print(" → Action: For each conflict, design a shared metric or shared constraint that prevents local optimization at company expense.") else: print(" ✅ No declared or potential conflicts detected.") print() print(sep) # Summary print("\n📊 SUMMARY\n") total_team_okrs = sum(len(t["okrs"]) for t in data["teams"]) total_company_okrs = len(data["company"]["okrs"]) print(f" Company OKRs: {total_company_okrs}") print(f" Team OKRs: {total_team_okrs}") print(f" Orphan OKRs: {len(orphans)}") print(f" Coverage gaps: {len(gaps)} of {total_company_okrs} company OKRs have no team support") print(f" Conflicts: {len(conflicts)}") print(f" Alignment score: {score}/100 {score_label(score)}") print() if score < 70: print(" ⚠️ RECOMMENDED ACTIONS:") if orphans: print(f" 1. Resolve {len(orphans)} orphan OKR(s) — connect to company goals or cut") if gaps: print(f" 2. Assign team owners to {len(gaps)} uncovered company OKR(s)") if conflicts: print(f" 3. Address {len(conflicts)} conflict(s) with shared metrics or constraints") print(" 4. Run a cross-functional OKR review before next quarter begins") print() print(f"{'═' * 60}\n")# ─────────────────────────────────────────────# Main# ─────────────────────────────────────────────def main(): parser = argparse.ArgumentParser(description="Strategic OKR Alignment Checker") parser.add_argument("--file", help="Path to JSON file with OKR data") parser.add_argument("--sample", action="store_true", help="Print sample JSON format and exit") args = parser.parse_args() if args.sample: print(json.dumps(SAMPLE_DATA, indent=2)) return if args.file: try: with open(args.file, "r") as f: data = json.load(f) except FileNotFoundError: print(f"Error: File '{args.file}' not found.") sys.exit(1) except json.JSONDecodeError as e: print(f"Error: Invalid JSON in '{args.file}': {e}") sys.exit(1) else: print("No file provided. Running with sample data.\n") print("To use your own data: python alignment_checker.py --file your_okrs.json") print("To see the expected JSON format: python alignment_checker.py --sample\n") data = SAMPLE_DATA # Run analysis company_ids = get_all_company_okr_ids(data) orphans = detect_orphans(data, company_ids) gaps, over_indexed, coverage = detect_coverage_gaps(data, company_ids) conflicts = detect_conflicts(data) score = compute_alignment_score(data, orphans, gaps, conflicts, coverage) # Print report print_report(data, orphans, gaps, over_indexed, conflicts, coverage, score)if __name__ == "__main__": main()
Install this Skill
Skills give your AI agent a consistent, structured approach to this task — better output than a one-off prompt.