defuddle · agricidaniel — скилл для Claude Code: чистый Markdown из веб-страниц
Планирует извлечение через Defuddle и сохраняет уже готовые локальные файлы в хранилище. Сетевой очистки внутри нет — только план и захват.
npx skills add AgriciDaniel/claude-obsidian --skill defuddle -a claude-codeЧто делает defuddle
Скилл работает в двух режимах. Первый — инертный план для HTTPS-ссылки: он принимает адрес, отбрасывает учётные данные, фрагменты и непубличные хосты, а затем показывает нормализованный хост, нужный сетевой выход, политику редиректов и пометку execute: false. Второй — захват уже имеющегося локального файла HTML или Markdown в inbox/ выбранного хранилища.
Сеть здесь не выполняется. Причина простая: CLI Defuddle следует за редиректами и включает асинхронное извлечение, поэтому даже разбор локального HTML может дёрнуть сторонние ресурсы. Согласие на исходный адрес не доказывает, что все конечные точки останутся одобренными. Состояние configured означает, что исполняемый файл найден, но поведенческого верификатора к нему нет — запускать его только потому, что он обнаружен, не стоит.
Захват идёт через scripts/claude-obsidian.py: сначала capture plan, потом capture apply с закреплённой меткой времени и ID операции, а для записи — с --approved-plan-sha256 и флагом --apply. Байты ложатся в хранилище .raw/captured/ только на создание, повторная идентичная полезная нагрузка ничего не меняет. Очистка HTML, проверка метаданных и сборка страниц в эту операцию не входят.
Какие задачи решает
- очистить веб-страницу от лишнего и получить читаемый Markdown
- составить план извлечения по ссылке без сетевого запроса
- сохранить локальный HTML или Markdown в хранилище как есть
- подготовить веб-источник к последующей загрузке в вики
- проверить, какие хосты и редиректы потребует извлечение
Примеры запросов агенту
- defuddle, почисти эту ссылку и покажи план извлечения
- сделай читаемый Markdown из этой веб-страницы
- сохрани локальный файл
$VAULT/inbox/source.mdв хранилище
Как установить defuddle
1Через Skills CLI (Vercel)
npx skills add AgriciDaniel/claude-obsidian --skill defuddle -a claude-code2Вручную: положить файлы
~/.claude/skills/defuddle/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/defuddle/
1Через Skills CLI (Vercel)
npx skills add AgriciDaniel/claude-obsidian --skill defuddle -a codex2Вручную: положить файлы
.agents/skills/defuddle/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add AgriciDaniel/claude-obsidian --skill defuddle -a cursor2Вручную: положить файлы
.cursor/skills/defuddle/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install AgriciDaniel/claude-obsidian defuddle2Вручную: положить файлы
.github/skills/defuddle/SKILL.md1Через Skills CLI (Vercel)
npx skills add AgriciDaniel/claude-obsidian --skill defuddle -a gemini-cli2Командой платформы
gemini skills install https://github.com/AgriciDaniel/claude-obsidian --path skills/defuddleВручную: положить файлы
.devin/skills/defuddle/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add AgriciDaniel/claude-obsidian --skill defuddle -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора11
Другие версии defuddle
Похожие
Рядом в теме «Настройка агента: память, контекст, субагенты»
Все скиллы по теме «Настройка агента: память, контекст, субагенты» →Вопросы о defuddle
Как установить defuddle в Claude?
Выполните npx skills add AgriciDaniel/claude-obsidian --skill defuddle -a claude-code. Скилл появится по пути ~/.claude/skills/defuddle/SKILL.md.
Что делает defuddle?
Строит инертный план извлечения для HTTPS-ссылки и сохраняет уже доступные локальные файлы в хранилище. Сетевую очистку он не выполняет.
Почему извлечение по ссылке не запускается?
CLI Defuddle следует за редиректами и включает асинхронное извлечение, поэтому проверка исходного адреса не гарантирует одобренные конечные точки. Ссылка остаётся в очереди до появления проверяющего адаптера.
Исходный текст
SKILL.md · MIT
--- name: defuddle description: Plan optional Defuddle extraction and retain already available local source files through reviewed filesystem capture. Use for defuddle, clean this URL, strip page clutter, readable Markdown from a web page, or preparing a web source for later wiki ingestion. Network extraction remains unavailable until an enforcing adapter is verified. --- # Defuddle Treat Defuddle as an optional external extractor. This package supports inert URL plans and filesystem capture; it does not ship an enforcing network cleaner. Cleaning, raw capture, and wiki ingestion are separate operations. Resolve the installed product root from this skill's own location, never from the selected vault or process working directory: ```bash PRODUCT_ROOT=/absolute/path/to/installed/claude-obsidian CORE="$PRODUCT_ROOT/scripts/claude-obsidian.py" test -f "$CORE" ``` Every `../wiki/references/` link in this file resolves the same way, relative to this skill's own directory under `$PRODUCT_ROOT`, never relative to the selected vault's `wiki/` directory. Upstream flags may be checked in a separately installed `kepano/obsidian-skills` reference, but do not override this package's privacy and transaction boundary. ## Inert URL plan Accept HTTPS URLs only. Reject credentials, fragments, controls, sensitive query parameters, and non-public hosts or IP addresses. Never interpolate a URL into a shell string. Use one argv element when constructing a plan: ```bash python3 "$CORE" capture external-plan url "HTTPS_URL" python3 "$CORE" contracts --verify --capability defuddle --vault "$VAULT" ``` The plan executes no network request. Report the normalized host, required network egress, redirect policy, optional dependency, and `execute: false`. An `available` state means no executable was found. A `configured` state means an executable was discovered without a bundled behavioral verifier. Identify the manual executable and its reported reason; never run it merely because it was found. Never relabel `configured` as `verified`. ## Why execution stops here The upstream CLI inspected at commit [`556d74e8c8fd68c49912d4b11a4ae9ec04d7b2b5`](https://github.com/kepano/defuddle/tree/556d74e8c8fd68c49912d4b11a4ae9ec04d7b2b5) (checked 2026-10-17) follows redirects and enables asynchronous extraction. Even parsing a local HTML file can request additional resources or third-party fallbacks. Inspecting argv or obtaining consent for the initial URL cannot prove that every eventual destination remains approved. Do not execute the bare CLI against a URL or local HTML under this workflow. Do not silently substitute a browser, fetcher, proxy, cookies, or another runner. A future runnable adapter must enforce approved destinations after DNS and on each redirect, disable uncontrolled async/fallback traffic, constrain proxy behavior, and bound bytes, time, and subprocess output. It must retain original and final locators, exact version, approved hosts, capture hash, and mode. Behavioral tests must prove these limits before execution is offered. Consent for each destination remains required even with an enforcing adapter. Do not install tools or claim cleaning, extraction quality, or token savings. Leave the URL queued, or accept an already available local file. A local file may be retained as bytes without rendering HTML or running its scripts. ## Reviewable filesystem capture When the user asks to retain an existing local HTML or Markdown file, place it in the selected vault's `inbox/` first. Preview and apply the filesystem plan with a pinned timestamp and operation ID: ```bash python3 "$CORE" capture plan --vault "$VAULT" "$VAULT/inbox/source.md" python3 "$CORE" capture apply --vault "$VAULT" "$VAULT/inbox/source.md" \ --generated-at "$GENERATED_AT" --operation-id "$OPERATION_ID" # Set APPROVAL_SHA256 to the reviewed approved_plan_sha256 from the dry run. python3 "$CORE" capture apply --vault "$VAULT" "$VAULT/inbox/source.md" \ --generated-at "$GENERATED_AT" --operation-id "$OPERATION_ID" \ --approved-plan-sha256 "$APPROVAL_SHA256" --apply ``` This preserves source bytes in create-only `.raw/captured/` storage. It does not clean HTML, verify source metadata, or synthesize pages. Inspect the actual result and record extraction limitations. If already cleaned text is supplied, retain its known extractor/version and locator without inventing missing fields. Report the operation ID and exact changed paths. A repeated identical payload is a no-op; never overwrite immutable raw state. Use [operation-transactions.md](../wiki/references/operation-transactions.md) for custom capture drafts. Read or analyze transiently when retention was not requested. Invoke `wiki-ingest` only as a distinct requested operation.
© AgriciDaniel · MIT · AgriciDaniel/claude-obsidian