analytics
Skill4 starsChanged 9 days agoMITView on GitHub
Vault-level content analytics — file creation trends, skill adoption, contact engagement, content distribution, pipeline outcome metrics (insights/tasks/changelog per meeting), and unprocessed backlog detection. Outputs to .analytics/ folder.
69 other projects use a version of this.
Adopted by
Most recently taken up by
- CyrusNuevoDia/skill-language-servertheir own version, first seen Nov 8, 2026
- grainulation/grainulatortheir own version, first seen Nov 3, 2026
- pixelswithbliss/claude-skillstheir own version, first seen Nov 1, 2026
- epicx-labs/keytomic-claude-plugintheir own version, first seen Nov 1, 2026
- xuweizhengo/skills-hubtheir own version, first seen Nov 1, 2026
- AlekseiUL/sprut-agent-kittheir own version, first seen Nov 1, 2026
Used with
Projects with it also use popups, free-tools and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
CesarjoquinSkillpopups
When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes. Also use when the user mentions "exit intent," "popup conversions," "modal optimization," "lead capture popup," "email popup," "announcement banner," "overlay," "collect emails with a popup," "exit popup," "scroll trigger," "sticky bar," or "notification bar." Use this for any overlay or interrupt-style conversion element. For forms outside of popups, see cro. For general page conversion optimization, see cro.
Also in 23 projects that use this
CesarjoquinSkillfree-tools
When the user wants to plan, evaluate, or build a free tool for marketing purposes — lead generation, SEO value, or brand awareness. Also use when the user mentions "engineering as marketing," "free tool," "marketing tool," "calculator," "generator," "interactive tool," "lead gen tool," "build a tool for leads," "free resource," "ROI calculator," "grader tool," "audit tool," "should I build a free tool," or "tools for lead gen." Use this whenever someone wants to build something useful and give it away to attract leads or earn links. For downloadable content lead magnets (ebooks, checklists, templates), see lead-magnets.
Also in 24 projects that use this
coreyhaines31Skillmarketing-council
When the user wants multiple expert perspectives on a marketing question — a simulated board of advisors staffed by legendary marketers (Seth Godin, David Ogilvy, Eugene Schwartz, April Dunford, Rory Sutherland, Alex Hormozi, Byron Sharp, and more). Also use when the user mentions 'marketing council,' 'board of advisors,' 'advisory board,' 'what would Seth Godin say,' 'what would Ogilvy think,' 'channel Hormozi,' 'get multiple perspectives,' 'debate this,' 'have the council review,' 'marketing mentors,' or asks how a famous marketer would approach their problem. The council gives each advisor's take through their documented frameworks, surfaces where they disagree, and synthesizes a recommendation. For executing the winning direction, hand off to positioning, offers, copywriting, ads, or the relevant skill.
Also in 19 projects that use this
roerohanSkillemails
When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email program. Also use when the user mentions "email sequence," "drip campaign," "nurture sequence," "onboarding emails," "welcome sequence," "re-engagement emails," "email automation," "lifecycle emails," "trigger-based emails," "email funnel," "email workflow," "what emails should I send," "welcome series," or "email cadence." Use this for any multi-email automated flow. For cold outreach emails, see cold-email. For in-app onboarding, see onboarding.
Also in 21 projects that use this
ukunal91appSkillcommunity-marketing
Build and leverage online communities to drive product growth and brand loyalty. Use when the user wants to create a community strategy, grow a Discord or Slack community, manage a forum or subreddit, build brand advocates, increase word-of-mouth, drive community-led growth, engage users post-signup, or turn customers into evangelists. Trigger phrases: "build a community," "community strategy," "Discord community," "Slack community," "community-led growth," "brand advocates," "user community," "forum strategy," "community engagement," "grow our community," "ambassador program," "community flywheel.
Also in 26 projects that use this
coreyhaines31Skillmarketing-loops
When the user wants to set up a recurring, self-running marketing workflow — a repeatable loop an AI agent runs on a cadence (weekly, daily, on a trigger) rather than a one-off task. Also use when the user mentions 'marketing loop,' 'recurring marketing workflow,' 'automate my marketing,' 'marketing on autopilot,' 'weekly marketing review,' 'ad fatigue check,' 'weekly ads check,' 'content refresh loop,' 'churn watch,' 'ranking drop alert,' 'run my SEO,' 'SEO operator,' 'daily SEO agent,' 'run my outbound,' 'AI SDR,' 'reply triage,' 'always-on marketing,' 'marketing automation workflow,' or 'run this every week.' Use this to pick, adapt, and schedule an ongoing marketing loop that orchestrates the other marketing skills. For one-off marketing ideas, see marketing-ideas. For the experimentation loop specifically, see ab-testing.
Also in 10 projects that use this
- +6 more from Cesarjoquin
Other versions69 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 69
- coreyhaines31/marketingskills★ 59ksame name
- getsentry/sentry★ 46ksame name
- thewh1teagle/vibe★ 8ksame name
- microsoft/power-platform-skills★ 1.1ksame name
- Nexus-JPF/note-companion★ 874same name
- microsoft/rayfin★ 646same name
- LedgerHQ/ledger-live★ 627same name
- Cesarjoquin/Marketing-Skills★ 190same name
- microsoft/awesome-rayfin★ 108same name
- TheAceTeam/CC-Flight★ 93same name
59 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository13 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- companySkill
- correspondenceSkill
- handoffSkill
- inboxSkill
- insightsSkill
- ops-baseSkill
- opsSkill
- outboxSkill
- preparationSkill
- tasksSkill
- transcriptSkill
- update-skillsSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. 0 are common, 7 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 58 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 21
Non-destructive: Only writes to .analytics/ — never modifies existing files.
- Very specific: line 29
All output goes to {vault_root}/.analytics/ (CR-097).
- Very specific: line 33
Before 1.83.0 this was
_analytics/: If {vault_root}/_analytics/ exists and .analytics/ does not, offer to move it (the whole folder, its … - Very specific: line 48
Archive policy: When writing a new snapshot, move any existing file of the same type to .archive/ with its date prefix preserved.
- Distinctive: line 127
Before including a contact in named output:
- Very specific: line 130
If _meta.yaml exists and has classification field: use it
- Distinctive: line 153
Run file discovery (scan vault)
- Very specific: line 170
Compute the knowledge-loop ratio (CR-175): run python3 ~/.claude/skills/insights/compile_status.py <vault> --json and record ledgers, …
- Very specific: line 362
Run file discovery, filtered to _contacts/ paths
- Distinctive: line 440
Run file discovery (same scan as overview)
- Very specific: line 538
Read _inbox/_inbox.yaml if it exists
- Distinctive: line 546
Only include folders with 2+ transcript files (CR-099.
- Distinctive: line 548
Write summary table at top with all four categories and suggested actions.
- Distinctive: line 650
If vault root CLAUDE.md specifies a language policy, follow it
- Distinctive: line 651
Default: Swedish for section headers and labels, English for technical terms
“Common” is measured: kept by at least 6 in 10 of the 58 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/analytics -- Vault Content Analytics
Analyse the vault as a dataset — file metadata (names, dates, paths, counts), not file contents. Answers "how is my system performing?" rather than "what did I learn from this conversation?"
Standalone skill — no dependency on ops-base or ops-config.
Key distinction from /insights: The insights skill extracts knowledge from conversations (decisions, learnings, patterns about people and projects). This skill analyses the vault itself — creation velocity, skill adoption, engagement frequency, content distribution.
Design Principles
- Metadata and structured fields only. Read filenames, paths, dates, and file sizes. Never read prose content — the only in-file reads allowed are lightweight classification (H1 heading, first line) and structured-field scans for the pipeline subcommand: regex-matching
date:/type:lines in_insights.yaml,created:lines in_tasks.yaml, and- **YYMMDD:bullets inCHANGELOG.md. Field values only; summaries, rationale, and notes are never read. - Non-destructive. Only writes to
.analytics/— never modifies existing files. - Snapshot-based. Each run produces a dated snapshot. Historical snapshots enable trend comparison.
- Privacy-aware. Contact names appear in analytics (they are folder names, not extracted content). Mark private contacts with
private: truein_meta.yamlto exclude them from output.
Output Location
All output goes to {vault_root}/.analytics/ (CR-097). A dot surface: read on demand, never by a
folder walk -- the snapshots are named YYMMDD-*.md, the pattern skills use to find notes, and a dot
prefix keeps them out of every walk by rule rather than by exception.
Before 1.83.0 this was _analytics/. If {vault_root}/_analytics/ exists and .analytics/ does
not, offer to move it (the whole folder, its .archive/ included) before writing, and write nothing
until the user answers. Never write to both. Readers fall back to _analytics/ for one release.
.analytics/
├── YYMMDD-vault-overview.md <- /analytics overview
├── YYMMDD-skill-adoption.md <- /analytics skills
├── YYMMDD-contact-engagement.md <- /analytics contacts
├── YYMMDD-pipeline-report.md <- /analytics pipeline
├── YYMMDD-backlog-report.md <- /analytics backlog
└── .archive/ <- older snapshots (auto-archived)Archive policy: When writing a new snapshot, move any existing file of the same type to .archive/ with its date prefix preserved. Keep the latest of each type at the top level.
Vault Detection
Determine vault root:
- Walk up from cwd looking for
_contacts/or_projects/markers - Fallback:
$OBSIDIAN_VAULTenvironment variable - Fallback: cwd itself
File Discovery
The core scanning step shared by all subcommands.
YYMMDD File Detection
Scan vault recursively (max depth 8, skip .archive/, .handoff/, .git/, node_modules/, clones/). Match files where the basename starts with 6 digits followed by a separator:
Pattern: /^(\d{6})[-_ ]/Validate the 6 digits as a plausible date:
- Year (positions 1-2): 22-29 (2022-2029)
- Month (positions 3-4): 01-12
- Day (positions 5-6): 01-31
Metadata Collected Per File
| Field | Source |
date | Filename prefix (YYMMDD) |
path | Relative path from vault root |
directory | Parent directory (2 levels from vault root) |
extension | File extension (.md, .txt, .pptx, etc.) |
skill_type | Classified by path and filename keywords (see below) |
contact | Extracted from _contacts/{name}/ path segment, if present |
Skill Classification
Classify each file by path first, keywords second:
Step 1 — Path-based classification (highest confidence):
| Path contains | Classification |
_inbox/ | inbox |
.analytics/ (or legacy _analytics/) | skipped -- a dot surface is outside every walk; the legacy path is skipped explicitly until moved |
_outbox/ | outbox |
Step 2 — Keyword-based classification (filename, case-insensitive):
| Keywords | Classification |
samtal, call, transcript | transcript |
agenda, facilitator | agenda (dual-mode docs, CR-018 — check before preparation) |
förberedelse, preparation, prep- | preparation |
meeting, möte, standup, board, alignment, kickoff, weekly, sprint, retro, sync, sammanfattning, summary | ops/meeting |
Step 3 — Directory-context classification (for files that didn't match keywords):
| Directory pattern | Classification |
meetings/ or moten/ or möten/ anywhere in path | ops/meeting |
ops/ anywhere in path | ops |
_resor/ or resor/ | travel |
ppc/ or marketing/ or marknads | marketing |
.txt extension | raw-text |
.pptx, .pdf, .docx, .xlsx | office-doc |
.png, .jpg, .jpeg, .heic | image |
Step 4 — Fallback: uncategorized
Privacy Filtering (CR-009)
Before including a contact in named output:
- Resolve classification for the contact folder:
- If
_meta.yamlexists and hasclassificationfield: use it - Else if
_meta.yamlexists and hasprivate: true: treat aspersonal - Else check folder name against
privacy_defaultsinbase.yaml:_contacts/a1-*or_contacts/a2*→family
- Else default:
professional
- If
- Apply filtering by subcommand:
/analytics contacts: Excludefamilyandpersonalcontacts from output/analytics overview,/analytics skills: Include all files in aggregate counts without contact attribution/analytics backlog: Include all files (backlog is about content gaps, not people)
- Never expose family/personal contact names in any output file. Aggregate their files into totals only.
Subcommands
overview -- Vault-wide metrics snapshot
Trigger: /analytics overview or /analytics (default subcommand)
Steps:
- Run file discovery (scan vault)
- Compute summary metrics:
- Total YYMMDD files, date range, unique active dates, active months
- Current pace (files/day for current quarter)
- Active-day density — active days / calendar days for the current quarter (e.g.
84/91), plus files per active day. The gap between files/day and files/active-day shows whether growth comes from busier days or from fewer idle days. - Trend direction (current quarter rate vs previous quarter rate)
- Compute yearly totals with year-over-year growth multiplier
- Compute content type × quarter pivot — the core analytical view showing how each skill type's volume evolves over time. Columns: transcript, ops/meeting, preparation, ops, travel, raw-text, uncategorized, other. Use
·for zero cells. - Compute content type × month pivot (last 12 months) — same columns, monthly granularity for recent trends
- Compute monthly activity bar chart (last 12 months)
- Compute quarterly trend table with deltas
- Compute distributions:
- By skill type — table with count and percentage
- By top-level directory — top 15 areas with count (private contacts aggregated as single anonymous row)
- By file extension — count per extension
- By day of week — weekday vs weekend pattern with bar chart
- Compute top 5 busiest dates — date, day of week, count
- Compute the knowledge-loop ratio (CR-175): run
python3 ~/.claude/skills/insights/compile_status.py <vault> --jsonand record ledgers, entries and the never/stale/current split as a row in the snapshot. Do not recompute it here -- the same script answers for/ops checkand/insights status, and three implementations of one number is three numbers. Why it belongs in a trend file rather than only in a check: a check says whether the loop is behind today; the snapshot series says whether capture is outpacing synthesis. Those are different questions, and the second is the one that decides whether the cadence needs to change or a single run will clear it. A ratio that degrades steadily across snapshots is a cadence finding; one that jumps once is a backlog. - Write to
.analytics/YYMMDD-vault-overview.md
Output format:
# Vault Analytics — Overview
Generated: YYYY-MM-DD
---
## Summary
| Metric | Value |
|--------|-------|
| Total files | N |
| Date range | YYYY-MM-DD → YYYY-MM-DD |
| Active months | N |
| Avg files/month | N.N |
| Unique dates | N |
| Current pace | N.N files/day (QN YYYY) |
| Active days (current quarter) | N/N |
| Files per active day | N.N |
| Trend | ↑ N% vs previous quarter |
---
## Yearly Growth
| Year | Files | Growth |
|------|------:|-------:|
| YYYY | N | — |
| YYYY | N | N.Nx |
---
## Content Type × Quarter
| Quarter | transcript | ops/meeting | preparation | ops | travel | raw-text | uncategorized | other | **Total** |
|---------|------:|------:|------:|------:|------:|------:|------:|------:|------:|
| YYYY-QN | N| N| ·| N| ·| N| N| ·| **N** |
| YYYY-QN * | N| N| N| ·| N| ·| N| N| **N** |
\* partial quarter
---
## Content Type × Month (Last 12)
| Month | transcript | ops/meeting | preparation | ops | travel | raw-text | uncategorized | other | **Total** |
|-------|------:|------:|------:|------:|------:|------:|------:|------:|------:|
| YYYY-MM | N| N| ·| N| ·| N| N| ·| **N** |
---
## Monthly Activity (Last 12 Months)
| Month | Files | |
|-------|------:|---|
| YYYY-MM | N | ████████████ |
---
## Quarterly Trend
| Quarter | Files | Delta |
|---------|------:|------:|
| YYYY-QN | N | — |
| YYYY-QN | N | +N |
| YYYY-QN (partial) | N | -N |
---
## Content Distribution
### By Skill Type
| Type | Files | % |
|------|------:|----:|
| ops/meeting | N | N% |
| transcript | N | N% |
| preparation | N | N% |
| ... | | |
### By Directory (Top 15)
| Directory | Files |
|-----------|------:|
| org/meetings | N |
| *(private contacts, N folders)* | *N* |
### By File Extension
| Extension | Files |
|-----------|------:|
| .md | N |
| .txt | N |
### By Day of Week
| Day | Files | |
|-----|------:|---|
| Monday | N | █████████████ |
---
## Busiest Dates
| Date | Day | Files |
|------|-----|------:|
| YYYY-MM-DD | Thu | N |skills -- Skill adoption analysis
Trigger: /analytics skills
Steps:
- Run file discovery
- Build skill share pivot (absolute) — same columns as the overview pivot (transcript, ops/meeting, preparation, ops, travel, raw-text, uncategorized, other), one row per quarter. Use
·for zero cells. - Build skill share pivot (percentage) — same layout but percentages per quarter.
- For each skill type, compute per-skill summary:
- First appeared — which quarter the skill type first produced files
- Total files across all time
- Current share — percentage in the most recent full quarter, with ↑/↓/→ arrow vs previous quarter
- Peak quarter — quarter with most files from this skill
- Compute structured vs unstructured ratio by quarter. Structured = transcript + ops/meeting + preparation + ops. Unstructured = everything else. Show absolute counts, and a trend line from first to last full quarter.
- Write to
.analytics/YYMMDD-skill-adoption.md
Output format:
# Vault Analytics — Skill Adoption
Generated: YYYY-MM-DD
---
## Skill Share Over Time (absolute)
| Quarter | transcript | ops/meeting | preparation | ops | travel | raw-text | uncategorized | other | Total |
|---------|------:|------:|------:|------:|------:|------:|------:|------:|------:|
| YYYY-QN | N| N| ·| N| ·| N| N| ·| N |
| YYYY-QN * | N| N| N| ·| N| ·| N| N| N |
## Skill Share Over Time (%)
| Quarter | transcript | ops/meeting | preparation | ops | travel | raw-text | uncategorized | other |
|---------|------:|------:|------:|------:|------:|------:|------:|------:|
| YYYY-QN | N%| N%| ·| N%| ·| N%| N%| · |
---
## Per-Skill Trends
### transcript
- First appeared: YYYY-QN
- Total files: N
- Current share: N% (↑ vs previous quarter N%)
- Peak quarter: YYYY-QN (N files)
### ops/meeting
[Same structure for each skill with >0 files]
---
## Structured vs Unstructured
| Quarter | Structured | Unstructured | Structured % |
|---------|----------:|-------------:|-------------:|
| YYYY-QN | N | N | N% |
Trend: Structured content share grew from **N%** (YYYY-QN) to **N%** (YYYY-QN).contacts -- Contact engagement analysis
Trigger: /analytics contacts
Steps:
- Run file discovery, filtered to
_contacts/paths - Apply privacy filter — resolve
classificationper contact (see Privacy Filtering section). Excludefamilyandpersonalcontacts from named output. Report count and total files of excluded contacts as an anonymous summary line. - For each remaining (professional) contact, compute:
- Total file count
- First and last file dates (as YYYY-MM)
- Active months count
- Peak month (month with most files, with count)
- Average files per active month
- Quarterly activity map (for timeline visualisation)
- Compute contact lifecycle metrics:
- New contacts by year — when contacts first appeared, with cumulative total
- Active contacts per quarter — contacts with at least 1 file in the quarter
- Sort contacts by total file count descending
- Generate activity timelines — a monospace block showing quarterly engagement density for top 20 contacts using heat notation:
·= 0,░= 1-2,▒= 3-5,▓= 6-10,█= 11+ - Write to
.analytics/YYMMDD-contact-engagement.md
Output format:
# Vault Analytics — Contact Engagement
Generated: YYYY-MM-DD
*N private contacts excluded (N files in aggregate totals only)*
---
## Top Contacts (by file count)
| Contact | Files | Span | Active mo | Peak month | Avg/mo |
|---------|------:|------|----------:|-----------|-------:|
| name | N | YYYY-MM → YYYY-MM | N | YYYY-MM (N) | N.N |
---
## Activity Timelines
Contact Q4 Q1 Q2 Q3 Q4 Q1 Q2 contact-name (N) · ░ ▒ ▓ █ ▒ ·
Legend: · = 0 ░ = 1-2 ▒ = 3-5 ▓ = 6-10 █ = 11+
---
## Network Growth
| Year | New contacts | Cumulative |
|------|------------:|----------:|
| YYYY | N | N |
## Active Contacts Per Quarter
| Quarter | Active contacts |
|---------|----------------:|
| YYYY-QN | N |pipeline -- Input → meeting docs → outcomes over time
Trigger: /analytics pipeline
The document counts alone are not the full picture — a meeting's outcomes live in structured files the other subcommands never touch. This subcommand traces the whole chain: what came in, what was documented, and what it produced.
Data sources (structured fields only — never prose):
| Layer | Source | Field scanned |
| Insights | _insights.yaml (all folders) | date: + preceding type: per entry |
| Tasks created | _tasks.yaml (v2, all folders) | created: per task. Folders declaring workflows.task_ledger.mode other than local are excluded and listed separately as external ledger (CR-041) |
| CHANGELOG entries | CHANGELOG.md (all folders) | - **YYMMDD: bullet dates |
| Outbox packages | _outbox/** file discovery | filename YYMMDD prefix |
| New contacts | _contacts/<name>/ | earliest YYMMDD file per folder |
Steps:
- Run file discovery (same scan as overview)
- Scan the structured sources above
- Build the grouped chain table — quarters as columns (metrics as row groups, so the whole chain aligns vertically). Collapse quarters before the first meaningful year into a single
≤YYYYcolumn to keep width manageable. Row groups:- INPUT: transcripts, raw text (.txt)
- MEETING DOCS: summaries/notes, agenda/facilitator, preparations
- OUTCOMES: insights total + one row per insight type (largest types first, small ones aggregated as "other"), tasks created, CHANGELOG entries, outbox packages, new contact folders
- Compute derived ratios for quarters where the systems are fully active: insights per meeting+transcript, tasks per meeting+transcript, CHANGELOG entries per meeting+transcript.
Exclude folders whose task ledger is not
local(CR-041) from the tasks-per-meeting ratio, and name them under the table as external ledger: work tracked in<system>. Their zero is a correct pipeline, not a gap -- counting it drags the ratio down and reports a healthy project as failing. This skill does not read the external system: counting items in a repo registry or an issue tracker is a different and much larger job, and the ratio simply excludes what it cannot see. - Compute per-day averages by quarter: active days / calendar days, files/day, meetings+transcripts/day, insights/day, tasks/day, files per active day (partial quarters use elapsed days)
- Write to
.analytics/YYMMDD-pipeline-report.md
Report structure — two parts, mandatory:
- Part 1 — Overview: headline totals table, a numbered list of interpreted findings (adoption inflections, ratio shifts, what converged or diverged — written as conclusions, not table prose), and the measurement notes.
- Part 2 — Deep dive: the grouped chain table, derived ratios, per-day averages, and any monthly detail.
Measurement notes (mandatory in every pipeline report):
- Outcome systems have adoption dates: a
·before a system existed means "not yet measured", not "nothing happened". State each source's start-of-record explicitly (e.g. insights backfilled with extraction dates, tasks v2 introduction). - CHANGELOG entries carry the original meeting date and are therefore the best longitudinal outcome proxy.
- Action items inside summary tables are NOT counted (would require prose reads); the task count is the nearest proxy.
- Mark partial quarters/months and use elapsed days for their per-day rates.
Output format (Part 2 core table):
| Group / metric | ≤YYYY | YY-Q1 | YY-Q2 | ... | **Total** |
|---|---:|---:|---:|---:|---:|
| **INPUT** | | | | | |
| Transcripts | N | N | N | ... | **N** |
| Raw text (.txt) | N | N | N | ... | **N** |
| **MEETING DOCS** | | | | | |
| Summaries / notes | N | N | N | ... | **N** |
| Agenda/facilitator | · | N | N | ... | **N** |
| Preparations | · | N | N | ... | **N** |
| **OUTCOMES** | | | | | |
| Insights (total) | · | · | N | ... | **N** |
| — learning | · | · | N | ... | **N** |
| — pattern | · | · | N | ... | **N** |
| Tasks created | · | · | N | ... | **N** |
| CHANGELOG entries | N | N | N | ... | **N** |
| Outbox packages | · | · | N | ... | **N** |
| New contact folders | N | N | N | ... | **N** |Per-day averages table:
| Metric | YY-Q1 | YY-Q2 | ... |
|---|---:|---:|---:|
| Active days (≥1 file) | N/N | N/N | ... |
| Files/day | N.N | N.N | ... |
| Meetings+transcripts/day | N.N | N.N | ... |
| Insights/day | · | N.N | ... |
| Tasks/day | · | N.N | ... |
| Files per active day | N.N | N.N | ... |backlog -- Unprocessed content detection
Trigger: /analytics backlog
Identifies content that may benefit from processing through existing skills.
Steps:
- Run file discovery
- Detect unprocessed transcriptions (CR-099):
- Find
.txtfiles with YYMMDD prefix (classified asraw-text) - Exclude a file when any of these holds, and count each cause:
- its directory contains a
_manifest.md-- the folder's intent is declared - an
.mdfile sharing its date prefix sits in the same directory or in a sibling directory (same parent) -- the summary exists. A project keeps raw material and summaries in separate folders (transcripts/besidemeetings/), so looking only in the same directory flags every processed file there. Like step 3's ancestor rule this is a heuristic: an.mdof the same date in a sibling folder may belong to another meeting that day, which costs a missed flag, not a false one - its directory name marks it as archived (
arkiv,archive,raw,källmaterial) - the newest file in its directory is older than 12 months -- dormant, not queued
- its directory contains a
- The survivors are the queue: group by directory, sorted by count descending, with count and
date range. Extension plus date alone cannot tell a transcript awaiting
/transcriptfrom raw material kept deliberately after processing -- on one vault a single archive of 124 old.txtfiles was 36 % of the unfiltered total
- Find
- Detect orphaned content (CR-099):
- Find directories with 2+ YYMMDD-prefixed files and no
CHANGELOG.md - Exclude a directory, counting each cause, when:
- an ancestor up to 4 levels holds a
CHANGELOG.md-- a project indexes at its root, not per subdirectory (meetings/,audits/) - it holds a
_manifest.md - any path component is dot-prefixed -- raw-material surfaces by convention
- an ancestor up to 4 levels holds a
- Show the survivors, top 15 by file count, with
*(+ N more)*if truncated. Unfiltered, this step was wrong nine times in ten on one vault: 241 flags, 19 real - The ancestor rule is a heuristic: it assumes the ancestor's CHANGELOG covers the subdirectory, which it usually does. Verifying that would mean parsing the CHANGELOG for links to every file -- a separate concern. The tradeoff is a few misses for removing most false positives
- Find directories with 2+ YYMMDD-prefixed files and no
- Detect stale inbox items:
- Read
_inbox/_inbox.yamlif it exists - Count items with
status: pending - Report age of oldest pending item
- Read
- Detect insight gaps:
- Find folders with
CHANGELOG.mdbut no_insights.yaml - Count YYMMDD-prefixed files in each (potential insight yield)
- Exclude a folder whose ancestor up to 4 levels holds an
_insights.yaml, or that holds a_manifest.md(CR-099) - Only include folders with 2+ transcript files (CR-099; was 1+)
- Show top 15 by transcript count, with
*(+ N more)*if truncated
- Find folders with
- Write summary table at top with all four categories and suggested actions. Print flags raised and flags after exclusions side by side, and the exclusion counts by cause (CR-099) -- a single number that has been silently filtered misleads as much as an unfiltered one
- Write to
.analytics/YYMMDD-backlog-report.md
Output format:
# Vault Analytics — Backlog Report
Generated: YYYY-MM-DD
---
## Summary
| Category | Flags raised | After exclusions | Potential action |
|----------|-------------:|-----------------:|-----------------|
| Raw text files (.txt) | N | N | `/transcript` or `/inbox` |
| Folders without CHANGELOG | N dirs | N dirs, N files | Manual triage |
| Pending inbox items | N | N | `/inbox route` |
| Folders missing _insights.yaml | N dirs | N dirs, ~N transcripts | `/insights reprocess` |
Excluded by cause: ancestor CHANGELOG N · `_manifest.md` N · dot path N · summary exists N ·
archive folder N · dormant > 12 months N
---
## Raw Text Files (Likely Unprocessed Transcriptions)
| Directory | Count | Date range |
|-----------|------:|-----------|
| _contacts/name | N | YYMMDD → YYMMDD |
| _projects/name | N | YYMMDD → YYMMDD |
---
## Folders Without CHANGELOG
| Folder | YYMMDD files |
|--------|-------------:|
| org/meetings/area | N |
| _contacts/name/subfolder | N |
| *(+ N more)* | |
---
## Pending Inbox Items
N items pending. Oldest: YYYY-MM-DD
(or: No pending items.)
---
## Insight Reprocessing Opportunities
| Folder | Transcripts | Has _insights.yaml |
|--------|------------:|-------------------:|
| _contacts/name | N | No |
| org/_projects/name | N | No |
| *(+ N more)* | | |help -- Usage guide
Trigger: /analytics help
Output:
/analytics -- Vault Content Analytics
======================================
Analyse the vault as a dataset -- file metadata, not contents.
Usage:
/analytics Vault overview (default)
/analytics overview Same as above
/analytics skills Skill adoption over time
/analytics contacts Contact engagement timelines
/analytics pipeline Input -> meeting docs -> outcomes chain
/analytics backlog Unprocessed content detection
/analytics help This guide
Output: .analytics/ folder in vault root (one snapshot per run).
Data flow:
YYMMDD-*.* files ──> /analytics ──> .analytics/YYMMDD-*.md
(read filenames, (classify, (markdown snapshots,
paths, dates) aggregate) one per subcommand)
Related skills:
/insights Extract knowledge FROM file contents
/insights status Count _insights.yaml coverage
/analytics Longitudinal view (trends over time)Language
Output language follows the same resolution as other standalone skills:
- If vault root
CLAUDE.mdspecifies a language policy, follow it - Default: Swedish for section headers and labels, English for technical terms
- Swedish text MUST use correct å, ä, ö characters
Notes
- The
.analytics/folder is created automatically on first run (after offering to move a legacy_analytics/) - Old snapshots are archived to
.analytics/.archive/— never deleted - This skill reads
_insights.yaml/_tasks.yaml/CHANGELOG.mdat field level only (dates and type enums for the pipeline subcommand) — entry contents (summaries, rationale, notes) remain the visualisation app's domain - This skill does NOT read file prose (except optional H1 heading for display)
- Contact privacy is respected via
_meta.yamlprivate: true - The skill classification algorithm uses path first, keywords second — this avoids the ~17% miscount that pure keyword matching produces (e.g., acme/meetings/ files with descriptive names)
- Quarterly comparisons handle partial quarters gracefully — the current quarter is annualised for trend comparison
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

