-
Notifications
You must be signed in to change notification settings - Fork 0
feat(voice-prompt): 보이스 모드 STT 입력 정규화 플러그인 — 3단 분류 + 저장소 대조 식별자 해소 #193
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
ef97e06
3dcf039
c4d14d6
9f59ac6
79a27f2
e348e1a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| { | ||
| "name": "voice-prompt", | ||
| "version": "0.1.0", | ||
| "description": "Normalize Korean voice-mode STT input before acting on it. Strips speech fillers, fixes orthography and Korean-to-English code-switching, resolves garbled identifiers (file, function, branch, skill names) against the actual repo instead of guessing, and never rewrites numbers or dates. Echoes one line of what it understood, then proceeds; gates only irreversible actions. Sibling of plaud-note-taking, which corrects archival transcripts instead of live commands." | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| { | ||
| "name": "voice-prompt", | ||
| "version": "0.1.0", | ||
| "description": "Normalize Korean voice-mode STT input before acting on it. Strips speech fillers, fixes orthography and Korean-to-English code-switching, resolves garbled identifiers (file, function, branch, skill names) against the actual repo instead of guessing, and never rewrites numbers or dates. Echoes one line of what it understood, then proceeds; gates only irreversible actions. Sibling of plaud-note-taking, which corrects archival transcripts instead of live commands.", | ||
| "author": { | ||
| "name": "YoungjaeDev" | ||
| }, | ||
| "license": "MIT", | ||
| "skills": "./skills/" | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| # voice-prompt | ||
|
|
||
| One skill, `voice-prompt`, that normalizes Korean voice-mode STT input before the session acts | ||
| on it. Typed once, it stays active until released. | ||
|
|
||
|
Comment on lines
+1
to
+5
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
영향: Claude 지침이 As per coding guidelines, Also applies to: 59-68 🤖 Prompt for AI AgentsSource: Coding guidelines |
||
| ## Why this exists | ||
|
|
||
| Korean voice mode breaks in three ways: orthography misrecognition, failed Korean-to-English | ||
| code-switching (an English identifier spoken with Korean pronunciation comes back as Korean | ||
| syllables — "로더 파일"), and speech habits landing inside the command ("어쨌든", "그냥", "뭐"). | ||
|
|
||
| Two of the three barely need a plugin. A model already ignores fillers and reads through | ||
| misspellings, so making that explicit buys consistency, not new capability. The third one is | ||
| different in kind: hearing "로더 파일", a model **guesses** a filename. It cannot know whether | ||
| `loader.py` exists without looking. That is not a comprehension failure, it is a missing action — | ||
| and a missing action is exactly what instructions can add. | ||
|
|
||
| So this plugin is not a text cleaner. It is a threshold changer. Everything it really | ||
| contributes is a decision rather than a transform: | ||
|
|
||
| | What it adds | Kind | | ||
| |---|---| | ||
| | Resolve identifiers against the repo instead of guessing | action added | | ||
| | Never rewrite numbers, dates, versions, PR/issue numbers | action forbidden | | ||
| | Echo one line of what was understood before acting | observability | | ||
| | Confirm before an irreversible action | gate | | ||
|
|
||
| ## Shape | ||
|
|
||
| ``` | ||
| plugins/voice-prompt/ | ||
| ├── CLAUDE.md | ||
| ├── .claude-plugin/plugin.json | ||
| └── skills/voice-prompt/ | ||
| ├── SKILL.md # the body | ||
| ├── references/stt-error-classes.md # error taxonomy, live-command stance | ||
| ├── references/korean-filler.md # filler classes + function-residue test | ||
| └── templates/speech-profile.md # seeded to .claude/voice-prompt/speech-profile.md | ||
| ``` | ||
|
|
||
| ## Boundary with plaud-note-taking | ||
|
|
||
| Both correct STT output, and the error distribution is the same, so the taxonomy is shared in | ||
| spirit. The discipline is not. `plaud-note-taking` treats its transcript as immutable evidence | ||
| and preserves every filler because the filler is part of the record; this skill treats its input | ||
| as a disposable command and deletes the filler because the filler is noise. Their term | ||
| dictionaries do not overlap either — one holds meeting attendees and company names, the other | ||
| holds one speaker's pronunciation habits. | ||
|
|
||
| Two plugins, not one skill with a mode flag: a body carrying both stances would need a | ||
| conditional on every rule. | ||
|
|
||
| ## Known limit | ||
|
|
||
| This is instruction-following, not interception. Nothing sits between STT and the model — a | ||
| skill cannot rewrite the incoming message, and `UserPromptSubmit` hook output arrives as | ||
| appended `additionalContext` rather than a replacement. So the normalization happens in the | ||
| model's own reasoning and carries the same reliability as any other skill: it can fade in a long | ||
| session. | ||
|
|
||
| The echo line is the tell. If it stops appearing, the skill has drifted out — re-invoke | ||
| `/voice-prompt`. That self-signal is why the echo is mandatory rather than optional, and why | ||
| this plugin ships no marker file or re-injection hook to enforce stickiness. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For a marketplace or local plugin install, this skill is exposed under the plugin namespace, consistent with the repository's existing
/github-dev:resolve-issueexample, so/voice-promptdoes not identify the added skill. Because automatic activation is explicitly disabled, users following this primary instruction cannot enable the feature; document/voice-prompt:voice-promptconsistently here, in the skill description, and in the plugin guide.Useful? React with 👍 / 👎.