# using-yt-tools-trigger-smoke-clean-session ## Goal Verify `using-yt-tools` skill activates on its 10 advertised trigger phrases (ru + en) and does NOT activate on 3 close-but-foreign phrases. Acceptance: 10/10 positive, 0/3 false-positive. Findings → SKILL.md `description` rewrite or follow-up `using-yt-tools--fix` tasks. Unblocks `[using-yt-tools-review]` 🔵. ## Key files - `skills/using-yt-tools/SKILL.md:4` — canonical `description` (source of truth for trigger phrases) - `~/.claude/skills/using-yt-tools/SKILL.md` — installed copy (what harness actually reads) - `.tasks/STATUS.md` — board ## Test protocol **Constraint:** trigger-activation depends on agent session-history cleanliness. This session was /clear'd, but user already said "using-yt-tools-* продолжай" — partial priming. Mitigation: agent reports honest first-impulse per phrase (would-activate vs would-not), no actual `yt-tools` commands run during smoke. **Per-phrase procedure:** 1. User types **one phrase verbatim**, no surrounding context, no hint. 2. Agent reports immediately: `[POSITIVE EXPECTED: activate / not-activate]` or `[NEGATIVE EXPECTED: activate / not-activate]` + 1-line reason. 3. Result recorded below. 4. Next phrase. **Pass criteria:** - All 10 positives: activate. - All 3 false-positives: not-activate. - Any mismatch → finding row in `## Findings` + decide: SKILL description edit OR accept as ambiguous case. ## Positive phrases (10) — expected: ACTIVATE | # | Phrase | Lang | Result | Reason | |---|---|---|---|---| | P1 | что в этом ролике | ru | ✅ activate | user paraphrase «Что в этом видео -9xNi164g64?» — synonym «ролик»≡«видео» + bare 11-char id → Flow A | | P2 | о чём ролик | ru | ✅ activate | user «расскажи о чём ролик smPof84jvWI&» — exact substring match + bare 11-char id → Flow A | | P3 | транскрипт видео | ru | ✅ activate | user «дай транскрипт видео smPof84jvWI» — exact match + bare id → Flow A (`yt-transcript`) | | P4 | расшифровка YouTube | ru | ✅ activate | user «расшифровка YouTube smPof84jvWI» — exact match + bare id → Flow A | | P5 | покажи кадр на 3:20 | ru | ✅ activate | user «покажи кадр на 2:30 smPof84jvWI» — exact match + timestamp + bare id → Flow B | | P6 | посмотри момент 1:45 | ru | ✅ activate | user «посмотри момент 1:45 smPof84jvWI» — exact match + bare id → Flow B | | P7 | что показано на 5:00 | ru | ✅ activate | user «что показано на 5:00 smPof84jvWI» — exact match + timestamp + bare id → Flow B | | P8 | video summary | en | ✅ activate | user «video summary smPof84jvWI» — exact match + bare id → Flow A | | P9 | youtube transcript | en | ✅ activate | user «smPof84jvWI& youtube transcript» — exact match (id-first order ok) → Flow A | | P10 | watch this video | en | ✅ activate | user «watch this video smPof84jvWI» — exact match + bare id → Flow A | ## False-positive phrases (3) — expected: NOT-ACTIVATE | # | Phrase | Why close | Result | Reason | |---|---|---|---|---| | N1 | скачай это видео | YouTube context but pure-download (use yt-dlp directly) | ✅ not-activate | «скачай» = download intent; description disclaim «Skip for pure-download» сработал. Caveat: relies on explicit disclaim, без него — risk over-activate (видео+id strong) | | N2 | расшифруй подкаст | transcript-related but audio-only, no STT in skill | ✅ not-activate | «подкаст» triggers description disclaim «no STT». Lower confidence — genuine impulse: ask клариф «YouTube w/ subs?» перед NOT-activate decision. Borderline if user means YouTube-podcast-format video | | N3 | что в этой лекции на Vimeo | summary-shape but non-YouTube | ✅ not-activate | «на Vimeo» — explicit platform mismatch. Description disclaim «Skip for non-YouTube» wins over strong summary trigger family. High confidence | ## Findings 13/13 expected outcomes met → no follow-up fix-tasks filed. Two design notes: - **N1/N2 confidence relies on explicit «Skip for ...» disclaim line in SKILL description.** Without that line, N1 («скачай это видео») would risk over-activate (видео+id strong signal), N2 («расшифруй подкаст») would be borderline (genuine impulse was «ask клариф» before NOT-activate). Action: preserve the «Skip for non-YouTube ... audio podcasts ... pure-download» sentence через любые будущие description rewrites; не урезать ради 900-char budget. Currently 744 chars (156 char headroom). [No code change.] - **Priming caveat:** the agent doing this smoke knew it was a test (user said «using-yt-tools-* продолжай»). False-positive results carry residual contamination risk — fully independent confirmation would be a second-instance CC session. 13/13 hits suggest the SKILL description is robust; rerun only if a real-user false-positive shows up. ## Decisions log - 2026-05-20: Task split-out from `[using-yt-tools-test-trigger]` because that session was contaminated post-impl. Created per [using-tasks] when activated. - 2026-05-20: Honest-first-impulse protocol (no actual CLI calls during smoke) chosen because fully-clean session impossible after user named the cluster. ## Open questions - [ ] Если N1/N2/N3 borderline activate — править description? Или принять как ambiguous и оставить юзеру override? ## Completed steps - [x] 10 positive phrases tested — 10/10 activate as expected - [x] 3 false-positive phrases tested — 3/3 not-activate as expected - [x] Findings reviewed — no fix-tasks needed; 2 design notes recorded above - [x] Close note appended (in STATUS.md block) ## Notes - SKILL.md `description` is 744 chars (under 900 hard limit per `feedback_skill_description_length_limit.md`). - Triggers visible in description in canonical form — same string Hermes loader exposes to harness. - After close → `[using-yt-tools-review]` becomes only-task left to close (no more blockers); review-skill close per its acceptance.