What I Built
CIberus is a zero-dependency, terminal-native DevOps companion that monitors your repository's health and reflects it as a living ASCII creature -- a three-headed Cerberus that evolves, emotes, and suffers based on real CI signals.
The idea is simple: dashboards get ignored, Slack alerts get muted, and broken builds become background noise. But a visibly suffering three-headed guardian in your terminal? That gets attention.
Health signals it tracks:
- GitHub Actions run status and conclusion (via
gh run list) - Green streak length from recent CI history
- Flaky test heuristic (success/failure transition count)
- Code coverage from
coverage-summary.jsonorlcov.info - Documentation freshness (commits since
README.mdwas last touched)
5 evolution stages that reflect overall repo health:
| Score | Stage | Description |
|---|---|---|
| 0-39 | Pup | Single head, small, struggling |
| 40-59 | Sentinel | Two heads, lean, alert |
| 60-74 | Gatekeeper | Three heads, muscular, gate base |
| 75-89 | Infernal Guardian | Three fierce heads, horns, armor plating, braille flames |
| 90-100 | Ascended Cerberus | Three majestic heads, braille wings, aura, pedestal |
5 moods (calm, alert, worried, angry, critical) change the creature's facial expression, aura effects, and coloring in real time.
4 theme modes:
-
Mythic -- detailed pixel-art using Unicode block elements (
█▓▒░▀▄▛▜) and braille characters (⣿⣷⢰⢾⣦⣄) for fine detail, fur texture, and flame effects. No emoji -- pure terminal-safe characters. -
Minimal -- clean ASCII (
/\_/\), 5-8 lines. - Corporate -- box-drawing status panels. Intentionally bland.
-
Chaos -- procedurally corrupts the mythic art with deterministic braille noise injection, seeded PRNG so
watchmode doesn't flicker.
The mythic art uses a template composition system instead of duplicating full art for every mood. Body templates contain {EYES}, {MOUTH}, {SNOUT}, {AURA}, and {FLAME} tokens that get swapped per mood, keeping the codebase clean while supporting 25 visual combinations (5 stages x 5 moods) from just 5 body templates.
Core Commands
ciberus init # Initialize config
ciberus status # Render current health
ciberus watch --interval 30 # Live monitoring loop
ciberus theme set chaos # Switch visual theme
ciberus copilot run # Non-interactive Copilot analysis
ciberus copilot chat # Interactive Copilot session with context
Demo
Repository: github.com/shingy/CIberus
Mythic Theme -- Ascended Cerberus (calm)
✧
⣠⣴⣿⣿ ✧ ✧ ✧ ⣿⣿⣦⣄
⣸⣿⣿⣿ ┌───┐┌─────┐┌───┐ ⣿⣿⣿⣇
⣸⣿⣿ █▛ ◕‿◕ ▜█▛ ◕‿◕ ▜█▛ ◕‿◕ ▜█ ⣿⣿⣇
⣹⣿⣿ █ ᴖᴖ █ ᴖᴖ █ ᴖᴖ █ ⣿⣿⣏
⣹⣿ █▄ ─ ▄█▄ ─ ▄█▄ ─ ▄█ ⣿⣏
⢹ ██▓══════════════▓██ ⣏
░░░░░ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ ░░░░░
░░░░░ █▓▓▓▓████████▓▓▓▓█ ░░░░░
░░░░░ █▓▓█▒▒▒▒▒▒▒▒▒▒█▓▓█ ░░░░░
░░░░░ █▒█▒▒ ▒▒ ▒▒█▒█ ░░░░░
░░░░ ▄▄▄▄ ▄▄ ▄▄▄▄ ░░░░
░░ ════════════════════════ ░░
════════════════════════
Mythic Theme -- Pup (calm)
✧
┌─────┐
█▀ ◕‿◕ ▀█
█ ᴖᴖ █
█▄ ─ ▄█
███████
█▒█ █▒█
▄▄ ▄▄
Infernal Guardian (angry) -- with braille flames
⢰⢾⣿⣷⣆ ⢰⢾⣿⣷⣆ ⢰⢾⣿⣷⣆
✧ ✧ ✧
┌────┐ ┌─────┐ ┌────┐
█▛ ◉_◉ ▜█▛ ◉_◉ ▜█▛ ◉_◉ ▜█
█ ᴖᴖ █ ᴖᴖ █ ᴖᴖ █
█▄ ⨷ ▄█▄ ⨷ ▄█▄ ⨷ ▄█
██▓══════════════▓██
█▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
█▓▓▓▓██████▓▓▓▓█
█▓▓█▒▒▒▒▒▒▒▒█▓▓█
█▒█▒▒ ▒▒█▒▒█▒█
▄▄▄▄ ▄▄▄▄▄▄▄
═══════════════════════
Full status output
CIberus
[creature art rendered in color]
CIberus is calm. The gates are secure.
Stage: Gatekeeper
████████████████░░░░ 78/100
Signals
CI: completed/success
Green streak: 5
Flaky transitions: 1
Coverage: 85%
Docs freshness: 3 commits since README.md
Branch: main
Wins:
+ Latest CI run passed
+ Coverage is 85%
My Experience with GitHub Copilot CLI
CIberus has first-class Copilot CLI integration baked into its command structure. The ciberus copilot subcommands bridge the gap between passive health monitoring and active remediation:
How the integration works
ciberus copilot check-- verifies the standalonecopilotCLI is installed and authenticated. This validates the toolchain before attempting any AI-assisted workflows.ciberus copilot prompt-- generates a context-rich remediation prompt from live repo metrics. It pulls the current branch, CI status, green streak, flaky transitions, coverage percentage, and docs freshness, then wraps them into a structured prompt asking for prioritized fixes and exact terminal commands.ciberus copilot run-- sends that prompt directly tocopilotCLI in non-interactive mode. CIberus builds the full argument list (-p <prompt> --stream off -s), handles auth errors gracefully, and prints the AI response. You can pass--model gpt-5or--allow-all-toolsflags through.ciberus copilot chat-- opens an interactive Copilot session (copilot -i <prompt>) pre-seeded with the same repo context, so you can have a back-and-forth conversation about what to fix.
The workflow in practice
The typical loop is:
ciberus status # See health at a glance
ciberus copilot run # Get AI-powered fix suggestions
# ...apply fixes...
ciberus status # Watch the creature evolve
This turns Copilot CLI from a general-purpose assistant into a DevOps-aware one. Instead of asking "what's wrong with my repo?" and providing context manually, CIberus collects the signals, formats the context, and hands it off. The creature's mood tells you when to ask for help; the Copilot integration tells you what to do about it.
Development experience
During the build itself, I used Copilot CLI to scaffold shell command wrappers, debug gh run list JSON parsing edge cases, and iterate on the scoring algorithm. The copilot CLI's ability to understand terminal context made it particularly useful for testing spawnSync argument patterns and validating ANSI escape sequences across different terminal emulators.
The project is zero-dependency (Node.js 18+ only, no npm packages) and all 20 tests pass with node --test.
Top comments (0)