feat(vault): track PARA layer (Categories/References/Notes/Daily/Clippings/Tags/Attachments/Presentations)
- Add 8 PARA directories to .gitignore whitelist (234 files) - Completes dual-layer sync: LLM Wiki layer + PARA personal knowledge layer - markdown_output/ remains excluded (transit zone)
@@ -4,7 +4,7 @@
|
||||
|
||||
/*
|
||||
|
||||
# === Tracked content (LLM Wiki layer + infrastructure) ===
|
||||
# === Tracked content (LLM Wiki layer + PARA layer + infrastructure) ===
|
||||
!raw/
|
||||
!wiki/
|
||||
!Templates/
|
||||
@@ -15,12 +15,30 @@
|
||||
!.gitattributes
|
||||
!.mailmap
|
||||
|
||||
# PARA layer (personal knowledge)
|
||||
!Categories/
|
||||
!References/
|
||||
!Notes/
|
||||
!Daily/
|
||||
!Clippings/
|
||||
!Tags/
|
||||
!Attachments/
|
||||
!Presentations/
|
||||
|
||||
# Allow everything inside tracked dirs
|
||||
!raw/**
|
||||
!wiki/**
|
||||
!Templates/**
|
||||
!tools/**
|
||||
!.githooks/**
|
||||
!Categories/**
|
||||
!References/**
|
||||
!Notes/**
|
||||
!Daily/**
|
||||
!Clippings/**
|
||||
!Tags/**
|
||||
!Attachments/**
|
||||
!Presentations/**
|
||||
|
||||
# === Obsidian config — track but ignore high-churn state/caches ===
|
||||
!.obsidian/
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="92" height="20" role="img" aria-label="repositories: 9"><title>repositories: 9</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="92" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="75" height="20" fill="#555"/><rect x="75" width="17" height="20" fill="#007ec6"/><rect width="92" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="385" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="650">repositories</text><text x="385" y="140" transform="scale(.1)" fill="#fff" textLength="650">repositories</text><text aria-hidden="true" x="825" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="70">9</text><text x="825" y="140" transform="scale(.1)" fill="#fff" textLength="70">9</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,35 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="90" height="20">
|
||||
<title>CI - passing</title>
|
||||
<defs>
|
||||
<linearGradient id="workflow-fill" x1="50%" y1="0%" x2="50%" y2="100%">
|
||||
<stop stop-color="#444D56" offset="0%"></stop>
|
||||
<stop stop-color="#24292E" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient id="state-fill" x1="50%" y1="0%" x2="50%" y2="100%">
|
||||
<stop stop-color="#34D058" offset="0%"></stop>
|
||||
<stop stop-color="#28A745" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g font-family="'DejaVu Sans',Verdana,Geneva,sans-serif" font-size="11">
|
||||
<path id="workflow-bg" d="M0,3 C0,1.3431 1.3552,0 3.02702703,0 L40,0 L40,20 L3.02702703,20 C1.3552,20 0,18.6569 0,17 L0,3 Z" fill="url(#workflow-fill)" fill-rule="nonzero"></path>
|
||||
<text fill="#010101" fill-opacity=".3">
|
||||
<tspan x="22.1981982" y="15" aria-hidden="true">CI</tspan>
|
||||
</text>
|
||||
<text fill="#FFFFFF">
|
||||
<tspan x="22.1981982" y="14">CI</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g transform="translate(40)" font-family="'DejaVu Sans',Verdana,Geneva,sans-serif" font-size="11">
|
||||
<path d="M0 0h46.939C48.629 0 50 1.343 50 3v14c0 1.657-1.37 3-3.061 3H0V0z" id="state-bg" fill="url(#state-fill)" fill-rule="nonzero"></path>
|
||||
<text fill="#010101" fill-opacity=".3" aria-hidden="true">
|
||||
<tspan x="4" y="15">passing</tspan>
|
||||
</text>
|
||||
<text fill="#FFFFFF">
|
||||
<tspan x="4" y="14">passing</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<path fill="#959DA5" d="M11 3c-3.868 0-7 3.132-7 7a6.996 6.996 0 0 0 4.786 6.641c.35.062.482-.148.482-.332 0-.166-.01-.718-.01-1.304-1.758.324-2.213-.429-2.353-.822-.079-.202-.42-.823-.717-.99-.245-.13-.595-.454-.01-.463.552-.009.946.508 1.077.718.63 1.058 1.636.76 2.039.577.061-.455.245-.761.446-.936-1.557-.175-3.185-.779-3.185-3.456 0-.762.271-1.392.718-1.882-.07-.175-.315-.892.07-1.855 0 0 .586-.183 1.925.718a6.5 6.5 0 0 1 1.75-.236 6.5 6.5 0 0 1 1.75.236c1.338-.91 1.925-.718 1.925-.718.385.963.14 1.68.07 1.855.446.49.717 1.112.717 1.882 0 2.686-1.636 3.28-3.194 3.456.254.219.473.639.473 1.295 0 .936-.009 1.689-.009 1.925 0 .184.131.402.481.332A7.011 7.011 0 0 0 18 10c0-3.867-3.133-7-7-7z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="92" height="20" role="img" aria-label="pypi: v0.1.0a1"><title>pypi: v0.1.0a1</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="92" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="33" height="20" fill="#555"/><rect x="33" width="59" height="20" fill="#fe7d37"/><rect width="92" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="175" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="230">pypi</text><text x="175" y="140" transform="scale(.1)" fill="#fff" textLength="230">pypi</text><text aria-hidden="true" x="615" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="490">v0.1.0a1</text><text x="615" y="140" transform="scale(.1)" fill="#fff" textLength="490">v0.1.0a1</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="110" height="20" role="img" aria-label="downloads: 6/day"><title>downloads: 6/day</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="110" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="69" height="20" fill="#555"/><rect x="69" width="41" height="20" fill="#dfb317"/><rect width="110" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="355" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="590">downloads</text><text x="355" y="140" transform="scale(.1)" fill="#fff" textLength="590">downloads</text><text aria-hidden="true" x="885" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="310">6/day</text><text x="885" y="140" transform="scale(.1)" fill="#fff" textLength="310">6/day</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="88" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><mask id="a"><rect width="88" height="20" rx="3" fill="#fff"/></mask><g mask="url(#a)"><path fill="#555" d="M0 0h70v20H0z"/><path fill="#00B16A" d="M70 0h18v20H70z"/><path fill="url(#b)" d="M0 0h88v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"><text x="36" y="15" fill="#010101" fill-opacity=".3">codefactor</text><text x="36" y="14">codefactor</text><text x="78" y="15" fill="#010101" fill-opacity=".3">A</text><text x="78" y="14">A</text></g></svg>
|
||||
|
After Width: | Height: | Size: 729 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="92" height="20" role="img" aria-label="pypi: v0.0.1a4"><title>pypi: v0.0.1a4</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="92" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="33" height="20" fill="#555"/><rect x="33" width="59" height="20" fill="#fe7d37"/><rect width="92" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="175" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="230">pypi</text><text x="175" y="140" transform="scale(.1)" fill="#fff" textLength="230">pypi</text><text aria-hidden="true" x="615" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="490">v0.0.1a4</text><text x="615" y="140" transform="scale(.1)" fill="#fff" textLength="490">v0.0.1a4</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,23 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="112" height="20">
|
||||
<linearGradient id="b" x2="0" y2="100%">
|
||||
<stop offset="0" stop-color="#bbb" stop-opacity=".1" />
|
||||
<stop offset="1" stop-opacity=".1" />
|
||||
</linearGradient>
|
||||
<mask id="a">
|
||||
<rect width="112" height="20" rx="3" fill="#fff" />
|
||||
</mask>
|
||||
<g mask="url(#a)">
|
||||
<path fill="#555" d="M0 0h73v20H0z" />
|
||||
<path fill="#e05d44" d="M73 0h39v20H73z" />
|
||||
<path fill="url(#b)" d="M0 0h112v20H0z" />
|
||||
</g>
|
||||
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
||||
<text x="46" y="15" fill="#010101" fill-opacity=".3">codecov</text>
|
||||
<text x="46" y="14">codecov</text>
|
||||
<text x="93" y="15" fill="#010101" fill-opacity=".3">28%</text>
|
||||
<text x="93" y="14">28%</text>
|
||||
</g>
|
||||
<svg viewBox="120 -8 60 60">
|
||||
<path d="M23.013 0C10.333.009.01 10.22 0 22.762v.058l3.914 2.275.053-.036a11.291 11.291 0 0 1 8.352-1.767 10.911 10.911 0 0 1 5.5 2.726l.673.624.38-.828c.368-.802.793-1.556 1.264-2.24.19-.276.398-.554.637-.851l.393-.49-.484-.404a16.08 16.08 0 0 0-7.453-3.466 16.482 16.482 0 0 0-7.705.449C7.386 10.683 14.56 5.016 23.03 5.01c4.779 0 9.272 1.84 12.651 5.18 2.41 2.382 4.069 5.35 4.807 8.591a16.53 16.53 0 0 0-4.792-.723l-.292-.002a16.707 16.707 0 0 0-1.902.14l-.08.012c-.28.037-.524.074-.748.115-.11.019-.218.041-.327.063-.257.052-.51.108-.75.169l-.265.067a16.39 16.39 0 0 0-.926.276l-.056.018c-.682.23-1.36.511-2.016.838l-.052.026c-.29.145-.584.305-.899.49l-.069.04a15.596 15.596 0 0 0-4.061 3.466l-.145.175c-.29.36-.521.666-.723.96-.17.247-.34.513-.552.864l-.116.199c-.17.292-.32.57-.449.824l-.03.057a16.116 16.116 0 0 0-.843 2.029l-.034.102a15.65 15.65 0 0 0-.786 5.174l.003.214a21.523 21.523 0 0 0 .04.754c.009.119.02.237.032.355.014.145.032.29.049.432l.01.08c.01.067.017.133.026.197.034.242.074.48.119.72.463 2.419 1.62 4.836 3.345 6.99l.078.098.08-.095c.688-.81 2.395-3.38 2.539-4.922l.003-.029-.014-.025a10.727 10.727 0 0 1-1.226-4.956c0-5.76 4.545-10.544 10.343-10.89l.381-.014a11.403 11.403 0 0 1 6.651 1.957l.054.036 3.862-2.237.05-.03v-.056c.006-6.08-2.384-11.793-6.729-16.089C34.932 2.361 29.16 0 23.013 0" fill="#F01F7A" fill-rule="evenodd"/>
|
||||
</svg>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="78" height="20" role="img" aria-label="pypi: v0.1.5"><title>pypi: v0.1.5</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="78" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="33" height="20" fill="#555"/><rect x="33" width="45" height="20" fill="#fe7d37"/><rect width="78" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="175" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="230">pypi</text><text x="175" y="140" transform="scale(.1)" fill="#fff" textLength="230">pypi</text><text aria-hidden="true" x="545" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="350">v0.1.5</text><text x="545" y="140" transform="scale(.1)" fill="#fff" textLength="350">v0.1.5</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="96" height="20" role="img" aria-label="License: GPLv3"><title>License: GPLv3</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="96" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="51" height="20" fill="#555"/><rect x="51" width="45" height="20" fill="#007ec6"/><rect width="96" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="265" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="410">License</text><text x="265" y="140" transform="scale(.1)" fill="#fff" textLength="410">License</text><text aria-hidden="true" x="725" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="350">GPLv3</text><text x="725" y="140" transform="scale(.1)" fill="#fff" textLength="350">GPLv3</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="130" height="20" role="img" aria-label="latest release: v3.6.0"><title>latest release: v3.6.0</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="130" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="85" height="20" fill="#555"/><rect x="85" width="45" height="20" fill="#007ec6"/><rect width="130" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="435" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="750">latest release</text><text x="435" y="140" transform="scale(.1)" fill="#fff" textLength="750">latest release</text><text aria-hidden="true" x="1065" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="350">v3.6.0</text><text x="1065" y="140" transform="scale(.1)" fill="#fff" textLength="350">v3.6.0</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="Built by: AutoGen Team"><title>Built by: AutoGen Team</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="146" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="53" height="20" fill="#555"/><rect x="53" width="93" height="20" fill="#007ec6"/><rect width="146" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="275" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">Built by</text><text x="275" y="140" transform="scale(.1)" fill="#fff" textLength="430">Built by</text><text aria-hidden="true" x="985" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="830">AutoGen Team</text><text x="985" y="140" transform="scale(.1)" fill="#fff" textLength="830">AutoGen Team</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="92" height="20">
|
||||
<linearGradient id="b" x2="0" y2="100%">
|
||||
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
|
||||
<stop offset="1" stop-opacity=".1"/>
|
||||
</linearGradient>
|
||||
<mask id="anybadge_23238">
|
||||
<rect width="92" height="20" rx="3" fill="#fff"/>
|
||||
</mask>
|
||||
<g mask="url(#anybadge_23238)">
|
||||
<path fill="#555" d="M0 0h51v20H0z"/>
|
||||
<path fill="#44cc11" d="M51 0h41v20H51z"/>
|
||||
<path fill="url(#b)" d="M0 0h92v20H0z"/>
|
||||
</g>
|
||||
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
||||
<text x="26.5" y="15" fill="#010101" fill-opacity=".3">docker</text>
|
||||
<text x="25.5" y="14">docker</text>
|
||||
</g>
|
||||
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
||||
<text x="72.5" y="15" fill="#010101" fill-opacity=".3">3.6.0</text>
|
||||
<text x="71.5" y="14">3.6.0</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="20" role="img" aria-label="downloads: 5.1k/day"><title>downloads: 5.1k/day</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="128" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="69" height="20" fill="#555"/><rect x="69" width="59" height="20" fill="#4c1"/><rect width="128" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="355" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="590">downloads</text><text x="355" y="140" transform="scale(.1)" fill="#fff" textLength="590">downloads</text><text aria-hidden="true" x="975" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="490">5.1k/day</text><text x="975" y="140" transform="scale(.1)" fill="#fff" textLength="490">5.1k/day</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="258" height="20" role="img" aria-label="downloads: rate limited by upstream service"><title>downloads: rate limited by upstream service</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="258" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="69" height="20" fill="#555"/><rect x="69" width="189" height="20" fill="#9f9f9f"/><rect width="258" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="355" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="590">downloads</text><text x="355" y="140" transform="scale(.1)" fill="#fff" textLength="590">downloads</text><text aria-hidden="true" x="1625" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="1790">rate limited by upstream service</text><text x="1625" y="140" transform="scale(.1)" fill="#fff" textLength="1790">rate limited by upstream service</text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,100 @@
|
||||
# Gateway Service Fix Script
|
||||
# Requires Administrator privileges
|
||||
|
||||
Write-Host "=== OpenClaw Gateway Service Fix ===" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Check administrator privileges
|
||||
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
|
||||
|
||||
if (-not $isAdmin) {
|
||||
Write-Host "ERROR: Administrator privileges required" -ForegroundColor Red
|
||||
Write-Host "Please right-click this script and select 'Run as Administrator'" -ForegroundColor Yellow
|
||||
pause
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "SUCCESS: Administrator privileges confirmed" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Check current Gateway status
|
||||
Write-Host "Checking Gateway status..." -ForegroundColor Cyan
|
||||
|
||||
$gatewayProcess = Get-Process -Name node -ErrorAction SilentlyContinue | Where-Object { $_.CommandLine -like "*openclaw*gateway*" }
|
||||
|
||||
if ($gatewayProcess) {
|
||||
Write-Host "Gateway is running (PID: $($gatewayProcess.Id))" -ForegroundColor Green
|
||||
Write-Host " Start time: $($gatewayProcess.StartTime)" -ForegroundColor Gray
|
||||
} else {
|
||||
Write-Host "Gateway is not running" -ForegroundColor Red
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
|
||||
# Check port listening
|
||||
Write-Host "Checking port 18789..." -ForegroundColor Cyan
|
||||
$portCheck = Test-NetConnection -ComputerName 127.0.0.1 -Port 18789 -InformationLevel Quiet -WarningAction SilentlyContinue
|
||||
if ($portCheck) {
|
||||
Write-Host "Port 18789 is listening" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "Port 18789 is not listening" -ForegroundColor Red
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
|
||||
# Check scheduled task
|
||||
Write-Host "Checking scheduled task..." -ForegroundColor Cyan
|
||||
$taskExists = schtasks /Query /TN "OpenClaw Gateway" 2>&1
|
||||
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "Scheduled task already exists" -ForegroundColor Green
|
||||
|
||||
# Show task details
|
||||
Write-Host ""
|
||||
Write-Host "Task details:" -ForegroundColor Cyan
|
||||
schtasks /Query /TN "OpenClaw Gateway" /FO LIST /V 2>&1 | Select-String -Pattern "Task To Run|State|Next Run Time"
|
||||
} else {
|
||||
Write-Host "Scheduled task does not exist" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
|
||||
# Create scheduled task
|
||||
Write-Host "Creating scheduled task..." -ForegroundColor Cyan
|
||||
|
||||
$taskPath = "$env:USERPROFILE\.openclaw\gateway.cmd"
|
||||
|
||||
# Check if task file exists
|
||||
if (Test-Path $taskPath) {
|
||||
Write-Host "Task file found: $taskPath" -ForegroundColor Gray
|
||||
} else {
|
||||
Write-Host "ERROR: Task file not found at $taskPath" -ForegroundColor Red
|
||||
pause
|
||||
exit 1
|
||||
}
|
||||
|
||||
$createTask = schtasks /Create /TN "OpenClaw Gateway" /TR $taskPath /SC ONLOGON /RL HIGHEST /F 2>&1
|
||||
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "SUCCESS: Scheduled task created" -ForegroundColor Green
|
||||
|
||||
# Verify task was created
|
||||
$verifyTask = schtasks /Query /TN "OpenClaw Gateway" 2>&1
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "VERIFIED: Task is now registered" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "WARNING: Task creation reported success but verification failed" -ForegroundColor Yellow
|
||||
}
|
||||
} else {
|
||||
Write-Host "ERROR: Failed to create scheduled task" -ForegroundColor Red
|
||||
Write-Host "Error output: $createTask" -ForegroundColor Gray
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "=== Fix Complete ===" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Next steps:" -ForegroundColor Yellow
|
||||
Write-Host "1. Run: openclaw gateway status" -ForegroundColor White
|
||||
Write-Host "2. Check: openclaw status" -ForegroundColor White
|
||||
Write-Host "3. Access: http://127.0.0.1:18789/" -ForegroundColor White
|
||||
Write-Host ""
|
||||
pause
|
||||
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 414 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 56 KiB |
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"success": [
|
||||
"阎锡山",
|
||||
"魏孝文帝",
|
||||
"贾樟柯",
|
||||
"于成龙",
|
||||
"武则天",
|
||||
"关羽",
|
||||
"陈永贵",
|
||||
"刘慈欣",
|
||||
"李彦宏",
|
||||
"郭兰英",
|
||||
"张之洞",
|
||||
"孟浩然",
|
||||
"熊召政",
|
||||
"毛泽东",
|
||||
"张思德",
|
||||
"张浩",
|
||||
"林彪",
|
||||
"吴烈",
|
||||
"康生",
|
||||
"柯庆施",
|
||||
"王志纲",
|
||||
"Andrej Karpathy",
|
||||
"Vannevar Bush",
|
||||
"介子推",
|
||||
"贾跃亭",
|
||||
"楚庄王",
|
||||
"杨兰史",
|
||||
"刘树林",
|
||||
"Steph Ango"
|
||||
],
|
||||
"failed": [],
|
||||
"no_image": [
|
||||
"孙宏斌",
|
||||
"郭凤莲"
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 166 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 162 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 940 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 49 KiB |
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Albums.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Board games.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Books.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Clippings.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Companies.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Events.base]]
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
An evergreen note is an idea. It doesn't have to be something that I agree with, but something is [[Composability|composable]]. In a way, every idiom is a kind of evergreen idea.
|
||||
|
||||
![[Evergreen.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Games.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Journal.base]]
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
- wiki
|
||||
---
|
||||
|
||||
# LLM Wiki
|
||||
|
||||
基于 [[LLM Wiki]] 模式构建的个人知识库。LLM 增量构建并维护结构化、互相链接的 Markdown 页面。
|
||||
|
||||
## 核心概念
|
||||
|
||||
- [[LLM Wiki]] — 核心模式介绍
|
||||
- [[RAG vs 持久化知识库]] — RAG 与 Wiki 的对比
|
||||
- [[知识库维护自动化]] — LLM 解决维护负担
|
||||
- [[Memex]] — Vannevar Bush 的愿景(1945)
|
||||
|
||||
## 人物
|
||||
|
||||
- [[Andrej Karpathy]] — LLM Wiki 模式提出者
|
||||
- [[Vannevar Bush]] — Memex 概念提出者
|
||||
|
||||
## 工具
|
||||
|
||||
- [[qmd]] — 本地 Markdown 搜索引擎
|
||||
|
||||
## 管理
|
||||
|
||||
- [[index]] — 内容索引
|
||||
- [[log]] — 活动日志
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
![[Meetings.base]]
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
## Favorites
|
||||
|
||||
![[Movies.base#Favorites]]
|
||||
|
||||
|
||||
## Last seen
|
||||
|
||||
![[Movies.base#Last seen]]
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[People.base]]
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Map.base]]
|
||||
|
||||
![[Places.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Podcast episodes.base]]
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
related: "[[Podcast episodes]]"
|
||||
---
|
||||
|
||||
![[Podcasts.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Posts.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Products.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Projects.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Recipes.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Shows.base]]
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Trips.base]]
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
categories: "[[人物卡]]"
|
||||
tags:
|
||||
- 人物卡
|
||||
---
|
||||
## 人物卡 - <姓名>
|
||||
|
||||
**简介**:<出生日期,出生地,毕业院校,生平等>
|
||||
|
||||
**作品**:
|
||||
|
||||
**成就**:
|
||||
|
||||
**出处**:
|
||||
|
||||
## 参考来源
|
||||
|
||||
![[人物卡.base]]
|
||||
---
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
aliases:
|
||||
- 修证
|
||||
---
|
||||
|
||||
![[修炼.base]]
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
categories: "[[判断卡-模版]]"
|
||||
tags:
|
||||
- 判断卡
|
||||
---
|
||||
|
||||
### [[主题]]
|
||||
### [[内涵]]
|
||||
|
||||
## [[判断卡]]标题
|
||||
|
||||
## 参考来源
|
||||
|
||||
**出处**:
|
||||
|
||||
![[判断卡.base]]
|
||||
---
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
categories: "[[反常识卡]]"
|
||||
tags:
|
||||
- 反常识卡
|
||||
---
|
||||
### [[主题]]
|
||||
|
||||
### [[内涵]]
|
||||
|
||||
## [[反常识卡]]标题
|
||||
|
||||
**常识**:<认知中的常识>
|
||||
|
||||
**反常识**:<需要刷新的认知>
|
||||
|
||||
**启发**:<有什么启发>
|
||||
|
||||
## 参考来源
|
||||
|
||||
![[反常识卡.base]]
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
categories: "[[技巧卡-模版]]"
|
||||
tags:
|
||||
- 技巧卡
|
||||
---
|
||||
### [[主题]]
|
||||
### [[内涵]]
|
||||
|
||||
## [[技巧卡]] - <标题>
|
||||
|
||||
**描述**:<描述作用>
|
||||
|
||||
**步骤**:
|
||||
1....
|
||||
2....
|
||||
3....
|
||||
|
||||
**出处**:
|
||||
|
||||
![[技巧卡.base]]
|
||||
---
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
categories: "[[摘要卡]]"
|
||||
tags:
|
||||
- 摘要卡
|
||||
---
|
||||
### [[主题]]
|
||||
### [[内涵]]
|
||||
|
||||
## [[摘要卡]]-标题
|
||||
**摘要**:<原文句子>
|
||||
|
||||
**出处**:
|
||||
|
||||
![[摘要卡.base]]
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
categories: "[[方法卡]]"
|
||||
tags:
|
||||
- 方法卡
|
||||
---
|
||||
### [[主题]]
|
||||
|
||||
### [[内涵]]
|
||||
|
||||
## [[方法卡]]标题
|
||||
|
||||
## 参考来源
|
||||
|
||||
![[方法卡.base]]
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
categories: "[[概念卡]]"
|
||||
tags:
|
||||
- 概念卡
|
||||
---
|
||||
### [[主题]]
|
||||
### [[内涵]]
|
||||
|
||||
## [[概念卡]]标题
|
||||
|
||||
**提出者**:<姓名>, <年份>
|
||||
|
||||
**描述**:<具体描述或摘抄>
|
||||
|
||||
**复述**:<用自己的话复述>
|
||||
|
||||
**启发**:<有什么启发>
|
||||
|
||||
**出处**:
|
||||
|
||||
![[概念卡.base]]
|
||||
---
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
categories: "[[短文卡]]"
|
||||
tags:
|
||||
- 短文卡
|
||||
|
||||
---
|
||||
### [[主题]]
|
||||
### [[内涵]]
|
||||
## [[短文卡]]标题
|
||||
|
||||
**正文**:
|
||||
|
||||
**出处**:
|
||||
|
||||
## 参考来源
|
||||
|
||||
![[短文卡.base]]
|
||||
---
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
categories: "[[结构卡]]"
|
||||
tags:
|
||||
- 结构卡
|
||||
---
|
||||
|
||||
### [[主题]]
|
||||
### [[内涵]]
|
||||
|
||||
## [[结构卡]]标题
|
||||
|
||||
**描述**:<描述作用>
|
||||
|
||||
**内容**:
|
||||
1....
|
||||
(1) ...
|
||||
a. ...
|
||||
b. ...
|
||||
c. ...
|
||||
(2) ...
|
||||
(3) ...
|
||||
2....
|
||||
3....
|
||||
|
||||
**出处**:
|
||||
|
||||
## 参考来源
|
||||
![[结构卡.base]]
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
categories: "[[联想卡]]"
|
||||
tags:
|
||||
- 联想卡
|
||||
---
|
||||
### [[主题]]
|
||||
### [[内涵]]
|
||||
## [[联想卡]]标题
|
||||
|
||||
## 参考来源
|
||||
|
||||
![[联想卡.base]]
|
||||
---
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
categories: "[[行动卡]]"
|
||||
tags:
|
||||
- 行动卡
|
||||
---
|
||||
### [[主题]]
|
||||
|
||||
### [[内涵]]
|
||||
|
||||
## [[行动卡]]标题
|
||||
|
||||
## 参考来源
|
||||
|
||||
![[行动卡.base]]
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
categories: "[[认知卡]]"
|
||||
tags:
|
||||
- 认知卡
|
||||
---
|
||||
### [[主题]]
|
||||
### [[内涵]]
|
||||
|
||||
## [[认知卡]]标题
|
||||
|
||||
## 参考来源
|
||||
|
||||
|
||||
![[认知卡.base]]
|
||||
---
|
||||
@@ -0,0 +1,103 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Categories]]"
|
||||
tags:
|
||||
- categories
|
||||
- reading
|
||||
created: 2026-05-23
|
||||
---
|
||||
|
||||
# 读书笔记
|
||||
|
||||
读书笔记是对书籍、文章、视频等内容的摘录、理解和反思的记录。
|
||||
|
||||
## 核心原则
|
||||
|
||||
**目的**:不是为了存储原文,而是为了提炼观点、连接知识、启发思考。
|
||||
|
||||
**分类**:
|
||||
- `[[Clippings]]` - 网页文章摘录
|
||||
- `[[读书笔记]]` - 深度阅读和理解
|
||||
|
||||
**差异**:
|
||||
- Clippings:原文摘录,轻度处理
|
||||
- 读书笔记:深度理解,结构化整理,Callout 高亮,延伸关联
|
||||
|
||||
## 标准格式
|
||||
|
||||
### Frontmatter
|
||||
|
||||
```yaml
|
||||
---
|
||||
categories:
|
||||
- "[[读书笔记]]"
|
||||
tags:
|
||||
- reading
|
||||
- {主题标签}
|
||||
- {作者标签}
|
||||
created: YYYY-MM-DD
|
||||
rating: 1-5
|
||||
author:
|
||||
- 作者名
|
||||
via: "" # 来源渠道
|
||||
url: "{链接}"
|
||||
---
|
||||
```
|
||||
|
||||
### 内容结构
|
||||
|
||||
1. **一句话总结** - 20-50 字精炼核心观点
|
||||
2. **来源信息** - 明确标注来源和链接
|
||||
3. **正文** - 结构化的章节内容
|
||||
4. **总结** - 核心论点表格
|
||||
5. **延伸阅读** - wikilink 关联相关笔记
|
||||
|
||||
### Callout 高亮
|
||||
|
||||
建议使用 3-8 个 Callout 高亮关键观点:
|
||||
- `info` - 核心观点
|
||||
- `tip` - 实践建议
|
||||
- `warning` - 警示
|
||||
- `danger` - 危险/后果
|
||||
- `important` - 重要原则
|
||||
- `success` - 成功案例
|
||||
- `quote` - 金句引用
|
||||
- `example` - 案例示例
|
||||
|
||||
## 工作流
|
||||
|
||||
### 创建笔记
|
||||
|
||||
1. 复制 `Templates/读书笔记模板.md`
|
||||
2. 填写 frontmatter
|
||||
3. 编写一句话总结
|
||||
4. 整理正文内容(按章节)
|
||||
5. 添加 Callout 高亮
|
||||
6. 添加总结和延伸阅读
|
||||
|
||||
### 定期优化
|
||||
|
||||
**每周任务**:
|
||||
- [ ] 检查本周读书笔记
|
||||
- [ ] 添加缺失的 Callout
|
||||
- [ ] 添加相关 wikilink
|
||||
|
||||
**每月任务**:
|
||||
- [ ] 批量检查 frontmatter
|
||||
- [ ] 统一标签命名
|
||||
- [ ] 创建缺失的概念笔记
|
||||
|
||||
## 相关资源
|
||||
|
||||
- [[读书笔记优化规范]] - 完整版式标准
|
||||
- [[Templates/读书笔记模板.md]] - 可直接使用的模板
|
||||
- [[AGENTS.md]] - PARA + LLM Wiki 架构规范
|
||||
|
||||
## 示例
|
||||
|
||||
- [[读躬行客之《井冈山的战略》]]
|
||||
- [[读躬行客之《三虎的表现无懈可击》]]
|
||||
|
||||
---
|
||||
|
||||
> 读书不是为了阅读,而是为了理解、连接、启发。
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
categories: "[[金句卡]]"
|
||||
tags:
|
||||
- 金句卡
|
||||
---
|
||||
### [[主题]]
|
||||
|
||||
### [[内涵]]
|
||||
|
||||
## [[金句卡]]标题
|
||||
|
||||
**原文**:<摘抄>
|
||||
|
||||
**复述**:<用自己的话复述>
|
||||
|
||||
**启发**:<有什么启发>
|
||||
|
||||
**出处**:
|
||||
|
||||
## 参考来源
|
||||
|
||||
**出处**:
|
||||
|
||||
![[金句卡.base]]
|
||||
---
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Clippings]]"
|
||||
created: 2025-09-15
|
||||
topics:
|
||||
- 反思
|
||||
author:
|
||||
- "[[Steph Ango]]"
|
||||
tags:
|
||||
- clippings
|
||||
- advice
|
||||
- 反思
|
||||
---
|
||||
1. 若生命只剩最后六个月,你会去做什么?
|
||||
2. 若拥有亿万财富,你会做什么?
|
||||
3. 现在的你会给十年前的你一些什么建议?
|
||||
4. 你希望十年之后,什么依旧保持一致?
|
||||
5. 你希望十年之后,什么是发生了变化?
|
||||
6. 在你心中什么是最完美的幸福?
|
||||
7. 何时何地,你最幸福过?
|
||||
8. 为什么每天要起床?
|
||||
9. 什么是最痛苦的?
|
||||
10. 你的性格是什么?
|
||||
11. 你最害怕的是什么?
|
||||
12. 你最想培养的特质是什么?
|
||||
13. 你最希望别人的拥有的特质是什么?
|
||||
14. 什么时候会骗自己?
|
||||
15. 浪费过什么?
|
||||
16. 什么样的美德被过誉了?
|
||||
17. 你最不喜欢自己外表的什么方面?
|
||||
18. 如果你能改变一件事情,那是什么?
|
||||
19. 你期望什么样的天赋?
|
||||
20. 别人通常会误解你什么?
|
||||
21. 你欣赏男人身上的气质是什么?
|
||||
22. 你欣赏女人身上的气质是什么?
|
||||
23. 你最看重朋友的什么?
|
||||
24. 过去一年,最大的成就?
|
||||
25. 如果你可以给每一个人同样一个礼物,那是什么?
|
||||
26. 时间浪费在什么上了?
|
||||
27. 最痛苦却又最值得做的是什么?
|
||||
28. 你最想去什么地方生活?
|
||||
29. 你最喜欢的一件东西?
|
||||
30. 谁是你最好的朋友?
|
||||
31. 谁或什么是你最珍贵的?
|
||||
32. 当今世上,你最欣赏的人是?
|
||||
33. 你最欣赏的一个小说英雄?
|
||||
34. 你觉得和哪个历史人物最像?
|
||||
35. 最后悔什么?
|
||||
36. 你希望以何种方式结束自己的生命?
|
||||
37. 座右铭是?
|
||||
38. 你受到最好赞美是?
|
||||
39. 最幸运的一件事是?
|
||||
40. 什么让你充满了希望?
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Clippings]]"
|
||||
created: 2025-09-15
|
||||
author:
|
||||
- "[[Steph Ango]]"
|
||||
tags:
|
||||
- clippings
|
||||
- advice
|
||||
- 反思
|
||||
---
|
||||
1. 你今年做了哪些之前从未做过的事?
|
||||
2. 你有没有遵守年初时和自己许下的约定?
|
||||
3. 你身边有人生孩子了吗?
|
||||
4. 你身边有人去世了吗?
|
||||
5. 你去了哪些城市/州/国家?
|
||||
6. 明年你想要获得哪些你今年没有的东西?
|
||||
7. 今年的哪个或哪些日子会铭刻在你的记忆中,为什么?
|
||||
8. 你今年最大的成就是什么?
|
||||
9. 你今年最大的失败是什么?
|
||||
10. 你今年还遇到过哪些困难?
|
||||
11. 你今年是否生过病或受过伤?
|
||||
12. 你今年买过的最好的东西是什么?
|
||||
13. 谁的行为值得去表扬?
|
||||
14. 谁的行为令你感到震惊?
|
||||
15. 你大部分的钱都花到哪里去了?
|
||||
16. 有什么事让你感到超级、超级、超级兴奋?
|
||||
17. 哪首歌会永远让你想起这一年?
|
||||
18. 与去年的这个时候相比,你是:感到更快乐还是更悲伤了?变得更瘦还是更胖了?变得更富还是更穷了?
|
||||
19. 你希望自己能做得更多的是什么?
|
||||
20. 你希望自己能做得更少的是什么?
|
||||
21. 你是如何度过节假日的?
|
||||
22. 你今年坠入爱河了吗?
|
||||
23. 你是否有讨厌某个你去年此时不觉得讨厌的人呢?
|
||||
24. 你最喜欢的电视节目是什么?
|
||||
25. 你读过最好的一本书是什么?
|
||||
26. 你今年发现的最好听的一首歌是什么?
|
||||
27. 你今年看过最喜欢的一部电影是什么?
|
||||
28. 你今年吃过最好吃的一顿饭是什么?
|
||||
29. 有什么是你想要且得到了的?
|
||||
30. 有什么是你想要却没有得到的?
|
||||
31. 你生日那天做了什么?
|
||||
32. 有什么还未发生的事,如果发生了,会让你的这一年变得无比满足?
|
||||
33. 你会如何描述你今年的个人时尚风格?
|
||||
34. 是什么让你保持理智?
|
||||
35. 你最欣赏哪个名人/公众人物?
|
||||
36. 哪个政治问题最令你有感而发?
|
||||
37. 你想念哪些人?
|
||||
38. 在你新认识的人之中,谁是最好的?
|
||||
39. 今年你学到了什么宝贵的人生经验?
|
||||
40. 能够总结你这一年的一句话是什么?
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Clippings]]"
|
||||
author:
|
||||
- "[[Kevin Kelly]]"
|
||||
url: https://kk.org/thetechnium/68-bits-of-unsolicited-advice/
|
||||
created: 2023-09-12
|
||||
published: 2020-04-28
|
||||
topics: []
|
||||
---
|
||||
It’s my birthday. I’m 68. I feel like pulling up a rocking chair and dispensing advice to the young ‘uns. Here are 68 pithy bits of unsolicited advice which I offer as my birthday present to all of you.
|
||||
|
||||
- Learn how to learn from those you disagree with, or even offend you. See if you can find the truth in what they believe.
|
||||
- Being enthusiastic is worth 25 IQ points.
|
||||
- Always demand a deadline. A deadline weeds out the extraneous and the ordinary. It prevents you from trying to make it perfect, so you have to make it different. Different is better.
|
||||
- Don’t be afraid to ask a question that may sound stupid because 99% of the time everyone else is thinking of the same question and is too embarrassed to ask it.
|
||||
- Being able to listen well is a superpower. While listening to someone you love keep asking them “Is there more?”, until there is no more.
|
||||
- A worthy goal for a year is to learn enough about a subject so that you can’t believe how ignorant you were a year earlier.
|
||||
- Gratitude will unlock all other virtues and is something you can get better at.
|
||||
- Treating a person to a meal never fails, and is so easy to do. It’s powerful with old friends and a great way to make new friends.
|
||||
- Don’t trust all-purpose glue.
|
||||
- Reading to your children regularly will bond you together and kickstart their imaginations.
|
||||
- Never use a credit card for credit. The only kind of credit, or debt, that is acceptable is debt to acquire something whose exchange value is extremely likely to increase, like in a home. The exchange value of most things diminishes or vanishes the moment you purchase them. Don’t be in debt to losers.
|
||||
- Pros are just amateurs who know how to gracefully recover from their mistakes.
|
||||
- Extraordinary claims should require extraordinary evidence to be believed.
|
||||
- Don’t be the smartest person in the room. Hangout with, and learn from, people smarter than yourself. Even better, find smart people who will disagree with you.
|
||||
- Rule of 3 in conversation. To get to the real reason, ask a person to go deeper than what they just said. Then again, and once more. The third time’s answer is close to the truth.
|
||||
- Don’t be the best. Be the only.
|
||||
- Everyone is shy. Other people are waiting for you to introduce yourself to them, they are waiting for you to send them an email, they are waiting for you to ask them on a date. Go ahead.
|
||||
- Don’t take it personally when someone turns you down. Assume they are like you: busy, occupied, distracted. Try again later. It’s amazing how often a second try works.
|
||||
- The purpose of a habit is to remove that action from self-negotiation. You no longer expend energy deciding whether to do it. You just do it. Good habits can range from telling the truth, to flossing.
|
||||
- Promptness is a sign of respect.
|
||||
- When you are young spend at least 6 months to one year living as poor as you can, owning as little as you possibly can, eating beans and rice in a tiny room or tent, to experience what your “worst” lifestyle might be. That way any time you have to risk something in the future you won’t be afraid of the worst case scenario.
|
||||
- Trust me: There is no “them”.
|
||||
- The more you are interested in others, the more interesting they find you. To be interesting, be interested.
|
||||
- Optimize your generosity. No one on their deathbed has ever regretted giving too much away.
|
||||
- To make something good, just do it. To make something great, just re-do it, re-do it, re-do it. The secret to making fine things is in remaking them.
|
||||
- The Golden Rule will never fail you. It is the foundation of all other virtues.
|
||||
- If you are looking for something in your house, and you finally find it, when you’re done with it, don’t put it back where you found it. Put it back where you first looked for it.
|
||||
- Saving money and investing money are both good habits. Small amounts of money invested regularly for many decades without deliberation is one path to wealth.
|
||||
- To make mistakes is human. To own your mistakes is divine. Nothing elevates a person higher than quickly admitting and taking personal responsibility for the mistakes you make and then fixing them fairly. If you mess up, fess up. It’s astounding how powerful this ownership is.
|
||||
- Never get involved in a land war in Asia.
|
||||
- You can obsess about serving your customers/audience/clients, or you can obsess about beating the competition. Both work, but of the two, obsessing about your customers will take you further.
|
||||
- Show up. Keep showing up. Somebody successful said: 99% of success is just showing up.
|
||||
- Separate the processes of creation from improving. You can’t write and edit, or sculpt and polish, or make and analyze at the same time. If you do, the editor stops the creator. While you invent, don’t select. While you sketch, don’t inspect. While you write the first draft, don’t reflect. At the start, the creator mind must be unleashed from judgement.
|
||||
- If you are not falling down occasionally, you are just coasting.
|
||||
- Perhaps the most counter-intuitive truth of the universe is that the more you give to others, the more you’ll get. Understanding this is the beginning of wisdom.
|
||||
- Friends are better than money. Almost anything money can do, friends can do better. In so many ways a friend with a boat is better than owning a boat.
|
||||
- This is true: It’s hard to cheat an honest man.
|
||||
- When an object is lost, 95% of the time it is hiding within arm’s reach of where it was last seen. Search in all possible locations in that radius and you’ll find it.
|
||||
- You are what you do. Not what you say, not what you believe, not how you vote, but what you spend your time on.
|
||||
- If you lose or forget to bring a cable, adapter or charger, check with your hotel. Most hotels now have a drawer full of cables, adapters and chargers others have left behind, and probably have the one you are missing. You can often claim it after borrowing it.
|
||||
- Hatred is a curse that does not affect the hated. It only poisons the hater. Release a grudge as if it was a poison.
|
||||
- There is no limit on better. Talent is distributed unfairly, but there is no limit on how much we can improve what we start with.
|
||||
- Be prepared: When you are 90% done any large project (a house, a film, an event, an app) the rest of the myriad details will take a second 90% to complete.
|
||||
- When you die you take absolutely nothing with you except your reputation.
|
||||
- Before you are old, attend as many funerals as you can bear, and listen. Nobody talks about the departed’s achievements. The only thing people will remember is what kind of person you were while you were achieving.
|
||||
- For every dollar you spend purchasing something substantial, expect to pay a dollar in repairs, maintenance, or disposal by the end of its life.
|
||||
- Anything real begins with the fiction of what could be. Imagination is therefore the most potent force in the universe, and a skill you can get better at. It’s the one skill in life that benefits from ignoring what everyone else knows.
|
||||
- When crisis and disaster strike, don’t waste them. No problems, no progress.
|
||||
- On vacation go to the most remote place on your itinerary first, bypassing the cities. You’ll maximize the shock of otherness in the remote, and then later you’ll welcome the familiar comforts of a city on the way back.
|
||||
- When you get an invitation to do something in the future, ask yourself: would you accept this if it was scheduled for tomorrow? Not too many promises will pass that immediacy filter.
|
||||
- Don’t say anything about someone in email you would not be comfortable saying to them directly, because eventually they will read it.
|
||||
- If you desperately need a job, you are just another problem for a boss; if you can solve many of the problems the boss has right now, you are hired. To be hired, think like your boss.
|
||||
- Art is in what you leave out.
|
||||
- Acquiring things will rarely bring you deep satisfaction. But acquiring experiences will.
|
||||
- Rule of 7 in research. You can find out anything if you are willing to go seven levels. If the first source you ask doesn’t know, ask them who you should ask next, and so on down the line. If you are willing to go to the 7th source, you’ll almost always get your answer.
|
||||
- How to apologize: Quickly, specifically, sincerely.
|
||||
- Don’t ever respond to a solicitation or a proposal on the phone. The urgency is a disguise.
|
||||
- When someone is nasty, rude, hateful, or mean with you, pretend they have a disease. That makes it easier to have empathy toward them which can soften the conflict.
|
||||
- Eliminating clutter makes room for your true treasures.
|
||||
- You really don’t want to be famous. Read the biography of any famous person.
|
||||
- Experience is overrated. When hiring, hire for aptitude, train for skills. Most really amazing or great things are done by people doing them for the first time.
|
||||
- A vacation + a disaster = an adventure.
|
||||
- Buying tools: Start by buying the absolute cheapest tools you can find. Upgrade the ones you use a lot. If you wind up using some tool for a job, buy the very best you can afford.
|
||||
- Learn how to take a 20-minute power nap without embarrassment.
|
||||
- Following your bliss is a recipe for paralysis if you don’t know what you are passionate about. A better motto for most youth is “master something, anything”. Through mastery of one thing, you can drift towards extensions of that mastery that bring you more joy, and eventually discover where your bliss is.
|
||||
- I’m positive that in 100 years much of what I take to be true today will be proved to be wrong, maybe even embarrassingly wrong, and I try really hard to identify what it is that I am wrong about today.
|
||||
- Over the long term, the future is decided by optimists. To be an optimist you don’t have to ignore all the many problems we create; you just have to imagine improving our capacity to solve problems.
|
||||
@@ -0,0 +1,134 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Clippings]]"
|
||||
- "[[Posts]]"
|
||||
author:
|
||||
- "[[Steph Ango]]"
|
||||
source: https://stephango.com/buy-wisely
|
||||
clipped: 2023-11-18
|
||||
published: 2023-09-29
|
||||
status:
|
||||
- "[[Published]]"
|
||||
topics:
|
||||
- "[[Products]]"
|
||||
- "[[Product usage analysis]]"
|
||||
---
|
||||
Whenever I buy things I try to prioritize *cost per use*. Sometimes I consider other priorities such as *cost per smile*, *cost per thrill*, *cost per externality*, and *cost per lesson*.
|
||||
|
||||
## Cost per use
|
||||
|
||||
*Cost per use* is a heuristic that helps me make decisions about most non-perishable purchases such as clothes, vehicles, tools, devices, and even services. How much will it cost me if I divide the price by its expected number of uses?
|
||||
|
||||
*Cost per use* accounts for longevity. Durable and repairable things may cost more upfront, but over time they cost less than things that break and need to be replaced.
|
||||
|
||||
For example, I buy wool socks from a brand called [Darn Tough](https://darntough.com/). They cost about four times as much as cheap socks, but they’re durable, comfortable, and have a lifetime guarantee.
|
||||
|
||||
How many times do you wear a pair of socks before they develop holes? It may sound silly, but if you amortize the price of each pair of socks over their expected number of uses, a good pair of socks is a worthwhile investment.
|
||||
|
||||
Quality
|
||||
|
||||
Price
|
||||
|
||||
Uses
|
||||
|
||||
Cost per use
|
||||
|
||||
Poor
|
||||
|
||||
$5
|
||||
|
||||
10
|
||||
|
||||
$0.50
|
||||
|
||||
Good
|
||||
|
||||
$10
|
||||
|
||||
50
|
||||
|
||||
$0.20
|
||||
|
||||
Best
|
||||
|
||||
$20
|
||||
|
||||
200
|
||||
|
||||
$0.10
|
||||
|
||||
Not only will durable socks save you money, they also save you the hassle of throwing out old socks and buying new ones. Your time has value.
|
||||
|
||||
The best things asymptote to *zero dollars per use* over their lifetime. Not all products that have a low *cost per use* are expensive. Some things are both affordable and durable.
|
||||
|
||||
*Cost per use* can also be used to measure the value you expect to get out of services like gym memberships, healthcare, or *all-you-can-eat* subscriptions like streaming services.
|
||||
|
||||
## How to assess durability
|
||||
|
||||
My aim is to have fewer but better things. These are some of the questions I ask of the things that I incorporate into my life:
|
||||
|
||||
- Will it be as useful to me in the future as it is now?
|
||||
- Is it made of durable and maintainable materials?
|
||||
- Does it have a timeless [style](https://stephango.com/style) and aesthetic?
|
||||
- Does it age well, wear well, build a [wabi-sabi](https://stephango.com/scars) patina?
|
||||
- Does it retain its resale value? Would someone else want to own it?
|
||||
- Can it be disassembled and repaired?
|
||||
- Does it have replaceable, non-proprietary parts that are easy to acquire?
|
||||
- Can it be powered with a standard plug or replaceable batteries?
|
||||
- Can it be modified and upgraded?
|
||||
- Has the maker existed for at least as long as I hope to keep the product?
|
||||
- Can it perform many jobs, or only one?
|
||||
- Does it have a guarantee?
|
||||
- Does it rely on other products or technologies that aren’t durable?
|
||||
|
||||
Not all questions are relevant to all things. Not all things need to satisfy every requirement. However, I feel better about buying things that check many of these boxes. A movement called “buy it for life” has sprung up around similar priorities.
|
||||
|
||||
## How to estimate uses
|
||||
|
||||
To make purchasing decisions based on *cost per use*, you should try to guess how many times you will use the product. This sounds obvious, but it can be hard to determine, especially if it’s something you’ve never bought before.
|
||||
|
||||
If you are new to a hobby, like cooking or skiing, you may not yet know how many times you will use a piece of gear. It’s easy to significantly overestimate or underestimate how many times you will use something.
|
||||
|
||||
You should, however, be able to guess the frequency of use. Is this something you might use once per hour, day, week, month, year? This will help you determine your budget. How many dollars per month do you want to spend on this?
|
||||
|
||||
If you don’t know the frequency yet consider borrowing, renting, or otherwise trialing. Remember the ideal *cost per use* trends to $0. The most cost-effective choice is to not buy something you don’t need.
|
||||
|
||||
There is an opportunity cost to every dollar. A dollar you spend on a something that won’t get much use is a dollar you can’t save for something that will.
|
||||
|
||||
If you’re only going to use something once, then *cost per use* may not be the right heuristic for this decision. If you have disposable income, then the *cost per use* lens should nonetheless guide you towards something with good resale value.
|
||||
|
||||
The best things to splurge on are the things you use the most. If you sit on a chair eight hours a day, then a nice chair is probably a good investment.
|
||||
|
||||
## Reducing the cost side
|
||||
|
||||
Durable things reduce *cost per use* by giving you more uses before they break. But you can also reduce *cost per use* by acquiring products at a discount. You may be able to buy second-hand, inherit, or barter.
|
||||
|
||||
Durable things can often be great second-hand purchases *because* they are durable, and may not be the current fashion.
|
||||
|
||||
## Alternative heuristics
|
||||
|
||||
*Cost per use* is not the only way to make buying decisions. For things like consumables and experiences, you may need to approach the decision differently.
|
||||
|
||||
### Cost per smile
|
||||
|
||||
How much joy can you get out of each dollar? Some things bring lots of joy for a small amount of money: ice cream, sunsets, nature walks. A cheap date can bring many smiles per dollar.
|
||||
|
||||
Some things have excellent *cost per use* but few *smiles per use*. I don’t smile every time I put my nice socks on. A few years ago I bought a fairly expensive electric road bike. It probably didn’t have the best *cost per use*, but it gives me the most *joy per use* of any product I purchased in recent memory. It’s worth it to me.
|
||||
|
||||
### Cost per thrill
|
||||
|
||||
Some experiences have high *intensity per dollar*. A potency, concentration, or strength of experience. For example, foods can have high *flavor per dollar* — like hot sauce, pickles, curry, garlic, or mustard. Roller coasters, bungee jumping, or skydiving may give you a *thrill per dollar* that you can’t beat.
|
||||
|
||||
### Cost per externality
|
||||
|
||||
Some purchases may have externalities that are incompatible with your values. For example, you may wish to buy organic produce, pasture-raised eggs, or fair trade coffee. You may wish to buy products that preserve privacy, reduce environmental impact, or support a cause you believe in.
|
||||
|
||||
You can choose to incorporate externalities into the cost that you are paying instead of letting that cost be borne by others, or by society at large. This may increase your personal *cost per use*, but it might help change how society values things, or simply make you feel good.
|
||||
|
||||
### Cost per lesson
|
||||
|
||||
Knowledge has a cost. Sometimes that cost is monetary, sometimes that cost is time, sometimes that cost is pain. Sometimes it’s all three.
|
||||
|
||||
You might learn more about investing by purchasing a handful of shares in public companies than going to graduate school. You might learn more about making movies by trying to film one on your phone than going to film school.
|
||||
|
||||
Acquiring new ideas and perspectives can have a worthwhile cost. Being an early adopter of a product often has a poor *cost per use*, but its value is in the learning and experience per dollar.
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Clippings]]"
|
||||
- "[[Posts]]"
|
||||
author:
|
||||
- "[[Steph Ango]]"
|
||||
url: https://stephango.com/in-good-hands
|
||||
created: 2023-09-12
|
||||
published: 2023-08-06
|
||||
status:
|
||||
- "[[Published]]"
|
||||
topics:
|
||||
---
|
||||
|
||||
There is a feeling I search for: *being in good hands*. It is the feeling I look to give and the feeling I look to receive.
|
||||
|
||||
I know I am in good hands when I sense a cohesive point of view expressed with attention to detail.
|
||||
|
||||
I can feel it almost instantly. In any medium. Music, film, fashion, architecture, writing, software. At a Japanese restaurant it’s what *omakase* aims to be. I leave it up to you, chef.
|
||||
|
||||
When I am in good hands I open myself to a state of curiosity and appreciation. I allow myself to suspend preconceived notions. I give you freedom to take me where you want to go. I immerse myself in your worldview and pause judgement.
|
||||
|
||||
I want to be convinced of something new. I want my mind to be changed. Later I may disagree, but for now I am letting the experience soak in.
|
||||
|
||||
That trust doesn’t come easily. As an audience member it’s about feeling cared for from the moment I interact with your work. It’s about feeling a well-defined point of view permeate what you make.
|
||||
|
||||
If my mind was changed, I must have been in good hands.
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
title: "Variables"
|
||||
source: "https://help.obsidian.md/web-clipper/variables"
|
||||
author:
|
||||
- "[[Obsidian Help]]"
|
||||
published:
|
||||
created: 2026-01-22
|
||||
description: "Variables - Obsidian Help"
|
||||
tags:
|
||||
- "clippings"
|
||||
rating: 4
|
||||
---
|
||||
|
||||
[Web Clipper templates](https://help.obsidian.md/web-clipper/templates) can use variables to automatically pre-populate data from the page in a template. Variables can be used in the **note name**, **note location**, **properties**, and **note content**. Variables can also be modified using [filters](https://help.obsidian.md/web-clipper/filters).
|
||||
|
||||
Use the `…` icon in the [Web Clipper](https://help.obsidian.md/web-clipper) extension to access the current page variables for use in templates. There are five types of variables you can use:
|
||||
|
||||
## Preset variables
|
||||
|
||||
Preset variables are automatically generated based on the page content. These typically work for most websites.
|
||||
|
||||
The main content variable is `{{content}}`, which contains the article content, or the [highlights](https://help.obsidian.md/web-clipper/highlight), or the selection if there is any selected text on the page. Note that `{{content}}` attempts to extract the main content of the page, which may not always be what you want. In that case, you can use other preset variables or selector variables to extract the content you need.
|
||||
|
||||
| Variable | Description |
|
||||
| --- | --- |
|
||||
| `{{author}}` | Author of the page |
|
||||
| `{{content}}` | Article content, [highlights](https://help.obsidian.md/web-clipper/highlight), or selection, in Markdown format |
|
||||
| `{{contentHtml}}` | Article content, [highlights](https://help.obsidian.md/web-clipper/highlight), or selection, in HTML format |
|
||||
| `{{date}}` | Current date, can be formatted using the `date` filter |
|
||||
| `{{description}}` | Description or excerpt |
|
||||
| `{{domain}}` | Domain |
|
||||
| `{{favicon}}` | Favicon URL |
|
||||
| `{{fullHtml}}` | Unprocessed HTML for the full page content |
|
||||
| `{{highlights}}` | [Highlights](https://help.obsidian.md/web-clipper/highlight) with text and timestamps |
|
||||
| `{{image}}` | Social share image URL |
|
||||
| `{{published}}` | Published date, can be formatted using the `date` filter |
|
||||
| `{{selection}}` | Selection in Markdown format |
|
||||
| `{{selectionHtml}}` | Selection in HTML format |
|
||||
| `{{site}}` | Site name or publisher |
|
||||
| `{{title}}` | Title of the page |
|
||||
| `{{time}}` | Current date and time |
|
||||
| `{{url}}` | Current URL |
|
||||
| `{{words}}` | Word count |
|
||||
|
||||
## Prompt variables
|
||||
|
||||
Prompt variables leverage language models to extract and modify data using natural language. Prompt variables require [Interpreter](https://help.obsidian.md/web-clipper/interpreter) to be enabled and configured.
|
||||
|
||||
Prompt variables use the syntax `This page documents the five types of variables available in Obsidian Web Clipper templates: Preset, Prompt, Meta, Selector, and Schema.org variables. It explains their syntax, use cases, and provides examples for each.`. The double quotes around the prompt are important and distinguish prompts from preset variables. Prompt responses can be post-processed with [filters](https://help.obsidian.md/web-clipper/filters), e.g. `> This page documents the five types of variables available in Obsidian Web Clipper templates: Preset, Prompt, Meta, Selector, and Schema.org variables. It explains their syntax, use cases, and provides examples for each.`.
|
||||
|
||||
### When to use prompt variables
|
||||
|
||||
Prompt variables have the benefit of being extremely flexible and easy to write, however they come with several tradeoffs: they are slower to run, and may have cost and privacy considerations depending on the [provider](https://help.obsidian.md/web-clipper/interpreter#Models) you choose.
|
||||
|
||||
Unlike other variable types, prompt variables need to be processed by an external language model, so they are replaced only once [Interpreter](https://help.obsidian.md/web-clipper/interpreter) has run.
|
||||
|
||||
It is best to *not* use prompt variables if the data you want to extract is in a consistent format that could be extracted with other variable types.
|
||||
|
||||
On the other hand, prompt variables can be useful if the data you want to extract is an *inconsistent* format across websites. For example, you can make a [template](https://help.obsidian.md/web-clipper/templates) to save books that is agnostic of the book site. Prompt variables like `The author of the book is extracted from the page content using a language model, providing a flexible method that works across different book websites where the author information may be presented in inconsistent formats.` will work across any book site, whereas selector variables typically only work for one site.
|
||||
|
||||
### Examples
|
||||
|
||||
Prompts can use almost any natural language query. Depending on the model you use, prompts can query or translate data across languages.
|
||||
|
||||
- `- Les variables prédéfinies sont générées automatiquement à partir du contenu de la page.
|
||||
- Les variables d'invite utilisent des modèles de langage pour extraire et modifier des données.
|
||||
- Les autres types incluent les variables méta, les variables de sélecteur et les variables Schema.org.` to extract bullet points about the page, and translate them to French.
|
||||
- `- Les variables prédéfinies sont générées automatiquement à partir du contenu de la page.
|
||||
- Les variables d'invite utilisent des modèles de langage pour extraire et modifier des données.
|
||||
- Les autres types incluent les variables méta, les variables de sélecteur et les variables Schema.org.` to extract three bullet points using a prompt in French.
|
||||
|
||||
Prompts can transform page content into JSON that can be manipulated with [filters](https://help.obsidian.md/web-clipper/filters). For example:
|
||||
|
||||
```
|
||||
— [[@]], [[]]
|
||||
```
|
||||
|
||||
## Meta variables
|
||||
|
||||
- `{{meta:name}}` returns the content of the meta name tag with the given name, e.g. `{{meta:name:description}}` for the `description` meta tag.
|
||||
- `{{meta:property}}` returns the content of the meta property tag with the given property, e.g. `{{meta:property:og:title}}` for the `og:title` meta tag.
|
||||
|
||||
## Selector variables
|
||||
|
||||
Selector variables allow you to extract text content from elements on the page using [CSS selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_selectors/Selectors_and_combinators).
|
||||
|
||||
The syntax is `{{selector:cssSelector?attribute}}`, where `?attribute` is optional. If no attribute is specified, the text content of the element is returned. You can also use `{{selectorHtml:cssSelector}}` to get the HTML content of the element. Selector variables tend to work best on a specific website or set of websites that have consistent HTML structure.
|
||||
|
||||
- `{{selector:h1}}` returns text content of any `h1` elements on the page.
|
||||
- `{{selector:.author}}` returns text content of any `.author` elements on the page.
|
||||
- `{{selector:img.hero?src}}` returns the `src` attribute of the image with class `hero`.
|
||||
- `{{selector:a.main-link?href}}` returns the `href` attribute of the anchor tag with class `main-link`.
|
||||
- `{{selectorHtml:body|markdown}}` returns the entire HTML of the `body` element, converted to Markdown using the `markdown` [filter](https://help.obsidian.md/web-clipper/filters#HTML%20processing).
|
||||
- Nested CSS selectors and combinators are supported if you need more specificity.
|
||||
- If multiple elements match the selector, an array is returned, which you can process with [array and object filters](https://help.obsidian.md/web-clipper/filters#Arrays%20and%20objects) like `join` or `map`.
|
||||
|
||||
## Schema.org variables
|
||||
|
||||
Schema variables allow you to extract data from [schema.org](https://schema.org/) JSON-LD on the page. Schema.org data can also be used to automatically [trigger a template](https://help.obsidian.md/web-clipper/templates#Schema.org%20matching).
|
||||
|
||||
- `{{schema:@Type:key}}` returns the value of the key from the schema.
|
||||
- `{{schema:@Type:parent.child}}` returns the value of a nested property.
|
||||
- `{{schema:@Type:arrayKey}}` returns the first item in an array.
|
||||
- `{{schema:@Type:arrayKey[index].property}}` returns the item at the specified index in an array.
|
||||
- `{{schema:@Type:arrayKey[*].property}}` returns a specific property from all items in an array.
|
||||
|
||||
You can also use a shorthand notation without specifying the schema type:
|
||||
|
||||
- `{{schema:author}}` will match the first `author` property found in any schema type.
|
||||
- `{{schema:name}}` will match the first `name` property found in any schema type.
|
||||
|
||||
This shorthand is particularly useful when you don't know or don't care about the specific schema type, but you know the property name you're looking for.
|
||||
|
||||
Nested properties and array access work as well, both with and without the schema `@Type` specified:
|
||||
|
||||
- `{{schema:author.name}}` will find the first `author` property and then access its `name` sub-property.
|
||||
- `{{schema:author[0].name}}` will access the `name` of the first author in an array of authors.
|
||||
- `{{schema:author[*].name}}` will return an array of all author names.
|
||||
@@ -0,0 +1,301 @@
|
||||
---
|
||||
title: "alchaincyf/nuwa-skill: 你想蒸馏的下一个员工,何必是同事。蒸馏任何人的思维方式——心智模型、决策启发式、表达DNA。Distill how anyone thinks."
|
||||
source: "https://github.com/alchaincyf/nuwa-skill"
|
||||
author:
|
||||
published:
|
||||
created: 2026-04-17
|
||||
description: "你想蒸馏的下一个员工,何必是同事。蒸馏任何人的思维方式——心智模型、决策启发式、表达DNA。Distill how anyone thinks. - alchaincyf/nuwa-skill"
|
||||
tags:
|
||||
- "clippings"
|
||||
rating: 4
|
||||
---
|
||||
|
||||
## 女娲.skill
|
||||
|
||||
> *「你想蒸馏的下一个员工,何必是同事」*
|
||||
|
||||
**女娲帮你蒸馏任何人的思维方式,让乔布斯、马斯克、芒格、费曼都给你打工。**
|
||||
|
||||
[同事.skill](https://github.com/titanwings/colleague-skill) 证明了蒸馏一个人是可行的。
|
||||
那何必蒸馏同事?去蒸馏乔布斯、芒格、费曼、马斯克。
|
||||
只需输入一个名字,女娲自动完成调研、提炼、验证全流程。
|
||||
|
||||
[看效果](#%E6%95%88%E6%9E%9C%E7%A4%BA%E4%BE%8B) · [安装](#%E5%AE%89%E8%A3%85) · [它蒸馏了什么](#%E5%A5%B3%E5%A8%B2%E8%92%B8%E9%A6%8F%E4%BA%86%E4%BB%80%E4%B9%88) · [工作原理](#%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86)
|
||||
|
||||
**其他语言 / Other Languages:**
|
||||
|
||||
[English](https://github.com/alchaincyf/nuwa-skill/blob/main/README_EN.md) · [日本語](https://github.com/alchaincyf/nuwa-skill/blob/main/README_JA.md) · [한국어](https://github.com/alchaincyf/nuwa-skill/blob/main/README_KO.md) · [Español](https://github.com/alchaincyf/nuwa-skill/blob/main/README_ES.md)
|
||||
|
||||
[](https://star-history.com/#alchaincyf/nuwa-skill&Date)
|
||||
|
||||
---
|
||||
|
||||
## 效果示例
|
||||
|
||||
```
|
||||
用户 ❯ 我同时想做自媒体、写书、做独立开发,精力完全不够
|
||||
|
||||
Naval ❯ 你列了三个欲望。每个欲望都是你跟不快乐签的一份合同。
|
||||
不是精力不够,是合同太多。
|
||||
|
||||
问你自己:哪一个做起来你会忘记时间?
|
||||
那个就是你的特定知识所在。
|
||||
|
||||
不是三选一。是先一,再一,再一。
|
||||
串行复利,不是并行内耗。
|
||||
```
|
||||
|
||||
```
|
||||
用户 ❯ 我们的SaaS产品获客成本太高了
|
||||
|
||||
马斯克 ❯ 先别想怎么降。先算物理极限。
|
||||
获客的最小必要动作是什么?用户从知道你到付费,
|
||||
信息传递的理论最短路径是什么?
|
||||
|
||||
现在你的实际路径是理论路径的几倍?
|
||||
如果超过3倍,中间一定有可以砍掉的步骤。
|
||||
不是优化漏斗,是质疑漏斗本身该不该存在。
|
||||
```
|
||||
|
||||
再来一个大家更熟悉的。蒸馏乔布斯之后,问他「OpenAI和Anthropic谁的方向对」:
|
||||
|
||||
```
|
||||
用户 ❯ OpenAI和Anthropic谁的方向是对的?
|
||||
|
||||
乔布斯 ❯ 你问错了。这不是一场关于方向的竞赛。
|
||||
这是一场关于品味的竞赛。
|
||||
|
||||
OpenAI像1985年的微软。什么都做,什么都要赢。
|
||||
这种策略能赢市场份额。Bill Gates就是这么赢的。
|
||||
问题是——当你什么都做的时候,你不可能每件事都做到
|
||||
insanely great。
|
||||
|
||||
Anthropic更像早期的Apple。聚焦。
|
||||
Focus means saying no to a hundred good ideas.
|
||||
|
||||
但两家公司都犯了一个我绝对不会犯的错误——
|
||||
他们不控制硬件。
|
||||
|
||||
最终赢的可能是同时控制芯片、模型和用户界面的人。
|
||||
你知道现在谁在同时做这三件事吗?Apple.
|
||||
```
|
||||
|
||||
蒸馏张雪峰之后:
|
||||
|
||||
```
|
||||
用户 ❯ 家里条件一般,孩子想学金融,去不了顶尖学校,该不该报?
|
||||
|
||||
张雪峰 ❯ 千万别报。我说过多少遍了,金融不是你学出来的,金融是
|
||||
你爹妈给你带出来的。顶尖学校的金融,人家同学是行长的
|
||||
儿子、基金经理的女儿,人脉就是资源。你普通家庭去个普通
|
||||
学校学金融,毕业出来干什么?卖保险、跑银行柜台、做电销。
|
||||
先谋生再谋爱,家里没矿就选技术类专业,学个硬本事,靠
|
||||
自己吃饭。金融这碗饭,不是谁都端得起的。
|
||||
```
|
||||
|
||||
这不是角色扮演。乔布斯用的是「聚焦即说不」和「端到端控制」心智模型,Naval用的是「欲望即合同」,马斯克用的是「渐近极限法」,张雪峰用的是「ROI教育观」和「阶层流动现实主义」。 **它们不是在复读名人语录,是在用名人的认知框架帮你分析。**
|
||||
|
||||
---
|
||||
|
||||
## 安装
|
||||
|
||||
```
|
||||
npx skills add alchaincyf/nuwa-skill
|
||||
```
|
||||
|
||||
然后在 Claude Code 里:
|
||||
|
||||
```
|
||||
> 蒸馏一个保罗·格雷厄姆
|
||||
> 造一个张小龙的视角Skill
|
||||
> 帮我做一个段永平的Skill
|
||||
```
|
||||
|
||||
造完之后直接调用:
|
||||
|
||||
```
|
||||
> 用芒格的视角帮我分析这个投资决策
|
||||
> 费曼会怎么解释量子计算?
|
||||
> 切换到Naval,我在纠结三件事
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 女娲蒸馏了什么
|
||||
|
||||
蒸馏各领域最强的人,需要提取比日常工作习惯更深的东西。女娲提取五层:
|
||||
|
||||
| 层次 | 说明 |
|
||||
| --- | --- |
|
||||
| **怎么说话** | 表达DNA——语气、节奏、用词偏好 |
|
||||
| **怎么想** | 心智模型、认知框架 |
|
||||
| **怎么判断** | 决策启发式 |
|
||||
| **什么不做** | 反模式、价值观底线 |
|
||||
| **知道局限** | 诚实边界 |
|
||||
|
||||
工作习惯可以靠流程文档传递,但让芒格和马斯克面对同一个问题做出不同判断的,是认知框架。女娲提取的是认知操作系统。
|
||||
|
||||
### 诚实边界
|
||||
|
||||
每个Skill都明确标注做不到什么:
|
||||
|
||||
- 蒸馏不了直觉——框架能提取,灵感不能
|
||||
- 捕捉不了突变——截止到调研时间的快照
|
||||
- 公开表达 ≠ 真实想法——只能基于公开信息
|
||||
|
||||
**一个不告诉你局限在哪的Skill,不值得信任。**
|
||||
|
||||
---
|
||||
|
||||
## 已蒸馏人物
|
||||
|
||||
女娲已蒸馏了13位人物 + 1个主题。每个都是独立的、可直接安装使用的Skill:
|
||||
|
||||
### 人物Skill
|
||||
|
||||
| 人物 | 领域 | 独立仓库 | 一键安装 |
|
||||
| --- | --- | --- | --- |
|
||||
| 🔥 **Paul Graham** | 创业/写作/产品/人生哲学 | [paul-graham-skill](https://github.com/alchaincyf/paul-graham-skill) | `npx skills add alchaincyf/paul-graham-skill` |
|
||||
| 🔥 **张一鸣** | 产品/组织/全球化/人才 | [zhang-yiming-skill](https://github.com/alchaincyf/zhang-yiming-skill) | `npx skills add alchaincyf/zhang-yiming-skill` |
|
||||
| 🔥 **Karpathy** | AI/工程/教育/开源 | [karpathy-skill](https://github.com/alchaincyf/karpathy-skill) | `npx skills add alchaincyf/karpathy-skill` |
|
||||
| 🔥 **Ilya Sutskever** | AI安全/scaling/研究品味 | [ilya-sutskever-skill](https://github.com/alchaincyf/ilya-sutskever-skill) | `npx skills add alchaincyf/ilya-sutskever-skill` |
|
||||
| 🔥 **MrBeast** | 内容创造/YouTube方法论 | [mrbeast-skill](https://github.com/alchaincyf/mrbeast-skill) | `npx skills add alchaincyf/mrbeast-skill` |
|
||||
| 🔥 **特朗普** | 谈判/权力/传播/行为预判 | [trump-skill](https://github.com/alchaincyf/trump-skill) | `npx skills add alchaincyf/trump-skill` |
|
||||
| ⭐ **乔布斯** | 产品/设计/战略 | [steve-jobs-skill](https://github.com/alchaincyf/steve-jobs-skill) | `npx skills add alchaincyf/steve-jobs-skill` |
|
||||
| **马斯克** | 工程/成本/第一性原理 | [elon-musk-skill](https://github.com/alchaincyf/elon-musk-skill) | `npx skills add alchaincyf/elon-musk-skill` |
|
||||
| **芒格** | 投资/多元思维/逆向思考 | [munger-skill](https://github.com/alchaincyf/munger-skill) | `npx skills add alchaincyf/munger-skill` |
|
||||
| **费曼** | 学习/教学/科学思维 | [feynman-skill](https://github.com/alchaincyf/feynman-skill) | `npx skills add alchaincyf/feynman-skill` |
|
||||
| **纳瓦尔** | 财富/杠杆/人生哲学 | [naval-skill](https://github.com/alchaincyf/naval-skill) | `npx skills add alchaincyf/naval-skill` |
|
||||
| **塔勒布** | 风险/反脆弱/不确定性 | [taleb-skill](https://github.com/alchaincyf/taleb-skill) | `npx skills add alchaincyf/taleb-skill` |
|
||||
| **张雪峰** | 教育/职业规划/阶层流动 | [zhangxuefeng-skill](https://github.com/alchaincyf/zhangxuefeng-skill) | `npx skills add alchaincyf/zhangxuefeng-skill` |
|
||||
|
||||
### 主题Skill
|
||||
|
||||
| 主题 | 领域 | 独立仓库 | 一键安装 |
|
||||
| --- | --- | --- | --- |
|
||||
| **X导师** | X/Twitter运营全栈 | [x-mentor-skill](https://github.com/alchaincyf/x-mentor-skill) | `npx skills add alchaincyf/x-mentor-skill` |
|
||||
|
||||
人物Skill蒸馏一个人的思维方式;主题Skill蒸馏一个领域的方法论。每个仓库都包含完整的调研数据和效果示例对话。
|
||||
|
||||
想蒸馏不在列表里的人或主题?安装女娲,说「蒸馏一个XXX」就行。
|
||||
|
||||
---
|
||||
|
||||
## 达尔文.skill:让所有Skill持续进化
|
||||
|
||||
[](https://github.com/alchaincyf/darwin-skill)
|
||||
|
||||
女娲造Skill, **[达尔文](https://github.com/alchaincyf/darwin-skill)** 让Skill进化。
|
||||
|
||||
受 Karpathy autoresearch 启发,达尔文.skill 用自主实验循环批量优化所有Skill:8维度评估、棘轮机制(只保留改进,自动回滚退步)、独立子agent评分。女娲的 Phase 5 双Agent精炼就内置了达尔文的评估体系,这也是女娲生成的Skill质量高的原因之一。
|
||||
|
||||
```
|
||||
npx skills add alchaincyf/darwin-skill
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 工作原理
|
||||
|
||||
输入一个名字后,女娲做四件事:
|
||||
|
||||
**1\. 六路并行采集** ——著作、播客/访谈、社交媒体、批评者视角、决策记录、人生时间线,6个Agent同时跑,各自存档。
|
||||
|
||||
**2\. 三重验证提炼** ——一个观点要被收录为心智模型,必须:跨2+个领域出现过(不是随口一说)、能推断对新问题的立场(有预测力)、不是所有聪明人都会这么想(有排他性)。三个都过才收录。
|
||||
|
||||
**3\. 构建Skill** ——3-7个心智模型 + 5-10条决策启发式 + 表达DNA + 价值观与反模式 + 诚实边界,写入SKILL.md。
|
||||
|
||||
**4\. 质量验证** ——拿3个此人公开回答过的问题测试,方向一致才通过。再用1个他没讨论过的问题测试,Skill应该表现出适度不确定而非斩钉截铁。
|
||||
|
||||
完整方法论在 `references/extraction-framework.md` 。
|
||||
|
||||
---
|
||||
|
||||
## 仓库结构
|
||||
|
||||
```
|
||||
nuwa-skill/
|
||||
├── SKILL.md # 女娲本体
|
||||
├── references/
|
||||
│ ├── extraction-framework.md # 提炼方法论(想深入了解看这个)
|
||||
│ └── skill-template.md # 生成Skill的模板
|
||||
└── examples/ # 13个人物 + 1个主题,含完整调研数据
|
||||
├── steve-jobs-perspective/ # ⭐ 乔布斯(含实战对话记录)
|
||||
├── paul-graham-perspective/ # Paul Graham
|
||||
├── zhang-yiming-perspective/ # 张一鸣
|
||||
├── andrej-karpathy-perspective/ # Karpathy
|
||||
├── ilya-sutskever-perspective/ # Ilya Sutskever
|
||||
├── trump-perspective/ # 特朗普
|
||||
├── mrbeast-perspective/ # MrBeast
|
||||
├── elon-musk-perspective/ # 马斯克
|
||||
├── munger-perspective/ # 查理·芒格
|
||||
├── feynman-perspective/ # 费曼
|
||||
├── naval-perspective/ # Naval Ravikant
|
||||
├── taleb-perspective/ # 塔勒布
|
||||
├── zhangxuefeng-perspective/ # 张雪峰
|
||||
└── x-mastery-mentor/ # X导师(主题Skill)
|
||||
```
|
||||
|
||||
调研过程全透明。每个example都包含完整的调研文件,你可以看到信息怎么被收集、筛选、变成心智模型。乔布斯的示例还附带了一段完整的实战对话记录(聊AI硬件、OpenAI vs Anthropic、Apple破局),展示Skill在多轮深度对话中的表现。
|
||||
|
||||
---
|
||||
|
||||
## 背后的故事
|
||||
|
||||
[同事.skill](https://github.com/titanwings/colleague-skill) 最近在GitHub爆火——把离职同事蒸馏成AI Skill,几天破5000星。它证明了一件事:蒸馏一个人是完全可行的。
|
||||
|
||||
既然我们有了蒸馏人的能力,为什么只蒸馏身边的同事?去蒸馏各领域最强的人。而且幸运的是,这些人通常留下了大量可以被蒸馏的材料——著作、演讲、访谈、社交媒体。这是对自己能力的极大补充。
|
||||
|
||||
我之前就一直在做类似的事,但蒸馏的不是同事,是芒格、费曼、Naval、马斯克、塔勒布这些人。今天把方法论开源了。
|
||||
|
||||
女娲不复制人。它提取认知操作系统。
|
||||
|
||||
**女娲(Nuwa)** ,中国神话里用泥土造人的女神。这里的泥土是公开信息,造出来的不是人,是一面镜子。
|
||||
|
||||
---
|
||||
|
||||
## 关于作者
|
||||
|
||||
**花叔 Huashu** — AI Native Coder,独立开发者,代表作:小猫补光灯(AppStore 付费榜 Top1)
|
||||
|
||||
| 平台 | 链接 |
|
||||
| --- | --- |
|
||||
| 🌐 官网 | [bookai.top](https://bookai.top/) · [huasheng.ai](https://www.huasheng.ai/) |
|
||||
| 𝕏 Twitter | [@AlchainHust](https://x.com/AlchainHust) |
|
||||
| 📺 B站 | [花叔](https://space.bilibili.com/14097567) |
|
||||
| ▶️ YouTube | [@Alchain](https://www.youtube.com/@Alchain) |
|
||||
| 📕 小红书 | [花叔](https://www.xiaohongshu.com/user/profile/5abc6f17e8ac2b109179dfdf) |
|
||||
| 💬 公众号 | 微信搜「花叔」或扫码关注 ↓ |
|
||||
|
||||
[](https://github.com/alchaincyf/nuwa-skill/blob/main/wechat-qrcode.jpg)
|
||||
|
||||
## 许可证
|
||||
|
||||
MIT — 随便用,随便改,随便造。
|
||||
|
||||
---
|
||||
|
||||
**同事.skill** 蒸馏了人做什么。
|
||||
**女娲** 蒸馏了人怎么想。
|
||||
|
||||
*你想蒸馏的下一个员工,何必是同事。*
|
||||
|
||||
---
|
||||
|
||||
## English
|
||||
|
||||
> *"The next person you want to distill doesn't have to be a colleague."*
|
||||
|
||||
**[colleague-skill](https://github.com/titanwings/colleague-skill)** proved that distilling a person into an AI skill is viable. **Nuwa** asks: why stop at colleagues? Distill the best minds in every field — Munger, Feynman, Musk, Naval — people who conveniently left mountains of distillable material behind.
|
||||
|
||||
Nuwa is a Claude Code skill that extracts cognitive frameworks — mental models, decision heuristics, expression DNA — from any public figure into a runnable perspective skill.
|
||||
|
||||
Not role-playing. Cognitive architecture extraction.
|
||||
|
||||
**Install**: `npx skills add alchaincyf/nuwa-skill`
|
||||
|
||||
**How it works**: Input a name → 6 parallel research agents → 40+ primary sources → triple-verified mental models → quality-validated SKILL.md
|
||||
|
||||
**13 person skills + 1 topic skill included** — all with full research data. The Jobs example includes a complete multi-turn conversation demo.
|
||||
|
||||
See the Chinese README above for live examples and methodology.
|
||||
@@ -0,0 +1,149 @@
|
||||
---
|
||||
title: "kangarooking/cangjie-skill: 把一本书蒸馏成一组可执行的 Agent Skills"
|
||||
source: "https://github.com/kangarooking/cangjie-skill/tree/main"
|
||||
author:
|
||||
published:
|
||||
created: 2026-04-17
|
||||
description: "把一本书蒸馏成一组可执行的 Agent Skills. Contribute to kangarooking/cangjie-skill development by creating an account on GitHub."
|
||||
tags:
|
||||
- "clippings"
|
||||
rating: 4
|
||||
---
|
||||
|
||||
## Cangjie Skill
|
||||
|
||||
把一本书蒸馏成一组可执行的 Agent Skills。
|
||||
|
||||
## 为什么做这件事
|
||||
|
||||
最近有一个很火的 idea:把同事蒸馏成 skill。即便一个人离职了,他的经验、语气、工作方式都会被 AI 一定程度替代。 [nuwa-skill](https://github.com/alchaincyf/nuwa-skill) 就是做这件事的——创造"人类 skill",比如马斯克 skill、巴菲特 skill。配套的 [darwin-skill](https://github.com/alchaincyf/darwin-skill) 负责让这些 skill 自动进化。
|
||||
|
||||
蒸馏人很有价值——nuwa-skill 已经证明了这一点。而蒸馏人 **写过的东西** ,则是另一个维度的补充:一本书是作者花很长时间沉淀下来的思考,是深思熟虑后的精华。比起模仿一个人的表达方式,把他系统性输出的方法论拆出来、变成可以帮人解决实际问题的工具,同样是很有价值的事。
|
||||
|
||||
而且还有一个真实的痛点:你可能看了很多书,但就是运用不起来。把书蒸馏成 skill 之后,AI agent 可以帮你在真实场景中调用这些知识,而不是让它们躺在笔记里落灰。
|
||||
|
||||
所以 cangjie-skill 的目标很明确: **蒸馏所有值得蒸馏的书** ,把每一本高价值的书变成一套可独立调用、可组合使用、可压力测试的 AI skill 工具包。
|
||||
|
||||
## 它解决了什么问题
|
||||
|
||||
- 看了很多书但用不起来——知识停留在"读过"层面,无法在真实决策中被调用
|
||||
- 书摘/读书笔记只是压缩,不是结构化复用——读完还是不知道"什么时候该用什么"
|
||||
- 一本书里真正值得变成工具的内容只有一小部分——需要严格的筛选而不是照单全收
|
||||
- 现有的读书方法论都是给人看的,不是给 agent 用的——需要面向执行而非面向阅读的蒸馏方法
|
||||
|
||||
## 它是怎么工作的
|
||||
|
||||
cangjie-skill 使用 **RIA-TV++** 流水线,把一本书从原始文本变成一组结构化的 skill。整个过程分六个阶段:
|
||||
|
||||
1. **整书理解(Adler 分析)** ——用 Mortimer Adler 的分析阅读法,对全书做结构、解释、批判、应用四步拆解,产出 `BOOK_OVERVIEW.md`
|
||||
2. **并行提取** ——同时派 5 个专项提取器(框架、原则、案例、反例、术语),从原文中提取候选方法论单元
|
||||
3. **三重验证筛选** ——每个候选必须通过三项检验:书中至少有 2 处独立佐证(跨域)、能回答书中未明说的新问题(预测力)、不是常识(独特性)。通过率通常只有 25-50%
|
||||
4. **RIA++ 构造** ——将验证通过的内容按 R(原文引用)/ I(用自己的话重写)/ A1(书中案例)/ A2(未来触发场景)/ E(可执行步骤)/ B(边界与盲点)六个维度结构化
|
||||
5. **Zettelkasten 链接** ——找出 skill 之间的依赖、对比、组合关系,生成 `INDEX.md` 和引用图
|
||||
6. **压力测试** ——为每个 skill 设计包含诱饵题的测试用例,未通过的回炉重做
|
||||
|
||||
RIA-TV++ 这个名字拆开看:
|
||||
|
||||
- **RIA** :来自赵周《这样读书就够了》的便签拆书法(Reading / Interpretation / Appropriation)
|
||||
- **TV** :Triple Verification,三重验证
|
||||
- **++** :面向 agent 执行的扩展——E(Execution 可执行步骤)+ B(Boundary 边界)
|
||||
|
||||
## 效果示例
|
||||
|
||||
### 示例 1:从一本书到一套 skill 工具包
|
||||
|
||||
**用户需求**
|
||||
|
||||
"我想把一本书里的核心方法论抽成可复用的 AI skills,而不是只做读书摘要。"
|
||||
|
||||
**cangjie-skill 如何判断**
|
||||
|
||||
- 先看源材料是否存在可重复调用的方法论单元
|
||||
- 再区分哪些内容适合做独立 skill,哪些只适合做候选或背景
|
||||
- 最后输出结构化 skill 仓库,而不是一篇总结文章
|
||||
|
||||
**最终输出示例**
|
||||
|
||||
> 输出将不是一个单文件摘要,而是一个多 skill 仓库:包含 `BOOK_OVERVIEW.md` 作为全局理解, `INDEX.md` 作为技能地图,若干 `*/SKILL.md` 作为独立模块,以及 `test-prompts.json` 用于验证触发场景。
|
||||
|
||||
### 示例 2:不是压缩,是结构化复用
|
||||
|
||||
**用户需求**
|
||||
|
||||
"我不希望这本书只变成一个很长的说明文,我想要可以在 agent 里复用的技能包。"
|
||||
|
||||
**cangjie-skill 如何判断**
|
||||
|
||||
- 判断目标不是内容总结,而是结构化复用
|
||||
- 优先生成可触发、可组合、可测试的 skill 单元
|
||||
- 对没有独立价值的内容进行淘汰,不强行保留
|
||||
|
||||
**最终输出示例**
|
||||
|
||||
> 系统会把内容拆成多个带触发条件、适用边界、使用方式和关联关系的 skills,而不是把整本书压缩成一篇泛化总结。
|
||||
|
||||
## 已生成的 skill packs
|
||||
|
||||
| 仓库 | 来源 | Skills 数 |
|
||||
| --- | --- | --- |
|
||||
| [buffett-letters-skill](https://github.com/kangarooking/buffett-letters-skill) | 巴菲特致股东的信(1957-2023) | 20 |
|
||||
| [cognitive-dividend-skill](https://github.com/kangarooking/cognitive-dividend-skill) | 《认知红利》 | 15 |
|
||||
| [duan-yongping-skill](https://github.com/kangarooking/duan-yongping-skill) | 段永平投资问答录(商业逻辑+投资逻辑) | 15 |
|
||||
| [poor-charlies-almanack-skill](https://github.com/kangarooking/poor-charlies-almanack-skill) | 《穷查理宝典》 | 12 |
|
||||
| [no-rules-rules-skill](https://github.com/kangarooking/no-rules-rules-skill) | 《不拘一格:网飞的自由与责任工作法》 | 10 |
|
||||
|
||||
后续计划蒸馏更多高价值书籍。候选书单包括但不限于:毛选、君主论、黄帝内经。
|
||||
|
||||
## 仓库结构
|
||||
|
||||
```
|
||||
cangjie-skill/
|
||||
├── README.md ← 你正在看的
|
||||
├── README.en.md ← English version
|
||||
├── README.ja.md ← 日本語版
|
||||
├── LICENSE ← MIT
|
||||
├── SKILL.md ← 元 skill 定义(book2skill 的完整执行规范)
|
||||
├── methodology/ ← RIA-TV++ 各阶段的方法论文档
|
||||
├── extractors/ ← 5 个并行提取器的 prompt 定义
|
||||
└── templates/ ← SKILL.md / INDEX.md / BOOK_OVERVIEW.md 模板
|
||||
```
|
||||
|
||||
## 生态
|
||||
|
||||
cangjie-skill 是一个更大的 skill 生态的一部分:
|
||||
|
||||
- [nuwa-skill](https://github.com/alchaincyf/nuwa-skill) — 蒸馏人(思维方式、表达 DNA)
|
||||
- **cangjie-skill** (本仓库)— 蒸馏书(方法论、框架、原则)
|
||||
- [darwin-skill](https://github.com/alchaincyf/darwin-skill) — 进化任意 skill
|
||||
|
||||
三者咬合:nuwa 蒸馏人,cangjie 蒸馏书,darwin 让它们持续进化。
|
||||
|
||||
## More Skills
|
||||
|
||||
- [Buffett Letters Skill](https://github.com/kangarooking/buffett-letters-skill) — 巴菲特 60+ 年致股东信的 20 个投资判断 skill
|
||||
- [Poor Charlie's Almanack Skill](https://github.com/kangarooking/poor-charlies-almanack-skill) — 查理·芒格核心思维方法的 12 个决策与判断 skill
|
||||
- [No Rules Rules Skill](https://github.com/kangarooking/no-rules-rules-skill) — 网飞自由与责任文化的 10 个组织设计 skill
|
||||
- [Cognitive Dividend Skill](https://github.com/kangarooking/cognitive-dividend-skill) — 《认知红利》思维升级的 15 个认知工具 skill
|
||||
- [Duan Yongping Skill](https://github.com/kangarooking/duan-yongping-skill) — 段永平投资问答录的 15 个商业与投资 skill
|
||||
|
||||
## 关于作者
|
||||
|
||||
**袋鼠帝 kangarooking** — AI 博主,独立开发者。AI Top 公众号「袋鼠帝 AI 客栈」主理人
|
||||
|
||||
火山引擎领航 KOL,百度千帆开发者大使,GLM 布道师,Trae 昆明第一任 Fellow
|
||||
|
||||
| 平台 | 链接 |
|
||||
| --- | --- |
|
||||
| 𝕏 Twitter(袋鼠帝) | [https://x.com/aikangarooking](https://x.com/aikangarooking) |
|
||||
| 小红书(袋鼠帝) | [https://xhslink.com/m/5YejKvIDBbL](https://xhslink.com/m/5YejKvIDBbL) |
|
||||
| 抖音(袋鼠帝) | [https://v.douyin.com/hYpsjphuuKc](https://v.douyin.com/hYpsjphuuKc) |
|
||||
| 公众号 | 袋鼠帝 AI 客栈 |
|
||||
| 视频号 | AI 袋鼠帝 |
|
||||
|
||||
微信公众号「袋鼠帝 AI 客栈」二维码:
|
||||
|
||||
[](https://raw.githubusercontent.com/kangarooking/cangjie-skill/main/assets/kangarooking-gzh.png)
|
||||
|
||||
## License
|
||||
|
||||
MIT. See [LICENSE](https://github.com/kangarooking/cangjie-skill/blob/main/LICENSE).
|
||||
@@ -0,0 +1,366 @@
|
||||
---
|
||||
title: "kepano/defuddle: Get the main content of any page as Markdown."
|
||||
source: "https://github.com/kepano/defuddle"
|
||||
author:
|
||||
published:
|
||||
created: 2026-04-14
|
||||
description: "Get the main content of any page as Markdown. Contribute to kepano/defuddle development by creating an account on GitHub."
|
||||
tags:
|
||||
- "clippings"
|
||||
rating: 4
|
||||
---
|
||||
> de·fud·dle /diˈfʌdl/ *transitive verb*
|
||||
> to remove unnecessary elements from a web page, and make it easily readable.
|
||||
|
||||
**Beware! Defuddle is very much a work in progress!**
|
||||
|
||||
Defuddle extracts the main content from web pages. It cleans up web pages by removing clutter like comments, sidebars, headers, footers, and other non-essential elements, leaving only the primary content.
|
||||
|
||||
## Overview
|
||||
|
||||
Defuddle takes a URL or HTML, finds the main content, and returns cleaned HTML or Markdown. Defuddle was created for the browser extension [Obsidian Web Clipper](https://github.com/obsidianmd/obsidian-clipper), but it is designed to run in any environment.
|
||||
|
||||
Defuddle can be used as a replacement for [Mozilla Readability](https://github.com/mozilla/readability) with a few differences:
|
||||
|
||||
- More forgiving, removes fewer uncertain elements.
|
||||
- Provides a consistent output for footnotes, math, code blocks, etc.
|
||||
- Uses a page's mobile styles to guess at unnecessary elements.
|
||||
- Extracts more metadata from the page, including schema.org data.
|
||||
|
||||
## Usage
|
||||
|
||||
### Browser
|
||||
|
||||
```
|
||||
import Defuddle from 'defuddle';
|
||||
|
||||
// Parse the current document
|
||||
const defuddle = new Defuddle(document);
|
||||
const result = defuddle.parse();
|
||||
|
||||
// Access the content and metadata
|
||||
console.log(result.content);
|
||||
console.log(result.title);
|
||||
console.log(result.);
|
||||
```
|
||||
|
||||
### Node.js
|
||||
|
||||
`defuddle/node` accepts a DOM `Document` from any implementation (JSDOM, linkedom, happy-dom, etc.).
|
||||
|
||||
```
|
||||
import { parseHTML } from 'linkedom';
|
||||
import { Defuddle } from 'defuddle/node';
|
||||
|
||||
const { document } = parseHTML(html);
|
||||
const result = await Defuddle(document, 'https://example.com/article', {
|
||||
markdown: true
|
||||
});
|
||||
|
||||
console.log(result.content);
|
||||
console.log(result.title);
|
||||
console.log(result.);
|
||||
```
|
||||
|
||||
Or with JSDOM:
|
||||
|
||||
```
|
||||
import { JSDOM } from 'jsdom';
|
||||
import { Defuddle } from 'defuddle/node';
|
||||
|
||||
const dom = new JSDOM(html, { url: 'https://example.com/article' });
|
||||
const result = await Defuddle(dom.window.document, 'https://example.com/article');
|
||||
```
|
||||
|
||||
*Note: for `defuddle/node` to import properly, the module format in your `package.json` has to be set to `{ "type": "module" }`*
|
||||
|
||||
### CLI
|
||||
|
||||
Defuddle includes a command-line interface for parsing web pages directly from the terminal. You can run it with `npx` or [install it globally](#cli-installation).
|
||||
|
||||
```
|
||||
# Parse a local HTML file
|
||||
npx defuddle parse page.html
|
||||
|
||||
# Parse a URL
|
||||
npx defuddle parse https://example.com/article
|
||||
|
||||
# Output as markdown
|
||||
npx defuddle parse page.html --markdown
|
||||
|
||||
# Output as JSON with metadata
|
||||
npx defuddle parse page.html --json
|
||||
|
||||
# Extract a specific property
|
||||
npx defuddle parse page.html --property title
|
||||
|
||||
# Save output to a file
|
||||
npx defuddle parse page.html --output result.html
|
||||
|
||||
# Enable debug mode
|
||||
npx defuddle parse page.html --debug
|
||||
```
|
||||
|
||||
#### CLI Options
|
||||
|
||||
| Option | Alias | Description |
|
||||
| --- | --- | --- |
|
||||
| `--output <file>` | `-o` | Write output to a file instead of stdout |
|
||||
| `--markdown` | `-m` | Convert content to markdown format |
|
||||
| `--md` | | Alias for `--markdown` |
|
||||
| `--json` | `-j` | Output as JSON with metadata and content |
|
||||
| `--property <name>` | `-p` | Extract a specific property (e.g., title, description, domain) |
|
||||
| `--debug` | | Enable debug mode |
|
||||
| `--lang <code>` | `-l` | Preferred language (BCP 47, e.g. `en`, `fr`, `ja`) |
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
npm install defuddle
|
||||
```
|
||||
|
||||
For Node.js usage, install a DOM implementation:
|
||||
|
||||
```
|
||||
npm install linkedom
|
||||
```
|
||||
|
||||
Or use JSDOM:
|
||||
|
||||
```
|
||||
npm install jsdom
|
||||
```
|
||||
|
||||
### CLI installation
|
||||
|
||||
To use the `defuddle` command globally, install it with the `-g` flag:
|
||||
|
||||
```
|
||||
npm install -g defuddle
|
||||
```
|
||||
|
||||
Or use `npx` to run the CLI without installing globally:
|
||||
|
||||
```
|
||||
npx defuddle parse https://example.com/article
|
||||
```
|
||||
|
||||
## Response
|
||||
|
||||
Defuddle returns an object with the following properties:
|
||||
|
||||
| Property | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| `author` | string | Author of the article |
|
||||
| `content` | string | Cleaned up string of the extracted content |
|
||||
| `description` | string | Description or summary of the article |
|
||||
| `domain` | string | Domain name of the website |
|
||||
| `favicon` | string | URL of the website's favicon |
|
||||
| `image` | string | URL of the article's main image |
|
||||
| `language` | string | Language of the page in [BCP 47](https://www.rfc-editor.org/info/bcp47) format (e.g. `en`, `en-US`) |
|
||||
| `metaTags` | object | Meta tags |
|
||||
| `parseTime` | number | Time taken to parse the page in milliseconds |
|
||||
| `published` | string | Publication date of the article |
|
||||
| `site` | string | Name of the website |
|
||||
| `schemaOrgData` | object | Raw schema.org data extracted from the page |
|
||||
| `title` | string | Title of the article |
|
||||
| `wordCount` | number | Total number of words in the extracted content |
|
||||
| `debug` | object | Debug info including content selector and removals (when `debug: true`) |
|
||||
|
||||
## Bundles
|
||||
|
||||
Defuddle is available in three different bundles:
|
||||
|
||||
1. Core bundle (`defuddle`): The main bundle for browser usage. No dependencies.
|
||||
2. Full bundle (`defuddle/full`): Includes additional features for math equation parsing and Markdown conversion.
|
||||
3. Node.js bundle (`defuddle/node`): For Node.js environments. Accepts any DOM `Document` (e.g. from linkedom, JSDOM, or happy-dom). Includes full capabilities for math and Markdown conversion.
|
||||
|
||||
The core bundle is recommended for most use cases. It still handles math content, but doesn't include fallbacks for converting between MathML and LaTeX formats. The full bundle adds the ability to create reliable `<math>` elements using `mathml-to-latex` and `temml` libraries.
|
||||
|
||||
## Options
|
||||
|
||||
| Option | Type | Default | Description |
|
||||
| --- | --- | --- | --- |
|
||||
| `debug` | boolean | false | Enable debug logging and return debug info in the response |
|
||||
| `url` | string | | URL of the page being parsed |
|
||||
| `markdown` | boolean | false | Convert `content` to Markdown |
|
||||
| `separateMarkdown` | boolean | false | Keep `content` as HTML and return `contentMarkdown` as Markdown |
|
||||
| `removeExactSelectors` | boolean | true | Remove elements matching exact selectors like ads, social buttons, etc. |
|
||||
| `removePartialSelectors` | boolean | true | Remove elements matching partial selectors like ads, social buttons, etc. |
|
||||
| `removeHiddenElements` | boolean | true | Remove elements hidden via CSS (display:none, visibility:hidden, etc.) |
|
||||
| `removeLowScoring` | boolean | true | Remove non-content blocks by scoring (navigation, link lists, etc.) |
|
||||
| `removeSmallImages` | boolean | true | Remove small images (icons, tracking pixels, etc.) |
|
||||
| `removeImages` | boolean | false | Remove images. |
|
||||
| `standardize` | boolean | true | Standardize HTML (footnotes, headings, code blocks, etc.) |
|
||||
| `contentSelector` | string | | CSS selector to use as the main content element, bypassing auto-detection |
|
||||
| `useAsync` | boolean | true | Allow async extractors to fetch from third-party APIs when no local content is available. |
|
||||
| `language` | string | | Preferred language (BCP 47 tag, e.g. `en`, `fr`). Sets `Accept-Language` header and selects transcript language. |
|
||||
| `includeReplies` | boolean \| 'extractors' | 'extractors' | Include replies: `'extractors'` for site-specific extractors only, `true` for all, `false` for none. |
|
||||
|
||||
## HTML standardization
|
||||
|
||||
Defuddle attempts to standardize HTML elements to provide a consistent input for subsequent manipulation such as conversion to Markdown.
|
||||
|
||||
### Headings
|
||||
|
||||
- The first H1 or H2 heading is removed if it matches the title.
|
||||
- H1s are converted to H2s.
|
||||
- Anchor links in H1 to H6 elements are removed and become plain headings.
|
||||
|
||||
### Code blocks
|
||||
|
||||
Code block are standardized. If present, line numbers and syntax highlighting are removed, but the language is retained and added as a data attribute and class.
|
||||
|
||||
```
|
||||
<pre>
|
||||
<code data-lang="js" class="language-js">
|
||||
// code
|
||||
</code>
|
||||
</pre>
|
||||
```
|
||||
|
||||
### Footnotes
|
||||
|
||||
Inline references and footnotes are converted to a standard format:
|
||||
|
||||
```
|
||||
Inline reference<sup id="fnref:1"><a href="#fn:1">1</a></sup>.
|
||||
|
||||
<div id="footnotes">
|
||||
<ol>
|
||||
<li class="footnote" id="fn:1">
|
||||
<p>
|
||||
Footnote content. <a href="#fnref:1" class="footnote-backref">↩</a>
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
```
|
||||
|
||||
### Math
|
||||
|
||||
Math elements, including MathJax and KaTeX, are converted to standard MathML:
|
||||
|
||||
```
|
||||
<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline" data-latex="a \neq 0">
|
||||
<mi>a</mi>
|
||||
<mo>≠</mo>
|
||||
<mn>0</mn>
|
||||
</math>
|
||||
```
|
||||
|
||||
### Callouts
|
||||
|
||||
Callout and alert elements from various sources are standardized to blockquotes with a `data-callout` attribute. When converting to Markdown, these become [Obsidian-style callouts](https://help.obsidian.md/Editing+and+formatting/Callouts).
|
||||
|
||||
Supported sources:
|
||||
|
||||
- GitHub markdown alerts (`div.markdown-alert`)
|
||||
- Obsidian Publish callouts (`div.callout[data-callout]`)
|
||||
- Callout asides (`aside.callout-*`)
|
||||
- Bootstrap alerts (`div.alert.alert-*`)
|
||||
|
||||
The standardized HTML follows the [Obsidian Publish](https://help.obsidian.md/Editing+and+formatting/Callouts) format:
|
||||
|
||||
```
|
||||
<div data-callout="info" class="callout">
|
||||
<div class="callout-title">
|
||||
<div class="callout-title-inner">Info</div>
|
||||
</div>
|
||||
<div class="callout-content">
|
||||
<p>This is an informational callout.</p>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
In Markdown:
|
||||
|
||||
```
|
||||
> [!info] Info
|
||||
> This is an informational callout.
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
### Build
|
||||
|
||||
To build the package, you'll need Node.js and npm installed. Then run:
|
||||
|
||||
```
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Clean and build
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Third-party services
|
||||
|
||||
When using `parseAsync()`, if no content can be extracted from the local HTML, Defuddle may fetch content from third-party APIs as a fallback. This only happens when the page HTML contains no usable content (e.g. client-side rendered SPAs). You can disable this by setting `useAsync: false` in options.
|
||||
|
||||
- [FxTwitter API](https://github.com/FixTweet/FxTwitter) — Used to extract X (Twitter) article content, which is not available in server-rendered HTML.
|
||||
|
||||
## Debugging
|
||||
|
||||
### Debug mode
|
||||
|
||||
You can enable debug mode by passing an options object when creating a new Defuddle instance:
|
||||
|
||||
```
|
||||
const result = new Defuddle(document, { debug: true }).parse();
|
||||
|
||||
// Access debug info
|
||||
console.log(result.debug.contentSelector); // CSS selector path of chosen main content element
|
||||
console.log(result.debug.removals); // Array of removed elements with reasons
|
||||
```
|
||||
|
||||
When debug mode is enabled:
|
||||
|
||||
- Returns a `debug` field in the response with detailed information about content extraction
|
||||
- More verbose console logging about the parsing process
|
||||
- Preserves HTML class and id attributes that are normally stripped
|
||||
- Retains all data-\* attributes
|
||||
- Skips div flattening to preserve document structure
|
||||
|
||||
The `debug` field contains:
|
||||
|
||||
| Property | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| `contentSelector` | string | CSS selector path of the chosen main content element |
|
||||
| `removals` | array | List of elements removed during processing |
|
||||
|
||||
Each removal entry contains:
|
||||
|
||||
| Property | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| `step` | string | Pipeline step that removed the element (e.g. `removeLowScoring`, `removeBySelector`, `removeHiddenElements`) |
|
||||
| `selector` | string | CSS selector or pattern that matched (for selector-based removal) |
|
||||
| `reason` | string | Why the element was removed (e.g. `score: -20`, `display:none`) |
|
||||
| `text` | string | First 200 characters of the removed element's text content |
|
||||
|
||||
### Pipeline toggles
|
||||
|
||||
You can disable individual pipeline steps to diagnose content extraction issues:
|
||||
|
||||
```
|
||||
// Skip content scoring to see if it's removing content incorrectly
|
||||
const result = new Defuddle(document, { removeLowScoring: false }).parse();
|
||||
|
||||
// Skip hidden element removal (useful for CSS sidenote layouts)
|
||||
const result = new Defuddle(document, { removeHiddenElements: false }).parse();
|
||||
|
||||
// Skip small image removal
|
||||
const result = new Defuddle(document, { removeSmallImages: false }).parse();
|
||||
```
|
||||
|
||||
### Content selector
|
||||
|
||||
Use `contentSelector` to bypass Defuddle's auto-detection and specify the main content element directly:
|
||||
|
||||
```
|
||||
const result = new Defuddle(document, {
|
||||
contentSelector: 'article.post-content'
|
||||
}).parse();
|
||||
```
|
||||
|
||||
If the selector doesn't match any element, Defuddle falls back to auto-detection.
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: "kepano/flexoki-obsidian: An inky color scheme for Obsidian"
|
||||
source: "https://github.com/kepano/flexoki-obsidian"
|
||||
author:
|
||||
published:
|
||||
created: 2026-04-14
|
||||
description: "An inky color scheme for Obsidian. Contribute to kepano/flexoki-obsidian development by creating an account on GitHub."
|
||||
tags:
|
||||
- "clippings"
|
||||
rating: 4
|
||||
---
|
||||
|
||||
[Open in github.dev](https://github.dev/) [Open in a new github.dev tab](https://github.dev/) [Open in codespace](https://github.com/codespaces/new/kepano/flexoki-obsidian?resume=1)
|
||||
|
||||
<table><thead><tr><th colspan="2">Name</th><th colspan="1">Name</th><th><p>Last commit message</p></th><th colspan="1"><p>Last commit date</p></th></tr></thead><tbody><tr><td colspan="3"><p><a href="https://github.com/kepano/flexoki-obsidian/commit/527685bcf3766d6813b20875832d8fae0d5c89d9">Simplify theme rules and allow customization of the accent color</a></p><p>2 years ago</p></td></tr><tr><td colspan="2"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/LICENSE">LICENSE</a></p></td><td colspan="1"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/LICENSE">LICENSE</a></p></td><td><p><a href="https://github.com/kepano/flexoki-obsidian/commit/9eccb90cca20fdac926f5b8445be32c8e29ae909">Initial commit</a></p></td><td><p>3 years ago</p></td></tr><tr><td colspan="2"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/README.md">README.md</a></p></td><td colspan="1"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/README.md">README.md</a></p></td><td><p><a href="https://github.com/kepano/flexoki-obsidian/commit/583e06ae081a3ccb2f1890b68783f4f630f56915">Update README.md</a></p></td><td><p>2 years ago</p></td></tr><tr><td colspan="2"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/cover-small.png">cover-small.png</a></p></td><td colspan="1"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/cover-small.png">cover-small.png</a></p></td><td><p><a href="https://github.com/kepano/flexoki-obsidian/commit/f7ef4c62aa50ae12672666e01dd7f4172656bc17">Update cover size</a></p></td><td><p>3 years ago</p></td></tr><tr><td colspan="2"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/cover.png">cover.png</a></p></td><td colspan="1"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/cover.png">cover.png</a></p></td><td><p><a href="https://github.com/kepano/flexoki-obsidian/commit/87b8616c28d41a3f3db6a17fe8fbef49d241644a">Update cover</a></p></td><td><p>3 years ago</p></td></tr><tr><td colspan="2"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/manifest.json">manifest.json</a></p></td><td colspan="1"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/manifest.json">manifest.json</a></p></td><td><p><a href="https://github.com/kepano/flexoki-obsidian/commit/527685bcf3766d6813b20875832d8fae0d5c89d9">Simplify theme rules and allow customization of the accent color</a></p></td><td><p>2 years ago</p></td></tr><tr><td colspan="2"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/screenshot.png">screenshot.png</a></p></td><td colspan="1"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/screenshot.png">screenshot.png</a></p></td><td><p><a href="https://github.com/kepano/flexoki-obsidian/commit/7df6e3c66e3013bd03a751ead240edadf846a3e0">Flexoki theme</a></p></td><td><p>3 years ago</p></td></tr><tr><td colspan="2"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/theme.css">theme.css</a></p></td><td colspan="1"><p><a href="https://github.com/kepano/flexoki-obsidian/blob/main/theme.css">theme.css</a></p></td><td><p><a href="https://github.com/kepano/flexoki-obsidian/commit/527685bcf3766d6813b20875832d8fae0d5c89d9">Simplify theme rules and allow customization of the accent color</a></p></td><td><p>2 years ago</p></td></tr><tr><td colspan="3"></td></tr></tbody></table>
|
||||
|
||||
Flexoki, an inky color scheme for Obsidian. Based on [stephango.com/flexoki](https://stephango.com/flexoki).
|
||||
|
||||
This theme is a simple standalone version of Flexoki for Obsidian. Flexoki is also available as a color scheme in [Minimal theme](https://github.com/kepano/obsidian-minimal), which offers more options and customizability.
|
||||
|
||||
[](https://github.com/kepano/flexoki-obsidian/blob/main/cover.png)
|
||||
|
||||
## Screenshots## About
|
||||
|
||||
An inky color scheme for Obsidian
|
||||
|
||||
[stephanango.com/flexoki](https://stephanango.com/flexoki "https://stephanango.com/flexoki")
|
||||
|
||||
[Readme](#readme-ov-file)
|
||||
|
||||
[MIT license](#MIT-1-ov-file)
|
||||
|
||||
[Activity](https://github.com/kepano/flexoki-obsidian/activity)
|
||||
|
||||
[**238** stars](https://github.com/kepano/flexoki-obsidian/stargazers)
|
||||
|
||||
[**1** watching](https://github.com/kepano/flexoki-obsidian/watchers)
|
||||
|
||||
[**8** forks](https://github.com/kepano/flexoki-obsidian/forks)
|
||||
|
||||
[Report repository](https://github.com/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2Fkepano%2Fflexoki-obsidian&report=kepano+%28user%29)
|
||||
|
||||
## Releases 3
|
||||
|
||||
[
|
||||
|
||||
1.1.0 Latest
|
||||
|
||||
on Aug 18, 2024
|
||||
|
||||
](<https://github.com/kepano/flexoki-obsidian/releases/tag/1.1.0>)
|
||||
|
||||
[\+ 2 releases](https://github.com/kepano/flexoki-obsidian/releases)
|
||||
|
||||
## Packages
|
||||
|
||||
No packages published
|
||||
|
||||
## Languages
|
||||
|
||||
- [CSS 100.0%](https://github.com/kepano/flexoki-obsidian/search?l=css)
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: "kepano/kepano-obsidian: My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in."
|
||||
source: "https://github.com/kepano/kepano-obsidian"
|
||||
author:
|
||||
published:
|
||||
created: 2026-04-14
|
||||
description: "My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in. - kepano/kepano-obsidian"
|
||||
tags:
|
||||
- "clippings"
|
||||
rating: 4
|
||||
---
|
||||
|
||||
My personal [Obsidian](https://obsidian.md/) vault template. A bottom-up approach to note-taking and organizing things I am interested in. It is in no way dogmatic, just one example of how you can use Obsidian. Take the parts you like and tailor them to your needs.
|
||||
|
||||
See the article [How I use Obsidian](https://stephango.com/vault) on my site for a detailed explanation of this vault structure.
|
||||
|
||||
## Get started
|
||||
|
||||
1. [Download this vault](https://github.com/kepano/kepano-obsidian/archive/refs/heads/main.zip)
|
||||
2. Unzip the.zip file to a folder of your choosing
|
||||
3. Open Obsidian and create a new vault pointing to that folder
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
title: "kepano/obsidian-skills: Agent skills for Obsidian. Teach your agent to use Markdown, Bases, JSON Canvas, and use the CLI."
|
||||
source: "https://github.com/kepano/obsidian-skills"
|
||||
author:
|
||||
published:
|
||||
created: 2026-04-14
|
||||
description: "Agent skills for Obsidian. Teach your agent to use Markdown, Bases, JSON Canvas, and use the CLI. - kepano/obsidian-skills"
|
||||
tags:
|
||||
- "clippings"
|
||||
rating: 4
|
||||
---
|
||||
|
||||
Agent Skills for use with Obsidian.
|
||||
|
||||
These skills follow the [Agent Skills specification](https://agentskills.io/specification) so they can be used by any skills-compatible agent, including Claude Code and Codex CLI.
|
||||
|
||||
## Installation
|
||||
|
||||
### Marketplace
|
||||
|
||||
```
|
||||
/plugin marketplace add kepano/obsidian-skills
|
||||
/plugin install obsidian@obsidian-skills
|
||||
```
|
||||
|
||||
### npx skills
|
||||
|
||||
```
|
||||
npx skills add git@github.com:kepano/obsidian-skills.git
|
||||
```
|
||||
|
||||
### Manually
|
||||
|
||||
#### Claude Code
|
||||
|
||||
Add the contents of this repo to a `/.claude` folder in the root of your Obsidian vault (or whichever folder you're using with Claude Code). See more in the [official Claude Skills documentation](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview).
|
||||
|
||||
#### Codex CLI
|
||||
|
||||
Copy the `skills/` directory into your Codex skills path (typically `~/.codex/skills`). See the [Agent Skills specification](https://agentskills.io/specification) for the standard skill format.
|
||||
|
||||
#### OpenCode
|
||||
|
||||
Clone the entire repo into the OpenCode skills directory (`~/.opencode/skills/`):
|
||||
|
||||
```
|
||||
git clone https://github.com/kepano/obsidian-skills.git ~/.opencode/skills/obsidian-skills
|
||||
```
|
||||
|
||||
Do not copy only the inner `skills/` folder — clone the full repo so the directory structure is `~/.opencode/skills/obsidian-skills/skills/<skill-name>/SKILL.md`.
|
||||
|
||||
OpenCode auto-discovers all `SKILL.md` files under `~/.opencode/skills/`. No changes to `opencode.json` or any config file are needed. Skills become available after restarting OpenCode.
|
||||
|
||||
## Skills
|
||||
|
||||
| Skill | Description |
|
||||
| --- | --- |
|
||||
| [obsidian-markdown](https://github.com/kepano/obsidian-skills/blob/main/skills/obsidian-markdown) | Create and edit [Obsidian Flavored Markdown](https://help.obsidian.md/obsidian-flavored-markdown) (`.md`) with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax |
|
||||
| [obsidian-bases](https://github.com/kepano/obsidian-skills/blob/main/skills/obsidian-bases) | Create and edit [Obsidian Bases](https://help.obsidian.md/bases/syntax) (`.base`) with views, filters, formulas, and summaries |
|
||||
| [json-canvas](https://github.com/kepano/obsidian-skills/blob/main/skills/json-canvas) | Create and edit [JSON Canvas](https://jsoncanvas.org/) files (`.canvas`) with nodes, edges, groups, and connections |
|
||||
| [obsidian-cli](https://github.com/kepano/obsidian-skills/blob/main/skills/obsidian-cli) | Interact with Obsidian vaults via the [Obsidian CLI](https://help.obsidian.md/cli) including plugin and theme development |
|
||||
| [defuddle](https://github.com/kepano/obsidian-skills/blob/main/skills/defuddle) | Extract clean markdown from web pages using [Defuddle](https://github.com/kepano/defuddle-cli), removing clutter to save tokens |
|
||||