Open Source · MIT License

PulseTel

Real-time project telemetry for AI agents.
One command. Full picture.

$ npx pulsetel-cli check

The Problem

AI agents assessing project health have two options today: raw API wrappers that require 5+ calls and manual interpretation, or enterprise platforms behind paywalls. Neither gives you prioritised, actionable answers.

❌ Without PulseTel

5 API calls, still guessing

Check CI → check deps → check endpoints → check issues → check PRs. Parse different schemas. Cross-reference manually. No trend data.

❌ Raw data, no priority

"42 open issues" — now what?

GitHub MCP gives you counts. Datadog gives you dashboards. Neither tells your agent what to fix first.

✅ With PulseTel

One call, ranked actions

pulsetel_recommend returns a prioritised list: what's broken, what's degrading, what to fix right now — with severity, confidence, and context.

✅ Agent-first by design

Structured, not pretty-printed

Every response includes actionable, severity, confidence, context. No interpretation needed.

🛠️ 9 Check Modules

🔄
CI
Flakiness score + trend
🚀
Deploy
Deployment status
🌐
Health
Latency + baseline
📖
Dependencies
Vulnerable + outdated
📊
Coverage
% vs threshold
🐛
Issues
Open + critical + bugs
🔀
Pull Requests
Review status + conflicts
📋
Git
Branch + divergence
🔴
Sentry
Errors + affected users

🤖 MCP Server — 12 Agent Tools

Start the MCP server with pulsetel mcp and query via HTTP. Every response is agent-first: structured, prioritised, actionable.

# Full health check with trends
GET /?tool=pulsetel_check&include_trends=true

# Prioritised action list — the killer feature
GET /?tool=pulsetel_recommend

# CI flakiness + trend direction
GET /?tool=pulsetel_ci

# Anomaly detection (2σ from rolling mean)
GET /?tool=pulsetel_anomalies

# Trend analysis for a specific check
GET /?tool=pulsetel_trends&check_type=deps&window=14
GET /?tool=pulsetel_status
GET /?tool=pulsetel_quick
Sample response — agent-first structure
{
  "type": "deps",
  "status": "warning",
  "severity": "warning",
  "confidence": "high",
  "actionable": "Update 5 outdated packages — run npm update",
  "context": "Outdated or vulnerable dependencies are security risks",
  "message": "5 outdated, 2 vulnerable",
  "details": { "outdated": 5, "vulnerable": 2, "total": 48 }
}

📈 Trend Analysis & Anomaly Detection

Every pulsetel check saves a history entry. Over time, PulseTel detects degradation before it becomes an outage.

$ pulsetel trends

📈 ci: improving (delta: -15.00, velocity: -3.00/run)
📉 deps: degrading ⚠️ ANOMALY
   Mean: 4.33, σ: 1.53, current: 7.00 (z-score: 1.74)
➡️ git: stable
📈 coverage: improving (+2.3%/run)

🔔 Webhook Alerts

HMAC-SHA256 signed push notifications when things go wrong. No polling required.

🔴

critical

Any check with error status fires immediately.

📉

degrading

Trend direction is getting worse over time.

anomaly

Metric exceeds 2σ from rolling mean.

🔄

flaky

CI flakiness score exceeds 30%.

🆚 Comparison

PulseTel GitHub MCP Datadog MCP
Single-call health check (5+ calls) (paid)
Agent-first responses (raw data) (dashboards)
Ranked recommendations
Trend analysis
Anomaly detection
Webhook alerts
No account required
Open source (MIT)
Test coverage (638 tests, 81.5%)
DI-first architecture

🧪 620 Tests · 81.5% Coverage

Every module uses dependency injection — zero module-level mocking. 8 check classes, Scanner, ConfigLoader, Webhooks, Trends, CLI handlers, MCP server — all tested through injected deps.

638 tests across 38 files, all passing
81.5% statement coverage, 85.7% function coverage
DI-first — constructor injection, no vi.mock
TDD — every feature starts with a failing test

🔴 Sentry Error Tracking

Track production errors directly in PulseTel. Configure your Sentry org + project, and the pulsetel_sentry tool returns unresolved issues, severity breakdown, affected users, and release attribution — all with actionable recommendations.

# Configure in .pulsetel.yml
sentry:
  organization: my-org
  project: my-project

# Query via MCP
GET /?tool=pulsetel_sentry

🔒 Security Hardened

No shell injection — execFileSync only, no shell spawning
SSRF protection — IPv4 + IPv6, DNS validation, no redirects
No token leaks — env vars only, init never writes secrets
YAML hardening — schema: 'core', 64KB limit, regex validation
Path traversal blocking — MCP dir param validated
DoS protection — 20 endpoint max, bounded timeouts

📡 OpenTelemetry Integration

Export project health as OTel-compliant telemetry — traces, metrics, and logs. Plug straight into Grafana, Jaeger, Datadog, or any OTel Collector.

Traces — pulsetel.check root span + per-module child spans with severity, confidence, duration
Metrics — Health scores (0-100), anomaly counters, vulnerability counts, CI flakiness gauges
Logs — Structured anomaly events, degrading trends, flaky CI alerts
OTLP HTTP — Exports to localhost:4318 or any OTel Collector endpoint
File export — NDJSON to .pulsetel/otel/ for offline ingestion
Optional deps — Install OTel packages and it activates; skip them and it works without
# One-shot OTel export
pulsetel check --otel

# Or auto-enable in .pulsetel.yml
otel:
  enabled: true
  endpoint: http://localhost:4318
  protocol: http

🚀 Get Started

# Run immediately — no install needed
npx pulsetel-cli check

# Or install globally
npm install -g pulsetel-cli
pulsetel init          # Generate config (auto-detects GitHub repo)
pulsetel check         # Run all checks
pulsetel trends       # See trends over time
pulsetel anomalies    # Detect anomalies
pulsetel mcp          # Start MCP server for agents