agentleFS
aemerson-commitsaemerson-commits/shareable-skills/skills/insight/SKILL.md

insight

Skill1 starsChanged 8 months agoMITView on GitHub

Weekly: generate Obsidian insight report with metrics and priorities

4 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 1 is distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    All CLI commands output to stderr — always append 2>&1 and filter startup noise:

    line 28
  2. Distinctive:

    Read the most recent 5-7 files (one per session day).

    line 44
  3. Very specific:

    If your project captures web-vitals from real users (e.g., in a D1 rum_events table), query them now:

    line 75
  4. Very specific:

    If your project has an event_log table:

    line 108
  5. Very specific:

    If your installed CLI does support property:set, that route still works — the embedded-frontmatter approach above is just the more portable …

    line 132

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Weekly Insight Report — Obsidian Vault

Generate a weekly insight report summarizing development metrics, progress, and priorities.

Obsidian CLI

Binary: Auto-detect the Obsidian installation path — a system-wide install and a per-user install can both exist, so probe rather than hardcode:

OBS="/c/Program Files/Obsidian/Obsidian.exe"
[ ! -f "$OBS" ] && OBS="/c/Users/${USERNAME:-$USER}/AppData/Local/Programs/obsidian/Obsidian.exe"

⚠️ $USER is EMPTY in the Bash tool on Windows — $USERNAME carries it. A bare $USER silently builds /c/Users//AppData/..., which fails the [ -f ] test and reads as "not installed" rather than as a broken path.

Active vault: Set {{vault_path}} to your Obsidian vault location — resolve it at runtime (env override, then a candidate list) rather than hardcoding a username; the folder differs per machine.

All CLI commands output to stderr — always append 2>&1 and filter startup noise:

"$OBS" <command> [args] 2>&1 | grep -v "Loading\|out of date"

Steps

1. Gather Data

Discover this week's session notes:

"$OBS" files folder="{{project}}/Sessions" 2>&1 | grep -v "Loading\|out of date"

Read the most recent 5-7 files (one per session day).

Git stats for the week:

git log --oneline --since="7 days ago"
git diff --stat HEAD~{N}  # where N = commit count from above

Vault-wide open tasks:

"$OBS" tasks todo verbose 2>&1 | grep -v "Loading\|out of date"

Top topics this week (tag frequency):

"$OBS" tags counts sort=count 2>&1 | grep -v "Loading\|out of date"

Recurring unresolved items (items appearing in "Next Steps" across sessions):

"$OBS" search:context query="Next Steps|Left Off|Still on backlog" path="{{project}}/Sessions" limit=20 2>&1 | grep -v "Loading\|out of date"

Also review: memory/MEMORY.md (repo), CLAUDE.md (repo), {{project}}/Learnings/ (vault).

Real-User Monitoring (web-vitals) — past 7 days (if applicable):

If your project captures web-vitals from real users (e.g., in a D1 rum_events table), query them now:

Use p75, NOT mean. Core Web Vitals are defined at the 75th percentile precisely because backgrounded-tab samples poison the average — web-vitals reports LCP/FCP when a tab is refocused, which can be minutes later. Always: (1) filter outliers numeric_value < 60000, (2) report p75, (3) keep max visible so you can see the outlier tail you filtered.

npx wrangler d1 execute your-db --remote --command "
WITH f AS (
  SELECT project, message AS metric, numeric_value,
    ROW_NUMBER() OVER (PARTITION BY project, message ORDER BY numeric_value) AS rn,
    COUNT(*)     OVER (PARTITION BY project, message) AS n
  FROM rum_events
  WHERE event_type='perf' AND received_at >= datetime('now','-7 days')
    AND numeric_value < 60000          -- drop backgrounded-tab outliers (>60s = tab refocus, not a real load)
)
SELECT project, metric, n AS samples, ROUND(numeric_value,1) AS p75
FROM f WHERE rn = CAST(ROUND(0.75 * (n - 1)) AS INT) + 1   -- nearest-rank p75
ORDER BY project, metric" --json

Compare each p75 against the web.dev/vitals thresholds:

MetricGoodNeeds ImprovementPoor
LCP≤2500ms2500–4000ms>4000ms
CLS≤0.10.1–0.25>0.25
INP≤200ms200–500ms>500ms
FCP≤1800ms1800–3000ms>3000ms
TTFB≤800ms800–1800ms>1800ms

Flag any metric crossing into "needs improvement" or "poor" — and any metric that DEGRADED vs the prior 7 days (re-run with received_at BETWEEN datetime('now','-14 days') AND datetime('now','-7 days') to compare). A jump driven by a few huge samples (check max separately) is almost always the backgrounded-tab artifact, not a real regression — the <60000 filter + p75 already guard against it, but sanity-check before raising an alarm.

Error trends (if applicable):

If your project has an event_log table:

npx wrangler d1 execute your-db --remote --command "SELECT dashboard, category, status, COUNT(*) AS n FROM event_log WHERE eventType = 'error' AND createdAt >= datetime('now', '-7 days') GROUP BY dashboard, category, status ORDER BY n DESC" --json

Surface: total errors this week, top 3 categories by count, ratio of resolved/dismissed/still-new (the "noise floor"). If any single error type repeats >5 times, that's a hot spot worth calling out.

2. Generate Report

Create the insight file via CLI, with frontmatter embedded in the content:

Some Obsidian CLI versions have removed the property:set write subcommand entirely (it can exit non-zero with "command not found" on newer releases), while the read-side properties subcommand keeps working. Rather than depend on a write subcommand that may not exist, embed the frontmatter as a literal --- YAML block directly in the create call's content — that always works, since it's just markdown text.

"$OBS" create path="{{project}}/Insights/{YYYY-MM-DD}.md" content="---\ntype: insight\nweek-ending: {YYYY-MM-DD}\n---\n\n{report content}" 2>&1 | grep -v "Loading\|out of date"

Verify the frontmatter took:

"$OBS" properties path="{{project}}/Insights/{YYYY-MM-DD}.md" 2>&1 | grep -v "Loading\|out of date"

If your installed CLI does support property:set, that route still works — the embedded-frontmatter approach above is just the more portable default since it has no dependency on that subcommand existing.

Template:

# Weekly Insight — {YYYY-MM-DD}

## Development Summary

- **Commits this week**: {count}
- **Files changed**: {count}
- **Key features shipped**: [list]
- **Bugs fixed**: [list]

## Architecture Changes

- [any structural changes made]

## Current Priorities

1. [highest priority item]
2. [next priority]
3. [etc.]

## Blocked Items

- [items waiting on external action]

## Metrics / Health

- Components: {count} views, {total lines}
- Shared utilities: {function count}
- Workers/services: {status}
- Open vault tasks: {count from tasks todo}
- Top tags: {from tags counts}

## Real-User Monitoring (web-vitals)

_All values are **p75** with samples >60s filtered out (never report the mean)._

| Project | LCP | CLS | INP | FCP | TTFB | Samples | Status |
|---------|-----|-----|-----|-----|------|---------|--------|
| {project} | {p75 ms} | {p75} | {p75 ms} | {p75 ms} | {p75 ms} | {n} | good / needs-improvement / poor |

**Anomalies vs prior week:** {list any metric that degraded by >20% or crossed a threshold band}

**Errors logged this week (event_log):** {N total · X new · Y resolved · Z dismissed} — top categories: {list top 3}

**Hot spots:** {any error type with >5 occurrences this week}

## Recurring Unresolved Items

- [items appearing in "Next Steps" / "Left Off" across multiple sessions without completion]

## Recommendations

- [suggested improvements or focus areas for next week]

3. Update Roadmap

Check current roadmap tasks:

"$OBS" tasks todo path="{{project}}/Roadmap.md" verbose 2>&1 | grep -v "Loading\|out of date"

Mark completed items and update priorities based on the week's progress.

When to Run

  • End of week (Friday sessions)
  • Or when user explicitly requests /insight
  • Can also be triggered mid-week for a status check

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.