promql-cli
samber/cc-skills
CLI for querying Prometheus and PromQL-compatible engines with instant/range queries, metric discovery, and multiple output formats.
What is promql-cli?
promql-cli is a Go command-line tool for querying Prometheus, Thanos, Cortex, VictoriaMetrics, Grafana Mimir, and Grafana Tempo. Use it to execute PromQL queries, discover metrics and labels, troubleshoot performance issues, investigate latency/error rates, and analyze time series data.
- Execute instant and range PromQL queries against Prometheus-compatible backends
- Discover available metrics, labels, and metric metadata (type, help text)
- Output results in multiple formats: table, CSV, JSON, and ASCII graphs
- Visualize time series trends with terminal-based sparkline graphs
- Query multiple Prometheus hosts using configuration files with authentication support
How to install promql-cli
npx skills add https://github.com/samber/cc-skills --skill promql-cli- promql-cli binary installed (via Go or Homebrew)
- jq installed for JSON processing
- Prometheus or compatible backend (Thanos, Cortex, VictoriaMetrics, Grafana Mimir, Grafana Tempo) accessible and configured
- Configuration file (~/.promql-cli.yaml) with host and authentication details if required
How to use promql-cli
- 1.Verify connectivity by running `promql 'up'` to confirm your Prometheus host is configured
- 2.Discover available metrics with `promql metrics` or search for specific ones with `promql metrics | grep pattern`
- 3.List labels for a metric using `promql labels <metric_name>` to understand available dimensions
- 4.Run an instant query with `promql 'your_promql_expression'` to get current values
- 5.Run a range query with `promql 'expression' --start 1h` to see trends over time; use `--output graph` for ASCII visualization
- 6.Use `--output csv` or `--output json` for programmatic processing when needed
- 7.Target a specific Prometheus host with `--config ~/.promql-cli-prod.yaml` if managing multiple environments
Use cases
- Investigating latency spikes or error rate increases in production systems
- Discovering which metrics are available and their cardinality before running expensive queries
- Analyzing saturation metrics (CPU, memory, disk) across instances to identify bottlenecks
- Comparing per-instance metrics to isolate anomalies hidden in aggregated views
- Visualizing metric trends over time using ASCII graphs for quick pattern recognition
- SRE and DevOps engineers troubleshooting production incidents
- Backend engineers investigating application performance and observability data
- On-call responders needing quick metric queries without opening Grafana
- Platform engineers analyzing system health and resource utilization
promql-cli FAQ
Create ~/.promql-cli.yaml with your host URL and authentication details (bearer token or basic auth). See references/installation.md for exact format. Never pass credentials as CLI arguments; store them in the config file with chmod 600 permissions.
Instant queries return a single value at the current time (or specified time). Range queries return values over a time interval and are best visualized with `--output graph` to see trends. Use `--start` flag to specify the time window (e.g., `--start 1h` for the last hour).
Counters only increase over time; their absolute value is meaningless. `rate()` calculates the per-second change rate, which reveals actual throughput and performance. Always wrap counters in `rate()` with a time window like `rate(http_requests_total[5m])`.
Reduce scope by adding label filters early in the query, shortening the `--start` window, or wrapping the query in an aggregation like `sum()`. Check cardinality first with `count(metric_name)` to ensure you're not scanning millions of time series.
Use `--output graph` for range queries to visualize trends as ASCII sparklines—it's compact and reveals patterns quickly. Use `--output table` to inspect specific values in a narrow time window. Use `--output json` or `--output csv` only when you need to process results programmatically.
Full instructions (SKILL.md)
Source of truth, from samber/cc-skills.
name: promql-cli description: CLI for querying Prometheus and PromQL-compatible engines (Thanos, Cortex, VictoriaMetrics, Grafana Mimir, Grafana Tempo...) — instant queries, range queries, metric discovery (metrics/labels/meta subcommands), output formats (table/csv/json/graph). Apply when executing PromQL queries, troubleshooting performance issues on a software having observability, investigating latency/error rates/saturation, or analyzing time series data. license: MIT compatibility: Requires promql-cli and jq user-invocable: true metadata: author: samber version: "1.2.0" openclaw: emoji: "📊" homepage: https://github.com/samber/cc-skills install: - kind: go package: github.com/nalbury/promql-cli bins: [promql] - kind: brew formula: jq bins: [jq] requires: bins: - promql - jq skill-library-version: "0.3.0" allowed-tools: Read Edit Write Glob Grep Agent Bash(promql:*) mcp__context7__resolve-library-id mcp__context7__query-docs AskUserQuestion
promql-cli — Prometheus Query CLI Skill
promql-cli (github.com/nalbury/promql-cli) is a Go CLI for querying, analyzing, and visualizing Prometheus metrics, plus PromQL fundamentals.
Reference Files
Read the relevant reference file(s) before executing tasks:
| File | When to read |
|---|---|
references/installation.md | User needs to install promql-cli or set up configuration (hosts, auth, token, password, multi-host) |
references/usage.md | User wants to discover metrics/exporters/labels, run queries, or choose output formats |
references/graphing.md | User wants to visualize Prometheus data as an ASCII chart in the terminal |
references/debugging.md | User is investigating a performance issue, latency, errors, saturation, data gaps, or query cost issues |
references/promql-reference.md | User needs help writing PromQL, understanding metric types, functions, or aggregations |
For most tasks, read references/usage.md. For PromQL help, read references/promql-reference.md. When debugging, read both references/debugging.md and references/promql-reference.md.
Setup Check
Before running any query, verify that a host is configured:
promql 'up' # succeeds if host is reachable; fails with connection error if not configured
# or
promql --host xxx 'up'
Recognize these errors as a configuration/auth problem and refer to references/installation.md:
| Error | Cause |
|---|---|
dial tcp ... connection refused | No host running at the configured address |
dial tcp ... no such host | Hostname not resolved — wrong host in config |
error querying prometheus: ...401... | Bearer token missing or invalid |
error querying prometheus: ...403... | Token valid but insufficient permissions |
please specify an authentication type | Auth flags partially set — use config file instead |
If any of these appear, do not create config files on behalf of the user — config files may contain credentials (tokens, passwords) that must never pass through an LLM. Instead, guide the user to set it up themselves:
"Please create
~/.promql-cli.yamlmanually with your Prometheus host (and credentials if needed). Seereferences/installation.mdfor the exact format. Let me know once it's ready."
Only after the user confirms the config is in place should you proceed with queries.
Quick Command Reference
promql 'up' # instant query
promql 'rate(http_requests_total[5m])' --start 1h # range query (ASCII graph)
promql 'up' --output csv # CSV output
promql 'up' --output json # JSON output
promql metrics # list all metric names
promql labels <metric> # list labels for a metric
promql meta <metric> # show metric type and help
promql --config ~/.promql-cli-prod.yaml 'up' # target a specific host
Key Principles
- Use
rate()on counters, never raw values — raw counters only ever increase; the absolute value is meaningless.rate()gives the per-second change rate, which is what you actually care about. - When debugging, isolate a single instance — aggregating across replicas masks per-instance anomalies. A single overloaded pod hidden behind healthy peers won't show up in averages.
- Filter early with label matchers in the innermost selector — Prometheus evaluates selectors before functions, so filtering late means scanning all time series. Early filters reduce data scanned and query latency.
- For histograms, keep
lein thebyclause beforehistogram_quantile()— the function needs alllebuckets to interpolate percentiles; droppingleearly producesNaNor wrong results. - Prefer
--output graphfor range queries — ASCII sparklines convey trend direction (rising, falling, spiking) in a compact format that LLMs parse well; raw timestamp tables require mental modeling. Never send thousands of raw JSON/CSV rows into the LLM context — use--output graphinstead, or run--output graphfirst and--output tableonly to inspect a narrow window. - Store credentials in
~/.promql-cli.yamland~/.promql_token, chmod 600 — passing tokens as CLI args exposes them in shell history and process listings.
Query Cost Rules
Always apply these before and during any query session:
- Always use the promql CLI — never call the Prometheus HTTP API from Python scripts or shell
curl. The CLI handles auth, formatting, and output consistently; Python API calls bypass all of that and produce raw JSON that must be parsed, inflating context and masking the graph output that models interpret best. - Check cardinality first — before querying an unfamiliar metric, count its time series (
count(metric_name)). High-cardinality metrics without label filters time out or flood the output. Seereferences/debugging.mdfor patterns. - Confirm the time window upfront — always ask before running range queries. Large intervals are expensive; prefer multiple short-interval queries over one long one.
- Clarify past vs. recent — for new investigations, ask whether the user wants a past event (specific timestamp) or a recent trend. If recent, offer concrete choices: last hour, last day, last week, last month.
- Aggregate in Prometheus — never pull raw series to aggregate in Python or shell. Push
sum by(...),avg by(...), ortopk()into the PromQL expression — Prometheus collapses series server-side. - Timeout = query too broad — if a query takes >15s, reduce scope: add label filters, shorten
--start, or add an aggregation wrapper. Apply the same narrowed scope to all subsequent queries in the session. - Data gaps → check
up— when a metric shows missing data, runup{job="...", instance="..."}before diagnosing the application. A0value confirms the exporter was down. Seereferences/debugging.md.
This skill is not exhaustive. Please refer to the official promql-cli documentation and examples for up-to-date information. Context7 can help as a discoverability platform.
If you encounter a bug or unexpected behavior in promql-cli itself, open an issue at https://github.com/nalbury/promql-cli/issues.
Related skills
More from samber/cc-skills and the wider catalog.

site-launch-checklist
Pre-launch checklist for websites and web apps covering analytics, DNS, security, SEO, legal compliance, and quality gates.

skill-progressive-disclosure-design
Design how to split skill content between SKILL.md and reference files for context efficiency.

snyk-agent-scan-compliance
Fix snyk-agent-scan compliance alerts by restructuring skill content—never by suppressing information.

substack-ghostwriting
Write, optimize, and grow Substack newsletters and web posts with voice matching, algorithm strategy, and monetization tactics.

technical-article-writer
Write developer-focused technical articles, tutorials, and blog posts with structured frameworks and proven hooks.

training-report
Generate professional training and workshop reports as .docx files with structured feedback and recommendations.