Skip to content
cccskills
FreePublished on GitHubEnglish overview

LifeOSHooks

Diagnose the LifeOS function-hook plugin for Claude Code: check whether it is loaded, trace why a line or banner appeared or went missing, and validate its types, synced core copies, and probes. Requires Claude Code at the declared minimum build and bun.

OriginalShow the original description

The LifeOS function-hook plugin: check it is armed, explain why a line or banner was or was not drawn, regenerate its types after a Claude Code update, sync pure-core copies, run its probes. USE WHEN function hooks, LifeOSHooks, the plugin, hook-drawn lines, banner missing, memory line missing, plugin types, /plugin-types, plugin validate, is the plugin loaded, hooks module. NOT FOR the command hooks under hooks/ (edit directly), the Pulse dashboard (Pulse), or Relay diagnostics (the relay skill).

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

Run score Not tested

See how to install

Good for

  • Check whether the plugin is loaded
  • Find why a banner or line is missing
  • Refresh type declarations after an update
  • Validate the plugin and run its probes

Overview

What it does

LifeOSHooks diagnoses the LifeOS function-hook plugin that runs inside Claude Code sessions. It checks whether the plugin is loaded and reports the evidence. It investigates why a line or banner appeared or failed to appear. After a Claude Code update, it prepares type declarations for that build and runs type checks and tests. When source code changes, it synchronizes the pure-core copies and can validate the plugin or run probes in a headless environment.

When it helps

Use it to confirm that the plugin is active, trace missing display elements or unexpected behavior, and investigate type mismatches after a Claude Code update. It also supports plugin validation and probing.

Example requests

  • “Is the plugin loaded and working in this session?”
  • “Find out why the memory line is not appearing.”
  • “Check the types for the latest Claude Code build.”

Notes

Claude Code must be at or above the minimum build listed in hooks/lib/build.ts, and bun is required. Editing command hooks, diagnosing the Pulse dashboard, and Relay diagnostics are outside this skill’s scope.

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?
BPartly lackingIt updates files and warns that declarations may contain account IDs.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingIt requires a minimum Claude Code build and Bun, with limited setup detail.

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 (23)

  • SKILL.md12.0 KB
  • .claude/types/lifeos-tools.d.ts1.2 KB
  • assets/chime.wav4.7 KB
  • hooks/hooks.json38 B
  • hooks/lib/board-view.ts17.3 KB
  • hooks/lib/build.ts1.2 KB
  • hooks/lib/context-reduction-core.ts4.2 KB
  • hooks/lib/egress-shapes.ts12.8 KB
  • hooks/lib/glyph-core.ts8.2 KB
  • hooks/lib/injection-shapes.ts5.7 KB
  • hooks/lib/motion-view.ts14.6 KB
  • hooks/lib/outbound-shapes.ts62.6 KB
  • hooks/lib/panes-view.ts2.4 KB
  • hooks/lib/route-label.ts17.9 KB
  • hooks/lib/shell-view.ts2.4 KB
  • hooks/lib/subagent-sandbox-wrap.ts1.7 KB
  • hooks/lib/system-surfaces.ts6.2 KB
  • hooks/LifeOSHooks.ts124.2 KB
  • References/ModuleGotchas.md3.9 KB
  • scripts/MakeChime.ts1.8 KB
  • scripts/SyncCores.ts2.4 KB
  • Setup.md3.3 KB
  • tsconfig.json341 B

SKILL.md (original)

Review the instructions the agent will receive before you install.

LifeOSHooks

Diagnoses the LifeOS function-hook plugin, the in-process half of the hook system (one hooks module Claude Code's function-hook runtime loads once per interactive session; the command hooks under hooks/ remain the out-of-process half): whether it is armed, why a line or banner did or did not draw, and keeping its types and pure-core copies current. State of record: LIFEOS/FUNCTIONHOOKS/ISA.md (maintainer-side; the ISA does not ship).

Ideal State

  • A status answer ("is the plugin loaded and working") says armed or not, on which build, and names its evidence: this session's stamp in MEMORY/STATE/function-hooks/<session>.json (the command hooks read it to go quiet on the lines the plugin draws), hooks/lib/build.ts, and for a headless check the probe's debug log. A verdict with no evidence fails.
  • The check holds the plugin to its standing properties: armed in every interactive session on the declared build, and in a headless session (-p, the SDK, Relay) every hook a passthrough with nothing drawn.
  • A "why did or didn't this draw" answer names the surface that owns the line (§ References) and the cause it found; a guess is labelled as one.
  • After a Claude Code update, .claude/types/claude-code.d.ts was written by the running build, hooks/lib/build.ts names that build, and the typecheck and tests pass; the answer names the old and the new build.
  • claude plugin validate <plugin dir> passes; its hooked-events list matches the ISA's closed criteria (/ic checks this).
  • The pure-core copies under hooks/lib/ equal their sources (tests/parity.test.ts; source tree only, not in the public release payload).

Anti-criteria

  • No diagnostic $.ui.log line is ever added to the live module, not even for one probe run. In any session that loads the edited module (§ Gotchas, reload), every $.ui.log line prints into the principal's transcript: one temporary diagnostic line, printed once per tool call, filled the screen (2026-10-02). Probe in a copy run with claude --plugin-dir <copy> and --debug-file, or put the diagnostic in pushEvent, which only reaches the events log.
  • A report never tells the principal a save already reloaded an open session; a check of a change in a live session starts with /reload-plugins (2026-10-11: a pane removed on disk kept drawing its old text in open sessions until a reload).

Intent Routing

This skill is its own single intent; its context files:

FileRead when
References/ModuleGotchas.mdediting the hooks module, or a draw, repaint or hand-over question the § References list below does not answer: engine API shapes, registration rules, scrollback and repaint behaviour
Setup.mdinstalling the plugin on a new machine, or filling in this install's loading topology in the USER Config.md

Tool contract

  • Validate: claude plugin validate <plugin dir> (lists every hooked event and $ call).
  • Typecheck: cd <plugin dir> && bunx tsc --noEmit -p tsconfig.json.
  • Tests (source tree only; they are not in the public release payload): cd <plugin dir> && bun test ./tests. Running them from the install root hit EMFILE (2026-10-01).
  • Sync cores after editing a source: bun <plugin dir>/scripts/SyncCores.ts.
  • After a Claude Code update: the plugin declarations are Claude Code's own and never ship with the plugin; each install generates its own from the build it runs. /plugin-types is gone since 2.1.287, so the source is the running build's plugin-authoring skill, which provides that build's declarations when it loads: put them at .claude/types/claude-code.d.ts (their first line names the build), set TYPES_BUILD in hooks/lib/build.ts, typecheck, and run the tests (2026-10-01). The MCP declarations (.claude/types/claude-code-mcp.d.ts) copy connector tool descriptions verbatim, and some connectors (Slack) embed the logged-in account's user id in them; replace any such id with <slack-user-id> before the file is committed (2026-10-13).
  • Headless probe: claude -p "Reply OK." --plugin-dir <plugin dir> --debug-file <log> --max-turns 1, then grep the log for settled and failed to load.
  • Host I/O from the module goes only through LIFEOS/TOOLS/HookBridge.ts <verb>.

Setup

Needs Claude Code at or above the build named in hooks/lib/build.ts (MIN_BUILD) and bun. The plugin holds no personal data; its one user setting is forceBackground in its plugin manifest (.claude-plugin/plugin.json, or the marketplace entry when the install keeps the manifest there), off by default.

  1. Load it. Either put this folder under the skills directory, where Claude Code loads it as LifeOSHooks@skills-dir and hot-reloads it on every save, or list it in a folder marketplace (claude plugin marketplace add <folder>, then claude plugin install <name>@<marketplace>) and disable the skills-dir copy so only one loads.
  2. Record how it loads: with a folder marketplace, fill in <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/LifeOSHooks/Config.md (marketplace, mods loaded from it, disabled skills-dir copies, reload consequence); Setup.md § Fill in documents every line. Loaded straight from the skills folder, the file is optional.
  3. Check it: claude plugin validate <plugin dir>, then the headless probe in § Tool contract. Success is a settled line and no failed to load line in the debug log.

References

Which surface owns each line and decision. Build-specific numbers live in the ISA (redraw timers, scan counts) and in the module constants (the reaper interval: hooks/LifeOSHooks.ts TREE_MS).

  • Nothing in the answer block is drawn by the plugin: the banner is the model's own first line and the 🗣️ closer its last. Memory and health lines are logged, not drawn (the board pane that showed them was removed 2026-10-11), the interview chip is on the statusline, the ⚙️ ledger is logged, and the band above the prompt carries only the ISA chip.
  • The plugin toasts each ascent-state transition (the statusline draws the ascent strip), puts the Security Protocol and a data-class ceiling into every subagent brief. It no longer tags MCP and web results as data or marks the session after an outside read (retired 2026-10-24; the Security Protocol governs outside content, see LIFEOS/DOCUMENTATION/Hooks/HookSystem.md § Native enforcement).
  • The plugin rewrites a Bash command in five ways, each shown on the tool row's dim mark: npm and npx become bun, an export LIFEOS_DISPATCH_ID=...; prefix binds a codex-backed run to its dispatch, git and gh status paths go through rtk, [REDACTED-SECRET-xxxx] tags are swapped back to the real values the principal's own prompt carried, and a subagent's commands are wrapped in sandbox-exec (macOS only, and only with LIFEOS_SUBAGENT_SANDBOX=on; otherwise they run unwrapped with a before-and-after detector).
  • Refusals: the plugin refuses sweeping git add, a plain git commit in the private trees, a gh comment with no agent attribution, and a WebFetch carrying a secret tag. Taint tracking (TaintGuard and the plugin's mark) retired 2026-10-24: no hook judges outbound Bash after an outside read; native permission rules hold the outbound actions. In a headless session the plugin is not armed and passes every call through.
  • Stray processes: every TREE_MS the poller hands LIFEOS/TOOLS/SessionTree.ts (the session-tree bridge verb) the feed's own agent statuses and stop times, plus its record of which subagent ran each Bash command. The reaper kills this session's orphaned and agent-stopped processes and writes the state file Vigil's running adapter reads. The 1 s agent poll writes each agent's one subagent_stop row. Nothing in LifeOS draws agents, workflows or running shells: Claude Code's /tasks, /workflows, agent panel, Bash pill and spinner show them (2026-10-11).
  • Routes: the DISPATCH line carries provider, model and reasoning effort from hooks/lib/route-label.ts. A mark is ✓ only on codex's own session log or the engine-resolved model (LIFEOS/TOOLS/RouteTrail.ts), and a helper run carries LIFEOS_DISPATCH_ID so it binds to its own dispatch.

Gotchas

  • Whether an open session runs the current module depends on how the plugin loaded. This install's loading topology (which marketplace, which mods, which skills-folder copy is disabled) is recorded in <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/LifeOSHooks/Config.md (configRoot is $CLAUDE_CONFIG_DIR when set, else ~/.claude); read it before answering a reload question. A plugin loaded from a folder marketplace reaches no open session until /reload-plugins there (2.1.287+); claude plugin update reports "nothing to update" because it reads the folder at load (§ Anti-criteria holds the reporting rule). A plugin loaded straight from a skills folder (LifeOSHooks@skills-dir) is watched instead (plugin-authoring reference, 2.1.296): every save, from any session, hot-reloads the module in every open session and prints a <plugin>: reloaded (N hooks: …) line into each transcript. The marketplace wiring is a folder marketplace listing this folder by relative path (claude plugin marketplace add <folder>, then claude plugin install <name>@<marketplace>) with the <name>@skills-dir copy disabled in settings, so the module never loads twice; /ic plugin-load holds it wherever .claude-plugin/marketplace.json exists. Because the loaded module can lag the file, a native command hook never fast-exits on the bare stamp: it reads hookCovers(sid, cap), and the cap is written by HookBridge prompt-context, which only the module that hands the work over calls. Adding a new hand-over means adding a cap (hooks/lib/function-hooks.ts HookCap), never a stamp check.
  • Transcript redaction (ISC-45) replaces a pasted secret with a tag in every model-facing row. It reduces what reaches disk and is no guarantee, so a secret pasted into a prompt is still treated as exposed and rotated. A plugin reload drops the tag map; a literal tag then runs harmlessly and the tool fails on it, which is the visible signal to paste the value again. Since 2026-09-07 (ISC-49) tool results are walked too: a key that a Bash, Read or WebFetch returns is tagged before the model sees it, and the tag swaps back in Bash, WebFetch, Write and Edit. Shapes only (SECRET_VALUE_SHAPES), never entropy, emails or IPs.
  • Module-authoring facts (engine API shapes since 2.1.273 and 2.1.280, registration rules, scrollback and repaint behaviour, the model-call and band rules) live in References/ModuleGotchas.md.

Examples

User: "is the plugin loaded and working this session"
→ Verdict: armed on build <N> (or not), with the stamp file's caps for this session and `hooks/lib/build.ts` quoted; a headless probe's `settled` / `failed to load` lines when the question is about a fresh session
User: "types mismatch 2.1.261 vs build 2.1.263 statusline warning"
→ Declarations for 2.1.263 regenerated from the running build's plugin-authoring skill, `TYPES_BUILD` set to 2.1.263, typecheck and tests pass; the answer names both builds
User: "why is the memory line missing"
→ The memory line is logged, not drawn anywhere: the 🧠 chip left the statusline on 2026-09-20 and the board pane on 2026-10-11, so the answer points at the per-session lines MemoryTurnStart writes (`HookBridge memory-line <sid>`), not at the plugin or the statusline

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