Скил активируется при распознавании task-shape (3+ файлов /
>400 строк / transcript distill), не только на явной фразе.
Без этого описанный workflow «Identify candidate → ask» не
запускался у агента до явной просьбы пользователя.
Extends Karpathy LLM Wiki canon with two new artifact types alongside
existing entities/concepts/packages/sources. Inspired by community
discussion that highlighted explicit tracking of surfaced tensions and
unanswered questions as missing aggregation points in the canonical
layout — they currently get scattered into concepts/ or lost in log.md.
Scope is schema-level only — no new ingest behaviour prescribed. Policy
on when to escalate an inline `> **Противоречие:**` flag into a
contradictions/<slug>.md page (and the analogous flow for
open-questions) stays the user's call.
setup-wiki [v1.0.0 → v1.1.0, MINOR — additive page types]:
- Discovery (Phase 1) now requires 6 content dirs for `noop` mode
- Phase 2 plan blocks list new dirs in greenfield + migrate
- CLAUDE.md schema template gains two page-type entries with status
enums (contradictions: open|resolved|accepted-divergence;
open-questions: open|answered|obsolete)
- index.md template gains two empty sections
- Phase 4a .gitkeep list, Phase 4b mkdir + touch, Phase 5 verify count
(four → six dirs), Phase 6 report count all updated
- README.md layout tree + content-dirs sentence
using-wiki [v1.0.0 → v1.1.0, MINOR — additive type values]:
- Prerequisites: four → six content directories
- Page frontmatter type enum: + contradiction | open-question
- Per-type frontmatter extensions documented (status + affects/touches)
- File naming patterns: + contradictions/<slug>.md, open-questions/<slug>.md
- index.md sections-by-type list updated
- README.md mirrors SKILL.md changes
dist/: setup-wiki.skill + using-wiki.skill rebuilt.
project-bootstrap inline reference block intentionally untouched — it's
labelled "Reference (for context only — setup-wiki is the source of
truth)" and drift-tolerant by design.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drift fix from d84a0d3 — mapping для using-vds-ops был добавлен но
build-hermes.py не перепрогонялся, оставив dist-hermes/SKIPPED.md
без записи. Регенерил, SKIPPED.md теперь reflects current mapping
(pending block содержит и using-yt-tools, и using-vds-ops).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirror of using-synology-ops for Rusonyx VDS docker stack.
Pending behavioral audit before auto promotion.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Skeleton only — header + empty 6-section body. Mirror of using-synology-ops
for the Rusonyx VDS docker stack. Body fill-in is a follow-up pass.
Baseline tasks created in OpeItcLoc03/claude-skills:
- using-vds-ops-install
- using-vds-ops-hermes-mapping (mode=pending, MCP tools touched)
- using-vds-ops-test-trigger
- using-vds-ops-review (umbrella, blocked-by impl)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bug surfaced in field: agent in another session probed only legacy venv
location, found empty (post-pipx-migration), then took install-hint
verbatim and started recreating the venv we just deleted — destructive
cleanup paradox.
Three fixes:
- Add `~/.local/bin/yt-frames.exe` as known location #2 in probe chain
(between PATH and legacy venv). pipx is now recommended install per
yt-tools README; shim lives there.
- Rewrite install-hint to pipx-first (pip install --user pipx; pipx
ensurepath; pipx install --editable ~/projects/.common/lib/yt-tools).
- Add explicit 'NOT to do' rule: do NOT recreate deleted venv if
pipx-shim exists. Empty .venv/ + present pipx-shim means PATH issue
(run pipx ensurepath + restart shell), not missing package.
Failure-modes table updated to reflect three-step probe chain and the
recreate-venv anti-pattern.
Skill no longer aborts on bare `Get-Command yt-frames` miss — binaries
installed in project-local venv or winget cache (Gyan.FFmpeg_*) are
valid install sites, just not on PATH for fresh shells.
New Step 0 in both flows: probe PATH first, then known install
locations (venv Scripts/bin, winget Gyan.FFmpeg_*/ffmpeg-*-full_build/bin);
abort only if both empty. PATH-prepend pattern documented (full-path
to yt-frames.exe is insufficient — child yt-dlp/ffmpeg need prepend
too).
Failure modes table updated: removed 'restart CC session' advice —
agent can't restart itself, and resolve-fallback makes it unnecessary.
MINOR bump per project-discipline (behaviour change in resolve logic).
- skill-body-venv-invocation: venv activation documented in Prerequisites, step 0 added to flows, v0.2.2→0.2.3
- windows-powershell-path-doc-fix: README now covers both bash+PowerShell subshells, v0.1.5→0.1.6
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Prerequisites: explicit table with two options (activate venv vs full-path).
Steps: added step 0 (venv activation) to both Flow A and Flow B.
Acceptance: agent can now invoke CLI without "command not found" error.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- [using-yt-tools-skill-body-venv-invocation]: SKILL.md Prereq/Steps не упоминает venv-activation / full-path invocation; concurrent сессия упёрлась в `yt-frames: command not found`.
- [using-yt-tools-windows-powershell-path-doc-fix]: prior fix покрыл только git-bash subshell, PowerShell subshell имеет ту же restart-after-winget проблему симметрично.
Origin: real-time observation в concurrent CC сессии после /reload-plugins (vitya@DESKTOP-NSEF0UK, 2026-05-20). Local-write workaround — gitea down.
Closes finding [using-yt-tools-frames-multiline-stdout]: the previous
"Last line каждого CLI's stdout — absolute path артефакта" wording matched
yt-transcript / yt-watch reality but quietly misled callers about yt-frames,
which emits one ``Wrote: <abs path>`` line per extracted frame (designed
that way per ``yt_tools/frames.py`` docstring so streaming consumers don't
have to parse a trailing summary; ``tests/test_cli_smoke.py:81`` enforces
the prefix).
Chose spec-fix over code-fix: changing yt-frames to bare paths would break
the existing piping/scraping contract — bigger surface than the docs typo
this finding actually is. SKILL.md now spells out per-CLI stdout shape and
notes warnings/errors go to stderr.
PATCH (wording clarification, no behavior change).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[using-yt-tools-review] ⚪ → 🟢. Fresh-eyes subagent reviewer (no impl
priming) prošёл все 4 acceptance dimensions:
- Flow A PASS — URL OmJ-4B-mS-Y (Domain of Science, 11:06 en),
transcript header + paragraph segmentation OK, 3 frames at
4:23/4:41/8:16 visually consistent with chosen paragraphs.
- Flow B PASS — URL gCfzeONu3Mo (TED-Ed), 1 frame at 2:00, no
transcript dependency.
- Failure modes PASS — broken URL exit 1; --lang zz proxy для
no-captions exit 1 с available-langs hint; non-YouTube URL
«cannot extract video id».
- What NOT to do PASS — rules agent-side policy, CLI не
contradicts; --mode interval/scene flags существуют, но spec
явно их называет в prohibition (intentional).
3 nice-to-have findings зафайлены как ⚪ siblings:
- [using-yt-tools-empty-cache-dir-on-failure] — yt-transcript
mkdir до фетча captions, на abort оставляет пустую папку.
- [using-yt-tools-frames-multiline-stdout] — SKILL.md обещает
single-line EOF path, но yt-frames с N timestamps выдаёт N
строк «Wrote: <path>». Spec/CLI mismatch.
- [using-yt-tools-warning-mojibake] — yt-dlp warnings на Windows
console показывают «�» вместо unicode quotes (cp1251 vs UTF-8).
No blockers, no functional break. Закрытие по «findings зафайлены»
ветке review-acceptance.
Tasks_create через MCP сорвался на write-side (Gitea POST 404,
known bug cluster — preview OK, confirm fails); все 4 правки
сделаны через local-file edit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fill the v0.1.0 stub body. Description rewritten to document two distinct flows
(was iterative-only, even though triggers already listed targeted-frames phrases):
- Flow A — iterative-watch (transcript → pick anchors → frames): for "what's
in this video / summary / о чём ролик / video summary / youtube transcript"
- Flow B — targeted-frames (frames only, no transcript): for "посмотри 1:23 /
покажи кадр на N / что показано на N" — user already named timestamps,
transcript fetch would be pure waste
Body sections filled (6): When/Prereq/Inputs/Steps/Failure/Side/NOT — Flow A
and Flow B distinguished throughout. Failure modes table covers missing CLI,
missing yt-dlp/ffmpeg (with Windows winget+PATH note), network/private/age-
gated, subs-disabled. What NOT to do explicitly forbids the "always-iterative"
trap that the v0.1.0 description implicitly invited.
Bump version 0.1.0 → 0.2.0 (MINOR — documents new capability set). Description
744 chars (under 900-char soft budget; well below ~1024 hard limit). Installed
to ~/.claude/skills/using-yt-tools/ via scripts/install.ps1 — harness skill-
listing renders full description, not truncated to H1.
STATUS.md: closes new [using-yt-tools-skill-body-fill] 🟢 (filed+closed
in-place since this is one body-fill task, not a multi-session workstream).
[using-yt-tools-review] stays 🔵 — body-fill blocker removed, but still
blocked on [using-yt-tools-trigger-smoke-clean-session] (needs fresh CC
session). Caveat recorded: body-fill was done by implementer instead of the
'fresh agent' the review-task originally specified — explicit user approval.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closed using-yt-tools-test-trigger as **partial** — CLI e2e +
iterative-flow on 3blue1brown «Vectors, Ch.1» (fNk_zzaMoSs, 9:51 EN)
exercised the primary path: yt-transcript ✓, yt-frames ✓, Read on
3 jpgs ✓, vision-anchored answer ✓. Trigger smoke (parts 1+2)
split out — it needs a clean CC session, which this one is not.
Filed 4 new ⚪ tasks:
- transcript-paragraphs-fix — _group_paragraphs collapses dense
captions into 1 block (broken on community/auto subs without
>4s gaps); single [0:00] anchor on a 9:51 video kills the
iterative-flow primary use-case.
- frames-stderr-fix — `error: yt-dlp source download failed:`
with empty tail when ffmpeg missing; real cause swallowed.
- windows-path-doc-fix — README should note restart-shell after
`winget install Gyan.FFmpeg` (user-PATH not picked up by the
currently-running git-bash subshell).
- trigger-smoke-clean-session — 10 positive + 3 false-positive
trigger probes, requires a fresh CC session.
Review (🔵) updated: 3 baseline impl tasks all 🟢, but the
acceptance criteria for Steps / Failure modes / What NOT to do
target SKILL.md body which is still empty stub. New blocker:
second-pass body fill (separate task — not filed here).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- using-yt-tools-install: ffmpeg 8.1.1 on PATH, venv populated,
yt-tools 0.1.0 editable, 4 CLIs respond, 67/67 unit tests pass
on this Windows host.
- using-yt-tools-hermes-mapping: registered as `pending` with
intended:{mode:auto, category:research}; build-hermes.py emits
26 skills (1 pending) and SKIPPED.md lists the entry. Promotion
to `auto` gated on using-yt-tools-test-trigger 🟢.
NB: triggers/url_pattern from the task block's yaml sketch don't
match the mapping schema — they live in SKILL.md description and
Hermes picks them up automatically. Build script only consumes
mode/category/reason/intended/replace-rules.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add meta-isolation block to .gitignore to re-enable tracking of
`.claude/`, `.tasks/`, `.wiki/` etc. in own projects against
global core.excludesFile rule that hides them from forks.
Also update using-projects-meta description.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Filled all sections from source docs:
- ~/projects/.workshop/.archive/2026-05-12-using-synology-ops-skill.md
- ~/projects/.wiki/concepts/synology-ops-mcp-design.md
Sections: When to use (triggers), Inputs, Steps (4 flows),
Failure modes, Side effects, What NOT to do (mistakes + red flags).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Behavioral fire-test of trigger phrases (10 parallel general-purpose subagents,
each phrase as isolated user message, META: skills_invoked= parsed) revealed
one false-positive: «restart-loop in books-pipeline» fired the skill despite
books-pipeline not being a NAS-hosted container — static-pass prediction
confirmed (implicit NAS-context discriminator, LLM keyed on `restart-loop`
without host check).
Tuning: extended skip-rule with non-NAS hosts examples
(`books-pipeline`, `vps-*` etc. — only the 6 listed above are NAS-hosted).
Description 941 chars / 1024 limit. PATCH bump (fix only, no new triggers).
Retest of NEG#3 → PASS (subagent quoted new skip-rule). Final 10/10.
Closes [using-synology-ops-test-trigger]; unblocks [using-synology-ops-review]
(ready, baseline tasks all 🟢, but body still <пусто> stub — separate debt).
dist-hermes/mcp/using-synology-ops/SKILL.md regenerated via build-hermes.py.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>