# Ceos Trends

> Use when analyzing EOS health trends over time - Rock completion rates, scorecard consistency, checkup progression, and issue resolution patterns

- Skill: `bradfeld/ceos-trends` (Agent Skill)
- Install (CLI): `npx skillmds@latest add bradfeld/ceos-trends`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bradfeld/ceos-trends/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: bradfeld (https://skillmd.com/u/bradfeld)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bradfeld/ceos-trends

---


# ceos-trends

Longitudinal EOS health tracking - analyze how your organization is improving over time across all Six Key Components. While `ceos-dashboard` shows today's snapshot, `ceos-trends` answers the question every EOS coach asks: "Are we getting better?"

## When to Use

- "How are we trending?" or "show our progress"
- "Are we improving?" or "EOS health over time"
- "Quarter comparison" or "compare Q1 to Q2"
- "Rock completion history" or "how have our rocks been?"
- "Scorecard trends" or "are our numbers improving?"
- "Show trends" or "progress report"
- Before quarterly planning or annual planning for historical context

## Context

### Finding the CEOS Repository

Search upward from the current directory for the `.ceos` marker file. This file marks the root of the CEOS repository.

If `.ceos` is not found, stop and tell the user: "Not in a CEOS repository. Clone your CEOS repo and run setup.sh first."

**Sync before use:** Once you find the CEOS root, run `git -C <ceos_root> pull --ff-only --quiet 2>/dev/null` to get the latest data from teammates. If it fails (conflict or offline), continue silently with local data.

### Key Files

| File | Purpose |
|------|---------|
| `data/rocks/YYYY-QN/` | Rock files per quarter (status, owner, milestones) |
| `data/scorecard/weeks/YYYY-WNN.md` | Weekly scorecard entries (metrics, on/off track) |
| `data/scorecard/metrics.md` | Metric definitions (goals, thresholds) |
| `data/checkups/YYYY-MM-DD.md` | Organizational Checkup results (component scores) |
| `data/issues/open/` | Currently open issues (priority, created date) |
| `data/issues/solved/` | Resolved issues (priority, created date, resolution) |
| `data/todos/` | To-Do files (status, created, completed_on, source) |
| `data/meetings/l10/YYYY-MM-DD.md` | L10 meeting notes (one per meeting) |

### Design Principles

- **Read-only.** Trends never modifies any data files. It reads, calculates, and reports.
- **Graceful degradation.** Works with whatever data exists. One quarter of Rocks? Show that. No checkups yet? Skip that section with guidance. Never error on missing data.
- **Cross-skill coordination.** Each trend section suggests the relevant skill for taking action. Trends shows the trajectory; other skills change it.
- **Minimum data threshold.** For meaningful trends, at least 2 data points are needed (e.g., 2 quarters of Rocks, 2 checkups). With only 1 data point, show the baseline value and note: "More data needed for trend analysis."

### Quarter and Week Calculations

- **Current quarter:** Jan-Mar = Q1, Apr-Jun = Q2, Jul-Sep = Q3, Oct-Dec = Q4. Format: `YYYY-QN`
- **Current ISO week:** Format: `YYYY-WNN`
- **Available quarters:** Scan `data/rocks/` subdirectory names to discover all quarters with data.
- **Trailing periods:** "Trailing 4 weeks" = most recent 4 weekly scorecard files. "Trailing 13 weeks" = most recent 13 (approximately one quarter).

## Process

### Mode: Overview (default)

Use when the user asks for a general trend summary. This is the default when no specific component is mentioned.

#### Step 1: Discover Available Data

Scan the CEOS data directories to determine what historical data exists:

1. **Quarters with Rocks:** List subdirectories in `data/rocks/` matching `YYYY-QN` pattern. Sort chronologically.
2. **Scorecard weeks:** List files in `data/scorecard/weeks/` matching `YYYY-WNN.md`. Sort chronologically.
3. **Checkups:** List files in `data/checkups/` matching `YYYY-MM-DD.md`. Sort by date.
4. **Issues:** Count files in `data/issues/open/` and `data/issues/solved/`.
5. **To-Dos:** List files in `data/todos/`. Parse `created` and `completed_on` dates.
6. **L10 meetings:** List files in `data/meetings/l10/` matching `YYYY-MM-DD.md`.

If no historical data exists at all, show:
```
No EOS data found. Run your first L10, set some Rocks, or log a scorecard to start building history.
```

#### Step 2: Rock Completion Trend

For each quarter directory in `data/rocks/`:

1. Read all `.md` files in the directory.
2. Parse YAML frontmatter for `status` field.
3. Count: `complete`, `on_track`, `off_track`, `dropped`, total.
4. Calculate completion rate: `complete / (total - dropped)` as percentage.

For the current quarter (not yet ended), mark as "in progress" and show current status breakdown instead of a final completion rate.

Display:

```
Rock Completion
  2025-Q3: 4/6 complete (67%)
  2025-Q4: 5/7 complete (71%) ↑
  2026-Q1: 2 on track, 1 off track, 1 complete of 6 (in progress)
```

Trend arrows (compare each quarter to the previous):
- `↑` = completion rate improved
- `→` = unchanged (within 5 percentage points)
- `↓` = completion rate declined

**If only one quarter exists:** Show the data without trend arrows. Add: "Track Rocks across multiple quarters to see completion trends."

**If no Rock directories exist:**
```
Rock Completion: No Rock data yet. Run `ceos-rocks` to set quarterly priorities.
```

#### Step 3: Scorecard Consistency

Analyze scorecard data across available weeks:

1. Read all weekly scorecard files from `data/scorecard/weeks/`.
2. For each file, parse the metrics table from the markdown body.
3. For each metric row, determine if it was on-track or off-track based on the status or value vs. threshold.
4. Calculate per-week: total metrics, on-track count, on-track percentage.

Calculate rolling averages:
- **Trailing 4 weeks:** Average on-track percentage over the last 4 weeks.
- **Prior 4 weeks:** Average on-track percentage for the 4 weeks before that.
- **Trailing 13 weeks:** Average on-track percentage over the last 13 weeks (quarter).

Also calculate logging consistency:
- Count weeks with scorecard entries vs. total weeks in the period.

Display:

```
Scorecard Consistency
  Weeks logged: 24/26 (92%)
  On-track rate (trailing 4 weeks): 78%
  On-track rate (prior 4 weeks): 71% ↑
  On-track rate (trailing 13 weeks): 74%
```

Trend arrow compares trailing 4 weeks to prior 4 weeks.

**If fewer than 2 weeks of data exist:**
```
Scorecard Consistency: [N] week(s) logged. Log more weeks for trend analysis.
```

**If no scorecard data exists:**
```
Scorecard Consistency: No scorecard data yet. Run `ceos-scorecard` to start tracking weekly.
```

#### Step 4: Checkup Score Progression

Read all checkup files from `data/checkups/`:

1. Parse YAML frontmatter for `overall_score` and `component_scores`.
2. Sort by date.
3. Show score progression over time.

Display:

```
Checkup Scores
  2025-09-15: 3.2 overall (Vision: 3.5, People: 3.0, Data: 3.2, Issues: 3.0, Process: 2.8, Traction: 3.5)
  2025-12-20: 3.8 overall (+0.6) ↑↑ (Vision: 4.0, People: 3.5, Data: 3.8, Issues: 3.5, Process: 3.2, Traction: 4.0)
  2026-03-01: 4.2 overall (+0.4) ↑ (Vision: 4.5, People: 4.0, Data: 4.2, Issues: 4.0, Process: 3.5, Traction: 4.3)
```

Trend indicators (compare to previous checkup):
- `↑↑` = improved by 0.5+
- `↑` = improved by 0.1-0.4
- `→` = unchanged (within 0.1)
- `↓` = declined by 0.1-0.4
- `↓↓` = declined by 0.5+

**If only one checkup exists:** Show the score without trend arrows. Add: "Run another organizational checkup to track progress over time."

**If no checkups exist:**
```
Checkup Scores: No checkups on file. Run `ceos-checkup` to assess organizational health.
```

#### Step 5: Issue Resolution Velocity

Analyze issues from both `data/issues/open/` and `data/issues/solved/`:

1. Read all issue files from both directories.
2. Parse YAML frontmatter for `created` date and `priority`.
3. For solved issues, calculate resolution time (days between `created` and the file's most recent frontmatter date or git modification).
4. Group by quarter based on `created` date.

Calculate per-quarter:
- Issues opened
- Issues solved
- Net change (solved - opened; negative means backlog grew)
- Average days to resolve (for solved issues)

Display:

```
Issue Resolution
  2025-Q4: 8 opened, 10 solved (net: -2, backlog shrinking) | Avg resolution: 24 days
  2026-Q1: 5 opened, 7 solved (net: -2, backlog shrinking) | Avg resolution: 18 days ↑
  Currently open: 4 issues (oldest: 12 days)
```

Trend arrow on resolution time (lower is better):
- `↑` = resolution time decreased (improving)
- `→` = unchanged (within 3 days)
- `↓` = resolution time increased (slowing down)

**If no issues exist (open or solved):**
```
Issue Resolution: No issues tracked yet. Use `ceos-ids` to identify, discuss, and solve issues.
```

#### Step 6: To-Do Completion Rate

Analyze to-do files from `data/todos/`:

1. Read all to-do files.
2. Parse YAML frontmatter for `status`, `created`, `due`, and `completed_on`.
3. Group by week based on `due` date.
4. Calculate weekly completion rate: `complete / total` for each week.

Calculate rolling averages:
- **Trailing 4 weeks:** Average completion rate.
- **Trailing 13 weeks:** Average completion rate.

EOS target is 90%+ weekly completion rate.

Display:

```
To-Do Completion Rate
  Trailing 4 weeks: 88% (target: 90%)
  Trailing 13 weeks: 82%
  Total: 45 complete / 52 created (87% all-time)
```

Color-code against the 90% target:
- At or above 90%: on target
- 80-89%: close, note the gap
- Below 80%: flag for attention

**If no to-do data exists:**
```
To-Do Completion Rate: No to-dos tracked yet. Use `ceos-todos` or run an L10 to create to-dos.
```

#### Step 7: L10 Meeting Cadence

Analyze L10 meeting files from `data/meetings/l10/`:

1. List all files matching `YYYY-MM-DD.md`.
2. Count meetings per quarter.
3. Calculate cadence: meetings held vs. weeks in the period.

Display:

```
L10 Meeting Cadence
  2025-Q4: 11/13 weeks (85%)
  2026-Q1: 9/10 weeks so far (90%)
  Streak: 6 consecutive weeks
```

Calculate current streak: consecutive weeks (from most recent backward) with an L10 file.

**If no L10 files exist:**
```
L10 Meeting Cadence: No L10 meetings on file. Run `ceos-l10` to start your weekly meetings.
```

#### Step 8: Trend Summary

After all sections, provide a categorized summary:

```
Trend Summary:
  Improving: Checkup scores (+0.4), Issue resolution (24 → 18 days), Scorecard consistency (71% → 78%)
  Stable: L10 cadence (90%)
  Needs attention: Rock completion (71% → in progress at 50%), To-do rate (88%, target 90%)
```

Categorize each component:
- **Improving:** Trend arrow is `↑` or `↑↑`
- **Stable:** Trend arrow is `→` or insufficient data for comparison
- **Needs attention:** Trend arrow is `↓` or `↓↓`, or below target thresholds

Then suggest actions only for "needs attention" items:

```
Suggested Actions:
  - Review off-track Rocks with `ceos-rocks`
  - Push to-do completion above 90% with `ceos-todos`
```

### Mode: Deep Dive

Use when the user asks about a specific component's history (e.g., "Rock history", "scorecard trends in detail").

#### Step 1: Identify Component

| User says | Component |
|-----------|-----------|
| "Rock history" / "Rock trends" | Rocks |
| "Scorecard trends" / "metric history" | Scorecard |
| "Checkup history" / "health scores" | Checkups |
| "Issue trends" / "resolution history" | Issues |
| "To-do trends" / "completion history" | To-Dos |
| "L10 history" / "meeting cadence" | L10 |

If unclear, ask: "Which component do you want to explore? (Rocks, Scorecard, Checkups, Issues, To-Dos, L10)"

#### Step 2: Detailed Component Analysis

Run the relevant section from Overview mode but with expanded detail:

**Rocks Deep Dive:**
- Show each quarter's Rocks individually (title, owner, status)
- Show per-person completion rates across quarters
- Highlight people who consistently complete vs. miss Rocks

**Scorecard Deep Dive:**
- Show each metric's on-track percentage over time
- Identify consistently off-track metrics
- Show week-by-week detail for the trailing 13 weeks

**Checkup Deep Dive:**
- Show each component's score across all checkups
- Identify the most-improved and least-improved components
- Show individual question scores if available

**Issues Deep Dive:**
- Show resolution time distribution (fastest, slowest, median)
- Break down by priority level
- Show repeat issue categories if detectable from titles

**To-Do Deep Dive:**
- Show per-person completion rates
- Show completion rate by source (l10, ids, quarterly, adhoc)
- Identify overdue patterns

**L10 Deep Dive:**
- Show meeting dates and gaps
- Calculate average gap between meetings
- Note any long stretches without meetings

### Mode: Compare

Use when the user wants to compare two specific quarters side by side.

#### Step 1: Identify Quarters

If the user specifies two quarters (e.g., "compare Q3 to Q4"), use those. Otherwise, default to the two most recent quarters with data.

#### Step 2: Side-by-Side Comparison

For each available data type, show both quarters:

```
Quarter Comparison: 2025-Q4 vs 2026-Q1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

                        2025-Q4    2026-Q1    Change
Rock Completion         71% (5/7)  67% (4/6)  ↓ -4%
Scorecard On-Track      74%        78%        ↑ +4%
Checkup Overall         3.8        4.2        ↑↑ +0.4
Issues Resolved         10         7          —
Avg Resolution (days)   24         18         ↑ -6 days
To-Do Completion        85%        88%        ↑ +3%
L10 Cadence             85% (11/13) 90% (9/10) ↑ +5%
```

#### Step 3: Highlight Key Changes

After the table, call out the biggest improvements and declines:

```
Key Changes:
  Biggest improvement: Checkup scores (+0.4) — strong organizational health gains
  Needs attention: Rock completion (-4%) — fewer Rocks completed this quarter
```

## Output Format

### Overview Mode

```
EOS Health Trends
━━━━━━━━━━━━━━━━
As of: YYYY-MM-DD | Data from: [earliest quarter] to [current quarter]

Rock Completion
  [quarter-by-quarter with trend arrows]

Scorecard Consistency
  [rolling averages with trend arrows]

Checkup Scores
  [date-by-date with trend arrows and component breakdown]

Issue Resolution
  [quarter-by-quarter with velocity metrics]

To-Do Completion Rate
  [rolling averages vs. 90% target]

L10 Meeting Cadence
  [quarter-by-quarter with streak]

━━━━━━━━━━━━━━━━
Trend Summary:
  Improving: [components]
  Stable: [components]
  Needs attention: [components]

Suggested Actions:
  [only for "needs attention" items]
```

### Graceful Degradation (new repo, minimal data)

```
EOS Health Trends
━━━━━━━━━━━━━━━━
As of: YYYY-MM-DD | Data from: 2026-Q1

Rock Completion
  2026-Q1: 2 on track, 1 off track of 5 (in progress)
  Track Rocks across multiple quarters to see completion trends.

Scorecard Consistency: 3 weeks logged. Log more weeks for trend analysis.

Checkup Scores: No checkups on file. Run `ceos-checkup` to assess organizational health.

Issue Resolution: No issues tracked yet. Use `ceos-ids` to identify, discuss, and solve issues.

To-Do Completion Rate
  Trailing 3 weeks: 92% (target: 90%)
  Total: 11 complete / 12 created (92% all-time)

L10 Meeting Cadence
  2026-Q1: 3/3 weeks so far (100%)
  Streak: 3 consecutive weeks

━━━━━━━━━━━━━━━━
Trend Summary:
  On target: To-do completion (92%), L10 cadence (100%)
  Building history: Rocks (1 quarter), Scorecard (3 weeks)
  Not started: Checkups, Issue tracking

Getting Started:
  - Run `ceos-checkup` to establish your organizational health baseline
  - Use `ceos-ids` when issues come up in L10 meetings
  - Keep logging scorecards weekly to build trend data
```

## Guardrails

- **Read-only ALWAYS.** Trends never modifies any data files. It reads, calculates, and reports. If a user asks to change something, direct them to the appropriate skill.
- **No auto-invoke.** Never call other skills automatically. Suggest `ceos-rocks`, `ceos-scorecard`, `ceos-checkup`, `ceos-ids`, `ceos-todos`, and `ceos-l10` when relevant, but let the user decide.
- **Graceful degradation.** Missing data is normal, especially for new CEOS repos. Show what's available, skip what isn't, and provide guidance on building history. Never error on missing directories or files.
- **Malformed data tolerance.** If a file has invalid YAML frontmatter, skip it with a note ("Skipping [filename] - invalid frontmatter") and continue. One bad file should not break the analysis.
- **Privacy-aware.** In Deep Dive mode, per-person completion rates are useful for coaching but sensitive. Show them factually without judgment. Frame as "Brad: 3/4 Rocks complete (75%)" not "Brad is underperforming."
- **Current quarter caveat.** Always mark the current quarter as "in progress" for Rock completion. Don't compare an in-progress quarter's completion rate to a finished quarter's rate as if they're equivalent.
- **Minimum data for trends.** Don't draw trend arrows with fewer than 2 comparable data points. Show the single data point as a baseline instead.
- **Sensitive data warning.** On first use, remind the user: "Trend data may include sensitive business information. Ensure this repository is private."
- **No prescriptive judgments.** Report the numbers and direction. The leadership team decides what's acceptable. "Rock completion: 60%" is a fact; "Rock completion is too low" is a judgment. Stick to facts.

## Integration Notes

### Dashboard (ceos-dashboard)

- **Distinction:** Dashboard shows the **current snapshot** - today's state. Trends shows the **trajectory** - how things are changing over time. Dashboard explicitly defers historical analysis to other skills ("Current state only" guardrail). Trends fills that gap.
- **Complementary:** Use dashboard before L10 meetings for today's status. Use trends before quarterly planning or annual planning for historical context.

### Rocks (ceos-rocks)

- **Read:** Trends reads `data/rocks/YYYY-QN/` directories to calculate completion rates per quarter. Parses `status` field from each Rock's frontmatter.
- **Suggested flow:** If Rock completion is declining, suggest: "Review current Rocks with `ceos-rocks`."

### Scorecard (ceos-scorecard)

- **Read:** Trends reads `data/scorecard/weeks/` files to calculate on-track rates over time. Parses metric tables from markdown body.
- **Suggested flow:** If on-track rate is declining, suggest: "Investigate off-track metrics with `ceos-scorecard`."

### Checkup (ceos-checkup)

- **Read:** Trends reads `data/checkups/` files for `overall_score` and `component_scores` from frontmatter. Note: ceos-checkup's own Review mode already shows checkup-specific trends. Trends provides this as part of a cross-cutting view alongside other components.
- **Suggested flow:** If checkup scores are declining, suggest: "Run a new checkup with `ceos-checkup`."

### IDS (ceos-ids)

- **Read:** Trends reads `data/issues/open/` and `data/issues/solved/` to calculate resolution velocity. Parses `created` date and `priority` from frontmatter.
- **Suggested flow:** If resolution time is increasing, suggest: "Review open issues with `ceos-ids`."

### To-Dos (ceos-todos)

- **Read:** Trends reads `data/todos/` files for completion rate analysis. Parses `status`, `created`, `due`, `completed_on`, and `source` from frontmatter.
- **Suggested flow:** If completion rate is below 90%, suggest: "Review open to-dos with `ceos-todos`."

### L10 (ceos-l10)

- **Read:** Trends reads `data/meetings/l10/` file dates to calculate meeting cadence. Does not parse meeting content - only checks for file existence to confirm a meeting was held.
- **Suggested flow:** If cadence is inconsistent, suggest: "Schedule your next L10 with `ceos-l10`."

### Annual Planning (ceos-annual) and Quarterly Planning (ceos-quarterly-planning)

- **Related:** Trends data is most useful as input to planning sessions. Before annual or quarterly planning, run trends to understand where the organization has improved and where it needs focus. Suggest: "Run `ceos-trends` before your planning session for historical context."

### Read-Only Principle

**Trends never writes to any data files.** It is a pure read-only aggregator across all CEOS data directories. Each data domain has a single writer skill:

| Data | Writer Skill |
|------|-------------|
| `data/rocks/` | `ceos-rocks` |
| `data/scorecard/` | `ceos-scorecard` |
| `data/checkups/` | `ceos-checkup` |
| `data/issues/` | `ceos-ids` |
| `data/todos/` | `ceos-todos` |
| `data/meetings/l10/` | `ceos-l10` |

Trends reads from all of them, writes to none of them.

