원클릭으로
note-graph
Regenerate notegraph.json + docs/notegraph.md + docs/notegraph.html from memory/ and docs/, PR + notify only when the graph changes
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Regenerate notegraph.json + docs/notegraph.md + docs/notegraph.html from memory/ and docs/, PR + notify only when the graph changes
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Audit every enabled skill's upstream file dependencies for staleness — flags chained skills about to consume yesterday's article or a long-dead topic file
Audit .github/workflows and composite actions with zizmor + actionlint, classify findings against the prior audit, auto-fix Critical/High regressions, and open a PR only when something actually changed.
Weekly API cost report — computes dollar costs from token usage, flags anomalies, forecasts burn, and prescribes concrete optimizations
Weekly partial-correlation of compute economics against a Hyperliquid macro basket — DePIN-token proxy track runs every week (n>180d), sweep-P&L track defers until n≥30 joined days
Score frontier LLMs (Claude, GPT, Gemini, DeepSeek, Grok) on a private compute-markets task corpus, track score deltas across releases, flag public-vs-private divergence
Save a note as one or more atomic notes under memory/notes/ (and optionally Supernotes). Splits bundled inputs into separate atomic files.
| name | Note Graph |
| description | Regenerate notegraph.json + docs/notegraph.md + docs/notegraph.html from memory/ and docs/, PR + notify only when the graph changes |
| var | |
| tags | ["meta","docs"] |
Today is ${today}. Regenerate the navigable link graph over memory/ + docs/. Skip notify and PR when nothing changed — silence on a stable corpus is the goal.
Build a fingerprint of every markdown file the extractor will scan (same set: memory/**/*.md + docs/**/*.md, excluding memory/logs/):
{
find memory docs -name '*.md' \
-not -path 'memory/logs/*' \
-not -path '*/node_modules/*' \
-not -path '*/.git/*' \
| sort | xargs sha1sum
sha1sum scripts/notegraph.mjs
} | sha1sum | awk '{print $1}' > /tmp/notegraph.fingerprint
Compare against memory/state/notegraph.json (key input_fingerprint). If identical:
notegraph: no input change, skipping.node scripts/notegraph.mjs
The script writes:
notegraph.jsondocs/notegraph.mddocs/notegraph.htmlIt prints a one-line summary like notegraph: 38 nodes · 147 hard · 12 soft · 1 orphans · 0 bundled — capture this for the notify message. bundled counts atomic notes (under memory/notes/, excluding daily/) whose body scores ≥3 on the bundle scorer — candidates for the reflect atomicity pass to split.
Diff the generated notegraph.json against HEAD:notegraph.json. Compute:
node_delta = current stats.nodes − previous stats.nodesedge_delta = current stats.edges − previous stats.edgesorphan_delta = current stats.orphans − previous stats.orphansbundled_delta = current stats.bundled − previous stats.bundlednew_orphans = nodes with inDegree==0 && outDegree==0 in current that weren't orphans in previousresolved_orphans = nodes that were orphans in previous but aren't nownew_bundled = nodes with bundled==true in current that weren't bundled in previousresolved_bundled = nodes that were bundled in previous but aren't nowSet verdict_one_line in priority order:
new_bundled.length > 0 → ${new_bundled.length} new bundled note(s): ${new_bundled[0].id}…new_orphans.length > 0 → ${new_orphans.length} new orphan(s): ${new_orphans[0]}…node_delta > 0 and orphan_delta <= 0 and bundled_delta <= 0 → +${node_delta} notes wired inedge_delta > 10 → +${edge_delta} new edgesgraph refreshed (${current.stats.nodes}n / ${current.stats.edges}e / ${current.stats.bundled}b)If git diff --quiet notegraph.json docs/notegraph.md docs/notegraph.html reports no diff (extractor output deterministic), exit silently — update the fingerprint state, no PR.
git checkout -b notegraph/${today} 2>/dev/null || git checkout notegraph/${today}
git add notegraph.json docs/notegraph.md docs/notegraph.html
git commit -m "notegraph: ${verdict_one_line}"
git push -u origin notegraph/${today}
gh pr create \
--title "notegraph: ${verdict_one_line}" \
--body "Auto-regenerated by the \`notegraph\` skill on ${today}.
Stats: ${current.stats.nodes} nodes · ${current.stats.hard} hard · ${current.stats.soft} soft · ${current.stats.orphans} orphans · ${current.stats.bundled} bundled
Delta: ${node_delta:+0} nodes, ${edge_delta:+0} edges, ${orphan_delta:+0} orphans, ${bundled_delta:+0} bundled
$( [ -n \"$new_orphans\" ] && echo \"**New orphans:** $new_orphans\" )
$( [ -n \"$resolved_orphans\" ] && echo \"**Resolved orphans:** $resolved_orphans\" )
$( [ -n \"$new_bundled\" ] && echo \"**New bundled atomic notes:** $new_bundled (split via reflect skill)\" )
$( [ -n \"$resolved_bundled\" ] && echo \"**Resolved bundled:** $resolved_bundled\" )
Interactive view: \`docs/notegraph.html\`. Static map: \`docs/notegraph.md\`."
Write memory/state/notegraph.json:
{
"input_fingerprint": "<from step 1>",
"last_run": "${today}",
"stats": { ... current.stats ... },
"last_verdict": "${verdict_one_line}",
"last_pr": "${pr_url}"
}
Notify (concise, one line):
./notify "*Notegraph updated* — ${verdict_one_line}. PR: ${pr_url}"
Skip the notify if verdict_one_line is the bland graph refreshed (…) form and there are no new/resolved orphans — those updates aren't worth a ping.
This skill is pure local work — no outbound network from bash. node scripts/notegraph.mjs reads filesystem only, and gh pr create handles its own auth. No prefetch or post-process needed.
NOTEGRAPH_NO_CHANGE — fingerprint matched, silent exit (the common case on a stable corpus)NOTEGRAPH_OK — regenerated + PR opened; notify only if verdict is interestingNOTEGRAPH_NEW_ORPHAN — at least one new orphan detected; always notifyNOTEGRAPH_NEW_BUNDLED — at least one new bundled atomic note detected; always notify (operator or reflect should split)NOTEGRAPH_ERROR — extractor crashed or git op failed; notify with the error and exit non-zero