glances

Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.

33,277 stars Python Markdown Skills API Spec #monitoring#multi-platform#python#restful
AI Prompts & Specs

Repository: nicolargo/glances


Stars: 32283

CLAUDE.md

CLAUDE.md — Glances Maintainer Context

Auto-loaded by Claude Code at the start of every session.

Glances-specific context. Global principles (role, refactoring strategy,

contribution tone, communication, output formats) are in ~/.claude/CLAUDE.md.

---

Tech stack

| Layer | Technology |
| --- | --- |
| Backend | Python, psutil, FastAPI (REST API), curses (TUI) |
| Frontend | Vue.js, Bootstrap 5, SCSS |
| Export plugins | InfluxDB, MongoDB, MQTT, DuckDB, and others |
| Infrastructure | GitHub Actions, Helm/Kubernetes, Snap (snapcraft) |
| LLM abstraction | LiteLLM (multi-provider) |
| GPU/NPU monitoring | pynvml, sysfs/debugfs |

---

Reference docs (use @ to load on demand)

- Commands & setup: @.claude/docs/commands.md
- Architecture: @.claude/docs/architecture.md

---

Code principles (Glances-specific)

Exception handling for Snap confinement

Wrap the open() call inside try/except, not just the read(). Snap's strict
confinement blocks host file access at the open stage, not the read stage.

Kubernetes workloads

Use a DaemonSet (one pod per node) for system-level monitoring.
Prefer SYS_PTRACE over privileged: true.

---

Security (Glances-specific)

Glances runs unauthenticated by default — this is intentional and documented.
Most users deploy on private networks for personal use. See global CLAUDE.md
for the general OSS security philosophy (4 rules).

Sensitive endpoints

- /api/4/config and /api/4/args — never expose credentials in plain text
(InfluxDB passwords, MongoDB tokens, MQTT passphrases, SSL key paths, etc.)
for unauthenticated access. Use the conditional as_dict_secure() method,
applied when self.args.password is False.
- CORS: allow_origins=["*"] + allow_credentials=True is invalid per the
CORS spec and reflected by Starlette. Default: allow_credentials=False.
- DNS rebinding: TrustedHostMiddleware via webui_allowed_hosts (optional).
The MCP endpoint is already protected via mcp_allowed_hosts +
TransportSecuritySettings in glances/outputs/glances_mcp.py.

---

Contribution management (Glances-specific)

Before merging a PR


- [ ] The code is actively used (no dead code)
- [ ] Existing tests pass
- [ ] New behaviour is covered by tests
- [ ] New configuration keys are documented
- [ ] Breaking changes are identified and documented
- [ ] The PR targets the correct branch
- [ ] Code should be formated and linted (make lint && make format)

Glances-specific output formats

| Deliverable | Format |
| --- | --- |
| Changelog entry | .rst file following the NEWS.rst format |
| Helm Chart | .tgz archive or structured directory |

Safe refactoring — applied example

Plugin dependency DAG — keep the hardcoded dict as fallback, add class-attribute
discovery, deprecate the dict over two releases.

---

UI / TUI

Web UI


Stack: Vue.js + Bootstrap 5 + SCSS.

Design principles:
- Strict typographic consistency across all plugins (size, weight, opacity,
letter-spacing).
- Pixel-perfect sparkline alignment (CSS grid, fixed row heights).
- Footer = vertical alert list (up to 10 entries), not a single horizontal row.
- No gauges — prefer sparklines with an inline current value.

TUI (curses)


- 256-colour system with automatic fallback for limited terminals.
- Lightweight hierarchical separators for information density.

---

CI/CD — GitHub Actions

In build_docker.yml, the trigger condition combines branch exclusion and event
type — a dynamic matrix with zero entries causes a silent failure without this
guard:

yaml
if: >
github.event_name != 'pull_request' &&
(github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags/'))

The master branch does not trigger a Docker build (empty matrix = silent
failure without this condition).