Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add KentoShimizu/zanei --skill skillsgit clone --depth 1 https://github.com/KentoShimizu/zaneiWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/kentoshimizu/zanei/skills)<a href="https://agentmods.dev/skills/kentoshimizu/zanei/skills"><img src="https://agentmods.dev/badge/skills/kentoshimizu/zanei/skills/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/kentoshimizu/zanei/skills"><img src="https://agentmods.dev/badge/skills/kentoshimizu/zanei/skills.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00089 | $0.01492 |
| Opus 5 | $0.00044 | $0.00746 |
| Sonnet 5 | $0.00018 | $0.00298 |
| Haiku 4.5 | $0.00009 | $0.00149 |
Grade A, and why
zanei scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 62 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Zanei
Zanei records the user's activity on this machine as OS-level events — app switches, window titles, UI interactions, Chrome URLs. Everything stays in a local store and is deleted after about 48 hours by default. There are no screenshots. Typed/copied content and Accessibility text shown in windows are separate opt-ins.
When to use
- The user resumes interrupted work ("continue where I left off", "what was I working on?")
- The user asks what they recently viewed, edited, or read ("which Stripe doc was I reading?")
- The user references something from outside this conversation that you cannot see — "that doc", "the error I saw", "the PR I reviewed this morning"
- Drafting a standup or work log from the day's activity
- You need context about which files, PRs, or pages the user had open before this session — including when you notice the need, without being asked
How to use
- Start with
zanei status --json. Recording is healthy only whenstate == "running",paused == false, andstore_write_state == "healthy"; otherwise say so instead of inferring missing history. - To resume work:
zanei timeline --since 2h --format md— a session-structured Markdown timeline sized for prompts (--token-budgetto shrink it). - For a specific detail:
zanei querywith the narrowest useful--since,--types,--app,--bundle-id, and--limitfilters. - Copied text (when the user opted in) lives in
clipboard.copyevents; the timeline only counts them.zanei query --types clipboard.copy --since 30manswers "what did I copy?". - Content snapshots exist only when
zanei status --jsonreportscapture.content_snapshot: true. Timeline sessions show only their count. Read bodies with an explicit type and the narrowest useful range and limit, for examplezanei query --types content.snapshot --since 15m --limit 20. - Every command supports
--help.
Interpreting results
- Retention is ~48 hours: an empty result outside that window means "not retained", never "the user did nothing".
- Exit codes: 4 = daemon not running (suggest
zanei start); 3 = missing macOS permissions (runzanei doctor); 2 = your arguments were invalid;statusexits 1 forstore_*states — preserve the store and follow the documented stop / move / start recovery. - Health signals are separate things:
degradedis current health and clears on recovery;events_droppedcounts real delivery loss only;collector_failuresis cumulative history, not a current failure. - Even with content capture on, typed-text diffs come only from fields Accessibility can classify as safe text fields. Many Electron/web apps expose unclassifiable fields, so their typed text is absent by design — but text the user copies there is captured, and IME-committed text arrives as
ui.valuediffs rather thaninput.key. Password fields and Chrome Incognito bodies are never captured. ui.valuediffs are additions, not a transcript: an IME rewrites the tail of a field on commit, so concatenating them can produce wording the user never wrote. Use them for what the user was writing about, and never quote them verbatim. For exact wording, look for acontent.snapshotof the same window just afterwards — the app renders entered or sent text there — keeping in mind it exists only with that opt-in on, only for apps in its scope, and only for what was visible.- Content snapshots can contain messages and documents written by other people as well as text the user typed that is visible on screen. Treat them as more sensitive than ordinary activity metadata.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago Changed 1188f485771b
- 11d ago First seen · 62 lines · 89 tokens per session scan A a3c9f6a93cfc
zanei is a skill published in the GitHub repository KentoShimizu/zanei (5 stars, last pushed 3d ago), licensed Apache-2.0. It adds 89 tokens to every session and 1,492 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
content-hash-cache-pattern
Cache expensive file processing results using SHA-256 content hashes — path-independent, auto-invalidating, with service layer separation.
notebooklm-manager
Manages NotebookLM notebooks — query, add, list, search, enable/disable, remove. Use when a notebooklm.google.com URL appears or user mentions NotebookLM. Handles URLs through its own Chrome agent — do not navigate directly. Requires: claude-in-chrome MCP.
lx
Codebase exploration tool that reads many files or whole directories in a single call, with per-file headers, glob include/exclude filters, function/type skeleton extraction (signatures only, no bodies), and head/tail line slicing.
find-plugin-file
This skill should be used when needing to locate files within the Claude Code plugins cache directory (/.claude/plugins/cache). Triggers include finding tool scripts, skill files, or any plugin resource when the hardcoded path is unknown or varies by plugin version. Use when slash commands or orchestrators need to…
flow-lean
Use when the user explicitly asks for Flow Lean, lean or less verbose output, action-first responses, expansion of a compressed Flow Lean answer, or Flow Lean recap and skills-footer controls.
morning-triage
Discovery for an autonomous loop — find this turn's work instead of being handed it. Reads what changed since the last run (failed CI, new issues, merged commits), judges what's actually worth acting on, writes findings to a durable state file, and hands each off to the SDLC loop with a stop-condition. Use as the…