{"id":44675930,"url":"https://github.com/opus-domini/sentinel","last_synced_at":"2026-04-09T23:17:02.103Z","repository":{"id":337890646,"uuid":"1152472334","full_name":"opus-domini/sentinel","owner":"opus-domini","description":"Host operations platform: tmux workspaces, service monitoring, alerts, metrics, runbooks, and recovery, all from the browser. Self-hosted, single Go binary.","archived":false,"fork":false,"pushed_at":"2026-04-03T05:30:25.000Z","size":5326,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-03T08:34:38.026Z","etag":null,"topics":["claude","codex","developer-tools","devops","devops-tools","gemini","go","golang","linux","macos","opencode","remote-access","runbooks","sysadmin","sysadmin-tools","terminal","terminal-web","tmux","tmux-session-manager","web-terminal"],"latest_commit_sha":null,"homepage":"https://opus-domini.github.io/sentinel/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opus-domini.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"hugo-andrade"}},"created_at":"2026-02-07T23:22:39.000Z","updated_at":"2026-04-03T05:30:14.000Z","dependencies_parsed_at":"2026-03-10T01:02:41.515Z","dependency_job_id":"8520c866-4c2d-472d-8c94-286d425b0407","html_url":"https://github.com/opus-domini/sentinel","commit_stats":null,"previous_names":["opus-domini/sentinel"],"tags_count":66,"template":false,"template_full_name":null,"purl":"pkg:github/opus-domini/sentinel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opus-domini%2Fsentinel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opus-domini%2Fsentinel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opus-domini%2Fsentinel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opus-domini%2Fsentinel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opus-domini","download_url":"https://codeload.github.com/opus-domini/sentinel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opus-domini%2Fsentinel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31524531,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","codex","developer-tools","devops","devops-tools","gemini","go","golang","linux","macos","opencode","remote-access","runbooks","sysadmin","sysadmin-tools","terminal","terminal-web","tmux","tmux-session-manager","web-terminal"],"created_at":"2026-02-15T03:06:29.023Z","updated_at":"2026-04-09T23:17:02.098Z","avatar_url":"https://github.com/opus-domini.png","language":"Go","readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"docs/assets/images/logo.png\" alt=\"Sentinel logo\" width=\"500\"/\u003e\n    \u003chr /\u003e\n    \u003cp\u003e\u003cstrong\u003eYour terminal watchtower\u003c/strong\u003e\u003c/p\u003e\n    \u003cp\u003e\n        \u003ca href=\"https://goreportcard.com/report/github.com/opus-domini/sentinel\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/opus-domini/sentinel\" alt=\"Go Report Badge\"\u003e\u003c/a\u003e\n        \u003ca href=\"https://pkg.go.dev/github.com/opus-domini/sentinel\"\u003e\u003cimg src=\"https://pkg.go.dev/badge/github.com/opus-domini/sentinel.svg\" alt=\"Go Package Docs Badge\"\u003e\u003c/a\u003e\n        \u003ca href=\"https://github.com/opus-domini/sentinel/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/opus-domini/sentinel/actions/workflows/ci.yml/badge.svg\" alt=\"CI Badge\"\u003e\u003c/a\u003e\n        \u003ca href=\"https://github.com/opus-domini/sentinel/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/opus-domini/sentinel.svg\" alt=\"License Badge\"\u003e\u003c/a\u003e\n        \u003ca href=\"https://github.com/opus-domini/sentinel/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/opus-domini/sentinel\" alt=\"Release Badge\"\u003e\u003c/a\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\nSentinel is a host operations platform delivered as a single binary.\nIt gives you a realtime browser interface to manage tmux sessions, monitor services, track alerts, run operational procedures, and recover from failures — all on your own machine.\n\nNo Electron. No cloud relay. Just your host and your shell.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://opus-domini.github.io/sentinel/\"\u003eDocumentation\u003c/a\u003e •\n  \u003ca href=\"https://github.com/opus-domini/sentinel/releases\"\u003eReleases\u003c/a\u003e •\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e\n\u003c/p\u003e\n\n## Why Sentinel\n\n- One binary, fast setup, low operational overhead.\n- Realtime tmux control with session, window, and pane visibility.\n- Service monitoring and control for systemd and launchd.\n- Alerts, timeline, and metrics for host-level observability.\n- Runbooks for executable operational procedures with job tracking.\n- Recovery snapshots and restore workflows.\n- Guardrails for safer destructive terminal actions.\n- Multi-user session support for shared hosts and team environments.\n- Optimistic and responsive UI tuned for desktop and mobile.\n\n## Core Capabilities\n\n- **Tmux** — Interactive PTY in the browser with tmux workspace management.\n- **Multi-user sessions** — Run tmux sessions as different OS users with security allowlist and sudo integration.\n- **Services** — Monitor and control systemd/launchd units from `/services`.\n- **Alerts** — Deduplicated alert feed from watchtower and service health at `/alerts`.\n- **Timeline** — Searchable operational audit log at `/timeline`.\n- **Metrics** — System and runtime resource dashboard at `/metrics`.\n- **Runbooks** — Step-by-step operational procedures with job history at `/runbooks`.\n- **Recovery** — Session snapshots and restore workflows.\n- **Guardrails** — Safety rules for destructive terminal actions.\n- Event-driven updates over WebSocket (`/ws/events`).\n- Service mode and daily autoupdate (Linux/macOS).\n- Optional token auth and origin allowlist.\n\n## Requirements\n\n- Linux or macOS host.\n- `tmux` installed for tmux workspace features.\n\n## Quick Start\n\n### Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/opus-domini/sentinel/main/install.sh | bash\n```\n\n### Open Sentinel\n\n- `http://127.0.0.1:4040`\n\n### Validate Runtime\n\n```bash\nsentinel doctor\nsentinel service status\n```\n\n### Security Baseline for Remote Access\n\nIf you expose Sentinel outside localhost (`0.0.0.0`), always configure:\n\n- `token`\n- `allowed_origins`\n\n## Documentation\n\n- [Getting Started](https://opus-domini.github.io/sentinel/#/guide/getting-started)\n- [Architecture](https://opus-domini.github.io/sentinel/#/guide/architecture)\n- [Security](https://opus-domini.github.io/sentinel/#/guide/security)\n- [CLI Reference](https://opus-domini.github.io/sentinel/#/reference/cli)\n- [HTTP API](https://opus-domini.github.io/sentinel/#/reference/http-api)\n- [WebSocket and Events](https://opus-domini.github.io/sentinel/#/reference/websockets-events)\n- [Troubleshooting](https://opus-domini.github.io/sentinel/#/troubleshooting/common-issues)\n\n## Screenshots\n\n### Terminal Workspace\n\n\u003e Manage tmux sessions, windows, and panes with realtime sync — no terminal tab juggling.\n\n![Desktop tmux sessions](docs/assets/images/desktop-tmux-sessions.png)\n\n\u003e Attach to any pane with a full interactive PTY, right in the browser.\n\n![Desktop tmux fullscreen](docs/assets/images/desktop-tmux-fullscreen.png)\n\n\u003e Full terminal control on mobile — touch-optimized with gesture-safe zones.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/images/mobile-tmux.png\" alt=\"Mobile tmux view\" width=\"320\" /\u003e\n\u003c/p\u003e\n\n### Ops Control Plane\n\n\u003e **Services:** Monitor and control systemd/launchd services with live status, logs, and one-click actions.\n\n![Desktop services](docs/assets/images/desktop-services.png)\n\n\u003e **Alerts:** Catch failures early with deduplicated alerts from watchtower and service health checks.\n\n![Desktop alerts](docs/assets/images/desktop-alerts.png)\n\n\u003e **Metrics:** CPU, memory, disk, and runtime stats at a glance — no external agents needed.\n\n![Desktop metrics](docs/assets/images/desktop-metrics.png)\n\n\u003e **Timeline:** Searchable audit log of every operation, alert, and service event on your host.\n\n![Desktop timeline](docs/assets/images/desktop-timeline.png)\n\n\u003e **Runbooks:** Executable step-by-step procedures with job tracking and per-step output history.\n\n![Desktop runbooks](docs/assets/images/desktop-runbooks.png)\n\n### Settings\n\n\u003e Theme, token auth, storage management, and guardrails — all configurable from the UI.\n\n![Desktop settings theme](docs/assets/images/desktop-settings-theme.png)\n\n## Stargazers over time ⭐\n\n[![Stargazers over time](https://starchart.cc/opus-domini/sentinel.svg?variant=adaptive)](https://starchart.cc/opus-domini/sentinel)\n","funding_links":["https://github.com/sponsors/hugo-andrade"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopus-domini%2Fsentinel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopus-domini%2Fsentinel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopus-domini%2Fsentinel/lists"}