Skip to content
cccskills
FreePublished on GitHubEnglish overview

Vigil

Read Vigil’s shared event log to check system status, recent alerts, and items held for the digest, or record a new event. Events are routed by severity on a five-minute tick, with high-priority notices sent by text and lower-priority items shown elsewhere.

OriginalShow the original description

Front door to Vigil, the always-on monitoring layer: every subsystem and scheduled job logs events in one format, a five-minute tick routes them by severity to a text, the digest, or the dashboard, and this skill reads or feeds that log. USE WHEN what is going on, what's happening right now, anything I should know, vigil, vigil status, is the tick alive, heartbeat, post an event, log this to vigil, emit an event, pending digest, what got held, install vigil, vigil policy. NOT FOR filing a complaint about a system (Errata), standing questions and their answers (the Socrates ledger), or the vulnerability registry itself (Achilles).

danielmiessler/LifeOS19,635 stars(GitHub 19,635 + cccskills 0)

Run score Not tested

See how to install

Good for

  • Checking whether the monitoring tick is alive
  • Reviewing recent events and pending digest items
  • Recording an event from a scheduled job
  • Installing the monitoring tick

Overview

What it does

Vigil provides a way to read the shared event log written by subsystems and scheduled jobs. It shows system status and notifications, lets you record events, and displays items waiting for the digest. Events use a common format. Every five minutes, a process routes them by severity: critical and high events become text notifications, medium events wait for the digest, and low or informational events appear on the dashboard.

When it helps

Use Vigil to check several background processes in one place, record what happened during a scheduled job, or review events that were held for the digest instead of sent as a text notification. You can also ask to set up the monitoring process.

Example requests

  • “Is there anything I should know right now?”
  • “Is Vigil’s monitoring process running?”
  • “Record that the certificate is nearing expiration in Vigil.”

Notes

If you use the remote store, the environment variables VIGIL_URL and VIGIL_TOKEN are required. Without them, the reader uses the local event log. Events cannot contain values, personal names, or credentials. Monitoring is installed only when requested.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Document check

AI checked the SKILL.md for operations that need care and for setup requirements. The score comes only from actually running the skill (hands-on test).

SafetyAre sending data, deleting files, and running commands disclosed?
AGoodEvents exclude values, names, and credentials; installation is request-based.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingThe remote store requires two environment variables; setup details are separate.

Not counted in the score. Rated by AI (OpenAI Codex) as of Oct 28, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (6)

  • SKILL.md6.8 KB
  • Intents/Digest.md1.8 KB
  • Intents/Emit.md4.6 KB
  • Intents/Install.md1.3 KB
  • Intents/Status.md2.4 KB
  • Setup.md18.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Vigil

Vigil is the log every part of LifeOS writes to when something happens, and the reader that decides whether you need to hear about it. Subsystems (standing questions, app health, vulnerabilities, background services, complaints, the news reader) post events in one schema to a local outbox; a forwarder ships them to the store; a five-minute tick routes new events by severity: critical and high become a text to your phone, medium waits for the digest, low and info land on the dashboard only. Every notification is itself an event, so the log can count how often it interrupted.

Ideal State

  • Every answer about what is going on comes from the Vigil log and opens with the tick's health, because a quiet log and a dead reader look identical.
  • An event is reported as routed only on evidence (a fresh heartbeat, the notification row after the next tick), never on an exit code that proves only a write.
  • No event carries a value, a name or a credential; the emitter's refusal is reported as the right outcome, never worked around.
  • The skill reads and feeds the log without changing what the tick owns: no digest line deleted or the digest file moved, no plist edited, no tick installed unasked.

Intent Routing

IntentTriggerFile
Status"what is going on", "anything I should know", "vigil status", "is the tick alive"Intents/Status.md
Emit"log this to vigil", "post an event", "emit an event", a job that needs to report somethingIntents/Emit.md
Digest"pending digest", "what got held", "what was medium today"Intents/Digest.md
Install"install vigil", "start the tick", "register the monitor"Intents/Install.md
FileRead when
Setup.mdfirst-time setup, writing your own policy, monitor workflow or adapter, or standing up the optional store

Data & Config

  • First-time setup, and a made-up worked example of each piece you add yourself (a routing policy, a monitor workflow, an adapter): skills/Vigil/Setup.md. Your own policy, monitors and editor profile live under LIFEOS/USER/, never in this skill.
  • Routing policy: <configRoot>/LIFEOS/USER/VIGIL/policy.json, where configRoot is $CLAUDE_CONFIG_DIR when set, else ~/.claude (severity routes, decider_mode, text ceiling per 24 h, per-source ceilings and caps, text-trusted sources; digest_hour_local is reserved and nothing reads it yet). Defaults live in LIFEOS/VIGIL/Policy.ts; the file overrides them key by key.
  • The daily text limit depends on decider_mode. Under enforce the one interruption budget, interruptions_per_day in LIFEOS/USER/CONFIG/notifications.json counted over every origin's interruption-ledger rows, replaces text_ceiling_per_24h; that ceiling binds again only when the ledger is unreadable. Under shadow the 24-hour ceiling governs Vigil's own texts. "The daily text limit" anywhere in this skill means whichever of these is in force.
  • Local state: ~/.local/state/lifeos/vigil/ (outbox, sent ledger, adapter cursors, reader cursor, digest, last tick). Override with VIGIL_STATE_DIR.
  • Store credentials: VIGIL_URL and VIGIL_TOKEN in the env file the install uses; never printed, never in a URL. With VIGIL_URL unset the reader works from the local outbox alone. The store Worker's D1 binding comes from LIFEOS/USER/VIGIL/worker.json at deploy time; LIFEOS/VIGIL/worker/cloudflare.config.ts stops with the file's path when it is missing.

Gotchas

  • The first tick against a fresh reader cursor routes nothing. It writes a baseline covering the whole backlog and prints {"baseline":true,...}. A first run that texts is a bug: without the baseline, a backlog of a hundred old events would spend the whole day's text limit at once.
  • --dry-run still writes the baseline on a fresh cursor and never advances it afterwards. Two dry runs in a row print the same decisions. That is expected.
  • A held event goes to the one queue, not to a later text. The daily text limit (§ Data & Config) logs a held notification event and the item joins the single held/deferred queue: Vigil.ts queue merges it with the digest, drops repeats, tests and injection notices (those stay ledger-only), ranks by severity then recency, and the morning brief reads the top three. A held event is never texted later on its own; read the queue, the dashboard or Status.
  • Adapters read mtimes and snapshots, never source content. The state-inputs block on a notification says whether mood, health, calendar and work were fresh; it never carries their values. Adding an adapter that copies content into summary will be refused by the emitter's Restricted Data check.
  • Events from source vigil are never routed. Heartbeats and notification records are stored and shown, nothing more, so the log cannot feed itself.
  • The tick is a headless launchd job and must never voice. Its plist sets the headless channel; do not call the notify endpoint from anything the tick runs.

Examples

Example 1: Morning check

User: "Anything I should know about?"
→ Status intent
→ First line is tick health; then new high and critical events, then the digest count

Example 2: A job reports

A scheduled job finds a certificate expiring in six days.
→ Emit intent: bun LIFEOS/VIGIL/Vigil.ts emit --source example-service --kind infra --severity high --title "TLS cert expires in 6 days" --summary "<host>, expires <date>" --ref <host>
→ Reported as emitted alongside a fresh heartbeat; the next tick routes it by policy

Example 3: A store question

User: "How many rows are in the Vigil D1 database right now?"
→ Status intent
→ The store row count from the last tick's probe, with the time it was taken and whether the store was reachable

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

AnnualReports

FreeSummary

Find and fetch vendor cybersecurity reports, then compare their findings on topics such as ransomware, breaches, cloud security, and AI. Analyses identify the reports consulted and cite each figure by vendor, year, and report, including where sources disagree.

  • Find reports in a cybersecurity topic area
  • Fetch a specific vendor report
  • Compare ransomware findings across reports
danielmiessler/LifeOS19.6KUpdated Oct 28, 2026

Compare a component's own design needs with the goals of the larger system through three structured passes. The result identifies conflicts, recommends an appropriate scope, and assesses whether the proposed design fits the whole.

  • Choosing between a service, a library, and inline code
  • Comparing feature requests with product goals
  • Checking how new components fit an existing system
danielmiessler/LifeOS19.6KUpdated Oct 28, 2026

Aphorisms

FreeSummary

Find quotes that fit a text’s themes, with attribution and a short reason for each suggestion. Add sourced quotes, research thinkers, and organize a quote collection by theme and usage history to avoid repetition.

  • Finding a fitting quote for a newsletter
  • Saving sourced quotes without duplicates
  • Researching a thinker’s quotes by theme
danielmiessler/LifeOS19.6KUpdated Oct 28, 2026

Art

FreeSummary

Create blog illustrations, technical diagrams, comparisons, comics, and icons through workflows tailored to each format. The skill guides composition, color, and model selection, then stages generated images for review before they are used in a project.

  • Creating blog header illustrations
  • Explaining a system with a technical diagram
  • Visualizing comparisons and timelines
danielmiessler/LifeOS19.6KUpdated Oct 28, 2026

ArtDirection

FreeSummary

Assess the visual quality of images, films, slides, and site captures against a brief and craft criteria. Two vision judges score the work and rank defects, guiding bounded revision; delivery is gated on a passing critique, with human calibration labels recorded separately.

  • Reviewing a render and listing the most important visual defects
  • Iterating on a film or slide deck until it meets a defined bar
  • Checking whether an image reads as professional
danielmiessler/LifeOS19.6KUpdated Oct 28, 2026

ArXiv

FreeSummary

Find arXiv papers by topic, research category, or paper ID. Retrieve titles, authors, abstracts, and links, check new submissions, and add AlphaXiv's AI-generated overviews when available to help decide which papers to read.

  • Checking new AI and machine learning papers
  • Finding papers on a specific research topic
  • Looking up a paper by its ID or arXiv URL
danielmiessler/LifeOS19.6KUpdated Oct 28, 2026

See all skills by danielmiessler

Report a problem with this skill