---
name: eck:project-status
version: "0.7.4"
description: Read-only dashboard showing project health, status, pull candidates, and upstream submission history from the evolv-coder-kit registry.
disable-model-invocation: false
---

# Project Status Dashboard

Display a read-only dashboard of project health from the registry and audit data stored in `$ECK_HOME/audits/`. Shows project health scores, pull candidates, and upstream submission history.

---

## Visual Framework

Follow the visual framework defined in the `output:visual-framework` primitive.

---

## Task Registration

| Stage | Subject               | Active Form             | Statusline      |
| ----- | --------------------- | ----------------------- | --------------- |
| 1     | Stage 1: Pre-Flight   | Verifying prerequisites | Preflight (1/5) |
| 2     | Stage 2: Summary View | Generating summary      | Summary (2/5)   |
| 3     | Stage 3: Detail View  | Generating details      | Detail (3/5)    |
| 4     | Stage 4: Candidates   | Finding candidates      | Candidts (4/5)  |
| 5     | Stage 5: Submissions  | Checking submissions    | Submits (5/5)   |

## Usage

```bash
/eck:project-status                           # Summary dashboard (Stages 1-2)
/eck:project-status --project {KEY}          # Detailed status for one project (Stages 1, 3)
/eck:project-status --candidates             # All pull candidates across projects (Stages 1, 4)
/eck:project-status --submissions            # Upstream submission history (Stages 1, 5)
```

**Read-only** — this skill never modifies any files.

---

## Mode Routing

Parse `$ARGUMENTS` to determine which stages to execute:

| Flags             | Stages to Run | MODE          |
| ----------------- | ------------- | ------------- |
| (none)            | 1, 2          | `summary`     |
| `--project <KEY>` | 1, 3          | `detail`      |
| `--candidates`    | 1, 4          | `candidates`  |
| `--submissions`   | 1, 5          | `submissions` |

Stage 1 always runs. Each subsequent stage checks `MODE` before executing.

---

## Stage 1: Pre-Flight

### Inputs

- `$ARGUMENTS` — flags passed by the user
- `$ECK_HOME/` — templates directory
- `$ECK_HOME/registry.yaml` — project registry

### Activities

1. Determine `MODE` from `$ARGUMENTS`:
   - Contains `--project` → `MODE=detail`, extract `<KEY>` from next argument
   - Contains `--candidates` → `MODE=candidates`
   - Contains `--submissions` → `MODE=submissions`
   - Otherwise → `MODE=summary`

2. Check templates directory exists:

```bash
if [ ! -d ~/.claude/evolv-coder-kit ]; then
  printf '%b\n' "${RED}[!]${RESET} Templates not found at $ECK_HOME/"
  printf '%b\n' "    ${DIM}Run: npx @evolvconsulting/evolv-coder-kit --global${RESET}"
  # STOP — cannot continue
fi
```

3. Check registry exists using `-f` test (not `ls`):

```bash
REGISTRY_EXISTS=false
if [ -f $ECK_HOME/registry.yaml ]; then
  REGISTRY_EXISTS=true
fi
```

4. Check for audit data using `find` (safe for zsh with empty directories):

```bash
AUDIT_COUNT=$(find $ECK_HOME/audits -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
```

5. If no registry AND no audit data, show consolidated "Getting Started" and exit:

```bash
if [ "$REGISTRY_EXISTS" = "false" ] && [ "$AUDIT_COUNT" = "0" ]; then
  printf '%b\n' "${YELLOW}[>]${RESET} No project data found."
  printf '%b\n' ""
  printf '%b\n' "    ${DIM}Getting started:${RESET}"
  printf '%b\n' "    ${DIM}  1. Run /eck:audit-unmanaged-project on a project${RESET}"
  printf '%b\n' "    ${DIM}  2. Run /eck:project-status to see the dashboard${RESET}"
  # STOP — no data to display
fi
```

6. If registry missing but audit data exists, note it and continue:

```bash
if [ "$REGISTRY_EXISTS" = "false" ]; then
  printf '%b\n' "${YELLOW}[>]${RESET} No project registry found."
  printf '%b\n' "    ${DIM}Run /eck:audit-unmanaged-project to initialize the registry.${RESET}"
  printf '%b\n' "    ${DIM}Showing available audit data only.${RESET}"
fi
```

### Outputs

- `MODE` variable set to `summary`, `detail`, `candidates`, or `submissions`
- `REGISTRY_EXISTS` boolean
- `AUDIT_COUNT` integer

### Exit Criteria

- Templates directory confirmed to exist
- MODE determined from arguments
- Registry and audit state assessed

---

## Stage 2: Project Summary (default view)

**Skip if `MODE != summary`:**

```bash
printf '%b\n' "${DIM}[-]${RESET} Stage 2: Summary View — skipped"
```

### Inputs

- `$ECK_HOME/registry.yaml`
- `$ECK_HOME/audits/pull-candidates.md`
- `$ECK_HOME/audits/upstream-submissions.md`
- `~/.claude/evolv-coder-standards/manifest.yaml`

### Activities

1. Read `$ECK_HOME/registry.yaml` and extract:
   - `project_summary` section for aggregate metrics
   - `projects` section for per-project data
   - `pull_candidates_total` count

2. Display dashboard with dynamic padding (box inner width = 53 chars):

```bash
source $ECK_HOME/colors.sh

echo ""
printf '%b\n' "${ORANGE}${BOLD}Project Status${RESET}"
echo ""
printf '%b\n' "Total Projects: {N}"
printf '%b\n' "Average Health: {N}%"
printf '%b\n' "Template Ver: {version}"
printf '%b\n' "Last Audit: {date}"
echo ""
```

3. Display project health with color-coded status symbols:
   - 90-100%: `${GREEN}[x]${RESET}`
   - 70-89%: `${YELLOW}[>]${RESET}`
   - 50-69%: `${YELLOW}[>]${RESET}`
   - <50%: `${RED}[!]${RESET}`

```bash
printf '%b\n' "${ORANGE}${BOLD}Project Health${RESET}"
echo ""
# For each project:
printf '%b\n' "${GREEN}[x]${RESET} {name} ({key})     95%  S:{N} M:{N} O:{N}"
printf '%b\n' "${YELLOW}[>]${RESET} {name} ({key})     72%  S:{N} M:{N} O:{N}"
printf '%b\n' "${RED}[!]${RESET} {name} ({key})     45%  S:{N} M:{N} O:{N}"
echo ""
printf '%b\n' "  ${DIM}S=Synced  M=Modified  O=Outdated${RESET}"
```

4. Display pull candidates summary from `audits/pull-candidates.md`:

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Pull Candidates${RESET}"
echo ""
# For each candidate, use status-based symbols:
# PENDING = [*], SUBMITTED = [>], PULLED = [x]
printf '%b\n' "${CYAN}[*]${RESET} {path}  ${DIM}from: {project}  improvement  high${RESET}"
printf '%b\n' "${YELLOW}[>]${RESET} {path}  ${DIM}from: {project}  custom  medium${RESET}"
echo ""
printf '%b\n' "  ${DIM}Convergent evolution: {N} items in 2+ projects${RESET}"
```

**If pull-candidates.md doesn't exist:**

```bash
printf '%b\n' "${DIM}[-]${RESET} No pull candidates tracked yet."
```

5. Display upstream submissions summary from `audits/upstream-submissions.md`:

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Upstream Submissions${RESET}"
echo ""
# For each submission, use status symbols:
# Open = [>], Merged = [x], Closed = [-]
printf '%b\n' "${YELLOW}[>]${RESET} #{N}  ${DIM}{date}  Open   {N} files${RESET}"
printf '%b\n' "${GREEN}[x]${RESET} #{N}  ${DIM}{date}  Merged {N} files${RESET}"
```

**If upstream-submissions.md doesn't exist:**

```bash
printf '%b\n' "${DIM}[-]${RESET} No upstream submissions yet."
```

6. Display standards status. Update the standards cache with suppressed output:

```bash
if git -C ~/.claude/evolv-coder-standards pull --ff-only > /dev/null 2>&1; then
  printf '%b\n' "${GREEN}[x]${RESET} Standards cache updated"
else
  printf '%b\n' "${YELLOW}[>]${RESET} Standards cache update skipped (offline or conflict)"
fi
```

```bash
cat ~/.claude/evolv-coder-standards/manifest.yaml
```

If the cache does not exist and `gh` CLI is available:

```bash
gh repo clone evolvconsulting/evolv-coder-standards ~/.claude/evolv-coder-standards
```

Display standards with status symbols:

- OK: `${GREEN}[x]${RESET}`
- STALE: `${YELLOW}[>]${RESET}`
- MISSING: `${RED}[!]${RESET}`

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Standards${RESET}"
echo ""
printf '%b\n' "${GREEN}[x]${RESET} {name}  ${DIM}{local_version} -> {latest_version}  OK${RESET}"
printf '%b\n' "${YELLOW}[>]${RESET} {name}  ${DIM}{local_version} -> {latest_version}  STALE${RESET}"
printf '%b\n' "${RED}[!]${RESET} {name}  ${DIM}-- -> {latest_version}  MISSING${RESET}"
echo ""
printf '%b\n' "  ${DIM}Source: github.com/evolvconsulting/evolv-coder-standards${RESET}"
printf '%b\n' "  ${DIM}Stale: {N} -- run /eck:pull-from-standards to update${RESET}"
```

Use the manifest to compare against each project's standards versions from the registry.

**If cache missing and unreachable:** Show cached standards info from registry only.

7. Generate actionable recommendations:

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Recommendations${RESET}"
echo ""
printf '%b\n' "${YELLOW}[>]${RESET} {N} projects below 70% health"
printf '%b\n' "    ${DIM}Run /eck:pull-from-global-catalog to update${RESET}"
printf '%b\n' "${CYAN}[*]${RESET} {N} pull candidates pending"
printf '%b\n' "    ${DIM}Run /eck:push-to-user-catalog to harvest${RESET}"
printf '%b\n' "${YELLOW}[>]${RESET} {N} projects not audited in 7+ days"
printf '%b\n' "    ${DIM}Run /eck:audit-current-project${RESET}"
printf '%b\n' "${CYAN}[*]${RESET} {N} upstream submissions open"
printf '%b\n' "    ${DIM}Check PR status${RESET}"
printf '%b\n' "${YELLOW}[>]${RESET} {N} projects with stale standards"
printf '%b\n' "    ${DIM}Run /eck:pull-from-standards to update${RESET}"
```

### Outputs

- Summary dashboard displayed to terminal
- Standards cache updated (if reachable)

### Exit Criteria

- All summary sections rendered
- Recommendations generated from live data

---

## Stage 3: Project Detail (`--project <KEY>`)

**Skip if `MODE != detail`:**

```bash
printf '%b\n' "${DIM}[-]${RESET} Stage 3: Detail View — skipped"
```

**Skip if `REGISTRY_EXISTS == false`:**

```bash
printf '%b\n' "${RED}[!]${RESET} Registry required for project detail view."
printf '%b\n' "    ${DIM}Run /eck:audit-unmanaged-project to create the registry.${RESET}"
```

### Inputs

- `$ECK_HOME/registry.yaml`
- `$ECK_HOME/audits/{project-name}-*.md` (most recent)

### Activities

1. Look up `<KEY>` in `$ECK_HOME/registry.yaml`
2. Find most recent audit report using `find` (safe for zsh):

```bash
LATEST_AUDIT=$(find $ECK_HOME/audits -maxdepth 1 -name "${PROJECT_NAME}-*.md" 2>/dev/null | sort | tail -1)
```

**If project not found in registry:**

```bash
printf '%b\n' "${RED}[!]${RESET} Project '${KEY}' not found in registry."
printf '%b\n' "    ${DIM}Known projects: {list of registered project keys}${RESET}"
printf '%b\n' "    ${DIM}Run /eck:audit-unmanaged-project to register it.${RESET}"
```

3. Display project detail with dynamic padding:

```bash
source $ECK_HOME/colors.sh

echo ""
printf '%b\n' "${ORANGE}${BOLD}Project: {name}${RESET}"
echo ""
printf '%b\n' "Key: {key}"
printf '%b\n' "Path: {path}"
printf '%b\n' "Health: {N}%"
printf '%b\n' "Template Ver: {deployed_version}"
printf '%b\n' "Latest Ver: {canonical_version}"
printf '%b\n' "Divergence: {standard}"
printf '%b\n' "Last Audit: {date}"
printf '%b\n' "Catalog: {yes/no}"
echo ""
```

4. Display component status breakdown:

```bash
printf '%b\n' "${ORANGE}${BOLD}Component Status${RESET}"
echo ""
# For each category, show counts with color coding:
printf '%b\n' "  ${BOLD}root_files${RESET}     S:${GREEN}{N}${RESET}  M:${YELLOW}{N}${RESET}  O:${YELLOW}{N}${RESET}  X:${RED}{N}${RESET}  C:${CYAN}{N}${RESET}"
printf '%b\n' "  ${BOLD}config${RESET}         S:${GREEN}{N}${RESET}  M:${YELLOW}{N}${RESET}  O:${YELLOW}{N}${RESET}  X:${RED}{N}${RESET}  C:${CYAN}{N}${RESET}"
printf '%b\n' "  ${BOLD}agents${RESET}         S:${GREEN}{N}${RESET}  M:${YELLOW}{N}${RESET}  O:${YELLOW}{N}${RESET}  X:${RED}{N}${RESET}  C:${CYAN}{N}${RESET}"
printf '%b\n' "  ${BOLD}skills${RESET}         S:${GREEN}{N}${RESET}  M:${YELLOW}{N}${RESET}  O:${YELLOW}{N}${RESET}  X:${RED}{N}${RESET}  C:${CYAN}{N}${RESET}"
printf '%b\n' "  ${BOLD}hooks${RESET}          S:${GREEN}{N}${RESET}  M:${YELLOW}{N}${RESET}  O:${YELLOW}{N}${RESET}  X:${RED}{N}${RESET}  C:${CYAN}{N}${RESET}"
printf '%b\n' "  ${BOLD}primitives${RESET}     S:${GREEN}{N}${RESET}  M:${YELLOW}{N}${RESET}  O:${YELLOW}{N}${RESET}  X:${RED}{N}${RESET}  C:${CYAN}{N}${RESET}"
printf '%b\n' "  ${BOLD}context${RESET}        S:${GREEN}{N}${RESET}  M:${YELLOW}{N}${RESET}  O:${YELLOW}{N}${RESET}  X:${RED}{N}${RESET}  C:${CYAN}{N}${RESET}"
echo ""
printf '%b\n' "  ${DIM}S=Synced  M=Modified  O=Outdated  X=Missing  C=Custom${RESET}"
```

5. Display modified items from most recent audit report:

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Modified Items${RESET}"
echo ""
# Pull candidates shown with [*], non-candidates with [-]
printf '%b\n' "${CYAN}[*]${RESET} {file}"
printf '%b\n' "    ${DIM}improvement  high  4 commits  {date}${RESET}"
printf '%b\n' "${DIM}[-]${RESET} {file}"
printf '%b\n' "    ${DIM}project-specific  --  2 commits  {date}${RESET}"
```

6. Display sync history from the registry's `sync_history` for this project:

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Sync History${RESET}"
echo ""
# For each history entry:
printf '%b\n' "${GREEN}[x]${RESET} {date}  audit"
printf '%b\n' "    ${DIM}/eck:audit-current-project  {N} synced, {N} modified${RESET}"
printf '%b\n' "${GREEN}[x]${RESET} {date}  push"
printf '%b\n' "    ${DIM}/eck:pull-from-global-catalog  Updated {N} components${RESET}"
printf '%b\n' "${GREEN}[x]${RESET} {date}  pull"
printf '%b\n' "    ${DIM}/eck:push-to-user-catalog  Pulled {N} items${RESET}"
printf '%b\n' "${GREEN}[x]${RESET} {date}  upstream-submit"
printf '%b\n' "    ${DIM}/eck:submit-to-repo  PR #{N}${RESET}"
```

7. Display hook wiring issues from audit report:

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Hook Wiring${RESET}"
echo ""
# For each issue:
printf '%b\n' "${RED}[!]${RESET} {type}  ${DIM}{hook}  {event}${RESET}"
printf '%b\n' "    ${DIM}{action}${RESET}"
```

**If no issues:**

```bash
printf '%b\n' "${GREEN}[x]${RESET} All hooks properly wired."
```

8. Display standards freshness with status symbols:
   - OK: `${GREEN}[x]${RESET}`
   - STALE: `${YELLOW}[>]${RESET}`
   - MISSING: `${RED}[!]${RESET}`

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Standards Freshness${RESET}"
echo ""
printf '%b\n' "${GREEN}[x]${RESET} core-standards           1.0.0 -> 1.0.0   OK"
printf '%b\n' "${YELLOW}[>]${RESET} frontend-standards       1.0.0 -> 1.1.0   STALE"
printf '%b\n' "${GREEN}[x]${RESET} backend-standards        1.0.0 -> 1.0.0   OK"
printf '%b\n' "${GREEN}[x]${RESET} database-standards       1.0.0 -> 1.0.0   OK"
printf '%b\n' "${RED}[!]${RESET} devops-standards         --    -> 1.0.0   MISSING"
printf '%b\n' "${RED}[!]${RESET} documentation-standards  --    -> 1.0.0   MISSING"
echo ""
printf '%b\n' "  ${DIM}Run /eck:pull-from-standards to update.${RESET}"
```

### Outputs

- Full project detail displayed to terminal

### Exit Criteria

- All detail sections rendered for the requested project
- Standards freshness assessed

---

## Stage 4: Candidates View (`--candidates`)

**Skip if `MODE != candidates`:**

```bash
printf '%b\n' "${DIM}[-]${RESET} Stage 4: Candidates — skipped"
```

### Inputs

- `$ECK_HOME/audits/pull-candidates.md`

### Activities

1. Read `$ECK_HOME/audits/pull-candidates.md`.

**If file doesn't exist:**

```bash
printf '%b\n' "${YELLOW}[>]${RESET} No pull candidates file found."
printf '%b\n' "    ${DIM}Run /eck:audit-current-project to identify${RESET}"
printf '%b\n' "    ${DIM}pull candidates, then /eck:push-to-user-catalog${RESET}"
printf '%b\n' "    ${DIM}to begin tracking them.${RESET}"
```

2. Display each status group with appropriate symbols:

```bash
source $ECK_HOME/colors.sh

echo ""
printf '%b\n' "${ORANGE}${BOLD}Pull Candidates${RESET}"
echo ""
printf '%b\n' "${BOLD}PENDING (${N})${RESET}"
printf '%b\n' "${CYAN}[*]${RESET} {path}  ${DIM}from: {project}  improvement  high${RESET}"
echo ""
printf '%b\n' "${BOLD}IN-PROGRESS (${N})${RESET}"
printf '%b\n' "${YELLOW}[>]${RESET} {path}  ${DIM}from: {project}  {operator}  {date}${RESET}"
echo ""
printf '%b\n' "${BOLD}SUBMITTED (${N})${RESET}"
printf '%b\n' "${YELLOW}[>]${RESET} {path}  ${DIM}from: {project}  PR #{N}  {date}${RESET}"
echo ""
printf '%b\n' "${BOLD}PULLED (${N})${RESET}"
printf '%b\n' "${GREEN}[x]${RESET} {path}  ${DIM}from: {project}  {version}  {date}${RESET}"
echo ""
printf '%b\n' "${BOLD}REJECTED (${N})${RESET}"
printf '%b\n' "${DIM}[-]${RESET} {path}  ${DIM}from: {project}  {reason}  {date}${RESET}"
```

3. Display convergent evolution analysis:

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Convergent Evolution${RESET}"
echo ""
printf '%b\n' "${CYAN}[*]${RESET} {path}"
printf '%b\n' "    ${DIM}{project1}, {project2}  confidence: high${RESET}"
echo ""
printf '%b\n' "  ${DIM}Strong canonicalization candidates --${RESET}"
printf '%b\n' "  ${DIM}multiple projects developed the same improvement.${RESET}"
```

4. Display recommended actions:

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Recommended Actions${RESET}"
echo ""
printf '%b\n' "${YELLOW}[>]${RESET} High-confidence PENDING items"
printf '%b\n' "    ${DIM}Run /eck:push-to-user-catalog to harvest${RESET}"
printf '%b\n' "${CYAN}[*]${RESET} SUBMITTED items"
printf '%b\n' "    ${DIM}Check PR status via tracker:pr-view (tracker:router)${RESET}"
printf '%b\n' "${YELLOW}[>]${RESET} Convergent evolution items"
printf '%b\n' "    ${DIM}Prioritize for canonicalization${RESET}"
```

### Outputs

- Candidates dashboard displayed by status group
- Convergent evolution analysis displayed

### Exit Criteria

- All candidate status groups rendered
- Recommended actions generated

---

## Stage 5: Submissions View (`--submissions`)

**Skip if `MODE != submissions`:**

```bash
printf '%b\n' "${DIM}[-]${RESET} Stage 5: Submissions — skipped"
```

### Inputs

- `$ECK_HOME/audits/upstream-submissions.md`
- `gh` CLI (optional, for live PR status)

### Activities

1. Read `$ECK_HOME/audits/upstream-submissions.md`.

**If file doesn't exist:**

```bash
printf '%b\n' "${DIM}[-]${RESET} No upstream submissions found."
printf '%b\n' "    ${DIM}Run /eck:submit-to-repo to submit template${RESET}"
printf '%b\n' "    ${DIM}improvements to the upstream repository.${RESET}"
```

2. Display submissions with status-based symbols:

```bash
source $ECK_HOME/colors.sh

echo ""
printf '%b\n' "${ORANGE}${BOLD}Upstream Submissions${RESET}"
echo ""
# For each submission, status-based symbols:
printf '%b\n' "${YELLOW}[>]${RESET} #{N}  ${DIM}{date}  {branch}  {N} files  {categories}${RESET}"
printf '%b\n' "${GREEN}[x]${RESET} #{N}  ${DIM}{date}  {branch}  {N} files  {categories}${RESET}"
```

3. If `gh` CLI is available, check live status for each open submission:

```bash
gh pr view {PR_NUMBER} --repo evolvconsulting/evolv-coder-kit --json state,mergeable,reviewDecision
```

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Live PR Status${RESET}"
echo ""
printf '%b\n' "${YELLOW}[>]${RESET} #{N}  ${DIM}open  mergeable: yes  approved${RESET}"
printf '%b\n' "${GREEN}[x]${RESET} #{N}  ${DIM}merged${RESET}"
```

**If `gh` not available:**

```bash
printf '%b\n' "${DIM}[-]${RESET} Install gh CLI to see live PR status."
printf '%b\n' "    ${DIM}Showing cached status from submissions log.${RESET}"
```

4. Display submission statistics with dynamic padding:

```bash
echo ""
printf '%b\n' "${ORANGE}${BOLD}Submission Stats${RESET}"
echo ""
printf '%b\n' "Total: {N} submissions"
printf '%b\n' "Open PRs: {N}"
printf '%b\n' "Merged PRs: {N}"
printf '%b\n' "Files Submitted: {N}"
printf '%b\n' "First: {date}"
printf '%b\n' "Latest: {date}"
echo ""
```

### Outputs

- Submissions dashboard displayed to terminal
- Live PR status checked (if `gh` available)

### Exit Criteria

- All submission sections rendered
- Statistics box displayed

---

## Error Handling

Reference the `output:error-handler` primitive for error format conventions.

| Scenario                          | Behavior                        |
| --------------------------------- | ------------------------------- |
| Templates not installed           | Stop with install instructions  |
| Registry corrupt or unparseable   | Warn and suggest regeneration   |
| No audit data available           | Show "Getting Started" guidance |
| Project key not found (--project) | List known keys, suggest audit  |

At completion (success or error), always reset the statusline:

```bash
bash $ECK_HOME/update-stage.sh
```

---

## Related Documents

- [Catalog]($ECK_HOME/global-catalog.yaml) - Canonical source of truth
- [/eck:audit-unmanaged-project skill](../audit-unmanaged-project/SKILL.md) - Generates audit data (prerequisite)
- [/eck:push-to-user-catalog skill](../push-to-user-catalog/SKILL.md) - Push improvements from projects to catalog
- [/eck:pull-from-global-catalog skill](../pull-from-global-catalog/SKILL.md) - Pull catalog updates into projects
- [/eck:submit-to-repo skill](../submit-to-repo/SKILL.md) - Submit catalog improvements to GitHub
