GitHub
npm
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
📖Dependencies
Vulnerable + outdated
🐛Issues
Open + critical + bugs
🔀Pull Requests
Review status + conflicts
🔴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