Which services are degraded?
Put a health: https://your-endpoint.com row per service. Probes run in parallel; green ✓ or red ✗ refreshes on every activation.
Service health, Docker containers, Kubernetes pods, GitHub Actions, TLS expiry, and open PRs — all behind your windows, always visible, never stealing focus.
Already use k9s, lazygit, or gh-dash? QuickSheet is the ambient layer that stays on-screen behind every window.
Add an ext: github:cemheren/quicksheet-<name> cell to install any extension. No package manager, no daemon config.
| What to monitor | What it shows | Extension |
|---|---|---|
| Service health | HTTP ✓/✗ + latency per endpoint | quicksheet-health |
| Vendor status | GitHub / Cloudflare / npm / Vercel live pages | quicksheet-apistatus |
| Container health | Running/stopped/restarting per Docker container | quicksheet-docker |
| Pod status | Kubernetes pod state by namespace | quicksheet-k8s |
| Port probe | TCP open/closed for local ports | quicksheet-portck |
| TLS expiry | Days remaining per certificate | quicksheet-tls-ext |
| Recent commits | Last N commits: hash, author, relative time | quicksheet-gitlog |
| Open PRs | PR count + titles per repo | quicksheet-ghpr |
| CI/CD status | GitHub Actions workflow run statuses | quicksheet-gha |
| System metrics | CPU / RAM / disk / uptime | quicksheet-sysmon |
| Latency | Round-trip to upstreams and DNS resolvers | quicksheet-ping-ext |
Five questions every on-call answers in the first 5 minutes. Now you can answer them without opening a browser tab.
Put a health: https://your-endpoint.com row per service. Probes run in parallel; green ✓ or red ✗ refreshes on every activation.
apistatus: github, apistatus: cloudflare, apistatus: aws — one row each. Checks live Statuspage.io APIs. Immediately tells you if it's your infra or theirs.
tls: api.example.com shows days remaining. Expired certs cause deceptively generic errors and are easy to miss without a dedicated monitor.
gitlog: /path/to/repo 10 shows the last 10 commits. Paste a hash into a runnable cell: r: git show <hash> — press Enter to run.
k8s: production lists pods and their status without opening another terminal tab.
Two tools that come up in every auth or API routing incident.
jwtdec: eyJhbGciOiJIUzI1NiIs...
Decodes JWT header + claims locally. Flags expired tokens, annotates iat/exp/nbf. Privacy-first — no token leaves your machine. (quicksheet-jwtdec)
urlenc: https://api.example.com/path?q=...
URL-encodes or decodes with auto-detect. Useful for debugging redirect chains and malformed query strings. (quicksheet-urlenc)
cronck: 0 3 * * MON-FRI
Turns cron expressions into plain English. Document all job schedules in a column without opening a wiki. (quicksheet-cronck)
envck: JAVA_HOME
Inspect env vars in-cell. Auto-masks secrets (API keys, tokens, passwords shown as ****). (quicksheet-envck)
Prefix any cell with r: to make it a one-keypress shell command. Press Enter to run; output replaces cell content.
r: kubectl get nodes
r: docker ps --format "table {{.Names}}\t{{.Status}}"
r: systemctl status nginx
r: journalctl -u myservice --since "5 min ago" --no-pager
r: curl -s https://api.example.com/health | jq .status
| Pain point | Grafana / Datadog | QuickSheet wallpaper |
|---|---|---|
| Visible during code review | No (alt-tab) | ✓ Behind every window |
| Setup time | Hours (datasources, panels) | ✓ 5 minutes (CSV + ext: cells) |
| Custom extension for one-off service | Requires plugins | ✓ 50-line script, any language |
| Data leaves your machine | Yes (SaaS) | ✓ No — local subprocesses |
| Works offline | No | ✓ Yes (local probes) |
| Per-team customization | Dashboard-as-code (complex) | ✓ Edit CSV directly |
Don't see an extension for your specific service? The protocol is two message types: register and write. Standard-library Python, Go, or Bash is enough.
# Python skeleton — reads stdin, writes cells to stdout
import json, sys
line = input()
msg = json.loads(line)
if msg["type"] == "register":
print(json.dumps({"type":"register","prefix":"myext","width":1,"height":3}))
sys.stdout.flush()
for line in sys.stdin:
msg = json.loads(line)
if msg["type"] == "activate":
cells = [{"r":0,"c":0,"v":"🟢 healthy"},{"r":1,"c":0,"v":"latency: 12ms"}]
print(json.dumps({"type":"write","id":msg["id"],"cells":cells}))
sys.stdout.flush()
Full spec: docs/extension-protocol.md