ln-774-healthcheck-setup

Configures health check endpoints for Kubernetes readiness/liveness/startup probes. Use when deploying to Kubernetes.

310 stars

Best use case

ln-774-healthcheck-setup is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Configures health check endpoints for Kubernetes readiness/liveness/startup probes. Use when deploying to Kubernetes.

Teams using ln-774-healthcheck-setup should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/ln-774-healthcheck-setup/SKILL.md --create-dirs "https://raw.githubusercontent.com/levnikolaevich/claude-code-skills/main/skills-catalog/ln-774-healthcheck-setup/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/ln-774-healthcheck-setup/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How ln-774-healthcheck-setup Compares

Feature / Agentln-774-healthcheck-setupStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Configures health check endpoints for Kubernetes readiness/liveness/startup probes. Use when deploying to Kubernetes.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# ln-774-healthcheck-setup

**Type:** L3 Worker
**Category:** 7XX Project Bootstrap

Configures health check endpoints for Kubernetes probes and monitoring.

---

## Overview

| Aspect | Details |
|--------|---------|
| **Input** | Context Store from ln-770 |
| **Output** | Health check endpoints and Kubernetes probe configuration |
| **Stacks** | .NET (AspNetCore.Diagnostics.HealthChecks), Python (FastAPI routes) |

---

## Phase 1: Receive Context + Identify Dependencies

Accept Context Store and scan for dependencies to monitor.

**Required Context:**
- `STACK`: .NET or Python
- `PROJECT_ROOT`: Project directory path

**Idempotency Check:**
- .NET: Grep for `AddHealthChecks` or `MapHealthChecks`
- Python: Grep for `/health` route
- If found: Return `{ "status": "skipped" }`

**Dependency Detection:**

| Dependency | .NET Detection | Python Detection |
|------------|----------------|------------------|
| PostgreSQL | `Npgsql` in csproj | `psycopg2` or `asyncpg` in requirements |
| MySQL | `MySql.Data` in csproj | `mysql-connector-python` in requirements |
| Redis | `StackExchange.Redis` in csproj | `redis` in requirements |
| RabbitMQ | `RabbitMQ.Client` in csproj | `pika` or `aio-pika` in requirements |
| MongoDB | `MongoDB.Driver` in csproj | `pymongo` in requirements |

---

## Phase 2: Design Health Check Strategy

Define three types of health endpoints per Kubernetes best practices.

### Endpoint Types

| Endpoint | Probe Type | Purpose | Checks |
|----------|------------|---------|--------|
| `/health/live` | Liveness | Is app alive? | App responds (no dependency checks) |
| `/health/ready` | Readiness | Can app serve traffic? | All dependencies healthy |
| `/health/startup` | Startup (K8s 1.16+) | Is app initialized? | Initial warmup complete |

### When Each Probe Fails

| Probe | Failure Action | Kubernetes Behavior |
|-------|----------------|---------------------|
| Liveness | Container restart | kubelet restarts container |
| Readiness | Remove from service | Traffic stopped, no restart |
| Startup | Delay other probes | Liveness/Readiness paused |

---

## Phase 3: Research Health Check Patterns

Use MCP tools for current documentation.

**For .NET:**
```
MCP ref: "ASP.NET Core health checks Kubernetes probes"
Context7: /dotnet/aspnetcore
```

**For Python:**
```
MCP ref: "FastAPI health check endpoint Kubernetes"
Context7: /tiangolo/fastapi
```

**Key Patterns to Research:**
1. Database health checks (connection pool)
2. Redis connectivity check
3. Custom health check implementation
4. Health check response writer customization

---

## Phase 4: Configure Kubernetes Probes

Determine probe timing based on application characteristics.

### Probe Configuration

| Parameter | Liveness | Readiness | Startup |
|-----------|----------|-----------|---------|
| `initialDelaySeconds` | 10 | 5 | 0 |
| `periodSeconds` | 10 | 5 | 5 |
| `timeoutSeconds` | 5 | 3 | 3 |
| `failureThreshold` | 3 | 3 | 30 |
| `successThreshold` | 1 | 1 | 1 |

**Startup Probe Calculation:**
```
Max startup time = initialDelaySeconds + (periodSeconds × failureThreshold)
Default: 0 + (5 × 30) = 150 seconds
```

---

## Phase 5: Generate Implementation

### .NET Output Files

| File | Purpose |
|------|---------|
| `Extensions/HealthCheckExtensions.cs` | Health check registration |
| `HealthChecks/StartupHealthCheck.cs` | Custom startup check |

**Generation Process:**
1. Use MCP ref for current ASP.NET Core health checks API
2. Generate HealthCheckExtensions with:
   - AddHealthChecks registration
   - Database health check (if detected)
   - Redis health check (if detected)
   - Custom StartupHealthCheck
3. Configure three endpoints with proper tags

**Packages to Add:**
- `AspNetCore.HealthChecks.NpgSql` (if PostgreSQL)
- `AspNetCore.HealthChecks.Redis` (if Redis)
- `AspNetCore.HealthChecks.MySql` (if MySQL)

**Registration Code:**
```csharp
builder.Services.AddHealthCheckServices(builder.Configuration);
// ...
app.MapHealthCheckEndpoints();
```

### Python Output Files

| File | Purpose |
|------|---------|
| `routes/health.py` | Health check router |
| `services/health_checker.py` | Dependency health checks |

**Generation Process:**
1. Use MCP ref for FastAPI health patterns
2. Generate health router with:
   - /health/live endpoint (simple)
   - /health/ready endpoint (with dependency checks)
   - /health/startup endpoint
3. Generate health_checker service for dependency verification

**Registration Code:**
```python
from routes.health import health_router
app.include_router(health_router)
```

### Kubernetes Manifest Snippet

Generate for inclusion in deployment.yaml:

```yaml
livenessProbe:
  httpGet:
    path: /health/live
    port: 5000
  initialDelaySeconds: 10
  periodSeconds: 10
  timeoutSeconds: 5
  failureThreshold: 3

readinessProbe:
  httpGet:
    path: /health/ready
    port: 5000
  initialDelaySeconds: 5
  periodSeconds: 5
  timeoutSeconds: 3
  failureThreshold: 3

startupProbe:
  httpGet:
    path: /health/startup
    port: 5000
  periodSeconds: 5
  failureThreshold: 30
```

---

## Phase 6: Validate

**Validation Steps:**

1. **Syntax check:**
   - .NET: `dotnet build --no-restore`
   - Python: `python -m py_compile routes/health.py`

2. **Endpoint test:**
   ```bash
   curl http://localhost:5000/health/live
   curl http://localhost:5000/health/ready
   curl http://localhost:5000/health/startup
   ```

3. **Verify response format:**
   ```json
   {
     "status": "Healthy",
     "checks": {
       "database": { "status": "Healthy", "duration": "00:00:00.0234" },
       "redis": { "status": "Healthy", "duration": "00:00:00.0012" }
     },
     "totalDuration": "00:00:00.0250"
   }
   ```

4. **Dependency failure test:**
   - Stop database
   - Verify `/health/ready` returns 503
   - Verify `/health/live` still returns 200

---

## Return to Coordinator

```json
{
  "status": "success",
  "files_created": [
    "Extensions/HealthCheckExtensions.cs",
    "HealthChecks/StartupHealthCheck.cs"
  ],
  "packages_added": [
    "AspNetCore.HealthChecks.NpgSql"
  ],
  "registration_code": "builder.Services.AddHealthCheckServices(configuration);",
  "message": "Configured health checks with liveness, readiness, and startup probes"
}
```

---

## Reference Links

- [ASP.NET Core Health Checks](https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks)
- [Kubernetes Probes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
- [AWS EKS Health Check Best Practices](https://docs.aws.amazon.com/eks/latest/best-practices/application.html)

---

## Critical Rules

- **Three separate endpoints** — `/health/live`, `/health/ready`, `/health/startup` per Kubernetes best practices
- **Liveness must not check dependencies** — only confirms app is alive (avoids cascade restarts)
- **Readiness checks all dependencies** — DB, Redis, RabbitMQ connectivity verified
- **Auto-detect dependencies from project files** — scan csproj/requirements for known packages
- **Idempotent** — if `AddHealthChecks`/`MapHealthChecks` or `/health` route exists, return `status: "skipped"`

## Definition of Done

- [ ] Context Store received (stack, project root)
- [ ] Dependencies detected (PostgreSQL, MySQL, Redis, RabbitMQ, MongoDB)
- [ ] Health check endpoints generated (live, ready, startup) for detected stack
- [ ] Kubernetes probe manifest snippet generated with proper timing parameters
- [ ] Syntax validated (`dotnet build` or `py_compile`)
- [ ] Structured JSON response returned to ln-770 coordinator

---

**Version:** 2.0.0
**Last Updated:** 2026-01-10

Related Skills

ln-772-error-handler-setup

310
from levnikolaevich/claude-code-skills

Configures global exception handling middleware. Use when adding centralized error handling to .NET or Python backends.

ln-770-crosscutting-setup

310
from levnikolaevich/claude-code-skills

Sets up logging, error handling, CORS, health checks, and API docs. Use when adding cross-cutting concerns to backend projects.

ln-760-security-setup

310
from levnikolaevich/claude-code-skills

Sets up security scanning for secrets and dependency vulnerabilities. Use when adding security infrastructure to a project.

ln-742-precommit-setup

310
from levnikolaevich/claude-code-skills

Configures Husky, lint-staged, commitlint, and Python pre-commit hooks. Use when adding Git hook automation to a project.

ln-740-quality-setup

310
from levnikolaevich/claude-code-skills

Sets up linters, pre-commit hooks, and test infrastructure. Use when adding code quality tooling to a project.

ln-730-devops-setup

310
from levnikolaevich/claude-code-skills

Sets up Docker, CI/CD, and environment configuration with auto-detection. Use when adding DevOps infrastructure to a project.

ln-010-dev-environment-setup

310
from levnikolaevich/claude-code-skills

Installs agents, configures MCP servers, syncs configs, creates and audits instructions. Use after setup or when agents/MCP need alignment.

ln-914-community-responder

310
from levnikolaevich/claude-code-skills

Responds to unanswered GitHub discussions and issues with codebase-informed replies. Use when clearing community question backlog.

ln-913-community-debater

310
from levnikolaevich/claude-code-skills

Launches RFC and debate discussions on GitHub. Use when proposing changes that need community input or voting.

ln-912-community-announcer

310
from levnikolaevich/claude-code-skills

Composes and publishes announcements to GitHub Discussions. Use when sharing releases, updates, or news with the community.

ln-911-github-triager

310
from levnikolaevich/claude-code-skills

Produces prioritized triage report from open GitHub issues, PRs, and discussions. Use when reviewing community backlog.

ln-910-community-engagement

310
from levnikolaevich/claude-code-skills

Analyzes community health and delegates engagement tasks. Use when managing GitHub issues, discussions, and announcements.